in reply to bignum with (s)printf - 64bit OS OK, 32bit incorrect. What to do?

There is nothing you can do. s/printf is the interface to the c runtimes s/printf function, and it doesn't know anything about bignum.

Probably, bignum, might have its own s/printf function, or a way to format numbers

  • Comment on Re: bignum with (s)printf - 64bit OS OK, 32bit incorrect. What to do?

Replies are listed 'Best First'.
Re^2: bignum with (s)printf - 64bit OS OK, 32bit incorrect. What to do?
by ambrus (Abbot) on Jul 01, 2011 at 20:52 UTC

    I believe you are right about the cause.

    According to the docs, Math::BigInt doesn't have a full printf method. Nor does bigint have one, even though it can overload the global hex function so it could conceivably overload sprintf as well, but that wouldn't be easy to implement.

    What Math::BigInt has is the methods bstr, as_hex, as_oct, as_bin to format an integer as decimal, hexadecimal, octal and binary respectively. For example,

    use bignum; say+(3**100)->as_hex;
    will output 3**100 in hexadecimal, which comes out as
    0x5a4653ca673768565b41f775d6947d55cf3813d1

    (If you wanted a full printf function that works on bignums, you could use Math::GMPz, though of course it will only work with Math::GMPz objects, you can't directly pass a Math::BigInt object to it.)