Function glm::builtin::frexp [] [src]

pub fn frexp<F: BaseFloat, I: GenIType, T: FloatIntRel<F, i32, I>>(
    x: T
) -> (T, I)

Splits x into a floating-point significand in the range [0.5, 1.0) and an integral exponent of two, such that: x = significand⋅2exponent.

For a floating-point value of zero, the significant and exponent are both zero.

For a floating-point value that is an infinity or is not a number, the results are undefined.

Note

In GLSL, the significand is returned by the function and the exponent is returned in the output parameter exp. In Rust, we have the luxury to return both of them very naturally via a tuple.

Example

use glm::{ frexp, dvec3, ivec3 };

assert_eq!(frexp(0_f32), (0., 0));
let v3 = dvec3(1024., 1., 3.);
let s = dvec3(0.5, 0.5, glm::exp2(glm::log2(3.) - 2.));
let e = ivec3(11, 1, 2);
assert_eq!((s, e), frexp(v3));