aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--complex.c5
-rw-r--r--internal.h2
-rw-r--r--numeric.c2
3 files changed, 7 insertions, 2 deletions
diff --git a/complex.c b/complex.c
index 25afdc0c00..112135c7dd 100644
--- a/complex.c
+++ b/complex.c
@@ -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
diff --git a/numeric.c b/numeric.c
index 4d8fd0bf09..5cb1aad8a1 100644
--- a/numeric.c
+++ b/numeric.c
@@ -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