Number Library (Num)
Linked to every numeric type — int, float, and units. Called as a method on the number itself (val.abs()) or through Num directly (Num.abs(val)) — both reach the same function.
Basics
Num.abs(val: int | float) -> int | float
Num.sqrt(val: int | float) -> float
Num.cbrt(val: int | float) -> float
Num.pow(val: int | float, to: int | float = 2) -> float
num-pow.stofPlayground ↗
#[main]
fn main() {
const val = 10;
pln(val.pow(to = 2), val.pow());
}Output
Num.round(val: int | float, places: int = 0) -> int | float
Num.floor(val: int | float) -> int | float
Num.ceil(val: int | float) -> int | float
Num.trunc(val: int | float) -> int | float
The integer part.
Num.fract(val: int | float) -> int | float
The fractional part.
Num.signum(val: int | float) -> int | float
-1 or 1.
Trigonometry
Angle-returning functions come back with rad units automatically. The examples below lean on identities with clean, predictable results.
Num.sin(val: int | float) -> float
Num.cos(val: int | float) -> float
Num.tan(val: int | float) -> float
Num.asin(val: int | float) -> rad
Num.acos(val: int | float) -> rad
Num.atan(val: int | float) -> rad
Num.atan2(y: int | float, x: int | float) -> rad
The four-quadrant arctangent — cast to deg to read it more naturally.
Num.sinh(val: int | float) -> float
Num.cosh(val: int | float) -> float
Num.tanh(val: int | float) -> float
Num.asinh(val: int | float) -> float
Num.acosh(val: int | float) -> float
Num.atanh(val: int | float) -> float
Logarithms & Exponents
Num.exp(val: int | float) -> float
e^val.
Num.exp2(val: int | float) -> float
2^val.
Num.ln(val: int | float) -> float
Natural log.
Num.log(val: int | float, base: int | float = 10) -> float
Representations
Num.to_string(val: int | float) -> str
Same as Std.str, but a method on the number itself.
Num.bin(val: int) -> str
Num.hex(val: int) -> str
Num.oct(val: int) -> str
Units
Num.has_units(val: int | float) -> bool
Num.is_length(val: int | float) -> bool
Num.is_mass(val: int | float) -> bool
Num.is_time(val: int | float) -> bool
Num.is_temp(val: int | float) -> bool
Num.is_angle(val: int | float) -> bool
Num.is_memory(val: int | float) -> bool
Num.remove_units(val: int | float) -> int | float
num-remove-units.stofPlayground ↗
#[main]
fn main() {
const val = 10kg;
pln(typeof val.remove_units());
}Output
Num.to_units(val: int | float, units: str | float) -> units
Doesn't modify the original.
num-to-units.stofPlayground ↗
#[main]
fn main() {
const val = 10kg;
pln(val.to_units('g'), val);
}Output
Iteration & Misc
Num.len(val: int | float) -> int
The number itself — makes a plain number iterable the same way a list is.
Num.at(val: int | float, index: int) -> int
Clamps to val if index is larger.
Num.inf(val: int | float) -> bool
Num.nan(val: int | float) -> bool
Num.min(..) -> unknown
Considers units if given.