summaryrefslogtreecommitdiffhomepage
path: root/src/numeric.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/numeric.c')
-rw-r--r--src/numeric.c25
1 files changed, 13 insertions, 12 deletions
diff --git a/src/numeric.c b/src/numeric.c
index 4a22c23c7..462faf686 100644
--- a/src/numeric.c
+++ b/src/numeric.c
@@ -5,12 +5,6 @@
*/
#include <float.h>
-#if defined(__FreeBSD__) && __FreeBSD__ < 4
-# include <floatingpoint.h>
-#endif
-#ifdef HAVE_IEEEFP_H
-# include <ieeefp.h>
-#endif
#include <limits.h>
#include <math.h>
#include <stdlib.h>
@@ -54,7 +48,7 @@ static mrb_value
num_pow(mrb_state *mrb, mrb_value x)
{
mrb_value y;
- int both_int = FALSE;
+ mrb_bool both_int = FALSE;
mrb_float d;
mrb_get_args(mrb, "o", &y);
@@ -124,14 +118,14 @@ mrb_flo_to_str(mrb_state *mrb, mrb_value flo, int max_digit)
n = mrb_float(flo);
if (isnan(n)) {
- result = mrb_str_new(mrb, "NaN", 3);
+ result = mrb_str_new_lit(mrb, "NaN");
}
else if (isinf(n)) {
if (n < 0) {
- result = mrb_str_new(mrb, "-inf", 4);
+ result = mrb_str_new_lit(mrb, "-inf");
}
else {
- result = mrb_str_new(mrb, "inf", 3);
+ result = mrb_str_new_lit(mrb, "inf");
}
}
else {
@@ -193,7 +187,7 @@ mrb_flo_to_str(mrb_state *mrb, mrb_value flo, int max_digit)
}
if (exp >= 100) {
- mrb_raise(mrb, E_RANGE_ERROR, "Too large expornent.");
+ mrb_raise(mrb, E_RANGE_ERROR, "Too large exponent.");
}
*(c++) = '0' + exp / 10;
@@ -618,6 +612,12 @@ flo_truncate(mrb_state *mrb, mrb_value num)
return mrb_fixnum_value((mrb_int)f);
}
+static mrb_value
+flo_nan_p(mrb_state *mrb, mrb_value num)
+{
+ return mrb_bool_value(isnan(mrb_float(num)));
+}
+
/*
* Document-class: Integer
*
@@ -663,7 +663,7 @@ mrb_fixnum_mul(mrb_state *mrb, mrb_value x, mrb_value y)
if (a != 0 && c/a != b) {
return mrb_float_value(mrb, (mrb_float)a*(mrb_float)b);
}
- return mrb_fixnum_value(c);;
+ return mrb_fixnum_value(c);
}
return mrb_float_value(mrb, (mrb_float)a * mrb_to_flo(mrb, y));
}
@@ -1337,4 +1337,5 @@ mrb_init_numeric(mrb_state *mrb)
mrb_define_method(mrb, fl, "to_s", flo_to_s, MRB_ARGS_NONE()); /* 15.2.9.3.16(x) */
mrb_define_method(mrb, fl, "inspect", flo_to_s, MRB_ARGS_NONE());
+ mrb_define_method(mrb, fl, "nan?", flo_nan_p, MRB_ARGS_NONE());
}