2013-08-06 76 views
-1

我真的不能換我的頭周圍的事實,這個代碼給出了2個結果相同的公式:同樣的浮點運算,不同的結果

#include <iostream> 
#include <cmath> 

int main() { 
    // std::cout.setf(std::ios::fixed, std::ios::floatfield); 
    std::cout.precision(20); 
    float a = (exp(M_PI) - M_PI); 
    std::cout << (exp(M_PI) - M_PI) << "\n"; 
    std::cout << a << "\n"; 
    return (0); 
} 

我真的不認爲IEEE 754浮點點表示在這裏扮演着重要角色...

回答

3

第一個表達式(即(exp(M_PI) - M_PI))是double,第二個表達式(即a)是float。即使也沒有精度的20個十進制數字,但float的精度比double少得多。

+0

時間與浮點系統花了,我忘了在C++中,偉大的其他的基本類型! – user2485710

+0

@EricPostpischil什麼?你能解釋一下嗎? – user2485710

+0

@ user2485710:「第一個表達式」我指的是'exp(M_PI) - M_PI'。我將編輯帖子。 –

2

因爲M_PIdouble型的,所以更改adouble,你會有同樣的結果:

#include <iostream> 
#include <cmath> 

int main() { 
    // std::cout.setf(std::ios::fixed, std::ios::floatfield); 
    std::cout.precision(20); 
    double a = (exp(M_PI) - M_PI); 
    std::cout << (exp(M_PI) - M_PI) << "\n"; 
    std::cout << a << "\n"; 
    return (0); 
} 
相關問題