lambert_w 0.2.3

Fast and accurate evaluation of the Lambert W function by the method of T. Fukushima.
Documentation

Static Badge Crates.io Version docs.rs GitHub Actions Workflow Status

lambert_w

Fast evaluation of the real valued parts of the principal and secondary branches of the Lambert W function using the method of Toshio Fukushima to either 24 or 50 bits of accuracy.

This method uses a piecewise minimax rational function approximation.

Examples

Evaluate the principal branch of the Lambert W function to 50 bits of accuracy:

use lambert_w::accurate::lambert_w_0;

use core::f64::consts::PI;
use approx::assert_abs_diff_eq;

let w = lambert_w_0(PI)?;

assert_abs_diff_eq!(w, 1.0736581947961492);

or to only 24 bits of accuracy, but with faster execution time:

use lambert_w::fast::lambert_w_0;

use core::f64::consts::PI;
use approx::assert_abs_diff_eq;

let w = lambert_w_0(PI)?;

assert_abs_diff_eq!(w, 1.0736581947961492, epsilon = 1e-7);

Speed-accuracy trade-off

The 50-bit accurate versions in the accurate module are more accurate, but slightly slower, than the 24-bit accurate versions in the fast module. fast::lambert_w_0 is around 15% faster than accurate::lambert_w_0 and fast::lambert_w_m1 is around 41% faster than accurate::lambert_w_m1.

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.