Files
plainleaf/website/API/math.md
T
Marek S. ŁukasiewiczandGitHub 971e19f591 Add Lua features for integers (#1363)
* Parse hexadecimal numeric constants in Lua

Fix lua grammar to not require a "+" after "e" in numbers.
Add tests for parsing correct number value.

* Implement bitwise operators in Lua

They throw an error when called on fractional values,
like Lua 5.4 but with a hint to round them manually.
2025-04-30 10:58:45 +02:00

232 lines
4.8 KiB
Markdown

API docs for Lua's `math` module.
## math.random(m?, n?)
Returns a random number.
- `random()` returns a random float in range [0,1)
- `random(m)` returns a random integer in range [1,m]
- `random(m,n)` returns a random integer in range [m,n]
Example:
```lua
print(math.random()) -- prints: 0.123456789 (random float between 0 and 1)
print(math.random(10)) -- prints: 5 (random integer between 1 and 10)
print(math.random(5, 10)) -- prints: 7 (random integer between 5 and 10)
```
## math.abs(x)
Returns the absolute value of `x`.
Example:
```lua
print(math.abs(-5)) -- prints: 5
print(math.abs(5)) -- prints: 5
```
## math.ceil(x)
Returns the smallest integer greater than or equal to `x`.
Example:
```lua
print(math.ceil(4.2)) -- prints: 5
print(math.ceil(-4.2)) -- prints: -4
```
## math.floor(x)
Returns the largest integer less than or equal to `x`.
Example:
```lua
print(math.floor(4.8)) -- prints: 4
print(math.floor(-4.8)) -- prints: -5
```
Note: `math.floor(x + 0.5)` rounds to closest integer, similar to `round(x)` function from other languages
## math.max(...)
Returns the maximum value among its arguments.
Example:
```lua
print(math.max(1, 2, 3, 4, 5)) -- prints: 5
print(math.max(-10, -5, -1)) -- prints: -1
```
## math.min(...)
Returns the minimum value among its arguments.
Example:
```lua
print(math.min(1, 2, 3, 4, 5)) -- prints: 1
print(math.min(-10, -5, -1)) -- prints: -10
```
## math.fmod(x, y)
Returns the remainder of the division of `x` by `y` that rounds the quotient towards zero.
Example:
```lua
print(math.fmod(10, 3)) -- prints: 1
print(math.fmod(-10, 3)) -- prints: -1
```
## math.modf(x)
Returns two numbers, the integral part of `x` and the fractional part of `x`.
Example:
```lua
local intPart, fracPart = math.modf(3.14)
print(intPart, fracPart) -- prints: 3 0.14
```
## math.exp(x)
Returns the value e^x (where e is the base of natural logarithms).
Example:
```lua
print(math.exp(0)) -- prints: 1
print(math.exp(1)) -- prints: 2.7182818284590455
```
## math.log(x, base?)
Returns the logarithm of `x` in the given base. If base is not specified, returns the natural logarithm of `x`.
Example:
```lua
print(math.log(10)) -- prints: 2.302585092994046 (natural log)
print(math.log(100, 10)) -- prints: 2 (log base 10)
```
## math.pow(x, y)
Returns x^y.
Example:
```lua
print(math.pow(2, 3)) -- prints: 8
print(math.pow(10, 2)) -- prints: 100
```
## math.sqrt(x)
Returns the square root of `x`.
Example:
```lua
print(math.sqrt(16)) -- prints: 4
print(math.sqrt(2)) -- prints: 1.4142135623730951
```
## math.cos(x)
Returns the cosine of `x` (in radians).
Example:
```lua
print(math.cos(0)) -- prints: 1
print(math.cos(math.pi)) -- prints: -1
```
## math.sin(x)
Returns the sine of `x` (in radians).
Example:
```lua
print(math.sin(0)) -- prints: 0
print(math.sin(math.pi / 2)) -- prints: 1
```
## math.tan(x)
Returns the tangent of `x` (in radians).
Example:
```lua
print(math.tan(0)) -- prints: 0
print(math.tan(math.pi / 4)) -- prints: 1
```
## math.acos(x)
Returns the arc cosine of `x` (in radians).
Example:
```lua
print(math.acos(1)) -- prints: 0
print(math.acos(0)) -- prints: 1.5707963267948966 (pi/2)
```
## math.asin(x)
Returns the arc sine of `x` (in radians).
Example:
```lua
print(math.asin(0)) -- prints: 0
print(math.asin(1)) -- prints: 1.5707963267948966 (pi/2)
```
## math.atan(y, x?)
Returns the arc tangent of `y/x` (in radians). If `x` is not provided, returns the arc tangent of `y` (in radians).
Example:
```lua
print(math.atan(1)) -- prints: 0.7853981633974483 (pi/4)
print(math.atan(1, 1)) -- prints: 0.7853981633974483 (pi/4)
```
## math.cosh(x)
Returns the hyperbolic cosine of `x`.
Example:
```lua
print(math.cosh(0)) -- prints: 1
```
## math.sinh(x)
Returns the hyperbolic sine of `x`.
Example:
```lua
print(math.sinh(0)) -- prints: 0
```
## math.tanh(x)
Returns the hyperbolic tangent of `x`.
Example:
```lua
print(math.tanh(0)) -- prints: 0
```
## math.deg(x)
Converts angle `x` from radians to degrees.
Example:
```lua
print(math.deg(math.pi)) -- prints: 180
print(math.deg(math.pi/2)) -- prints: 90
```
## math.rad(x)
Converts angle `x` from degrees to radians.
Example:
```lua
print(math.rad(180)) -- prints: 3.141592653589793
print(math.rad(90)) -- prints: 1.5707963267948966
```
## math.ult(m, n)
Returns a boolean, true if integer `m` is below integer `n` when they are compared as unsigned integers.
Example:
```lua
print(math.ult(2, 3)) -- prints: true
print(math.ult(-1, 1)) -- prints: false (as unsigned integers)
```
# Non-standard Extensions
## math.cosineSimilarity(vecA, vecB)
Returns the cosine similarity between two vectors.
Example:
```lua
local vec1 = {1, 2, 3}
local vec2 = {4, 5, 6}
print(math.cosineSimilarity(vec1, vec2)) -- prints: 0.9746318461970762
```