summaryrefslogtreecommitdiffhomepage
path: root/src/numeric.c
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2017-05-26 09:54:10 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2017-05-26 09:54:10 +0900
commit83fc915213b23b798ea1afef55fddc0836207a83 (patch)
tree88509b29e278c185308ea676fa465ac4dbe97425 /src/numeric.c
parent3c312782368e2854c75c56d2008a5cbd78b70dfa (diff)
downloadmruby-83fc915213b23b798ea1afef55fddc0836207a83.tar.gz
mruby-83fc915213b23b798ea1afef55fddc0836207a83.zip
Add new range check macro FIXABLE_FLOAT(); ref #3652
When MRB_INT64, valid value range of mrb_int is bigger than double, which only has 53 bits significant precision.
Diffstat (limited to 'src/numeric.c')
-rw-r--r--src/numeric.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/src/numeric.c b/src/numeric.c
index da7e71771..2f2a76517 100644
--- a/src/numeric.c
+++ b/src/numeric.c
@@ -392,7 +392,7 @@ flo_shift(mrb_state *mrb, mrb_value x, mrb_int width)
val *= 2;
}
}
- if (FIXABLE(val)) {
+ if (FIXABLE_FLOAT(val)) {
return mrb_fixnum_value((mrb_int)val);
}
return mrb_float_value(mrb, val);
@@ -515,7 +515,7 @@ flo_floor(mrb_state *mrb, mrb_value num)
{
mrb_float f = floor(mrb_float(num));
- if (!FIXABLE(f)) {
+ if (!FIXABLE_FLOAT(f)) {
return mrb_float_value(mrb, f);
}
return mrb_fixnum_value((mrb_int)f);
@@ -540,7 +540,7 @@ flo_ceil(mrb_state *mrb, mrb_value num)
{
mrb_float f = ceil(mrb_float(num));
- if (!FIXABLE(f)) {
+ if (!FIXABLE_FLOAT(f)) {
return mrb_float_value(mrb, f);
}
return mrb_fixnum_value((mrb_int)f);
@@ -661,7 +661,7 @@ flo_truncate(mrb_state *mrb, mrb_value num)
if (f > 0.0) f = floor(f);
if (f < 0.0) f = ceil(f);
- if (!FIXABLE(f)) {
+ if (!FIXABLE_FLOAT(f)) {
mrb_check_num_exact(mrb, f);
return mrb_float_value(mrb, f);
}
@@ -1099,7 +1099,7 @@ mrb_flo_to_fixnum(mrb_state *mrb, mrb_value x)
if (isnan(d)) {
mrb_raise(mrb, E_FLOATDOMAIN_ERROR, "NaN");
}
- if (FIXABLE(d)) {
+ if (FIXABLE_FLOAT(d)) {
z = (mrb_int)d;
}
else {