On Thu, Aug 19, 2021 at 4:18 AM Peter John Acklam <pjack...@gmail.com> wrote:
> Hi! > > I would like some input on how the Math::BigInt module and bigint pragma > should handle non-integers. The current behaviour is rather inconsistent. > > The new() constructor converts a non-integer to a Math::BigInt NaN: > > $ perl -MMath::BigInt -wle 'print Math::BigInt -> new("3.16")' > NaN > > A math operation that returns a non-integer, returns a Math::BigInt with > the > truncated value: > > $ perl -MMath::BigInt -wle 'print Math::BigInt -> new("10") -> bsqrt()' > 3 > > Math::BigInt with overloading of constants, leave a non-integer as an > unmodified Perl scalar: > > $ perl -MMath::BigInt=:constant -wle 'print 3.16' > 3.16 > > However, when the "bigint" pragma is used for overloading constants, a > non-integer becomes a Math::BigInt with the truncated value: > > $ perl -Mbigint -wle 'print 3.16' > 3 > > I'm not saying that all four cases should return the same value, but > returning three different values seems too much. Any suggestions? > Truncation to integer seems the most useful and expected behavior to me. Not sure if the "overloading of constants" case should be affected, would people depend on it staying unmodified? -Dan