summaryrefslogtreecommitdiffhomepage
path: root/src/numeric.c
diff options
context:
space:
mode:
authorksss <[email protected]>2017-03-28 22:50:10 +0900
committerksss <[email protected]>2017-03-29 11:59:19 +0900
commitdb3573e0bf45bc3653d49a7dee90458df09005c8 (patch)
treef28332dc68c91263ce1371ce912b3f4b6a449f5b /src/numeric.c
parent1f6bf0e14f57afca0c5254cc1a0893d11b3303e2 (diff)
downloadmruby-db3573e0bf45bc3653d49a7dee90458df09005c8.tar.gz
mruby-db3573e0bf45bc3653d49a7dee90458df09005c8.zip
Should raise FloatDomainError
Diffstat (limited to 'src/numeric.c')
-rw-r--r--src/numeric.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/numeric.c b/src/numeric.c
index 828898fcc..aa6f86cb9 100644
--- a/src/numeric.c
+++ b/src/numeric.c
@@ -610,6 +610,17 @@ flo_round(mrb_state *mrb, mrb_value num)
return mrb_fixnum_value((mrb_int)number);
}
+void
+mrb_check_num_exact(mrb_state *mrb, mrb_float num)
+{
+ if (isinf(num)) {
+ mrb_raise(mrb, E_FLOATDOMAIN_ERROR, num < 0 ? "-Infinity" : "Infinity");
+ }
+ if (isnan(num)) {
+ mrb_raise(mrb, E_FLOATDOMAIN_ERROR, "NaN");
+ }
+}
+
/* 15.2.9.3.14 */
/* 15.2.9.3.15 */
/*
@@ -630,6 +641,7 @@ flo_truncate(mrb_state *mrb, mrb_value num)
if (f < 0.0) f = ceil(f);
if (!FIXABLE(f)) {
+ mrb_check_num_exact(mrb, f);
return mrb_float_value(mrb, f);
}
return mrb_fixnum_value((mrb_int)f);