私の理解によると (私がインターネットに乗ったものについて) std::numeric_limits<double>::digits10
(これdouble
は に等しい) は、処理できる15
桁数を表しているようです。double
反対側では、倍精度浮動小数点形式の範囲は まで続きます1.8*10^+308
。これは、15 桁でしか保持されない数値を表しているようです...
矛盾はどこにありますか?
私の理解によると (私がインターネットに乗ったものについて) std::numeric_limits<double>::digits10
(これdouble
は に等しい) は、処理できる15
桁数を表しているようです。double
反対側では、倍精度浮動小数点形式の範囲は まで続きます1.8*10^+308
。これは、15 桁でしか保持されない数値を表しているようです...
矛盾はどこにありますか?
...
std::numeric_limits<double>::digits10
(fordouble
は 15 に等しい) は double が処理できる桁数を表します...
より正確には、精度を損なうことなく格納できる有効桁数です。
Python での例:
1e15 == 1e15 + 1
False
1e16 == 1e16 + 1
True # loss of precision
std::numeric_limits::digits10 : 変更せずに表現できる桁数 (10 進数)。
1つは有効数字です。もう 1 つは、表現可能な数値の範囲です。したがって、次のことができます。
1.23456789012345*10^308
だがしかし
1.234567890123456*10^308
これは、有効数字15
と表現可能な範囲 の両方を示しています10^308
。