(gawk.info.gz) Numeric Functions

Info Catalog (gawk.info.gz) Calling Built-in (gawk.info.gz) Built-in (gawk.info.gz) String Functions
 
 9.1.2 Numeric Functions
 -----------------------
 
 The following list describes all of the built-in functions that work
 with numbers.  Optional parameters are enclosed in square
 brackets ([ ]):
 
 `atan2(Y, X)'
      Return the arctangent of `Y / X' in radians.  You can use `pi =
      atan2(0, -1)' to retrieve the value of pi.
 
 `cos(X)'
      Return the cosine of X, with X in radians.
 
 `exp(X)'
      Return the exponential of X (`e ^ X') or report an error if X is
      out of range.  The range of values X can have depends on your
      machine's floating-point representation.
 
 `int(X)'
      Return the nearest integer to X, located between X and zero and
      truncated toward zero.
 
      For example, `int(3)' is 3, `int(3.9)' is 3, `int(-3.9)' is -3,
      and `int(-3)' is -3 as well.
 
 `log(X)'
      Return the natural logarithm of X, if X is positive; otherwise,
      report an error.
 
 `rand()'
      Return a random number.  The values of `rand()' are uniformly
      distributed between zero and one.  The value could be zero but is
      never one.(1)
 
      Often random integers are needed instead.  Following is a
      user-defined function that can be used to obtain a random
      non-negative integer less than N:
 
           function randint(n) {
                return int(n * rand())
           }
 
      The multiplication produces a random number greater than zero and
      less than `n'.  Using `int()', this result is made into an integer
      between zero and `n' - 1, inclusive.
 
      The following example uses a similar function to produce random
      integers between one and N.  This program prints a new random
      number for each input record:
 
           # Function to roll a simulated die.
           function roll(n) { return 1 + int(rand() * n) }
 
           # Roll 3 six-sided dice and
           # print total number of points.
           {
                 printf("%d points\n",
                        roll(6)+roll(6)+roll(6))
           }
 
           CAUTION: In most `awk' implementations, including `gawk',
           `rand()' starts generating numbers from the same starting
           number, or "seed", each time you run `awk'.(2)  Thus, a
           program generates the same results each time you run it.  The
           numbers are random within one `awk' run but predictable from
           run to run.  This is convenient for debugging, but if you want
           a program to do different things each time it is used, you
           must change the seed to a value that is different in each
           run.  To do this, use `srand()'.
 
 `sin(X)'
      Return the sine of X, with X in radians.
 
 `sqrt(X)'
      Return the positive square root of X.  `gawk' prints a warning
      message if X is negative.  Thus, `sqrt(4)' is 2.
 
 `srand([X])'
      Set the starting point, or seed, for generating random numbers to
      the value X.
 
      Each seed value leads to a particular sequence of random
      numbers.(3) Thus, if the seed is set to the same value a second
      time, the same sequence of random numbers is produced again.
 
           CAUTION: Different `awk' implementations use different
           random-number generators internally.  Don't expect the same
           `awk' program to produce the same series of random numbers
           when executed by different versions of `awk'.
 
      If the argument X is omitted, as in `srand()', then the current
      date and time of day are used for a seed.  This is the way to get
      random numbers that are truly unpredictable.
 
      The return value of `srand()' is the previous seed.  This makes it
      easy to keep track of the seeds in case you need to consistently
      reproduce sequences of random numbers.
 
    ---------- Footnotes ----------
 
    (1) The C version of `rand()' on many Unix systems is known to
 produce fairly poor sequences of random numbers.  However, nothing
 requires that an `awk' implementation use the C `rand()' to implement
 the `awk' version of `rand()'.  In fact, `gawk' uses the BSD `random()'
 function, which is considerably better than `rand()', to produce random
 numbers.
 
    (2) `mawk' uses a different seed each time.
 
    (3) Computer-generated random numbers really are not truly random.
 They are technically known as "pseudorandom."  This means that while
 the numbers in a sequence appear to be random, you can in fact generate
 the same sequence of random numbers over and over again.
 
Info Catalog (gawk.info.gz) Calling Built-in (gawk.info.gz) Built-in (gawk.info.gz) String Functions
automatically generated by info2html