2017-02-22 2 views

Antwort

1

Dies ist aufgrund der Tatsache, dass binäre Gleitkomma nicht sehr gut in eine Dezimal-Darstellung übersetzt. Unter der Annahme, 64 bit IEEE754 Gleitkomma:

Der nächste Gleitkommazahl bis 0,1 ist 0,1000000000000000055511151231257827021181583404541015625

Der nächste Gleitkommazahl bis 10,1 ist 10,0999999999999996447286321199499070644378662109375

Man kann sehen, dass die dezimalen Teile im wesentlichen unterschiedlich sind, so ein exakter Vergleich wird zwangsläufig fehlschlagen.

Es ist schwierig, hier Abhilfe zu schaffen, da dies stark von Ihrem speziellen Anwendungsfall abhängt. (Instinct schlägt mir vor, dass man eine additive Toleranz von 1e-13 vergleichen könnte).

+0

Als Addendum können Sie auf 1 Dezimalstelle runden, um diese Ungleichung zu vermeiden. 0.1 %% 1 == round (10.1 %% 1, 1) 'ist TRUE. –

+2

'all.equal' zeigt diese ebenfalls als gleich an. –

Verwandte Themen