Beefy Boxes and Bandwidth Generously Provided by pair Networks
laziness, impatience, and hubris
 
PerlMonks  

Re^3: Odd error message

by syphilis (Archbishop)
on Sep 15, 2015 at 00:13 UTC ( [id://1141992]=note: print w/replies, xml ) Need Help??


in reply to Re^2: Odd error message
in thread Odd error message

input '1.84467440869813e+019' must be a positive integer

A rather odd message, given that '1.84467440869813e+019' is a positive integer value.
I think next_prime() must be looking for an IV or UV, but the value about which it complains is too large to fit into an IV/UV and has been converted to an NV (double precision float).

I can't quite reconcile the error message you've provided with the Math::Prime::Util (version 0.53) source.
Perhaps I was looking in the wrong place, or perhaps I was looking at the wrong version.
If you're not already using 0.53, consider upgrading to it - it might accept such values (dunno).

Also note that, although your script loads the Math::BigFloat module, I can't see any Math::BigFloats being used anywhere in your code.
And I don't think next_prime() would accept a Math::BigFloat input, anyway - though I haven't tested.

Cheers,
Rob

Replies are listed 'Best First'.
Re^4: Odd error message
by danaj (Friar) on Sep 15, 2015 at 21:30 UTC

    The issue is that the module got an NV, not a UV, IV, or numerical string. Sure, it can convert it, but it will probably not be what the caller intended. The source for almost all functions call _validate_int() on inputs, which is where the error message occurs.

    Edit: The value it dies on for me has exceeded 64 bits, so there is no way the module would get the intended input. Better to die than give a wrong answer.

    In theory to work with larger inputs, we should be doing the input calcs as BigInt (or Math::GMP or Math::GMPz, etc.) to make sure they're correct and scale past 64-bit, then do the gap/log($num) making sure the inputs are BigFloat.

    The reason we wouldn't want to let $num be an NV for the log calc is that these scripts should scale to $num values of 20k+ digits, which won't fit in a double or long double.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1141992]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others meditating upon the Monastery: (4)
As of 2024-04-19 14:58 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found