LoginSignup
31
5

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

Posted at

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

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

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

引用
数値として2進浮動小数点数が用いられる場合
定数を10進表記で表していても内部では2進数で処理される
有限の2進数で小数を表した場合の計算は、常に誤差を伴いうる
と言うことを覚えていただいた方が良いでしょう。
引用元
https://ja.stackoverflow.com/questions/49377/javascript%e3%81%ae%e6%8e%9b%e3%81%91%e7%ae%97%e3%81%ae%e7%b5%90%e6%9e%9c%e3%81%8c%e8%a8%88%e7%ae%97%e6%a9%9f%e3%81%ae%e7%b5%90%e6%9e%9c%e3%81%a8%e7%95%b0%e3%81%aa%e3%82%8b%e3%81%ae%e3%81%af%e3%81%aa%e3%81%9c%e3%81%a7%e3%81%99%e3%81%8b/49380#49380

解決法

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

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

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

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

31
5
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
31
5