Bug #15589

Updated by sawa (Tsuyoshi Sawada) about 1 year ago

My understanding is that the predicate method `Numeric#zero?` is not only a shorthand for `== 0`, but is also optimized for frequent patterns. If `zero?` is not faster than `== 0`, then it loses its reason for existence. 

 However, According to benchmarks benchmark on my environment, `` is around 1.23 times to 1.64 times slower than `number == 0` when `number` is an `Integer`, `Rational`, or `Complex`. It is faster only when `number` is a `Float`. 

 And with `number.nonzero?`, it is even worse. It is about 1.88 times to 4.35 times slower than `number != 0`. 0`, even with `Integer`. 

 I think there is something wrong with this, and it should be possible to optimize these methods, which has somehow been missed.