2017-03-07 48 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