循环显示0

时间:2014-04-24 17:22:04

标签: c++ c

我试图创建简单的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

4 个答案:

答案 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