30年前の名著「数値計算の常識」を読んでたらBASICで0.01を10000回足したら100.003になるとか書いてあった。まあ昔のPCなんてそんなものかなと思いながら、Visual Studio 2017で試してみたら同じ結果だったw pic.twitter.com/HBwJhlhZjc
— mはげ (@Tw_Mhage) 2018年11月17日
Ruby 2.5.1 でやってみたらこうなりました。
a = 0 10000.times {a += 0.01} puts a #=>100.00000000001425
笑。
しかし、Ruby には BigDecimal がある。
require 'bigdecimal' a = BigDecimal("0") 10000.times {a += BigDecimal("0.01")} puts a.to_s("F") #=>100.0
きちんと正確に計算できました。
追記
Rational を使ってもよいね。
a = 0 10000.times {a += 1/100r} puts a.to_f #=>100.0