Looping with Floating-Point Values

Problem

The for loop with arithmetic expressions only does integer arithmetic. What do I do for floating-point values?

Solution

Use the seq command to generate your floating-point values, if your system provides it:

for fp in $(seq 1.0 .01 1.1)
do
     echo $fp; other stuff too
done

or:

seq 1.0 .01 1.1 | 
while read fp
do
    echo $fp; other stuff too
done

Discussion

The seq command will generate a sequence of floating-point numbers, one per line. The arguments to seq are the starting value, the increment, and the ending value. This is not the intuitive order if you are used to the C language for loop, or if you learned your looping from BASIC (e.g., FOR I=4 TO 10 STEP 2). With seq the increment is the middle argument.

In the first example, the $() runs the command in a subshell and returns the result with the newlines replaced by just whitespace, so each value is a string value for the for loop.

In the second example, seq is run as a command with its output piped into a while loop that reads each line and does something with it. This would be the preferred approach for a really long sequence, as it can run the seq command in parallel with the while. The for loop version has to run seq to completion and put all of its output on the command line for the for statement. For very large sequences, this could be time- and memory-consuming.

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
3.144.28.50