Quadratwurzel ziehn
-
Hi,
was ist an diesem Algorithmus falsch??int main()
{
double a=10;double x0 = 3.0, x1, x2, x3;
x1= 1/2*(x0+a/x0);
x2= 1/2*(x1+a/x1);
x3= 1/2*(x2+a/x2);printf("%lf", x3);
getch();
}Ich kriege als Ergebniss immer diese merkwürdige zahl "-1.#ND00"
-
lass mal das 1/2 weg und schreib 0.5
1/2 = 0
was du willst ist wohl double(1)/double(2) oder so was?
-
thx 4 answer
-
sollte das problem weiter auftreten: (bsp)
int a; float b; float c; c = a/b;
dann nimm:
int a; float b; float c; c = static_cast<float>(a)/b
-
Für dieses Beispiel brauchst du aber keinen Cast, das funktioniert auch ohne.
-
War ja auch nur so mal...
static_cast<float>(1);
EDIT
@zero100: Bitte benutze ab sofort für Listings die cpp-Tags vom Forum. Danke.
-
ein 1.0/2.0 oder 1f/2f tuts auch
-
Das denke ich auch. Schon allein der Lesbarkeit wegen.
-
kruemel0809 schrieb:
ein 1.0/2.0 oder 1f/2f tuts auch
Und was machst du, wenn du kein Literal hast?
Es bringt hier nichts, irgendwelche Casts zu verwenden. float hat nunmal eine höhere Priorität als int. Deshalb wird ein 'int / float' immer als 'float / float' ausgewertet.
-
groovemaster schrieb:
float hat nunmal eine höhere Priorität als int. Deshalb wird ein 'int / float' immer als 'float / float' ausgewertet.
Wie sind denn da die Prioritäten bei anderen Datentypen?