Vordefinierten Wurzel-Funktion, ohne mit sqrt() aus math.h in C
Hausaufgaben Frage:
- Cygwin GNU GDB
- Cygwin GNU GCC
Versuchen, die Länge der hypotenuse C aus der Quadratwurzel der Eine macht der 2 und B macht der 2.
Beispiel Eingang:
Geben Sie die Länge von zwei Seiten eines rechtwinkligen Dreiecks: 2.25 8.33
Antwort:
Die Länge der hypotenuse ist: 8.628523
- Frage:, wenn ich geben Sie die gleichen Eingaben wie oben, das Ergebnis ist nicht das gleichen - Ausgabe ist 19.84.9596
Voll code unten:
float squareRoots(float *s)
{
float cx;
float nx;
float e;
cx = 1;
nx = (cx +*s/cx)/2;
e = nx - cx;
cx = nx;
if (e*e > 0.001)
{
nx = (cx +*s/cx)/2;
return nx;
} else {
return nx;
}
}
float hypotenuse(float *a, float *b)
{
float c;
//raise a to power of 2
*a = (*a * *a);
*b = (*b * *b);
//add a and b
float y = *a + *b;
c = squareRoots(&y);
return c;
}
int main()
{
float x,y;
printf("Enter the length of two sides of a right-angled triangle:");
scanf("%f %f", &x, &y);
float k=hypotenuse(&x,&y);
printf("The length of the hypotenuse is: %f", k);
exit(0);
}
- Warum auf der Erde Sie übergeben Zeiger auf Schwimmern, die statt der übergabe von Wert?
- Ich Stimme zu; in Anbetracht, dass der code geändert wird, die Werte zu, es ist ziemlich schrecklich.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Der square-root-Algorithmus sind Sie (sein soll?) mithilfe aufgerufen Newton ' s Methode. Ihre if-Anweisung, sollte eine while-Schleife.
Ersetzen
mit einer while-Schleife, die kontinuierlich das gleiche macht, sondern umfasst auch die Neuberechnung e.
Möchte ich Ihnen den funktionierenden code, aber Sie sagte, das ist eine Hausaufgabe. Wenn Sie nicht bekommen kann es arbeiten, poste deinen neuen code und ich werde glücklich sein zu helfen, Sie zu beheben.
Wollen eine super-duper-square-root-Implementierung? Check-out John Carmack ' s magic square root von Quake III.
Ich die Antwort 8.628522469, d.h. 8.628522.