1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
use nadi_plugin::nadi_internal_plugin;
#[nadi_internal_plugin]
mod math {
use nadi_plugin::env_func;
/// Integer power
///
/// ```task
/// env assert_eq(powi(10.0, 2), 100.0)
/// ```
#[env_func]
fn powi(
/// base value
#[relaxed]
value: f64,
power: i64,
) -> f64 {
value.powi(power as i32)
}
/// Float power
///
/// ```task
/// env assert_eq(powf(100.0, 0.5), 10.0)
/// ```
#[env_func]
fn powf(
/// base value
#[relaxed]
value: f64,
power: f64,
) -> f64 {
value.powf(power)
}
/// Exponential
///
/// ```task
/// env assert_eq(log(exp(5.0)), 5.0)
/// ```
#[env_func]
fn exp(#[relaxed] value: f64) -> f64 {
value.exp()
}
/// Square Root
/// ```task
/// env assert_eq(sqrt(25.0), 5.0)
/// ```
#[env_func]
fn sqrt(#[relaxed] value: f64) -> f64 {
value.sqrt()
}
/// Logarithm of a value, natural if base not given
///
/// ```task
/// env assert_eq(log(exp(2.0)), 2.0)
/// env assert_eq(log(2.0, 2.0), 1.0)
/// ```
#[env_func]
fn log(#[relaxed] value: f64, base: Option<f64>) -> f64 {
if let Some(b) = base {
value.log(b)
} else {
value.ln()
}
}
}