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

Reply via email to