Betrachten Sie diesen Code:
%Vor%Warum läuft der Code in einer Endlosschleife?
Warum wirft der Compiler keine Ausnahme?
Ein Double hat eine variierende Genauigkeit, d. h. eine feste Anzahl von signifikanten Bits.
Eine double / float Zahl (Fließkommazahl) besteht aus einem Exponenten und einer Mantisse (vgl. den IEEE754 Standard ). Die Logik besagt, dass man bei größeren Zahlen keine hohe Genauigkeit für kleine Zahlen benötigt, während man für kleine Zahlen eine hohe Genauigkeit benötigt. So kann es vorkommen, dass d==d+1
wahr ist, da +1
nichts für große Zahlen tut (das ist auch ein Grund, warum man nicht verwenden sollte Fließkommazahlen für die Darstellung von Geld ; auch der Vergleich von Fließkommazahlen ist problematisch, da 4*0.1!=0.4
in Abhängigkeit von der Implementierung und möglichen Rundungsfehlern wahr sein kann. Dies ist im IEEE754 Standard definiert und wird daher keine Ausnahme auslösen (außerdem können Compiler Warnungen oder Fehler ausgeben , aber keine Ausnahmen).
Das steht im Gegensatz zu Ganzzahlen, die immer eine Genauigkeit von 1
haben. Wenn Sie also große Zahlen mit einer Genauigkeit von 1 verarbeiten müssen, müssen Sie in Erwägung ziehen, BigInteger Implementierungen oder verwenden Sie decimal
mit einem festen Satz von Dezimalziffern und garantiert Präzision.
Tags und Links c#