Beefy Boxes and Bandwidth Generously Provided by pair Networks
Welcome to the Monastery
 
PerlMonks  

Re^4: Portability of floor(log(N))

by syphilis (Bishop)
on Mar 14, 2018 at 02:42 UTC ( #1210859=note: print w/replies, xml ) Need Help??


in reply to Re^3: Portability of floor(log(N))
in thread Portability of floor(log(N))

And, IIUC, the test script should accept '1000e-36' as correct when NV precision is 64 bits

Alternatively (and since you're already using POSIX) you should get the result you expected, if you replace the log() calls with POSIX::log10(). That way both numerator and divisor should be exact (for these particular inputs), as should also be the result of the division ... irrespective of the precision of the NV:
$ perl -MPOSIX -le 'print POSIX::floor(POSIX::log10(1e-33) / POSIX::lo +g10(1000));' -11
Cheers,
Rob

Replies are listed 'Best First'.
Re^5: Portability of floor(log(N))
by toolic (Bishop) on Mar 14, 2018 at 17:31 UTC
    Using POSIX::log10() looks like the simplest solution. I will attempt to pester the tester with a modified version of FormatEng.pm.

    Do you think I can simplify it by replacing POSIX::log10(1000) with 3, or will it be better to keep your code as-is?

    my $e = floor( POSIX::log10($num) / 3 );

      log10(1000) will never change, and is exactly 3, so there's no reason not to use it

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others surveying the Monastery: (4)
As of 2021-12-03 20:46 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    R or B?



    Results (30 votes). Check out past polls.

    Notices?