2013-12-11 33 views
2

當我使用ATAN函數從CMATH和數學上的一個浮點數,我似乎得到不同的答案:CMATH和math.h中給出不同的答案

#include <cmath> 
#include <math.h>                    

#include <iostream>                
#include <iomanip>                

int main() {                 
    std::cout << std::setprecision(20) << atan(-0.57468467f) << std::endl; 
    std::cout << std::setprecision(20) << std::atan(-0.57468467f) << std::endl; 

    // I get: 
    // -0.52159727580733605823 
    // -0.52159726619720458984 
} 

爲什麼會出現這種情況?兩個庫有不同的執行方式嗎?

+1

我願意賭一個人必須把它轉換成雙。 – chris

+0

您正在使用哪種編譯器? –

+0

我正在使用g ++ 4.7 – Peter

回答

7

math.hatan需要一個雙重並返回一個雙,但cmath的過載,使得float參數(如這裏使用的)將被用作浮法和產生float結果。因此,輸出差異來自使用兩種不同的浮點類型。要使它們使用相同類型,請刪除數字末尾的f或將第一個atan更改爲atanf

+1

或者使用'tgmath.h'。 –

+0

換句話說,在第一行中,我正在打印一張雙面打印文件,並在第二行打印一個浮動文件? – Peter

+0

@Peter:是的...... – jwodder

相關問題