diff options
-rw-r--r-- | complex.c | 5 | ||||
-rw-r--r-- | internal.h | 2 | ||||
-rw-r--r-- | numeric.c | 2 |
3 files changed, 7 insertions, 2 deletions
@@ -232,7 +232,10 @@ f_negative_p(VALUE x) inline static int f_zero_p(VALUE x) { - if (RB_INTEGER_TYPE_P(x)) { + if (RB_FLOAT_TYPE_P(x)) { + return FLOAT_ZERO_P(x); + } + else if (RB_INTEGER_TYPE_P(x)) { return FIXNUM_ZERO_P(x); } else if (RB_TYPE_P(x, T_RATIONAL)) { diff --git a/internal.h b/internal.h index f57c1b73cd..3205050ec2 100644 --- a/internal.h +++ b/internal.h @@ -1617,6 +1617,8 @@ void Init_newline(void); #define INT_NEGATIVE_P(x) (FIXNUM_P(x) ? FIXNUM_NEGATIVE_P(x) : BIGNUM_NEGATIVE_P(x)) +#define FLOAT_ZERO_P(x) (RFLOAT_VALUE(x) == 0.0) + #ifndef ROUND_DEFAULT # define ROUND_DEFAULT RUBY_NUM_ROUND_HALF_UP #endif @@ -1086,7 +1086,7 @@ rb_float_mul(VALUE x, VALUE y) static bool flo_iszero(VALUE f) { - return RFLOAT_VALUE(f) == 0.0; + return FLOAT_ZERO_P(f); } static double |