git.delta.rocks / jrsonnet / refs/commits / f319c3545168

difftreelog

source

crates/jrsonnet-stdlib/src/math.rs2.1 KiBsourcehistory
1use jrsonnet_evaluator::{function::builtin, typed::PositiveF64};23#[builtin]4pub fn builtin_abs(n: f64) -> f64 {5	n.abs()6}78#[builtin]9pub fn builtin_sign(n: f64) -> f64 {10	if n == 0. {11		0.12	} else {13		n.signum()14	}15}1617#[builtin]18pub fn builtin_max(a: f64, b: f64) -> f64 {19	a.max(b)20}2122#[builtin]23pub fn builtin_min(a: f64, b: f64) -> f64 {24	a.min(b)25}2627#[builtin]28pub fn builtin_sum(arr: Vec<f64>) -> f64 {29	arr.iter().sum()30}3132#[builtin]33pub fn builtin_modulo(x: f64, y: f64) -> f64 {34	x % y35}3637#[builtin]38pub fn builtin_floor(x: f64) -> f64 {39	x.floor()40}4142#[builtin]43pub fn builtin_ceil(x: f64) -> f64 {44	x.ceil()45}4647#[builtin]48pub fn builtin_log(x: f64) -> f64 {49	x.ln()50}5152#[builtin]53pub fn builtin_pow(x: f64, n: f64) -> f64 {54	x.powf(n)55}5657#[builtin]58pub fn builtin_sqrt(x: PositiveF64) -> f64 {59	x.0.sqrt()60}6162#[builtin]63pub fn builtin_sin(x: f64) -> f64 {64	x.sin()65}6667#[builtin]68pub fn builtin_cos(x: f64) -> f64 {69	x.cos()70}7172#[builtin]73pub fn builtin_tan(x: f64) -> f64 {74	x.tan()75}7677#[builtin]78pub fn builtin_asin(x: f64) -> f64 {79	x.asin()80}8182#[builtin]83pub fn builtin_acos(x: f64) -> f64 {84	x.acos()85}8687#[builtin]88pub fn builtin_atan(x: f64) -> f64 {89	x.atan()90}9192#[builtin]93pub fn builtin_atan2(y: f64, x: f64) -> f64 {94	y.atan2(x)95}9697#[builtin]98pub fn builtin_exp(x: f64) -> f64 {99	x.exp()100}101102fn frexp(s: f64) -> (f64, i16) {103	if s == 0.0 {104		(s, 0)105	} else {106		let lg = s.abs().log2();107		let x = (lg - lg.floor() - 1.0).exp2();108		let exp = lg.floor() + 1.0;109		(s.signum() * x, exp as i16)110	}111}112113#[builtin]114pub fn builtin_mantissa(x: f64) -> f64 {115	frexp(x).0116}117118#[builtin]119pub fn builtin_exponent(x: f64) -> i16 {120	frexp(x).1121}122123#[builtin]124pub fn builtin_round(x: f64) -> f64 {125	x.round()126}127128#[builtin]129pub fn builtin_is_even(x: f64) -> bool {130	builtin_round(x) % 2.0 == 0.0131}132133#[builtin]134#[allow(clippy::float_cmp)]135pub fn builtin_is_odd(x: f64) -> bool {136	builtin_round(x) % 2.0 == 1.0137}138139#[builtin]140#[allow(clippy::float_cmp)]141pub fn builtin_is_integer(x: f64) -> bool {142	builtin_round(x) == x143}144145#[builtin]146#[allow(clippy::float_cmp)]147pub fn builtin_is_decimal(x: f64) -> bool {148	builtin_round(x) != x149}