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.
|