git.delta.rocks / jrsonnet / refs/commits / 71fb4e2830f5

difftreelog

source

crates/jrsonnet-stdlib/src/math.rs2.2 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#[allow(non_snake_case)]28#[builtin]29pub fn builtin_clamp(x: f64, minVal: f64, maxVal: f64) -> f64 {30	x.clamp(minVal, maxVal)31}3233#[builtin]34pub fn builtin_sum(arr: Vec<f64>) -> f64 {35	arr.iter().sum()36}3738#[builtin]39pub fn builtin_modulo(x: f64, y: f64) -> f64 {40	x % y41}4243#[builtin]44pub fn builtin_floor(x: f64) -> f64 {45	x.floor()46}4748#[builtin]49pub fn builtin_ceil(x: f64) -> f64 {50	x.ceil()51}5253#[builtin]54pub fn builtin_log(x: f64) -> f64 {55	x.ln()56}5758#[builtin]59pub fn builtin_pow(x: f64, n: f64) -> f64 {60	x.powf(n)61}6263#[builtin]64pub fn builtin_sqrt(x: PositiveF64) -> f64 {65	x.0.sqrt()66}6768#[builtin]69pub fn builtin_sin(x: f64) -> f64 {70	x.sin()71}7273#[builtin]74pub fn builtin_cos(x: f64) -> f64 {75	x.cos()76}7778#[builtin]79pub fn builtin_tan(x: f64) -> f64 {80	x.tan()81}8283#[builtin]84pub fn builtin_asin(x: f64) -> f64 {85	x.asin()86}8788#[builtin]89pub fn builtin_acos(x: f64) -> f64 {90	x.acos()91}9293#[builtin]94pub fn builtin_atan(x: f64) -> f64 {95	x.atan()96}9798#[builtin]99pub fn builtin_atan2(y: f64, x: f64) -> f64 {100	y.atan2(x)101}102103#[builtin]104pub fn builtin_exp(x: f64) -> f64 {105	x.exp()106}107108fn frexp(s: f64) -> (f64, i16) {109	if s == 0.0 {110		(s, 0)111	} else {112		let lg = s.abs().log2();113		let x = (lg - lg.floor() - 1.0).exp2();114		let exp = lg.floor() + 1.0;115		(s.signum() * x, exp as i16)116	}117}118119#[builtin]120pub fn builtin_mantissa(x: f64) -> f64 {121	frexp(x).0122}123124#[builtin]125pub fn builtin_exponent(x: f64) -> i16 {126	frexp(x).1127}128129#[builtin]130pub fn builtin_round(x: f64) -> f64 {131	x.round()132}133134#[builtin]135pub fn builtin_is_even(x: f64) -> bool {136	builtin_round(x) % 2.0 == 0.0137}138139#[builtin]140#[allow(clippy::float_cmp)]141pub fn builtin_is_odd(x: f64) -> bool {142	builtin_round(x) % 2.0 == 1.0143}144145#[builtin]146#[allow(clippy::float_cmp)]147pub fn builtin_is_integer(x: f64) -> bool {148	builtin_round(x) == x149}150151#[builtin]152#[allow(clippy::float_cmp)]153pub fn builtin_is_decimal(x: f64) -> bool {154	builtin_round(x) != x155}