### 2 stable releases

Uses old Rust 2015

1.0.1 | Jul 29, 2016 |
---|---|

1.0.0 | Jun 4, 2016 |

#**1399** in Algorithms

**114** downloads per month

Used in shanimation-rs

**WTFPL OR MIT OR Apache-2.0**

14KB

445 lines

# fast_inv_sqrt

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().

## How do I use it?

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

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)
`