gawk: Errors accumulate
15.4.1.3 Errors Accumulate
..........................
The loss of accuracy during a single computation with floating-point
numbers usually isn't enough to worry about. However, if you compute a
value that is the result of a sequence of floating-point operations, the
error can accumulate and greatly affect the computation itself. Here is
an attempt to compute the value of pi using one of its many series
representations:
BEGIN {
x = 1.0 / sqrt(3.0)
n = 6
for (i = 1; i < 30; i++) {
n = n * 2.0
x = (sqrt(x * x + 1) - 1) / x
printf("%.15f\n", n * x)
}
}
When run, the early errors propagate through later computations,
causing the loop to terminate prematurely after attempting to divide by
zero:
$ gawk -f pi.awk
-| 3.215390309173475
-| 3.159659942097510
-| 3.146086215131467
-| 3.142714599645573
...
-| 3.224515243534819
-| 2.791117213058638
-| 0.000000000000000
error-> gawk: pi.awk:6: fatal: division by zero attempted
Here is an additional example where the inaccuracies in internal
representations yield an unexpected result:
$ gawk 'BEGIN {
> for (d = 1.1; d <= 1.5; d += 0.1) # loop five times (?)
> i++
> print i
> }'
-| 4