Hallo, ich bekomme mit fmod(47,10) 6 als Ergebnis, obwohl 7 richtig wäre. Fmod(32,10) liefert korrekt 2 zurück. Was mache ich da falsch? Gruß Mustermann
Die Lösung ist im beiliegeneden LabVIEW-Programm (als jpg-Datei). Vielleicht findet jemand an dieser Programmiersprache gefallen. Gruss Fritz123
Wieso Lösung? Du hast auch 2 und 7 raus. Der OP bemängelt aber, daß bei ihm '6' rauskommt. confused Grüße, Freakazoid
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
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
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
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
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.
Er schreibt ja nichtmal, für welche Umgebung (Prozessor, Bibliothek, GCC-Version) das überhaupt passiert, und bei seiner Geburt haben sie offenbar aus Versehen das Muster der Geburtsurkunde beim Standesamt eingereicht statt des richtigen Exemplars...
Hehe nun mal langsam... Habe den Tip bekommen, zu der zu fmod'enden Zahl 0.5 hinzuzuaddieren, weil sonst abgerundet wird. Auf jedenfall geht es damit.
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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.