summaryrefslogtreecommitdiffhomepage
path: root/include
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 /include
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 'include')
-rw-r--r--include/mruby/numeric.h6
1 files changed, 6 insertions, 0 deletions
diff --git a/include/mruby/numeric.h b/include/mruby/numeric.h
index 36489b1ce..e4c1a2f56 100644
--- a/include/mruby/numeric.h
+++ b/include/mruby/numeric.h
@@ -20,6 +20,12 @@ MRB_BEGIN_DECL
#define NEGFIXABLE(f) ((f) >= MRB_INT_MIN)
#define FIXABLE(f) (POSFIXABLE(f) && NEGFIXABLE(f))
+#ifdef MRB_INT64
+#define FIXABLE_FLOAT(f) FIXABLE((mrb_int)(f))
+#else
+#define FIXABLE_FLOAT(f) FIXABLE(f)
+#endif
+
MRB_API mrb_value mrb_flo_to_fixnum(mrb_state *mrb, mrb_value val);
MRB_API mrb_value mrb_fixnum_to_str(mrb_state *mrb, mrb_value x, int base);
/* ArgumentError if format string doesn't match /%(\.[0-9]+)?[aAeEfFgG]/ */