`FIXABLE_FLOAT()` fails sometimes in `MRB_INT64` environment.
*/
MRB_BEGIN_DECL
-#define POSFIXABLE(f) ((f) <= MRB_INT_MAX)
-#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
+#define TYPED_FIXABLE(f,t) (((f) <= (t)MRB_INT_MAX) && ((f) >= (t)MRB_INT_MIN))
+#define FIXABLE(f) TYPED_FIXABLE(f,mrb_int)
+#define FIXABLE_FLOAT(f) TYPED_FIXABLE(f,double)
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);
