accurate 0.4.1

(more or less) accurate floating point algorithms
Documentation
# (More or less) accurate floating point algorithms

[![GitHub Actions status][gh-actions-shield]][gh-actions] [![Documentation: hosted][doc-shield]][doc] [![License: Apache License 2.0 or MIT][license-shield]][license] [![latest GitHub release][release-shield]][release] [![crate on crates.io][crate-shield]][crate]

This crate provides several algorithms that implement highly accurate or even guaranteed correct
sum and dot product for floating-point numbers without resorting to arbitrary precision arithmetic.
These algorithms are available:

- Kahan summation, based on [Kahan 65]https://doi.org/10.1145%2F363707.363723
- Neumaier summation, based on [Neumaier 74]https://doi.org/10.1002%2Fzamm.19740540106
- Klein summation, based on [Klein 06]https://doi.org/10.1007%2Fs00607-005-0139-x
- Accurate sum and dot product, based on [Ogita, Rump, and Oishi 05]http://dx.doi.org/10.1137/030601818
- Online exact summation, based on [Zhu and Hayes 10]http://dx.doi.org/10.1145/1824801.1824815

[gh-actions-shield]: https://img.shields.io/github/actions/workflow/status/bsteinb/accurate/test.yml?branch=master&style=flat-square
[gh-actions]: https://github.com/bsteinb/accurate/actions
[doc-shield]: https://img.shields.io/badge/documentation-docs.rs-blue.svg?style=flat-square
[doc]: https://docs.rs/accurate/
[license-shield]: https://img.shields.io/badge/license-Apache_License_2.0_or_MIT-blue.svg?style=flat-square
[license]: https://github.com/bsteinb/accurate#license
[release-shield]: https://img.shields.io/github/release/bsteinb/accurate.svg?style=flat-square
[release]: https://github.com/bsteinb/accurate/releases/latest
[crate-shield]: https://img.shields.io/crates/v/accurate.svg?style=flat-square
[crate]: https://crates.io/crates/accurate

## Usage

Add the `accurate` crate as a dependency in your `Cargo.toml`:

```toml
[dependencies]
accurate = "0.4"
```

Then use it in your program like this:

```rust
extern crate accurate;

use accurate::traits::*;
use accurate::sum::Sum2;

fn main() {
  let x = vec![1.0, 2.0, 3.0];
  let s = x.sum_with_accumulator::<Sum2<_>>();
  assert_eq!(6.0f64, s);
}
```

## Documentation

Documentation for the latest version of the crate is [on docs.rs][doc].

## License

Licensed under either of

 * Apache License, Version 2.0, ([LICENSE-APACHE]LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
 * MIT license ([LICENSE-MIT]LICENSE-MIT or http://opensource.org/licenses/MIT)

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.