0
A
回答
2
這是浮點精度錯誤的一個很好的例子。計算機內存中不能精確表示精確值,如0.1和0.2的倍數。你會想要做使用EPSILON比較(http://en.cppreference.com/w/cpp/types/numeric_limits/epsilon)
喜歡的東西
for (float i = 1; fabs(1.5 - i) < EPSILON; i+=0.1) {
//statements
}
+0
更好,轉換爲分數和增加分子 – CoffeeandCode
0
正是由於0.1
倍數不能準確二進制提出,並存儲的實際值是近似的,可能是略低於0.1。因此,5*0.1
可能小於0.5或者可能更多(取決於如何表示浮點值)。
通常使用浮點變量(以及涉及浮點值的等式或不等式的測試)來控制循環通常是一個非常糟糕的主意。影響可能包括運行更多(或更少)預期的時間,或者 - 在某些不好的情況下 - 預計有限次數運行的無限循環。
在你的情況,你會過得更好做這樣的事情
for (int i = 0; i < 5; ++i)
{
float value = 1.0 * i*0.1;
// use value here rather than the i in your original code
}
或者,你可以使用一些測試,允許浮點不精確(如比較i - 1.5
一些值,比如機器精度) 。與此相關的是,迭代的實際數量仍然可能具有某種程度的不可預測性,特別是在涉及大量迭代的循環中(例如從1.0
到50000.0
以0.01
的步驟迭代),因爲舍入誤差可以累積或抵消在循環過程中的不同階段。
相關問題
- 1. 如何解決在c#中的循環?
- 2. 解決循環引用(C#)
- 3. 如何解決陣列中的循環?
- 4. 如何解決我在c#中的循環依賴關係?
- 5. 如何解決WordPress循環的問題?
- 6. 循環旋轉codility C++解決方案
- 7. 如何解決循環依賴
- 8. 如何解決在for循環
- 9. 如何解決這個循環?
- 10. 如何解決循環進口
- 11. 我該如何解決這個循環?
- 12. 如何解決這個無限循環?
- 13. 如何解決循環依賴問題?
- 14. 如何解決這個PHP循環?
- 15. 循環依賴...如何解決?
- 16. 如何解決這個循環包含?
- 17. 如何解決這個循環依賴?
- 18. Parfor循環不工作,如何解決?
- 19. 如何解決循環條件?
- 20. 如何解決程序循環參考?
- 21. 如何解決在cin.fail循環()
- 22. C#如何解決由EditorAttribute使用引起的循環依賴?
- 23. 解決不了的循環
- 24. C#:如何解決這個循環依賴?
- 25. 如何解決這個 「循環引用」 C#
- 26. 如何解決這個C#循環和處理代碼?
- 27. 解決循環中的承諾
- 28. 解決循環中的承諾
- 29. PHP循環解決方案
- 30. 解決重定向循環
您需要閱讀http://floating-point-gui.de/ –
如果您將1.3表示爲「0.33333333」,您必須從1減去1/3,然後小於或等於零? –