Dieser Code wird niemals die Schleife verlassen.
Der Grund dafür ist, dass das Hinzufügen von 1
zu einer ausreichend großen double
-Nummer seinen Wert nicht ändert:
Wenn der Wert von double
der positiven Unendlichkeit ausreichend nahe kommt, müssen Sie eine Zahl weit über 10 200 hinzufügen, um Ihren großen doppelten Änderungswert zu erhalten und% co_de zu werden %.
Der Grund dafür ist, dass POSITIVE_INFINITY
für große Zahlen steht. Sie verwendet eine kurze Mantisse , um die höchstwertigen Stellen des Werts darzustellen, und einen Exponenten, der angibt, wo der Bruchpunkt platziert werden soll. Bei sehr großen Zahlen ist der Exponent im Wesentlichen ein Hinweis darauf, wie viele Nullen nach der binären Darstellung der Mantisse hinzugefügt werden müssen.
Um den Wert für double
number durch Addition zu ändern, müssen Sie eine Zahl hinzufügen, die mindestens so groß wie das niedrigstwertige Bit der Mantisse ist. Sobald der binäre Exponent über 48 steigt, wird die kleinste Zahl, die Sie hinzufügen müssen, damit das Ergebnis anders ist, 2, was bedeutet, dass double
den Wert nicht mehr ändern würde.
Irgendwann wird i++
keinen Effekt mehr haben, denn für sehr große Werte von i
sind aufeinanderfolgende double
-Werte weit voneinander entfernt.
Daher ist es eine Endlosschleife.
Um zu beweisen, dass es double
Werte gibt, für die i == i + 1
Folgendes versuchen:
Es druckt
%Vor%