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