C++ 输出中x的奇怪值

C++ 输出中x的奇怪值,c++,C++,我试图得到一些计算结果,但当x等于零时,它会输出一些奇怪的数字。问题可能是什么 #include <iostream> #include <math.h> using namespace std; void main() { const int N = 100; int i; double x, h, a = -1.0, b = 1.0, y[N+1];

我试图得到一些计算结果,但当x等于零时,它会输出一些奇怪的数字。问题可能是什么

 #include <iostream> 
    #include <math.h>  
    using namespace std;
    void main() 
    { 
        const int N = 100;  
        int i;  
        double x, h, a = -1.0, b = 1.0, y[N+1];  
        h = (b - a)/N; //h=0.02
        for (i = 0, x = a; i <= N; i++, x += h)  
        { 
            if (x == 0) // When x is 0

            {
                cout << x << '\t' << "0.00" << endl;
                continue;
            }
            y[i] = exp(-x*x);  
            cout << x << '\t' << y[i] << endl; 
        }


    }
#包括
#包括
使用名称空间std;
void main()
{ 
常数int N=100;
int i;
双x,h,a=-1.0,b=1.0,y[N+1];
h=(b-a)/N;//h=0.02

对于(i=0,x=a;i这可能是由于将
double
值与0进行比较造成的。您应始终将
double
值与公差进行比较,即

if (abs(x)  < 0.0001) 

您可以使用任何可接受的最小值而不是0.0001。有关更多详细信息,请参阅。

不要使用==来比较浮点数6.17562e-016不是一个“奇怪的数字”。这是一个非常小的值。表示此值的另一种方法是0.000000000000000617562。但它不是那么方便。或者干脆
if(abs(x)<0.0001)<代码> >代码0 > X/<代码>而不是<代码> x>代码>好的评论。我修正了这个问题。你真的阅读了你链接到的问题吗?因为第一个问题解释了为什么<代码>问题被链接到要考虑的OP,并解释一个ε值的概念。应用,包括所有必要的转换和警告。当然,我阅读了链接的问题。第一个答案是一个伟大的帖子,任何人在考虑基于epsilon的比较时,都可以考虑这个解决方案,所以我将它链接到这里,让OP来衡量。我不认为我知道这个函数的所有预期用途,所以我引导读者对这个问题进行更全面的讨论。
if (x == 0)