"We are back" « oc.at

Quadrieren in C++

UncleFucka 27.10.2006 - 15:40 5715 12
Posts

UncleFucka

-
Avatar
Registered: Jun 2002
Location: CH
Posts: 4737
sers

bin grad am verzweifeln.
ich versuche eine zahl a hoch b zu nehmen, aber ich bekomm dauernd einen error raus.

kann mir bitte jemand den exakten code posten? nur ein beispiel.

wenn ichs so, wie die hilfe es mir sagt, eingebe:
Code:
i=pow(double _a, double _b);

kommt ein error

wenn ich
Code:
i=pow(a, b);
eingebe, dann gehts, aber nur wenn a und b als double initialisiert werden. wenn ichs als int initialisiere gehts nicht mehr, wieso? und wie kann ichs mit int machen?

tia

// math.h ist included ;)

Burschi1620

24/7 Santa Claus
Avatar
Registered: Apr 2004
Location: Drüber da Donau
Posts: 6792
könnte daran liegen dass die funktion "pow" als rückgabewert (i) double hat, darum funzt int nicht.
müsstest in der API nachlesen

UncleFucka

-
Avatar
Registered: Jun 2002
Location: CH
Posts: 4737
i hab ich aber als int initialisiert-> er gibt mir ein warning aus das eben die kommastellen abgeschnitten werden, aber es funktioniert, aber sobald a oder b int sind hängt er sich sozusagen komplett auf mit errors.

Bowser

Addicted
Avatar
Registered: Aug 2004
Location: Austria, 1050
Posts: 492
http://www.cppreference.com/stdmath/pow.html

Das erste kann net gehen, weilst da probierst die Funktion zu initialisieren und da stimmt die Syntax net. Beim zweiten sollt er eigentlich automatisch konvertieren. Falls net einfach händisch machen mit pow( (double)a, (double)b );

Burschi1620

24/7 Santa Claus
Avatar
Registered: Apr 2004
Location: Drüber da Donau
Posts: 6792
Zitat von Uncle****a
i hab ich aber als int initialisiert-> er gibt mir ein warning aus das eben die kommastellen abgeschnitten werden, aber es funktioniert, aber sobald a oder b int sind hängt er sich sozusagen komplett auf mit errors.
jo deswegen gehts net
i muss double sein wie auf der seite da steht
Zitat
double pow( double base, double exp );

Frys_Assassin

information keeper
Avatar
Registered: Oct 2001
Location: New New York
Posts: 2503
geht das, explizite typcasting von int auf double? hab lang kein c++ mehr gemacht :)
Code:
double i = pow((double)a, (double)b);

ica

hmm
Avatar
Registered: Jul 2002
Location: Graz
Posts: 9822
wenn schon dann:

Code:
i = static_cast<int>(pow(...));

Burschi1620

24/7 Santa Claus
Avatar
Registered: Apr 2004
Location: Drüber da Donau
Posts: 6792
Zitat von Frys_Assassin
geht das, explizite typcasting von int auf double? hab lang kein c++ mehr gemacht :)
Code:
double i = pow((double)a, (double)b);

(ich weiß net wies in C++ is, aber in C . .. )
wenn du des i deklarierst mit der zeile gehts, wenn es das i schon gibt nicht

that

Hoffnungsloser Optimist
Avatar
Registered: Mar 2000
Location: MeidLing
Posts: 11342
Quadrieren geht aber einfacher.... a*a :)

UncleFucka

-
Avatar
Registered: Jun 2002
Location: CH
Posts: 4737
ja ich muss das ganze aber in eine formel einbauen, ala 10^n-1

und n ist eben variabel.

FragCool

OC Addicted
Avatar
Registered: Oct 2001
Location: WIEN
Posts: 671
Typecast in C++ gehn eben (TYPE)variable

also eben pow((double)a,(double)b);
Wie schon oben steht, der Syntax der in der Hilfe verwendet wird muss nicht der Programmiersprachen Syntax entsprechen ;)

Ist wie wenn du deine Deutschhausübung in Lautschrift machst ;)

that

Hoffnungsloser Optimist
Avatar
Registered: Mar 2000
Location: MeidLing
Posts: 11342
Zitat von Uncle****a
ja ich muss das ganze aber in eine formel einbauen, ala 10^n-1

und n ist eben variabel.

OK, dann willst du potenzieren und nicht quadrieren - halte dich an das Beispiel von Frys_Assassin.

Bedenke auch, dass "int" einen beschränkten Wertebereich hat - wenn n > 10 ist, könnte das zu unerwarteten Ergebnissen führen, falls du das Ergebnis in ein "int" stopfen willst.


Edit: Mir ist gerade ein übler Hack eingefallen:

Code: PHP
#include <stdexcept>

...

    static const int pow10[] = { 1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000 };
    int i = pow10[n > 0 && n <= 10 ? n - 1 : throw out_of_range("n is out of range")];
Bearbeitet von that am 27.10.2006, 17:54

UncleFucka

-
Avatar
Registered: Jun 2002
Location: CH
Posts: 4737
jo, eh klar. thx leute!
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz