Funktion berechnet Exponenten falsch
-
Ich habe nen kleinen Parser für mathematische Ausdrücke, jedoch berechnet das
ganze die Exponenten falsch, es liefert bei 2^2 z.B. 8 also das doppelte bei 3^3 82 usw.Hier die Funktion, der Fehler muss, wohl bei der for-schleife liegen, aber wüsste
nicht was da falsch istvoid eval_exp4 (double *answer) { double temp, ex; register int t; eval_exp5 (answer); if (*token == '^') { get_token (); // Nächstes Zeichen holen eval_exp4 (&temp); // Wenn jemand meint er muss 2^2^2 schreiben ^^ ex = *answer; // Exponent speichern if (temp == 0.0) { *answer = 1.0; return; } for (t = temp; t >> 0; t--) *answer = (*answer) * (double) ex; } }
-
for (t = temp; t >> 0; t--) *answer = (*answer) * (double) ex; ^ das sieht nicht geplant aus!
-
fubar schrieb:
for (t = temp; t >> 0; t--) *answer = (*answer) * (double) ex; ^ das sieht nicht geplant aus!
Was sollte da denn anstelle von dem stehen?
Habe das so abgeschrieben und mich schon gefragt was es tut.Bin noch blutiger Anfänger, der gerade noch vor seinen Lehrbüchern sitzt
-
for (t = temp; t > 0; t--) *answer = (*answer) * (double) ex;
würde ich jetzt mal behaupten.
Kann aber auch sein, daß ich völlig daneben liege
-
Ne ist immernoch der gleiche Fehler.
Ich schließe auch aus, dass es an einer anderen Funktion liegt, da diese sich
bei 2^2 nicht irren kann.Mit
for (t = temp; t > 1; t--) *answer = (*answer) * (double) ex;
funktioniert es, aber bin mir nicht sicher ob ich so nur nen Fehler irgendwo anderst
behoben habe.
Würdest du dir mal das gesamte Programm anschauen, wenn ich es hochlade?
-
for (t = (temp-1); t > 0; t--) *answer = (*answer) * (double) ex;
Ergibt aber nur bei temp \in Z das richtige Ergebnis. Nimm daher besser pow().
(t >> 0) ist t und meint daher (t != 0).
-
\aleph_0 schrieb:
for (t = (temp-1); t > 0; t--) *answer = (*answer) * (double) ex;
Ergibt aber nur bei temp \in Z das richtige Ergebnis. Nimm daher besser pow().
(t >> 0) ist t und meint daher (t != 0).
Kannst du mir das genau erklären, also einmal das was du oben wegen dem pow ()
meintest und einmal weshalb t >> 0 t != 0 entspricht?
-
Der Operator >> schiebt das Bitpattern, das vor dem Operator steht und die Anzahl Bits, die hinter dem Operator steht. Beispiel: 0110010 >> 1 = 0011001.
pow() ist, glaube ich, eine Fuktion, welche in math.h definiert ist. Schau mal in Deinem Buch nach. Muesste drin stehen.
-
Die Funktion pow ansich kenne ich ja, ich verstehe nur nicht, was an meiner for-schleife
schlecht ist.Kannst du das mit dem Bitpattern nochmal erklären?Versteh gerade nicht wieso, die
verschiebung von 0 nach rechts != 0 entspricht, bei ner 00000000 sieht man natürlich
nichts, ist aber prinzipiell möglich oder?