fmod() liefert falsches Ergebnis...

#367984
Lesenswert?

Ach noch was. Laut der manpage ...

> Die Funktion fmod() berechnet den Rest der Division von x durch y.
> Dies ist der Wert x - n * y, wobei n der auf die nächst größere
ganze
> Zahl gerundete Wert von x durch y ist.

Paßt 'floor' nicht zu 'nächst größere ganze Zahl'. wobei das in der
Manpage wohl eher falsch ist.

Grüße, Freakazoid
#367986
Lesenswert?

So. Es kommt nur 7 raus und das ist gut so. Du interpretierst bestimmt
das Ergebnis falsch. gibst du es denn direkt aus?

<C>
#include <stdio.h>
#include <math.h>

int main(void)
{
    double x,y;
    x=47;
    y=10;
    double res = fmod(x,y);
    printf("%f", res);
    exit(0);
}
</C>

ergibt jedenfalls: 7.000000

Grüße, Freakazoid
#367989
Lesenswert?

Ich denke man kann jedes Zahlensystem nehmen mit Basis>7 ;-)
z.B. Oktal
fmod(47oct,10oct) => fmod(39,8) => 4 Rest 7
Basis 9: fmod(47,10) => fmod(43,9) => 4 Rest 7
...

Vermutlich wird das Ergebnis nicht direkt ausgegeben, sondern so
weiterverarbeitet daß er auf einen falschen Wert schließt.

Grüße, Freakazoid
Gast #367990
Lesenswert?

Meine Glaskugel behauptet, daß Max das Ergebnis fälschlicherweise
einfach nach int konvertiert und das dann ausgibt. Kleine
Rundungsfehler in der Fließkommaberechnung sorgen dafür, daß sowas wie
6,9999999 rauskommt. Die Konvertierung hackt dann die Nachkommastellen
ab, und es kommt 6 raus.
Allerdings ist meine Glaskugel seit der letzten Reparatur nicht mehr
das, was sie mal war. Hätte Max Quellcode gepostet, bräuchte ich sie
auch gar nicht.
Gast #367993
Lesenswert?

Mit meinem Tip hättest Du nur 0.001 addieren müssen; ist also viel
sparsamer :-)

Letzlich ist nicht die fmod()-Funktion fehlerbehaftet, sondern die
Wandlung von float->int, wie immer Du sie ausgeführt hast.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren