🐙
Ruby 小数点の計算結果の誤差について
なぜ小数点の計算結果は誤差が生じるのか
x = 122 * 1.1
puts x
#出力結果は134.2000000000002となる
実際に計算をしてみると計算結果は「134.2」となります。
なぜ、このような間違いが起きるのでしょうか?
コンピューターが2進数であることに起因しているようです。
引用
数値として2進浮動小数点数が用いられる場合
定数を10進表記で表していても内部では2進数で処理される
有限の2進数で小数を表した場合の計算は、常に誤差を伴いうる
と言うことを覚えていただいた方が良いでしょう。
引用元
解決法
x = 122 * 1.1.rationalize
puts x.to_f
#出力結果は134.2となる
.rationalizeを使うことで有理数に変換することができます。
1.1.rationalize
#返り値は11/10となる
小数点の出力結果が欲しいので
.to_fのfloat型(小数型)にもどします。
以上の2点をすることで求めている答えになります。
Discussion