1
使用i686-apple-darwin10-g ++ - 4.2.1在Mac OS X 10.6.2,Intel上編譯並使用-arch x86_64標誌進行編譯,我只是注意到,雖然......實際長雙精度與std :: numeric_limits不一致
std::numeric_limits<long double>::max_exponent10 = 4932
...如預期,在很長的雙實際上是設置爲與指數超過308的值,它成爲INF - 即在現實中,它只有64位精度,而不是80bit。
此外,sizeof()
顯示長雙打爲16字節,他們應該是。
最後,使用<limits.h>
給出與<limits>
相同的結果。
有沒有人知道差異可能在哪裏?
long double x = 1e308, y = 1e309;
cout << std::numeric_limits<long double>::max_exponent10 << endl;
cout << x << '\t' << y << endl;
cout << sizeof(x) << endl;
給
1E + 308 INF
太棒了,謝謝。 不幸的是,在我注意到pow()函數的返回值發生這種情況後,我只是使用文字作爲測試用例,即使是非常小心的打字。 感謝上帝,它不是一個編譯器問題! – dmb 2010-04-02 07:39:03
是的,可悲的是,pow((long double)2,1020)= 1.12356e + 307和pow((long double)2,1030)= inf ...任何想法? – dmb 2010-04-02 07:51:51
@dmb:有'pow'的3個變種。 'pow'以'double'操作。你需要'powl'。 – kennytm 2010-04-02 07:53:50