回答編集履歴
2
追記
answer
CHANGED
@@ -5,3 +5,6 @@
|
|
5
5
|
DBL_MAXは 1.11111...(52ビット) * 2^1023 です。
|
6
6
|
小数点直下から52ビット連続の1を1023ビット左シフトした値なので、結果は小数点の上に1023-52=971ビットの0が続きます。
|
7
7
|
その値から、高々123456789.0を引いても、小数点の上971ビット目は1ですので切り上られて元に戻ってしまいます。
|
8
|
+
|
9
|
+
小さな10進数の値で考えると分かりやすいです。
|
10
|
+
50,000から100引くと49,900となります。この1,000の桁を四捨五入したら50,000に戻るという現象です。
|
1
typo
answer
CHANGED
@@ -3,5 +3,5 @@
|
|
3
3
|
単純に桁落ちです。
|
4
4
|
doubleの指数部は11ビットで、仮数部が52ビットです。
|
5
5
|
DBL_MAXは 1.11111...(52ビット) * 2^1023 です。
|
6
|
-
52ビットを1023ビット左シフト
|
6
|
+
小数点直下から52ビット連続の1を1023ビット左シフトした値なので、結果は小数点の上に1023-52=971ビットの0が続きます。
|
7
|
-
その値から、高々123456789.0を引いても、小数点の上971ビット目
|
7
|
+
その値から、高々123456789.0を引いても、小数点の上971ビット目は1ですので切り上られて元に戻ってしまいます。
|