ClickHouse/docs/en/sql-reference/functions/math-functions.md
Priyansh Agrawal f27a76b923 Add function byteSwap.
byteSwap accepts an integer `operand` and returns the integer which is
obtained by swapping the **endianness** of `operand` i.e. reversing the
bytes of the `operand`.

Issue: #54734
2023-09-24 21:02:09 +01:00

12 KiB
Raw Blame History

slug sidebar_position sidebar_label
/en/sql-reference/functions/math-functions 125 Mathematical

Mathematical Functions

All the functions return a Float64 number. Results are generally as close to the actual result as possible, but in some cases less precise than the machine-representable number.

e

Returns e.

Syntax

e()

pi

Returns π.

Syntax

pi()

exp

Returns e to the power of the given argument.

Syntax

exp(x)

log

Returns the natural logarithm of the argument.

Syntax

log(x)

Alias: ln(x)

exp2

Returns 2 to the power of the given argument

Syntax

exp2(x)

intExp2

Like exp but returns a UInt64.

Syntax

intExp2(x)

log2

Returns the binary logarithm of the argument.

Syntax

log2(x)

exp10

Returns 10 to the power of the given argument.

Syntax

exp10(x)

intExp10

Like exp10 but returns a UInt64.

Syntax

intExp10(x)

log10

Returns the decimal logarithm of the argument.

Syntax

log10(x)

sqrt

Returns the square root of the argument.

sqrt(x)

cbrt

Returns the cubic root of the argument.

cbrt(x)

erf

If x is non-negative, then erf(x / σ√2) is the probability that a random variable having a normal distribution with standard deviation σ takes the value that is separated from the expected value by more than x.

Syntax

erf(x)

Example

(three sigma rule)

SELECT erf(3 / sqrt(2));
┌─erf(divide(3, sqrt(2)))─┐
│      0.9973002039367398 │
└─────────────────────────┘

erfc

Returns a number close to 1 - erf(x) without loss of precision for large x values.

Syntax

erfc(x)

lgamma

Returns the logarithm of the gamma function.

Syntax

lgamma(x)

tgamma

Returns the gamma function.

Syntax

gamma(x)

sin

Returns the sine of the argument

Syntax

sin(x)

cos

Returns the cosine of the argument.

Syntax

cos(x)

tan

Returns the tangent of the argument.

Syntax

tan(x)

asin

Returns the arc sine of the argument.

Syntax

asin(x)

acos

Returns the arc cosine of the argument.

Syntax

acos(x)

atan

Returns the arc tangent of the argument.

Syntax

atan(x)

pow

Returns x to the power of y.

Syntax

pow(x, y)

Alias: power(x, y)

cosh

Returns the hyperbolic cosine of the argument.

Syntax

cosh(x)

Arguments

  • x — The angle, in radians. Values from the interval: -∞ < x < +∞. Float64.

Returned value

  • Values from the interval: 1 <= cosh(x) < +∞.

Type: Float64.

Example

SELECT cosh(0);

Result:

┌─cosh(0)──┐
│        1 │
└──────────┘

acosh

Returns the inverse hyperbolic cosine.

Syntax

acosh(x)

Arguments

  • x — Hyperbolic cosine of angle. Values from the interval: 1 <= x < +∞. Float64.

Returned value

  • The angle, in radians. Values from the interval: 0 <= acosh(x) < +∞.

Type: Float64.

Example

SELECT acosh(1);

Result:

┌─acosh(1)─┐
│        0 │
└──────────┘

sinh

Returns the hyperbolic sine.

Syntax

sinh(x)

Arguments

  • x — The angle, in radians. Values from the interval: -∞ < x < +∞. Float64.

Returned value

  • Values from the interval: -∞ < sinh(x) < +∞.

Type: Float64.

Example

SELECT sinh(0);

Result:

┌─sinh(0)──┐
│        0 │
└──────────┘

asinh

Returns the inverse hyperbolic sine.

Syntax

asinh(x)

Arguments

  • x — Hyperbolic sine of angle. Values from the interval: -∞ < x < +∞. Float64.

Returned value

  • The angle, in radians. Values from the interval: -∞ < asinh(x) < +∞.

Type: Float64.

Example

SELECT asinh(0);

Result:

┌─asinh(0)─┐
│        0 │
└──────────┘

atanh

Returns the inverse hyperbolic tangent.

Syntax

atanh(x)

Arguments

  • x — Hyperbolic tangent of angle. Values from the interval: 1 < x < 1. Float64.

Returned value

  • The angle, in radians. Values from the interval: -∞ < atanh(x) < +∞.

Type: Float64.

Example

SELECT atanh(0);

Result:

