https://github.com/ajtribick/twofloat
A double-double arithmetic library for Rust
https://github.com/ajtribick/twofloat
extended-precision floating-point numerics rust-library
Last synced: 9 months ago
JSON representation
A double-double arithmetic library for Rust
- Host: GitHub
- URL: https://github.com/ajtribick/twofloat
- Owner: ajtribick
- License: bsd-3-clause
- Created: 2020-03-01T11:25:56.000Z (almost 6 years ago)
- Default Branch: main
- Last Pushed: 2025-02-02T18:52:51.000Z (11 months ago)
- Last Synced: 2025-04-09T15:07:39.519Z (9 months ago)
- Topics: extended-precision, floating-point, numerics, rust-library
- Language: Rust
- Homepage:
- Size: 310 KB
- Stars: 17
- Watchers: 3
- Forks: 8
- Open Issues: 9
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# twofloat
[](https://crates.io/crates/twofloat)
**A double-double arithmetic library for Rust.**
This library provides an implementation of double-double arithmetic for the
Rust language. Note that this is not the same as the IEEE quadruple-precision
floating-point format. Instead, higher precision is obtained by representing
the value as the sum of two non-overlapping `f64` values.
Operator traits are implemented both for reference and value types where
appropriate. The code indicates the source of the algorithms used.
Mathematical constants are available in the `twofloat::consts` module, which
provides the same set of constants as `std::f64::consts`.
Please note that the implementation of the mathematical functions (`exp`,
`powf`, etc.) is very preliminary. In particular, they are calculated using
operations at the same precision as the result, so they will not return values
which are correct to the full precision of the `TwoFloat` type. This may be
addressed in future releases.
## Optional features
* `math_funcs` - include mathematical functions (enabled by default)
* `serde` - enable serialization/deserialization with Serde.
* `std` - use std mathematical functions instead of libm.
## Known issues
* The MinGW `fma` implementation appears to give incorrect results in some
cases, so the libm implementation is always used on this platform.
## References
* Mioara Joldeș, Jean-Michel Muller, Valentina Popescu. Tight and rigourous
error bounds for basic building blocks of double-word arithmetic. ACM
Transactions on Mathematical Software, Association for Computing Machinery,
2017, 44 (2), pp. 1-27. 10.1145/3121432. hal-01351529v3
* Alan H. Karp, Peter Markstein. High Precision Division and Square Root. ACM
Transactions on Mathematical Software, Association for Computing Machinery,
1997, 23 (4), pp. 561-589. 10.1145/279232.279237.
* S. Chevillard, M. Joldeș and C. Lauter. Sollya: an environment for the
development of numerical codes. Mathematical Software - ICMS 2010, pp.
28–31.