[ruby-dev:49915] Integer の a.fdiv(b) と Rational(a, b).to_f で結果のFloatのLSBが違うことがある

From: "KISHIMOTO, Makoto" <ksmakoto@...4u.or.jp>
Date: 2016-12-24 13:18:33 UTC
List: ruby-dev #49915
きしもとです

FloatのLSBの違いなので、バグとは認められないような気もしますが、見つ
けてしまったので、一応。

a と b が Integer として、a.fdiv(b) と Rational(a, b).to_f は、常に同じ
結果が期待されるものなのではないかと思いますが、手元の環境で、ごくごく
稀に、以下のようにLSBが一致しない場合があることを見つけました。

(参考までに、さらに別のルーチンによる計算は Rational(a, b).to_f の
方に一致しました)

========

# fdiv_rat_sample

a = %w(94pj5hpub01oabeygoeje8hnmc94w8khhnqy4v46k3152gydr8bus25svhlwx3r
  dxoi9b850i47079g0ur0k0kyxhuqziskwgj3ikg73m419qfhp97uac7y4j2c4s1te9fr
  end4mnefls6lke3dtg8ei0ao).join.to_i 36
b = 1<<1074

p a.fdiv(b)
p Rational(a, b).to_f

========

$ uname -a
FreeBSD norikura.localdomain 10.3-RELEASE-p11 FreeBSD 10.3-RELEASE-p11 #0: Mon Oct 24 18:49:24 UTC 2016     root@amd64-builder.daemonology.net:/usr/obj/usr/src/sys/GENERIC  amd64
$ ruby23 -v
ruby 2.3.1p112 (2016-04-26 revision 54768) [amd64-freebsd10]
$ ruby23 fdiv_rat_sample.rb
2.1129010727564318e-83
2.112901072756432e-83

In This Thread

Prev Next