mirror of
https://github.com/ruby/ruby.git
synced 2025-08-15 13:39:04 +02:00
Use Rational for Float#round with ndigits > 14
ndigits higher than 14 can result in values that are slightly too large due to floating point limitations. Converting to rational for the calculation and then back to float fixes these issues. Fixes [Bug #14635] Fixes [Bug #17183] Co-authored by: Yusuke Endoh <mame@ruby-lang.org>
This commit is contained in:
parent
0d3520b063
commit
d16b68cb22
Notes:
git
2021-08-07 07:04:11 +09:00
4 changed files with 19 additions and 0 deletions
|
@ -1540,6 +1540,12 @@ nurat_round_n(int argc, VALUE *argv, VALUE self)
|
|||
return f_round_common(argc, argv, self, round_func);
|
||||
}
|
||||
|
||||
VALUE
|
||||
rb_flo_round_by_rational(int argc, VALUE *argv, VALUE num)
|
||||
{
|
||||
return nurat_to_f(nurat_round_n(argc, argv, float_to_r(num)));
|
||||
}
|
||||
|
||||
static double
|
||||
nurat_to_double(VALUE self)
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue