Beefy Boxes and Bandwidth Generously Provided by pair Networks
laziness, impatience, and hubris
 
PerlMonks  

Re: Decimal Array range

by ikegami (Pope)
on Dec 21, 2010 at 18:14 UTC ( #878331=note: print w/ replies, xml ) Need Help??


in reply to Decimal Array range

You're thinking of something like BASIC's STEP clause, in effect. You can achieve this using a C-style loop:

for (my $i = 0; $i < 100; $i += 0.1) { say $i; }

but then you can end up with an accumulation of floating point error.*

... 99.7999999999986 99.8999999999986 99.9999999999986

The solution is to use an integer for the loop counter, and calculate the decimal number from it.

for (my $_ = 0*10; $_ < 100*10; ++$_) { my $i = $_/10; say $i; }
... 99.7 99.8 99.9

Now that you're using integers, you can use a cleaner syntax.

for (0*10..100*10) { my $i = $_/10; say $i; }

You already been shown how this get the numbers as a list.

map $_/10, 0*10..100*10

* — A lot of numbers are periodic in binary. For example, 1/10 is perodic is binary, just like 1/3 is periodic in decimal. It would take infinite storage to store 1/10 as a floating point number.


Comment on Re: Decimal Array range
Select or Download Code

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others pondering the Monastery: (15)
As of 2015-07-29 22:38 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (269 votes), past polls