in reply to How to get better exponentiation?
I don’t know if C’s pow(3) function has the same limitations under Unix?
Yes, I get NaN on Linux too, and pow(3) says "The functions pow(x, y), powf(x, y), and powl(x, y) raise an invalid exception and return an NaN if x < 0 and y is not an integer." and similarly, on my system the manpage says "If x is a finite value less than 0, and y is a finite noninteger, a domain error occurs, and a NaN is returned." If you ask Wolfram Alpha, you have to explicitly tell it you want the real-valued root instead of the principal root, though I'm not enough of an expert to know whether that's relevant here (I did find out you can get all the principal roots via Math::Complex's root). Interestingly, Math::BigInt and Math::BigFloat's ->broot(3) also return NaN, so throwing a use bignum; in the program unfortunately doesn't help in this case.
To get the cube root, you can apparently use cbrt(3), exposed via POSIX as of Perl v5.22:
$ perl -wMstrict -MPOSIX=cbrt -le 'print cbrt(-8)' -2
|
---|
Replies are listed 'Best First'. | |
---|---|
Re^2: How to get better exponentiation?
by Athanasius (Archbishop) on Jan 22, 2022 at 11:19 UTC | |
by haukex (Archbishop) on Jan 22, 2022 at 11:58 UTC |