Bug #20654
closedFloor and ceil have unexpected behaviour when ndigits is large
Description
GitHub PR: https://github.com/ruby/ruby/pull/11257
There is unexpected behaviour in Integer#floor, Float#floor, Integer#ceil, Float#ceil when ndigits is large such that 10**ndigits is a bignum.
Previously, it would return 0 in such cases. However, this would cause unexpected behaviour such as:
puts -1.floor(-5) # => -100000
puts -1.floor(-10) # => -10000000000
puts -1.floor(-20) # => 0
puts 1.ceil(-5) # => 100000
puts 1.ceil(-10) # => 10000000000
puts 1.ceil(-20) # => 0
The PR changes the last result so that it will return -100000000000000000000 and 100000000000000000000, respectively.
Updated by peterzhu2118 (Peter Zhu) 4 months ago
- Status changed from Open to Closed
Applied in changeset git|3af2a7fbe12e11bac7b26bd991d3d02349f47295.
Fix floor when ndigits is large
[Bug #20654]
This commit fixes Integer#floor and Float#floor when the number is
negative and ndigits is large such that 10**ndigits is a bignum.
Previously, it would return 0 in such cases. However, this would cause
unexpected behaviour such as:
puts -1.floor(-5) # => -100000
puts -1.floor(-10) # => -10000000000
puts -1.floor(-20) # => 0
This commit changes the last result so that it will return
-100000000000000000000.
Updated by peterzhu2118 (Peter Zhu) 4 months ago
I opened backport PRs.
3.3: https://github.com/ruby/ruby/pull/11277
3.2: https://github.com/ruby/ruby/pull/11278
Updated by nagachika (Tomoyuki Chikanaga) 3 months ago
- Backport changed from 3.1: UNKNOWN, 3.2: REQUIRED, 3.3: REQUIRED to 3.1: UNKNOWN, 3.2: DONE, 3.3: DONE
Thank you for preparing the backport PRs. They were merged.