double
私のマシンのタイプは、このWikipediaの記事にlong double
対応し、次のテキストに対応していることがわかりました:x86 ExtendedPrecisionFormat。
そのためfloor(52/log2(10))
、15桁double
が正しいfloor(63/log2(10))
か、19桁long double
が信頼されている必要があります。
コード:
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
1番目の出力の17桁目と2番目の出力double
の16桁目double
が正しくないことは問題ありません。しかし、なぜそれは間違っているのlong double
ですか?long double
変数の19桁すべてを取得する方法はありますか?
long doubleを試しprintf("%.19Le\n",ld);
てみると、まったく同じ結果が得られます。
私はOpenSUSE12.1とg++4.6.2を使用しています。