This crate provides an implementation of octuple-precision binary floating-point arithmetics. ### From Wikipedia: "In its 2008 revision, the IEEE 754 standard specifies a `binary256` format among the interchange formats (it is not a basic format), as having: ```text Sign bit: 1 bit Exponent width: 19 bits Significand precision: 237 bits (236 explicitly stored) ``` The format is written with an implicit lead bit with value 1 unless the exponent is all zeros. Thus only 236 bits of the significand appear in the memory format, but the total precision is 237 bits (approximately 71 decimal digits: log₁₀(2²³⁷) ≈ 71.344). The bits are laid out as follows: ![Layout of octuple-precision floating-point format](https://upload.wikimedia.org/wikipedia/commons/thumb/3/30/Octuple_precision_visual_demonstration.svg/2560px-Octuple_precision_visual_demonstration.svg.png) ##### Exponent encoding The octuple-precision binary floating-point exponent is encoded using an offset binary representation, with the zero offset being 262143; also known as exponent bias in the IEEE 754 standard. ```text Eₘᵢₙ = −262142 Eₘₐₓ = 262143 Exponent bias = 3FFFF₁₆ = 262143 ``` Thus, as defined by the offset binary representation, in order to get the true exponent the offset of 262143 has to be subtracted from the stored exponent. The stored exponents 00000₁₆ and 7FFFF₁₆ are interpreted specially. | Exponent | Significand zero | Significand non-zero | Equation | |-------------------|------------------|-------------------------|--------------------------------------------------------------------------| | 00000₁₆ | 0, −0 | subnormal numbers | (-1)signbit × 2⁻²⁶²¹⁴² × 0.significandbits₂ | | 00001₁₆ … 7FFFE₁₆ | normalized value | normalized value | (-1)signbit × 2exponent bits₂ × 1.significandbits₂ | | 7FFFF₁₆ | ±∞ | NaN (quiet, signalling) | The minimum strictly positive (subnormal) value is 2⁻²⁶²³⁷⁸ ≈ 10⁻⁷⁸⁹⁸⁴ and has a precision of only one bit. The minimum positive normal value is 2⁻²⁶²¹⁴² ≈ 2.4824 × 10⁻⁷⁸⁹¹³. The maximum representable value is 2²⁶²¹⁴⁴ − 2²⁶¹⁹⁰⁷ ≈ 1.6113 × 10⁷⁸⁹¹³. The type `f256` will provide the same stable API as the built-in `f64` (besides differences caused by the increased precision). ### Getting started Add `f256` to your `Cargo.toml`: ```toml [dependencies] f256 = "0.3" ``` ### Crate features By default, only the feature `std` is enabled. #### Ecosystem * **std** - Printing and some tests depend on this feature. Besides that, support for conversion to string and formatting is provided by using crate `alloc` so that this functionality is also available in non-standard environments. #### Optional dependencies * **num-traits** - When enabled, the trait `num-traits::Num` is implemented for `f256`.