## 8.2 Mathematical Functions

### 8.2.1 `ABS()`

Available inDSQL, PSQL

Possible name conflictYES → Read details

Result typeNumerical

Syntax

````ABS (number)`
```

Returns the absolute value of the argument.

### 8.2.2 `ACOS()`

Available inDSQL, PSQL

Possible name conflictYES → Read details

Result type`DOUBLE PRECISION`

Syntax

````ACOS (number)`
```

Returns the arc cosine of the argument.

• The result is an angle in the range [0, pi].

### 8.2.3 `ACOSH()`

Available inDSQL, PSQL

Result type`DOUBLE PRECISION`

Syntax

````ACOSH (number)`
```

Returns the inverse hyperbolic cosine of the argument.

• The result is in the range [0, INF].

### 8.2.4 `ASIN()`

Available inDSQL, PSQL

Possible name conflictYES → Read details

Result type`DOUBLE PRECISION`

Syntax

````ASIN (number)`
```

Returns the arc sine of the argument.

• The result is an angle in the range [-pi/2, pi/2].

### 8.2.5 `ASINH()`

Available inDSQL, PSQL

Result type`DOUBLE PRECISION`

Syntax

````ASINH (number)`
```

Returns the inverse hyperbolic sine of the argument.

• The result is in the range [-INF, INF].

### 8.2.6 `ATAN()`

Available inDSQL, PSQL

Possible name conflictYES → Read details

Result type`DOUBLE PRECISION`

Syntax

````ATAN (number)`
```

The function `ATAN` returns the arc tangent of the argument. The result is an angle in the range <-pi/2, pi/2>.

### 8.2.7 `ATAN2()`

Available inDSQL, PSQL

Possible name conflictYES → Read details

Result type`DOUBLE PRECISION`

Syntax

````ATAN2 (y, x)`
```

Returns the angle whose sine-to-cosine ratio is given by the two arguments, and whose sine and cosine signs correspond to the signs of the arguments. This allows results across the entire circle, including the angles -pi/2 and pi/2.

• The result is an angle in the range [-pi, pi].

• If x is negative, the result is pi if y is 0, and -pi if y is -0.

• If both y and x are 0, the result is meaningless. Starting with Firebird 3.0, an error will be raised if both arguments are 0. At v.2.5.4, it is still not fixed in lower versions. For more details, visit Tracker ticket CORE-3201.

• A fully equivalent description of this function is the following: `ATAN2(y, x)` is the angle between the positive X-axis and the line from the origin to the point (x, y). This also makes it obvious that `ATAN2(0, 0)` is undefined.

• If x is greater than 0, `ATAN2(y, x)` is the same as `ATAN(y/x)`.

• If both sine and cosine of the angle are already known, `ATAN2(sin, cos)` gives the angle.

### 8.2.8 `ATANH()`

Available inDSQL, PSQL

Result type`DOUBLE PRECISION`

Syntax

````ATANH (number)`
```

Returns the inverse hyperbolic tangent of the argument.

• The result is a number in the range [-INF, INF].

### 8.2.9 `CEIL()`, `CEILING()`

Available inDSQL, PSQL

Possible name conflictYES → Read details (Affects `CEILING` only)

Result type`BIGINT` for exact numeric number, or `DOUBLE PRECISION` for floating point number

Syntax

````CEIL[ING] (number)`
```

Returns the smallest whole number greater than or equal to the argument.

### 8.2.10 `COS()`

Available inDSQL, PSQL

Possible name conflictYES → Read details

Result type`DOUBLE PRECISION`

Syntax

````COS (angle)`
```

Returns an angle’s cosine. The argument must be given in radians.

• Any non-`NULL` result is — obviously — in the range [-1, 1].

### 8.2.11 `COSH()`

Available inDSQL, PSQL

Possible name conflictYES → Read details

Result type`DOUBLE PRECISION`

Syntax

````COSH (number)`
```

Returns the hyperbolic cosine of the argument.

• Any non-`NULL` result is in the range [1, INF].

### 8.2.12 `COT()`

Available inDSQL, PSQL

Possible name conflictYES → Read details

Result type`DOUBLE PRECISION`

Syntax

````COT (angle)`
```

Returns an angle’s cotangent. The argument must be given in radians.

### 8.2.13 `EXP()`

Available inDSQL, PSQL

Result type`DOUBLE PRECISION`

Syntax

````EXP (number)`
```

Returns the natural exponential, e`number`

See alsoSection 8.2.15, `LN()`

### 8.2.14 `FLOOR()`

Available inDSQL, PSQL

Possible name conflictYES → Read details

Result type`BIGINT` for exact numeric number, or `DOUBLE PRECISION` for floating point number

Syntax

````FLOOR (number)`
```

Returns the largest whole number smaller than or equal to the argument.

### 8.2.15 `LN()`

Available inDSQL, PSQL

Possible name conflictYES → Read details

Result type`DOUBLE PRECISION`

Syntax

````LN (number)`
```

Returns the natural logarithm of the argument.

• An error is raised if the argument is negative or 0.

### 8.2.16 `LOG()`

Available inDSQL, PSQL

Possible name conflictYES → Read details

Result type`DOUBLE PRECISION`

Syntax

````LOG (x, y)`
```

Returns the x-based logarithm of y.

• If either argument is 0 or below, an error is raised. (Before 2.5, this would result in `NaN`, `+/-INF` or 0, depending on the exact values of the arguments.)

