http://qs321.pair.com?node_id=11123212


in reply to Re^2: int() function
in thread int() function

On my CentOS 7 box with perl-5.16.3
$ perl -E'say sprintf("%.100g", 0.15)' 0.14999999999999999 $ perl -E'say sprintf("%.100f", 0.15)' 0.14999999999999999444888487687421729788184165954589843750000000000000 +00000000000000000000000000000000 $ perl --version | head -3 This is perl 5, version 16, subversion 3 (v5.16.3) built for x86_64-li +nux-thread-multi (with 40 registered patches, see perl -V for more detail)
On my Fedora 32 box with perl-5.30.3
$ perl -E'say sprintf("%.100g", 0.15)' 0.1499999999999999944488848768742172978818416595458984375 $ perl -E'say sprintf("%.100f", 0.15)' 0.14999999999999999444888487687421729788184165954589843750000000000000 +00000000000000000000000000000000 $ perl -E'say sprintf("%.100a", 0.15)' 0x1.333333333333300000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000p-3 $ perl -v|head -3 This is perl 5, version 30, subversion 3 (v5.30.3) built for x86_64-li +nux-thread-multi (with 96 registered patches, see perl -V for more detail)

Replies are listed 'Best First'.
Re^4: int() function
by syphilis (Archbishop) on Oct 28, 2020 at 00:16 UTC
    On my CentOS 7 box with perl-5.16.3

    That's certainly one instance where you do benefit from formatting with "%.100f" instead of "%.100g".
    Thank you for pointing this out.
    Turns out that it's the same on my Ubuntu box with perl-5.18.0.
    But with perl-5.32.0 on the same box, "%.100g" formatting works fine - so, there's a change in perl's behaviour between 5.18 and 5.32.
    I would guess that "%.100g" formatting on your CentOS 7 box would also work fine on perl-5.32.

    But I should point out that, even though "%.100g" formatting works ok on Ubuntu with perl-5.32.0, "%.*g" formatting is still buggy if you request a precision in the range 18..91 (inclusive).
    $ perl -le 'printf "%.91f\n", 0.15;' 0.14999999999999999444888487687421729788184165954589843750000000000000 +00000000000000000000000 $ perl -le 'printf "%.91g\n", 0.15;' 0.14999999999999999 $ perl -le 'printf "%.92g\n", 0.15;' 0.1499999999999999944488848768742172978818416595458984375
    Cheers,
    Rob