Beefy Boxes and Bandwidth Generously Provided by pair Networks
Come for the quick hacks, stay for the epiphanies.
 
PerlMonks  

Re: Math::round not rounding correctly

by MidLifeXis (Monsignor)
on Dec 23, 2014 at 20:50 UTC ( [id://1111234]=note: print w/replies, xml ) Need Help??


in reply to Math::round not rounding correctly

In response to 3010*1.15: 1.15 is not a number that can be represented exactly in base-2, or as a sum of 1/(2**n) factors. Because of that, you will necessarily (given no access to a fractional number library of some sort) need to approximate the value when stored as a floating point. This is why your rounding looks weird. The closest you are able to get is:

1 + (1/8) + (1/64) + (1/128) + (1/1024) + (1/2048) ...

This basically goes for a ReallyLongTime™. Printf rounds to a specific number of digits unless told otherwise, as tye and others have illustrated. What Every Computer Scientist Should Know About Floating Point is a better explanation of this than I have time to give here, and should be required reading for any programming course dealing with numerical representation in hardware.

--MidLifeXis

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others chanting in the Monastery: (3)
As of 2024-03-28 18:07 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found