2017-03-07 73 views
-1

我试图得到一些计算结果,但是当x等于零时,它会输出一些奇怪的数字。问题可能是什么?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; 
     } 


    } 

Problem part of output

+3

不要使用==比较浮点数 – JGroven

+1

6.17562e-016不是“奇怪的数字”。这是非常小的价值。另一种表示此值的方法是0.000000000000000617562。但它并不那么方便。 – Ilya

回答

1

这可能是由double值进行比较,以0您应该总是比较double值的公差,即引起,

if (abs(x) < 0.0001) 

,而不是

if (x == 0) 

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

+0

或简单地'if(abs(x)<0.0001)'。 –

+0

为什么你写'0 - x'而不是'x' –

+0

好评。我解决这个问题。 – tjcertified