• If both arguments are 1, `NaN` is returned.

• If x = 1 and y < 1, `-INF` is returned.

• If x = 1 and y > 1, `INF` is returned.

### 8.2.17 `LOG10()`

Available inDSQL, PSQL

Possible name conflictYES → Read details

Result type`DOUBLE PRECISION`

Syntax

````LOG10 (number)`
```

Returns the 10-based logarithm of the argument.

• An error is raised if the argument is negative or 0. (In versions prior to 2.5, such values would result in `NaN` and `-INF`, respectively.)

### 8.2.18 `MOD()`

Available inDSQL, PSQL

Possible name conflictYES → Read details

Result type`SMALLINT`, `INTEGER` or `BIGINT` depending on the type of a. If a is a floating-point type, the result is a `BIGINT`.

Syntax

````MOD (a, b)`
```

Returns the remainder of an integer division.

• Non-integer arguments are rounded before the division takes place. So, `mod(7.5, 2.5)` gives 2 (`mod(8, 3)`), not 0.

### 8.2.19 `PI()`

Available inDSQL, PSQL

Possible name conflictYES → Read details

Result type`DOUBLE PRECISION`

Syntax

````PI ()`
```

Returns an approximation of the value of pi.

### 8.2.20 `POWER()`

Available inDSQL, PSQL

Possible name conflictYES → Read details

Result type`DOUBLE PRECISION`

Syntax

````POWER (x, y)`
```

Returns x to the power of y (xy).

### 8.2.21 `RAND()`

Available inDSQL, PSQL

Possible name conflictYES → Read details

Result type`DOUBLE PRECISION`

Syntax

````RAND ()`
```

Returns a random number between 0 and 1.

### 8.2.22 `ROUND()`

Available inDSQL, PSQL

Possible name conflictYES → Read details

Result type`INTEGER`, (scaled) `BIGINT` or `DOUBLE PRECISION`

Syntax

````ROUND (number [, scale])`
```

Rounds a number to the nearest integer. If the fractional part is exactly `0.5`, rounding is upward for positive numbers and downward for negative numbers. With the optional scale argument, the number can be rounded to powers-of-ten multiples (tens, hundreds, tenths, hundredths, etc.) instead of just integers.

☝︎
Important

If you are used to the behaviour of the external function `ROUND`, please notice that the internal function always rounds halves away from zero, i.e. downward for negative numbers.

#### 8.2.22.1 `ROUND` Examples

If the scale argument is present, the result usually has the same scale as the first argument:

````ROUND(123.654, 1) -- returns 123.700 (not 123.7)`
`ROUND(8341.7, -3) -- returns 8000.0 (not 8000)`
`ROUND(45.1212, 0) -- returns 45.0000 (not 45)`
```

Otherwise, the result scale is 0:

````ROUND(45.1212) -- returns 45`
```

### 8.2.23 `SIGN()`

Available inDSQL, PSQL

Possible name conflictYES → Read details

Result type`SMALLINT`

Syntax

````SIGN (number)`
```

Returns the sign of the argument: -1, 0 or 1.

### 8.2.24 `SIN()`

Available inDSQL, PSQL

Possible name conflictYES → Read details

Result type`DOUBLE PRECISION`

Syntax

````SIN (angle)`
```

Returns an angle’s sine. The argument must be given in radians.

• Any non-`NULL` result is — obviously — in the range [-1, 1].

### 8.2.25 `SINH()`

Available inDSQL, PSQL

Possible name conflictYES → Read details

Result type`DOUBLE PRECISION`

Syntax

````SINH (number)`
```

Returns the hyperbolic sine of the argument.

### 8.2.26 `SQRT()`

Available inDSQL, PSQL

Possible name conflictYES → Read details

Result type`DOUBLE PRECISION`

Syntax

````SQRT (number)`
```

Returns the square root of the argument.

• If number is negative, an error is raised.

### 8.2.27 `TAN()`

Available inDSQL, PSQL

Possible name conflictYES → Read details

Result type`DOUBLE PRECISION`

Syntax

````TAN (angle)`
```

Returns an angle’s tangent. The argument must be given in radians.

### 8.2.28 `TANH()`

Available inDSQL, PSQL

Possible name conflictYES → Read details

Result type`DOUBLE PRECISION`

Syntax

````TANH (number)`
```

Returns the hyperbolic tangent of the argument.

• Due to rounding, any non-`NULL` result is in the range [-1, 1] (mathematically, it’s <-1, 1>).

### 8.2.29 `TRUNC()`

Available inDSQL, PSQL

Result type`INTEGER`, (scaled) `BIGINT` or `DOUBLE PRECISION`

Syntax

````TRUNC (number [, scale])`
```

Returns the integer part of a number. With the optional scale argument, the number can be truncated to powers-of-ten multiples (tens, hundreds, tenths, hundredths, etc.) instead of just integers.

🛈︎
Note
• If the scale argument is present, the result usually has the same scale as the first argument, e.g.

• `TRUNC(789.2225, 2)` returns 789.2200 (not 789.22)

• `TRUNC(345.4, -2)` returns 300.0 (not 300)

• `TRUNC(-163.41, 0)` returns -163.00 (not -163)

• Otherwise, the result scale is 0:

• `TRUNC(-163.41)` returns -163

☝︎
Important

If you are used to the behaviour of the external function `TRUNCATE`, please notice that the internal function `TRUNC` always truncates toward zero, i.e. upward for negative numbers.