www.delorie.com/gnu/docs/gawk/gawk_134.html search
The GNU Awk User's Guide

 [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [ ? ]

### 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 ([ ]):

`int(x)`
This returns 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.

`sqrt(x)`
This returns the positive square root of x. `gawk` reports an error if x is negative. Thus, `sqrt(4)` is 2.

`exp(x)`
This returns the exponential of x (`e ^ x`) or reports an error if x is out of range. The range of values x can have depends on your machine's floating-point representation.

`log(x)`
This returns the natural logarithm of x, if x is positive; otherwise, it reports an error.

`sin(x)`
This returns the sine of x, with x in radians.

`cos(x)`
This returns the cosine of x, with x in radians.

`atan2(y, x)`
This returns the arctangent of `y / x` in radians.

`rand()`
This returns a random number. The values of `rand` are uniformly distributed between zero and one. The value is never zero and never one.(27)

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

`srand([x])`
The function `srand` sets the starting point, or seed, for generating random numbers to the value x.

Each seed value leads to a particular sequence of random numbers.(28) Thus, if the seed is set to the same value a second time, the same sequence of random numbers is produced again.

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.

 [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [ ? ]

 webmaster delorie software   privacy Copyright © 2003   by The Free Software Foundation Updated Jun 2003