in reply to Re: Why do I get random numbers?
in thread Why do I get random numbers?

RE :Update: Actually, %.{$var}f doesn't do any trick except to produce an "Invalid conversion in printf..." warning. But the syntax is correct in the OPed example code: printf( "%.${dig}f", $num );

works for me in :

perl 5, version 20, subversion 2 (v5.20.2) built for x86_64-linux-gnu-thread-multi (with 101 registered patches)

Doesn't throw any warnings.

And sorry for the obviously FAQ however I was surprised that the data changed as I had not done any mathematical calculation on it just stored it and asked for some of it back. However I have obviously specified it is a numerical value by using printf.

Oh and I have now read " What Every Programmer Should Know About Floating-Point Arithmetic."

Consider me (somewhat) enlightened (on this topic).

and when I get a minute I will look at Math::BigFloat:

Many thanks

Cleggy

Replies are listed 'Best First'.
Re^3: Why do I get random numbers?
by AnomalousMonk (Archbishop) on Jun 15, 2018 at 14:57 UTC
    ... %.{$var}f doesn't do any trick except to produce [a] ... warning.
    works for me in ... perl 5, version 20 ... Doesn't throw any warnings.

    I'm surprised to read that it works in 5.20. I don't see any mention of a new format specifier in the latest sprintf docs. The best I can test in ATM is 5.14:

    c:\@Work\Perl\monks>perl -wMstrict -le "print 'perl version: ', $]; ;; my $p = 30; my $n = 1.111111111111111111111111111111; ;; printf qq{%0.{$p}f}, $n; " perl version: 5.014004 Invalid conversion in printf: "%0.{" at -e line 1. %0.{30}f

    ... I was surprised that the data changed ...

    As to this, I'm sure that, having now read the docs, you realize that IEEE-754 floating point representation (or any other finite representation) is only an approximation that may sometimes happen to be exact, and that it handles base-2 relative-prime fractions no better than base-10 handles 1/3.


    Give a man a fish:  <%-{-{-{-<