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.
This commit is contained in:
Yukihiro "Matz" Matsumoto
2017-05-26 09:54:10 +09:00
parent 3c31278236
commit 83fc915213
4 changed files with 17 additions and 8 deletions
+6
View File
@@ -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]/ */