我试图创建简单的while循环,直到我的变量为0。 所以我创建了一个
do
{
x = x + 0.001;
cout << x0 << endl;
} while (SOME_CALCULATION != 0);
一切正常,直到我的循环达到0然后我得到7.63278e-017而不是0。
循环示例:
result: -0.003
result: -0.002
result: -0.001
result: 7.63278e-017
result: 0.001
result: 0.002
result: 0.003
答案 0 :(得分:3)
做类似的事情:
double epsilon = 0.00001;
do
{
x = x + 0.001;
cout << x0 << endl;
} while (abs(SOME_CALCULATION) > epsilon);
答案 1 :(得分:2)
您可能需要考虑将其重写为
x = -3;
do
{
x = x + 1;
cout << x0 / 1000 << endl;
} while (SOME_CALCULATION != 0);
对于x
现在是整数而不是小数浮点值这一事实,需要调整SOME_CALCULATION - 也许复制计算中的x0 / 1000
会起作用。
分享并享受。
答案 2 :(得分:1)
某些实数无法在浮点数中精确表示(例如,1.0/3.0
)。结果,引入了舍入误差,并且可以以令人惊讶的方式累积。查看this link了解详情。
根据您的算法,一个简单的解决方法可能是检查<=0
而不是==0
。通常,如果您发现自己检查浮点值的等效性,则应该三思而后行,并确保使用指定的类型可以准确表示所有可能的值。
答案 3 :(得分:0)
解决方法:使用long或int变量并在输出前转换为double:
#include <iostream>
using namespace std;
main()
{
int x=-3;
do
{
x = x + 1;
cout << ((double)x)/1000 << endl;
} while (x < 4);
}
输出:
-0.002
-0.001
0
0.001
0.002
0.003
0.004