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
Gast
#367982
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
Gast
#367985
Was bekommst Du bei fmod(47.001,10) heraus ?
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
@Egon: fmod(47.001,10)=7.001000
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
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.
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.
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
Bitte melde dich an, um einen Beitrag zu schreiben.
