summaryrefslogtreecommitdiff
path: root/test/ruby/test_integer.rb
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2023-11-29 20:16:36 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2023-11-29 20:16:36 +0900
commit8e93bf8e1fbac73b677c333b19a8b55ae9daddc3 (patch)
tree92a47d3fe8bb981af5a476cd4a30e4f7e2a0997b /test/ruby/test_integer.rb
parent79eb75a8dd64848f23e9efc465f06326b5d4b680 (diff)
[Bug #17037] Improve accuracy of division near precision limits
When dividing near the precision limit of `double`, use Bignum division to get rid of rounding errors.
Diffstat (limited to 'test/ruby/test_integer.rb')
-rw-r--r--test/ruby/test_integer.rb8
1 files changed, 8 insertions, 0 deletions
diff --git a/test/ruby/test_integer.rb b/test/ruby/test_integer.rb
index 31cb8d6cf5..3349a1c493 100644
--- a/test/ruby/test_integer.rb
+++ b/test/ruby/test_integer.rb
@@ -704,6 +704,14 @@ class TestInteger < Test::Unit::TestCase
def test_fdiv
assert_equal(1.0, 1.fdiv(1))
assert_equal(0.5, 1.fdiv(2))
+
+ m = 50 << Float::MANT_DIG
+ prev = 1.0
+ (1..100).each do |i|
+ val = (m + i).fdiv(m)
+ assert_operator val, :>=, prev, "1+epsilon*(#{i}/100)"
+ prev = val
+ end
end
def test_obj_fdiv