我懷疑這是像你在你的問題中暗示的浮點精度問題。
例如,請嘗試以下的javascript:
for($i = 0; $i <= 1; $i = $i + 0.5) { console.log($i + " "); }
VS
for($i = 0; $i <= 1; $i = $i + 0.05) { console.log($i + " "); }
你會看到相同的行爲,你會看到浮點不精確飼養它的頭:
0
VM4901:1 0.05
VM4901:1 0.1
VM4901:1 0.15000000000000002
VM4901:1 0.2
VM4901:1 0.25
VM4901:1 0.3
VM4901:1 0.35
VM4901:1 0.39999999999999997
VM4901:1 0.44999999999999996
VM4901:1 0.49999999999999994
VM4901:1 0.5499999999999999
VM4901:1 0.6
VM4901:1 0.65
VM4901:1 0.7000000000000001
VM4901:1 0.7500000000000001
VM4901:1 0.8000000000000002
VM4901:1 0.8500000000000002
VM4901:1 0.9000000000000002
VM4901:1 0.9500000000000003
如果你需要像這樣的浮點精確迭代,也許考慮在迭代過程中相乘,舍入和轉換爲整數。
「但這似乎有點極端」---以什麼方式?如果你明白某些數字不能精確表示,那麼如何增加不精確的數字會導致不準確的驚喜?爲了簡單起見,假設'0.5'文字的實際值(參見「最接近的可表示的」)是'0.51',現在嘗試手動評估您的代碼。 – zerkms
我懷疑這正是您提到的浮點精度問題。爲了好玩,請嘗試使用不同編程語言(例如Javascript)完全相同的代碼。出於完全相同的原因,您可能會發現完全相同的「不正確」行爲。 – adfaklsdjf
@zerkms也許我做錯了,但是當我在我的chrome javascript控制檯中嘗試代碼時,它會在達到100之前停止,並且我可以看到不精確度在踢,如我在下面的答案中所述。 – adfaklsdjf