Issue #6120 has been reported by Marc-Andre Lafortune. ---------------------------------------- Bug #6120: Float and BigDecimal bug in remainder in corner cases https://bugs.ruby-lang.org/issues/6120 Author: Marc-Andre Lafortune Status: Open Priority: Normal Assignee: Marc-Andre Lafortune Category: core Target version: 2.0.0 ruby -v: r34927 Currently: 4.2.remainder(+Float::INFINITY) # => 4.2, ok 4.2.remainder(-Float::INFINITY) # => NaN, should be 4.2 # (same with all signs reversed) Reasons the remainder should be 4.2 and not NaN: 1) foo.remainder(bar) == foo.remainder(-bar) 2) foo.remainder(bar) == foo when bar.abs > foo.abs Similarly: require 'bigdecimal' bd = BigDecimal.new("4.2") bd.remainder(BigDecimal.new("+Infinity")) # => NaN, should be bd bd.remainder(BigDecimal.new("-Infinity")) # => NaN, should be bd # (same with all signs reverse) Reasons: same as float. Finally: bd = BigDecimal.new("4.2") bd.modulo(BigDecimal.new("0")) # => ZeroDivisionError, probably ok? bd.remainder(BigDecimal.new("0")) # => NaN, should be probably raise a ZeroDivisionError? Like in #6044, this could be decided either way, as long as there is consistency. Anyone prefer NaN to raising a ZeroDivisionError? -- http://bugs.ruby-lang.org/