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,然后小于或等于零? –