This commit is contained in:
@@ -88,6 +88,12 @@ The `DDMath` static class provides:
|
||||
to retain extended precision, including for subnormal inputs, without squaring
|
||||
an unscaled estimate near the exponent limits. Signed zero and positive infinity
|
||||
are preserved; negative nonzero inputs and NaN return canonical NaN.
|
||||
- `InvSqrt(DoubleDouble)`: computes the reciprocal square root with power-of-two
|
||||
scaling and a compensated Newton step, avoiding double-double division and its
|
||||
allocating boundary paths. The estimate's squared-product residual is retained
|
||||
with FMA. Signed zeros map to correspondingly signed infinities; positive infinity
|
||||
maps to positive zero; negative nonzero inputs and NaN return canonical NaN.
|
||||
This is a dedicated algorithm, not a claim of measured speedup over `1.0 / Sqrt(x)`.
|
||||
- `Pow(DoubleDouble, int)`: exponentiation by squaring with a separately tracked
|
||||
binary exponent. Supports the full `int` domain, including `int.MinValue`, and
|
||||
reciprocates a bounded significand before final scaling for negative exponents.
|
||||
@@ -115,6 +121,7 @@ The `DDMath` static class provides:
|
||||
using Just.PreciseMath;
|
||||
|
||||
DoubleDouble root = DDMath.Sqrt(new DoubleDouble(2.0));
|
||||
DoubleDouble inverseRoot = DDMath.InvSqrt(new DoubleDouble(2.0));
|
||||
DoubleDouble magnitude = DDMath.Abs(-root);
|
||||
DoubleDouble smallPower = DDMath.Pow(new DoubleDouble(2.0), -1024);
|
||||
DoubleDouble exponential = DDMath.Exp(new DoubleDouble(1.0));
|
||||
@@ -124,10 +131,12 @@ DoubleDouble preciseExponent = DoubleDouble.FromComponents(0.5, 1e-30);
|
||||
DoubleDouble precisePower = DDMath.Pow(new DoubleDouble(2.0), preciseExponent);
|
||||
```
|
||||
|
||||
Square-root tests compare the exact component sum against a `2^-100` relative
|
||||
error bound using integer inequalities. They include samples at every binary64
|
||||
Square-root and inverse-square-root tests compare the exact component sum against
|
||||
a `2^-100` relative error bound using integer inequalities. They include samples at every binary64
|
||||
exponent, boundary neighbors, both signs of the low component, and exact binary
|
||||
squares. This is a tested approximate-accuracy contract, not exhaustive coverage
|
||||
squares/powers of four. Square-root tests also bracket exact root-rounding midpoints;
|
||||
both suites exercise half-ulp low-component normalization boundaries.
|
||||
This is a tested approximate-accuracy contract, not exhaustive coverage
|
||||
of all component pairs or a guarantee of correctly rounded results.
|
||||
|
||||
Logarithm tests compare exact component sums with independently generated
|
||||
|
||||
Reference in New Issue
Block a user