nalgebra_glm/
exponential.rs

1use crate::RealNumber;
2use crate::aliases::TVec;
3
4/// Component-wise exponential.
5///
6/// # See also:
7///
8/// * [`exp2()`]
9pub fn exp<T: RealNumber, const D: usize>(v: &TVec<T, D>) -> TVec<T, D> {
10    v.map(|x| x.exp())
11}
12
13/// Component-wise base-2 exponential.
14///
15/// # See also:
16///
17/// * [`exp()`]
18pub fn exp2<T: RealNumber, const D: usize>(v: &TVec<T, D>) -> TVec<T, D> {
19    v.map(|x| x.exp2())
20}
21
22/// Compute the inverse of the square root of each component of `v`.
23///
24/// # See also:
25///
26/// * [`sqrt()`]
27pub fn inversesqrt<T: RealNumber, const D: usize>(v: &TVec<T, D>) -> TVec<T, D> {
28    v.map(|x| T::one() / x.sqrt())
29}
30
31/// Component-wise logarithm.
32///
33/// # See also:
34///
35/// * [`log2()`]
36pub fn log<T: RealNumber, const D: usize>(v: &TVec<T, D>) -> TVec<T, D> {
37    v.map(|x| x.ln())
38}
39
40/// Component-wise base-2 logarithm.
41///
42/// # See also:
43///
44/// * [`log()`]
45pub fn log2<T: RealNumber, const D: usize>(v: &TVec<T, D>) -> TVec<T, D> {
46    v.map(|x| x.log2())
47}
48
49/// Component-wise power.
50pub fn pow<T: RealNumber, const D: usize>(base: &TVec<T, D>, exponent: &TVec<T, D>) -> TVec<T, D> {
51    base.zip_map(exponent, |b, e| b.powf(e))
52}
53
54/// Component-wise square root.
55///
56/// # See also:
57///
58/// * [`exp()`]
59/// * [`exp2()`]
60/// * [`inversesqrt()`]
61/// * [`pow`]
62pub fn sqrt<T: RealNumber, const D: usize>(v: &TVec<T, D>) -> TVec<T, D> {
63    v.map(|x| x.sqrt())
64}