Issue #6120 has been updated by marcandre (Marc-Andre Lafortune). Didn't get around fixing it for 2.0.0. Will fix and then assign to mrkn for BigDecimal. ---------------------------------------- Bug #6120: Float and BigDecimal bug in remainder in corner cases https://bugs.ruby-lang.org/issues/6120#change-36562 Author: marcandre (Marc-Andre Lafortune) Status: Assigned Priority: Normal Assignee: marcandre (Marc-Andre Lafortune) Category: core Target version: next minor 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/