私たちはあなたの10進数から始めています59.858139
その数値を 2 進数に変換します。111011.11011011101011101111111101011100011011000001000110100001000100...
つまり、数値は 2 進法の無限分数です。正確に表現することはできません。(10 進数で 1/3 を正確に表すことができないのと同じように)
数値を何らかの形式の 2 進数科学表記法に書き直します。
10 ^ 101 * 1.1101111011011101011101111111101011100011011000001000110100001000100...
これはまだ 2 進数であるため、は 10 進数表記に10 ^ 101
対応することに注意してください。2 ^ 5
さて... 浮動小数点値は、仮数部に 23 ビットを格納できます。「最も近いものに丸める」丸めモードを使用して切り上げると、次のようになります。
10 ^ 101 * 1.11011110110111010111100
これは次のようになります:
111011.110110111010111100
float データ型に収まる精度はこれだけです。これを 10 進数に変換します。
59.8581390380859375
実際には 59.858139 にかなり近いように見えます...しかし、それはただの運です。代わりに、2 番目に近い float 値をバイナリに変換するとどうなりますか?
111011.110110111010111011 = 59.858135223388671875
したがって、基本的に解像度は約0.000004
です。
したがって、float 値から実際にわかることは、数値が次のようなものであるということだけです59.858139
。0.000002
59.858137
またはの場合もあります59.858141
。
最後の桁はかなり不確かなので、最後の桁が float 値の精度の範囲外であることを理解するのに十分なほど印刷コードがスマートであると推測しているため、値は に丸められ59.85814
ます。
ところで、あなた (私のように) 2 進数と 10 進数を手作業で変換するのが面倒な場合は、このコンバーターを使用できます。浮動小数点システムの詳細について詳しく知りたい場合は、浮動小数点表現に関するウィキペディアのページが優れたリソースです。