Modulus Operation führt zu Berechnungsfehler

Mit der Modulus-Operation MOD(x;y) möchte ich eine Entscheidung treffen. Dabei ist mir in CALC Version: 6.4.6.2 (x64) aufgefallen das für

MOD(40730;4) = 2

ein anderes Ergebnis berechnet wird als für

MOD(407,30*100;4) = 1,99999999999272

Dabei ist es gleichgültig, ob die Multiplikation x = 407,30*100 innerhalb der Modulus-Operation MOD(x;4) berechnet wird, oder außerhalb in einer eigenen Zelle, von deren Ergebnis ich die MOD-Operation in einer anderen Zelle durchführe.

Erst wenn ich die Multiplikation mit x = ROUND(407,30*100) runde, wird für die Modulus-Operation MOD(x;4) das richtige Ergebnis “2” errechnet. Auch bei der Rundung ist es gleichgültig, ob ich diese innerhalb der Modulus-Operation, oder außerhalb in einer eigenen Zelle ausführe, von deren Ergebnis ich die MOD-Operation in einer anderen Zelle durchführe.

Kann jemand das Verhalten erklären?

Calc rechnet grundsätzlich mit 64bit Fliesskomma-zahlen, für die Mantisse bleiben 53|52bit übrig, das entspricht ca. 14 signifikanten Dezimalstellen.
Du wirst wohl mit gerundeten Werten arbeiten müssen.
(in der Theorie sind modulo-operationen eh nur auf Ganzzahlen sinnvoll)
hier gibts dazu etwas Hintergrundinformation

Eigentlich geht es hier um jährliche Zahlungsbeträge, die in vier Quartalszahlungen aufgeteilt werden sollen. Wenn ich einen Euro-Betrag über die Multiplikation mit 100 in einen Cent-Betrag umrechne, erhalte ich augenscheinlich eine Ganzzahl, die sich für die MOD-Operation eignet. Auch wenn ich eine Darstellung als Währung oder Ganzzahl wähle, wird intern weiterhin mit den Fließkommazahlen gerechnet.
.
Für die MOD-Operation verwendet CALC folgende Rechenvorschrift:
.
MOD(x,y) = x - y * INT(x/y))
.
In diesem Beitrag wurde dieser Präzisionsfehler bei einer einfachen Subtraktion =2555,79-2490,43 besprochen. Im Allgemeinen soll die Funktion ROUNDSIG mit einer Rundung auf signifikante Stellen helfen. Bei meinem Beispiel eines fünfstelligen Centbetrags, aufgeteilt in 4 Teilbeträgen, würde eine Beschränkung auf 7 signifikante Stellen ausreichen.
.
Da ich bei meiner Anwendung der MOD-Operation die Operanden nur natürliche Zahlen sind, und das Ergebnis nur eine natürliche Zahl sein kann, kann ich alternativ die implementierte MOD-Funktion wie folgt ersetzen:
.
MOD(x,y) = ROUND(x - y * INT(x/y));0)
.
Ist das so machbar, oder habe ich hier etwas übersehen?

=ROUND(MOD(x;y))