┌─atanh(0)─┐
│        0 │
└──────────┘

atan2

Returns the atan2 as the angle in the Euclidean plane, given in radians, between the positive x axis and the ray to the point (x, y) ≠ (0, 0).

Syntax

atan2(y, x)

Arguments

  • y — y-coordinate of the point through which the ray passes. Float64.
  • x — x-coordinate of the point through which the ray passes. Float64.

Returned value

  • The angle θ such that −π < θ ≤ π, in radians.

Type: Float64.

Example

SELECT atan2(1, 1);

Result:

┌────────atan2(1, 1)─┐
│ 0.7853981633974483 │
└────────────────────┘

hypot

Returns the length of the hypotenuse of a right-angle triangle. Hypot avoids problems that occur when squaring very large or very small numbers.

Syntax

hypot(x, y)

Arguments

  • x — The first cathetus of a right-angle triangle. Float64.
  • y — The second cathetus of a right-angle triangle. Float64.

Returned value

  • The length of the hypotenuse of a right-angle triangle.

Type: Float64.

Example

SELECT hypot(1, 1);

Result:

┌────────hypot(1, 1)─┐
│ 1.4142135623730951 │
└────────────────────┘

log1p

Calculates log(1+x). The calculation log1p(x) is more accurate than log(1+x) for small values of x.

Syntax

log1p(x)

Arguments

  • x — Values from the interval: -1 < x < +∞. Float64.

Returned value

  • Values from the interval: -∞ < log1p(x) < +∞.

Type: Float64.

Example

SELECT log1p(0);

Result:

┌─log1p(0)─┐
│        0 │
└──────────┘

sign

Returns the sign of a real number.

Syntax

sign(x)

Arguments

  • x — Values from -∞ to +∞. Support all numeric types in ClickHouse.

Returned value

  • -1 for x < 0
  • 0 for x = 0
  • 1 for x > 0

Examples

Sign for the zero value:

SELECT sign(0);

Result:

┌─sign(0)─┐
│       0 │
└─────────┘

Sign for the positive value:

SELECT sign(1);

Result:

┌─sign(1)─┐
│       1 │
└─────────┘

Sign for the negative value:

SELECT sign(-1);

Result:

┌─sign(-1)─┐
│       -1 │
└──────────┘

degrees

Converts radians to degrees.

Syntax

degrees(x)

Arguments

Returned value

  • Value in degrees.

Type: Float64.

Example

SELECT degrees(3.141592653589793);

Result:

┌─degrees(3.141592653589793)─┐
│                        180 │
└────────────────────────────┘

radians

Converts degrees to radians.

Syntax

radians(x)

Arguments

Returned value

  • Value in radians.

Type: Float64.

Example

SELECT radians(180);

Result:

┌──────radians(180)─┐
│ 3.141592653589793 │
└───────────────────┘

factorial

Computes the factorial of an integer value. Works with any native integer type including UInt(8|16|32|64) and Int(8|16|32|64). The return type is UInt64.

The factorial of 0 is 1. Likewise, the factorial() function returns 1 for any negative value. The maximum positive value for the input argument is 20, a value of 21 or greater will cause exception throw.

Syntax

factorial(n)

Example

SELECT factorial(10);

Result:

┌─factorial(10)─┐
│       3628800 │
└───────────────┘

width_bucket

Returns the number of the bucket in which operand falls in a histogram having count equal-width buckets spanning the range low to high. Returns 0 if operand < low, and returns count+1 if operand >= high.

operand, low, high can be any native number type. count can only be unsigned native integer and its value cannot be zero.

Syntax

widthBucket(operand, low, high, count)

Alias: WIDTH_BUCKET

Example

SELECT widthBucket(10.15, -8.6, 23, 18);

Result:

┌─widthBucket(10.15, -8.6, 23, 18)─┐
│                               11 │
└──────────────────────────────────┘

byteSwap

Accepts an integer operand and returns the integer which is obtained by swapping the endianness of operand i.e. reversing the bytes of the operand.

Syntax

byteSwap(operand)

Example

byteSwap(3351772109)

Result:

┌─byteSwap(3351772109)─┐
│           3455829959 │
└──────────────────────┘

The above example can be understood in the following manner:

  1. First, the integer operand (base 10) is converted to bytes (base 2) in little-endian i.e. 3351772109 -> CD FB C7 C7
  2. Then, the bytes are reversed i.e CD FB C7 C7 -> C7 C7 FB CD
  3. Finally, the bytes are interpreted back to an integer assuming little-endian i.e. C7 C7 FB CD -> 3455829959

Note that, in step#1, we can also choose to convert the operand to bytes in big-endian as long as we also assume big-endian when converting back to integer in step#3.