fmod() liefert falsches Ergebnis...

#367984
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
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
Gast #367988
Hallo
(47hex,10hex)=7hex , ich habe leider nicht so genau gelesen, dass
das Ergebnis vom Max mit dem Wert 6 bemängelt wurde.
Mein Beitrag ist offensichtlich doch nicht die Lösung
Fritz123
#367989
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
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
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

Eine eigene Frage? Dieser Thread ist über 20 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.