🐙

Ruby 小数点の計算結果の誤差について

2024/01/20に公開

なぜ小数点の計算結果は誤差が生じるのか

x = 122 * 1.1
puts x
#出力結果は134.2000000000002となる

実際に計算をしてみると計算結果は「134.2」となります。
なぜ、このような間違いが起きるのでしょうか?
コンピューターが2進数であることに起因しているようです。

引用
数値として2進浮動小数点数が用いられる場合
定数を10進表記で表していても内部では2進数で処理される
有限の2進数で小数を表した場合の計算は、常に誤差を伴いうる
と言うことを覚えていただいた方が良いでしょう。
引用元
https://ja.stackoverflow.com/questions/49377/javascriptの掛け算の結果が計算機の結果と異なるのはなぜですか/49380#49380

解決法

x = 122 * 1.1.rationalize
puts x.to_f
#出力結果は134.2となる

.rationalizeを使うことで有理数に変換することができます。

1.1.rationalize
#返り値は11/10となる

小数点の出力結果が欲しいので
.to_fのfloat型(小数型)にもどします。
以上の2点をすることで求めている答えになります。

Discussion