git.delta.rocks / jrsonnet / refs/commits / 44f6e2c9e550

difftreelog

source

crates/jrsonnet-stdlib/src/math.rs2.5 KiBsourcehistory
1use std::f64;23use jrsonnet_evaluator::{function::builtin, typed::PositiveF64};45#[builtin]6pub fn builtin_abs(n: f64) -> f64 {7	n.abs()8}910#[builtin]11pub fn builtin_sign(n: f64) -> f64 {12	if n == 0. {13		0.14	} else {15		n.signum()16	}17}1819#[builtin]20pub fn builtin_max(a: f64, b: f64) -> f64 {21	a.max(b)22}2324#[builtin]25pub fn builtin_min(a: f64, b: f64) -> f64 {26	a.min(b)27}2829#[allow(non_snake_case)]30#[builtin]31pub fn builtin_clamp(x: f64, minVal: f64, maxVal: f64) -> f64 {32	x.clamp(minVal, maxVal)33}3435#[builtin]36pub fn builtin_sum(arr: Vec<f64>) -> f64 {37	arr.iter().sum()38}3940#[builtin]41pub fn builtin_modulo(x: f64, y: f64) -> f64 {42	x % y43}4445#[builtin]46pub fn builtin_floor(x: f64) -> f64 {47	x.floor()48}4950#[builtin]51pub fn builtin_ceil(x: f64) -> f64 {52	x.ceil()53}5455#[builtin]56pub fn builtin_log(x: f64) -> f64 {57	x.ln()58}5960#[builtin]61pub fn builtin_log2(x: f64) -> f64 {62	x.log2()63}6465#[builtin]66pub fn builtin_log10(x: f64) -> f64 {67	x.log10()68}6970#[builtin]71pub fn builtin_pow(x: f64, n: f64) -> f64 {72	x.powf(n)73}7475#[builtin]76pub fn builtin_sqrt(x: PositiveF64) -> f64 {77	x.0.sqrt()78}7980#[builtin]81pub fn builtin_sin(x: f64) -> f64 {82	x.sin()83}8485#[builtin]86pub fn builtin_cos(x: f64) -> f64 {87	x.cos()88}8990#[builtin]91pub fn builtin_tan(x: f64) -> f64 {92	x.tan()93}9495#[builtin]96pub fn builtin_asin(x: f64) -> f64 {97	x.asin()98}99100#[builtin]101pub fn builtin_acos(x: f64) -> f64 {102	x.acos()103}104105#[builtin]106pub fn builtin_atan(x: f64) -> f64 {107	x.atan()108}109110#[builtin]111pub fn builtin_atan2(y: f64, x: f64) -> f64 {112	y.atan2(x)113}114115#[builtin]116pub fn builtin_exp(x: f64) -> f64 {117	x.exp()118}119120fn frexp(s: f64) -> (f64, i16) {121	if s == 0.0 {122		(s, 0)123	} else {124		let lg = s.abs().log2();125		let x = (lg - lg.floor() - 1.0).exp2();126		let exp = lg.floor() + 1.0;127		(s.signum() * x, exp as i16)128	}129}130131#[builtin]132pub fn builtin_mantissa(x: f64) -> f64 {133	frexp(x).0134}135136#[builtin]137pub fn builtin_exponent(x: f64) -> i16 {138	frexp(x).1139}140141#[builtin]142pub fn builtin_round(x: f64) -> f64 {143	x.round()144}145146#[builtin]147pub fn builtin_is_even(x: f64) -> bool {148	builtin_round(x) % 2.0 == 0.0149}150151#[builtin]152#[allow(clippy::float_cmp)]153pub fn builtin_is_odd(x: f64) -> bool {154	builtin_round(x) % 2.0 == 1.0155}156157#[builtin]158#[allow(clippy::float_cmp)]159pub fn builtin_is_integer(x: f64) -> bool {160	builtin_round(x) == x161}162163#[builtin]164#[allow(clippy::float_cmp)]165pub fn builtin_is_decimal(x: f64) -> bool {166	builtin_round(x) != x167}168169#[builtin]170pub fn builtin_deg2rad(x: f64) -> f64 {171	x.to_radians()172}173174#[builtin]175pub fn builtin_rad2deg(x: f64) -> f64 {176	x.to_degrees()177}178179#[builtin]180pub fn builtin_hypot(x: f64, y: f64) -> f64 {181	x.hypot(y)182}