我想出我的機器上的double
類型對應於this維基百科文章,而long double
對應於此文本:x86 Extended Precision Format。打印長雙變量的所有十進制數字
這就是爲什麼floor(52/log2(10))
或double
的15位數應該是正確的,floor(63/log2(10))
或long double
的19位數是可信的。
代碼:
int main()
{
double d=0.1;
long double ld=0.1;
std::cout.precision(19);
std::cout.setf(std::ios_base::scientific);
std::cout << d << std::endl;
std::cout << ld << std::endl;
return 0;
}
給出了輸出:
1.0000000000000000555e-01
1.0000000000000000555e-01
如果我們設置cout.precision
至16,輸出將是:
1.0000000000000001e-01
1.0000000000000001e-01
這還好吧,那17位double
第一次輸出,第十六位double
第二次輸出是不正確的。但爲什麼它不正確的long double
?有沒有辦法獲得long double
變量的全部19個正確數字?
如果我嘗試printf("%.19Le\n",ld);
長雙,我得到完全相同的結果。
我使用OpenSUSE 12.1和g ++ 4.6.2。
這是一個雙精度型。花車的末尾有'f',長'L'的兩倍(當然,情況並不重要)。 – chris
謝謝,糾正。 –
謝謝! '(long double)1.0 /(long double)10.0'沒有任何'-std'選項。 '長雙ld = 0.1L;'也行。 – Sergey