dポイントプレゼントキャンペーン実施中!

詳説 正規表現(49p)によると昔の株価は、小数点で表示されていたそうです。
書籍では、本来表示したい株価は、9.05なのに9.0500000037272と表示されていた。
printfという文章を整形する関数で小数点第二位まで表示させたかったそうですが、端数が1/8の場合、小数点第二位ではなく第三位まで表示させる必要がありました。

ここで質問ですが端数が1/8とは、噛み砕いて説明するとどういうことなのでしょうか。

A 回答 (2件)

数値がコンピュータ内部で2進数で表現されているということです。



例えば2進数で整数を考えてみると、

 1桁目の重みは、1
 2桁目の重みは、2
 3桁目の重みは、4
 ……

となるので、101という2進数を10進数に変換するには、1になってる桁の重みを足して

 4(3桁目の重み)+1(1桁目の重み)=5

となります。
小数点以下も同じ考えで、

 小数点以下1桁目の重み=1/2(0.5)
 小数点以下2桁目の重み=1/4(0.25)
 小数点以下3桁目の重み=1/8(0.125)
 ……

となるので、例えば1.001という2進数は、

 1(1桁目の重み)+1/8(小数点以下3桁目の重み) = 1+1/8 = 1.125

になります。

> ここで質問ですが端数が1/8とは、噛み砕いて説明するとどういうことなのでしょうか。

上で説明したとおり、2進数表現で小数点以下3桁目が、1になっていたということですね。
そのため、10進数表現に変換したとき小数点以下第2位までで表現したいのに0.005の誤差が出てしまうので仕方なく第3位まで表示したということです。


このように小数点以下の数値を2進数表現と10進数表現の間で変換する場合には、ある桁数で切ると誤差がでてしまいますので、予めそれを考慮する必要が生じます。
    • good
    • 1

例えば


1+1/8
とかのことじゃね?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!