Beefy Boxes and Bandwidth Generously Provided by pair Networks
Don't ask to ask, just ask
 
PerlMonks  

Re: Multiply with 100 in perl

by MidLifeXis (Monsignor)
on Nov 11, 2015 at 21:04 UTC ( [id://1147500]=note: print w/replies, xml ) Need Help??


in reply to Multiply with 100 in perl

It has to do with how the computer represents floating point numbers. The computer is representing the data as a summation of various powers of 2. Since .6 cannot be represented as a summation of powers of 2, it is only a close approximation. When you truncate the value using the "%d" format specification, it gives the results you show (as illustrated by others on this thread).

The reason that perl6 (mentioned elsewhere) gets it right (IIRC), is because if it cannot exactly represent the value, it will store it as a ratio (in this case, 756/10) and use integer math (or at least exact precision math) on the values. Since I have not started to learn Perl6, this is from memory. Use at your own risk.

See also: what every programmer should know about floating point. (update: choroba beat me to it)

--MidLifeXis

Replies are listed 'Best First'.
Re^2: Multiply with 100 in perl
by Laurent_R (Canon) on Nov 12, 2015 at 10:03 UTC
    Just an example to confirm and illustrate the difference between Perl 5 and Perl 6:
    C:\Users\Laurent>perl -e "printf qq{%.20f \n}, 75.600;" 75.59999999999999400000 C:\Users\Laurent>perl6 -e "printf qq{%.20f \n}, 75.600;" 75.60000000000000000000

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others goofing around in the Monastery: (5)
As of 2024-04-19 11:14 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found