diff options
author | mrkn <mrkn@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2019-01-09 07:05:37 +0000 |
---|---|---|
committer | mrkn <mrkn@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2019-01-09 07:05:37 +0000 |
commit | fc9e0302ea6756e0ea95dbc11216a3a776ad16a6 (patch) | |
tree | d92ebe56e6e702b77db3c8c6693cafd1c41435c8 | |
parent | f7c0abeaeaba157b6535b397a4fd551e204608d3 (diff) |
complex.c: optimize zero check for Float
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66758 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-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 |