Crates.io | fast_inv_sqrt |
lib.rs | fast_inv_sqrt |
version | 1.0.1 |
source | src |
created_at | 2016-06-04 16:44:16.090344 |
updated_at | 2016-07-29 18:22:25.784016 |
description | Fast inverse square root algorithm implementation. |
homepage | |
repository | https://github.com/emkw/rust-fast_inv_sqrt |
max_upload_size | |
id | 5286 |
size | 13,401 |
This was made purely for fun and testing crates.io publishing, but may actually be usable.
InvSqrt32 trait provide inv_sqrt32() function for primitive numeric types. InvSqrt64 provides inv_sqrt64().
Cargo.toml:
[dependencies]
fast_inv_sqrt = "~1.0"
Code:
extern crate fast_inv_sqrt;
use fast_inv_sqrt::InvSqrt32;
use fast_inv_sqrt::InvSqrt64;
fn main() {
let f: f32 = 1.234;
println!("{}", f.inv_sqrt32());
let i: i8 = 55;
println!("{}", i.inv_sqrt64());
}
Benchmarks require nightly compiler.
"ref" benchmarks use f1 / f2.sqrt() "impl" benchmarks use f1 * f2.inv_sqrtXX()
$ cargo bench --features 'nightly'
test test32::bench_plain_impl ... bench: 6 ns/iter (+/- 0)
test test32::bench_plain_ref ... bench: 13 ns/iter (+/- 0)
test test32::bench_real_impl ... bench: 6 ns/iter (+/- 0)
test test32::bench_real_ref ... bench: 13 ns/iter (+/- 0)
test test64::bench_plain_impl ... bench: 6 ns/iter (+/- 0)
test test64::bench_plain_ref ... bench: 20 ns/iter (+/- 0)
test test64::bench_real_impl ... bench: 6 ns/iter (+/- 0)
test test64::bench_real_ref ... bench: 20 ns/iter (+/- 0)
Feature 'omit-checking' disables checks of if value passed is_sign_positive() and is_normal(), and will produce invalid results for denormalized and negative values, but this is fast:
test test32::bench_plain_impl ... bench: 2 ns/iter (+/- 0)
test test32::bench_plain_ref ... bench: 13 ns/iter (+/- 0)
test test32::bench_real_impl ... bench: 3 ns/iter (+/- 0)
test test32::bench_real_ref ... bench: 13 ns/iter (+/- 0)
test test64::bench_plain_impl ... bench: 2 ns/iter (+/- 0)
test test64::bench_plain_ref ... bench: 20 ns/iter (+/- 0)
test test64::bench_real_impl ... bench: 3 ns/iter (+/- 0)
test test64::bench_real_ref ... bench: 20 ns/iter (+/- 0)