@@ -0,0 +1,64 @@
|
||||
namespace Just.PreciseMath;
|
||||
|
||||
public static partial class DDMath
|
||||
{
|
||||
/// <summary>Returns e raised to the specified double-double value.</summary>
|
||||
/// <remarks>
|
||||
/// Uses binary range reduction and a [12/12] Padé approximation. Results are
|
||||
/// approximate, not guaranteed correctly rounded; tests check 2^-100 relative
|
||||
/// error plus one minimum binary64 subnormal against high-precision references.
|
||||
/// Precision decreases near underflow. NaN returns canonical NaN; positive
|
||||
/// infinity returns positive infinity, negative infinity returns positive zero,
|
||||
/// and either zero returns one. Both input components affect range boundaries.
|
||||
/// </remarks>
|
||||
[Pure]
|
||||
public static DoubleDouble Exp(DoubleDouble value)
|
||||
{
|
||||
if (double.IsNaN(value.High))
|
||||
{
|
||||
return DoubleDouble.NaN;
|
||||
}
|
||||
// These deliberately loose bounds only reject inputs safely outside the
|
||||
// result range, even with a normalized low of either sign. They also keep
|
||||
// infinities and huge finite inputs out of the floating-to-int conversion.
|
||||
if (value.High > 710.0)
|
||||
{
|
||||
return new DoubleDouble(double.PositiveInfinity);
|
||||
}
|
||||
if (value.High < -746.0)
|
||||
{
|
||||
return DoubleDouble.Zero;
|
||||
}
|
||||
if (value.High == 0.0)
|
||||
{
|
||||
return DoubleDouble.One;
|
||||
}
|
||||
|
||||
// The binary64 estimate need not choose the nearest k on a tie: either
|
||||
// neighbor leaves |r| < 0.347. k is bounded by [-1076, 1024]. Subtract
|
||||
// separate products to retain cancellation residuals. A third ln(2)
|
||||
// component prevents k times the DD constant error from dominating r.
|
||||
// Generated independently at 180/260 decimal digits by generate_exp.py.
|
||||
const double ln2Tail = 5.707708438416212e-34;
|
||||
int exponent = (int)Math.Round(value.High / DoubleDouble.Ln2.High);
|
||||
DoubleDouble reduced = value - (new DoubleDouble(DoubleDouble.Ln2.High) * exponent);
|
||||
reduced -= new DoubleDouble(DoubleDouble.Ln2.Low) * exponent;
|
||||
reduced -= new DoubleDouble(ln2Tail) * exponent;
|
||||
|
||||
// P(x)/P(-x), with exact binary64 integer coefficients. For n=12,
|
||||
// c_k = (24-k)!*12! / (24!*k!*(12-k)!), scaled by 1/c_12.
|
||||
// This retains the legacy approximation but not its unsafe E^k scaling.
|
||||
// Horner accumulators remain normal and finite on the reduced interval.
|
||||
ReadOnlySpan<double> coefficients = [156.0, 12012.0, 600600.0, 21621600.0,
|
||||
588107520.0, 12350257920.0, 201132771840.0, 2514159648000.0,
|
||||
23465490048000.0, 154872234316800.0, 647647525324800.0, 1295295050649600.0];
|
||||
DoubleDouble numerator = DoubleDouble.One;
|
||||
DoubleDouble denominator = DoubleDouble.One;
|
||||
foreach (double coefficient in coefficients)
|
||||
{
|
||||
numerator = (numerator * reduced) + coefficient;
|
||||
denominator = (denominator * -reduced) + coefficient;
|
||||
}
|
||||
return ScalePowerOfTwo(numerator / denominator, exponent);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,77 @@
|
||||
namespace Just.PreciseMath;
|
||||
|
||||
public static partial class DDMath
|
||||
{
|
||||
/// <summary>Returns the natural logarithm of a double-double value.</summary>
|
||||
/// <remarks>
|
||||
/// Either signed zero returns negative infinity; one returns positive zero.
|
||||
/// Positive infinity is preserved. Negative nonzero values and NaN return
|
||||
/// canonical NaN. Both input components contribute to the finite result.
|
||||
/// Uses binary range reduction and an atanh series, with a separate near-one
|
||||
/// path that preserves sparse low components. Results are approximate, not
|
||||
/// guaranteed correctly rounded: tests check 2^-100 relative error plus one
|
||||
/// minimum binary64 subnormal against independent high-precision references.
|
||||
/// </remarks>
|
||||
[Pure]
|
||||
public static DoubleDouble Log(DoubleDouble value)
|
||||
{
|
||||
if (double.IsNaN(value.High) || value.High < 0.0)
|
||||
{
|
||||
return DoubleDouble.NaN;
|
||||
}
|
||||
if (value.High == 0.0)
|
||||
{
|
||||
return new DoubleDouble(double.NegativeInfinity);
|
||||
}
|
||||
if (double.IsPositiveInfinity(value.High))
|
||||
{
|
||||
return value;
|
||||
}
|
||||
if (value == DoubleDouble.One)
|
||||
{
|
||||
return DoubleDouble.Zero;
|
||||
}
|
||||
return LogPositiveFinite(value);
|
||||
}
|
||||
|
||||
// Shared with Pow. Requires a positive finite normalized value other than one;
|
||||
// callers handle domain errors and special values before any range reduction.
|
||||
private static DoubleDouble LogPositiveFinite(DoubleDouble value)
|
||||
{
|
||||
if (value.High == 1.0 && Math.Abs(value.Low) <= Math.ScaleB(1.0, -54))
|
||||
{
|
||||
// log(1+d) = d - d^2/2 + O(d^3). The omitted relative term is
|
||||
// below 2^-108. Keep d itself, rather than forming d/(2+d), which
|
||||
// could round a minimum-subnormal low to zero before a huge power
|
||||
// amplifies it. Underflow of d^2 is immaterial to the relative bound.
|
||||
DoubleDouble delta = new(value.Low);
|
||||
return delta - ((delta * delta) * 0.5);
|
||||
}
|
||||
|
||||
int exponent = Math.ILogB(value.High);
|
||||
DoubleDouble mantissa = DoubleDouble.FromComponents(Math.ScaleB(value.High, -exponent),
|
||||
Math.ScaleB(value.Low, -exponent));
|
||||
if (mantissa.High > DoubleDouble.Sqrt2.High)
|
||||
{
|
||||
mantissa *= 0.5;
|
||||
++exponent;
|
||||
}
|
||||
|
||||
// The mantissa is approximately in [1/sqrt(2), sqrt(2)], so
|
||||
// |t| = |(m-1)/(m+1)| < 0.172. Centering at one avoids cancellation
|
||||
// between log(m) and exponent*ln(2) for inputs immediately below one.
|
||||
// All unscaled sums are bounded: m+1 cannot overflow at large inputs.
|
||||
DoubleDouble t = (mantissa - 1.0) / (mantissa + 1.0);
|
||||
DoubleDouble squared = t * t;
|
||||
DoubleDouble term = t;
|
||||
DoubleDouble sum = t;
|
||||
for (int denominator = 3; denominator <= 49; denominator += 2)
|
||||
{
|
||||
term *= squared;
|
||||
sum += term / denominator;
|
||||
}
|
||||
// log(m) = 2*atanh(t). The omitted series tail is bounded by
|
||||
// 2*|t|^51/(51*(1-t^2)); rounding, not truncation, dominates.
|
||||
return (sum * 2.0) + (DoubleDouble.Ln2 * exponent);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,164 @@
|
||||
namespace Just.PreciseMath;
|
||||
|
||||
public static partial class DDMath
|
||||
{
|
||||
/// <summary>Raises a double-double value to an integer power.</summary>
|
||||
/// <remarks>
|
||||
/// Uses exponentiation by squaring with a separately tracked binary exponent,
|
||||
/// so negative powers do not overflow or underflow before reciprocation. All
|
||||
/// integer exponents, including <see cref="int.MinValue"/>, are supported.
|
||||
/// Any value to power zero is one, including NaN and either zero. Otherwise
|
||||
/// NaN propagates; zero and infinity follow binary64 integer-power sign rules.
|
||||
/// Results are approximate, not guaranteed correctly rounded. Error can grow
|
||||
/// with the exponent magnitude; the tested absolute error bound for finite
|
||||
/// results is |exact result| * (|exponent| + 1) * 2^-100 + 2^-1074.
|
||||
/// This is not a uniform 2^-100 relative accuracy claim or a proof for every
|
||||
/// input. Precision decreases near underflow, and results extremely close to
|
||||
/// overflow or underflow rounding boundaries can be affected by approximation.
|
||||
/// </remarks>
|
||||
[Pure]
|
||||
public static DoubleDouble Pow(DoubleDouble value, int exponent)
|
||||
{
|
||||
if (exponent == 0)
|
||||
{
|
||||
return DoubleDouble.One;
|
||||
}
|
||||
if (double.IsNaN(value.High))
|
||||
{
|
||||
return DoubleDouble.NaN;
|
||||
}
|
||||
if (exponent == 1)
|
||||
{
|
||||
// Even a low thousands of bits below high must survive the identity.
|
||||
return value;
|
||||
}
|
||||
bool negative = double.IsNegative(value.High) && (exponent & 1) != 0;
|
||||
if (value.High == 0.0 || double.IsInfinity(value.High))
|
||||
{
|
||||
bool infinite = (value.High == 0.0) == (exponent < 0);
|
||||
double magnitude = infinite ? double.PositiveInfinity : 0.0;
|
||||
return new DoubleDouble(negative ? -magnitude : magnitude);
|
||||
}
|
||||
|
||||
// Widen BEFORE negation: abs(int.MinValue) is not an int.
|
||||
long remaining = exponent < 0 ? -(long)exponent : exponent;
|
||||
long factorExponent = Math.ILogB(value.High);
|
||||
DoubleDouble factor = DoubleDouble.FromComponents(
|
||||
Math.ScaleB(Math.Abs(value.High), -(int)factorExponent),
|
||||
Math.ScaleB(value.High < 0.0 ? -value.Low : value.Low, -(int)factorExponent));
|
||||
DoubleDouble result = DoubleDouble.One;
|
||||
long resultExponent = 0;
|
||||
while (remaining != 0)
|
||||
{
|
||||
if ((remaining & 1) != 0)
|
||||
{
|
||||
result *= factor;
|
||||
resultExponent += factorExponent;
|
||||
result = NormalizePowerMantissa(result, ref resultExponent);
|
||||
}
|
||||
remaining >>= 1;
|
||||
if (remaining != 0)
|
||||
{
|
||||
factor *= factor;
|
||||
factorExponent *= 2;
|
||||
factor = NormalizePowerMantissa(factor, ref factorExponent);
|
||||
}
|
||||
}
|
||||
if (exponent < 0)
|
||||
{
|
||||
// Reciprocate the bounded significand, NOT the range-limited result.
|
||||
result = DoubleDouble.One / result;
|
||||
resultExponent = -resultExponent;
|
||||
}
|
||||
return ScalePowerOfTwo(negative ? -result : result, resultExponent);
|
||||
}
|
||||
|
||||
/// <summary>Raises a double-double value to a binary64 power.</summary>
|
||||
/// <remarks>
|
||||
/// Promotes the exponent exactly to a zero-low expansion and uses the same
|
||||
/// domain, special-value, and accuracy rules as <see cref="Pow(DoubleDouble, DoubleDouble)"/>.
|
||||
/// The base retains both components.
|
||||
/// </remarks>
|
||||
[Pure]
|
||||
public static DoubleDouble Pow(DoubleDouble value, double exponent)
|
||||
{
|
||||
return Pow(value, new DoubleDouble(exponent));
|
||||
}
|
||||
|
||||
/// <summary>Raises a double-double value to a double-double power.</summary>
|
||||
/// <remarks>
|
||||
/// Both exponent components determine integrality and parity. For finite
|
||||
/// exponents, negative finite bases require an integer exponent; otherwise
|
||||
/// the result is canonical NaN.
|
||||
/// Any base to either zero power is one, and positive one to any power is one,
|
||||
/// including NaN. Other NaNs propagate. Infinite exponents compare the complete
|
||||
/// base magnitude with one; either unit magnitude to infinite power is one.
|
||||
/// Zero and infinite bases have a negative result only for odd integer powers;
|
||||
/// negative powers exchange zero and infinity. Integral exponents within the
|
||||
/// int range reuse <see cref="Pow(DoubleDouble, int)"/> and its accuracy contract.
|
||||
/// Other finite cases use a scaled logarithm and <see cref="Exp"/>, tested
|
||||
/// against 2^-90 relative error plus one minimum binary64 subnormal with
|
||||
/// independent high-precision references. This is a tested bound, not a
|
||||
/// universal proof or correct-rounding guarantee. Precision decreases near
|
||||
/// underflow, and approximation can affect exceptionally close range boundaries.
|
||||
/// </remarks>
|
||||
[Pure]
|
||||
public static DoubleDouble Pow(DoubleDouble value, DoubleDouble exponent)
|
||||
{
|
||||
if (DoubleDouble.IsZero(exponent) || value == DoubleDouble.One)
|
||||
{
|
||||
return DoubleDouble.One;
|
||||
}
|
||||
if (DoubleDouble.IsNaN(value) || DoubleDouble.IsNaN(exponent))
|
||||
{
|
||||
return DoubleDouble.NaN;
|
||||
}
|
||||
|
||||
DoubleDouble magnitude = DoubleDouble.Abs(value);
|
||||
if (DoubleDouble.IsInfinity(exponent))
|
||||
{
|
||||
if (magnitude == DoubleDouble.One)
|
||||
{
|
||||
return DoubleDouble.One;
|
||||
}
|
||||
bool grows = (magnitude > DoubleDouble.One) == (exponent.High > 0.0);
|
||||
return grows ? new DoubleDouble(double.PositiveInfinity) : DoubleDouble.Zero;
|
||||
}
|
||||
|
||||
bool integer = DoubleDouble.IsInteger(exponent);
|
||||
if (integer && exponent.High >= int.MinValue && exponent.High <= int.MaxValue)
|
||||
{
|
||||
// A normalized integer in this range has a zero low component.
|
||||
// Reuse the integer algorithm, including exact identities and ties.
|
||||
return Pow(value, (int)exponent.High);
|
||||
}
|
||||
bool negative = double.IsNegative(value.High) && DoubleDouble.IsOddInteger(exponent);
|
||||
if (value.High == 0.0 || DoubleDouble.IsInfinity(value))
|
||||
{
|
||||
bool infinite = (value.High == 0.0) == (exponent.High < 0.0);
|
||||
double result = infinite ? double.PositiveInfinity : 0.0;
|
||||
return new DoubleDouble(negative ? -result : result);
|
||||
}
|
||||
if (value.High < 0.0 && !integer)
|
||||
{
|
||||
return DoubleDouble.NaN;
|
||||
}
|
||||
if (magnitude == DoubleDouble.One)
|
||||
{
|
||||
return negative ? DoubleDouble.NegativeOne : DoubleDouble.One;
|
||||
}
|
||||
DoubleDouble resultMagnitude = Exp(exponent * LogPositiveFinite(magnitude));
|
||||
return negative ? -resultMagnitude : resultMagnitude;
|
||||
}
|
||||
|
||||
private static DoubleDouble NormalizePowerMantissa(DoubleDouble value, ref long exponent)
|
||||
{
|
||||
// High is positive and in [1, 4], including a rounded binade endpoint.
|
||||
// Both multiply operands stay modest; a long safely tracks even
|
||||
// int.MinValue times any finite input's binary64 exponent.
|
||||
int adjustment = Math.ILogB(value.High);
|
||||
exponent += adjustment;
|
||||
return DoubleDouble.FromComponents(Math.ScaleB(value.High, -adjustment),
|
||||
Math.ScaleB(value.Low, -adjustment));
|
||||
}
|
||||
}
|
||||
@@ -2,7 +2,7 @@ namespace Just.PreciseMath;
|
||||
|
||||
/// <summary>Provides mathematical functions for normalized double-double values.</summary>
|
||||
/// <remarks>Results use fixed-size double-double precision, not arbitrary precision.</remarks>
|
||||
public static class DDMath
|
||||
public static partial class DDMath
|
||||
{
|
||||
/// <summary>Returns the absolute value without discarding the low component.</summary>
|
||||
/// <remarks>Both signs of zero become positive zero; NaN is canonicalized and either infinity becomes positive infinity.</remarks>
|
||||
@@ -54,4 +54,29 @@ public static class DDMath
|
||||
int rootExponent = exponent / 2;
|
||||
return DoubleDouble.FromComponents(Math.ScaleB(root.High, rootExponent), Math.ScaleB(root.Low, rootExponent));
|
||||
}
|
||||
|
||||
// For finite, nonzero normalized significands and exponents bounded by the
|
||||
// integer-power domain (|exponent| < 2^42). Keep the exponent separate until
|
||||
// the final result so an intermediate cannot overflow before reciprocation.
|
||||
private static DoubleDouble ScalePowerOfTwo(DoubleDouble value, long exponent)
|
||||
{
|
||||
long resultExponent = Math.ILogB(value.High) + exponent;
|
||||
if (resultExponent > 1024)
|
||||
{
|
||||
return new DoubleDouble(Math.CopySign(double.PositiveInfinity, value.High));
|
||||
}
|
||||
if (resultExponent < -1075)
|
||||
{
|
||||
return new DoubleDouble(Math.CopySign(0.0, value.High));
|
||||
}
|
||||
if (resultExponent >= -969 && resultExponent <= 1022)
|
||||
{
|
||||
// Normal high and room for a dense low; a sparse low may underflow
|
||||
// by at most half a minimum subnormal. Normalize its signed zero.
|
||||
return DoubleDouble.FromComponents(Math.ScaleB(value.High, (int)exponent),
|
||||
Math.ScaleB(value.Low, (int)exponent));
|
||||
}
|
||||
|
||||
return PreciseMathHelper.ScalePowerOfTwoBoundary(value, exponent);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -182,13 +182,6 @@ internal static class PreciseMathHelper
|
||||
return ArithmeticFromRatio(ArithmeticUnits(left) + ArithmeticUnits(right), BigInteger.One << 1074);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.NoInlining)]
|
||||
private static DoubleDouble AddScalarBoundary(double high, double low, double value)
|
||||
{
|
||||
// As in AddScalar, high/low are normalized but a negated zero low is allowed.
|
||||
return ArithmeticFromRatio(ArithmeticUnits(high) + ArithmeticUnits(low) + ArithmeticUnits(value), BigInteger.One << 1074);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.NoInlining)]
|
||||
internal static DoubleDouble MultiplyBoundary(DoubleDouble left, DoubleDouble right)
|
||||
{
|
||||
@@ -219,6 +212,29 @@ internal static class PreciseMathHelper
|
||||
return ArithmeticFromRatio(ArithmeticUnits(left), ArithmeticUnits(right));
|
||||
}
|
||||
|
||||
// The caller supplies a finite, nonzero normalized value and has bounded
|
||||
// ILogB(value.High) + exponent to [-1075, 1024], keeping both shifts small.
|
||||
// Isolate all allocating setup from ordinary scaling, including conversion
|
||||
// to integer units and construction of the denominator.
|
||||
[MethodImpl(MethodImplOptions.NoInlining)]
|
||||
internal static DoubleDouble ScalePowerOfTwoBoundary(DoubleDouble value, long exponent)
|
||||
{
|
||||
// Scale the complete expansion exactly at either exponent boundary.
|
||||
// Scaling the high first could overflow despite a negative low, or round
|
||||
// a subnormal tie the wrong way before the low is taken into account.
|
||||
BigInteger numerator = ArithmeticUnits(value);
|
||||
BigInteger denominator = BigInteger.One << 1074;
|
||||
if (exponent >= 0)
|
||||
{
|
||||
numerator <<= (int)exponent;
|
||||
}
|
||||
else
|
||||
{
|
||||
denominator <<= (int)-exponent;
|
||||
}
|
||||
return ArithmeticFromRatio(numerator, denominator);
|
||||
}
|
||||
|
||||
// The boundary path uses bounded binary integers (at most about 4200 bits), not
|
||||
// arbitrary-precision storage. It avoids overflow and double rounding in EFTs
|
||||
// at the binary64 exponent limits. The common path remains allocation-free.
|
||||
@@ -266,6 +282,13 @@ internal static class PreciseMathHelper
|
||||
return DoubleDouble.FromComponents(high, low);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.NoInlining)]
|
||||
private static DoubleDouble AddScalarBoundary(double high, double low, double value)
|
||||
{
|
||||
// As in AddScalar, high/low are normalized but a negated zero low is allowed.
|
||||
return ArithmeticFromRatio(ArithmeticUnits(high) + ArithmeticUnits(low) + ArithmeticUnits(value), BigInteger.One << 1074);
|
||||
}
|
||||
|
||||
// Round an exact rational to binary64, ties-to-even, including subnormal and
|
||||
// overflow boundaries. Denominator is positive; sign is retained on underflow.
|
||||
private static double ArithmeticRound(BigInteger numerator, BigInteger denominator)
|
||||
|
||||
@@ -0,0 +1,110 @@
|
||||
using System.Globalization;
|
||||
using System.Numerics;
|
||||
using Just.PreciseMath.Tests.ReferenceData;
|
||||
using Shouldly;
|
||||
using Xunit;
|
||||
|
||||
namespace Just.PreciseMath.Tests;
|
||||
|
||||
public class PreciseMathExpTests
|
||||
{
|
||||
public static IEnumerable<TheoryDataRow<double, double, string, bool, bool>> ReferenceCases => ExpReferenceData.Cases();
|
||||
|
||||
[Theory]
|
||||
[MemberData(nameof(ReferenceCases))]
|
||||
public void FiniteInputsMeetIndependentReferenceBound(double high, double low, string reference,
|
||||
bool overflow, bool underflow)
|
||||
{
|
||||
// Decimal.exp at 180/260 digits, rounded to 120 digits by generate_exp.py.
|
||||
// Inputs are exact stored binary64 sums, not rounded irrational constants.
|
||||
DoubleDouble input = DoubleDouble.FromComponents(high, low);
|
||||
(Units(input.High) + Units(input.Low)).ShouldBe(Units(high) + Units(low));
|
||||
DoubleDouble actual = DDMath.Exp(input);
|
||||
DoubleDouble.IsCanonical(actual).ShouldBeTrue();
|
||||
if (overflow)
|
||||
{
|
||||
actual.High.ShouldBe(double.PositiveInfinity);
|
||||
return;
|
||||
}
|
||||
if (underflow)
|
||||
{
|
||||
BitConverter.DoubleToInt64Bits(actual.High).ShouldBe(0L);
|
||||
return;
|
||||
}
|
||||
DoubleDouble.IsFinite(actual).ShouldBeTrue();
|
||||
(actual.High > 0.0).ShouldBeTrue();
|
||||
string[] parts = reference.Split('e');
|
||||
int point = parts[0].IndexOf('.', StringComparison.Ordinal);
|
||||
int decimals = point < 0 ? 0 : parts[0].Length - point - 1;
|
||||
BigInteger numerator = BigInteger.Parse(parts[0].Replace(".", "", StringComparison.Ordinal), CultureInfo.InvariantCulture);
|
||||
int exponent = int.Parse(parts[1], CultureInfo.InvariantCulture) - decimals;
|
||||
BigInteger denominator = BigInteger.One;
|
||||
if (exponent >= 0)
|
||||
{
|
||||
numerator *= BigInteger.Pow(10, exponent);
|
||||
}
|
||||
else
|
||||
{
|
||||
denominator = BigInteger.Pow(10, -exponent);
|
||||
}
|
||||
BigInteger actualUnits = Units(actual.High) + Units(actual.Low);
|
||||
BigInteger error = BigInteger.Abs((actualUnits * denominator) - (numerator << 1074));
|
||||
// Contract: 2^-100 relative + one minimum subnormal. The independent
|
||||
// decimal reference error is < 2^-350 relative; include it explicitly.
|
||||
BigInteger bound = (numerator << 1324) + (denominator << 350) + (numerator << 1074);
|
||||
((error << 350) <= bound).ShouldBeTrue(
|
||||
$"Exp bound failed for ({high:R}, {low:R}): ({actual.High:R}, {actual.Low:R})");
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData(-740.0, 85L)]
|
||||
[InlineData(-745.131, 1L)]
|
||||
public void LegacySubnormalResultsRoundToTheExpectedUnits(double input, long expectedBits)
|
||||
{
|
||||
// Independently round Decimal.exp(exact binary64 input)/2^-1074 to an
|
||||
// integer at 180 digits. Pin more than the general one-subnormal bound.
|
||||
DoubleDouble actual = DDMath.Exp(new DoubleDouble(input));
|
||||
BitConverter.DoubleToInt64Bits(actual.High).ShouldBe(expectedBits);
|
||||
BitConverter.DoubleToInt64Bits(actual.Low).ShouldBe(0L);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData(709.5)]
|
||||
[InlineData(709.781)]
|
||||
public void LegacyFiniteResultsDoNotOverflowPrematurely(double input)
|
||||
{
|
||||
DoubleDouble actual = DDMath.Exp(new DoubleDouble(input));
|
||||
DoubleDouble.IsFinite(actual).ShouldBeTrue();
|
||||
actual.Low.ShouldNotBe(0.0);
|
||||
// Component-aware accuracy for these exact inputs is pinned by ReferenceCases.
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void SpecialValuesAreHandledBeforeRangeReduction()
|
||||
{
|
||||
double[] inputs = [0.0, -0.0, double.NaN, double.PositiveInfinity, double.NegativeInfinity,
|
||||
double.MaxValue, double.MinValue];
|
||||
foreach (double input in inputs)
|
||||
{
|
||||
DoubleDouble actual = DDMath.Exp(new DoubleDouble(input));
|
||||
double expected = Math.Exp(input);
|
||||
BitConverter.DoubleToInt64Bits(actual.High).ShouldBe(
|
||||
BitConverter.DoubleToInt64Bits(double.IsNaN(expected) ? double.NaN : expected));
|
||||
BitConverter.DoubleToInt64Bits(actual.Low).ShouldBe(0L);
|
||||
DoubleDouble.IsCanonical(actual).ShouldBeTrue();
|
||||
}
|
||||
}
|
||||
|
||||
private static BigInteger Units(double value)
|
||||
{
|
||||
long bits = BitConverter.DoubleToInt64Bits(value);
|
||||
int exponent = (int)((bits >> 52) & 0x7ff);
|
||||
BigInteger significand = bits & 0xfffffffffffffL;
|
||||
if (exponent != 0)
|
||||
{
|
||||
significand += BigInteger.One << 52;
|
||||
significand <<= exponent - 1;
|
||||
}
|
||||
return bits < 0 ? -significand : significand;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,146 @@
|
||||
using System.Globalization;
|
||||
using System.Numerics;
|
||||
using Just.PreciseMath.Tests.ReferenceData;
|
||||
using Shouldly;
|
||||
using Xunit;
|
||||
|
||||
namespace Just.PreciseMath.Tests;
|
||||
|
||||
public class PreciseMathLogTests
|
||||
{
|
||||
public static IEnumerable<TheoryDataRow<string, double, double, string>> ReferenceCases => LogReferenceData.Cases();
|
||||
|
||||
[Fact]
|
||||
public void SpecialValuesHaveExplicitCanonicalResults()
|
||||
{
|
||||
// Legacy Log(0) reached Exp(-Infinity) and threw. Domain handling must
|
||||
// precede finite range reduction, with either zero mapping to -Infinity.
|
||||
double[] values = [0.0, -0.0, 1.0, -1.0, -double.Epsilon, double.MinValue,
|
||||
double.PositiveInfinity, double.NegativeInfinity, double.NaN];
|
||||
foreach (double value in values)
|
||||
{
|
||||
DoubleDouble expected = new(Math.Log(value));
|
||||
AssertBits(DDMath.Log(new DoubleDouble(value)), expected.High, 0.0);
|
||||
}
|
||||
DoubleDouble negative = DoubleDouble.FromComponents(-1.0, Math.ScaleB(1.0, -54));
|
||||
AssertBits(DDMath.Log(negative), double.NaN, 0.0);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[MemberData(nameof(ReferenceCases))]
|
||||
public void FiniteInputsMeetIndependentReferenceBound(string label, double high, double low, string reference)
|
||||
{
|
||||
// Decimal.ln at 450/650 digits, from exact component sums formed at
|
||||
// 2200 digits and checked with Fraction. No binary64 log supplies the oracle.
|
||||
DoubleDouble input = DoubleDouble.FromComponents(high, low);
|
||||
(Units(input.High) + Units(input.Low)).ShouldBe(Units(high) + Units(low));
|
||||
DoubleDouble actual = DDMath.Log(input);
|
||||
AssertReferenceBound(actual, reference, 1, $"{label}: ({high:R}, {low:R})");
|
||||
if (input == DoubleDouble.One)
|
||||
{
|
||||
AssertBits(actual, 0.0, 0.0);
|
||||
}
|
||||
else
|
||||
{
|
||||
Math.Sign(actual.High).ShouldBe(input > DoubleDouble.One ? 1 : -1);
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void PowersOfTwoCoverEveryFiniteBinaryInputExponent()
|
||||
{
|
||||
// ln(2^k) = k*ln(2). Multiply the independent decimal reference by k
|
||||
// with exact integers, never using the library constant or DD arithmetic.
|
||||
for (int exponent = -1074; exponent <= 1023; ++exponent)
|
||||
{
|
||||
DoubleDouble input = new(Math.ScaleB(1.0, exponent));
|
||||
AssertReferenceBound(DDMath.Log(input), LogReferenceData.Ln2, exponent, $"2^{exponent}");
|
||||
}
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData(1e308)]
|
||||
[InlineData(double.MaxValue)]
|
||||
[InlineData(1e-308)]
|
||||
public void ExtremeFiniteInputsRetainExtendedPrecisionWithoutDenominatorOverflow(double input)
|
||||
{
|
||||
// The legacy Log(1e308) formed u+value and overflowed. The finite
|
||||
// kernel must reduce the mantissa before constructing its denominator.
|
||||
DoubleDouble actual = DDMath.Log(new DoubleDouble(input));
|
||||
DoubleDouble.IsFinite(actual).ShouldBeTrue();
|
||||
actual.Low.ShouldNotBe(0.0);
|
||||
DoubleDouble.IsCanonical(actual).ShouldBeTrue();
|
||||
// ReferenceCases independently pins the complete result for these inputs.
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void NearOneRetainsSparseCorrectionsOfEitherSign()
|
||||
{
|
||||
foreach (double sign in new[] { -1.0, 1.0 })
|
||||
{
|
||||
AssertBits(DDMath.Log(DoubleDouble.FromComponents(1.0, sign * double.Epsilon)),
|
||||
sign * double.Epsilon, 0.0);
|
||||
double delta = sign * Math.ScaleB(1.0, -500);
|
||||
// ln(1+d) = d-d^2/2+O(d^3). Here the cubic tail is below half
|
||||
// the minimum subnormal, so these two binary components are exact.
|
||||
AssertBits(DDMath.Log(DoubleDouble.FromComponents(1.0, delta)),
|
||||
delta, -Math.ScaleB(1.0, -1001));
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ArbitraryPairsAreNormalizedByThePublicFactoryBeforeLog()
|
||||
{
|
||||
DoubleDouble positive = DoubleDouble.FromComponents(0.0, 2.0);
|
||||
AssertReferenceBound(DDMath.Log(positive), LogReferenceData.Ln2, 1, "zero-high public construction");
|
||||
AssertBits(DDMath.Log(DoubleDouble.FromComponents(0.0, -2.0)), double.NaN, 0.0);
|
||||
}
|
||||
|
||||
private static void AssertReferenceBound(DoubleDouble actual, string reference, int factor, string context)
|
||||
{
|
||||
DoubleDouble.IsFinite(actual).ShouldBeTrue(context);
|
||||
DoubleDouble.IsCanonical(actual).ShouldBeTrue(context);
|
||||
string[] parts = reference.Split('e');
|
||||
int point = parts[0].IndexOf('.', StringComparison.Ordinal);
|
||||
int decimals = point < 0 ? 0 : parts[0].Length - point - 1;
|
||||
BigInteger numerator = factor * BigInteger.Parse(parts[0].Replace(".", "", StringComparison.Ordinal), CultureInfo.InvariantCulture);
|
||||
int exponent = int.Parse(parts[1], CultureInfo.InvariantCulture) - decimals;
|
||||
BigInteger denominator = BigInteger.One;
|
||||
if (exponent >= 0)
|
||||
{
|
||||
numerator *= BigInteger.Pow(10, exponent);
|
||||
}
|
||||
else
|
||||
{
|
||||
denominator = BigInteger.Pow(10, -exponent);
|
||||
}
|
||||
BigInteger actualUnits = Units(actual.High) + Units(actual.Low);
|
||||
BigInteger error = BigInteger.Abs((actualUnits * denominator) - (numerator << 1074));
|
||||
BigInteger magnitude = BigInteger.Abs(numerator);
|
||||
// 2^-100 relative + one minimum subnormal, with independent reference
|
||||
// uncertainty <2^-350 relative explicitly included. No component collapse.
|
||||
BigInteger bound = (magnitude << 1324) + (denominator << 350) + (magnitude << 1074);
|
||||
((error << 350) <= bound).ShouldBeTrue(
|
||||
$"Log bound failed for {context}: ({actual.High:R}, {actual.Low:R})");
|
||||
}
|
||||
|
||||
private static BigInteger Units(double value)
|
||||
{
|
||||
long bits = BitConverter.DoubleToInt64Bits(value);
|
||||
int exponent = (int)((bits >> 52) & 0x7ff);
|
||||
BigInteger significand = bits & 0xfffffffffffffL;
|
||||
if (exponent != 0)
|
||||
{
|
||||
significand += BigInteger.One << 52;
|
||||
significand <<= exponent - 1;
|
||||
}
|
||||
return bits < 0 ? -significand : significand;
|
||||
}
|
||||
|
||||
private static void AssertBits(DoubleDouble actual, double high, double low)
|
||||
{
|
||||
BitConverter.DoubleToInt64Bits(actual.High).ShouldBe(BitConverter.DoubleToInt64Bits(high));
|
||||
BitConverter.DoubleToInt64Bits(actual.Low).ShouldBe(BitConverter.DoubleToInt64Bits(low));
|
||||
DoubleDouble.IsCanonical(actual).ShouldBeTrue();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,283 @@
|
||||
using System.Numerics;
|
||||
using Shouldly;
|
||||
using Xunit;
|
||||
|
||||
namespace Just.PreciseMath.Tests;
|
||||
|
||||
public class PreciseMathPowTests
|
||||
{
|
||||
[Fact]
|
||||
public void NegativePowerDoesNotOverflowBeforeReciprocation()
|
||||
{
|
||||
// Legacy review: Pow(2, -1024) overflowed before taking the reciprocal.
|
||||
DoubleDouble actual = DDMath.Pow(new DoubleDouble(2.0), -1024);
|
||||
AssertBits(actual, Math.ScaleB(1.0, -1024), 0.0);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void MinimumIntegerExponentDoesNotOverflowItsMagnitude()
|
||||
{
|
||||
AssertBits(DDMath.Pow(DoubleDouble.One, int.MinValue), 1.0, 0.0);
|
||||
AssertBits(DDMath.Pow(DoubleDouble.NegativeOne, int.MinValue), 1.0, 0.0);
|
||||
AssertBits(DDMath.Pow(new DoubleDouble(2.0), int.MinValue), 0.0, 0.0);
|
||||
AssertBits(DDMath.Pow(new DoubleDouble(0.5), int.MinValue), double.PositiveInfinity, 0.0);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void PowerOnePreservesEvenAnExtremelySparseLow()
|
||||
{
|
||||
foreach (double sign in new[] { -1.0, 1.0 })
|
||||
{
|
||||
DoubleDouble input = DoubleDouble.FromComponents(sign * double.MaxValue, sign * double.Epsilon);
|
||||
AssertBits(DDMath.Pow(input, 1), input.High, input.Low);
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void SpecialValuesFollowIntegerPowerRulesWithCanonicalBits()
|
||||
{
|
||||
double[] inputs = [0.0, -0.0, double.PositiveInfinity, double.NegativeInfinity,
|
||||
double.NaN, 1.0, -1.0];
|
||||
int[] exponents = [int.MinValue, int.MinValue + 1, -1025, -2, -1, 0, 1, 2, 1025, int.MaxValue];
|
||||
foreach (double input in inputs)
|
||||
{
|
||||
foreach (int exponent in exponents)
|
||||
{
|
||||
// Every int converts exactly to double. BCL is an independent
|
||||
// special-value/sign oracle, not the finite precision oracle.
|
||||
double expected = Math.Pow(input, exponent);
|
||||
AssertBits(DDMath.Pow(new DoubleDouble(input), exponent),
|
||||
double.IsNaN(expected) ? double.NaN : expected, 0.0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void BinaryPowersAreExactAcrossInputAndOutputExponentRanges()
|
||||
{
|
||||
int[] powers = [int.MinValue, int.MinValue + 1, -1075, -1024, -3, -2, -1,
|
||||
0, 1, 2, 3, 1024, 1075, int.MaxValue];
|
||||
for (int inputExponent = -1074; inputExponent <= 1023; ++inputExponent)
|
||||
{
|
||||
foreach (int power in powers)
|
||||
{
|
||||
long outputExponent = (long)inputExponent * power;
|
||||
double magnitude = outputExponent > 1023 ? double.PositiveInfinity
|
||||
: outputExponent < -1074 ? 0.0 : Math.ScaleB(1.0, (int)outputExponent);
|
||||
foreach (double sign in new[] { -1.0, 1.0 })
|
||||
{
|
||||
double expected = sign < 0.0 && (power & 1) != 0 ? -magnitude : magnitude;
|
||||
AssertBits(DDMath.Pow(new DoubleDouble(sign * Math.ScaleB(1.0, inputExponent)), power),
|
||||
expected, 0.0);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void FinitePowersMeetAnIndependentExactRationalErrorBound()
|
||||
{
|
||||
// Exact binary input sums, raised with BigInteger arithmetic; no DD
|
||||
// multiplication/division, decimal, or Math.Pow supplies the oracle.
|
||||
Random random = new(270718);
|
||||
for (int sample = 0; sample < 100; ++sample)
|
||||
{
|
||||
int scale = random.Next(-12, 13);
|
||||
double high = Math.ScaleB(1.0 + random.NextDouble(), scale);
|
||||
double low = Math.ScaleB(random.NextDouble(), scale - 54);
|
||||
foreach (double residual in new[] { 0.0, low, -low })
|
||||
{
|
||||
DoubleDouble input = DoubleDouble.FromComponents(sample % 2 == 0 ? high : -high, residual);
|
||||
foreach (int exponent in new[] { -63, -7, -2, -1, 1, 2, 7, 63 })
|
||||
{
|
||||
AssertExactPowerBound(input, exponent);
|
||||
}
|
||||
}
|
||||
}
|
||||
foreach (DoubleDouble input in new[] {
|
||||
DoubleDouble.FromComponents(1.0, Math.ScaleB(1.0, -53)),
|
||||
DoubleDouble.FromComponents(1.0, -Math.ScaleB(1.0, -54)),
|
||||
DoubleDouble.FromComponents(0.5, double.Epsilon) })
|
||||
{
|
||||
foreach (int exponent in new[] { -1024, -257, 257, 1024 })
|
||||
{
|
||||
if (input.High == 0.5 && exponent == -1024)
|
||||
{
|
||||
continue; // Overflow is pinned by the binary-power matrix.
|
||||
}
|
||||
AssertExactPowerBound(input, exponent);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void NegativePowersRetainRepresentableLowsAtExtremeInputMagnitudes()
|
||||
{
|
||||
foreach (int scale in new[] { -1023, -1000, -500, 500, 1000, 1023 })
|
||||
{
|
||||
foreach (double sign in new[] { -1.0, 1.0 })
|
||||
{
|
||||
DoubleDouble input = DoubleDouble.FromComponents(Math.ScaleB(1.5, scale),
|
||||
sign * Math.ScaleB(1.0, scale - 54));
|
||||
AssertExactPowerBound(input, -1);
|
||||
if (scale == -500 || scale == 500)
|
||||
{
|
||||
DoubleDouble actual = DDMath.Pow(input, -2);
|
||||
actual.Low.ShouldNotBe(0.0);
|
||||
AssertExactPowerBound(input, -2);
|
||||
}
|
||||
if (scale < 0)
|
||||
{
|
||||
DDMath.Pow(input, -1).Low.ShouldNotBe(0.0);
|
||||
}
|
||||
}
|
||||
}
|
||||
AssertExactPowerBound(new DoubleDouble(double.MaxValue), -1);
|
||||
AssertExactPowerBound(new DoubleDouble(1e-308), -1);
|
||||
AssertExactPowerBound(new DoubleDouble(1e308), -1);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void SparseReciprocalCorrectionsSurviveBothRangeDirections()
|
||||
{
|
||||
// 1/(h+l) = 1/h - l/h^2 + O(l^2/h^3). In these dyadic
|
||||
// cases the remainder is strictly below half an ulp of the stated low.
|
||||
foreach (double sign in new[] { -1.0, 1.0 })
|
||||
{
|
||||
DoubleDouble tiny = DoubleDouble.FromComponents(Math.ScaleB(1.0, -500), sign * double.Epsilon);
|
||||
AssertBits(DDMath.Pow(tiny, -1), Math.ScaleB(1.0, 500), -sign * Math.ScaleB(1.0, -74));
|
||||
DoubleDouble huge = DoubleDouble.FromComponents(Math.ScaleB(1.0, 500), sign * Math.ScaleB(1.0, -74));
|
||||
AssertBits(DDMath.Pow(huge, -1), Math.ScaleB(1.0, -500), -sign * double.Epsilon);
|
||||
DoubleDouble tinySquare = DoubleDouble.FromComponents(Math.ScaleB(1.0, -250), sign * double.Epsilon);
|
||||
AssertBits(DDMath.Pow(tinySquare, -2), Math.ScaleB(1.0, 500), -sign * Math.ScaleB(1.0, -323));
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void UnderflowMidpointAndAdjacentLowComponentsRespectBothSigns()
|
||||
{
|
||||
// (2^-215)^5 = 2^-1075, exactly the tie between zero and epsilon.
|
||||
// The low perturbations strictly bracket the tie; reciprocals of
|
||||
// the corresponding large inputs reverse the perturbation direction.
|
||||
foreach (int exponent in new[] { -5, 5 })
|
||||
{
|
||||
int scale = exponent < 0 ? 215 : -215;
|
||||
foreach (double lowSign in new[] { -1.0, 0.0, 1.0 })
|
||||
{
|
||||
bool aboveTie = lowSign * exponent > 0.0;
|
||||
foreach (double sign in new[] { -1.0, 1.0 })
|
||||
{
|
||||
DoubleDouble input = DoubleDouble.FromComponents(sign * Math.ScaleB(1.0, scale),
|
||||
sign * lowSign * Math.ScaleB(1.0, scale - 54));
|
||||
AssertBits(DDMath.Pow(input, exponent), sign * (aboveTie ? double.Epsilon : 0.0), 0.0);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void OverflowBoundaryUsesTheLowComponentBeforeFinalScaling()
|
||||
{
|
||||
foreach (int exponent in new[] { -4, 4 })
|
||||
{
|
||||
int scale = exponent < 0 ? -256 : 256;
|
||||
double lowSign = exponent < 0 ? 1.0 : -1.0;
|
||||
DoubleDouble finite = DoubleDouble.FromComponents(Math.ScaleB(1.0, scale),
|
||||
lowSign * Math.ScaleB(1.0, scale - 55));
|
||||
AssertExactPowerBound(finite, exponent);
|
||||
DoubleDouble overflowing = DoubleDouble.FromComponents(Math.ScaleB(1.0, scale),
|
||||
lowSign * Math.ScaleB(1.0, scale - 57));
|
||||
AssertBits(DDMath.Pow(overflowing, exponent), double.PositiveInfinity, 0.0);
|
||||
}
|
||||
}
|
||||
|
||||
[Theory]
|
||||
// ReferenceData/generate_pow_reference.py: exact stored binary inputs,
|
||||
// Decimal integer powers at 160/240 digits, stable floor(value * 10^100).
|
||||
[InlineData(1.0, 5.551115123125783e-17, -2147483648, "9999998807907175546458285654165775755995358529592462953428551373115894598504056800747655101172369356")]
|
||||
[InlineData(1.0, 5.551115123125783e-17, 2147483647, "10000001192092966006977287879000612242425055148009778363959373202290565261791488930669591094667385585")]
|
||||
[InlineData(1.0, -5.551115123125783e-17, -2147483648, "10000001192092966562088932540488693037989493813706046557380379233423355139596032355926918800247828081")]
|
||||
[InlineData(1.0, -5.551115123125783e-17, 2147483647, "9999998807907176101569665617857901211208198096053270077732977033266503983279402161561236649189617033")]
|
||||
[InlineData(1.0000000009313226, 5.169878828456423e-26, -2147483648, "1353352833626534812694377803744507919692475898909062344519276068330639808800815294171180036409012889")]
|
||||
[InlineData(1.0000000009313226, 5.169878828456423e-26, 2147483647, "73890560851674615678069694043352842890214309016451211229831428411840370567020651340427147012473005377")]
|
||||
[InlineData(0.9999999990686774, -5.169878828456423e-26, -2147483648, "73890561058122458050918958513594285934973647528626440535855911314733978878721028315311791064891371241")]
|
||||
[InlineData(0.9999999990686774, -5.169878828456423e-26, 2147483647, "1353352832366126768492006308656122646859542550999041350022637326283256718420076811410419433559508500")]
|
||||
[InlineData(1.00000003, 2.7755575615628914e-17, -2147483648, "1049038452726052018566777293807106599923174085199532650373208349817256939")]
|
||||
[InlineData(1.00000003, 2.7755575615628914e-17, 2147483647, "95325387491886611267179809406372425766774105569877060927978408348321633401745440609674655439897287007094693160193846818457460816")]
|
||||
public void ExtremeIntegerExponentsMeetHighPrecisionReferenceIntervals(
|
||||
double high, double low, int exponent, string lowerNumerator)
|
||||
{
|
||||
BigInteger numerator = BigInteger.Parse(lowerNumerator, System.Globalization.CultureInfo.InvariantCulture);
|
||||
BigInteger denominator = BigInteger.Pow(10, 100);
|
||||
foreach (double sign in new[] { -1.0, 1.0 })
|
||||
{
|
||||
DoubleDouble input = DoubleDouble.FromComponents(sign * high, sign * low);
|
||||
DoubleDouble actual = DDMath.Pow(input, exponent);
|
||||
actual.Low.ShouldNotBe(0.0);
|
||||
int resultSign = sign < 0.0 && (exponent & 1) != 0 ? -1 : 1;
|
||||
// Check both interval endpoints so the reference uncertainty is not
|
||||
// silently omitted from the claimed exponent-dependent tolerance.
|
||||
AssertRationalBound(actual, resultSign * numerator, denominator, exponent, lowerNumerator);
|
||||
AssertRationalBound(actual, resultSign * (numerator + 1), denominator, exponent, lowerNumerator);
|
||||
}
|
||||
}
|
||||
|
||||
private static void AssertExactPowerBound(DoubleDouble input, int exponent)
|
||||
{
|
||||
BigInteger numerator = Units(input.High) + Units(input.Low);
|
||||
int trailing = (int)BigInteger.TrailingZeroCount(BigInteger.Abs(numerator));
|
||||
numerator >>= trailing;
|
||||
BigInteger denominator = BigInteger.One;
|
||||
if (trailing <= 1074)
|
||||
{
|
||||
denominator <<= 1074 - trailing;
|
||||
}
|
||||
else
|
||||
{
|
||||
numerator <<= trailing - 1074;
|
||||
}
|
||||
int magnitude = Math.Abs(exponent); // This oracle is used only for small exponents.
|
||||
numerator = BigInteger.Pow(numerator, magnitude);
|
||||
denominator = BigInteger.Pow(denominator, magnitude);
|
||||
if (exponent < 0)
|
||||
{
|
||||
(numerator, denominator) = (denominator * numerator.Sign, BigInteger.Abs(numerator));
|
||||
}
|
||||
AssertRationalBound(DDMath.Pow(input, exponent), numerator, denominator, exponent,
|
||||
$"({input.High:R}, {input.Low:R})^{exponent}");
|
||||
}
|
||||
|
||||
private static void AssertRationalBound(DoubleDouble actual, BigInteger numerator,
|
||||
BigInteger denominator, int exponent, string context)
|
||||
{
|
||||
DoubleDouble.IsFinite(actual).ShouldBeTrue(context);
|
||||
DoubleDouble.IsCanonical(actual).ShouldBeTrue(context);
|
||||
BigInteger actualUnits = Units(actual.High) + Units(actual.Low);
|
||||
BigInteger error = BigInteger.Abs(actualUnits * denominator - (numerator << 1074));
|
||||
// |actual-exact| <= |exact|*(|n|+1)*2^-100 + 2^-1074,
|
||||
// cross-multiplied exactly in units of the smallest subnormal.
|
||||
BigInteger tolerance = (BigInteger.Abs(numerator) * (Math.Abs((long)exponent) + 1) << 974)
|
||||
+ denominator;
|
||||
(error <= tolerance).ShouldBeTrue($"Power bound failed for {context}: ({actual.High:R}, {actual.Low:R})");
|
||||
}
|
||||
|
||||
private static BigInteger Units(double value)
|
||||
{
|
||||
long bits = BitConverter.DoubleToInt64Bits(value);
|
||||
int exponent = (int)((bits >> 52) & 0x7ff);
|
||||
BigInteger significand = bits & 0xfffffffffffffL;
|
||||
if (exponent != 0)
|
||||
{
|
||||
significand += BigInteger.One << 52;
|
||||
significand <<= exponent - 1;
|
||||
}
|
||||
return bits < 0 ? -significand : significand;
|
||||
}
|
||||
|
||||
private static void AssertBits(DoubleDouble actual, double high, double low)
|
||||
{
|
||||
BitConverter.DoubleToInt64Bits(actual.High).ShouldBe(BitConverter.DoubleToInt64Bits(high));
|
||||
BitConverter.DoubleToInt64Bits(actual.Low).ShouldBe(BitConverter.DoubleToInt64Bits(low));
|
||||
DoubleDouble.IsCanonical(actual).ShouldBeTrue();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,167 @@
|
||||
using Shouldly;
|
||||
using Xunit;
|
||||
|
||||
namespace Just.PreciseMath.Tests;
|
||||
|
||||
public class PreciseMathRealPowSpecialTests
|
||||
{
|
||||
[Fact]
|
||||
public void ZeroAndOneExponentsPreserveTheIdentityContractsInBothOverloads()
|
||||
{
|
||||
DoubleDouble[] values = [DoubleDouble.Zero, new(-0.0), DoubleDouble.One,
|
||||
new(double.NaN), new(double.PositiveInfinity), new(double.NegativeInfinity),
|
||||
DoubleDouble.FromComponents(double.MaxValue, double.Epsilon)];
|
||||
foreach (DoubleDouble value in values)
|
||||
{
|
||||
AssertBits(DDMath.Pow(value, 0.0), DoubleDouble.One);
|
||||
AssertBits(DDMath.Pow(value, new DoubleDouble(-0.0)), DoubleDouble.One);
|
||||
AssertBits(DDMath.Pow(value, 1.0), value);
|
||||
AssertBits(DDMath.Pow(value, DoubleDouble.One), value);
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void SpecialValueMatrixMatchesBinary64RulesInBothOverloads()
|
||||
{
|
||||
double[] values = [double.NegativeInfinity, -2.0, -1.0, -0.0, 0.0,
|
||||
0.5, 1.0, 2.0, double.PositiveInfinity, double.NaN];
|
||||
double[] exponents = [double.NegativeInfinity, -3.0, -0.5, -0.0, 0.0,
|
||||
0.5, 3.0, double.PositiveInfinity, double.NaN];
|
||||
foreach (double value in values)
|
||||
{
|
||||
foreach (double exponent in exponents)
|
||||
{
|
||||
double expected = Math.Pow(value, exponent);
|
||||
// Math.Pow is only a special-value/exact-binary oracle here.
|
||||
// Irrational finite results use independent high-precision tests.
|
||||
if (double.IsFinite(expected) && expected != 0.0 && Math.Abs(expected) != 1.0
|
||||
&& !double.IsInteger(exponent))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
DoubleDouble input = new(value);
|
||||
AssertBits(DDMath.Pow(input, exponent), new DoubleDouble(expected));
|
||||
AssertBits(DDMath.Pow(input, new DoubleDouble(exponent)), new DoubleDouble(expected));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ExponentLowDeterminesIntegralityAndParity()
|
||||
{
|
||||
foreach (double high in new[] { Math.ScaleB(1.0, 53), Math.ScaleB(1.0, 100), double.MaxValue })
|
||||
{
|
||||
foreach (double direction in new[] { -1.0, 1.0 })
|
||||
{
|
||||
DoubleDouble odd = DoubleDouble.FromComponents(direction * high, 1.0);
|
||||
DoubleDouble even = DoubleDouble.FromComponents(direction * high, 2.0);
|
||||
DoubleDouble fractional = DoubleDouble.FromComponents(direction * high, 0.5);
|
||||
AssertBits(DDMath.Pow(DoubleDouble.NegativeOne, odd), DoubleDouble.NegativeOne);
|
||||
AssertBits(DDMath.Pow(DoubleDouble.NegativeOne, even), DoubleDouble.One);
|
||||
AssertBits(DDMath.Pow(DoubleDouble.NegativeOne, fractional), DoubleDouble.NaN);
|
||||
AssertBits(DDMath.Pow(new DoubleDouble(-2.0), odd),
|
||||
new DoubleDouble(direction > 0.0 ? double.NegativeInfinity : -0.0));
|
||||
AssertBits(DDMath.Pow(new DoubleDouble(-0.5), odd),
|
||||
new DoubleDouble(direction > 0.0 ? -0.0 : double.NegativeInfinity));
|
||||
AssertBits(DDMath.Pow(new DoubleDouble(-2.0), even),
|
||||
new DoubleDouble(direction > 0.0 ? double.PositiveInfinity : 0.0));
|
||||
AssertBits(DDMath.Pow(new DoubleDouble(-0.0), odd),
|
||||
new DoubleDouble(direction > 0.0 ? -0.0 : double.NegativeInfinity));
|
||||
AssertBits(DDMath.Pow(new DoubleDouble(double.NegativeInfinity), odd),
|
||||
new DoubleDouble(direction > 0.0 ? double.NegativeInfinity : -0.0));
|
||||
AssertBits(DDMath.Pow(new DoubleDouble(-0.0), fractional),
|
||||
new DoubleDouble(direction > 0.0 ? 0.0 : double.PositiveInfinity));
|
||||
AssertBits(DDMath.Pow(new DoubleDouble(double.NegativeInfinity), fractional),
|
||||
new DoubleDouble(direction > 0.0 ? double.PositiveInfinity : 0.0));
|
||||
}
|
||||
}
|
||||
DoubleDouble belowInteger = DoubleDouble.FromComponents(3.0, -double.Epsilon);
|
||||
AssertBits(DDMath.Pow(new DoubleDouble(-2.0), belowInteger), DoubleDouble.NaN);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InfiniteExponentsCompareTheCompleteBaseWithOne()
|
||||
{
|
||||
foreach (double low in new[] { -double.Epsilon, double.Epsilon })
|
||||
{
|
||||
foreach (double sign in new[] { -1.0, 1.0 })
|
||||
{
|
||||
DoubleDouble value = DoubleDouble.FromComponents(sign, sign * low);
|
||||
AssertBits(DDMath.Pow(value, double.PositiveInfinity),
|
||||
new DoubleDouble(low > 0.0 ? double.PositiveInfinity : 0.0));
|
||||
AssertBits(DDMath.Pow(value, new DoubleDouble(double.NegativeInfinity)),
|
||||
new DoubleDouble(low < 0.0 ? double.PositiveInfinity : 0.0));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void IntegralExponentsWithinIntRangeReuseTheIntegerContract()
|
||||
{
|
||||
DoubleDouble[] values = [new(2.0), new(-2.0),
|
||||
DoubleDouble.FromComponents(1.0, Math.ScaleB(1.0, -54)), new(double.Epsilon)];
|
||||
int[] exponents = [int.MinValue, int.MaxValue, -1075, -1024, -1, 2, 3, 1024];
|
||||
foreach (DoubleDouble value in values)
|
||||
{
|
||||
foreach (int exponent in exponents)
|
||||
{
|
||||
DoubleDouble expected = DDMath.Pow(value, exponent);
|
||||
// Dispatch consistency, not an accuracy oracle: the integer suite
|
||||
// separately checks these algorithms against independent references.
|
||||
AssertBits(DDMath.Pow(value, (double)exponent), expected);
|
||||
AssertBits(DDMath.Pow(value, new DoubleDouble(exponent)), expected);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void FractionalPowersRetainTheIrrationalLowComponent()
|
||||
{
|
||||
// Independently rounded sqrt(2) binary64 components; also used by the
|
||||
// constant-reference generator. Compare components, not high+low in double.
|
||||
foreach (DoubleDouble actual in new[] { DDMath.Pow(new DoubleDouble(2.0), 0.5),
|
||||
DDMath.Pow(new DoubleDouble(2.0), new DoubleDouble(0.5)) })
|
||||
{
|
||||
actual.High.ShouldBe(1.4142135623730951);
|
||||
Math.Abs(actual.Low - -9.667293313452913e-17).ShouldBeLessThan(Math.ScaleB(1.0, -90));
|
||||
DoubleDouble.IsCanonical(actual).ShouldBeTrue();
|
||||
}
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData(-537.25, 1L)]
|
||||
[InlineData(-537.75, 0L)]
|
||||
public void FractionalPowersRespectTheSubnormalRoundingFloor(double exponent, long expectedBits)
|
||||
{
|
||||
// 4^-537.25 = 2^-1074.5 lies above the half-epsilon threshold;
|
||||
// 4^-537.75 = 2^-1075.5 lies below it. These are well separated from ties.
|
||||
foreach (DoubleDouble actual in new[] { DDMath.Pow(new DoubleDouble(4.0), exponent),
|
||||
DDMath.Pow(new DoubleDouble(4.0), new DoubleDouble(exponent)) })
|
||||
{
|
||||
BitConverter.DoubleToInt64Bits(actual.High).ShouldBe(expectedBits);
|
||||
BitConverter.DoubleToInt64Bits(actual.Low).ShouldBe(0L);
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void FiniteOperandsWithOverflowingLogProductsReturnCanonicalRangeResults()
|
||||
{
|
||||
foreach (double value in new[] { double.MaxValue, double.Epsilon })
|
||||
{
|
||||
foreach (double exponent in new[] { double.MaxValue, -double.MaxValue })
|
||||
{
|
||||
bool grows = (value > 1.0) == (exponent > 0.0);
|
||||
DoubleDouble expected = new(grows ? double.PositiveInfinity : 0.0);
|
||||
AssertBits(DDMath.Pow(new DoubleDouble(value), exponent), expected);
|
||||
AssertBits(DDMath.Pow(new DoubleDouble(value), new DoubleDouble(exponent)), expected);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void AssertBits(DoubleDouble actual, DoubleDouble expected)
|
||||
{
|
||||
BitConverter.DoubleToInt64Bits(actual.High).ShouldBe(BitConverter.DoubleToInt64Bits(expected.High));
|
||||
BitConverter.DoubleToInt64Bits(actual.Low).ShouldBe(BitConverter.DoubleToInt64Bits(expected.Low));
|
||||
DoubleDouble.IsCanonical(actual).ShouldBeTrue();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,145 @@
|
||||
using System.Globalization;
|
||||
using System.Numerics;
|
||||
using Just.PreciseMath.Tests.ReferenceData;
|
||||
using Shouldly;
|
||||
using Xunit;
|
||||
|
||||
namespace Just.PreciseMath.Tests;
|
||||
|
||||
public class PreciseMathRealPowTests
|
||||
{
|
||||
public static IEnumerable<TheoryDataRow<string, double, double, double, double, bool, string>> ReferenceCases => RealPowReferenceData.Cases();
|
||||
|
||||
[Theory]
|
||||
[MemberData(nameof(ReferenceCases))]
|
||||
public void FinitePowersMeetIndependentComponentAwareReferenceBound(string label,
|
||||
double high, double low, double exponentHigh, double exponentLow, bool scalar, string reference)
|
||||
{
|
||||
// The stdlib generator constructs exact binary64 sums at 2200 digits,
|
||||
// checks Fraction equality, evaluates Decimal ln/exp at 450/650 digits,
|
||||
// and requires stable 120-digit references. Scalar rows have independent
|
||||
// references formed AFTER discarding exponentLow, not the DD reference.
|
||||
DoubleDouble input = DoubleDouble.FromComponents(high, low);
|
||||
DoubleDouble exponent = DoubleDouble.FromComponents(exponentHigh, scalar ? 0.0 : exponentLow);
|
||||
(Units(input.High) + Units(input.Low)).ShouldBe(Units(high) + Units(low));
|
||||
BigInteger exponentUnits = Units(exponentHigh) + Units(scalar ? 0.0 : exponentLow);
|
||||
(Units(exponent.High) + Units(exponent.Low)).ShouldBe(exponentUnits);
|
||||
DoubleDouble actual = scalar ? DDMath.Pow(input, exponentHigh) : DDMath.Pow(input, exponent);
|
||||
string context = $"{label}, scalar={scalar}: ({high:R}, {low:R})^({exponentHigh:R}, {exponentLow:R})";
|
||||
AssertReferenceBound(actual, reference, exponentUnits, context);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData(4.0, 0.5, 2.0)]
|
||||
[InlineData(16.0, 0.25, 2.0)]
|
||||
[InlineData(16.0, -0.25, 0.5)]
|
||||
[InlineData(0.0625, -0.5, 4.0)]
|
||||
public void ExactBinaryReferencesMeetTheRealPathBound(double input, double exponent, double expected)
|
||||
{
|
||||
// These references are exact rational identities. The general ln/exp
|
||||
// implementation is approximate, so do not require universal bit equality.
|
||||
string reference = expected.ToString("e17", CultureInfo.InvariantCulture);
|
||||
AssertReferenceBound(DDMath.Pow(new DoubleDouble(input), exponent), reference,
|
||||
Units(exponent), "scalar exact binary reference");
|
||||
AssertReferenceBound(DDMath.Pow(new DoubleDouble(input), new DoubleDouble(exponent)), reference,
|
||||
Units(exponent), "DD exact binary reference");
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void FiniteIntegerDispatchPreservesExistingPowerBits()
|
||||
{
|
||||
// Consistency is distinct from accuracy: ReferenceCases independently
|
||||
// check the exponent-dependent bound for int-range dispatch too.
|
||||
DoubleDouble[] inputs = [DoubleDouble.FromComponents(1.25, -Math.ScaleB(1.0, -55)),
|
||||
DoubleDouble.FromComponents(-1.25, Math.ScaleB(1.0, -55)),
|
||||
DoubleDouble.FromComponents(1.0, Math.ScaleB(1.0, -54)),
|
||||
DoubleDouble.FromComponents(1.0, -Math.ScaleB(1.0, -54))];
|
||||
foreach (DoubleDouble input in inputs)
|
||||
{
|
||||
foreach (int exponent in new[] { -63, -7, -1, 0, 1, 7, 63 })
|
||||
{
|
||||
DoubleDouble expected = DDMath.Pow(input, exponent);
|
||||
AssertBits(DDMath.Pow(input, (double)exponent), expected);
|
||||
AssertBits(DDMath.Pow(input, new DoubleDouble(exponent)), expected);
|
||||
}
|
||||
}
|
||||
foreach (int exponent in new[] { int.MinValue, int.MaxValue })
|
||||
{
|
||||
DoubleDouble input = DoubleDouble.FromComponents(1.0, Math.ScaleB(1.0, -54));
|
||||
DoubleDouble expected = DDMath.Pow(input, exponent);
|
||||
AssertBits(DDMath.Pow(input, (double)exponent), expected);
|
||||
AssertBits(DDMath.Pow(input, new DoubleDouble(exponent)), expected);
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ExponentOnePreservesSparseFiniteComponentsExactly()
|
||||
{
|
||||
foreach (double high in new[] { double.MaxValue, -double.MaxValue, 1.0, -1.0 })
|
||||
{
|
||||
foreach (double low in new[] { double.Epsilon, -double.Epsilon })
|
||||
{
|
||||
DoubleDouble input = DoubleDouble.FromComponents(high, low);
|
||||
AssertBits(DDMath.Pow(input, 1.0), input);
|
||||
AssertBits(DDMath.Pow(input, DoubleDouble.One), input);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void AssertReferenceBound(DoubleDouble actual, string reference,
|
||||
BigInteger exponentUnits, string context)
|
||||
{
|
||||
DoubleDouble.IsCanonical(actual).ShouldBeTrue(context);
|
||||
DoubleDouble.IsFinite(actual).ShouldBeTrue(context);
|
||||
string[] parts = reference.Split('e');
|
||||
int point = parts[0].IndexOf('.', StringComparison.Ordinal);
|
||||
int decimals = point < 0 ? 0 : parts[0].Length - point - 1;
|
||||
BigInteger numerator = BigInteger.Parse(parts[0].Replace(".", "", StringComparison.Ordinal), CultureInfo.InvariantCulture);
|
||||
int exponent = int.Parse(parts[1], CultureInfo.InvariantCulture) - decimals;
|
||||
BigInteger denominator = BigInteger.One;
|
||||
if (exponent >= 0)
|
||||
{
|
||||
numerator *= BigInteger.Pow(10, exponent);
|
||||
}
|
||||
else
|
||||
{
|
||||
denominator = BigInteger.Pow(10, -exponent);
|
||||
}
|
||||
BigInteger oneUnits = BigInteger.One << 1074;
|
||||
BigInteger integralExponent = BigInteger.DivRem(exponentUnits, oneUnits, out BigInteger remainder);
|
||||
BigInteger factor = 1024;
|
||||
if (remainder.IsZero && integralExponent >= int.MinValue && integralExponent <= int.MaxValue)
|
||||
{
|
||||
factor = BigInteger.Max(factor, BigInteger.Abs(integralExponent) + 1);
|
||||
}
|
||||
BigInteger magnitude = BigInteger.Abs(numerator);
|
||||
BigInteger actualUnits = Units(actual.High) + Units(actual.Low);
|
||||
BigInteger error = BigInteger.Abs((actualUnits * denominator) - (numerator << 1074));
|
||||
// max(2^-90, (|n|+1)*2^-100 for int dispatch) plus 2^-1074.
|
||||
// Add the independently checked reference uncertainty of 2^-350 relative.
|
||||
// All comparisons retain both result components as exact rational units.
|
||||
BigInteger bound = (magnitude * factor << 1324) + (denominator << 350) + (magnitude << 1074);
|
||||
((error << 350) <= bound).ShouldBeTrue(
|
||||
$"Real Pow bound failed for {context}: ({actual.High:R}, {actual.Low:R}), reference={reference}");
|
||||
}
|
||||
|
||||
private static BigInteger Units(double value)
|
||||
{
|
||||
long bits = BitConverter.DoubleToInt64Bits(value);
|
||||
int exponent = (int)((bits >> 52) & 0x7ff);
|
||||
BigInteger significand = bits & 0xfffffffffffffL;
|
||||
if (exponent != 0)
|
||||
{
|
||||
significand += BigInteger.One << 52;
|
||||
significand <<= exponent - 1;
|
||||
}
|
||||
return bits < 0 ? -significand : significand;
|
||||
}
|
||||
|
||||
private static void AssertBits(DoubleDouble actual, DoubleDouble expected)
|
||||
{
|
||||
DoubleDouble.IsCanonical(actual).ShouldBeTrue();
|
||||
BitConverter.DoubleToInt64Bits(actual.High).ShouldBe(BitConverter.DoubleToInt64Bits(expected.High));
|
||||
BitConverter.DoubleToInt64Bits(actual.Low).ShouldBe(BitConverter.DoubleToInt64Bits(expected.Low));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,322 @@
|
||||
using Xunit;
|
||||
|
||||
namespace Just.PreciseMath.Tests.ReferenceData;
|
||||
|
||||
// Generated by generate_exp.py; do not derive expected values from DD arithmetic.
|
||||
internal static class ExpReferenceData
|
||||
{
|
||||
internal static IEnumerable<TheoryDataRow<double, double, string, bool, bool>> Cases()
|
||||
{
|
||||
yield return new(1.0, 0.0, "2.71828182845904523536028747135266249775724709369995957496696762772407663035354759457138217852516642742746639193200305992e+0", false, false);
|
||||
yield return new(-1.0, 0.0, "3.67879441171442321595523770161460867445811131031767834507836801697461495744899803357147274345919643746627325276843995208e-1", false, false);
|
||||
yield return new(0.5, 0.0, "1.64872127070012814684865078781416357165377610071014801157507931164066102119421560863277652005636664300286663775630779700e+0", false, false);
|
||||
yield return new(-0.5, 0.0, "6.06530659712633423603799534991180453441918135487186955682892158735056519413748423998647611507989456026423789794039525177e-1", false, false);
|
||||
yield return new(709.5, 0.0, "1.35498631931463283087663227405360333829896691011582169465109335509820907435536323212031477389754869210069312451421528747e+308", false, false);
|
||||
yield return new(709.781, 0.0, "1.79461651389914341169584204562564934475195878898205576621269604427209195324283009555290838261170839886258450955797081449e+308", false, false);
|
||||
yield return new(-740.0, 0.0, "4.18873988004804893945754000158365288241312523708426071528203782534009829055723006499182778486313749674409529672371302822e-322", false, false);
|
||||
yield return new(-745.131, 0.0, "2.47581622633559850463746633444960306815534331126253332296584940288488408478541535529397960585146748026850510719889061100e-324", false, false);
|
||||
yield return new(710.0, 0.0, "2.23399476616171103125364445811681000656812286337946419939922579763369439173505508238045208936075928608008858947959672204e+308", true, false);
|
||||
yield return new(-746.0, 0.0, "1.03828480951582823942500912127973598722423737700888896539795102195766750653959254032749036361253114174336080533600474876e-324", false, true);
|
||||
yield return new(1e-30, 0.0, "1.00000000000000000000000000000100000000000000008333642060758648535093133602695199092297209593903894001794602434389798411e+0", false, false);
|
||||
yield return new(-1e-30, 0.0, "9.99999999999999999999999999998999999999999999916663579392414514649068663973214681918243076038607881653792195056905596921e-1", false, false);
|
||||
yield return new(5e-324, 0.0, "1.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+0", false, false);
|
||||
yield return new(-5e-324, 0.0, "1.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+0", false, false);
|
||||
yield return new(1.0, 5.551115123125783e-17, "2.71828182845904538625524114012277294245207378041324564716578593432480201210931242665209562398991569452359995574369903890e+0", false, false);
|
||||
yield return new(1.0, -5.551115123125783e-17, "2.71828182845904508446533380258256042941501354772712009605959080847470919809942371990293379281005694591784351622350569198e+0", false, false);
|
||||
yield return new(1.0, 5e-324, "2.71828182845904523536028747135266249775724709369995957496696762772407663035354759457138217852516642742746639193200305992e+0", false, false);
|
||||
yield return new(1.0, -5e-324, "2.71828182845904523536028747135266249775724709369995957496696762772407663035354759457138217852516642742746639193200305992e+0", false, false);
|
||||
yield return new(-1.0, 5.551115123125783e-17, "3.67879441171442342016935063900013207207872215777423696748060748829710301834945089279754546005072576400786058802685572738e-1", false, false);
|
||||
yield return new(-1.0, -5.551115123125783e-17, "3.67879441171442301174112476422909661299800728723414457830822769996404467953203365404001987872503096657995920078280787584e-1", false, false);
|
||||
yield return new(-1.0, 5e-324, "3.67879441171442321595523770161460867445811131031767834507836801697461495744899803357147274345919643746627325276843995208e-1", false, false);
|
||||
yield return new(-1.0, -5e-324, "3.67879441171442321595523770161460867445811131031767834507836801697461495744899803357147274345919643746627325276843995208e-1", false, false);
|
||||
yield return new(0.5, 2.7755575615628914e-17, "1.64872127070012819260985868582735805910738863689652137052707640634689532199822874124404221657875995764684980168042691392e+0", false, false);
|
||||
yield return new(0.5, -2.7755575615628914e-17, "1.64872127070012810108744288980097035432882964034402679828141943074837400550675974235689715998752124911869444298749568689e+0", false, false);
|
||||
yield return new(0.5, 5e-324, "1.64872127070012814684865078781416357165377610071014801157507931164066102119421560863277652005636664300286663775630779700e+0", false, false);
|
||||
yield return new(0.5, -5e-324, "1.64872127070012814684865078781416357165377610071014801157507931164066102119421560863277652005636664300286663775630779700e+0", false, false);
|
||||
yield return new(-0.5, 2.7755575615628914e-17, "6.06530659712633440438407123842467173161435034850712385322840380446487317193083390290388871060777615994408967788698907406e-1", false, false);
|
||||
yield return new(-0.5, -2.7755575615628914e-17, "6.06530659712633406769191946139894200976625127925886738931181426507552124349461485653266736650654364662534288843797347728e-1", false, false);
|
||||
yield return new(-0.5, 5e-324, "6.06530659712633423603799534991180453441918135487186955682892158735056519413748423998647611507989456026423789794039525177e-1", false, false);
|
||||
yield return new(-0.5, -5e-324, "6.06530659712633423603799534991180453441918135487186955682892158735056519413748423998647611507989456026423789794039525177e-1", false, false);
|
||||
yield return new(709.5, 2.842170943040401e-14, "1.35498631931467134190408200771649138462814745946346085228520997616815466357346054295179094605658596213443711502371221154e+308", false, false);
|
||||
yield return new(709.5, -2.842170943040401e-14, "1.35498631931459431984918254148526452401241364519490588265804807914037406021512226306996081725228509824420020241490025908e+308", false, false);
|
||||
yield return new(709.5, 5e-324, "1.35498631931463283087663227405360333829896691011582169465109335509820907435536323212031477389754869210069312451421528747e+308", false, false);
|
||||
yield return new(709.5, -5e-324, "1.35498631931463283087663227405360333829896691011582169465109335509820907435536323212031477389754869210069312451421528747e+308", false, false);
|
||||
yield return new(-740.0, 2.842170943040401e-14, "4.18873988004816799060529027425892129967656808821669426559207129322040380331320256326493371975675068776828279990622140512e-322", false, false);
|
||||
yield return new(-740.0, -2.842170943040401e-14, "4.18873988004792988830978973229202159386398003014182202852475871980793701921710704453367931047247146474898828315139720120e-322", false, false);
|
||||
yield return new(-740.0, 5e-324, "4.18873988004804893945754000158365288241312523708426071528203782534009829055723006499182778486313749674409529672371302822e-322", false, false);
|
||||
yield return new(-740.0, -5e-324, "4.18873988004804893945754000158365288241312523708426071528203782534009829055723006499182778486313749674409529672371302822e-322", false, false);
|
||||
yield return new(250.93027242348228, -7.105427357601002e-15, "9.49801073273094253157481371408931196262015372046111024520792916863933250249044475327100520607949177296345555934420080915e+108", false, false);
|
||||
yield return new(577.4297734475065, 0.0, "5.95064846298715475017756264820905383780483412690520919873199396378905872032452347602613185026484078076086846838293091926e+250", false, false);
|
||||
yield return new(458.2952005578029, -1.4210854715202004e-14, "1.08411832394119972239921061486244187075377229612411403992876780928530111493985756351656478925470029690906962689829123516e+199", false, false);
|
||||
yield return new(232.91365540915126, -7.105427357601002e-15, "1.42270646202855570795105066551029220514192746329542848939099080733314810138540206880245762216511989076262846976739482728e+101", false, false);
|
||||
yield return new(-735.4304900229989, -2.842170943040401e-14, "4.04200046933377254144819051475088531086179811785677460017967868108769825382211663058605775395630688019176543633067812670e-320", false, false);
|
||||
yield return new(50.56373826606193, 0.0, "9.11071609158933230364758224983522968772682253770782165081286583763227727306953915204305513774800464316912364057806790954e+21", false, false);
|
||||
yield return new(522.4487218172492, 2.842170943040401e-14, "7.88128373074868083431112596166194679520453779963781680479541553911174837615414882157699129662463166210253343504553326324e+226", false, false);
|
||||
yield return new(-189.5880156981899, -7.105427357601002e-15, "4.60225785131331476526517813915952558382558378761438702748917591064571800768752725835864375188061134212888868276662089748e-83", false, false);
|
||||
yield return new(140.6877547787642, 0.0, "1.25868069648830247523213398488867628656926023414823905511051025482853508308742369674827927481363766083492275267356210277e+61", false, false);
|
||||
yield return new(-318.34225359810074, 0.0, "5.56821384336619435843415567072792478926763686156755669240141902340831269029547744050776980794225342290070487522706997819e-139", false, false);
|
||||
yield return new(442.07747449085923, -1.4210854715202004e-14, "9.81313435827975693632807914333694349050412402766013082130152192539291085552367625216145233697637552378052256407857319955e+191", false, false);
|
||||
yield return new(-107.28452055986338, 0.0, "2.55225890172698534850739352732399424691054744397690884653911444103577671130444903848573638258330478092137181679246904127e-47", false, false);
|
||||
yield return new(-256.97010496279836, 0.0, "2.50784909758828257273036511705620036377811754428595101417495497082368898096714234841549295180919149910206822560677804858e-112", false, false);
|
||||
yield return new(-452.2010677438447, 1.4210854715202004e-14, "4.08857122786067834516112203571011869818698386224280144528203029356272713743196702575507308958781375570088716619243044001e-197", false, false);
|
||||
yield return new(-701.8896864429325, 2.842170943040401e-14, "1.48998629250118854746025803371269449079893235179949877998209561409366173805652818750854058253432753461572494293418512132e-305", false, false);
|
||||
yield return new(68.1551994735205, 0.0, "3.97582302382462639011400068806121804519111450847307815175296996109360953086849803712696556189043125094144420142524023922e+29", false, false);
|
||||
yield return new(91.54881422272967, -3.552713678800501e-15, "5.74307967939262805086601974514728712736787714967131056616365518940313884450085446051420831049002941170922139324538374797e+39", false, false);
|
||||
yield return new(-387.3648267681524, 1.4210854715202004e-14, "5.88292418014349059103522763353097715470350636435810374589657072652064955867431399520954800231615885687179560995393738407e-169", false, false);
|
||||
yield return new(-338.8759738773683, 0.0, "6.73030112102762255518139567713182495886647664569931035612501887256849737786196888847647086282155650968939706552669890048e-148", false, false);
|
||||
yield return new(141.43353196414284, -7.105427357601002e-15, "2.65339855391164529690413419054606699721399186218051284634839822466668390080716152972191549530794656627031114989912639202e+61", false, false);
|
||||
yield return new(-684.4232888726077, 0.0, "5.73775970940444987344900786372125267612866863215324146110077944615505565856096824655942782879964830700880328834285135174e-298", false, false);
|
||||
yield return new(-403.29413329096866, 1.4210854715202004e-14, "7.10531486103231642751454913407146989721982128524585147092389954538952015046293811397779051504494156750652848509236821739e-176", false, false);
|
||||
yield return new(-190.59421028189047, -7.105427357601002e-15, "1.68262056230653327076210534642289568386677497392577983983871687461848099340543547097695277857592119757535221800370292198e-83", false, false);
|
||||
yield return new(91.83779249104316, 0.0, "7.66737154951184450517075529908193007956936911126519583423305095993670248476520646253552309969262019434115187753451214558e+39", false, false);
|
||||
yield return new(280.24724241767626, 1.4210854715202004e-14, "5.12661791223369236901075902303662203185903197848721230640435340586333535925762699243564675381745895121874856791628349657e+121", false, false);
|
||||
yield return new(321.96114276837716, 0.0, "6.69803930285937304079619093791761852581949923084463550869313261348501378366548313185611283895928677958389213408495529413e+139", false, false);
|
||||
yield return new(-4.096935467664821, 0.0, "1.66235408009326974158777166931861569578487927235171142521144248227161212521040337653009184219533116528271957451693434158e-2", false, false);
|
||||
yield return new(257.56036412854303, 0.0, "7.19523359568790986972665886679769218393221522125510591481122372735732459219218436049689698048678127300889164120719994546e+111", false, false);
|
||||
yield return new(-637.3010086151655, -2.842170943040401e-14, "1.67374251193015027071667484663897412483811885333358015014506520684888477542082776408256850185443159831941867306755376620e-277", false, false);
|
||||
yield return new(615.2054868862347, -2.842170943040401e-14, "1.51477521773985721276500043312913218359520599872195288109718090413284480980057544783713172090853295752363335142761482390e+267", false, false);
|
||||
yield return new(80.13746410198178, -3.552713678800501e-15, "6.35709136492234151218757348140475471662109405415338642155588645459782521263055575469817648291778787760100772038035030887e+34", false, false);
|
||||
yield return new(-630.4900992610425, 0.0, "1.51924912991470819482158207854064915985178215326177168820861229021166163355260917174419334474695254506614283873671810920e-274", false, false);
|
||||
yield return new(-321.5785571936883, 0.0, "2.18880520285380314446097410847931586894762055959067363912272530169806778819043658742788926931005796368593306162790109910e-140", false, false);
|
||||
yield return new(6.41553078882248, -2.220446049250313e-16, "6.11265127422600571454393805620312795007553865177852072726337729126911900788202237692414298628763802557668293685780017830e+2", false, false);
|
||||
yield return new(-204.84070954048343, -7.105427357601002e-15, "1.09347832141549036992145307451829337714672938988298856373695730350074700475619235974772171773601299398182793720704282516e-89", false, false);
|
||||
yield return new(-345.70650349152163, 0.0, "7.27064894213756094143051307246460218923073153708943526058514802272186838884611846089338600157167015858075406324471828126e-151", false, false);
|
||||
yield return new(-44.69038437940867, -1.7763568394002505e-15, "3.90132984328998639153640444443441004504539448372434193772292586216432790929396164787446831018226116337379816087140196540e-20", false, false);
|
||||
yield return new(-35.45802498884893, 1.7763568394002505e-15, "3.98818603240024412677056837818009836606880013889210921585791770390087666264983980319306779175315256637118966718128616494e-16", false, false);
|
||||
yield return new(-599.9699079319961, 0.0, "2.73136460452927918564251752268482846483013499067506868490484878055717083600532399057048743011425654026249773214188639030e-261", false, false);
|
||||
yield return new(51.27389503570987, -1.7763568394002505e-15, "1.85340222347047045307283124431395697551511670493878943230923690543670071485871021225146167715309537643474082321727108228e+22", false, false);
|
||||
yield return new(179.81121150501247, 7.105427357601002e-15, "1.23315293513823756475669668242394854477812811138489595050533711476465705049279044531231574641254936256659024689363595309e+78", false, false);
|
||||
yield return new(671.2324965176397, 2.842170943040401e-14, "3.25513730111286634411163583093612734148702195057714321776992836482496773348027259840898047725974999619011018090011732496e+291", false, false);
|
||||
yield return new(603.4872037383655, -2.842170943040401e-14, "1.23356626162291426575711439136138225722050571483580215755723519039587109956512911055102667002705027239702730649636024148e+262", false, false);
|
||||
yield return new(-571.8239156747627, 2.842170943040401e-14, "4.57118504424808643780025903362127907357552371872793263464492178766843330641613262736497779915464994063447385212281939640e-249", false, false);
|
||||
yield return new(705.7571777492733, 2.842170943040401e-14, "3.20957745042415935190120728695943678517957716905260704316557939088800013020171373168944847179063408287378493281483923695e+306", false, false);
|
||||
yield return new(-538.4460383699854, 0.0, "1.43171552148329282858644050264938696082967869026053524217192148873043652710121140393694096285570030806662590496463405379e-234", false, false);
|
||||
yield return new(134.25595411594395, 0.0, "2.02590947317619573817196200296605806871129412380406793177960964083186204209186245082778449177578504708821127283281088013e+58", false, false);
|
||||
yield return new(102.8951820079003, 3.552713678800501e-15, "4.86194185213250590505429502918370038856773180690098191998626688647359113205161862412771253991603744385029025176181652331e+44", false, false);
|
||||
yield return new(665.096539284573, 0.0, "7.04298793200326972137975717766101950504527167303335889307457324120239112016796926955384067324807256986116186642965822103e+288", false, false);
|
||||
yield return new(-679.1618324086656, -2.842170943040401e-14, "1.10602225457818822480676504660822855971064560785584048186458310827836020981205648136901111813347567173750742819238680689e-295", false, false);
|
||||
yield return new(-91.53952569584328, -3.552713678800501e-15, "1.75747483140209116750730490767133914877458649064452450294359531176423217255893741743861655636302211180223104887262003059e-40", false, false);
|
||||
yield return new(426.6976037731288, -1.4210854715202004e-14, "2.05312201586602221058753331569536937926729784760859393531500824865228589528205230162750436019123700121864663142302434385e+185", false, false);
|
||||
yield return new(709.4702332816566, 2.842170943040401e-14, "1.31524720886072690261452395187476248627966788261101638825708717446304810790454153475370361387705015075097660896901346177e+308", false, false);
|
||||
yield return new(-364.74968542191317, -1.4210854715202004e-14, "3.90143472675543495413935655535884051655069764259416524281553157419339430928088910933430247160446330234717589349541615174e-159", false, false);
|
||||
yield return new(134.38041108098366, 0.0, "2.29440990243574914760263002568767163292551468360567060285997194547352132932679243464091277734766495116351048086713513546e+58", false, false);
|
||||
yield return new(-592.4562292563733, 0.0, "5.00643825984622129922843051122143992989107241800393121571121659323415909386134167219202906585784283201024598774920756688e-258", false, false);
|
||||
yield return new(-255.3660084727988, -7.105427357601002e-15, "1.24724466400308792716284180988680891934717369233432388621957248280265732404070448393917181529411500164079403693168891641e-111", false, false);
|
||||
yield return new(494.66508969778897, 1.4210854715202004e-14, "6.76579517398434522352083743516969628862468901182630122647537553007629761041574731083599693697657123252100615657162550488e+214", false, false);
|
||||
yield return new(509.71598545970824, -1.4210854715202004e-14, "2.32723276680004458718504154657507830053163550484781360951256445626646837449920799022749530833800792155843032397731641787e+221", false, false);
|
||||
yield return new(-244.83320900932324, 7.105427357601002e-15, "4.68045787199196071915953819923942534727546149432924557854137016641747263091478052958456327919722669595411763382197390014e-107", false, false);
|
||||
yield return new(-406.27613645957393, 1.4210854715202004e-14, "3.60176859196712875505528192669884122795740666520055077842557157256378956116975889324120687785422492015133796923823036959e-177", false, false);
|
||||
yield return new(-368.176174394512, 1.4210854715202004e-14, "1.26799952896384662609803923789752636957714621779651397092369773221540729118703350094573754795815622161138061330040847538e-160", false, false);
|
||||
yield return new(39.34122805266588, 1.7763568394002505e-15, "1.21808684951616917694911821736082484334343443238912181500560792972144526806404478169973915295419799007994463672469838628e+17", false, false);
|
||||
yield return new(-175.65411926931256, 0.0, "5.18066222740719887303934006355350922638709735358444375944222596993817007028801791071375595108973783731157641595324573551e-77", false, false);
|
||||
yield return new(118.54449090906303, 3.552713678800501e-15, "3.04241365655737483436964976934796713108425435632199230829088096567792098757965717776038162071232577851279203867291853550e+51", false, false);
|
||||
yield return new(-356.7106303160003, 1.4210854715202004e-14, "1.20932106409461028101229574473594961219000871487990131981219040633983265390303679813939772316519981999677183894696570974e-155", false, false);
|
||||
yield return new(-197.87493664020667, 7.105427357601002e-15, "1.15879579399031235224731433345346415716402694390929287049206136625288410360687722648389779965259746098144823545069241055e-86", false, false);
|
||||
yield return new(247.18965323159318, 0.0, "2.25477069682091460817422441514136350069046268187801527508476164879628438689578944795308449934304635389637543817063836575e+107", false, false);
|
||||
yield return new(-448.22392076826463, 1.4210854715202004e-14, "2.18184830862555256076184957541592066433264585149084935203370473545033144493776397546205698592682129055160963478307073657e-195", false, false);
|
||||
yield return new(-545.4262410175483, 2.842170943040401e-14, "1.33165965078663374227421884459851912715717236887584242565094077153936788608837393671057990995735735780289763321155662924e-237", false, false);
|
||||
yield return new(392.5027808695638, 1.4210854715202004e-14, "2.89595536155235606779328586206281138037821919888253802766164529907133035475917082772684733168091068740777501428488150291e+170", false, false);
|
||||
yield return new(-222.32679449972443, -7.105427357601002e-15, "2.78419705355415804805773974422854425652620458571591666593221242859459519935347523505402366927333897507762698073222166682e-97", false, false);
|
||||
yield return new(-531.5540173625856, 0.0, "1.40936481776761068233443836418568684450497320371274372192863587761766092036044721756179029181907611209831308430028578024e-231", false, false);
|
||||
yield return new(-85.733957872666, 3.552713678800501e-15, "5.83734261210479248822643598283974350238854471208889616284907789921193764953210616377906438727257834879091564367062876257e-38", false, false);
|
||||
yield return new(32.6607348895825, 0.0, "1.52889245502161417553454731885209253160637659373638769704634738212086079510670481544724428523483063332140385473708018998e+14", false, false);
|
||||
yield return new(-224.5088123994651, -7.105427357601002e-15, "3.14095443508370913393940109123471407020598833143667823153680552903170939770620198754801466178124507333003906302487026964e-98", false, false);
|
||||
yield return new(135.17140664692067, -7.105427357601002e-15, "5.06053016380334455439438367702280222471737798236873734595245756512166214676683521797786197800644723431892866653639675001e+58", false, false);
|
||||
yield return new(-230.6859481714123, 7.105427357601002e-15, "6.52177267064639549468047810958252171625307118458257288857288818771185600548392950487117222631466323433666334054645514609e-101", false, false);
|
||||
yield return new(-645.5414507291703, 0.0, "4.41479059313068759562576737023912794753810431487745135742716629178692175415181753687537061990295066190243878992535371412e-281", false, false);
|
||||
yield return new(554.4109436393214, 0.0, "5.99257570627191980090965859153084871994986434607324535724829919855354319622507815179701959156380169804837252008933540419e+240", false, false);
|
||||
yield return new(108.71917436232104, -3.552713678800501e-15, "1.64489243266304185983532152078656598357928805648630147718479630040447189220599482157747792207564376993748531958706185317e+47", false, false);
|
||||
yield return new(-237.09044151142854, 0.0, "1.07877168691464399626876785041120029647909931088156693163439283196483131826505453476721647712525777216542624330494024608e-103", false, false);
|
||||
yield return new(430.79741739598967, -1.4210854715202004e-14, "1.23862885548169936394194347087057354337043382538897984887982966300135192383462802873661410405059897101518554243786737564e+187", false, false);
|
||||
yield return new(633.6777790557021, 0.0, "1.59500757005182245606746146509717040779737494576422667935568231010684912237249261052157254275214359767326768267732612858e+275", false, false);
|
||||
yield return new(-416.6519715701372, 0.0, "1.12291755913646994734496507225303333169683646752427346635651933607143648575854786106580536054257289836454059194822758571e-181", false, false);
|
||||
yield return new(-655.8905217158901, -2.842170943040401e-14, "1.41372743526635734435351403881348415439105196882923844463768868271716033928476781635092637960284716353384560438411199200e-285", false, false);
|
||||
yield return new(384.800981659502, 0.0, "1.30901000416051761553318718702173751623500269400679241722508171318254958885009240032159795354769002801268769541386450640e+167", false, false);
|
||||
yield return new(249.09545000448884, 0.0, "1.51627999150294289465865077063737784311859827358833815622711081424278027131363375280934340903769499612585134870639145990e+108", false, false);
|
||||
yield return new(118.35856735044672, -3.552713678800501e-15, "2.52622882509836053036842667106386843587108197791382469116866488367039198845904594632289230816871236262805184312384518259e+51", false, false);
|
||||
yield return new(-233.02943249989255, 7.105427357601002e-15, "6.26041818439684902756156918409976347778568086341134061530725618179675426078038062798078541426128868064560359708014777356e-102", false, false);
|
||||
yield return new(-325.6573998261637, 0.0, "3.70500044549927178166061628511151133661310445672545087160397576150422558737659370386677569898465709070572654776063910176e-142", false, false);
|
||||
yield return new(375.52452413281935, 0.0, "1.22526111304631493769301328032140094163150783291496868484958224376777296781674999783063227587525535702917508632826634661e+163", false, false);
|
||||
yield return new(-660.3677143815154, -2.842170943040401e-14, "1.60674004220807970340028241908152775128463311946857277175369025422233543903917619716787262579511416031819721594493180449e-287", false, false);
|
||||
yield return new(20.31432117178963, 0.0, "6.64350993063175430562472255795589450796285618025672429108091323231835423092164205207172380744328026607211503189364004682e+8", false, false);
|
||||
yield return new(601.3846699291009, 0.0, "1.50675850453384631050243370464746351530202406785604477525188377747514309853588706562454882966204743689811471372503486798e+261", false, false);
|
||||
yield return new(310.81437767785565, -1.4210854715202004e-14, "9.65982195266579522084189784285064714055653790640343003233212178038114497854800733071971205221230490480717066008912305631e+134", false, false);
|
||||
yield return new(-161.12394644606957, 0.0, "1.05866646424628572695450768665946393833118930403130486132205869393946498338813798879617533513944893460004248101848283145e-70", false, false);
|
||||
yield return new(158.15269361060325, 0.0, "4.83996402092701254381473675819216385162614102231691503651191543337642034851066940719399275711594061045797069527200814090e+68", false, false);
|
||||
yield return new(240.38152179358872, 0.0, "2.49096982402923380679076214665141330751904612854125448533355962410712139298471618731197950270336252525625172008705933749e+104", false, false);
|
||||
yield return new(76.6258707831455, 0.0, "1.89754835660927967642577500743481945247552930621153142507203936779148657897574592396218433601340107764875529869995787290e+33", false, false);
|
||||
yield return new(451.2591166347113, 0.0, "9.53551740049111486453356904503534415634172703277865158923437506182942087294323765208741663521369052517685424972586067593e+195", false, false);
|
||||
yield return new(-171.94416358114267, -7.105427357601002e-15, "2.11640393939211768065359527131234963661473196443547421563297987733536823073910807659834937145642067180617496920497327031e-75", false, false);
|
||||
yield return new(-166.62696912201864, -7.105427357601002e-15, "4.31346992212197148473463273482031972565389554928115558452647785718319818367431933817709256859683802664610280151763785638e-73", false, false);
|
||||
yield return new(438.8058432573266, 0.0, "3.72354282902078986440827057654015254202897068648594730364518994115935592951764923140617646370552001017794039018681878704e+190", false, false);
|
||||
yield return new(708.6122155749354, 2.842170943040401e-14, "5.57667112483837823632590096773037035752460219172350309162630535169688741070671065714195293022110587824111539240041895801e+307", false, false);
|
||||
yield return new(-258.10286637137364, 1.4210854715202004e-14, "8.07884677882273596165864569905032008833297223064459495799681617785936292386502237910251871005011029999759872026824388954e-113", false, false);
|
||||
yield return new(-668.5773742262463, 2.842170943040401e-14, "4.37054552328902344960229802973080558419636046877465077527546421331153430261288347483472011320642493600858865139336787251e-291", false, false);
|
||||
yield return new(68.72133476955821, 3.552713678800501e-15, "7.00319919656770533050064402047626953073246962461362352376270511612285027690520370519715526898773686041137693392463547683e+29", false, false);
|
||||
yield return new(-341.3859640308291, 0.0, "5.46965107353790249225546109655744454092945976290799275590455664320782583684107163650236671692623058745196748433162529167e-149", false, false);
|
||||
yield return new(556.5169290757906, 0.0, "4.92301754289320501332799068218323952543252499685217338909634332133336831028417490987730398815917926439264677775366490561e+241", false, false);
|
||||
yield return new(-257.711610143337, -1.4210854715202004e-14, "1.19473006399432048670404452904178787009837760940243112076488096845274250660760115586974051058457713056243151713342821265e-112", false, false);
|
||||
yield return new(-203.96567767848774, 7.105427357601002e-15, "2.62320170884231716280796633780583578643314516879574242074578595168107907901745258742752228799721854416075138308118769033e-89", false, false);
|
||||
yield return new(476.6229994804148, 0.0, "9.87958319018279459520645857360931287505270661146929368384184547831896729007562917668662658747893220479007957623259111139e+206", false, false);
|
||||
yield return new(-176.27049928643976, 0.0, "2.79701527133146706930307694836642049761414509437974115793733135841013131547146082509729951115263679226005975701867174878e-77", false, false);
|
||||
yield return new(-703.1495066204652, 2.842170943040401e-14, "4.22716618408630623343343806990944364865776305748321363733903163310254862031016091920100756497961579528243414826527633188e-306", false, false);
|
||||
yield return new(677.5891641388175, -2.842170943040401e-14, "1.87600928244100606895556254329747811341066689737485203621551712501905396017106836105056293976015667441225910644112421120e+294", false, false);
|
||||
yield return new(-619.945567194333, 0.0, "5.76847596083098818682608157177757517402638282321543532862870221609009779614622493188479057696459144187037418525708479322e-270", false, false);
|
||||
yield return new(202.69642108491053, -7.105427357601002e-15, "1.07136431972755133353912064756923875029609486074127323613696086569829243746812927458492058941282307472625653880070160417e+88", false, false);
|
||||
yield return new(-660.5748247663681, 2.842170943040401e-14, "1.30616703772299420405313171503739729108596331424792323053513987373620325759631181831420928654832364267869235613826272719e-287", false, false);
|
||||
yield return new(-208.95150307870438, -7.105427357601002e-15, "1.79273140923089434929854991230632125293889458260899249842302512324248746792542241300588965049987262573793118715032168611e-91", false, false);
|
||||
yield return new(-540.9486483605461, 0.0, "1.17216034279388029986759971498479606840748087449025029107565637206527761662869136772325883251932649066151041991101520894e-235", false, false);
|
||||
yield return new(-335.04635451866346, 0.0, "3.09896770753953357378279842134714187850362916220723692830117803965597277878521652926132015176312289119882160813836470804e-146", false, false);
|
||||
yield return new(170.48363555537776, 0.0, "1.09673619502504405890510127230031871586340626516360177423901292239241384221518118362703342429904852957136432596703717244e+74", false, false);
|
||||
yield return new(552.584882970878, -2.842170943040401e-14, "9.65084759624036682040318489424619029427518636225098472430849421338326872161496251734022198398615722512608239904136009272e+239", false, false);
|
||||
yield return new(-733.3082358136195, -2.842170943040401e-14, "3.37504565446218296220925247126913872824750530647259433618177708427071776701606838824858391487169853948845141086867520523e-319", false, false);
|
||||
yield return new(-671.1400620166272, 2.842170943040401e-14, "3.36956999275600794096589468271915376660431189531456353431179909915551433723669423059652642060485598614491599468318322290e-292", false, false);
|
||||
yield return new(-688.4910237993057, -2.842170943040401e-14, "9.82081486344526289244134661506325910668887414958851926713762993629126042599601549835549983794701145901938104975285870675e-300", false, false);
|
||||
yield return new(205.09735553202813, -7.105427357601002e-15, "1.18208786909655175841883874204612003609552703021958399792954891780138999015448891035633278690379009153411434056341094025e+89", false, false);
|
||||
yield return new(-58.23072934458048, 0.0, "5.13707100297237098104266233064652428179049613609733560789422493226301830651477399337728619629114716614201518941296717974e-26", false, false);
|
||||
yield return new(-741.7129601589065, -2.842170943040401e-14, "7.55360458775827838369615895555725261182824179032463157097066330442274932235274985720897646153530498694988397849947432465e-323", false, false);
|
||||
yield return new(-62.58204284209387, 0.0, "6.62161807136668674896797079976433230873048819907154614106400583717110259236889910702590314055841976721229970204393755589e-28", false, false);
|
||||
yield return new(-625.7181292372568, 0.0, "1.79501980826348646302915113188243698845357391665766159477205212524237997367116111018331327384003813696949364215197082881e-272", false, false);
|
||||
yield return new(-56.82793910938426, 1.7763568394002505e-15, "2.08900570902013877475405972005196979160565878605399624034910836701291440204389159813680459259262629751086297080301139653e-25", false, false);
|
||||
yield return new(-328.84734523176047, 1.4210854715202004e-14, "1.52550128327171675322617456706468935720395331417059524381587230279088460031464795181701355469007250432205341055277744364e-143", false, false);
|
||||
yield return new(113.19740033937967, 0.0, "1.44879298070323079557901457821641607607897364956460004574905327389271913393460123666730520117031551672323366901889385067e+49", false, false);
|
||||
yield return new(-84.87758596620938, 0.0, "1.37446212747612557168364797560294183533109492249935375082439303824216161427156528200477010142073277887683259392870088733e-37", false, false);
|
||||
yield return new(123.4940152204855, -3.552713678800501e-15, "4.29308372530069170973892214731406282521878000213917588033198141592895743667225546422773375605426118764143473164724034257e+53", false, false);
|
||||
yield return new(24.346466429791462, 0.0, "3.74572616178532115066560661634825187933658486076041971652280867756714227688105631146085171626745812033705621911753198350e+10", false, false);
|
||||
yield return new(459.4426256932252, 1.4210854715202004e-14, "3.41505018170149899303511576143081135244064834431861529038444296553082760709417383326769062028259428966556407741344252767e+199", false, false);
|
||||
yield return new(-712.9993956574617, 0.0, "2.22995893541962643602062872651506489635742636732009253063164293769101004257543863924773287363101328716910109824242615661e-310", false, false);
|
||||
yield return new(-625.6665513685375, -2.842170943040401e-14, "1.89003231317404761977855218215807947928178567787536638768629574161124550136021118539567242060823890806648695532352403823e-272", false, false);
|
||||
yield return new(56.866187461157665, 1.7763568394002505e-15, "4.97360649218148722044148037502113462916748181914413657419335419084869036083124583897968713031848437414965512314736391693e+24", false, false);
|
||||
yield return new(-467.06617963941056, -1.4210854715202004e-14, "1.43131591066636393759436799614276464593850324418650992703834780889190425559069152476049812700735685255299338107602339123e-203", false, false);
|
||||
yield return new(94.81841833841338, -3.552713678800501e-15, "1.51048308825408042393708016517089571544301615512607532229653490141839522712078261371461011453273061610761166967177713010e+41", false, false);
|
||||
yield return new(182.76566148117058, -7.105427357601002e-15, "2.36656404847775716442943066019959483156790704649103843820460677253532939240359709624311997232416759688407755080938383798e+79", false, false);
|
||||
yield return new(-306.5077786036067, 1.4210854715202004e-14, "7.68003310421864022516598684068539927578764958244714079566607806622394018089150358194592176107286627700657212772317525644e-134", false, false);
|
||||
yield return new(258.4912636464634, 1.4210854715202004e-14, "1.82527969190489686298879041020685242587371912869767691008073640008460953362020911773203801327683077002938909778909883982e+112", false, false);
|
||||
yield return new(-358.01575939634876, -1.4210854715202004e-14, "3.27892331446416498316378810134135956681683518401072863323546682841100325126051690155660190774670464927013972112909475502e-156", false, false);
|
||||
yield return new(217.52688202284958, 7.105427357601002e-15, "2.95613680188923321007480140974518989230714752281572352124853331941499059973687472474725322198364725824179066342003470329e+94", false, false);
|
||||
yield return new(305.4725873994116, 1.4210854715202004e-14, "4.62443926769781025580807298435065682595739231836739247475315390100086371623773560876114664949282193725283784145428864029e+132", false, false);
|
||||
yield return new(-91.84720162404324, -3.552713678800501e-15, "1.29201381201659221204375393513947266013191953705082708325272035501328077968586495439019181916200934849115497234895712817e-40", false, false);
|
||||
yield return new(-655.7052293351836, 0.0, "1.70152033842428019258745020120026236210010934225668984731743559549195214088639441467815062470859894630602255396237377307e-285", false, false);
|
||||
yield return new(-441.32512250749926, 1.4210854715202004e-14, "2.16239271570281451981909158963745816114305775850534143232570032235864596989637855926141364981653372047622477888978985467e-192", false, false);
|
||||
yield return new(546.3725885723843, 2.842170943040401e-14, "1.93464052261247081730374368780752277879526224578402951237394795662672805332844088074483955808365599990892831643256253873e+237", false, false);
|
||||
yield return new(-326.4858325924474, 1.4210854715202004e-14, "1.61809674969901988971025676513646602782188089062731951719154407522711666673261485688762755775271152115334845923899725133e-142", false, false);
|
||||
yield return new(158.8878656503664, 0.0, "1.00953944698973826667081747653693668484073166211027862110979892662724308541248549045349948556435592385764020979309428396e+69", false, false);
|
||||
yield return new(-400.1667792224718, 1.4210854715202004e-14, "1.62097360342723023611227523555764736633399616567486474049947501191129778487954822609091850724767407853064830753356794399e-174", false, false);
|
||||
yield return new(6.242921409398718, 0.0, "5.14358971279218287337848768799695990608233709145457936663718355659246445650971899528724888742832323611333713784548894678e+2", false, false);
|
||||
yield return new(519.1711689059819, 0.0, "2.97285562958806854372682579821196216641220134989583392315995614005927068073125530418734944476905853930193522233374556266e+225", false, false);
|
||||
yield return new(-324.0785277676566, 1.4210854715202004e-14, "1.79673359060408625993399783580787813775885775878332821412431171337915431002003584628127912309169264898041939380041394836e-141", false, false);
|
||||
yield return new(-654.2943313671838, -2.842170943040401e-14, "6.97561249056284812762495645428242024901361126922484018653818556611626063390207481086647849467538636672711906911815891909e-285", false, false);
|
||||
yield return new(306.1977778104076, -1.4210854715202004e-14, "9.55004183578553294896574785274104960330779898771789748311387807122125765059391111934187414075754236806379044104325360918e+132", false, false);
|
||||
yield return new(557.4719608490257, 0.0, "1.27937073589269455944708930014615412378806747431963436932349003579479118125039478963045577777742248774177711243936500827e+242", false, false);
|
||||
yield return new(-257.57779471152276, 0.0, "1.36579367126009449589496245396423700442510671332735828572246509146147382742171163042895469506190061326752965298856898642e-112", false, false);
|
||||
yield return new(-599.2631120767353, 2.842170943040401e-14, "5.53779936168350827116575089278555183946498793795792488663064018076209551784106929113489272842975481571694012477805041496e-261", false, false);
|
||||
yield return new(0.49136323434026963, -1.3877787807814457e-17, "1.63454296692471874922969302018717475210143065618621554866287399119926825793536824290996017321585888363041839623154675305e+0", false, false);
|
||||
yield return new(-144.31395096992287, 0.0, "2.11469350838046543971863740968017524164039931035841005261426037141338465647939157485568111038607662233080350025777659705e-63", false, false);
|
||||
yield return new(110.04148246081581, 3.552713678800501e-15, "6.17175408523003161644870949504713437286053840808263026835884987020874703429134526635548498615889620111929433910098739619e+47", false, false);
|
||||
yield return new(106.06851508223326, 3.552713678800501e-15, "1.16137053629607991976619722231813270463584642648694772741286231711794480703855632429170516691794512993013974339420039017e+46", false, false);
|
||||
yield return new(-345.23180350092304, 1.4210854715202004e-14, "1.16877997480496343262807628349628474703231978230616022555623032785157554161392909631451837033754721849108200718459420694e-150", false, false);
|
||||
yield return new(-638.4361622071322, 0.0, "5.37895246018549769090960535077083550473311866303112177892620503384481126457048442393772870159777516546967431838569423398e-278", false, false);
|
||||
yield return new(361.4433597083125, -1.4210854715202004e-14, "9.39413164502447626847328764009177183297408781592951513281931633463913673493675341251142028657603620407825016689176192087e+156", false, false);
|
||||
yield return new(45.295722882428436, 0.0, "4.69550710091158506004323950004901577226281624771862529313617517050793089457445098524844327428673055680449203987605691549e+19", false, false);
|
||||
yield return new(340.5160049900571, 0.0, "7.65988001607782515861684940977406269165269044648423742217291849129270546299711308380591886370867367449879588882284124571e+147", false, false);
|
||||
yield return new(283.43041449589055, -1.4210854715202004e-14, "1.23670187466181937579504997201852081630303356603871150322868283606152791065491529848691798675729743029649436313311123110e+123", false, false);
|
||||
yield return new(-533.5005145553998, 0.0, "2.01219671678236981238523705935452018818908825957461457058521813394237307700688820316331668993649881313826122916412489188e-232", false, false);
|
||||
yield return new(257.5404833898684, 0.0, "7.05359959610153803520371341431718520217933805066046854728474794744255109453153995542586820309072078224867169077457848841e+111", false, false);
|
||||
yield return new(-55.97131132508878, 0.0, "4.92003674888733188462777919013806765776660861288478784590109001507531417219251531651181709841825584795760099719250935282e-25", false, false);
|
||||
yield return new(663.8146166565214, 0.0, "1.95445205276546415830848264720220612970874891531215398294603983188898656661020098574053723484280660359259632232395749088e+288", false, false);
|
||||
yield return new(-619.978350187033, 2.842170943040401e-14, "5.58243421970874331521084612242662925784125201719365507202636149585552827542807237439630614045891216256004988491512827887e-270", false, false);
|
||||
yield return new(427.96980959954817, 1.4210854715202004e-14, "7.32700908894329738815921903329975424650236936473446380061010067401625753117828994987116791017873746052357916326772381762e+185", false, false);
|
||||
yield return new(-709.3166236040505, 0.0, "8.86552474891739902009931994868270540803096308137043035787910108049247915603077181158929594767371003126588295782081427790e-309", false, false);
|
||||
yield return new(-180.40321004228326, 0.0, "4.48622820031742173751457015278277542837120776996069052656617251663110655389425073468769980385458705803739157336193527461e-79", false, false);
|
||||
yield return new(-56.03689178765785, 1.7763568394002505e-15, "4.60773096424309580180923100483306173403108157182832884534078747775819542629277403115814827021799635096367670788215522118e-25", false, false);
|
||||
yield return new(-207.0966884734462, 0.0, "1.14564740452679797406722882531458749597958934629409550865352776344298021536729694907006539648995177762055386196784024387e-90", false, false);
|
||||
yield return new(-260.51328761009165, 1.4210854715202004e-14, "7.25298415111199935044310928873911885258150934851603347756014302156314740794690613701570605444734384401935928317087814485e-114", false, false);
|
||||
yield return new(-185.59022255498292, 7.105427357601002e-15, "2.50720848667368445904068897974087540160232837956095638451919183110596200631470050701397086877272779566623463819202590095e-81", false, false);
|
||||
yield return new(449.31972781926675, 0.0, "1.37112927062017605757281576312740617526880508934741023026258352573791155128931809085560544781349069292659004139695043019e+195", false, false);
|
||||
yield return new(280.61708082988207, -1.4210854715202004e-14, "7.42078300285110437930626699237726468020952574742841831075563702792387518027073970369853487902262454295683085307520937589e+121", false, false);
|
||||
yield return new(-599.423232627025, 2.842170943040401e-14, "4.71843248791009713712341330971983311960871068978438433777453568265781998265440519101362745406137031673928623224998909552e-261", false, false);
|
||||
yield return new(-422.28534960302767, 1.4210854715202004e-14, "4.01608484085323914105359962595620812076905405352870982102470448228463792481070784199420192412584577532191202264884281174e-184", false, false);
|
||||
yield return new(208.7139918376423, 0.0, "4.39880744155987796149679220324035397183897101999165585835589836467720793839581045908833764631058714911143276869781712912e+90", false, false);
|
||||
yield return new(651.4323337183437, 0.0, "8.19346998741724398862034981710191986652668012120985395960358001838927439951191429923009327416530979187330369313087058161e+282", false, false);
|
||||
yield return new(422.83806839504473, 1.4210854715202004e-14, "4.32752756222156261225102028173066950435219885668508894983208193647039881585514069326792965072898699558786013100345984387e+183", false, false);
|
||||
yield return new(143.29037716090784, 7.105427357601002e-15, "1.69910458106426676554498095736585717279629861080725638335770561432172175567179296935807251115412696313306724901224512233e+62", false, false);
|
||||
yield return new(-423.8235075138234, 1.4210854715202004e-14, "8.62560141770186405333837436070283907622016892778266665614001106958891092867882075683909911596340580037798946754919642625e-185", false, false);
|
||||
yield return new(629.674319423568, 2.842170943040401e-14, "2.91126890565240823415617400543001298046759607283544328129671913746688713656878438331162306480748398370464034912656538820e+273", false, false);
|
||||
yield return new(476.4269335621673, -1.4210854715202004e-14, "8.12060294229288638705696742243171138798739665557121126671332272759247891668245193155034259725461712382725662571286328498e+206", false, false);
|
||||
yield return new(-368.34418334630294, 0.0, "1.07189866873214564227512329996676053698526755024574933331009054494690554598611201496714891396418441980287847271648619119e-160", false, false);
|
||||
yield return new(426.4512284367213, -1.4210854715202004e-14, "1.60477928954337675596913772689313867604252233210913944130610314719949644668929549587347071785910635667889989102565389825e+185", false, false);
|
||||
yield return new(479.86137038088054, -1.4210854715202004e-14, "2.51851901957090131714532718528724969599767014021536310616673466220572163252337149568927768479497181122240432259582720596e+208", false, false);
|
||||
yield return new(-458.3944799990166, 0.0, "8.35231377927775218836210866940849971238309323325966833772571623639636233470609261119570813125493442264451177020245725980e-200", false, false);
|
||||
yield return new(538.8101651044019, 2.842170943040401e-14, "1.00526716680082389057516886078501218166744951626822418570724905419153238061072192210420764844166330970451459803220906064e+234", false, false);
|
||||
yield return new(22.15213573331414, 0.0, "4.17397949616325110413321154114872752301685074292041043266359355399670536385253098257197408148405435207860488381883513019e+9", false, false);
|
||||
yield return new(-51.90429048611031, -1.7763568394002505e-15, "2.87245381635063414910033235658339814147961186337133527534688133490396795511401749977209274215841849929304105540758920696e-23", false, false);
|
||||
yield return new(-51.33803587753391, 0.0, "5.06027718442234840278246183085295466388263540807401073576769499575972033255888967982821328436275583313102789498414627886e-23", false, false);
|
||||
yield return new(78.05831181158169, 0.0, "7.94866303462243425204940421651969283685027124482927854333515042019832522257210762641135714348485410603557283113270732409e+33", false, false);
|
||||
yield return new(-316.89104991186997, 0.0, "2.37665234860086424272893806792451564054593665854702908033635903304590570912375914584571052456884643028797821719093752027e-138", false, false);
|
||||
yield return new(668.7714217752093, 2.842170943040401e-14, "2.77803767716926480494800178117846676667419303570622327706434084588631083247004295466580385823262031268378610965263286457e+290", false, false);
|
||||
yield return new(680.4864668830899, 0.0, "3.40030267543412741152392668476743059322750613469336046861812545068307651919878546978662568628106438922784868779400103430e+295", false, false);
|
||||
yield return new(275.71601844842723, -1.4210854715202004e-14, "5.52008016117627051627152920015720966988197938268556791192203183220632953095782874708811497365849400280981205969332198486e+119", false, false);
|
||||
yield return new(-445.6698625965356, -1.4210854715202004e-14, "2.80567862654187847604022917362207614349765382476878153191064333889161447799670762325599971073801061363353306265601322090e-194", false, false);
|
||||
yield return new(-63.196571231196685, -1.7763568394002505e-15, "3.58160624879422249528597632394783307195564100672359124415465535507181915793102312788603160456494554789864577247762191305e-28", false, false);
|
||||
yield return new(370.73764411121806, 0.0, "1.02167571709662012978574521531875120712692242187318883974159061205711055222696447285491174555985669578559375428948854122e+161", false, false);
|
||||
yield return new(-297.65730157570334, -1.4210854715202004e-14, "5.35890955697308980286448789307533538423483927729590658159776633608813867634004664534327700429045233632021246170217834155e-130", false, false);
|
||||
yield return new(283.2479106439273, -1.4210854715202004e-14, "1.03039704202642657253556757179516153171083463765491588891988142833578829377235736191937905583732953725199623748172081520e+123", false, false);
|
||||
yield return new(-518.9819357755157, -2.842170943040401e-14, "4.06451831847497777816889222884393558777703001718953458869677781770344080189877096252012563041130823926324789673724650773e-226", false, false);
|
||||
yield return new(-50.320556127609734, -1.7763568394002505e-15, "1.39978117139718859819863665563900537372395285581185827197311567520765034232601834712067644793536298774148624623034543328e-22", false, false);
|
||||
yield return new(553.0078744642244, -2.842170943040401e-14, "1.47322245183432396109529090272988975308921754523662465588290740021678908366347295670482551934394980803464184301611683360e+240", false, false);
|
||||
yield return new(700.9099225705045, 0.0, "2.51948445769605651281865534108754855840994232758280747431580065979256545734618453121372551962883920654131999989381658498e+304", false, false);
|
||||
yield return new(-368.59132743760546, 0.0, "8.37183030004208089829601116432266660615386985125431719869880517751238808255922308293853954259961164152754274661498047061e-161", false, false);
|
||||
yield return new(328.8733893109577, -1.4210854715202004e-14, "6.72818961878776146403138851632284099752609914026170349199759193545557728855066071501314204583390866559046090953468206243e+142", false, false);
|
||||
yield return new(-610.2870785426633, 0.0, "9.03003455177174550370231202399628038036615647679105750340330198051262714767221590915931500139966794363406159117503327824e-266", false, false);
|
||||
yield return new(-581.2546837986364, -2.842170943040401e-14, "3.66689307098811069067275969821613749270864903693004508139617801537624853168654845472153786838567309217248540607768843249e-253", false, false);
|
||||
yield return new(-114.5097069209985, -3.552713678800501e-15, "1.85808749214386363163181505554519377650587478351484284594423052682961728058550691220149552276527736261050470011694929003e-50", false, false);
|
||||
yield return new(521.0379652843721, 2.842170943040401e-14, "1.92270734380839515146378592887983586527243497084997837991903378964791939745280502327150133412346088529014809612926287624e+226", false, false);
|
||||
yield return new(-600.5976234266386, 0.0, "1.45802946825777425002695195523435767399837623785465460104305729127484442506900496205120509000552052237306914948989227727e-261", false, false);
|
||||
yield return new(156.76771107759794, 7.105427357601002e-15, "1.21157934703874853208402110193986981961128727852944443971417079776461292903800750665673754307027799036455276265139549098e+68", false, false);
|
||||
yield return new(-12.124513857574584, 0.0, "5.42488499644416622198292172219508941513166896980567291469536104301462655420573713311933423453355344948759787516398833345e-6", false, false);
|
||||
yield return new(373.9755141606854, 0.0, "2.60316781987619970722038101347946282085158528596016586218322621458813194735970522205720405210680856132824807566904879478e+162", false, false);
|
||||
yield return new(375.26461514720745, 1.4210854715202004e-14, "9.44825513040578675525433634793575467471294044207769959106617371776345135511357106724480519815890519557146956438373988037e+162", false, false);
|
||||
yield return new(-689.1596165170188, -2.842170943040401e-14, "5.03247233472804965833871575507697166950606622972855041665935520474597867753723374557081305250047844215301516976719865727e-300", false, false);
|
||||
yield return new(-312.1235287317174, 0.0, "2.79559206848027600375115462040233124955803374302019050582380980651757208279877966165499851325871988914638995417450938999e-136", false, false);
|
||||
yield return new(-133.06689171337143, 0.0, "1.62100070923576246803197781971151295182423957024412949227531594102988445341130109909474534069052557352765861144623829228e-58", false, false);
|
||||
yield return new(-254.20225857809788, 0.0, "3.99357469858050864608094079295922954579211212807546160012977550249667824153573606447596589831836861960941172944931990910e-111", false, false);
|
||||
yield return new(676.3319663707205, -2.842170943040401e-14, "5.33630850896694003088409252604851275462002766178050073311880947905507851875529691122415439606328166567203553952001244692e+293", false, false);
|
||||
yield return new(-706.856363295316, 2.842170943040401e-14, "1.03796311959384047269560572543315424002832228807597493054203283134095874767677999346098214050756029820148086656866449500e-307", false, false);
|
||||
yield return new(-321.6074172290768, 0.0, "2.12653903094307091968997276897533902009517724207538497104299769233738462949856937324839393966493458428170759897966317386e-140", false, false);
|
||||
yield return new(530.0103082638502, 0.0, "1.51548705420569333736515520300213169536404663561653368881742543596551835921772411626185899434218839970435748127546863333e+230", false, false);
|
||||
yield return new(-632.4314892813157, 0.0, "2.18018839337579371462595491713918434980113546320929398840766068190832264325541464216958223258404298705380414106594679351e-275", false, false);
|
||||
yield return new(-744.0934983311013, -1.6734828315645128e-14, "6.98714337051313208006513446568231545566129872588002558750780914808909866701214909457154693533604169836362338613080224250e-324", false, false);
|
||||
yield return new(-744.0934983311013, -1.6734828315645125e-14, "6.98714337051313208006513446570436299263798664931223523569236371622341671373383558538575129031830746639726406475076323379e-324", false, false);
|
||||
yield return new(-744.0934983311013, -1.6734828315645122e-14, "6.98714337051313208006513446572641052961467457274444488387698785411764405551605568920340969374288798018039391277794795236e-324", false, false);
|
||||
yield return new(-708.0498449419841, 1.4198372307141562e-17, "3.14672962798271731045847070985629106088699236009000980727234726565331391383038580428293839493380169291658401750047165864e-308", false, false);
|
||||
yield return new(-708.0498449419841, 1.4198372307141565e-17, "3.14672962798271731045847070985630075749630023596539305130557283034804177172470054654328726324540926548252079287005793150e-308", false, false);
|
||||
yield return new(-708.0498449419841, 1.4198372307141568e-17, "3.14672962798271731045847070985631045410560811184077629533879839507264961397911470994425694741254153140687443200811191282e-308", false, false);
|
||||
yield return new(-68.96814446571456, 7.456617379421123e-16, "1.11561779098947160050654927371985600558349664444602144912738553521318307418367932341913272749412369839422242780361827541e-30", false, false);
|
||||
yield return new(-68.96814446571456, 7.456617379421124e-16, "1.11561779098947160050654927371996601399105672196031937693806128765144077546776758192288876925858663133336610322423957358e-30", false, false);
|
||||
yield return new(-68.96814446571456, 7.456617379421125e-16, "1.11561779098947160050654927372007602239861679947461730474873705093736497297244916099361400389805842727246296264699643156e-30", false, false);
|
||||
yield return new(-0.34657359027997264, -1.15952340692315e-17, "7.07106781186547524400844362104848151612304016521768062766184095177317868787098221547883491708208520216770705605342969881e-1", false, false);
|
||||
yield return new(-0.34657359027997264, -1.1595234069231498e-17, "7.07106781186547524400844362104849241082803029677627932443209212280977313377656339550830356371094219315922922799519634988e-1", false, false);
|
||||
yield return new(-0.34657359027997264, -1.1595234069231496e-17, "7.07106781186547524400844362104850330553302042833487802120234329386315353054275210640598629277933666467823289978569644651e-1", false, false);
|
||||
yield return new(0.34657359027997264, 1.1595234069231496e-17, "1.41421356237309504880168872420969549603273966508692054211289081721355029737587236309267408766401076839916562119664190298e+0", false, false);
|
||||
yield return new(0.34657359027997264, 1.1595234069231498e-17, "1.41421356237309504880168872420969767497373769139864028146694105141962551056486401694834996183830158716180954825537363348e+0", false, false);
|
||||
yield return new(0.34657359027997264, 1.15952340692315e-17, "1.41421356237309504880168872420969985391473571771036002082099128562905791392597717697766865250049990011376350780526255283e+0", false, false);
|
||||
yield return new(1.0397207708399179, 9.029685343895231e-17, "2.82842712474619009760337744841937194615375838376685200255442501457434266339029106280223940880053175190088420610575172932e+0", false, false);
|
||||
yield return new(1.0397207708399179, 9.029685343895233e-17, "2.82842712474619009760337744841940680920972680475436783221922876182478973716319216070042518126223590258867505878691328487e+0", false, false);
|
||||
yield return new(1.0397207708399179, 9.029685343895234e-17, "2.82842712474619009760337744841944167226569522574188366188403250950495715296764604882489146417610105050336646721858234510e+0", false, false);
|
||||
yield return new(69.6612916462745, -2.6098504116664157e-15, "1.79272867119315647739942202327822996688215022175625432702918581683349268499311642632218490128850388464907533865651844537e+30", false, false);
|
||||
yield return new(69.6612916462745, -2.6098504116664153e-15, "1.79272867119315647739942202327893707366333676928065517139129063511662062655938770611903772921628746828416148034401316475e+30", false, false);
|
||||
yield return new(69.6612916462745, -2.609850411666415e-15, "1.79272867119315647739942202327964418044452331680505601575339573230419631549355911255320898716561617353758241085835942027e+30", false, false);
|
||||
yield return new(709.436139303104, -3.742575719755748e-15, "1.27116100615364628366052028422166464684592199326463133372226049039050942560031704291012837907965430323512928214131252068e+308", false, false);
|
||||
yield return new(709.436139303104, -3.7425757197557475e-15, "1.27116100615364628366052028422266741606791801082994866523623326288452676207760135309929657872233499545627151368812022258e+308", false, false);
|
||||
yield return new(709.436139303104, -3.742575719755747e-15, "1.27116100615364628366052028422367018528991402839526599675020682642398029010304480006949308090339417672525743758652416348e+308", false, false);
|
||||
yield return new(709.782712893384, 2.3691528222554846e-14, "1.79769313486231580793728971404631370472204944707885473394255307689401631566863219557545655233948936948926513968471917798e+308", false, false);
|
||||
yield return new(709.782712893384, 2.369152822255485e-14, "1.79769313486231580793728971405198622405675778669468436196455240891719566132544008818951355194454679628152242602530089901e+308", false, false);
|
||||
yield return new(709.782712893384, 2.3691528222554853e-14, "1.79769313486231580793728971405765874339146612631051398998656964025532405383200713096445663417114297060553540946791444483e+308", true, false);
|
||||
yield return new(-745.1332191019412, 1.4483164125345334e-14, "2.47032822920623272088284396433590095345751794342251487469159645225458355532063237365273213340616393668071835655093600486e-324", false, true);
|
||||
yield return new(-745.1332191019412, 1.4483164125345337e-14, "2.47032822920623272088284396434369593490985653493344559708025208329260790709241093449531658811559842016575818889409610114e-324", false, false);
|
||||
yield return new(-745.1332191019412, 1.448316412534534e-14, "2.47032822920623272088284396435149091636219512644437631946893231095513095013854817700656741929810891355035946163931074223e-324", false, false);
|
||||
yield return new(-708.3964185322641, -2.7475416721234717e-14, "2.22507385850720138309023271732581699273775735905523668221876285481696276077167221243465939524364681713293424068277841922e-308", false, false);
|
||||
yield return new(-708.3964185322641, -2.7475416721234714e-14, "2.22507385850720138309023271733283808785057976074613640353332163334505201319700046987868417717830168695105609212481717356e-308", false, false);
|
||||
yield return new(-708.3964185322641, -2.747541672123471e-14, "2.22507385850720138309023271733985918296340216243703612484790256654292664122956476343262942517386336190821248359185503623e-308", false, false);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,370 @@
|
||||
// Generated by generate_log.py; do not hand-edit reference literals.
|
||||
// Exact binary64 sums; Decimal.ln at 450/650 digits, rounded to 120 digits.
|
||||
using Xunit;
|
||||
|
||||
namespace Just.PreciseMath.Tests.ReferenceData;
|
||||
|
||||
internal static class LogReferenceData
|
||||
{
|
||||
internal const string Ln2 = "6.93147180559945309417232121458176568075500134360255254120680009493393621969694715605863326996418687542001481020570685734e-1";
|
||||
|
||||
internal static IEnumerable<TheoryDataRow<string, double, double, string>> Cases()
|
||||
{
|
||||
yield return new("scalar-boundary", 0.5, 0.0, "-6.93147180559945309417232121458176568075500134360255254120680009493393621969694715605863326996418687542001481020570685734e-1");
|
||||
yield return new("scalar-boundary", 0.75, 0.0, "-2.87682072451780927439219005993827431503509710897761056506665685349292950720780464338110899179105286296032932975183505725e-1");
|
||||
yield return new("scalar-boundary", 1.0, 0.0, "0e+0");
|
||||
yield return new("scalar-boundary", 1.25, 0.0, "2.23143551314209755766295090309834503374601085548007213671287872487391743768268333418407224100342235715963340980574191432e-1");
|
||||
yield return new("scalar-boundary", 1.5, 0.0, "4.05465108108164381978013115464349136571990423462494197614014324144100671248914251267752427817313401245968548045387180009e-1");
|
||||
yield return new("scalar-boundary", 2.0, 0.0, "6.93147180559945309417232121458176568075500134360255254120680009493393621969694715605863326996418687542001481020570685734e-1");
|
||||
yield return new("scalar-boundary", 3.0, 0.0, "1.09861228866810969139524523692252570464749055782274945173469433363749429321860896687361575481373208878797002906595786574e+0");
|
||||
yield return new("scalar-boundary", 10.0, 0.0, "2.30258509299404568401799145468436420760110148862877297603332790096757260967735248023599720508959829834196778404228624863e+0");
|
||||
yield return new("scalar-boundary", 1e-308, 0.0, "-7.09196208642166070768214742705535718056499206129486573599521955618807812050464614812913346536250943616410303237117193125e+2");
|
||||
yield return new("scalar-boundary", 1e+308, 0.0, "7.09196208642166070688520431672224631298274262504784082648747879520031161982884765147137142868601202852269278974627923400e+2");
|
||||
yield return new("scalar-boundary", 1.7976931348623157e+308, 0.0, "7.09782712893383996732223389910657145503973148736664163038603057714706059319168681439891107972015703395856598605178249443e+2");
|
||||
yield return new("scalar-boundary", 2.2250738585072014e-308, 0.0, "-7.08396418532264106224411228130256452573161137316180869711334969702248281653027999349192320190339898667925513603023240820e+2");
|
||||
yield return new("scalar-boundary", 5e-324, 0.0, "-7.44440071921381262314107298446081634113087144302914142925610330195904749995452124560697213194153670420109590616092916478e+2");
|
||||
yield return new("scalar-boundary", 1.5e-323, 0.0, "-7.43341459632713152622712053209159108408439653745091393473875635862267255702233515593823597439339938331321620587026958612e+2");
|
||||
yield return new("scalar-boundary", 2.225073858507201e-308, 0.0, "-7.08396418532264106446455833055287785309790759090967500542603480667714539155580874557210156054295995063386242753419205882e+2");
|
||||
yield return new("scalar-boundary", 2.225073858507202e-308, 0.0, "-7.08396418532264106002366623205225169140338091854632077113101788912136811397334572694788857479320939242416211452756353776e+2");
|
||||
yield return new("scalar-boundary", 0.9999999999999999, 0.0, "-1.11022302462515660205338988848237217180973272006529009577798707340512938872317032647152917959886132748594421808576780172e-16");
|
||||
yield return new("scalar-boundary", 1.0000000000000002, 0.0, "2.22044604925031283432823045461548792598233180790111470255693426654403462711018959425509302150266887043618910734836177242e-16");
|
||||
yield return new("binade-residual", 1e-323, 0.0, "-7.43746924740821317004690066324623457545011644168553887671489650186411356373482429845091349867157251732567589135072345792e+2");
|
||||
yield return new("binade-residual", 1e-323, -0.0, "-7.43746924740821317004690066324623457545011644168553887671489650186411356373482429845091349867157251732567589135072345792e+2");
|
||||
yield return new("binade-residual", 1.5e-323, 0.0, "-7.43341459632713152622712053209159108408439653745091393473875635862267255702233515593823597439339938331321620587026958612e+2");
|
||||
yield return new("binade-residual", 1.5e-323, -0.0, "-7.43341459632713152622712053209159108408439653745091393473875635862267255702233515593823597439339938331321620587026958612e+2");
|
||||
yield return new("binade-residual", 3.337610787760802e-308, 0.0, "-7.07990953424155941842433215014792103436589146892718375513720955378104180981779085097924567762522585266679545054977853640e+2");
|
||||
yield return new("binade-residual", 3.337610787760802e-308, -0.0, "-7.07990953424155941842433215014792103436589146892718375513720955378104180981779085097924567762522585266679545054977853640e+2");
|
||||
yield return new("binade-residual", 1.3998954277548283e-301, 5.180654e-318, "-6.92741715451837144998246674188540334942915513004782591476234306024086236510959867110624259277052835341389174548385802125e+2");
|
||||
yield return new("binade-residual", 1.3998954277548283e-301, -5.180654e-318, "-6.92741715451837145072261542496884104304490957544170646098593110152584281546877674062719233462108321833459887414496043835e+2");
|
||||
yield return new("binade-residual", 4.582404545249407e-151, 1.695830344760954e-167, "-3.46168125171864490289630613459452050905165445824654964415894301277389425526112509307692595778843491570388434038100459258e+2");
|
||||
yield return new("binade-residual", 4.582404545249407e-151, -1.695830344760954e-167, "-3.46168125171864490363645481767795820266740890364043019038253105405887470562030316259787569963898978062459146904210700968e+2");
|
||||
yield return new("binade-residual", 0.75, 2.7755575615628914e-17, "-2.87682072451780890431784851821943435490878778887592609674976540186008163234846220366795607630566486929695008835687076687e-1");
|
||||
yield return new("binade-residual", 0.75, -2.7755575615628914e-17, "-2.87682072451780964446653160165712797066323318275647232033780668684053199152653172461769792686052979000407874945928786604e-1");
|
||||
yield return new("binade-residual", 1.5, 5.551115123125783e-17, "4.05465108108164418985447269636233132584621355472662644445703469307385458734848495239067719365852200612306472184883609047e-1");
|
||||
yield return new("binade-residual", 1.5, -5.551115123125783e-17, "4.05465108108164344970578961292463771009176816084608022086899340809340422817041543144093534310365708541593606074641899130e-1");
|
||||
yield return new("binade-residual", 3.0, 1.1102230246251565e-16, "1.09861228866810972840267939109440970066012148983291789856638347880077908070454321084493104636227088815430795320545429478e+0");
|
||||
yield return new("binade-residual", 3.0, -1.1102230246251565e-16, "1.09861228866810965438781108275064033908467695044486327620757935030273404478673625874995686130678439608359508709521258486e+0");
|
||||
yield return new("binade-residual", 4.910085911844213e+150, 1.8170968107390172e+134, "3.46979055388080819127601507998724517170334688535600289704785708216004196443582206298170731217575195971613046982470226476e+2");
|
||||
yield return new("binade-residual", 4.910085911844213e+150, -1.8170968107390172e+134, "3.46979055388080819053586639690380747808759243996212235082426904087506151407664399346075757032519709479542334116359984766e+2");
|
||||
yield return new("binade-residual", 1.607262910779401e+301, 5.948067633911132e+284, "6.93552645668053473836217568727812801208084755715727916765125712962701007428429564101102394715784539742613787492755569343e+2");
|
||||
yield return new("binade-residual", 1.607262910779401e+301, -5.948067633911132e+284, "6.93552645668053473762202700419469031846509311176339862142766908834202962392511757149007420530729053250543074626645327633e+2");
|
||||
yield return new("binade-residual", 1.348269851146737e+308, 4.9896007738368e+291, "7.09495030820932215952813907521350862273821258806013787609901353181049060733732542560037251236702169556079821556228695115e+2");
|
||||
yield return new("binade-residual", 1.348269851146737e+308, -4.9896007738368e+291, "7.09495030820932215878799039213007092912245814266625732987542549052551015697814735607942277051646683064009108690118453405e+2");
|
||||
yield return new("dense-and-sparse-low", 1.0, 5.551115123125783e-17, "5.55111512312578254804376278947523901991981278988962222756935407097214122011139871925366705050830882669262574760778067005e-17");
|
||||
yield return new("dense-and-sparse-low", 1.0, -5.551115123125783e-17, "-5.55111512312578285619255389143297550887628360347846797205290577537162612061508410873614140186086447543174169782788199333e-17");
|
||||
yield return new("dense-and-sparse-low", 1.0, 5e-324, "4.94065645841246544176568792868221372365059802614324764425585682500675507270208751865299836361635992379796564695445717731e-324");
|
||||
yield return new("dense-and-sparse-low", 1.0, -5e-324, "-4.94065645841246544176568792868221372365059802614324764425585682500675507270208751865299836361635992379796564695445717731e-324");
|
||||
yield return new("dense-and-sparse-low", 1.4142135623730951, 5.551115123125783e-17, "3.46573590279972762319014104442688659671716864637094695515049679517467599837002227654089704889504065050849641729800500694e-1");
|
||||
yield return new("dense-and-sparse-low", 1.4142135623730951, -5.551115123125783e-17, "3.46573590279972683814391170253941056428409466580831394082532128005304637509765529554847792137300830845936178205520483110e-1");
|
||||
yield return new("dense-and-sparse-low", 1.4142135623730951, 5e-324, "3.46573590279972723066702637348315628422040920503198944881264796842348666517011773698650502597569728491755588352148233771e-1");
|
||||
yield return new("dense-and-sparse-low", 1.4142135623730951, -5e-324, "3.46573590279972723066702637348315628422040920503198944881264796842348666517011773698650502597569728491755588352148233771e-1");
|
||||
yield return new("dense-and-sparse-low", 0.7071067811865475, 2.7755575615628914e-17, "-3.46573590279972704107463885392989277866220104990058184223518283400496728900287858458871962848692346392866619375346293000e-1");
|
||||
yield return new("dense-and-sparse-low", 0.7071067811865475, -2.7755575615628914e-17, "-3.46573590279972782612086819581749207061171581356031175347864947360671570368363110333238322211099529983256535607887100419e-1");
|
||||
yield return new("dense-and-sparse-low", 0.7071067811865475, 5e-324, "-3.46573590279972743359775352487368472091718088278566868656686869387741023062048936894230586271486699391336036720393083281e-1");
|
||||
yield return new("dense-and-sparse-low", 0.7071067811865475, -5e-324, "-3.46573590279972743359775352487368472091718088278566868656686869387741023062048936894230586271486699391336036720393083281e-1");
|
||||
yield return new("dense-and-sparse-low", 1e-308, 0.0, "-7.09196208642166070768214742705535718056499206129486573599521955618807812050464614812913346536250943616410303237117193125e+2");
|
||||
yield return new("dense-and-sparse-low", 1e-308, -0.0, "-7.09196208642166070768214742705535718056499206129486573599521955618807812050464614812913346536250943616410303237117193125e+2");
|
||||
yield return new("dense-and-sparse-low", 1e-308, 5e-324, "-7.09196208642166070274149096864289251131762200167613195674938503746430392194065974069815567083296570136442525903288022385e+2");
|
||||
yield return new("dense-and-sparse-low", 1e-308, -5e-324, "-7.09196208642166071262280388546782429082098612619462831352666454845973432433339361150276213513067916270195665710547011677e+2");
|
||||
yield return new("dense-and-sparse-low", 1e+308, 4.9896007738368e+291, "7.09196208642166070738416439410592624797066342402470115489149213421715159219499476833641331264382087753975660047482346581e+2");
|
||||
yield return new("dense-and-sparse-low", 1e+308, -4.9896007738368e+291, "7.09196208642166070638624423933856635309870594379819236016005430228146051273780234736132682012863970259151949715225658597e+2");
|
||||
yield return new("dense-and-sparse-low", 1e+308, 5e-324, "7.09196208642166070688520431672224631298274262504784082648747879520031161982884765147137142868601202852269278974627923400e+2");
|
||||
yield return new("dense-and-sparse-low", 1e+308, -5e-324, "7.09196208642166070688520431672224631298274262504784082648747879520031161982884765147137142868601202852269278974627923400e+2");
|
||||
yield return new("dense-and-sparse-low", 1.7976931348623157e+308, 4.9896007738368e+291, "7.09782712893383996759978965526286061710865862581065128842256906430267355581830559839919701739706054194775887134219886231e+2");
|
||||
yield return new("dense-and-sparse-low", 1.7976931348623157e+308, -4.9896007738368e+291, "7.09782712893383996704467814295028228526708457137368684955616586064623699207202911664565057018537306512592047080659757912e+2");
|
||||
yield return new("dense-and-sparse-low", 1.7976931348623157e+308, 5e-324, "7.09782712893383996732223389910657145503973148736664163038603057714706059319168681439891107972015703395856598605178249443e+2");
|
||||
yield return new("dense-and-sparse-low", 1.7976931348623157e+308, -5e-324, "7.09782712893383996732223389910657145503973148736664163038603057714706059319168681439891107972015703395856598605178249443e+2");
|
||||
yield return new("tiny-delta-transition", 1.0, 5.551115123125782e-17, "5.55111512312578193174618058555980025339516034281335266714530226183324421924014036523576597556487514804335114092086815729e-17");
|
||||
yield return new("tiny-delta-transition", 1.0, 5.551115123125783e-17, "5.55111512312578254804376278947523901991981278988962222756935407097214122011139871925366705050830882669262574760778067005e-17");
|
||||
yield return new("tiny-delta-transition", 1.0, 5.551115123125784e-17, "5.55111512312578378063892719730611655296911768403076666712254593201803108431810380710527849389475544150871691764305007084e-17");
|
||||
yield return new("tiny-delta-transition", 1.0, -5.551115123125784e-17, "-5.55111512312578408878771829926398988747874521805188771546643147070735642826257077595207564459747427983393192339059396215e-17");
|
||||
yield return new("tiny-delta-transition", 1.0, -5.551115123125783e-17, "-5.55111512312578285619255389143297550887628360347846797205290577537162612061508410873614140186086447543174169782788199333e-17");
|
||||
yield return new("tiny-delta-transition", 1.0, -5.551115123125782e-17, "-5.55111512312578223989497168751746831957505279619745544099359880758477678874690941895886206681716329351288934486206991599e-17");
|
||||
yield return new("near-one-log", 1.0, -1.1102230246251565e-16, "-1.11022302462515660205338988848237217180973272006529009577798707340512938872317032647152917959886132748594421808576780172e-16");
|
||||
yield return new("near-one-log", 1.0, 1.1102230246251565e-16, "1.11022302462515647879387344769927757622714439462918206391982080372048703398552244739719073774257396234750928387487501506e-16");
|
||||
yield return new("near-one-log", 1.0, -5.551115123125783e-17, "-5.55111512312578285619255389143297550887628360347846797205290577537162612061508410873614140186086447543174169782788199333e-17");
|
||||
yield return new("near-one-log", 1.0, 5.551115123125783e-17, "5.55111512312578254804376278947523901991981278988962222756935407097214122011139871925366705050830882669262574760778067005e-17");
|
||||
yield return new("near-one-log", 1.0, -2.7755575615628914e-17, "-2.77555756156289138957767805797176855510681487628406684506302695438880395947804941709393049346926362876035846181449326792e-17");
|
||||
yield return new("near-one-log", 1.0, 2.7755575615628914e-17, "2.77555756156289131254048028248233443286769717288694442988975552640219029599840521330023020544226990000279505685795070567e-17");
|
||||
yield return new("near-one-log", 1.0, -7.888609052210118e-31, "-7.88860905221011805411728565283097380437099492194380207972968100512540855865987828215720222136742381986785142640828800125e-31");
|
||||
yield return new("near-one-log", 1.0, 7.888609052210118e-31, "7.88860905221011805411728565282475078909313378023665801567590088088481830649115711502410110281633816360915690655808873978e-31");
|
||||
yield return new("near-one-log", 1.0, -3.054936363499605e-151, "-3.05493636349960468205197939321361769978940274057232666389361390928129162652472045770185723510801522825687515269359046716e-151");
|
||||
yield return new("near-one-log", 1.0, 3.054936363499605e-151, "3.05493636349960468205197939321361769978940274057232666389361390928129162652472045770185723510801522825687515269359046716e-151");
|
||||
yield return new("near-one-log", 1.0, -9.332636185032189e-302, "-9.33263618503218878990089544723817169617091446371708024621714339795966910975775634454440327097881102359594989930324242624e-302");
|
||||
yield return new("near-one-log", 1.0, 9.332636185032189e-302, "9.33263618503218878990089544723817169617091446371708024621714339795966910975775634454440327097881102359594989930324242624e-302");
|
||||
yield return new("near-one-log", 1.0, -2.2250738585072014e-308, "-2.22507385850720138309023271733240406421921598046233183055332741688720443481391819585428315901251102056406733973103581101e-308");
|
||||
yield return new("near-one-log", 1.0, 2.2250738585072014e-308, "2.22507385850720138309023271733240406421921598046233183055332741688720443481391819585428315901251102056406733973103581101e-308");
|
||||
yield return new("near-one-log", 1.0, -1e-323, "-9.88131291682493088353137585736442744730119605228649528851171365001351014540417503730599672723271984759593129390891435462e-324");
|
||||
yield return new("near-one-log", 1.0, 1e-323, "9.88131291682493088353137585736442744730119605228649528851171365001351014540417503730599672723271984759593129390891435462e-324");
|
||||
yield return new("near-one-log", 1.0, -5e-324, "-4.94065645841246544176568792868221372365059802614324764425585682500675507270208751865299836361635992379796564695445717731e-324");
|
||||
yield return new("near-one-log", 1.0, 5e-324, "4.94065645841246544176568792868221372365059802614324764425585682500675507270208751865299836361635992379796564695445717731e-324");
|
||||
yield return new("centering-transition", 1.414213562373095, 5.551115123125783e-17, "3.46573590279972605309768236065187290209280029370197069897161726092896893069406857146991364147726341149134861645224392734e-1");
|
||||
yield return new("centering-transition", 1.414213562373095, -5.551115123125783e-17, "3.46573590279972526805145301876427361014328553004224078772815062132722051601331605272625004785319157558744945412683585314e-1");
|
||||
yield return new("centering-transition", 1.4142135623730951, 5.551115123125783e-17, "3.46573590279972762319014104442688659671716864637094695515049679517467599837002227654089704889504065050849641729800500694e-1");
|
||||
yield return new("centering-transition", 1.4142135623730951, -5.551115123125783e-17, "3.46573590279972683814391170253941056428409466580831394082532128005304637509765529554847792137300830845936178205520483110e-1");
|
||||
yield return new("centering-transition", 1.4142135623730954, 5.551115123125783e-17, "3.46573590279972919328259972820165377230865543290378806866019876791680308319312476084747743624682307309030667693834929923e-1");
|
||||
yield return new("centering-transition", 1.4142135623730954, -5.551115123125783e-17, "3.46573590279972840823637038631430099939202223539954618380837792049014469067476413195337201223190594763042314472407910071e-1");
|
||||
yield return new("centering-transition", 0.7071067811865474, 2.7755575615628914e-17, "-3.46573590279972861116709753770515299231945096878310477597311285244029449676984761802098027382510047059480729103877820172e-1");
|
||||
yield return new("centering-transition", 0.7071067811865474, -2.7755575615628914e-17, "-3.46573590279972939621332687959287554378540651557863735157980709153879933537217919526335172083934142250469208180880204089e-1");
|
||||
yield return new("centering-transition", 0.7071067811865475, 2.7755575615628914e-17, "-3.46573590279972704107463885392989277866220104990058184223518283400496728900287858458871962848692346392866619375346293000e-1");
|
||||
yield return new("centering-transition", 0.7071067811865475, -2.7755575615628914e-17, "-3.46573590279972782612086819581749207061171581356031175347864947360671570368363110333238322211099529983256535607887100419e-1");
|
||||
yield return new("centering-transition", 0.7071067811865476, 2.7755575615628914e-17, "-3.46573590279972547098218017015487908403783269723160558605630329975926022132692487951773622106914622491151839290770185040e-1");
|
||||
yield return new("centering-transition", 0.7071067811865476, -2.7755575615628914e-17, "-3.46573590279972625602840951204235511647090667779423860038147881488088984459929186051015534859117856696065302815050202624e-1");
|
||||
yield return new("random-000", 3.2687197963818576e-121, 0.0, "-2.77428397843603746707145265857773809749514404322830220361999004599384203108239391987481055099689888229526502850906397621e+2");
|
||||
yield return new("random-001", 8.720956744645523e-63, -2.698802673467014e-79, "-1.42897131908299963994093348186618128801296795907406501436196467580118968875539154912687857009556283687475257673288325394e+2");
|
||||
yield return new("random-002", 4.178989384093167e-23, 0.0, "-5.15293876956988558054989200772155883666233844447831826313248291496465254131675273008534517596803944491229593207853084815e+1");
|
||||
yield return new("random-003", 2.8432667181955728e+85, -8.627182933488205e+68, "1.96764686548518767866436001207058242004350551097745308211869172546615830167670713395190984137587028816314312521460958731e+2");
|
||||
yield return new("random-004", 2.7381182414021697e-115, -1.1270725851789228e-131, "-2.63790014783062912940067233921000975920281831006824611081171958192539570255315929422501789301122230605068053710790124022e+2");
|
||||
yield return new("random-005", 4.6600611214593755e+66, 0.0, "1.53509644701851552188489577504396933769831338203738388795304096546018812135130602174589848122670676620350435527333676317e+2");
|
||||
yield return new("random-006", 3.8379699052985617e-10, 1.2924697071141057e-26, "-2.16809073736315064622005455624638400390629609444453346240107329199181368270444791392186611313699585577524416327990575624e+1");
|
||||
yield return new("random-007", 4.733558283596678e-290, 0.0, "-6.66194999768759882487560012470595706257992321124924103914523794015466606601665600957089034872762275001248863229309538788e+2");
|
||||
yield return new("random-008", 3.429947298221616e-142, 0.0, "-3.25734538309044646864355609571522247610094874664843799549821725069188417008662368608104227339778060972045551759486978273e+2");
|
||||
yield return new("random-009", 9.823582750843692e-65, -4.2168791772922093e-81, "-1.47383245146540567979731229659714140218541121668590642274014152707266235887217612538435052658720651624377054252165392909e+2");
|
||||
yield return new("random-010", 8.973051050007222e+197, -3.3196124551047944e+181, "4.55803489077417633801838012843828946341911805516998669607783700730706516827509813777626141848305121477462173618190165179e+2");
|
||||
yield return new("random-011", 12452068950.583649, 0.0, "2.32451526268204041966204005537989353487078801574272406601027293067219693454354951773182517177281518560241759944436286611e+1");
|
||||
yield return new("random-012", 3.046604700155709e+171, 1.0726246343954078e+155, "3.94856078659455536181750974311851484526991436855509299368684979468449550768655585183107557613988913830388046655015486893e+2");
|
||||
yield return new("random-013", 8.672562321844979e+100, 3.885337784451458e+84, "2.32418673585385800353698607677131372129553153547764602764969731854766153611008701858676738005553735159369744410490100730e+2");
|
||||
yield return new("random-014", 1.875040757115516e+211, 5.83992399055641e+194, "4.86474085018058040697837112361363330538677811304980968278689131607902849565853243224554356532164530593020061884379739771e+2");
|
||||
yield return new("random-015", 4.865697254154056e+264, 2.2374143686308563e+248, "6.09464674576280505566366550232856781744457764500982369586173585048502300326305529692486006211504953372295994274830764889e+2");
|
||||
yield return new("random-016", 186154638529016.28, 0.0, "3.28575988341695156872867707224398708730107219992792835589580148440953184813046313060657719214620210672712440451381552373e+1");
|
||||
yield return new("random-017", 6.265891621404726e-27, 0.0, "-6.03346766147555403738512972253117640556383494304418466818940356529745333722024356152101462071040260574239928826344792137e+1");
|
||||
yield return new("random-018", 2.7464787128253256e-133, -9.775796363198735e-150, "-3.05233497745092835464403053727706854474582001351884662319968729562730223426535649264796640585802940153740809754099601713e+2");
|
||||
yield return new("random-019", 7.318032322318495e+270, -2.346099009001469e+254, "6.23688316591803658883057257261425085076350137467494378995501900769505833017418531272666405349600164976698883567057977409e+2");
|
||||
yield return new("random-020", 1.1212275935340022e-159, 0.0, "-3.65996605635332299306008068788037714895707680368354975882536787504286844048878981110688374714757010362756315009225060364e+2");
|
||||
yield return new("random-021", 6.005811999442809e-218, 0.0, "-5.00170822605754816714145112212495369901434998610162582952201898612087420561325150204333486218340214608209805797834300300e+2");
|
||||
yield return new("random-022", 1.036031222705667e-47, 3.0385816786431356e-64, "-1.08186102089590205754966237067040030855267374973619233774877273264923085591554671581719125052123502944261145680885420734e+2");
|
||||
yield return new("random-023", 1.93412225876824e-306, 0.0, "-7.03931384845649421348195021348200445008254006448094723149044024509922630904917748710335052971744931549525040938157437453e+2");
|
||||
yield return new("random-024", 3.800973493036955e+216, 1.5309010345804195e+200, "4.98693637303015251841274802231915407959001588807331688449872851852270936072487191741238042395349552543151842443412210066e+2");
|
||||
yield return new("random-025", 4.5658176573322356e-138, -1.4916681462400413e-154, "-3.16238145220749364181996306616117930142470092488719576487838122456804538994345185476701875042357109460230626279464434595e+2");
|
||||
yield return new("random-026", 1.4870787534218449e-230, 0.0, "-5.29197757761275907247694319221367678765966452964762185077311988709311628432726142129939262342085142032121446914852992467e+2");
|
||||
yield return new("random-027", 4.733183001400619e+275, 0.0, "6.34765498488529825676790725207789188410025085160415986116765312337544304502844471989373599142527230723194649521497355601e+2");
|
||||
yield return new("random-028", 2.752730384372096e-299, -1.32624737e-315, "-6.87460349519063256593764081860773071032080240533437218991103408664749672834637152587612289023458365299079697791316180421e+2");
|
||||
yield return new("random-029", 5.9254629327981404e-167, -1.8827498946116282e-183, "-3.82752451713918759715551809348192784480457767998762407315702322880599165789885338733811775631356145303105526979038737973e+2");
|
||||
yield return new("random-030", 4.170970801662931e-99, -2.0303534698525194e-115, "-2.26527775391540780054707965695072804635998775850584226283222822022334977372669941450403449311176149253385396782787033456e+2");
|
||||
yield return new("random-031", 9.650932554504794e+130, -4.92525077454931e+114, "3.01603116637680222257105633834906202862207552326555765415626315019372340702623784053903924231637804563234138106526760567e+2");
|
||||
yield return new("random-032", 5.407864610999338e+99, -2.4283361152821613e+83, "2.29643778509889458747302505335422838558381481727370436095565116735296595978769610585092886289786183920833930101677046710e+2");
|
||||
yield return new("random-033", 0.0002288110245806794, 0.0, "-8.38261411526334375393535692123751590799132908549380563040508715609878897233235092649069037679550173884018570482174257491e+0");
|
||||
yield return new("random-034", 6.95198387660536e-176, 0.0, "-4.03315949298237128072542465580280516626518925497031864830602824684187009764700883847711984762906785572202034717206775923e+2");
|
||||
yield return new("random-035", 9.43766505830237e-299, -2.65249474e-315, "-6.86228234201176014962543383119849557100354613859743367030249360927717967965898623764656915417127045516597857199147858900e+2");
|
||||
yield return new("random-036", 3.2926281551971244e+27, 137438953472.0, "6.33614835880874628546675620018709051548201136684608274408383095106245336586631887659697376051244345340947423072491730227e+1");
|
||||
yield return new("random-037", 2431372078.1779017, -1.1920928955078125e-07, "2.16117215761744662639878102197395800366287725931503614282577334008121605423285048128582432333806629752988014108174567834e+1");
|
||||
yield return new("random-038", 2.7155404530624414e+55, 1.361129467683754e+39, "1.27641171110149671761135880871915529683251058010528817605512679810691144790955248795491903151877414696421840016126090514e+2");
|
||||
yield return new("random-039", 1.287883635736426e+222, 0.0, "5.11426890923353820121101207443664755461599235605591763119757309687787478735360985374480184195705371268395707782735892440e+2");
|
||||
yield return new("random-040", 1.8900609548104285e-244, 8.129872718476162e-261, "-5.61194153610773206419852279455813012236817683969635566805802218778697323324764912530529924027666137771431114589287141932e+2");
|
||||
yield return new("random-041", 6.656382142195697e-270, 0.0, "-6.19802398993331042027768403245471894147579610638061238513140203456034558148614456557149021761715516142501841791372277145e+2");
|
||||
yield return new("random-042", 9.37754125167402e+165, -4.0917382598701773e+149, "3.82164857945987261507740719312486582206924951643568964457550331084530234166863654242920300227719827902235895042331211458e+2");
|
||||
yield return new("random-043", 2.2605984890052485e+294, -7.090649168385425e+277, "6.77775646936619405396223295861428711944170524432573400504239874690211959669345971543254935515459020496137424256799209437e+2");
|
||||
yield return new("random-044", 2.0203887880077537e-185, 0.0, "-4.25274952241694410494792754883331359264069118190137356721495486883273981536244137708072284222192938988925634149041196141e+2");
|
||||
yield return new("random-045", 1.6488957771278402e+229, 0.0, "5.27792092133534158039255564058282016617348553501988462964942412994818558739955990655125192127599538477288085656764416810e+2");
|
||||
yield return new("random-046", 3.7214269581363095e-242, 1.0406237079649487e-258, "-5.55911485318929322306553849924276829181835961049141604781820005529818148405552679044460423424892230303334593770724677362e+2");
|
||||
yield return new("random-047", 1.4469744271793996e+305, 0.0, "7.02657928137684298283399961878329635682225607860518452901331715456528527864872026777518158306664933243454291678772576453e+2");
|
||||
yield return new("random-048", 1.9219673958980617e+225, 8.218962346169334e+208, "5.18734995270431853449880245948890952056910910968777167770600226396920860122245198670071717561928180426935279497242069563e+2");
|
||||
yield return new("random-049", 5.973904436226128e+44, 1.9807040628566084e+28, "1.03101144814789673596316548343170103363480183917921469604882001848586354557524341894701673127893776896143813158235957600e+2");
|
||||
yield return new("random-050", 1.4920692516321448e-05, 4.235164736271502e-22, "-1.11127615489627700299291224267366903978933963654499972815374755426677784782848228715571224165927990809537784273847258630e+1");
|
||||
yield return new("random-051", 1.8450480598073628e+86, 6.901746346790564e+69, "1.98634823323317235925212985649293930754341320514299200103381810389265997382650464055928043016522833496913895213449183464e+2");
|
||||
yield return new("random-052", 1.3925027817077125e-07, -6.617444900424222e-24, "-1.57869929605053129093490894604426811846293862255431006401507128285069534242124726161257172882950336874917349546416070662e+1");
|
||||
yield return new("random-053", 1.8296348740064743e+143, 5.415370496329717e+126, "3.29873784722693786483541888457572708873969191804968574025662454337931616917923943155800023250321634990486867733899971115e+2");
|
||||
yield return new("random-054", 5.843221179658271e+264, 2.2374143686308563e+248, "6.09647746767067643363517835932439451869566898556921910907220992006190267693954604214478331661075512788526277734394346935e+2");
|
||||
yield return new("random-055", 9529924061.13288, 4.76837158203125e-07, "2.29777025861791874231979072253016206655978902704496083603076930130852958202339505656902603987186022433539720186781257236e+1");
|
||||
yield return new("random-056", 4.8265927399886155e-163, -1.542348713665846e-179, "-3.73747229376157982857937429344336980950499597278238720924371153322219556495184657427836233747735623270022890424634008658e+2");
|
||||
yield return new("random-057", 2.1495169500621713e-77, 0.0, "-1.76533809018034705752220434516799236679843902914837895254964535265449945869491922118289523531708141786221442797813374420e+2");
|
||||
yield return new("random-058", 3.9652129204506115e+68, 1.1972621413014757e+52, "1.57953345877227669015582418056659048337793979324600191142273739519448872165932905149902725218843571061595383765207279665e+2");
|
||||
yield return new("random-059", 2.916612265e-314, 0.0, "-7.21941296440534681101081251638640118543152953579217883687793786615868646334767313334289723269706895215614274380713785662e+2");
|
||||
yield return new("random-060", 1.149855688534609e-179, 0.0, "-4.12023095199664100334422099379789460897189451208843906961052643172779908368967931438906870752996851700228094242712236965e+2");
|
||||
yield return new("random-061", 2.386732868521846e+300, 0.0, "6.91645453328340930215001545205233522533901001600035099756976867351760640089382406333164993634100365461056264549845075807e+2");
|
||||
yield return new("random-062", 1.3151139231461052e-39, 4.078315292499078e-56, "-8.95268953313193422038283377522572005124513782383605081619370802635937697512254853245737317233020766129677414258171722553e+1");
|
||||
yield return new("random-063", 6.517526712726383e-202, 0.0, "-4.63247693819364628949075808532101213086237969027698143592210859901183658517751073405038377600910395034171199661815308407e+2");
|
||||
yield return new("random-064", 3.649542073574601e+128, 0.0, "2.96025493603666942254886254110105843947594536870045753646364403236131581868029063831748416905012775304801564314200242985e+2");
|
||||
yield return new("random-065", 4.864815859155447, -2.220446049250313e-16, "1.58202886479942418068537905693222155706392584393307216820994212454092314443203726644593289807682484102970711590825231036e+0");
|
||||
yield return new("random-066", 1.363175836614944e-153, -6.624337284222476e-170, "-3.51985702076641037701126984801531260467784035219017100229813243648747354884078363974998010618730080529542760531181170175e+2");
|
||||
yield return new("random-067", 2.7352660866513753e-257, -9.242595204427927e-274, "-5.90758140178876051325333282929122936339018493595573573928219895641486358956336985433691990140113962025657664213457757472e+2");
|
||||
yield return new("random-068", 2.1730662642441385e-29, 7.006492321624085e-46, "-6.59988285016580408775399658091955081889549095831543732880410536955992307041598030904782532931638016807239392298212823072e+1");
|
||||
yield return new("random-069", 1.1475900033869986e-135, -3.818670454374506e-152, "-3.10711323459995233156214305863245104720395700811671540820410356919992573279645412368739368613445281096114277259005552550e+2");
|
||||
yield return new("random-070", 1.7610849300368026e-43, 0.0, "-9.84452289420925569913315558080176585009564014337537489670776161645315424514809265790196467944397562207558600252750648025e+1");
|
||||
yield return new("random-071", 2.849960514758649e+302, -9.516908214257812e+285, "6.96428003223915732166211527179859476101223706635428975578059636360232894351308344412807068387499899759939951318373322311e+2");
|
||||
yield return new("random-072", 2.1719583055896643e-305, 6.3e-322, "-7.01512824157618013703246000878662463665802209108757869181924294911552014159037134953257971739037837905317782987104929983e+2");
|
||||
yield return new("random-073", 4.449618263670732e+181, 0.0, "4.18260720140976028261569754018246724558641242823147739394552811508198914485106490689487062356377811807297136120309730373e+2");
|
||||
yield return new("random-074", 1.1535467976973781e-201, 0.0, "-4.62676762323819011478639228909447503269345566854661861006658188699812690143753483430743169733072948355660902224342302402e+2");
|
||||
yield return new("random-075", 1.2704718694566384e-211, 0.0, "-4.85606066239527769215125805889719765250097224221427541511157554107498079860307791676851938723296490523392327479612899376e+2");
|
||||
yield return new("random-076", 8.980024763811467e-235, 3.491753744649773e-251, "-5.38912494213627682973555614244493347475601498193783816083267485467704774881021172107674656927949877853320758702184204161e+2");
|
||||
yield return new("random-077", 2.8420252662632413e-119, 1.3758210268297398e-135, "-2.72963109146345264439289861207390041654853583113486217714916341447247357071143883712505019035110293237531183642628556694e+2");
|
||||
yield return new("random-078", 8.127885001046739e-206, 2.7664523314090327e-222, "-4.72237228414530641008317937964236943186269627223059078147340574012685763541779467276782070312191728061407944669788422960e+2");
|
||||
yield return new("random-079", 17618175292.071636, 9.5367431640625e-07, "2.35921968931855873412435553696786911513565513946219755045198968958293324283889928351542767716997451865271245841968401311e+1");
|
||||
yield return new("random-080", 2.8638991877191865e+66, 9.353610478917779e+49, "1.53022800186267166391490316995837216096916871827200883866949491980553266580421464290837281216265214983117308273590562708e+2");
|
||||
yield return new("random-081", 1.8787697728320672e+63, -9.134385233318143e+46, "1.45693478045116056317481502578779070685997494214369001393106437237800218120803360446157775296641989174964123496571158869e+2");
|
||||
yield return new("random-082", 1.6815576488931605e-270, -5.253807105661922e-287, "-6.21178254572575378648114145696316316201860759055939291060717971065685941222579684007465534993184416810813984770013679882e+2");
|
||||
yield return new("random-083", 8570660404.85047, 2.384185791015625e-07, "2.28716106266630252506213689080352975534416138834679350670756226199980432868707090752463833170059578798066442166527283912e+1");
|
||||
yield return new("random-084", 3.8759157230543322e-264, -1.101803207925311e-280, "-6.06527682599913965366746073722061614397599274388182936495291058329905877298382828816668573207259888849789923764538324356e+2");
|
||||
yield return new("random-085", 5.4823526724271695e+138, 0.0, "3.19458277161792837347021289143741745184897284145512679470316961184307132793363953632751766442194058984931000117249272786e+2");
|
||||
yield return new("random-086", 3.47345509037388e-296, -1.35807730622e-312, "-6.80320037724384678594106804377236149235481580633130029747070451437800819193014511886030310078143381853661208208740330888e+2");
|
||||
yield return new("random-087", 7.870930971713625e+42, 3.094850098213451e+26, "9.87717502549205146836510817140363698202963571093230577261095957266542210109871173363271422176267212904596940278635560023e+1");
|
||||
yield return new("random-088", 6.9152450453963086e+50, 2.076918743413931e+34, "1.17062983050980191607477479629177960786313297092612379012133432402620636204290474345742282223033400038595380132152234377e+2");
|
||||
yield return new("random-089", 4.997240010529393e+278, -1.5744403932561435e+262, "6.41727541614477753470568817375016375775467258350360526781273790101040689528680544720495461507249020361424271965785315160e+2");
|
||||
yield return new("random-090", 3.4897843045631857e-59, -1.105429575052089e-75, "-1.34602680556194386293271126712788772927543929851527924998434172965166685287179517283346846384000967665896828984780864411e+2");
|
||||
yield return new("random-091", 6.783896332535169e+80, 0.0, "1.86121359056725385312576742124678404962712771495750586877522296470575561563507938177445987449236570098838942073317700642e+2");
|
||||
yield return new("random-092", 7.099417797486954e+26, -34359738368.0, "6.18272251981762945027469377697239876995029944941549237410705362539291349451050807265978499316392041740018400553687489399e+1");
|
||||
yield return new("random-093", 7.070098048137947e-133, 3.910318545279494e-149, "-3.04287943020200856482384139363422413938242876493473019795019455246192474053879599342952669745191312981684405775500405106e+2");
|
||||
yield return new("random-094", 5.1443869094878267e+26, -17179869184.0, "6.15051186176377620427946724455306729014322562821522023000901652093421919044154772378644009075205741070896336895389966504e+1");
|
||||
yield return new("random-095", 2.292137268437661e-57, 0.0, "-1.30417865613358152269884087575716157979349130979079930009759115796494341948675802640252511408854229429268728336421968163e+2");
|
||||
yield return new("random-096", 5.592548258380238e-189, 1.9934389902195135e-205, "-4.33467147532404954158833202426454606971708818785191400918356390387861973845379635128778355451243556298719414338050380833e+2");
|
||||
yield return new("random-097", 1.3513814357447103e+131, 4.92525077454931e+114, "3.01939774537207187186185486687570498016469607441013914141802233926620103461511311800339211161030937546884387376173038536e+2");
|
||||
yield return new("random-098", 2.6531333161099647e-29, 0.0, "-6.57992263718562537929556336440090338757338736334813212108162511978053647749110312827800219612548321999639078969314161181e+1");
|
||||
yield return new("random-099", 4.157301664867412e+21, 131072.0, "4.97791531784383018522175436350825672619258173228282968566364014252577653893803202121823622224264024254645153982139787290e+1");
|
||||
yield return new("random-100", 4.7961221155444435e-223, 1.9196119217864076e-239, "-5.11908668038874346806005595767188617411143450427968795186977679257963076319353564483668806236838001915851394677137024737e+2");
|
||||
yield return new("random-101", 4.123354259274072e+215, 1.9136262932255244e+199, "4.96472461966449069227832699721531273572814474747180630289980402350593983292067089343719350230210354100886267203328547517e+2");
|
||||
yield return new("random-102", 3.7384188903135095e+148, -1.4196068833898572e+132, "3.42101256528557770689280049622957570295501979790517428111051450506128846347122460370946983820449914948669899389522334497e+2");
|
||||
yield return new("random-103", 9.702414613162123e-291, -3.5601181736115222e-307, "-6.67779887277543716099205391820280991271469943848859733770785331564741778271064997628404284952228086271686664787432430986e+2");
|
||||
yield return new("random-104", 2.1043684456742285e+279, -6.297761573024574e+262, "6.43165256341648376006704277190136757952759367172332928876842145322263419271411401909154311418904038786322403994702521229e+2");
|
||||
yield return new("random-105", 3.195133224470931e-109, 1.1818212630765742e-125, "-2.49820146351590832060830480514450620828902146170205183624559306930593786517882571001894744820360754280189121011272073282e+2");
|
||||
yield return new("random-106", 8.863841962010878e-218, 0.0, "-4.99781569972051496787076599345839566505382536420860662267281824201676540966764523540005682414340256908316412948792544481e+2");
|
||||
yield return new("random-107", 2.245005563857926e-126, 8.200532357869981e-143, "-2.89317013717725457639179113681043748191123230906279320644571199788413106984800780420098520390195666769530596823979352542e+2");
|
||||
yield return new("random-108", 1.2999788511034558e-120, 4.299440708842937e-137, "-2.76047863163332279647234322225793041932844005159176214350731988198405980754216552720506823660349354517175649368885621409e+2");
|
||||
yield return new("random-109", 3.1500110778413745e+227, 1.0520271803096747e+211, "5.23834222079254767674623513438185353387012721971968098480114742506275944805738677381526057307420996120271942816871508206e+2");
|
||||
yield return new("random-110", 3.548066051144377e+288, 1.352433999707303e+272, "6.64410909463003506341153971924137862406943137795518585517297744680022901269147892914111753796226269827153656893097544312e+2");
|
||||
yield return new("random-111", 9.210419917079414e-32, 0.0, "-7.14623875329790608384432642162907453109567421633668844328157079051721516752456107166216269417624696456446574319358360932e+1");
|
||||
yield return new("random-112", 8.254670333984976e-62, 4.3180842775472223e-78, "-1.40649496624369929073140364281264261631557925073434742929523928094489425204732198179138537249015659066733414653022367802e+2");
|
||||
yield return new("random-113", 4.43004801988224e+70, -1.532495540865889e+54, "1.62669366933284030174117816962772656441156132412695817026690036710628889044428506454763102452418192173493450149007386444e+2");
|
||||
yield return new("random-114", 3.799512532742202e+145, -1.3863348470604074e+129, "3.35209711261782956000388171293197980014802508236777737652895404502090555704340438069532906122061612491498971735035725527e+2");
|
||||
yield return new("random-115", 9.560425597580284e+264, -4.474828737261713e+248, "6.10140096795075791618720086667425828285298925226463100182506312843285038351776891550620675982505579673702295388675289262e+2");
|
||||
yield return new("random-116", 7.665250502075752e+77, -2.5711008708143844e+61, "1.79335749353619695006285975849348648679798387972410292305284265978995513039642800590561895692595899317821011741337600117e+2");
|
||||
yield return new("random-117", 3.149252899902883e-70, -1.608611746708759e-86, "-1.60033791259510013069319525643028950808134325764296850296871766775053400458349837223400873131953870990037181463611054470e+2");
|
||||
yield return new("random-118", 1.5191852894507272e-31, -5.473822126268817e-48, "-7.09619636854356639873001045870461502981491394812887215418562120497292779186658851347599194573773253815195340261037722749e+1");
|
||||
yield return new("random-119", 7.717377021697666e-08, 0.0, "-1.63772062016773554402754617935026302460203721770051933566177110046106512593400174805544552642702527831126924468789072686e+1");
|
||||
yield return new("random-120", 4.883772400847472e+229, 2.6931895815927672e+213, "5.28877904249825979792855037328931146812312124629139888313872387015013126138972729603033286873794930349078349507268098042e+2");
|
||||
yield return new("random-121", 3.974372642642431e+181, 0.0, "4.18147768741822437942450584834932500724704462252990989373168744328844702968251925674967256800772274669518804418463907628e+2");
|
||||
yield return new("random-122", 5.6630979411550745e-102, 1.982767060402851e-118, "-2.33129708403486465600383801629729764596505729509085309418957100573842939407706632435170062995404321386822677903560162677e+2");
|
||||
yield return new("random-123", 4.481850638834303e-227, 2.3432762717119234e-243, "-5.21186780059493744370876151847719553624430189666707763270713512263578709416078516180493722032786870256068622186999608311e+2");
|
||||
yield return new("random-124", 1.5587542539223835e+269, 7.33155940312959e+252, "6.19839276962466743949982685024071983522046781772916496019110114103663537932020861329286702519847926530686871402709165549e+2");
|
||||
yield return new("random-125", 8.380753840046963e-246, -2.5405852245238005e-262, "-5.64309995009040962079554011719612541027095152143718379758775064827554846801779645492779393639373314728376454360262821487e+2");
|
||||
yield return new("random-126", 1.8437705447129893e+222, -8.02633041618099e+205, "5.11785703328617233729840065973079704382437500616743576509308325580042186680801919402681153313725949495107782972847728726e+2");
|
||||
yield return new("random-127", 7.922544673804675e-255, 0.0, "-5.85089486262062646224600779210406846799340761816921607132731939717258099439775603754191036941409495905024169809055566735e+2");
|
||||
yield return new("random-128", 6.424554677747834e+139, 2.6442238751609944e+123, "3.21919455243695157040610289745193120417784170696664849006479914321508092161621052807927253728978907258639831607750307995e+2");
|
||||
yield return new("random-129", 5.831050983654325e-57, 0.0, "-1.29484153044906361635653602075982888226341623099050078571435636411161885245623471077360841130068005529432826536655035430e+2");
|
||||
yield return new("random-130", 2.4769148697304458e-206, 0.0, "-4.73425515375152938061831829100752402653634506213981875035566879569026161633660163789337916256902561883214753777161439214e+2");
|
||||
yield return new("random-131", 2.523970736682053e+109, 0.0, "2.51907608486938191853189097281673251738753839040604280451923685623425988669394828906836465399173266727174962216214397910e+2");
|
||||
yield return new("random-132", 2.0264505486449213e+38, 9.44473296573929e+21, "8.82045192982157712202265380429819920975628322885149496815771878256472601542293907276957300064237758012003909456110130657e+1");
|
||||
yield return new("random-133", 1.413923080511229e+114, 0.0, "2.62841068768809026443413491439227778941112835114138477857782860081635565935714919562086197268878902414873692726030079484e+2");
|
||||
yield return new("random-134", 2.66751372207705e+236, -1.129605583483287e+220, "5.44391228794946661749508217380052586433820058644633583058966875086476670472387930418354741721847524574100476270216509761e+2");
|
||||
yield return new("random-135", 2.894253708613619e-246, 0.0, "-5.65373205585059422883301576809748118702659686395236194290073905001700862305042301258143573124275376457478409532047109036e+2");
|
||||
yield return new("random-136", 3.5272336085475214e+233, 1.1031304526203975e+217, "5.37762840551021764349532229063144623685735530336318514096747791647776999360249487122217999288033563051204289365758709592e+2");
|
||||
yield return new("random-137", 1.9179024714157584e-48, -7.596454196607839e-65, "-1.09872852337651250004567889304476851140950834459419786330012217962145673732461400057552158471307588259450382160340717683e+2");
|
||||
yield return new("random-138", 2.350754518325833e+32, 0.0, "7.45374593240610784444439089156329702679937921295772915741589850873435797179448172087390360239655618098990240934086921273e+1");
|
||||
yield return new("random-139", 1.5646120376652417e-207, 0.0, "-4.76187476355762876194828979996664346249023872178894958055842066957720371261912131629003742245132082495890340965036065729e+2");
|
||||
yield return new("random-140", 9.029025315492739e+178, -3.599131035634557e+162, "4.12060590976059609302672010017914405171450943881387189639486900109720622819776641694075985950994400567935437050579677278e+2");
|
||||
yield return new("random-141", 8.071463194163102e+36, 2.9514790517935283e+20, "8.49813981264158577303679659277698320219020489218087581292958700965522891238466832146892901176132091733145399399104786317e+1");
|
||||
yield return new("random-142", 3.9019856834958817e-90, 1.0900377190420866e-106, "-2.05871172796286867634025871486849766575020212364494840217478301030320882728399940276112796041565799357504165122468368517e+2");
|
||||
yield return new("random-143", 1.770391321694749e-288, -9.113902524445497e-305, "-6.62573306174432013859750859673762509268639771247347358014598503485960561604820036866417940859213609411813734815970822369e+2");
|
||||
yield return new("random-144", 3.9733945721298164e-292, 0.0, "-6.70975226368962237002930828245496969242444051028431071011818389708042275938783666509863573174760273871127417885920852699e+2");
|
||||
yield return new("random-145", 2.0146668330785297e+145, 0.0, "3.34575292322479200963995520400050936555259085291245342942806688577925796464132406686116890399802571987263849266197341788e+2");
|
||||
yield return new("random-146", 8.437895253914177e-80, 3.745341083753759e-96, "-1.82074074539513848032242643492936684699971554986998127257786106802362104324222586359066138019573507721774402082936323917e+2");
|
||||
yield return new("random-147", 6.8648474123003e-310, 0.0, "-7.11874965016085794586622912051398536893668542618916747129767015994195971916418974536201942871245422342451519738896624649e+2");
|
||||
yield return new("random-148", 2.1724790429919783e+59, 1.1150372599265312e+43, "1.36628389418265666735165725148908744430133835963566024326178268374833375362997636927931675731887577684296130824432234314e+2");
|
||||
yield return new("random-149", 8.932905676175932e-259, 2.8883110013837273e-275, "-5.94179797359824893296200310684732481227617382183662284427935067049141029897318335035200801444579406012282327238429480004e+2");
|
||||
yield return new("random-150", 1.1268379215967158e+104, -3.978585891278293e+87, "2.39588265082073727266403464656501260679248805468733352714658650042107904975810387061520003838104004524626146337666238002e+2");
|
||||
yield return new("random-151", 3.188256885857843e+249, 0.0, "5.74503162492200863323944479108167016462674063703029364493942633668009205133312704270426275517227895502923902973378710539e+2");
|
||||
yield return new("random-152", 2.9305939421316244e-193, 0.0, "-4.43323717834739735918298440233056960220744118857304016614231928669605359658263157969145159493634991231390387990481504143e+2");
|
||||
yield return new("random-153", 8.752813655832842e+22, 4194304.0, "5.28262472552155880611047814488985242939697499622298842908620194480759558575237561979695416349699722345028448063915554582e+1");
|
||||
yield return new("random-154", 1.4814390899393957e-25, -5.739718509874451e-42, "-5.71716133514418394663986931612446322442322743063791327772105598315101825336352709475985414191345147069818906524302808915e+1");
|
||||
yield return new("random-155", 1.7106573980544852e+195, -6.483618076376552e+178, "4.49540970873780799603145740698779158491953559120669563692594688264739523658295164191953486238564247004401746401632384425e+2");
|
||||
yield return new("random-156", 5.153858417249538e-14, 1.5777218104420236e-30, "-3.05964456605237128203160289086211016726537586464548288686526607349187019492038387842866301503796465171235039341698517870e+1");
|
||||
yield return new("random-157", 4.372119645459035e+156, -1.9053641054174757e+140, "3.60678522443309924392388181904724031875501666584729126079015543533939357613095691616333401092869089457667706194912028948e+2");
|
||||
yield return new("random-158", 9.914041924112557e+184, -3.7739624248215414e+168, "4.25969609239272599720853346734795087944158090702104001003997945516455100625022237959984158070128925273475888565962060132e+2");
|
||||
yield return new("random-159", 5.606906299629542e+119, 0.0, "2.75731625171973475703333381638795400404430830076063437217649779488585204180138994011567746828799588493334915846557110033e+2");
|
||||
yield return new("random-160", 1.5112081611468783e+31, -562949953421312.0, "7.17930473204472871745571958806843787176388269327075294302838333074798886974919032153956983087232633035935412937503873893e+1");
|
||||
yield return new("random-161", 4.354399853295316e+16, -2.0, "3.83125482823514472270526733200066300402613207287377548118632597269282248179068925250593908132497062066993237868678727297e+1");
|
||||
yield return new("random-162", 5.479035260384893e+104, 1.5914343565113173e+88, "2.41169778709467497728388170273152086105463476112627962148046822181949759064575911409360211800073516991299346250565418151e+2");
|
||||
yield return new("random-163", 5.422643258176727e+283, -2.0636505122486924e+267, "6.53322164699896776443819821682633922846921624095374683428135926495052350952814692257584819308179648440973174557661274719e+2");
|
||||
yield return new("random-164", 2.4995884576671274e+116, 0.0, "2.68015996888699450884476324772334007904992785375271467775737851057191753907843897361473672688342628606192066385381867122e+2");
|
||||
yield return new("random-165", 5.432389516420413e-158, -2.0215873059760975e-174, "-3.62116065597637983167554114293819324259130826839434249947370344730009639121266782851148283693439909329604338274391636045e+2");
|
||||
yield return new("random-166", 2.1701706627254098e-215, 6.441148769597133e-232, "-4.94280989182842681659748029227029004798486056182150914921574436713501961095435809581743575881672365921867566279729384604e+2");
|
||||
yield return new("random-167", 1.83829988166e-312, 0.0, "-7.17797707847009041571714048895936178519876680080541117216692654161407519939181011573994170934574468359346094774207371714e+2");
|
||||
yield return new("random-168", 3.2222335501608463e-272, -1.6418147205193505e-288, "-6.25133070526169191842152906068129941304357930047910057227413954830318149274928868053773979409076693871529574204942239512e+2");
|
||||
yield return new("random-169", 1.76461646544354e-106, 6.05092486695206e-123, "-2.43506086490628643856870082982279265439862246588626114956597161213161143057729130704171105293940780035945062299937077083e+2");
|
||||
yield return new("random-170", 5.221690571495491e+198, 0.0, "4.57564669626554046951727117381512861863257951043552381376504777150415340673491687915069756531402262478693244164600599846e+2");
|
||||
yield return new("random-171", 1.9623379565597327e-196, -5.940911144672375e-213, "-4.50632541629473478684978638448756098199302459104345407598778344850786528987252331234712223677580071612157584739568742819e+2");
|
||||
yield return new("random-172", 6.073138765385226e+164, -2.557336412418861e+148, "3.79427830817239092835206565168751656809449991933636558214075651136278311590654785983725994093594755735303765504932627509e+2");
|
||||
yield return new("random-173", 537900565.9322406, -2.9802322387695312e-08, "2.01031842793571405621739125882948575101002590500703732683815899001695318624319036518621476994885167724662096574869735299e+1");
|
||||
yield return new("random-174", 5.428752530419509e+101, 0.0, "2.34252803763379976880250995933254613070296574508956082198710048726871808003613678586187939049343888993501480807946073386e+2");
|
||||
yield return new("random-175", 1.0212120167421836e-160, 0.0, "-3.68392624705455417821848803166832987331711933711241645217377778347959381289537302338065831510789767921123080111765427737e+2");
|
||||
yield return new("random-176", 4.831579909682862e+244, -1.516130949512411e+228, "5.63405936208178965570765969509370167215458089136296531280860830915157457650079361175274501605671082796874193783145313302e+2");
|
||||
yield return new("random-177", 2.828255467099936e-230, -1.1441778670468376e-246, "-5.28554911309775165113920255771189157455872777570906721305730592184870228666760525592696880038296658231563255452035186321e+2");
|
||||
yield return new("random-178", 4.844358976145033e+172, 1.7161994150326524e+156, "3.97622450925300126116020448521886552802234631641112800289895707076966966222873012578388755785639637291929201821806781282e+2");
|
||||
yield return new("random-179", 2.6563406292248262e+190, -9.893216058924181e+173, "4.38468117141214803522350042780739884325604825907556242674957036745723498707735407212886331329477773823736596720450004280e+2");
|
||||
yield return new("random-180", 2.0739167866821603e+284, -8.25460204899477e+267, "6.54663605397171646113224277491390909096577051996669939276571690842459222678633208700671964148681065860836216087443225910e+2");
|
||||
yield return new("random-181", 8.414842261845763e-155, -4.140210802639048e-171, "-3.54770692331488696402354115630846130949591672846636729580484810188719636482301048672372598963118595740296213441609437042e+2");
|
||||
yield return new("random-182", 2.5145133926699065e+93, 1.157920892373162e+77, "2.15062492951238088001754838808093059201117194573817803555642384823440088598790766665629613744074943621347215190016100580e+2");
|
||||
yield return new("random-183", 2.778618547781905e+26, -8589934592.0, "6.08891662967811517717256314365980453862697983479252851216745059614339620310206140257358355844582016544214540511648078099e+1");
|
||||
yield return new("random-184", 3.683461658530071e-59, 0.0, "-1.34548667508539992993885418640365582888632140756818369002134450098101460705971913896499380106183355186851956294299981974e+2");
|
||||
yield return new("random-185", 3.245859271164568e+53, 0.0, "1.23214390042297419237723804757536646965208007453303097193637511933164327619179703891375174930308701706029327015537815851e+2");
|
||||
yield return new("random-186", 4.888717960757026e-295, 0.0, "-6.77675672339845066497980244646774621837482154669290777658188864815629163780856010254389402932625433409620966950794508097e+2");
|
||||
yield return new("random-187", 1.2676670279863156e+149, -5.678427533559429e+132, "3.43322357081418112003091693357593824624572733398810589443050445899849010659171506395389239926315022287983498334095625265e+2");
|
||||
yield return new("random-188", 3.911029072247335e-147, 1.3892242184281734e-163, "-3.37116208140922731460220189076490802951772675127237314438114220553668114528584274672245085948840192153518337473334196063e+2");
|
||||
yield return new("random-189", 7.211109058770227e-239, -2.131197353912215e-255, "-5.48342214463811269022893517877667702695851865395631474861837372360566529847741018102276529742810255530709788324617518018e+2");
|
||||
yield return new("random-190", 2.6020950689735322e+100, 0.0, "2.31214826215711950526050976513396597870363927203506922159241143344765480790740718147876437537973112854188809768472027472e+2");
|
||||
yield return new("random-191", 1.5063590763830884e-268, 6.72487309524726e-285, "-6.16683109390913324416993622903702189427328139639903849685412969303220084247676611200138397543215791946052466397687599725e+2");
|
||||
yield return new("random-192", 6.4774111424101085e-201, -1.8130221999122236e-217, "-4.60951282776326571486754361807843918170687088700902724532535367206477009057223573998856182495732991219408647672664000502e+2");
|
||||
yield return new("random-193", 3.564855867574092e-135, -1.5274681817498023e-151, "-3.09577863931000206217135490127201269212982115085566784324219557596547076280530266284867753337648450605525177965490927169e+2");
|
||||
yield return new("random-194", 4.469742883936088e-05, 1.6940658945086007e-21, "-1.00155945783713507477655601997995721078164866377973465526464859641717304322097850695600439601144769010803852748494573754e+1");
|
||||
yield return new("random-195", 3.45447003858828, 1.1102230246251565e-16, "1.23966905575474530154892293991639532961666212457380805811961986484602483633724130236769753546390724770503620032658732405e+0");
|
||||
yield return new("random-196", 6.389551135945008e-221, -2.457103259886602e-237, "-5.07016641530527971332591352425537702993775366647079497636483058501162041214914238389087729590428124473459260440211711499e+2");
|
||||
yield return new("random-197", 8.925210625023812e+18, 256.0, "4.36354116007225065290620145705693976611700006816179589867954898815380745108306268724831612850108672437446106913251777714e+1");
|
||||
yield return new("random-198", 5.338056433890513e+270, 0.0, "6.23372836731422663127177695374721429236835974459921895413111368833428571774441193587466883714336922021173127848657810202e+2");
|
||||
yield return new("random-199", 1.3437730625250732e+60, -4.460149039706125e+43, "1.38450586955198654374544438547355666842289680966992428327921470951044415210347049444786637636632099103936838648618750909e+2");
|
||||
yield return new("random-200", 4.310308441274614e+62, 2.283596308329536e+46, "1.44221285231286739229138133706562425354001291485859165804004888105885891442917445593048122010426771144499018483486696571e+2");
|
||||
yield return new("random-201", 3.45701795554779e+292, 1.1079139325602226e+276, "6.73595253509155458346545811067114469913122116895248291942282487691085668540843159590107912488573785656396640606783103216e+2");
|
||||
yield return new("random-202", 1.8036263255543733e+47, 0.0, "1.08811298634294170598289858793428934882072307824018020038127088822945287440703782902488344760978913353119123965555592853e+2");
|
||||
yield return new("random-203", 1830.4994501675505, 0.0, "7.51234413218742445102522983019830638218954655693036874690284790961663091593347686159039563498385178850575297137783408280e+0");
|
||||
yield return new("random-204", 5.57506075236646e-31, -2.1895288505075267e-47, "-6.96618346682431451323630967686140705610128842213683384182532223711155194199500298975450824485522443400429503781681025354e+1");
|
||||
yield return new("random-205", 6.556663307880683e+239, 0.0, "5.52198319057039286871905253174136312663940185427443351907861173670104317989193414411036991136763307393554856830722067250e+2");
|
||||
yield return new("random-206", 5.069577386987781e+106, 0.0, "2.45697277315873949415080759501594649955055452162401628022144942505292871163631420478062694376023775920163507469347177753e+2");
|
||||
yield return new("random-207", 1.044537085529022e+94, 4.631683569492648e+77, "2.16486572548357283100234618238120881111548593751461699788859579234818997872783856583367851158841910417500032038081269976e+2");
|
||||
yield return new("random-208", 2.2305846672804287e+270, 1.1730495045007344e+254, "6.22500238842137464397991734042732855250327696969019206178470607991139989902965587963308363026008780425571931759271687190e+2");
|
||||
yield return new("random-209", 0.00018016585556213655, -6.776263578034403e-21, "-8.62163271153104447227129793988338362809973631267988176961274416922619747467941646855879698486991040583312805022993872765e+0");
|
||||
yield return new("random-210", 3.498124764484825e+240, 1.8507457879790174e+224, "5.53872649361908331322345920053132103290347143642396937721530859180851299008502220882574070554789578717289482360173296547e+2");
|
||||
yield return new("random-211", 4.368427953412102e+115, -2.187250724783012e+99, "2.66271688902640909609723417657932846886534824298816386977368395849482579426639906685083603077869454661285266369936294926e+2");
|
||||
yield return new("random-212", 2.4052332643208744e-89, 0.0, "-2.04052426386214092284965821604279949884342667954944306816068348358471165141980357909412884638945059797052587919774067436e+2");
|
||||
yield return new("random-213", 3.0195933465008714e+137, 1.0328999512347634e+121, "3.16559279909027911071002732279205076508652046075682211850341264702076329693228046854014007936379632539249549521712243704e+2");
|
||||
yield return new("random-214", 2.3140246548039862e-117, 8.805254571710335e-134, "-2.68563467596962869984683130207287862174906972407687485328936653550192111788943722592388299643467378705110165060568372167e+2");
|
||||
yield return new("random-215", 4.84842743374524e+205, 2.2277542078233375e+189, "4.73608598475686553163585207474076339278278875103219671467388764005443165371546250280644220697222193864688849699780578649e+2");
|
||||
yield return new("random-216", 2.552279557282328e+132, -7.880401239278896e+115, "3.04878219179086652140146591217999079377272473871661401737959928142928078348305427843032453275689564195418478279509537312e+2");
|
||||
yield return new("random-217", 8.421358143452693e+226, 0.0, "5.22515002131598631969607509406575270762752250086176134323194627915475880341158566655680583384832008855755831569221433324e+2");
|
||||
yield return new("random-218", 8.564040927814486e-95, 3.326531125006368e-111, "-2.16598011684664786843966823944070707112968211510328276245474842164693759228582252975790553913211034852203015713816554543e+2");
|
||||
yield return new("random-219", 2.32246524862013e-37, 0.0, "-8.43530192121049913934077767807739151081520738995319271971298243739927731197096123482443357228628762600133869438357726720e+1");
|
||||
yield return new("random-220", 1.2002655924723922e-144, 0.0, "-3.31389710531777517519025986502343390420101699223162578948050896122561521194475726750590074740400433600523070054865920370e+2");
|
||||
yield return new("random-221", 1.1501420539934765e+234, 4.41252181048159e+217, "5.38944797220564956758596427611301481152261833859370736118621284347474682503474190956162730633608209631510843772085315986e+2");
|
||||
yield return new("random-222", 1.263479078195173e+255, 5.209386275687386e+238, "5.87393067802579801739652842409142465659556372560939873998132835117430974286074294073596994917939610358945732152144695016e+2");
|
||||
yield return new("random-223", 3.7694214260134175e+264, -1.1187071843154282e+248, "6.09209386072209626392207361573106927438535961045581451787517274636713469706124050743318533302352467580818805807462434442e+2");
|
||||
yield return new("random-224", 1.589148e-317, 0.0, "-7.29456276567599906979759145536640727668852552717563873539768676887260723021279753876417429816085381694717030602619152942e+2");
|
||||
yield return new("random-225", 2945.255915612429, -1.1368683772161603e-13, "7.98795099065062830964670499624034039528862329869928266977980123847747370860117035341311433313377668602428956051223447704e+0");
|
||||
yield return new("random-226", 6.1149880519337656e-279, 0.0, "-6.40610498130096242553736039712734166690568396016211629705688693137484344106311176263084547665199679163749015710242552708e+2");
|
||||
yield return new("random-227", 1.1104388458705023e+281, 0.0, "6.47131166425158328584493101805494815827299336059900922081053090928948313238124956834868198490411050953044550163555604975e+2");
|
||||
yield return new("random-228", 1.007053842185e-312, 0.0, "-7.18399519933925694534894512644762662472010729552957626448833213971978445088068816040537213752831463902482017289596271222e+2");
|
||||
yield return new("random-229", 827292480252520.4, -0.03125, "3.43491794125783838894014038572234193052261495595460107766760747507686686956283658186741673898255395579797074535049735357e+1");
|
||||
yield return new("random-230", 7.135385626131448e-65, -2.1084395886461046e-81, "-1.47702964748034438275712600697614263427431360433755702768675433147504507210351060023531890562990207602934156575381881772e+2");
|
||||
yield return new("random-231", 5.121421223663858e-34, 0.0, "-7.66544611785182522574727660804715447746356514616523650109528072127590605917801029518714206854328974214053040044999717981e+1");
|
||||
yield return new("random-232", 6.793404329658736e-220, 1.9656826079092814e-236, "-5.04652768268736140007858571392571945261460963865172181897683855351829881863949050397625172734807704707357686658142450628e+2");
|
||||
yield return new("random-233", 2.796115816301423e+200, -8.498207885068274e+183, "4.61545249844462106133909291851423559512429618189586360466810825754281108028172094574864149912561346430703559516952059230e+2");
|
||||
yield return new("random-234", 1.0178673324195133e+27, -34359738368.0, "6.21875070986866449677783684907857931007053523072136862454811407677644620032122232036020659559994864376869299179756533993e+1");
|
||||
yield return new("random-235", 2.3462080874787234e+197, 0.0, "4.54462063764964809499874307904129207088064575062979318659471122295028378946799920219473798094118812600241161550941757856e+2");
|
||||
yield return new("random-236", 2.427877674294048e-111, -9.232978617785736e-128, "-2.54699927831673745564508742130746020787001604669593445438601470058329425467185202551541214771851025397448506936546976600e+2");
|
||||
yield return new("random-237", 2.873528070911688e-302, 1.295163e-318, "-6.94325157516391669562377864731414291167825388563071935037505582731527421258615953633013028215883596430073198831022331839e+2");
|
||||
yield return new("random-238", 4.809658830160027e+298, 2.323463919496536e+282, "6.87740983864547023659877763043081521156598892985787330254399734385598091458812000161076059179505421874849356796008361604e+2");
|
||||
yield return new("random-239", 1.5174226733893404e+99, -6.070840288205404e+82, "2.28372937492483372463805866109686985668581442901876362249881516227175387653051468721984487129200546339518728577547308406e+2");
|
||||
yield return new("random-240", 2.8767747485590988e-205, -1.1065809325636131e-221, "-4.70973274276137053511347547039400506634741641391840518911609650132064863758884649616645681364939249651368575972231601302e+2");
|
||||
yield return new("random-241", 6.385056881328112e-165, 0.0, "-3.78072579945985698128588628634522465084204080379676174222175746765407616638775806735073053417864141718494460434315905213e+2");
|
||||
yield return new("random-242", 3.9005770726372804e+224, 0.0, "5.17140185340198638866745098142924604517967107033905134072414680481554085656711266551625213968904821723624797093610133019e+2");
|
||||
yield return new("random-243", 5.1722291955410205e+246, 0.0, "5.68079236651146088036319981468013324509722642360698752269752715213959238918749551151441899347847805117316983816636693267e+2");
|
||||
yield return new("random-244", 4.298998303640836e+154, -1.488565707357403e+138, "3.56056486364003204726343244207252520429349325191165239282510856135655261004235396158011137467461235418577644504504222387e+2");
|
||||
yield return new("random-245", 1.5185626524476913e+61, 7.1362384635298e+44, "1.40875454936721437499893989231190374885140428403552041520960903402286814846194270280799756712919535860628116694335428996e+2");
|
||||
yield return new("random-246", 4.085668035448621e+205, 2.2277542078233375e+189, "4.73437429312490694386049271175826682620319641177076148062968896318631158922770042657373872246399506055522444780724306571e+2");
|
||||
yield return new("random-247", 1.5420238001729004e+283, 5.159126280621731e+266, "6.52064677026949729816884065216128821962993497714966831193777464364063760666838212466336507053566687990392938798492458245e+2");
|
||||
yield return new("random-248", 5.336849138332707e+81, 2.1062458333711437e+65, "1.88184027962341019077714848296459388586506121524745930973946037106363228987392423689255254324763195858209755573712080049e+2");
|
||||
yield return new("random-249", 8.386586153785071e-113, 0.0, "-2.58065481965314232250607363736420449457733212264668440460665977821328825375146429747227124069764815027098822707024455128e+2");
|
||||
yield return new("random-250", 7.634703466117984e+205, 0.0, "4.74062648162942342292299900654742322626807477869562056102457486778118050096860644731167418280509270009323360536859365672e+2");
|
||||
yield return new("random-251", 1.0697583884158305e-268, 0.0, "-6.17025372104647115331333897195733076935986800108352365744634990546595589726879852131903327733185704119630529589085846030e+2");
|
||||
yield return new("random-252", 4.2339435458230855e+160, 0.0, "3.69856748718138517414222465894015769642337381860073101240319370144380441097510985600450576066244093204177326829768439030e+2");
|
||||
yield return new("random-253", 8.675903970376017e-149, -4.341325682588042e-165, "-3.40924629331630824836495518776096664810339464207534713562093700342049471833142404236106179783832027136779706294358111827e+2");
|
||||
yield return new("random-254", 1.346822566042448e+124, 5.871356456934583e+107, "2.85818299694729351666140369388148758006538514538351205382694411108615803449309089883404949404055575161202490431678968923e+2");
|
||||
yield return new("random-255", 9.231105715754348e+192, 0.0, "4.44318916692052957298082700572980820587849802004826278451568102269006225410536617052586906226436322300366945249615707276e+2");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,549 @@
|
||||
// Generated by generate_real_pow.py; do not hand-edit reference literals.
|
||||
// Exact binary64 sums; Decimal ln/exp at 450/650 digits, rounded to 120 digits.
|
||||
// Reference uncertainty is explicitly allowed as 2^-350 relative in the tests.
|
||||
using Xunit;
|
||||
|
||||
namespace Just.PreciseMath.Tests.ReferenceData;
|
||||
|
||||
internal static class RealPowReferenceData
|
||||
{
|
||||
public static IEnumerable<TheoryDataRow<string, double, double, double, double, bool, string>> Cases()
|
||||
{
|
||||
yield return new("magnitude-fractional", 0.125, 0.0, 0.5, 0.0, false, "3.53553390593273762200422181052424519642417968844237018294169934497683119615526759712596883581910393183753461557728074256e-1");
|
||||
yield return new("magnitude-fractional", 0.125, 0.0, 0.5, 0.0, true, "3.53553390593273762200422181052424519642417968844237018294169934497683119615526759712596883581910393183753461557728074256e-1");
|
||||
yield return new("magnitude-fractional", 0.125, 0.0, -0.5, 0.0, false, "2.82842712474619009760337744841939615713934375075389614635335947598146495692421407770077506865528314547002769246182459405e+0");
|
||||
yield return new("magnitude-fractional", 0.125, 0.0, -0.5, 0.0, true, "2.82842712474619009760337744841939615713934375075389614635335947598146495692421407770077506865528314547002769246182459405e+0");
|
||||
yield return new("magnitude-fractional", 0.125, 0.0, 0.25, 0.0, false, "5.94603557501360533358749985280237957646486046231908706509501112359733334113458579935390672269068836858018697387384606593e-1");
|
||||
yield return new("magnitude-fractional", 0.125, 0.0, 0.25, 0.0, true, "5.94603557501360533358749985280237957646486046231908706509501112359733334113458579935390672269068836858018697387384606593e-1");
|
||||
yield return new("magnitude-fractional", 0.125, 0.0, -0.25, 0.0, false, "1.68179283050742908606225095246642979008006852471356902162645217194984950990780447962864800839858507234560314748703817016e+0");
|
||||
yield return new("magnitude-fractional", 0.125, 0.0, -0.25, 0.0, true, "1.68179283050742908606225095246642979008006852471356902162645217194984950990780447962864800839858507234560314748703817016e+0");
|
||||
yield return new("magnitude-fractional", 0.5, 0.0, 0.5, 0.0, false, "7.07106781186547524400844362104849039284835937688474036588339868995366239231053519425193767163820786367506923115456148512e-1");
|
||||
yield return new("magnitude-fractional", 0.5, 0.0, 0.5, 0.0, true, "7.07106781186547524400844362104849039284835937688474036588339868995366239231053519425193767163820786367506923115456148512e-1");
|
||||
yield return new("magnitude-fractional", 0.5, 0.0, -0.5, 0.0, false, "1.41421356237309504880168872420969807856967187537694807317667973799073247846210703885038753432764157273501384623091229702e+0");
|
||||
yield return new("magnitude-fractional", 0.5, 0.0, -0.5, 0.0, true, "1.41421356237309504880168872420969807856967187537694807317667973799073247846210703885038753432764157273501384623091229702e+0");
|
||||
yield return new("magnitude-fractional", 0.5, 0.0, 0.25, 0.0, false, "8.40896415253714543031125476233214895040034262356784510813226085974924754953902239814324004199292536172801573743519085080e-1");
|
||||
yield return new("magnitude-fractional", 0.5, 0.0, 0.25, 0.0, true, "8.40896415253714543031125476233214895040034262356784510813226085974924754953902239814324004199292536172801573743519085080e-1");
|
||||
yield return new("magnitude-fractional", 0.5, 0.0, -0.25, 0.0, false, "1.18920711500272106671749997056047591529297209246381741301900222471946666822691715987078134453813767371603739477476921319e+0");
|
||||
yield return new("magnitude-fractional", 0.5, 0.0, -0.25, 0.0, true, "1.18920711500272106671749997056047591529297209246381741301900222471946666822691715987078134453813767371603739477476921319e+0");
|
||||
yield return new("magnitude-fractional", 1.25, 0.0, 0.5, 0.0, false, "1.11803398874989484820458683436563811772030917980576286213544862270526046281890244970720720418939113748475408807538689175e+0");
|
||||
yield return new("magnitude-fractional", 1.25, 0.0, 0.5, 0.0, true, "1.11803398874989484820458683436563811772030917980576286213544862270526046281890244970720720418939113748475408807538689175e+0");
|
||||
yield return new("magnitude-fractional", 1.25, 0.0, -0.5, 0.0, false, "8.94427190999915878563669467492510494176247343844610289708358898164208370255121959765765763351512909987803270460309513402e-1");
|
||||
yield return new("magnitude-fractional", 1.25, 0.0, -0.5, 0.0, true, "8.94427190999915878563669467492510494176247343844610289708358898164208370255121959765765763351512909987803270460309513402e-1");
|
||||
yield return new("magnitude-fractional", 1.25, 0.0, 0.25, 0.0, false, "1.05737126344056411953503700002860572698107896024530290921158855421519582984251108918118589235711605941630489816077042444e+0");
|
||||
yield return new("magnitude-fractional", 1.25, 0.0, 0.25, 0.0, true, "1.05737126344056411953503700002860572698107896024530290921158855421519582984251108918118589235711605941630489816077042444e+0");
|
||||
yield return new("magnitude-fractional", 1.25, 0.0, -0.25, 0.0, false, "9.45741609003175813301696119887215020570196802611740261411907342262690255532065088709061922065099200150282880000281584472e-1");
|
||||
yield return new("magnitude-fractional", 1.25, 0.0, -0.25, 0.0, true, "9.45741609003175813301696119887215020570196802611740261411907342262690255532065088709061922065099200150282880000281584472e-1");
|
||||
yield return new("magnitude-fractional", 2.0, 0.0, 0.5, 0.0, false, "1.41421356237309504880168872420969807856967187537694807317667973799073247846210703885038753432764157273501384623091229702e+0");
|
||||
yield return new("magnitude-fractional", 2.0, 0.0, 0.5, 0.0, true, "1.41421356237309504880168872420969807856967187537694807317667973799073247846210703885038753432764157273501384623091229702e+0");
|
||||
yield return new("magnitude-fractional", 2.0, 0.0, -0.5, 0.0, false, "7.07106781186547524400844362104849039284835937688474036588339868995366239231053519425193767163820786367506923115456148512e-1");
|
||||
yield return new("magnitude-fractional", 2.0, 0.0, -0.5, 0.0, true, "7.07106781186547524400844362104849039284835937688474036588339868995366239231053519425193767163820786367506923115456148512e-1");
|
||||
yield return new("magnitude-fractional", 2.0, 0.0, 0.25, 0.0, false, "1.18920711500272106671749997056047591529297209246381741301900222471946666822691715987078134453813767371603739477476921319e+0");
|
||||
yield return new("magnitude-fractional", 2.0, 0.0, 0.25, 0.0, true, "1.18920711500272106671749997056047591529297209246381741301900222471946666822691715987078134453813767371603739477476921319e+0");
|
||||
yield return new("magnitude-fractional", 2.0, 0.0, -0.25, 0.0, false, "8.40896415253714543031125476233214895040034262356784510813226085974924754953902239814324004199292536172801573743519085080e-1");
|
||||
yield return new("magnitude-fractional", 2.0, 0.0, -0.25, 0.0, true, "8.40896415253714543031125476233214895040034262356784510813226085974924754953902239814324004199292536172801573743519085080e-1");
|
||||
yield return new("magnitude-fractional", 10.0, 0.0, 0.5, 0.0, false, "3.16227766016837933199889354443271853371955513932521682685750485279259443863923822134424810837930029518734728415284005515e+0");
|
||||
yield return new("magnitude-fractional", 10.0, 0.0, 0.5, 0.0, true, "3.16227766016837933199889354443271853371955513932521682685750485279259443863923822134424810837930029518734728415284005515e+0");
|
||||
yield return new("magnitude-fractional", 10.0, 0.0, -0.5, 0.0, false, "3.16227766016837933199889354443271853371955513932521682685750485279259443863923822134424810837930029518734728415284005515e-1");
|
||||
yield return new("magnitude-fractional", 10.0, 0.0, -0.5, 0.0, true, "3.16227766016837933199889354443271853371955513932521682685750485279259443863923822134424810837930029518734728415284005515e-1");
|
||||
yield return new("magnitude-fractional", 10.0, 0.0, 0.25, 0.0, false, "1.77827941003892280122542119519268484473579052640225535801183072277630188153949380490030039927870215508827904815953580779e+0");
|
||||
yield return new("magnitude-fractional", 10.0, 0.0, 0.25, 0.0, true, "1.77827941003892280122542119519268484473579052640225535801183072277630188153949380490030039927870215508827904815953580779e+0");
|
||||
yield return new("magnitude-fractional", 10.0, 0.0, -0.25, 0.0, false, "5.62341325190349080394951039776481231468251043098691664081689423735883568643062848905857984526220305928676107320100325218e-1");
|
||||
yield return new("magnitude-fractional", 10.0, 0.0, -0.25, 0.0, true, "5.62341325190349080394951039776481231468251043098691664081689423735883568643062848905857984526220305928676107320100325218e-1");
|
||||
yield return new("magnitude-fractional", 1e-308, 0.0, 0.5, 0.0, false, "9.99999999999999954663312668624229970027635275551902709065412883955749582023799148147816180828307038836518462277055056772e-155");
|
||||
yield return new("magnitude-fractional", 1e-308, 0.0, 0.5, 0.0, true, "9.99999999999999954663312668624229970027635275551902709065412883955749582023799148147816180828307038836518462277055056772e-155");
|
||||
yield return new("magnitude-fractional", 1e-308, 0.0, -0.5, 0.0, false, "1.00000000000000004533668733137577208538758290737643075222806930839565339309075717997298002237288492583083654145298106779e+154");
|
||||
yield return new("magnitude-fractional", 1e-308, 0.0, -0.5, 0.0, true, "1.00000000000000004533668733137577208538758290737643075222806930839565339309075717997298002237288492583083654145298106779e+154");
|
||||
yield return new("magnitude-fractional", 1e-308, 0.0, 0.25, 0.0, false, "9.99999999999999977331656334312114728086915364909915495978338849867251827386069354804974783593763012673903308351645866322e-78");
|
||||
yield return new("magnitude-fractional", 1e-308, 0.0, 0.25, 0.0, true, "9.99999999999999977331656334312114728086915364909915495978338849867251827386069354804974783593763012673903308351645866322e-78");
|
||||
yield return new("magnitude-fractional", 1e-308, 0.0, -0.25, 0.0, false, "1.00000000000000002266834366568788578576688918082216786934503169822053290495945819636764875306200829619210785845479431326e+77");
|
||||
yield return new("magnitude-fractional", 1e-308, 0.0, -0.25, 0.0, true, "1.00000000000000002266834366568788578576688918082216786934503169822053290495945819636764875306200829619210785845479431326e+77");
|
||||
yield return new("magnitude-fractional", 1e+308, 0.0, 0.5, 0.0, false, "1.00000000000000000548953181472022769363498177597378109589161168665811318694753029295146913909263900447853234927525250827e+154");
|
||||
yield return new("magnitude-fractional", 1e+308, 0.0, 0.5, 0.0, true, "1.00000000000000000548953181472022769363498177597378109589161168665811318694753029295146913909263900447853234927525250827e+154");
|
||||
yield return new("magnitude-fractional", 1e+308, 0.0, -0.5, 0.0, false, "9.99999999999999994510468185279772336499977768851775010266452612430354557456678261561807633749207598232489385362887447809e-155");
|
||||
yield return new("magnitude-fractional", 1e+308, 0.0, -0.5, 0.0, true, "9.99999999999999994510468185279772336499977768851775010266452612430354557456678261561807633749207598232489385362887447809e-155");
|
||||
yield return new("magnitude-fractional", 1e+308, 0.0, 0.25, 0.0, false, "1.00000000000000000274476590736011384305062094488369602433687160865381803822283746860825719590929513268274096591178940102e+77");
|
||||
yield return new("magnitude-fractional", 1e+308, 0.0, 0.25, 0.0, true, "1.00000000000000000274476590736011384305062094488369602433687160865381803822283746860825719590929513268274096591178940102e+77");
|
||||
yield return new("magnitude-fractional", 1e+308, 0.0, -0.25, 0.0, false, "9.99999999999999997255234092639886164483118941322693002202644466118298883688905501765798127653785006601604392452173303686e-78");
|
||||
yield return new("magnitude-fractional", 1e+308, 0.0, -0.25, 0.0, true, "9.99999999999999997255234092639886164483118941322693002202644466118298883688905501765798127653785006601604392452173303686e-78");
|
||||
yield return new("magnitude-fractional", 1.7976931348623157e+308, 0.0, 0.5, 0.0, false, "1.34078079299425963552911713195043695469727618480058862029334370399776985359080234696399164558501564730514350304768526522e+154");
|
||||
yield return new("magnitude-fractional", 1.7976931348623157e+308, 0.0, 0.5, 0.0, true, "1.34078079299425963552911713195043695469727618480058862029334370399776985359080234696399164558501564730514350304768526522e+154");
|
||||
yield return new("magnitude-fractional", 1.7976931348623157e+308, 0.0, -0.5, 0.0, false, "7.45834073120020715731204557936772675053006294617560933561115186060543731364676921261899191715983532292812186170049979655e-155");
|
||||
yield return new("magnitude-fractional", 1.7976931348623157e+308, 0.0, -0.5, 0.0, true, "7.45834073120020715731204557936772675053006294617560933561115186060543731364676921261899191715983532292812186170049979655e-155");
|
||||
yield return new("magnitude-fractional", 1.7976931348623157e+308, 0.0, 0.25, 0.0, false, "1.15792089237316192209694896490707222964874608799567844200466962889572704321535999944925308227539057659339055339681605199e+77");
|
||||
yield return new("magnitude-fractional", 1.7976931348623157e+308, 0.0, 0.25, 0.0, true, "1.15792089237316192209694896490707222964874608799567844200466962889572704321535999944925308227539057659339055339681605199e+77");
|
||||
yield return new("magnitude-fractional", 1.7976931348623157e+308, 0.0, -0.25, 0.0, false, "8.63616855509444486508818122304097055415111538584065636011289536797300988764707973121273069940936828291643022408397584041e-78");
|
||||
yield return new("magnitude-fractional", 1.7976931348623157e+308, 0.0, -0.25, 0.0, true, "8.63616855509444486508818122304097055415111538584065636011289536797300988764707973121273069940936828291643022408397584041e-78");
|
||||
yield return new("magnitude-fractional", 2.2250738585072014e-308, 0.0, 0.5, 0.0, false, "1.49166814624004134865819306309258676747529430692008137885430366664125567701402366098723497808008556067230232065116722029e-154");
|
||||
yield return new("magnitude-fractional", 2.2250738585072014e-308, 0.0, 0.5, 0.0, true, "1.49166814624004134865819306309258676747529430692008137885430366664125567701402366098723497808008556067230232065116722029e-154");
|
||||
yield return new("magnitude-fractional", 2.2250738585072014e-308, 0.0, -0.5, 0.0, false, "6.70390396497129854978701249910292306373968291029619668886178072186088201503677348840093714908345171384501592909324302543e+153");
|
||||
yield return new("magnitude-fractional", 2.2250738585072014e-308, 0.0, -0.5, 0.0, true, "6.70390396497129854978701249910292306373968291029619668886178072186088201503677348840093714908345171384501592909324302543e+153");
|
||||
yield return new("magnitude-fractional", 2.2250738585072014e-308, 0.0, 0.25, 0.0, false, "1.22133866975546195086019597071117283027094025981639387493045310083030448293378253341035004249805099426031227511728968499e-77");
|
||||
yield return new("magnitude-fractional", 2.2250738585072014e-308, 0.0, 0.25, 0.0, true, "1.22133866975546195086019597071117283027094025981639387493045310083030448293378253341035004249805099426031227511728968499e-77");
|
||||
yield return new("magnitude-fractional", 2.2250738585072014e-308, 0.0, -0.25, 0.0, false, "8.18773715074641276175512015429796283075074324712432370618218536007567547824852929155240369448016154013101539920067009834e+76");
|
||||
yield return new("magnitude-fractional", 2.2250738585072014e-308, 0.0, -0.25, 0.0, true, "8.18773715074641276175512015429796283075074324712432370618218536007567547824852929155240369448016154013101539920067009834e+76");
|
||||
yield return new("magnitude-fractional", 5e-324, 0.0, 0.5, 0.0, false, "2.22275874948507748344271341427056009691252456146490779348359058296867560895386883763556924176228875021979558564896467371e-162");
|
||||
yield return new("magnitude-fractional", 5e-324, 0.0, 0.5, 0.0, true, "2.22275874948507748344271341427056009691252456146490779348359058296867560895386883763556924176228875021979558564896467371e-162");
|
||||
yield return new("magnitude-fractional", 5e-324, 0.0, -0.5, 0.0, false, "4.49891379454319638281053850768598185886969711830191663310075557261183758067148787031904068610389085714992091063352089512e+161");
|
||||
yield return new("magnitude-fractional", 5e-324, 0.0, -0.5, 0.0, true, "4.49891379454319638281053850768598185886969711830191663310075557261183758067148787031904068610389085714992091063352089512e+161");
|
||||
yield return new("magnitude-fractional", 5e-324, 0.0, 0.25, 0.0, false, "1.49089193085383538923363765955953714632683137184618392935846325784949277701877750660443120422125365510292025771153525999e-81");
|
||||
yield return new("magnitude-fractional", 5e-324, 0.0, 0.25, 0.0, true, "1.49089193085383538923363765955953714632683137184618392935846325784949277701877750660443120422125365510292025771153525999e-81");
|
||||
yield return new("magnitude-fractional", 5e-324, 0.0, -0.25, 0.0, false, "6.70739427389146133442979443040089115095100886804424598010444624697399335178119519563972910651814833367532781502518894456e+80");
|
||||
yield return new("magnitude-fractional", 5e-324, 0.0, -0.25, 0.0, true, "6.70739427389146133442979443040089115095100886804424598010444624697399335178119519563972910651814833367532781502518894456e+80");
|
||||
yield return new("magnitude-fractional", 1.5e-323, 0.0, 0.5, 0.0, false, "3.84993108707641627122600290059926404237255350129666737160618209899559937423494685274791184799681874644435873403370543290e-162");
|
||||
yield return new("magnitude-fractional", 1.5e-323, 0.0, 0.5, 0.0, true, "3.84993108707641627122600290059926404237255350129666737160618209899559937423494685274791184799681874644435873403370543290e-162");
|
||||
yield return new("magnitude-fractional", 1.5e-323, 0.0, -0.5, 0.0, false, "2.59744909034043513148650050061494744261411269765007057832800750597691385503419414418131222592693689839234334326690354298e+161");
|
||||
yield return new("magnitude-fractional", 1.5e-323, 0.0, -0.5, 0.0, true, "2.59744909034043513148650050061494744261411269765007057832800750597691385503419414418131222592693689839234334326690354298e+161");
|
||||
yield return new("magnitude-fractional", 1.5e-323, 0.0, 0.25, 0.0, false, "1.96212412631729705033078154058910173357105507332164681146669468771984961762045773719486689548007756898757149986001752693e-81");
|
||||
yield return new("magnitude-fractional", 1.5e-323, 0.0, 0.25, 0.0, true, "1.96212412631729705033078154058910173357105507332164681146669468771984961762045773719486689548007756898757149986001752693e-81");
|
||||
yield return new("magnitude-fractional", 1.5e-323, 0.0, -0.25, 0.0, false, "5.09651752703788425957703665020926495608911454305921480449451222216463991937051260397794976885539652420438032469828508406e+80");
|
||||
yield return new("magnitude-fractional", 1.5e-323, 0.0, -0.25, 0.0, true, "5.09651752703788425957703665020926495608911454305921480449451222216463991937051260397794976885539652420438032469828508406e+80");
|
||||
yield return new("magnitude-fractional", 2.225073858507201e-308, 0.0, 0.5, 0.0, false, "1.49166814624004118304976095753067419877121763396070718594905338060863227802018538057320728267769388445010579065358732565e-154");
|
||||
yield return new("magnitude-fractional", 2.225073858507201e-308, 0.0, 0.5, 0.0, true, "1.49166814624004118304976095753067419877121763396070718594905338060863227802018538057320728267769388445010579065358732565e-154");
|
||||
yield return new("magnitude-fractional", 2.225073858507201e-308, 0.0, -0.5, 0.0, false, "6.70390396497129929406986617780450293424141035924807833727069092981666797634550332571529529044512005078252133277794006579e+153");
|
||||
yield return new("magnitude-fractional", 2.225073858507201e-308, 0.0, -0.5, 0.0, true, "6.70390396497129929406986617780450293424141035924807833727069092981666797634550332571529529044512005078252133277794006579e+153");
|
||||
yield return new("magnitude-fractional", 2.225073858507201e-308, 0.0, 0.25, 0.0, false, "1.22133866975546188306228036933245893141686363606809552923034822452809083249276724715142720468056663605153578269552119074e-77");
|
||||
yield return new("magnitude-fractional", 2.225073858507201e-308, 0.0, 0.25, 0.0, true, "1.22133866975546188306228036933245893141686363606809552923034822452809083249276724715142720468056663605153578269552119074e-77");
|
||||
yield return new("magnitude-fractional", 2.225073858507201e-308, 0.0, -0.25, 0.0, false, "8.18773715074641321626583537117020913511494541443896563298960534639533131600118144026836217696910989194252502981227226227e+76");
|
||||
yield return new("magnitude-fractional", 2.225073858507201e-308, 0.0, -0.25, 0.0, true, "8.18773715074641321626583537117020913511494541443896563298960534639533131600118144026836217696910989194252502981227226227e+76");
|
||||
yield return new("both-residuals", 0.75, -2.7755575615628914e-17, -0.75, 2.7755575615628914e-17, false, "1.24080647880279948978668774020400383162168148518365984401870568185107870123012977680643497818948881870193258426644152432e+0");
|
||||
yield return new("both-residuals", 0.75, -2.7755575615628914e-17, -0.75, 2.7755575615628914e-17, true, "1.24080647880279949969425637608433508897779877922049071098745386487756831224426132630750851632781285014883560422980096941e+0");
|
||||
yield return new("both-residuals", 0.75, 2.7755575615628914e-17, -0.75, -2.7755575615628914e-17, false, "1.24080647880279944072322891841795294621657944505257632925987715679870446507332555334358875090442720455152660591099716709e+0");
|
||||
yield return new("both-residuals", 0.75, 2.7755575615628914e-17, -0.75, -2.7755575615628914e-17, true, "1.24080647880279943081566028253762470875134169085093098367471430643224726044961852143741493498121612968652975190136962981e+0");
|
||||
yield return new("both-residuals", 1.25, -5.551115123125783e-17, -0.75, 2.7755575615628914e-17, false, "8.45897010752451329041104016431329934391244376780383201047873499378226758793865599559592532178082507092501188118981361501e-1");
|
||||
yield return new("both-residuals", 1.25, -5.551115123125783e-17, -0.75, 2.7755575615628914e-17, true, "8.45897010752451323802059733991836925612746817442845701171528329987464924867233613100256215569624644095391184093269866766e-1");
|
||||
yield return new("both-residuals", 1.25, 5.551115123125783e-17, -0.75, -2.7755575615628914e-17, false, "8.45897010752451262214955183614439714481697820961555234471137451915065156064483846559557956068119379575900456227011078709e-1");
|
||||
yield return new("both-residuals", 1.25, 5.551115123125783e-17, -0.75, -2.7755575615628914e-17, true, "8.45897010752451267453999466053934427118966104021576000911655669569241552727459932283035609497567327677230890267980037294e-1");
|
||||
yield return new("both-residuals", 2.0, -1.1102230246251565e-16, -0.75, 2.7755575615628914e-17, false, "5.94603557501360569553494844472350895673818381655018436959097223903591890842691984780924646465218884298677152802935745749e-1");
|
||||
yield return new("both-residuals", 2.0, -1.1102230246251565e-16, -0.75, 2.7755575615628914e-17, true, "5.94603557501360558114095987606689599729726502404602592740428723806105955332455415316936987279118043435420754854234910602e-1");
|
||||
yield return new("both-residuals", 2.0, 1.1102230246251565e-16, -0.75, -2.7755575615628914e-17, false, "5.94603557501360497164005126088126764802002984882440581606991833555884775167054806250941848111774053025833144709481521296e-1");
|
||||
yield return new("both-residuals", 2.0, 1.1102230246251565e-16, -0.75, -2.7755575615628914e-17, true, "5.94603557501360508603403982953788720409318095259779104909319784997617973766115568981771202731966347979584363611092695196e-1");
|
||||
yield return new("both-residuals", 10.0, -4.440892098500626e-16, -0.75, 2.7755575615628914e-17, false, "1.77827941003892297410310427470628995275711501893425056078136287204346668846817708415496935100410216697661083918512721965e-1");
|
||||
yield return new("both-residuals", 10.0, -4.440892098500626e-16, -0.75, 2.7755575615628914e-17, true, "1.77827941003892286045402355245424216519575464183008135491311275464472978676352606622708670621049470515817679129638179195e-1");
|
||||
yield return new("both-residuals", 10.0, 4.440892098500626e-16, -0.75, -2.7755575615628914e-17, false, "1.77827941003892262834773811567909478971830439247408606512494179191830821857064396276771203000124615157815510278308245572e-1");
|
||||
yield return new("both-residuals", 10.0, 4.440892098500626e-16, -0.75, -2.7755575615628914e-17, true, "1.77827941003892274199681883793113212726289014894643747354207792840165566405891845924845779507478209165910797439711762861e-1");
|
||||
yield return new("both-residuals", 1e-300, -4.144523e-317, -0.75, 2.7755575615628914e-17, false, "9.99999999999980839417205838144269488105509547852784480192283863686935450383280503756155341381028121651153201760891272353e+224");
|
||||
yield return new("both-residuals", 1e-300, -4.144523e-317, -0.75, 2.7755575615628914e-17, true, "1.00000000000000001228960384281128659032403418937310393409928914018123888620755828115158599201947137601964079457117007969e+225");
|
||||
yield return new("both-residuals", 1e-300, 4.144523e-317, -0.75, -2.7755575615628914e-17, false, "1.00000000000001912299415640940899886118572174993747649453987686580125827152253261907049286723596315283386965787648595945e+225");
|
||||
yield return new("both-residuals", 1e-300, 4.144523e-317, -0.75, -2.7755575615628914e-17, true, "9.99999999999999950121758404375576959817317431245218586726623236700527362287366517958202668314968561369366154523006198871e+224");
|
||||
yield return new("both-residuals", 1e+300, -3.717542271194458e+283, -0.75, 2.7755575615628914e-17, false, "1.00000000000001916137539484758927744644236811032418033091860054727512787942749492711146921601563284106251010827851360096e-225");
|
||||
yield return new("both-residuals", 1e+300, -3.717542271194458e+283, -0.75, 2.7755575615628914e-17, true, "9.99999999999999988502996842555117395146582273826718192788513901439788033611568720051441567595436078868170796681674541210e-226");
|
||||
yield return new("both-residuals", 1e+300, 3.717542271194458e+283, -0.75, -2.7755575615628914e-17, false, "9.99999999999980759867464769972763724419588071118855818685345806742657193510510999192511833495682130381763912607769829706e-226");
|
||||
yield return new("both-residuals", 1e+300, 3.717542271194458e+283, -0.75, -2.7755575615628914e-17, true, "9.99999999999999932739862774638257663921712894099748348570472749928684395205463888208157089471726205544045310445938415164e-226");
|
||||
yield return new("near-one-amplification", 1.0, 5.551115123125783e-17, 1e+16, 0.0, false, "1.74213524347257945295652618738001317452235171833385950535253647114973638316855322270084410811627441575590109667888081038e+0");
|
||||
yield return new("near-one-amplification", 1.0, 5.551115123125783e-17, 1e+16, 0.0, true, "1.74213524347257945295652618738001317452235171833385950535253647114973638316855322270084410811627441575590109667888081038e+0");
|
||||
yield return new("near-one-amplification", 1.0, 5.551115123125783e-17, 1e+16, 0.5, false, "1.74213524347257950131049267023527908100274668323916439419942660066782609265073171767742177992391778124042932245161915266e+0");
|
||||
yield return new("near-one-amplification", 1.0, 5.551115123125783e-17, 1e+16, 0.5, true, "1.74213524347257945295652618738001317452235171833385950535253647114973638316855322270084410811627441575590109667888081038e+0");
|
||||
yield return new("near-one-amplification", 1.0, 5.551115123125783e-17, -1e+16, 0.0, false, "5.74008248640163406570323260796400350898921633013627559445094021757127884114205175777865596982713311546482256153750779035e-1");
|
||||
yield return new("near-one-amplification", 1.0, 5.551115123125783e-17, -1e+16, 0.0, true, "5.74008248640163406570323260796400350898921633013627559445094021757127884114205175777865596982713311546482256153750779035e-1");
|
||||
yield return new("near-one-amplification", 1.0, 5.551115123125783e-17, -1e+16, 0.5, false, "5.74008248640163422502252609923178029577939042099710941358427739424719881250130737422712937361785460859357868493310735417e-1");
|
||||
yield return new("near-one-amplification", 1.0, 5.551115123125783e-17, -1e+16, 0.5, true, "5.74008248640163406570323260796400350898921633013627559445094021757127884114205175777865596982713311546482256153750779035e-1");
|
||||
yield return new("near-one-amplification", 1.0, -5.551115123125783e-17, 1e+16, 0.0, false, "5.74008248640163388882328470694567669982856575341004155963943813573817958014645596410482443338608889885813316753416261644e-1");
|
||||
yield return new("near-one-amplification", 1.0, -5.551115123125783e-17, 1e+16, 0.0, true, "5.74008248640163388882328470694567669982856575341004155963943813573817958014645596410482443338608889885813316753416261644e-1");
|
||||
yield return new("near-one-amplification", 1.0, -5.551115123125783e-17, 1e+16, 0.5, false, "5.74008248640163372950399121567790040044446299230793175147572231166653022485794686900599598146834659484055981486222307747e-1");
|
||||
yield return new("near-one-amplification", 1.0, -5.551115123125783e-17, 1e+16, 0.5, true, "5.74008248640163388882328470694567669982856575341004155963943813573817958014645596410482443338608889885813316753416261644e-1");
|
||||
yield return new("near-one-amplification", 1.0, -5.551115123125783e-17, -1e+16, 0.0, false, "1.74213524347257950664021310859903061786013301510296174575435387647993089582331445728303604236023896079653061468039839909e+0");
|
||||
yield return new("near-one-amplification", 1.0, -5.551115123125783e-17, -1e+16, 0.0, true, "1.74213524347257950664021310859903061786013301510296174575435387647993089582331445728303604236023896079653061468039839909e+0");
|
||||
yield return new("near-one-amplification", 1.0, -5.551115123125783e-17, -1e+16, 0.5, false, "1.74213524347257945828624662574376187926593335207883814581634203954203794788539972988279988717050692444535562543545488940e+0");
|
||||
yield return new("near-one-amplification", 1.0, -5.551115123125783e-17, -1e+16, 0.5, true, "1.74213524347257950664021310859903061786013301510296174575435387647993089582331445728303604236023896079653061468039839909e+0");
|
||||
yield return new("near-one-amplification", 1.0, 1e-300, 1e+300, 0.0, false, "2.71828182845904544620069715400795101672623231113287596107365824291457238222591209029780146832845677951309210491758547737e+0");
|
||||
yield return new("near-one-amplification", 1.0, 1e-300, 1e+300, 0.0, true, "2.71828182845904544620069715400795101672623231113287596107365824291457238222591209029780146832845677951309210491758547737e+0");
|
||||
yield return new("near-one-amplification", 1.0, 1e-300, 1e+300, 3.717542271194458e+283, false, "2.71828182845904554725397317717058496713671499260027656965144902140448310225064378080405816835132500569174418989369947426e+0");
|
||||
yield return new("near-one-amplification", 1.0, 1e-300, 1e+300, 3.717542271194458e+283, true, "2.71828182845904544620069715400795101672623231113287596107365824291457238222591209029780146832845677951309210491758547737e+0");
|
||||
yield return new("near-one-amplification", 1.0, 1e-300, -1e+300, 0.0, false, "3.67879441171442293061377208035852522456072501350014739835749179832638210744771329286321057933884000942080489146981881724e-1");
|
||||
yield return new("near-one-amplification", 1.0, 1e-300, -1e+300, 0.0, true, "3.67879441171442293061377208035852522456072501350014739835749179832638210744771329286321057933884000942080489146981881724e-1");
|
||||
yield return new("near-one-amplification", 1.0, 1e-300, -1e+300, 3.717542271194458e+283, false, "3.67879441171442306737450940618167686170229677690677741473462470630450457964188704817492842431616039442478016380865743440e-1");
|
||||
yield return new("near-one-amplification", 1.0, 1e-300, -1e+300, 3.717542271194458e+283, true, "3.67879441171442293061377208035852522456072501350014739835749179832638210744771329286321057933884000942080489146981881724e-1");
|
||||
yield return new("near-one-amplification", 1.0, -1e-300, 1e+300, 0.0, false, "3.67879441171442293061377208035852522456072501350014739835749179832638210744771329286321057933884000942080489146981881724e-1");
|
||||
yield return new("near-one-amplification", 1.0, -1e-300, 1e+300, 0.0, true, "3.67879441171442293061377208035852522456072501350014739835749179832638210744771329286321057933884000942080489146981881724e-1");
|
||||
yield return new("near-one-amplification", 1.0, -1e-300, 1e+300, 3.717542271194458e+283, false, "3.67879441171442279385303475453537867155737373478593659163546119087478365634236976677131937821785042990220141215143313719e-1");
|
||||
yield return new("near-one-amplification", 1.0, -1e-300, 1e+300, 3.717542271194458e+283, true, "3.67879441171442293061377208035852522456072501350014739835749179832638210744771329286321057933884000942080489146981881724e-1");
|
||||
yield return new("near-one-amplification", 1.0, -1e-300, -1e+300, 0.0, false, "2.71828182845904544620069715400795101672623231113287596107365824291457238222591209029780146832845677951309210491758547737e+0");
|
||||
yield return new("near-one-amplification", 1.0, -1e-300, -1e+300, 0.0, true, "2.71828182845904544620069715400795101672623231113287596107365824291457238222591209029780146832845677951309210491758547737e+0");
|
||||
yield return new("near-one-amplification", 1.0, -1e-300, -1e+300, 3.717542271194458e+283, false, "2.71828182845904534514742113084532082301400221755000071851653989022321014376146789040394869813578663425336994298513303853e+0");
|
||||
yield return new("near-one-amplification", 1.0, -1e-300, -1e+300, 3.717542271194458e+283, true, "2.71828182845904544620069715400795101672623231113287596107365824291457238222591209029780146832845677951309210491758547737e+0");
|
||||
yield return new("near-one-amplification", 1.0, 1e-308, 1e+300, 0.0, false, "1.00000001000000004999999978498051919100064916155881301934721890259653045226376562409391341474351312337410920605053466657e+0");
|
||||
yield return new("near-one-amplification", 1.0, 1e-308, 1e+300, 0.0, true, "1.00000001000000004999999978498051919100064916155881301934721890259653045226376562409391341474351312337410920605053466657e+0");
|
||||
yield return new("near-one-amplification", 1.0, 1e-308, 1e+300, 3.717542271194458e+283, false, "1.00000001000000005000000015673475002798867093503278454523013197787992752278936909075425824775155904527965636642808116539e+0");
|
||||
yield return new("near-one-amplification", 1.0, 1e-308, 1e+300, 3.717542271194458e+283, true, "1.00000001000000004999999978498051919100064916155881301934721890259653045226376562409391341474351312337410920605053466657e+0");
|
||||
yield return new("near-one-amplification", 1.0, 1e-308, -1e+300, 0.0, false, "9.99999990000000050000000215019474008609802662350038225593602994907248327116527203321468186530978828157627402416645402812e-1");
|
||||
yield return new("near-one-amplification", 1.0, 1e-308, -1e+300, 0.0, true, "9.99999990000000050000000215019474008609802662350038225593602994907248327116527203321468186530978828157627402416645402812e-1");
|
||||
yield return new("near-one-amplification", 1.0, 1e-308, -1e+300, 3.717542271194458e+283, false, "9.99999990000000050000000586773697410513282046909529794168284045856005481300674221463748884069533913431588194868839652610e-1");
|
||||
yield return new("near-one-amplification", 1.0, 1e-308, -1e+300, 3.717542271194458e+283, true, "9.99999990000000050000000215019474008609802662350038225593602994907248327116527203321468186530978828157627402416645402812e-1");
|
||||
yield return new("near-one-amplification", 1.0, 1e-308, 1.7976931348623157e+308, 0.0, false, "6.03570782819421774321978108606210701191506480312552217045440768852206169109170653223756106833452252949295678770124571132e+0");
|
||||
yield return new("near-one-amplification", 1.0, 1e-308, 1.7976931348623157e+308, 0.0, true, "6.03570782819421774321978108606210701191506480312552217045440768852206169109170653223756106833452252949295678770124571132e+0");
|
||||
yield return new("near-one-amplification", 1.0, 1e-308, 1.7976931348623157e+308, 4.9896007738368e+291, false, "6.03570782819421804437750558816906236186088062896793398387877057589954162572508341705424466088931075983619431563137896885e+0");
|
||||
yield return new("near-one-amplification", 1.0, 1e-308, 1.7976931348623157e+308, 4.9896007738368e+291, true, "6.03570782819421774321978108606210701191506480312552217045440768852206169109170653223756106833452252949295678770124571132e+0");
|
||||
yield return new("near-one-amplification", 1.0, 1e-308, -1.7976931348623157e+308, 0.0, false, "1.65680650632020930543138261729286914389321647701049924490758817482825036966941625700288738930184991090497333281120414054e-1");
|
||||
yield return new("near-one-amplification", 1.0, 1e-308, -1.7976931348623157e+308, 0.0, true, "1.65680650632020930543138261729286914389321647701049924490758817482825036966941625700288738930184991090497333281120414054e-1");
|
||||
yield return new("near-one-amplification", 1.0, 1e-308, -1.7976931348623157e+308, 4.9896007738368e+291, false, "1.65680650632020938809941287762447011319230654300908319340984185597323869098107332618934175993425253969193360884955879518e-1");
|
||||
yield return new("near-one-amplification", 1.0, 1e-308, -1.7976931348623157e+308, 4.9896007738368e+291, true, "1.65680650632020930543138261729286914389321647701049924490758817482825036966941625700288738930184991090497333281120414054e-1");
|
||||
yield return new("near-one-amplification", 1.0, -1e-308, 1e+300, 0.0, false, "9.99999990000000050000000215019474008609802662350038225593602994907248327116527203321468186530978828157627402416645402812e-1");
|
||||
yield return new("near-one-amplification", 1.0, -1e-308, 1e+300, 0.0, true, "9.99999990000000050000000215019474008609802662350038225593602994907248327116527203321468186530978828157627402416645402812e-1");
|
||||
yield return new("near-one-amplification", 1.0, -1e-308, 1e+300, 3.717542271194458e+283, false, "9.99999990000000049999999843265250606706323277790684858222921108352133489858464419400518464119308933595865164297758445533e-1");
|
||||
yield return new("near-one-amplification", 1.0, -1e-308, 1e+300, 3.717542271194458e+283, true, "9.99999990000000050000000215019474008609802662350038225593602994907248327116527203321468186530978828157627402416645402812e-1");
|
||||
yield return new("near-one-amplification", 1.0, -1e-308, -1e+300, 0.0, false, "1.00000001000000004999999978498051919100064916155881301934721890259653045226376562409391341474351312337410920605053466657e+0");
|
||||
yield return new("near-one-amplification", 1.0, -1e-308, -1e+300, 0.0, true, "1.00000001000000004999999978498051919100064916155881301934721890259653045226376562409391341474351312337410920605053466657e+0");
|
||||
yield return new("near-one-amplification", 1.0, -1e-308, -1e+300, 3.717542271194458e+283, false, "1.00000001000000004999999941322628835401262738808497969467106901581439922741569491039323813920107035300862826036813309329e+0");
|
||||
yield return new("near-one-amplification", 1.0, -1e-308, -1e+300, 3.717542271194458e+283, true, "1.00000001000000004999999978498051919100064916155881301934721890259653045226376562409391341474351312337410920605053466657e+0");
|
||||
yield return new("near-one-amplification", 1.0, -1e-308, 1.7976931348623157e+308, 0.0, false, "1.65680650632020930543138261729286914389321647701049924490758817482825036966941625700288738930184991090497333281120414054e-1");
|
||||
yield return new("near-one-amplification", 1.0, -1e-308, 1.7976931348623157e+308, 0.0, true, "1.65680650632020930543138261729286914389321647701049924490758817482825036966941625700288738930184991090497333281120414054e-1");
|
||||
yield return new("near-one-amplification", 1.0, -1e-308, 1.7976931348623157e+308, 4.9896007738368e+291, false, "1.65680650632020922276335235696127229939880399615660067676306716726679979505082704550872161375994082548670757389834295347e-1");
|
||||
yield return new("near-one-amplification", 1.0, -1e-308, 1.7976931348623157e+308, 4.9896007738368e+291, true, "1.65680650632020930543138261729286914389321647701049924490758817482825036966941625700288738930184991090497333281120414054e-1");
|
||||
yield return new("near-one-amplification", 1.0, -1e-308, -1.7976931348623157e+308, 0.0, false, "6.03570782819421774321978108606210701191506480312552217045440768852206169109170653223756106833452252949295678770124571132e+0");
|
||||
yield return new("near-one-amplification", 1.0, -1e-308, -1.7976931348623157e+308, 0.0, true, "6.03570782819421774321978108606210701191506480312552217045440768852206169109170653223756106833452252949295678770124571132e+0");
|
||||
yield return new("near-one-amplification", 1.0, -1e-308, -1.7976931348623157e+308, 4.9896007738368e+291, false, "6.03570782819421744206205658395516668853740120370683899734250882914961697063268794974176859295828916093364528511463125238e+0");
|
||||
yield return new("near-one-amplification", 1.0, -1e-308, -1.7976931348623157e+308, 4.9896007738368e+291, true, "6.03570782819421774321978108606210701191506480312552217045440768852206169109170653223756106833452252949295678770124571132e+0");
|
||||
yield return new("near-one-amplification", 1.0, 5e-324, 1e+300, 0.0, false, "1.00000000000000000000000494065645841246570117368298599917989542693401592708216839341606522921040541816306231624717740136e+0");
|
||||
yield return new("near-one-amplification", 1.0, 5e-324, 1e+300, 0.0, true, "1.00000000000000000000000494065645841246570117368298599917989542693401592708216839341606522921040541816306231624717740136e+0");
|
||||
yield return new("near-one-amplification", 1.0, 5e-324, 1e+300, 3.717542271194458e+283, false, "1.00000000000000000000000494065645841246588484467530198160301554292541217737831249681059050627346205593885292829001580162e+0");
|
||||
yield return new("near-one-amplification", 1.0, 5e-324, 1e+300, 3.717542271194458e+283, true, "1.00000000000000000000000494065645841246570117368298599917989542693401592708216839341606522921040541816306231624717740136e+0");
|
||||
yield return new("near-one-amplification", 1.0, 5e-324, -1e+300, 0.0, false, "9.99999999999999999999995059343541587534298826341424087060157381490568590319469215678028938163310516218517395330044650998e-1");
|
||||
yield return new("near-one-amplification", 1.0, 5e-324, -1e+300, 0.0, true, "9.99999999999999999999995059343541587534298826341424087060157381490568590319469215678028938163310516218517395330044650998e-1");
|
||||
yield return new("near-one-amplification", 1.0, 5e-324, -1e+300, 3.717542271194458e+283, false, "9.99999999999999999999995059343541587534482497333740069483277495667054291797643479005032840213161910474030185005957363130e-1");
|
||||
yield return new("near-one-amplification", 1.0, 5e-324, -1e+300, 3.717542271194458e+283, true, "9.99999999999999999999995059343541587534298826341424087060157381490568590319469215678028938163310516218517395330044650998e-1");
|
||||
yield return new("near-one-amplification", 1.0, 5e-324, 1.7976931348623157e+308, 0.0, false, "1.00000000000000088817841970012552816174479235211247311621874805904415400901667494766739438002838486028063534244814395382e+0");
|
||||
yield return new("near-one-amplification", 1.0, 5e-324, 1.7976931348623157e+308, 0.0, true, "1.00000000000000088817841970012552816174479235211247311621874805904415400901667494766739438002838486028063534244814395382e+0");
|
||||
yield return new("near-one-amplification", 1.0, 5e-324, 1.7976931348623157e+308, 4.9896007738368e+291, false, "1.00000000000000088817841970012555281364808050875328752124148842044346876806451703172712163097469368695265387269124503489e+0");
|
||||
yield return new("near-one-amplification", 1.0, 5e-324, 1.7976931348623157e+308, 4.9896007738368e+291, true, "1.00000000000000088817841970012552816174479235211247311621874805904415400901667494766739438002838486028063534244814395382e+0");
|
||||
yield return new("near-one-amplification", 1.0, 5e-324, -1.7976931348623157e+308, 0.0, false, "9.99999999999999111821580299875260699160428659517776304305932654901975020008053006090996769853058697662591734578785081672e-1");
|
||||
yield return new("near-one-amplification", 1.0, 5e-324, -1.7976931348623157e+308, 0.0, true, "9.99999999999999111821580299875260699160428659517776304305932654901975020008053006090996769853058697662591734578785081672e-1");
|
||||
yield return new("near-one-amplification", 1.0, 5e-324, -1.7976931348623157e+308, 4.9896007738368e+291, false, "9.99999999999999111821580299875285351063716816114800132318522487696653915407095872548277787434219998638991746530388150551e-1");
|
||||
yield return new("near-one-amplification", 1.0, 5e-324, -1.7976931348623157e+308, 4.9896007738368e+291, true, "9.99999999999999111821580299875260699160428659517776304305932654901975020008053006090996769853058697662591734578785081672e-1");
|
||||
yield return new("near-one-amplification", 1.0, -5e-324, 1e+300, 0.0, false, "9.99999999999999999999995059343541587534298826341424087060157381490568590319469215678028938163310516218517395330044650998e-1");
|
||||
yield return new("near-one-amplification", 1.0, -5e-324, 1e+300, 0.0, true, "9.99999999999999999999995059343541587534298826341424087060157381490568590319469215678028938163310516218517395330044650998e-1");
|
||||
yield return new("near-one-amplification", 1.0, -5e-324, 1e+300, 3.717542271194458e+283, false, "9.99999999999999999999995059343541587534115155349108104637037267314082888841294986086058454451133439878274896507459693148e-1");
|
||||
yield return new("near-one-amplification", 1.0, -5e-324, 1e+300, 3.717542271194458e+283, true, "9.99999999999999999999995059343541587534298826341424087060157381490568590319469215678028938163310516218517395330044650998e-1");
|
||||
yield return new("near-one-amplification", 1.0, -5e-324, -1e+300, 0.0, false, "1.00000000000000000000000494065645841246570117368298599917989542693401592708216839341606522921040541816306231624717740136e+0");
|
||||
yield return new("near-one-amplification", 1.0, -5e-324, -1e+300, 0.0, true, "1.00000000000000000000000494065645841246570117368298599917989542693401592708216839341606522921040541816306231624717740136e+0");
|
||||
yield return new("near-one-amplification", 1.0, -5e-324, -1e+300, 3.717542271194458e+283, false, "1.00000000000000000000000494065645841246551750269067001675677531094261967678602432375657337048502309830287534147913289616e+0");
|
||||
yield return new("near-one-amplification", 1.0, -5e-324, -1e+300, 3.717542271194458e+283, true, "1.00000000000000000000000494065645841246570117368298599917989542693401592708216839341606522921040541816306231624717740136e+0");
|
||||
yield return new("near-one-amplification", 1.0, -5e-324, 1.7976931348623157e+308, 0.0, false, "9.99999999999999111821580299875260699160428659517776304305932654901975020008053006090996769853058697662591734578785081672e-1");
|
||||
yield return new("near-one-amplification", 1.0, -5e-324, 1.7976931348623157e+308, 0.0, true, "9.99999999999999111821580299875260699160428659517776304305932654901975020008053006090996769853058697662591734578785081672e-1");
|
||||
yield return new("near-one-amplification", 1.0, -5e-324, 1.7976931348623157e+308, 4.9896007738368e+291, false, "9.99999999999999111821580299875236047257140502920752476293342822715012460337636719711468564121373195196042411522632774915e-1");
|
||||
yield return new("near-one-amplification", 1.0, -5e-324, 1.7976931348623157e+308, 4.9896007738368e+291, true, "9.99999999999999111821580299875260699160428659517776304305932654901975020008053006090996769853058697662591734578785081672e-1");
|
||||
yield return new("near-one-amplification", 1.0, -5e-324, -1.7976931348623157e+308, 0.0, false, "1.00000000000000088817841970012552816174479235211247311621874805904415400901667494766739438002838486028063534244814395382e+0");
|
||||
yield return new("near-one-amplification", 1.0, -5e-324, -1.7976931348623157e+308, 0.0, true, "1.00000000000000088817841970012552816174479235211247311621874805904415400901667494766739438002838486028063534244814395382e+0");
|
||||
yield return new("near-one-amplification", 1.0, -5e-324, -1.7976931348623157e+308, 4.9896007738368e+291, false, "1.00000000000000088817841970012550350984150419547165871119600769825255558569746052320648932773701015449777023101519682929e+0");
|
||||
yield return new("near-one-amplification", 1.0, -5e-324, -1.7976931348623157e+308, 4.9896007738368e+291, true, "1.00000000000000088817841970012552816174479235211247311621874805904415400901667494766739438002838486028063534244814395382e+0");
|
||||
yield return new("sparse-scale-sweep", 1.0, -1.4901161193847656e-08, 50331648.0, 0.125, false, "4.72366549221609614983837747988003293775688736300409473719592998392175034954896058214578184490033507876238885799701354213e-1");
|
||||
yield return new("sparse-scale-sweep", 1.0, -1.4901161193847656e-08, 50331648.0, 0.125, true, "4.72366550101460883925263156828589384426168852256496091910905004011706874974580367154545474030047137045091248536282742898e-1");
|
||||
yield return new("sparse-scale-sweep", 1.0, 1.4901161193847656e-08, 50331648.0, 0.125, false, "2.11700000872623514764193017612568477422417542660507465690149828892442479256231036151122539926745245748555349966257606332e+0");
|
||||
yield return new("sparse-scale-sweep", 1.0, 1.4901161193847656e-08, 50331648.0, 0.125, true, "2.11700000478301538351780074732987010968429967433645794477628112451818808131447637452643842628239240551995950866627496363e+0");
|
||||
yield return new("sparse-scale-sweep", 1.0, -7.450580596923828e-09, 100663296.0, 0.125, false, "4.72366550981312165977494294248836409100360172067932111210097173638521064367524667346723596162142841964308273875986463058e-1");
|
||||
yield return new("sparse-scale-sweep", 1.0, -7.450580596923828e-09, 100663296.0, 0.125, true, "4.72366551421237800243350666743868807870578895935648836322272517676928296443663158334445880764802786974975572684174169936e-1");
|
||||
yield return new("sparse-scale-sweep", 1.0, 7.450580596923828e-09, 100663296.0, 0.125, false, "2.11700001266945488238678311878199886432438848370790703536346173669503879008271711171458398453430018011419339817738240748e+0");
|
||||
yield return new("sparse-scale-sweep", 1.0, 7.450580596923828e-09, 100663296.0, 0.125, true, "2.11700001069784498838938736395427465352384206510115420504463632301675899188376799950497895432608440300157643847270653234e+0");
|
||||
yield return new("sparse-scale-sweep", 1.0, -9.094947017729282e-13, 824633720832.0, 0.125, false, "4.72366552740799899699540130006550087297235354745002274955245318177292406147853236574719444042210813393653295618054869910e-1");
|
||||
yield return new("sparse-scale-sweep", 1.0, -9.094947017729282e-13, 824633720832.0, 0.125, true, "4.72366552740853601559166719977743041912048551234747435160453761918095518860896638160505951702417639213988472338562254010e-1");
|
||||
yield return new("sparse-scale-sweep", 1.0, 9.094947017729282e-13, 824633720832.0, 0.125, false, "2.11700001661219331847067959573102403822432449244173211511424786326239656129805480151723836618307417723019185618203074475e+0");
|
||||
yield return new("sparse-scale-sweep", 1.0, 9.094947017729282e-13, 824633720832.0, 0.125, true, "2.11700001661195264343333446999719629511420382912511250929812667188867552070383959189940329648462646988555971692523108961e+0");
|
||||
yield return new("sparse-scale-sweep", 1.0, -1.1102230246251565e-16, 6755399441055744.0, 0.125, false, "4.72366552741014680916435405148872975742030781438798905488748997955581223626614805462136426306018635853250437485734642886e-1");
|
||||
yield return new("sparse-scale-sweep", 1.0, -1.1102230246251565e-16, 6755399441055744.0, 0.125, true, "4.72366552741014687471838191597471482612851818140005911225506707026845156774875816731149347496269686877473548852127673667e-1");
|
||||
yield return new("sparse-scale-sweep", 1.0, 1.1102230246251565e-16, 6755399441055744.0, 0.125, false, "2.11700001661267460978681578045634347563098987994641490307644000884034215430272817748352954973105670747493546588298016186e+0");
|
||||
yield return new("sparse-scale-sweep", 1.0, 1.1102230246251565e-16, 6755399441055744.0, 0.125, true, "2.11700001661267458040753876076596720451955281443713405937293650597671663607707982694510574602567722038532907481197773771e+0");
|
||||
yield return new("sparse-scale-sweep", 1.0, -7.888609052210118e-31, 9.50737950171172e+29, 0.125, false, "4.72366552741014707138046550943081597217007876297912364634101391754561631218524493834527782254802601053580964155130582835e-1");
|
||||
yield return new("sparse-scale-sweep", 1.0, -7.888609052210118e-31, 9.50737950171172e+29, 0.125, true, "4.72366552741014707138046550943128176155306802007553444074490518368626637720853894410470032388732457179178406113322361718e-1");
|
||||
yield return new("sparse-scale-sweep", 1.0, 7.888609052210118e-31, 9.50737950171172e+29, 0.125, false, "2.11700001661267466854536981983667810549712709181009654626324508443021867979244699021080646304696584169746007606400611424e+0");
|
||||
yield return new("sparse-scale-sweep", 1.0, 7.888609052210118e-31, 9.50737950171172e+29, 0.125, true, "2.11700001661267466854536981983646935317844484536394310850530110094755181034028496397215892802329893032532364514657903960e+0");
|
||||
yield return new("sparse-scale-sweep", 1.0, -3.054936363499605e-151, 2.4550429559221064e+150, 0.125, false, "4.72366552741014707138046550943267912970203579136476682395657944141200945633080949683587544259334463950142296746371414939e-1");
|
||||
yield return new("sparse-scale-sweep", 1.0, -3.054936363499605e-151, 2.4550429559221064e+150, 0.125, true, "4.72366552741014707138046550943267912970203579136476682395657944141200945633080949683587544259334463950142296746371414939e-1");
|
||||
yield return new("sparse-scale-sweep", 1.0, 3.054936363499605e-151, 2.4550429559221064e+150, 0.125, false, "2.11700001661267466854536981983709561013449158470240342177913303081098453336401282000279156026661579821888590471901551426e+0");
|
||||
yield return new("sparse-scale-sweep", 1.0, 3.054936363499605e-151, 2.4550429559221064e+150, 0.125, true, "2.11700001661267466854536981983709561013449158470240342177913303081098453336401282000279156026661579821888590471901551426e+0");
|
||||
yield return new("sparse-scale-sweep", 1.0, -9.332636185032189e-302, 8.036314553897005e+300, 0.125, false, "4.72366552741014707138046550943267912970203579136476682395657944141200945633080949683587544259334463950142296746371414939e-1");
|
||||
yield return new("sparse-scale-sweep", 1.0, -9.332636185032189e-302, 8.036314553897005e+300, 0.125, true, "4.72366552741014707138046550943267912970203579136476682395657944141200945633080949683587544259334463950142296746371414939e-1");
|
||||
yield return new("sparse-scale-sweep", 1.0, 9.332636185032189e-302, 8.036314553897005e+300, 0.125, false, "2.11700001661267466854536981983709561013449158470240342177913303081098453336401282000279156026661579821888590471901551426e+0");
|
||||
yield return new("sparse-scale-sweep", 1.0, 9.332636185032189e-302, 8.036314553897005e+300, 0.125, true, "2.11700001661267466854536981983709561013449158470240342177913303081098453336401282000279156026661579821888590471901551426e+0");
|
||||
yield return new("sparse-scale-sweep", 1.0, -2.2250738585072014e-308, 3.3706746278668423e+307, 0.125, false, "4.72366552741014707138046550943267912970203579136476682395657944141200945633080949683587544259334463950142296746371414939e-1");
|
||||
yield return new("sparse-scale-sweep", 1.0, -2.2250738585072014e-308, 3.3706746278668423e+307, 0.125, true, "4.72366552741014707138046550943267912970203579136476682395657944141200945633080949683587544259334463950142296746371414939e-1");
|
||||
yield return new("sparse-scale-sweep", 1.0, 2.2250738585072014e-308, 3.3706746278668423e+307, 0.125, false, "2.11700001661267466854536981983709561013449158470240342177913303081098453336401282000279156026661579821888590471901551426e+0");
|
||||
yield return new("sparse-scale-sweep", 1.0, 2.2250738585072014e-308, 3.3706746278668423e+307, 0.125, true, "2.11700001661267466854536981983709561013449158470240342177913303081098453336401282000279156026661579821888590471901551426e+0");
|
||||
yield return new("sparse-scale-sweep", 1.0, -1e-323, 6.741349255733685e+307, 0.125, false, "9.99999999999999333866185224906297612950592555028820149522566441681603753483803323531568498816157439815161034485653328172e-1");
|
||||
yield return new("sparse-scale-sweep", 1.0, -1e-323, 6.741349255733685e+307, 0.125, true, "9.99999999999999333866185224906297612950592555028820149522566441681603753483803323531568498816157439815161034485653328172e-1");
|
||||
yield return new("sparse-scale-sweep", 1.0, 1e-323, 6.741349255733685e+307, 0.125, false, "1.00000000000000066613381477509414612130859426411172394779540514198092848980887773754237742488564575593714516957089133279e+0");
|
||||
yield return new("sparse-scale-sweep", 1.0, 1e-323, 6.741349255733685e+307, 0.125, true, "1.00000000000000066613381477509414612130859426411172394779540514198092848980887773754237742488564575593714516957089133279e+0");
|
||||
yield return new("exponent-low-decisive", 2.0, 0.0, 1.0, 5.551115123125783e-17, false, "2.00000000000000007695479593116620029041664341713815366179984136189315217631437914477535477221181315094723735432255337807e+0");
|
||||
yield return new("exponent-low-decisive", 2.0, 0.0, 1.0, 5.551115123125783e-17, true, "2.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+0");
|
||||
yield return new("exponent-low-decisive", 2.0, 0.0, -1.0, -5.551115123125783e-17, false, "4.99999999999999980761301017208450667650916246644680054760727103703961478639310202113257847265570935275551812571858143798e-1");
|
||||
yield return new("exponent-low-decisive", 2.0, 0.0, -1.0, -5.551115123125783e-17, true, "5.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-1");
|
||||
yield return new("exponent-low-decisive", 2.0, 0.0, 0.0, 5e-324, false, "1.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+0");
|
||||
yield return new("exponent-low-decisive", 2.0, 0.0, 0.0, 5e-324, true, "1e+0");
|
||||
yield return new("exponent-low-decisive", 2.0, 0.0, 0.5, 2.7755575615628914e-17, false, "1.41421356237309507600931774808697588439448099151805797773298978988933178684154951324596175878074737195145590215641026986e+0");
|
||||
yield return new("exponent-low-decisive", 2.0, 0.0, 0.5, 2.7755575615628914e-17, true, "1.41421356237309504880168872420969807856967187537694807317667973799073247846210703885038753432764157273501384623091229702e+0");
|
||||
yield return new("exponent-low-decisive", 10.0, 0.0, 1.0, 5.551115123125783e-17, false, "1.00000000000000012781914932003234537245680382409083392670440261696902368520426109154220545198530672142968125154509195453e+1");
|
||||
yield return new("exponent-low-decisive", 10.0, 0.0, 1.0, 5.551115123125783e-17, true, "1.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+1");
|
||||
yield return new("exponent-low-decisive", 10.0, 0.0, -1.0, -5.551115123125783e-17, false, "9.99999999999999872180850679967670965278129072632256181650151054098060763085821567736360614288865296549471193611253084211e-2");
|
||||
yield return new("exponent-low-decisive", 10.0, 0.0, -1.0, -5.551115123125783e-17, true, "1.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-1");
|
||||
yield return new("exponent-low-decisive", 10.0, 0.0, 0.0, 5e-324, false, "1.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+0");
|
||||
yield return new("exponent-low-decisive", 10.0, 0.0, 0.0, 5e-324, true, "1e+0");
|
||||
yield return new("exponent-low-decisive", 10.0, 0.0, 0.5, 2.7755575615628914e-17, false, "3.16227766016837953409871376266500168961198281822550338132993905118425350946997444883263820168589077312726472423843956638e+0");
|
||||
yield return new("exponent-low-decisive", 10.0, 0.0, 0.5, 2.7755575615628914e-17, true, "3.16227766016837933199889354443271853371955513932521682685750485279259443863923822134424810837930029518734728415284005515e+0");
|
||||
yield return new("exponent-low-decisive", 1e+308, 0.0, 1.0, 5.551115123125783e-17, false, "1.00000000000003937927705420017567840276708512055587796787117775496800682211952677643980607546590831003437360097275603584e+308");
|
||||
yield return new("exponent-low-decisive", 1e+308, 0.0, 1.0, 5.551115123125783e-17, true, "1.00000000000000001097906362944045541740492309677311846336810682903157585404911491537163328978494688899061249669721172516e+308");
|
||||
yield return new("exponent-low-decisive", 1e+308, 0.0, -1.0, -5.551115123125783e-17, false, "9.99999999999960620722945801375049058544310278832417502997913556404010833657276504414323204765652408086037933738517493541e-309");
|
||||
yield return new("exponent-low-decisive", 1e+308, 0.0, -1.0, -5.551115123125783e-17, true, "9.99999999999999989020936370559544703134915082529105961264150367322296031683506070954361459014856251031722681526036330150e-309");
|
||||
yield return new("exponent-low-decisive", 1e+308, 0.0, 0.0, 5e-324, false, "1.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+0");
|
||||
yield return new("exponent-low-decisive", 1e+308, 0.0, 0.0, 5e-324, true, "1e+0");
|
||||
yield return new("exponent-low-decisive", 1e+308, 0.0, 0.5, 2.7755575615628914e-17, false, "1.00000000000001968963852709989399826871961431869650614151309383442160776497761929257601570275495654505363786468865702430e+154");
|
||||
yield return new("exponent-low-decisive", 1e+308, 0.0, 0.5, 2.7755575615628914e-17, true, "1.00000000000000000548953181472022769363498177597378109589161168665811318694753029295146913909263900447853234927525250827e+154");
|
||||
yield return new("exponent-low-decisive", 1e-308, 0.0, 1.0, 5.551115123125783e-17, false, "9.99999999999960541028634768067099356341844385800040305248173156379842905501378691518662887528571120444679633968354745439e-309");
|
||||
yield return new("exponent-low-decisive", 1e-308, 0.0, 1.0, 5.551115123125783e-17, true, "9.99999999999999909326625337248461995470488734032045693707225049331647881341002217023668530611028595157578301758491822824e-309");
|
||||
yield return new("exponent-low-decisive", 1e-308, 0.0, -1.0, -5.551115123125783e-17, false, "1.00000000000003945897136523348991106486041068282483806957825630204849010144399764221988519604887308540626615412945363031e+308");
|
||||
yield return new("exponent-low-decisive", 1e-308, 0.0, -1.0, -5.551115123125783e-17, true, "1.00000000000000009067337466275154622619038399768128815146670372007818875083636107034434918744344693185025433076209899389e+308");
|
||||
yield return new("exponent-low-decisive", 1e-308, 0.0, 0.0, 5e-324, false, "1.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+0");
|
||||
yield return new("exponent-low-decisive", 1e-308, 0.0, 0.0, 5e-324, true, "1e+0");
|
||||
yield return new("exponent-low-decisive", 1e-308, 0.0, 0.5, 2.7755575615628914e-17, false, "9.99999999999980270514317383838923375520644149198761955045950093475649854331472833309757714460806683763614441050378064220e-155");
|
||||
yield return new("exponent-low-decisive", 1e-308, 0.0, 0.5, 2.7755575615628914e-17, true, "9.99999999999999954663312668624229970027635275551902709065412883955749582023799148147816180828307038836518462277055056772e-155");
|
||||
yield return new("integer-boundary", 1.0, 5.551115123125783e-17, -2147483648.0, -0.5, false, "9.99999880790717526890256258509918217458712055764307785527266974442067886637448336255615020498739536465800643111437087209e-1");
|
||||
yield return new("integer-boundary", 1.0, 5.551115123125783e-17, -2147483648.0, -0.5, true, "9.99999880790717554645828565416577575599535852959246295342855137311589459850405680074765510117236935601919868007262931082e-1");
|
||||
yield return new("integer-boundary", 1.0, 5.551115123125783e-17, -2147483648.0, 0.0, false, "9.99999880790717554645828565416577575599535852959246295342855137311589459850405680074765510117236935601919868007262931082e-1");
|
||||
yield return new("integer-boundary", 1.0, 5.551115123125783e-17, -2147483648.0, 0.0, true, "9.99999880790717554645828565416577575599535852959246295342855137311589459850405680074765510117236935601919868007262931082e-1");
|
||||
yield return new("integer-boundary", 1.0, 5.551115123125783e-17, -2147483648.0, 0.5, false, "9.99999880790717582401400872323237704112245569557799094019104316279993794702445920749491326234884599907457314884672422852e-1");
|
||||
yield return new("integer-boundary", 1.0, 5.551115123125783e-17, -2147483648.0, 0.5, true, "9.99999880790717554645828565416577575599535852959246295342855137311589459850405680074765510117236935601919868007262931082e-1");
|
||||
yield return new("integer-boundary", 1.0, 5.551115123125783e-17, 2147483647.0, -0.5, false, "1.00000011920929657294214986354850298260920784659812527733594715022875265140683478416091488625142537630671429050801674676e+0");
|
||||
yield return new("integer-boundary", 1.0, 5.551115123125783e-17, 2147483647.0, -0.5, true, "1.00000011920929660069772878790006122424250551480097783639593732022905652617914889306695910946673855859260339088327560515e+0");
|
||||
yield return new("integer-boundary", 1.0, 5.551115123125783e-17, 2147483647.0, 0.0, false, "1.00000011920929660069772878790006122424250551480097783639593732022905652617914889306695910946673855859260339088327560515e+0");
|
||||
yield return new("integer-boundary", 1.0, 5.551115123125783e-17, 2147483647.0, 0.0, true, "1.00000011920929660069772878790006122424250551480097783639593732022905652617914889306695910946673855859260339088327560515e+0");
|
||||
yield return new("integer-boundary", 1.0, 5.551115123125783e-17, 2147483647.0, 0.5, false, "1.00000011920929662845330771225162023624787277339971790291897586738680865690232427905248775470466895740142171953389612763e+0");
|
||||
yield return new("integer-boundary", 1.0, 5.551115123125783e-17, 2147483647.0, 0.5, true, "1.00000011920929660069772878790006122424250551480097783639593732022905652617914889306695910946673855859260339088327560515e+0");
|
||||
yield return new("integer-boundary", 1.0, 5.551115123125783e-17, 2147483648.0, -0.5, false, "1.00000011920929662845330771225162023624787277339971790291897586738680865690232427905248775470466895740142171953389612763e+0");
|
||||
yield return new("integer-boundary", 1.0, 5.551115123125783e-17, 2147483648.0, -0.5, true, "1.00000011920929665620888663660318001862530962239436685902529247647424855266301452738213960113969120743092231769595824574e+0");
|
||||
yield return new("integer-boundary", 1.0, 5.551115123125783e-17, 2147483648.0, 0.0, false, "1.00000011920929665620888663660318001862530962239436685902529247647424855266301452738213960113969120743092231769595824574e+0");
|
||||
yield return new("integer-boundary", 1.0, 5.551115123125783e-17, 2147483648.0, 0.0, true, "1.00000011920929665620888663660318001862530962239436685902529247647424855266301452738213960113969120743092231769595824574e+0");
|
||||
yield return new("integer-boundary", 1.0, 5.551115123125783e-17, 2147483648.0, 0.5, false, "1.00000011920929668396446556095474057137481606178494608683511683226420919560273070768012260760191686825860056843566552454e+0");
|
||||
yield return new("integer-boundary", 1.0, 5.551115123125783e-17, 2147483648.0, 0.5, true, "1.00000011920929665620888663660318001862530962239436685902529247647424855266301452738213960113969120743092231769595824574e+0");
|
||||
yield return new("integer-boundary", 1.0, 5.551115123125783e-17, -2147483649.0, -0.5, false, "9.99999880790717471379111644696601812292722219585188104017546534371430004372115574687348648893300806771449508081386296520e-1");
|
||||
yield return new("integer-boundary", 1.0, 5.551115123125783e-17, -2147483649.0, -0.5, true, "9.99999880790717499134683951603259629689774177972962182457208037014219951646066573479641642575541636167238859178309702562e-1");
|
||||
yield return new("integer-boundary", 1.0, 5.551115123125783e-17, -2147483649.0, 0.0, false, "9.99999880790717499134683951603259629689774177972962182457208037014219951646066573479641642575541636167238859178309702562e-1");
|
||||
yield return new("integer-boundary", 1.0, 5.551115123125783e-17, -2147483649.0, 0.0, true, "9.99999880790717499134683951603259629689774177972962182457208037014219951646066573479641642575541636167238859178309702562e-1");
|
||||
yield return new("integer-boundary", 1.0, 5.551115123125783e-17, -2147483649.0, 0.5, false, "9.99999880790717526890256258509918217458712055764307785527266974442067886637448336255615020498739536465800643111437087209e-1");
|
||||
yield return new("integer-boundary", 1.0, 5.551115123125783e-17, -2147483649.0, 0.5, true, "9.99999880790717499134683951603259629689774177972962182457208037014219951646066573479641642575541636167238859178309702562e-1");
|
||||
yield return new("integer-boundary", 1.0, 5.551115123125783e-17, 9007199254740992.0, -0.5, false, "1.64872127070012807820683894079437633884571631496046624884116311866361249812873831660163867395145900782774648514270904076e+0");
|
||||
yield return new("integer-boundary", 1.0, 5.551115123125783e-17, 9007199254740992.0, -0.5, true, "1.64872127070012812396804683880756765097766366159634584961221945442436402498322842463132827084144622459604252376929868732e+0");
|
||||
yield return new("integer-boundary", 1.0, 5.551115123125783e-17, 9007199254740992.0, 0.0, false, "1.64872127070012812396804683880756765097766366159634584961221945442436402498322842463132827084144622459604252376929868732e+0");
|
||||
yield return new("integer-boundary", 1.0, 5.551115123125783e-17, 9007199254740992.0, 0.0, true, "1.64872127070012812396804683880756765097766366159634584961221945442436402498322842463132827084144622459604252376929868732e+0");
|
||||
yield return new("integer-boundary", 1.0, 5.551115123125783e-17, 9007199254740992.0, 0.5, false, "1.64872127070012816972925473682076023323827708405238946316103089071587900841204755112147704102038787173097165065630913459e+0");
|
||||
yield return new("integer-boundary", 1.0, 5.551115123125783e-17, 9007199254740992.0, 0.5, true, "1.64872127070012812396804683880756765097766366159634584961221945442436402498322842463132827084144622459604252376929868732e+0");
|
||||
yield return new("integer-boundary", 1.0, 5.551115123125783e-17, 1.8014398509481984e+16, -0.5, false, "2.71828182845904508446533380258256531562069287982524896117070083515324123402675216079993237654086592300912269707770800541e+0");
|
||||
yield return new("integer-boundary", 1.0, 5.551115123125783e-17, 1.8014398509481984e+16, -0.5, true, "2.71828182845904515991281063696761320865958722503430152835348388290744697387615216043533391955515428706576374097559915094e+0");
|
||||
yield return new("integer-boundary", 1.0, 5.551115123125783e-17, 1.8014398509481984e+16, 0.0, false, "2.71828182845904515991281063696761320865958722503430152835348388290744697387615216043533391955515428706576374097559915094e+0");
|
||||
yield return new("integer-boundary", 1.0, 5.551115123125783e-17, 1.8014398509481984e+16, 0.0, true, "2.71828182845904515991281063696761320865958722503430152835348388290744697387615216043533391955515428706576374097559915094e+0");
|
||||
yield return new("integer-boundary", 1.0, 5.551115123125783e-17, 1.8014398509481984e+16, 0.5, false, "2.71828182845904523536028747135266319578662985542829137599329073714634974006100094178257710006328712701481597866150351234e+0");
|
||||
yield return new("integer-boundary", 1.0, 5.551115123125783e-17, 1.8014398509481984e+16, 0.5, true, "2.71828182845904515991281063696761320865958722503430152835348388290744697387615216043533391955515428706576374097559915094e+0");
|
||||
yield return new("negative-integral-low-parity", -1.0, -5.551115123125783e-17, 9007199254740992.0, 1.0, false, "-1.64872127070012821549046263483395408562755658232863234263983027285063189474722178269697538006597502537809674250391805343e+0");
|
||||
yield return new("negative-integral-low-parity", -1.0, -5.551115123125783e-17, 9007199254740992.0, 1.0, true, "1.64872127070012812396804683880756765097766366159634584961221945442436402498322842463132827084144622459604252376929868732e+0");
|
||||
yield return new("negative-integral-low-parity", -1.0, -5.551115123125783e-17, 1.8014398509481984e+16, -1.0, false, "-2.71828182845904500901785696819751951666994681980107555182299607210271258939195450350087790893317861802210926697707008553e+0");
|
||||
yield return new("negative-integral-low-parity", -1.0, -5.551115123125783e-17, 1.8014398509481984e+16, -1.0, true, "2.71828182845904515991281063696761320865958722503430152835348388290744697387615216043533391955515428706576374097559915094e+0");
|
||||
yield return new("negative-integral-low-parity", -1.0, -5.551115123125783e-17, -9007199254740992.0, -1.0, false, "-6.06530659712633398351888151714251872969944439307319763785250446067334501453810050800363959471856442807851683613645971137e-1");
|
||||
yield return new("negative-integral-low-parity", -1.0, -5.551115123125783e-17, -9007199254740992.0, -1.0, true, "6.06530659712633432021103329416823443392082670825529212349435456595737020271205027288103106858483423923558690036813906733e-1");
|
||||
yield return new("negative-integral-low-parity", -1.0, -5.551115123125783e-17, 1.8014398509481984e+16, 2.0, false, "2.71828182845904546170271797450782572169664745772046582787430935660563791026251750437224807171628972191681347343949457250e+0");
|
||||
yield return new("negative-integral-low-parity", -1.0, -5.551115123125783e-17, 1.8014398509481984e+16, 2.0, true, "2.71828182845904515991281063696761320865958722503430152835348388290744697387615216043533391955515428706576374097559915094e+0");
|
||||
yield return new("negative-int-dispatch", -1.25, 2.7755575615628914e-17, -63.0, 0.0, false, "-7.84637716923336193094276418080845951698677952417941977825280137466430664062540901730244923006097955537358902365148567930e-7");
|
||||
yield return new("negative-int-dispatch", -1.25, 2.7755575615628914e-17, -63.0, 0.0, true, "-7.84637716923336193094276418080845951698677952417941977825280137466430664062540901730244923006097955537358902365148567930e-7");
|
||||
yield return new("negative-int-dispatch", -1.25, 2.7755575615628914e-17, -7.0, 0.0, false, "-2.09715200000000032596290111541750942007143935597054904472354026424969178823336257582288542893149606390553484344185229617e-1");
|
||||
yield return new("negative-int-dispatch", -1.25, 2.7755575615628914e-17, -7.0, 0.0, true, "-2.09715200000000032596290111541750942007143935597054904472354026424969178823336257582288542893149606390553484344185229617e-1");
|
||||
yield return new("negative-int-dispatch", -1.25, 2.7755575615628914e-17, 7.0, 0.0, false, "-4.76837158203124925884617115248725268598054644138679080671587238030405894387593626522625434910843865766484831137482666557e+0");
|
||||
yield return new("negative-int-dispatch", -1.25, 2.7755575615628914e-17, 7.0, 0.0, true, "-4.76837158203124925884617115248725268598054644138679080671587238030405894387593626522625434910843865766484831137482666557e+0");
|
||||
yield return new("negative-int-dispatch", -1.25, 2.7755575615628914e-17, 63.0, 0.0, false, "-1.27447352890596003878628567420639928593585223694067025582290667827041060471036299931225630412030416058578361639390811030e+6");
|
||||
yield return new("negative-int-dispatch", -1.25, 2.7755575615628914e-17, 63.0, 0.0, true, "-1.27447352890596003878628567420639928593585223694067025582290667827041060471036299931225630412030416058578361639390811030e+6");
|
||||
yield return new("finite-range-shoulder", 2.0, 5.551115123125783e-17, 1023.75, 2.842170943040401e-14, false, "1.51167371283200659210927749445831867300278116640730489075993079782352872371010863103529344046487166465683406944749400658e+308");
|
||||
yield return new("finite-range-shoulder", 2.0, 5.551115123125783e-17, 1023.75, 2.842170943040401e-14, true, "1.51167371283197681149050360792762285479984614398060067175336699939863243132605637334601968571705043855461270459295947410e+308");
|
||||
yield return new("finite-range-shoulder", 2.0, 5.551115123125783e-17, -1021.75, 2.842170943040401e-14, false, "2.64607366394329882602278018505471453219801417365895973768744736360495374276173929438524222801773175136090960631498408505e-308");
|
||||
yield return new("finite-range-shoulder", 2.0, 5.551115123125783e-17, -1021.75, 2.842170943040401e-14, true, "2.64607366394324669723972032257520622629018125038191238166510283219347896537802857124767473344252495860138650471513807626e-308");
|
||||
yield return new("finite-range-shoulder", 2.0, 5.551115123125783e-17, -1073.5, 2.842170943040401e-14, false, "6.98714337051306154357650259856640660914894887397875495745208391781282864188037390039407535912538644253170805586301196525e-324");
|
||||
yield return new("finite-range-shoulder", 2.0, 5.551115123125783e-17, -1073.5, 2.842170943040401e-14, true, "6.98714337051292389386329437375900902789440793900381182641127420117222134649185411086204870476702605967157814102129415083e-324");
|
||||
yield return new("finite-range-shoulder", 2.0, 5.551115123125783e-17, -1074.25, 2.842170943040401e-14, false, "4.15458030487911314918040569454298230056016502486922828266899949825508028212461989617352758759595633367249175862449308942e-324");
|
||||
yield return new("finite-range-shoulder", 2.0, 5.551115123125783e-17, -1074.25, 2.842170943040401e-14, true, "4.15458030487903130217124304205892108740980581437728646467776432195598349875514778618628833920062515065937479636378756587e-324");
|
||||
yield return new("random-000", 1.3357935182666557e+261, 5.462437423415177e+244, 0.45684583223538877, -1.3877787807814457e-17, false, "1.96881859769326624321021633044133110784883625275714059276398668492779832853735659139015620432227225245396811942152809088e+119");
|
||||
yield return new("random-000", 1.3357935182666557e+261, 5.462437423415177e+244, 0.45684583223538877, -1.3877787807814457e-17, true, "1.96881859769328267146074804199020629435438393235989501361301043504556207832947848624367320831229770150446473830187634678e+119");
|
||||
yield return new("random-001", 2.3559529795817903e+194, -8.10452259547069e+177, -0.7027571228852727, -2.7755575615628914e-17, false, "2.53265140934689526470585379250678296884792410451764155378845134323277205974843037887495017393845268091156351405719872489e-137");
|
||||
yield return new("random-001", 2.3559529795817903e+194, -8.10452259547069e+177, -0.7027571228852727, -2.7755575615628914e-17, true, "2.53265140934692672591581431617803269356928332344104266942110202563837137432144206962396484481709094497156685039849595374e-137");
|
||||
yield return new("random-002", 1.8244919405440664e-131, 6.256509672447191e-148, -1.7191270560499683, 5.551115123125783e-17, false, "5.71094729385683478172640717629701071533042595146680507595510433537702401091609462061274971743972136671002184827540823160e+224");
|
||||
yield return new("random-002", 1.8244919405440664e-131, 6.256509672447191e-148, -1.7191270560499683, 5.551115123125783e-17, true, "5.71094729385693021696469330732517528115565823063315402618953908600965978288609764966630707651755595392577364669881124735e+224");
|
||||
yield return new("random-003", 2.5645929053323523e+156, -9.526820527087379e+139, -1.5520891200078772, 5.551115123125783e-17, false, "1.73485912042282352641093538331173777961135436531978454822185233536832192590605469049338842786082617307614096269693320486e-243");
|
||||
yield return new("random-003", 2.5645929053323523e+156, -9.526820527087379e+139, -1.5520891200078772, 5.551115123125783e-17, true, "1.73485912042278884298998022694815868395951015301766115229351045993343666739571974771936372606636461521531736881806390679e-243");
|
||||
yield return new("random-004", 3.576207263053654e+262, 1.7479799754928565e+246, 1.0946904818487737, -5.551115123125783e-17, false, "2.59856021874551369738447340482444066561014082199563943618774238781346605455303403507655041974259733651523614196324351122e+287");
|
||||
yield return new("random-004", 3.576207263053654e+262, 1.7479799754928565e+246, 1.0946904818487737, -5.551115123125783e-17, true, "2.59856021874560090338970210850884530238661734437707470323010355408226820809595867210774423698325866969260171823322710511e+287");
|
||||
yield return new("random-005", 6.451697406171294e-48, -3.0385816786431356e-64, 1.0877036940561637, 5.551115123125783e-17, false, "4.68714161614623688177757960006865673647806566676393966688006202435911543114346337835163854810205702684687399526330990690e-52");
|
||||
yield return new("random-005", 6.451697406171294e-48, -3.0385816786431356e-64, 1.0877036940561637, 5.551115123125783e-17, true, "4.68714161614626515380646404194042339689178817858498577465562877772986811406111475852645778422870918174939238668012007547e-52");
|
||||
yield return new("random-006", 2.5469105818254866e-188, 7.973755960878054e-205, -0.4005015811160203, 1.3877787807814457e-17, false, "1.35421656508989341728195352351602463877631559500641195682861108605584841655707115829498700204945055817838693111025382781e+75");
|
||||
yield return new("random-006", 2.5469105818254866e-188, 7.973755960878054e-205, -0.4005015811160203, 1.3877787807814457e-17, true, "1.35421656508990153516827682976201759734670418131782338393379751432735491515853740191231446340964313632713676935356282913e+75");
|
||||
yield return new("random-007", 1.4235538619106066e-142, -4.552209918945439e-159, -1.3261432713030543, 5.551115123125783e-17, false, "1.28513500857442252338702226046991216470826874462296738049183473630356397071446679802045279066593083467729743075486643588e+188");
|
||||
yield return new("random-007", 1.4235538619106066e-142, -4.552209918945439e-159, -1.3261432713030543, 5.551115123125783e-17, true, "1.28513500857444582380370401720521542264970325384624312225570102489859066884451667475487230248802345251590187182865058637e+188");
|
||||
yield return new("random-008", 5.414610390554895e+102, -2.4866161820489332e+86, 0.6756539342745523, -2.7755575615628914e-17, false, "2.58427584966220167008143036339081532710407514798724126837048596780739051892536048353505521765944927134641910352020551004e+69");
|
||||
yield return new("random-008", 5.414610390554895e+102, -2.4866161820489332e+86, 0.6756539342745523, -2.7755575615628914e-17, true, "2.58427584966221863755434572507921411898218478618682588878120140862926161740635577444436580707847401112952245184144890308e+69");
|
||||
yield return new("random-009", 6.347281069045675e+236, 2.259211166966574e+220, 0.29250329442782635, 1.3877787807814457e-17, false, "1.84304967218459148637076970894218764668165583795471372897970300354123786549011470316498150859941246091095633625053451908e+69");
|
||||
yield return new("random-009", 6.347281069045675e+236, 2.259211166966574e+220, 0.29250329442782635, 1.3877787807814457e-17, true, "1.84304967218457754005752507053719333509409708716721141422894590517680676040308725032465339317732783624346122706376561327e+69");
|
||||
yield return new("random-010", 7.676679617520787e-181, -2.6755485217387732e-197, -1.4615296041326278, 5.551115123125783e-17, false, "1.75045598860749823716087905627909593394866560970378728902811089092367232499304404428358245669419222661964023373172141840e+263");
|
||||
yield return new("random-010", 7.676679617520787e-181, -2.6755485217387732e-197, -1.4615296041326278, 5.551115123125783e-17, true, "1.75045598860753853637555461157331448922116352977540479305377841651756901873063566107013712083174182685207411765547858444e+263");
|
||||
yield return new("random-011", 2.1881327177507215e+55, -6.80564733841877e+38, 5.34468586168356, -2.220446049250313e-16, false, "5.96086484193446336931437682453314110687274973259113460981479141285498534224364316141186960022822598381117620554400475156e+295");
|
||||
yield return new("random-011", 2.1881327177507215e+55, -6.80564733841877e+38, 5.34468586168356, -2.220446049250313e-16, true, "5.96086484193463202652822990505166037010464725361901546835689805296364925851344473287047215934604694566652411629869373841e+295");
|
||||
yield return new("random-012", 3.2276733000079612e+16, -1.0, -16.33086110992666, 8.881784197001252e-16, false, "2.48666544018523813418011342340487637846129835015139861843856144937786190387034065063430074053096496178212265407011803443e-270");
|
||||
yield return new("random-012", 3.2276733000079612e+16, -1.0, -16.33086110992666, 8.881784197001252e-16, true, "2.48666544018515417829848901493377404794428065391053428416858609989761254321624053892616899931305994165570705094238697761e-270");
|
||||
yield return new("random-013", 6.624301097443079e-258, 2.310648801106982e-274, 0.473225584258651, -1.3877787807814457e-17, false, "1.97871728709652884025877247736865984487648655958126430728485421141934402202803815399868125616342211892799389130092721346e-122");
|
||||
yield return new("random-013", 6.624301097443079e-258, 2.310648801106982e-274, 0.473225584258651, -1.3877787807814457e-17, true, "1.97871728709651257897059543919940006118244933509076993889316582492672975423477909271307783891592454467407092989550052304e-122");
|
||||
yield return new("random-014", 5.199376664590115e+231, 1.723641332219371e+215, -0.3539271035617578, -1.3877787807814457e-17, false, "9.75988081404420127075277411270038774947205357926822602451221646823634024573479412878580831515318423488845147657818768617e-83");
|
||||
yield return new("random-014", 5.199376664590115e+231, 1.723641332219371e+215, -0.3539271035617578, -1.3877787807814457e-17, true, "9.75988081404427353714556442847390165864251866440760303954710490095090282519663572088699246840525728996190975184684283872e-83");
|
||||
yield return new("random-015", 5.560551009026573e-15, 1.9721522630525295e-31, -4.598351367413514, 2.220446049250313e-16, false, "3.53962230460327577040642613968535043641770013808302090093532489444061000789083174515324895669430001397218569271838232285e+65");
|
||||
yield return new("random-015", 5.560551009026573e-15, 1.9721522630525295e-31, -4.598351367413514, 2.220446049250313e-16, true, "3.53962230460330156783799572661348162754925543412403508946250937453274023504632547396392885539810257664439653599734603082e+65");
|
||||
yield return new("random-016", 10453810903.560575, 4.76837158203125e-07, -21.655643276422516, 8.881784197001252e-16, false, "1.06209290571311655809299594746780731189834736388576550073055495745625113583903926256282878708650651105882507038210461561e-217");
|
||||
yield return new("random-016", 10453810903.560575, 4.76837158203125e-07, -21.655643276422516, 8.881784197001252e-16, true, "1.06209290571309479529681246712398597712242588520135137961759315375921219003153644141686781374727830154587711665928985335e-217");
|
||||
yield return new("random-017", 7.980986414495294e+21, 262144.0, -0.1827751485966899, -6.938893903907228e-18, false, "9.92769338436116797162678271264093460563317808326617677117758361607637991186725787427811996888425405808618029146712709915e-5");
|
||||
yield return new("random-017", 7.980986414495294e+21, 262144.0, -0.1827751485966899, -6.938893903907228e-18, true, "9.92769338436117144570176532927249440979829932558072678686992568577482225709806809732951957952860601292065873254015973877e-5");
|
||||
yield return new("random-018", 4.895166298396345e-50, 2.3738919364399497e-66, 3.624180182009954, 1.1102230246251565e-16, false, "1.95358549834419408381505792795536796121614630987709678486950850172337607904231844510003707694093408313589681840541956695e-179");
|
||||
yield return new("random-018", 4.895166298396345e-50, 2.3738919364399497e-66, 3.624180182009954, 1.1102230246251565e-16, true, "1.95358549834421870990106973725253078293308917381169239245587674506274729237999511449781125059577038960281709163193264095e-179");
|
||||
yield return new("random-019", 4.361037167702552e-119, 1.3758210268297398e-135, -0.1457616233915608, 6.938893903907228e-18, false, "1.78815654973016614554937973581285217232471565027417677098165913345587819749992427623797253825852723173010256862607547630e+17");
|
||||
yield return new("random-019", 4.361037167702552e-119, 1.3758210268297398e-135, -0.1457616233915608, 6.938893903907228e-18, true, "1.78815654973016952711590203540600300840480390262968386712259029801974236186170864962437007381358164598116122897623777916e+17");
|
||||
yield return new("random-020", 1.431665585565575e-133, -4.887898181599368e-150, -0.8368043898102316, -2.7755575615628914e-17, false, "1.46074672704763625942234918956772775375372532028089948211716931303114454431223811794969644263522276989981569936625444380e+111");
|
||||
yield return new("random-020", 1.431665585565575e-133, -4.887898181599368e-150, -0.8368043898102316, -2.7755575615628914e-17, true, "1.46074672704762385766268226011901850175932628898397653821111238360513131815964621798471393744749246423652033925057149444e+111");
|
||||
yield return new("random-021", 1.3321258970455117e-115, -5.635362925894614e-132, 1.5397367399105963, 5.551115123125783e-17, false, "1.32446912918716768385708461676696596786361596215610097406009660701256687806757644481307856071318838536436416419461011568e-177");
|
||||
yield return new("random-021", 1.3321258970455117e-115, -5.635362925894614e-132, 1.5397367399105963, 5.551115123125783e-17, true, "1.32446912918718713141200235476068740490488045353967109533068351235749940205290367176911066744259607769843413769046823827e-177");
|
||||
yield return new("random-022", 1.6425045376852736e+277, 4.9201262289254483e+260, 0.3533506331186011, 1.3877787807814457e-17, false, "9.00066835440140738922624720081741026997155252690893359864757340866712105320339524170568267138490529346433855639169454077e+97");
|
||||
yield return new("random-022", 1.6425045376852736e+277, 4.9201262289254483e+260, 0.3533506331186011, 1.3877787807814457e-17, true, "9.00066835440132765804270606051785347998734140327692015232393540877775627572768843069049946094138936008859257573513683880e+97");
|
||||
yield return new("random-023", 1.9854103053010905e+130, -6.156563468186638e+113, 0.009289002081685831, 4.336808689942018e-19, false, "1.62306907266573625112922906166277329457337490169003064075029074592271551749714210768870274893356790122806843741660793300e+1");
|
||||
yield return new("random-023", 1.9854103053010905e+130, -6.156563468186638e+113, 0.009289002081685831, 4.336808689942018e-19, true, "1.62306907266573603994562069005303851595924027968855608389323451439318633970299775861445216462810163975853331724427833330e+1");
|
||||
yield return new("random-024", 1.8904510046853114e-29, 7.006492321624085e-46, 5.900833039994077, 2.220446049250313e-16, false, "3.21964689473648323208211862190569542999642569875867839598983813846234577046089837879106993964020003590167615831422364974e-170");
|
||||
yield return new("random-024", 1.8904510046853114e-29, 7.006492321624085e-46, 5.900833039994077, 2.220446049250313e-16, true, "3.21964689473653051459259838442649441800690341842627256962141744564072838416504508745603117042654155729349534776389320707e-170");
|
||||
yield return new("random-025", 2.0891820054319003e-159, 6.317460331175305e-176, -0.0782373070570619, -3.469446951953614e-18, false, "2.59835053460730493570716015726433242311861162604715762176029115261881375395238814390144708800386846871714088504391001712e+12");
|
||||
yield return new("random-025", 2.0891820054319003e-159, 6.317460331175305e-176, -0.0782373070570619, -3.469446951953614e-18, true, "2.59835053460730164191693181583549290608534429140582252883138841541513653156325515184461786026598399160596250960620493768e+12");
|
||||
yield return new("random-026", 1.3378366950283785e-216, 4.0257179809982083e-233, -0.8725854496167593, -2.7755575615628914e-17, false, "2.33431579131503034087446881209259209008342434510209759965631355329400379554905435167560243181330260917597921583876535079e+188");
|
||||
yield return new("random-026", 1.3378366950283785e-216, 4.0257179809982083e-233, -0.8725854496167593, -2.7755575615628914e-17, true, "2.33431579131499813574399367252793947723936474578525715698270100069670486011857754150045285578583906878388224438700687775e+188");
|
||||
yield return new("random-027", 2.4516871004869273e-61, 8.636168555094445e-78, -0.09712736712415687, -3.469446951953614e-18, false, "7.70799954690467752907693659394455929175576505959329001277943501771017581566878945163194440667242782951693613111478861276e+5");
|
||||
yield return new("random-027", 2.4516871004869273e-61, 8.636168555094445e-78, -0.09712736712415687, -3.469446951953614e-18, true, "7.70799954690467379686980998371049922067610281835187835005581544096844885939557554780261623369229586124383368599230692607e+5");
|
||||
yield return new("random-028", 1.8346326158663564e-08, 8.271806125530277e-25, 20.137872358909824, -8.881784197001252e-16, false, "1.60080881702408663176596009091474445977220858886472807232511656640478989352397573052774587675748459886100952371913561747e-156");
|
||||
yield return new("random-028", 1.8346326158663564e-08, 8.271806125530277e-25, 20.137872358909824, -8.881784197001252e-16, true, "1.60080881702406130398473563727734129322702071934673981859502847848716133934445494228770411113772441949523979182518182699e-156");
|
||||
yield return new("random-029", 3.442482897302349e+213, -1.495020541582441e+197, 0.394554796345418, 1.3877787807814457e-17, false, "1.78647507736742284342818868688595819303470787261093160774831500159406797266612892517652397607540002522725962767817709392e+84");
|
||||
yield return new("random-029", 3.442482897302349e+213, -1.495020541582441e+197, 0.394554796345418, 1.3877787807814457e-17, true, "1.78647507736741065337025542042356808653480904157723495189104328658005096647183891140588263844552028184499639975699664205e+84");
|
||||
yield return new("random-030", 9.54299864372222e-264, 4.407212831701244e-280, -0.3544610869529642, 1.3877787807814457e-17, false, "1.70006996385207312568443460577770083145539444026321591548754155998643579291437102676284672554985577750149064413440271791e+93");
|
||||
yield return new("random-030", 9.54299864372222e-264, 4.407212831701244e-280, -0.3544610869529642, 1.3877787807814457e-17, true, "1.70006996385208741436146116301104311726380654381215168395821538605556841242191972961209501891661605535439607985128329837e+93");
|
||||
yield return new("random-031", 1.102671443254035e-133, 4.887898181599368e-150, 0.6453987716185767, -2.7755575615628914e-17, false, "1.54652894689520585671870406798094405003322437614184186409808842359941621626231235194528448553411551839666978301606181773e-86");
|
||||
yield return new("random-031", 1.102671443254035e-133, 4.887898181599368e-150, 0.6453987716185767, -2.7755575615628914e-17, true, "1.54652894689519271545903772069589833606122446978771177736781826658970783480622982451402022217018512397391352853761616563e-86");
|
||||
yield return new("random-032", 1.991050135162202e+26, 8589934592.0, 9.74145372441443, -4.440892098500626e-16, false, "1.55343184943861202946808322969974479334322988066429042869046773561682429857750726121526185860303152700861195239781177123e+256");
|
||||
yield return new("random-032", 1.991050135162202e+26, 8589934592.0, 9.74145372441443, -4.440892098500626e-16, true, "1.55343184943865380468439644799197633030037842153449937974183681224241520375236497159714958718567386900141774013215320670e+256");
|
||||
yield return new("random-033", 1.7421260856590708e-78, -5.992545734006014e-95, 0.6045100849678194, -2.7755575615628914e-17, false, "9.86162336932564276919698147955832781395083124104974302790633385110557978553373660297141864092244238655590179125769453062e-48");
|
||||
yield return new("random-033", 1.7421260856590708e-78, -5.992545734006014e-95, 0.6045100849678194, -2.7755575615628914e-17, true, "9.86162336932559376146981933848810046035026289122903266398918581682023704496416708321225575567275146985023991631770835745e-48");
|
||||
yield return new("random-034", 7.868089077215248e+288, 2.704867999414606e+272, -0.6846979154964891, -2.7755575615628914e-17, false, "1.56171045097702297486982046545068832914295932498063581539257715726541594779219079633334990191950124417987965993120509343e-198");
|
||||
yield return new("random-034", 7.868089077215248e+288, 2.704867999414606e+272, -0.6846979154964891, -2.7755575615628914e-17, true, "1.56171045097705180906115617954020635588953885777616068575979411623873964078814336057355871345634338328467117065097732849e-198");
|
||||
yield return new("random-035", 1.5742120441905407e-276, -5.010420900022432e-293, -0.7856849687533353, -2.7755575615628914e-17, false, "4.94563154215087057143559318718411042356517291304431541628279716628688635066949240571026481522870777236666384305680914385e+216");
|
||||
yield return new("random-035", 1.5742120441905407e-276, -5.010420900022432e-293, -0.7856849687533353, -2.7755575615628914e-17, true, "4.94563154215078339751651440139922056741450379984600126969646967281523279570886579601623411666154761493587567469615420282e+216");
|
||||
yield return new("random-036", 1.7193419115002317e+129, -7.695704335233297e+112, 2.171747803661485, 1.1102230246251565e-16, false, "4.64102728376025853528239059348798667336002529010534635548132776124486081571040629076177688344761362224992579923040579096e+280");
|
||||
yield return new("random-036", 1.7193419115002317e+129, -7.695704335233297e+112, 2.171747803661485, 1.1102230246251565e-16, true, "4.64102728376010520730577324956381006456820317148918758426796777118398574969093307394840435699494960091021106719105547455e+280");
|
||||
yield return new("random-037", 1.6412857050246543e-155, -5.17526350329881e-172, 1.3017543608224311, 5.551115123125783e-17, false, "3.22248590388568347320963896578765691497562063235931635656958039143889763691808935660847933468125085294735417484972804679e-202");
|
||||
yield return new("random-037", 1.6412857050246543e-155, -5.17526350329881e-172, 1.3017543608224311, 5.551115123125783e-17, true, "3.22248590388574722836433492979542227528346326288944222255979787748918600325270640456071079137003009288604765378574430061e-202");
|
||||
yield return new("random-038", 3.870813175362113e-92, 1.7031839360032603e-108, -2.0268631667350587, 1.1102230246251565e-16, false, "1.90553394472603036594444889880452611434091607542687332001052587782564780080540631913431849182534303943834360694536243638e+185");
|
||||
yield return new("random-038", 3.870813175362113e-92, 1.7031839360032603e-108, -2.0268631667350587, 1.1102230246251565e-16, true, "1.90553394472607489533577164625714208582219859991524704317718738317263555916609237147568027222036618524805456631514678692e+185");
|
||||
yield return new("random-039", 1.3196993517521114e+202, 5.438853046443695e+185, 1.0991235721689876, -5.551115123125783e-17, false, "1.43013980396289663791141188381714368606687682313337805169406733118324617493365640702681916367999172476269373633127342721e+222");
|
||||
yield return new("random-039", 1.3196993517521114e+202, 5.438853046443695e+185, 1.0991235721689876, -5.551115123125783e-17, true, "1.43013980396293358538328907679827045868468343655288123242867304671796132380443015493116788133405906423769875882751100401e+222");
|
||||
yield return new("random-040", 3.1429099896769045e-281, -1.5290591125556738e-297, 1.0989609623871577, -5.551115123125783e-17, false, "5.47668749416887685525934751465984215116558959557523685067140397393482501801956560599304752641164956282137395861007892408e-309");
|
||||
yield return new("random-040", 3.1429099896769045e-281, -1.5290591125556738e-297, 1.0989609623871577, -5.551115123125783e-17, true, "5.47668749416868049622862447035375705689532889128780461411080119882393238842551428193442954119652735874358379045890188714e-309");
|
||||
yield return new("random-041", 4.2020950860882085e-244, -1.6259745436952323e-260, -0.6384032708714676, 2.7755575615628914e-17, false, "2.35708605466927840689909016556300030137924282489509146242798865051904606151406895553078314381035163854667077762382663239e+155");
|
||||
yield return new("random-041", 4.2020950860882085e-244, -1.6259745436952323e-260, -0.6384032708714676, 2.7755575615628914e-17, true, "2.35708605466931506922955634471742182616227176003268826819023757974605481600525314397272252830632311293798223389903047313e+155");
|
||||
yield return new("random-042", 1.1684492915782709e-56, 5.659799424266695e-73, -0.3300542514845709, -1.3877787807814457e-17, false, "2.88883780065459708804241397482054585466832871356875916443753582548792289906243438068750887692616811651017167760061229077e+18");
|
||||
yield return new("random-042", 1.1684492915782709e-56, 5.659799424266695e-73, -0.3300542514845709, -1.3877787807814457e-17, true, "2.88883780065459192480056676888862958613478365823033364540347648170851984849008512417192267802702435913308944010252986020e+18");
|
||||
yield return new("random-043", 1.3183995727570355e-128, -6.406665904585923e-145, -1.554354974464628, -5.551115123125783e-17, false, "5.89985035863792997793989054531942750677883049654317524202124871614315230436044897631477447771425351726845688693127003210e+198");
|
||||
yield return new("random-043", 1.3183995727570355e-128, -6.406665904585923e-145, -1.554354974464628, -5.551115123125783e-17, true, "5.89985035863783354189573036044777891548960159688917379820081507782485734093148828452916758505832289356249807572209019104e+198");
|
||||
yield return new("random-044", 4.731218049620999e-254, 1.8928834978668395e-270, -0.5393327752753253, 2.7755575615628914e-17, false, "4.23145647456107581855201640822774734775922960956460890629382864288617228591890026329365095059206390283257069174423040961e+136");
|
||||
yield return new("random-044", 4.731218049620999e-254, 1.8928834978668395e-270, -0.5393327752753253, 2.7755575615628914e-17, true, "4.23145647456114432538688823308466365939116694529056666577646880649535337375585764901402900799975046638700947838932924896e+136");
|
||||
yield return new("random-045", 4.0817817434942627e-190, 1.245899368887196e-206, -1.1784645716827689, 5.551115123125783e-17, false, "1.54313455597906718232880370387774961446048376328639800064496628076379883625267724018373182579282654074435079424137241585e+223");
|
||||
yield return new("random-045", 4.0817817434942627e-190, 1.245899368887196e-206, -1.1784645716827689, 5.551115123125783e-17, true, "1.54313455597910453785126629348814481981011820372507043136000173932825593942637055259310814982054805029122765242100313441e+223");
|
||||
yield return new("random-046", 5.5849101672014115e-120, 1.7197762835371747e-136, -0.6775382252032234, 2.7755575615628914e-17, false, "6.28716704725469347460469405555972614449419776006677005635877304487055546793843047619525363459039361828957802202032494120e+80");
|
||||
yield return new("random-046", 5.5849101672014115e-120, 1.7197762835371747e-136, -0.6775382252032234, 2.7755575615628914e-17, true, "6.28716704725474139166660642078549616052777748188932656137855341970864920042980409688409936673115104687759234818799755990e+80");
|
||||
yield return new("random-047", 5.207673820002838e-92, 1.7031839360032603e-108, 1.5878601386135713, 5.551115123125783e-17, false, "1.13448127165624986148806731221352160777540410221773779760118552140638291624241714008228485873700690849609080954914706685e-145");
|
||||
yield return new("random-047", 5.207673820002838e-92, 1.7031839360032603e-108, 1.5878601386135713, 5.551115123125783e-17, true, "1.13448127165626309834433568715521316658517664508088754224434291078238366617743875611566595250652765902654776326571682618e-145");
|
||||
yield return new("random-048", 1.0225227837976616e-209, 3.377017006114542e-226, 0.24488128917452173, 6.938893903907228e-18, false, "6.64017152107827523915815844989269074610403860516415422787729470998295950860752065564035406132663022511653787192321154636e-52");
|
||||
yield return new("random-048", 1.0225227837976616e-209, 3.377017006114542e-226, 0.24488128917452173, 6.938893903907228e-18, true, "6.64017152107829741149251370638140813994652445539224786663210412078452034162109886626981139662893341148040974749778272771e-52");
|
||||
yield return new("random-049", 2.7669383331691228e-282, -9.556619453472961e-299, 0.5745974547360181, -2.7755575615628914e-17, false, "1.65002126271876098754425194110182511848907883708730229903781963281521554330594642712864517933505783483278801432875204993e-162");
|
||||
yield return new("random-049", 2.7669383331691228e-282, -9.556619453472961e-299, 0.5745974547360181, -2.7755575615628914e-17, true, "1.65002126271873129664575389241642280124669843893471201885020845553497879055451936808693536332280738670587927684900766542e-162");
|
||||
yield return new("random-050", 1.5428713735590219e+258, 5.334411546303884e+241, -0.1866244981521483, 6.938893903907228e-18, false, "6.54233136419481637444502226417683766999985216083630202069938967561161439156918078303149002200008316784935596312088471659e-49");
|
||||
yield return new("random-050", 1.5428713735590219e+258, 5.334411546303884e+241, -0.1866244981521483, 6.938893903907228e-18, true, "6.54233136419478938617287610609099529272116307666198881878431252846467329249736871113363585048754140834529406313783218456e-49");
|
||||
yield return new("random-051", 1.5552318018113262e-206, -6.916130828522582e-223, 0.584962636811484, -2.7755575615628914e-17, false, "4.07276920991995978292500302341523729137089277157264992250834873915136687669413070792039548838313186558063442729399750246e-121");
|
||||
yield return new("random-051", 1.5552318018113262e-206, -6.916130828522582e-223, 0.584962636811484, -2.7755575615628914e-17, true, "4.07276920991990621332388892114554850829138595388320350256176247059526398207313875912775474060525190625714841014751623145e-121");
|
||||
yield return new("random-052", 2.209357498904188e+97, -9.485687950320943e+80, -0.6177948174587636, 2.7755575615628914e-17, false, "7.26468785945380763124798319451999702094149056758727773305764763058980122317564538377382982386992143359695313750661132588e-61");
|
||||
yield return new("random-052", 2.209357498904188e+97, -9.485687950320943e+80, -0.6177948174587636, 2.7755575615628914e-17, true, "7.26468785945376243594931570130333071849515077953978202886683988243873921691380561539537593714964846315185784711953950057e-61");
|
||||
yield return new("random-053", 2.166284969379228e-182, 8.361089130433666e-199, 1.079493982097385, -5.551115123125783e-17, false, "7.84328892472810062309501594167408034134778530647582633202377651327295354913651472759209353276563241426141435932816901778e-197");
|
||||
yield return new("random-053", 2.166284969379228e-182, 8.361089130433666e-199, 1.079493982097385, -5.551115123125783e-17, true, "7.84328892472791850055913317688210642326087494783053930024330734278773711344298998194748893350971153283429289355077681772e-197");
|
||||
yield return new("random-054", 1.1416306258070114e-213, -4.1223352125421653e-230, 0.16324273580243145, 6.938893903907228e-18, false, "1.73255851852586466195953393450731544527532518223154692607304182355298810670424307402165553514568335001036325854323459924e-35");
|
||||
yield return new("random-054", 1.1416306258070114e-213, -4.1223352125421653e-230, 0.16324273580243145, 6.938893903907228e-18, true, "1.73255851852587055658402634055276604491294873100345857044220722388929287884343166252333061300737888281794428443560433203e-35");
|
||||
yield return new("random-055", 3.2561638112913872e+84, -1.0783978666860256e+68, 3.2424115379220373, 1.1102230246251565e-16, false, "1.05918989963897145222689845343232834427501450784541551779232302712607336843998365860833475543295293210309278213985480562e+274");
|
||||
yield return new("random-055", 3.2561638112913872e+84, -1.0783978666860256e+68, 3.2424115379220373, 1.1102230246251565e-16, true, "1.05918989963894856876335682506754016937536203188627207034069202477139861353478568761644656283788767340321968244933054424e+274");
|
||||
yield return new("random-056", 9.768991799925471e+297, -2.90432989937067e+281, 0.82395829184719, 2.7755575615628914e-17, false, "3.39787645215994806532492319829621368122066657740829103102784020711262022683557358228457184579203028534539917875957279811e+245");
|
||||
yield return new("random-056", 9.768991799925471e+297, -2.90432989937067e+281, 0.82395829184719, 2.7755575615628914e-17, true, "3.39787645215988335479115663686686414714728695778203554398486592914180882705208718066327932982010273433069202197282162554e+245");
|
||||
yield return new("random-057", 1.11473599902801e-107, -3.7818280418450374e-124, 2.947706470424298, 1.1102230246251565e-16, false, "5.42571467975422682925830574997780998669232112672665334837711781696884981769976359625020962994886817125960256853936513836e-316");
|
||||
yield return new("random-057", 1.11473599902801e-107, -3.7818280418450374e-124, 2.947706470424298, 1.1102230246251565e-16, true, "5.42571467975437517501999094604022877715735945427690424307151034869897602551340810612085369862526735126870489392397535730e-316");
|
||||
yield return new("random-058", 6246484989.905359, 2.384185791015625e-07, -16.2711731368527, 8.881784197001252e-16, false, "4.10691323776995889606657301547394985929570580161203504385910493847342162808976418130529667013116709567801130631640988744e-160");
|
||||
yield return new("random-058", 6246484989.905359, 2.384185791015625e-07, -16.2711731368527, 8.881784197001252e-16, true, "4.10691323776987662179252699499233854373420509857239962608004348118744058498900950727749833053441074465750716495544339819e-160");
|
||||
yield return new("random-059", 7.755259330301604e+71, 2.4519928653854222e+55, -4.390182549856692, -2.220446049250313e-16, false, "2.46347805705120599234476223916224083866641095321893187649797616530246700833807653254249675540723278848667968994116727679e-316");
|
||||
yield return new("random-059", 7.755259330301604e+71, 2.4519928653854222e+55, -4.390182549856692, -2.220446049250313e-16, true, "2.46347805705129653863412206917119470982114581867456795725336673887396704141275177084768513035407527648408337003165316685e-316");
|
||||
yield return new("random-060", 9.426572367306395e+249, -3.974446316289815e+233, -0.8322001274026575, 2.7755575615628914e-17, false, "9.36075579207453934058909632876794149345779573499381868775168803708656445625533000980585049062486411442838682214380445499e-209");
|
||||
yield return new("random-060", 9.426572367306395e+249, -3.974446316289815e+233, -0.8322001274026575, 2.7755575615628914e-17, true, "9.36075579207438979545143279794823468179579990887232311742043826258574408330475478066118368542596926813658507808837862961e-209");
|
||||
yield return new("random-061", 6.665338145434483e+27, 274877906944.0, -2.6025663238851258, 1.1102230246251565e-16, false, "3.86062283022291959315703521750398787201374022027751825888326187191956385146388108357282408704433848973695604422152869677e-73");
|
||||
yield return new("random-061", 6.665338145434483e+27, 274877906944.0, -2.6025663238851258, 1.1102230246251565e-16, true, "3.86062283022289213318552395777861277012283586311566297657065116933227482220805859583781882566395616957704503142180190480e-73");
|
||||
yield return new("random-062", 4.384897356439253e-38, -1.305060893599705e-54, 1.372564308666499, 5.551115123125783e-17, false, "5.29281694814242959266782382700202150280162174657147709907184925488519805587285913611568479442182351761969737960984972041e-52");
|
||||
yield return new("random-062", 4.384897356439253e-38, -1.305060893599705e-54, 1.372564308666499, 5.551115123125783e-17, true, "5.29281694814245486625494533934748961430714083038031547341325012766129500509664783808973703062619274662179748212358889490e-52");
|
||||
yield return new("random-063", 3.7694517392051613e-128, -1.2813331809171846e-144, -1.10278759064519, 5.551115123125783e-17, false, "3.32123165679805835779453168969899956334016608735414744966194472963183473077494805700410074395231468951409651629068186771e+140");
|
||||
yield return new("random-063", 3.7694517392051613e-128, -1.2813331809171846e-144, -1.10278759064519, 5.551115123125783e-17, true, "3.32123165679811245133129004581339084535247121986313243796937734333658112622443698158326398942687626606480552226197869506e+140");
|
||||
yield return new("random-064", 1.4947898834108077e-86, 4.464794497196387e-103, -0.7744819872517898, 2.7755575615628914e-17, false, "2.95285228545287808416338637963045812203143299816243504259717361565330718051512903617329298559643677121024188948905718633e+66");
|
||||
yield return new("random-064", 1.4947898834108077e-86, 4.464794497196387e-103, -0.7744819872517898, 2.7755575615628914e-17, true, "2.95285228545289428075328958588211393767601818605103101663489799202475407381680551028066504310045330009550816841735543673e+66");
|
||||
yield return new("random-065", 4.745244009042245e+213, 1.495020541582441e+197, 1.3846948234580816, -5.551115123125783e-17, false, "7.52331263378927037580327924277321636388604201137963451210471545149773815460703814197985992314495019899158305535680996147e+295");
|
||||
yield return new("random-065", 4.745244009042245e+213, 1.495020541582441e+197, 1.3846948234580816, -5.551115123125783e-17, true, "7.52331263378947585189799496059981626504201541180445068459718851928543506211210904325975278354286814001745520333944881136e+295");
|
||||
yield return new("random-066", 6.440652706609978e+114, -2.734063405978765e+98, -2.183073065882722, 1.1102230246251565e-16, false, "2.31056107332946939748706406533914985579308968748078533326110901309080860026291026124848220429455640667391555283265916471e-251");
|
||||
yield return new("random-066", 6.440652706609978e+114, -2.734063405978765e+98, -2.183073065882722, 1.1102230246251565e-16, true, "2.31056107332940158353735556383999650008297467610359696601264395755020871537180986550801667482464325041820817951991823434e-251");
|
||||
yield return new("random-067", 1.5421293190785145e+177, -5.623642243178996e+160, 1.7059738594258969, 5.551115123125783e-17, false, "1.89802651663648270633146861194640876608583932519582159764820678948045630966337859369988782136476651127277895479504673941e+302");
|
||||
yield return new("random-067", 1.5421293190785145e+177, -5.623642243178996e+160, 1.7059738594258969, 5.551115123125783e-17, true, "1.89802651663643971976073656565658718706570512201134988865411231080606269703416011055755658369950022167973852738281281810e+302");
|
||||
yield return new("random-068", 5.8220874333356594e+262, 1.7479799754928565e+246, -0.1436354933081326, -6.938893903907228e-18, false, "1.80970711328589879663386591268389271129701476677165044171592945226658709885936201784587819291324001864972363019827021764e-38");
|
||||
yield return new("random-068", 5.8220874333356594e+262, 1.7479799754928565e+246, -0.1436354933081326, -6.938893903907228e-18, true, "1.80970711328590639432923785607775150676710262348136279472066300472232706370799956381214985003441558456663302621636959907e-38");
|
||||
yield return new("random-069", 3.795476967093157e-88, 1.3952482803738708e-104, 0.053268715081224695, -1.734723475976807e-18, false, "2.20399115636242053910063422114565083516041070189337487461666141997781058498644743162943371074270870677703994500613867432e-5");
|
||||
yield return new("random-069", 3.795476967093157e-88, 1.3952482803738708e-104, 0.053268715081224695, -1.734723475976807e-18, true, "2.20399115636241976949145512992018390854890108322062813166387111232921706791864523542840306644575437106284519714106007185e-5");
|
||||
yield return new("random-070", 3.209842165726736e-252, 1.2114454386347773e-268, 0.8412215239629043, 2.7755575615628914e-17, false, "2.74309553137947785261927662259300329934972410834860453995250796933986465542356217908480219205451660846022678403342537975e-212");
|
||||
yield return new("random-070", 3.209842165726736e-252, 1.2114454386347773e-268, 0.8412215239629043, 2.7755575615628914e-17, true, "2.74309553137952194196489117707347144500183668022415671260147636890498538026072816453087950124578550529972409423544042399e-212");
|
||||
yield return new("random-071", 5.311293695850351e+66, -1.8707220957835557e+50, 0.13580452267811036, 6.938893903907228e-18, false, "1.15234886833614943584588526132877832029753936838559712190903106025423634791904649252113922198361325564401124095946434289e+9");
|
||||
yield return new("random-071", 5.311293695850351e+66, -1.8707220957835557e+50, 0.13580452267811036, 6.938893903907228e-18, true, "1.15234886833614820733275719125572301067566717317432469584539846785607006474925388274936611479816831298073711186377569250e+9");
|
||||
yield return new("random-072", 6.43467707682675e+244, -3.032261899024822e+228, 0.8480205479733094, -2.7755575615628914e-17, false, "4.00553940789149805574303019973106270292162919846604196005670293684083357849141768212511459507762285255683906692411942024e+207");
|
||||
yield return new("random-072", 6.43467707682675e+244, -3.032261899024822e+228, 0.8480205479733094, -2.7755575615628914e-17, true, "4.00553940789156072484571184212030858206061978906306950038298140246710282449694410485862277539275502594050960697844857090e+207");
|
||||
yield return new("random-073", 5.311994532854108e-164, -1.9279358920823073e-180, -0.2618265170355586, 1.3877787807814457e-17, false, "5.61897522724294008667002902755921525760123685290100011097787221826160318134722270467270841199399301922877576840183057935e+42");
|
||||
yield return new("random-073", 5.311994532854108e-164, -1.9279358920823073e-180, -0.2618265170355586, 1.3877787807814457e-17, true, "5.61897522724296940316571027239855999292545785544317478265637491364395394581601863830302326443470817075734509327995617598e+42");
|
||||
yield return new("random-074", 3.4852179974127304e-261, -1.1282464849155185e-277, 0.8582999555480384, -2.7755575615628914e-17, false, "2.81259721410635499318218763745872682622628067349386820704393383506911243621132008756063072541589454581084525159390367290e-224");
|
||||
yield return new("random-074", 3.4852179974127304e-261, -1.1282464849155185e-277, 0.8582999555480384, -2.7755575615628914e-17, true, "2.81259721410630817540532755331563587367212302632543802886051933041267238297160700809798314055655241219320226956997595747e-224");
|
||||
yield return new("random-075", 2.0310619007659213e+159, 9.755464219737476e+142, -1.0294024767649215, -5.551115123125783e-17, false, "1.01914320144411977932987867016084273242944224948742804119604490178446283699309186168016513308344665064929508914406711810e-164");
|
||||
yield return new("random-075", 2.0310619007659213e+159, 9.755464219737476e+142, -1.0294024767649215, -5.551115123125783e-17, true, "1.01914320144414053171245900331894187549328343900982266012350220838282229870313265279679418852761251555630769976628058642e-164");
|
||||
yield return new("random-076", 2.0366934244705878e-223, 9.598059608932038e-240, 0.2583937260923773, 1.3877787807814457e-17, false, "2.87093615173165655302635659684527285238184952293573924140359034674032404783338142467305426124950354346474793967309763558e-58");
|
||||
yield return new("random-076", 2.0366934244705878e-223, 9.598059608932038e-240, 0.2583937260923773, 1.3877787807814457e-17, true, "2.87093615173167698273984796221576898595599087653528382761900947896987491636993986088429053653307827471625426743575063949e-58");
|
||||
yield return new("random-077", 5257303252144743.0, -0.25, -0.4944600294246418, -1.3877787807814457e-17, false, "1.68543128184738507418853535902939483659358564830939124660742688624363745825590799726805473491523843246459230740804306275e-8");
|
||||
yield return new("random-077", 5257303252144743.0, -0.25, -0.4944600294246418, -1.3877787807814457e-17, true, "1.68543128184738592087107349925315540073279608781825724639023280630446881198192003558203684839819823026153328880417935104e-8");
|
||||
yield return new("random-078", 1.0441305725764862e-63, 3.3735033418337674e-80, 2.4845988560461403, -1.1102230246251565e-16, false, "3.28753400885906766453369781596695943745634920524467212364527920404180385246887252732101243952624511062222929445659399430e-157");
|
||||
yield return new("random-078", 1.0441305725764862e-63, 3.3735033418337674e-80, 2.4845988560461403, -1.1102230246251565e-16, true, "3.28753400885901473386076265418794437983956400853989085386749792474777671471186564923291898744195134226909052401220739791e-157");
|
||||
yield return new("random-079", 9.48106196551313e-87, 4.464794497196387e-103, -3.0796495614784773, -1.1102230246251565e-16, false, "8.33939726959010554248451588087864677762994401838479812511986680214240743888496301613850512031007712670658861128177394850e+264");
|
||||
yield return new("random-079", 9.48106196551313e-87, 4.464794497196387e-103, -3.0796495614784773, -1.1102230246251565e-16, true, "8.33939726958992215238427941083796677883425794023678306530637745569221611731941444363049022892052405157139173324731017747e+264");
|
||||
yield return new("random-080", 2.3489635376450037e+63, -9.134385233318143e+46, -3.7309166396078353, -1.1102230246251565e-16, false, "3.70291069116515475808179799664121501130670790139407751119381343002356397409581521729989495496781332032753257631078798753e-237");
|
||||
yield return new("random-080", 2.3489635376450037e+63, -9.134385233318143e+46, -3.7309166396078353, -1.1102230246251565e-16, true, "3.70291069116521474532014097267237368198842681544255677887244599978463025521586849469598068777260609818774078994836030206e-237");
|
||||
yield return new("random-081", 1.2137936558701321e+299, -4.646927838993072e+282, -0.2958229492321156, -1.3877787807814457e-17, false, "3.34230591850427158556514353835730420602232056488083895170314354753440139445947204892647838822910874600626178399160242051e-89");
|
||||
yield return new("random-081", 1.2137936558701321e+299, -4.646927838993072e+282, -0.2958229492321156, -1.3877787807814457e-17, true, "3.34230591850430352855181047597751339187455601785112549251015766298918120325364702942999518038642768253707159481039677318e-89");
|
||||
yield return new("random-082", 9.272552433155036e-45, -3.111507638930571e-61, -6.5463427552871325, -2.220446049250313e-16, false, "1.79393156639960937841831914519656472927078668900576725274930000372538356788720378891316892482778996349309545152375126871e+288");
|
||||
yield return new("random-082", 9.272552433155036e-45, -3.111507638930571e-61, -6.5463427552871325, -2.220446049250313e-16, true, "1.79393156639956899174368266446667427125078539726064207800612175949777957255479085776779309430835768467545400484448600542e+288");
|
||||
yield return new("random-083", 3.619484344987589e-118, 1.1006568214637918e-134, -2.4127503790723783, -1.1102230246251565e-16, false, "2.27336771012158793833767345746300405362926260813269092560641715888384724369429389529584384437489499140142581301855291986e+283");
|
||||
yield return new("random-083", 3.619484344987589e-118, 1.1006568214637918e-134, -2.4127503790723783, -1.1102230246251565e-16, true, "2.27336771012151968613798467761831817119376428649460562215025753295936574304633530687709875130113638035589777732793641575e+283");
|
||||
yield return new("random-084", 3.1952587166007973e+186, 1.2076679759428932e+170, 1.6108189483802753, 5.551115123125783e-17, false, "2.66067769366225087938578022710008906112238000521547766894525439420835174497812703966483277723008348845690579799400073415e+300");
|
||||
yield return new("random-084", 3.1952587166007973e+186, 1.2076679759428932e+170, 1.6108189483802753, 5.551115123125783e-17, true, "2.66067769366218745189651349741544510185300078364055454366286362111509995755372593712757614250421188425244688591878256024e+300");
|
||||
yield return new("random-085", 21644665.146820694, -9.313225746154785e-10, -35.086654716794904, 1.7763568394002505e-15, false, "4.23717836897201559720165922877812320078896799452519679890254265728823497141331056015764391964201571748370536798047898235e-258");
|
||||
yield return new("random-085", 21644665.146820694, -9.313225746154785e-10, -35.086654716794904, 1.7763568394002505e-15, true, "4.23717836897188846852098906829669052248265056205531951544316957831339826562702793084324765815551596113708418912125474353e-258");
|
||||
yield return new("random-086", 3.2738469026656067e-15, -9.860761315262648e-32, 21.085112186415408, -8.881784197001252e-16, false, "3.83160419507659873451258968713139863944504991703277047229745058386780954483216138665106311664842755927476726424781820212e-306");
|
||||
yield return new("random-086", 3.2738469026656067e-15, -9.860761315262648e-32, 21.085112186415408, -8.881784197001252e-16, true, "3.83160419507648522995633464969311936592446563700810273931470621746679108323435904309266176486641455744052070632550196091e-306");
|
||||
yield return new("random-087", 5.64264218241876e+119, 1.7917957937422434e+103, 0.717333317651494, 2.7755575615628914e-17, false, "7.97495504161643147724334293266993846537810809432954973380389559144217051353292185432388490539250434849628176076416200857e+85");
|
||||
yield return new("random-087", 5.64264218241876e+119, 1.7917957937422434e+103, 0.717333317651494, 2.7755575615628914e-17, true, "7.97495504161637044278858165706996271937349742034081733517375704900601685075485493435998467791067077059770021671277508401e+85");
|
||||
yield return new("random-088", 1.6419800233657923e+84, -5.391989333430128e+67, -3.18270921700261, 1.1102230246251565e-16, false, "9.26771072754639495240942166576282444105312988681865203186053689757114315237617914251487387662283020832860797854934556736e-269");
|
||||
yield return new("random-088", 1.6419800233657923e+84, -5.391989333430128e+67, -3.18270921700261, 1.1102230246251565e-16, true, "9.26771072754619543089236032341209742005613658950941318683260711788747091245610585135881316060777476681634066705535624703e-269");
|
||||
yield return new("random-089", 6.829219656283384e-234, -2.7934029957198183e-250, -0.758125506205212, 2.7755575615628914e-17, false, "5.87233000359663922816624921670228484500099474206201132054517578510492013245923363335851865804340319072158428837160004016e+176");
|
||||
yield return new("random-089", 6.829219656283384e-234, -2.7934029957198183e-250, -0.758125506205212, 2.7755575615628914e-17, true, "5.87233000359672673478675048537004104260287376290913156541361324783147955732342364892383518936981561794669398486985054360e+176");
|
||||
yield return new("random-090", 1.578348182303572e-110, -7.386382894228589e-127, 0.16663603604665617, 6.938893903907228e-18, false, "5.04735400959579327864232849595576310096447817082719627595650426497748903244740079942101463936767470143150619035369441612e-19");
|
||||
yield return new("random-090", 1.578348182303572e-110, -7.386382894228589e-127, 0.16663603604665617, 6.938893903907228e-18, true, "5.04735400959580213345036511935050795621462318942151341197460150489769628169074935991510785958887253794645322193483154205e-19");
|
||||
yield return new("random-091", 3.2122152421971364e+31, -1125899906842624.0, -0.9071196814491492, 2.7755575615628914e-17, false, "2.62758886524442797473215842799508256259007616347080009686327081086077812657331969042769494200312032459381725220125595130e-29");
|
||||
yield return new("random-091", 3.2122152421971364e+31, -1125899906842624.0, -0.9071196814491492, 2.7755575615628914e-17, true, "2.62758886524442268385473558543255090868273753215360847668035509422849914899844332569263964685819852204935110020742806838e-29");
|
||||
yield return new("random-092", 1.7749918855828154e+51, -8.307674973655724e+34, -0.0530423579382589, -1.734723475976807e-18, false, "1.91258956513967271373457657232007110770016468730757348931369671294545945458114801825426940077565409790548477058775675156e-3");
|
||||
yield return new("random-092", 1.7749918855828154e+51, -8.307674973655724e+34, -0.0530423579382589, -1.734723475976807e-18, true, "1.91258956513967310525532861507864952770391105222585009689884835774310917436095761695155931835323525244461106484590321773e-3");
|
||||
yield return new("random-093", 3.2765451290030216e+59, -1.1150372599265312e+43, 2.1569580842122273, -1.1102230246251565e-16, false, "2.35644880357218568926946615487709975341629601933046597129191584398002960626660204178331779285826504388183155382829791891e+128");
|
||||
yield return new("random-093", 3.2765451290030216e+59, -1.1150372599265312e+43, 2.1569580842122273, -1.1102230246251565e-16, true, "2.35644880357222154127063235317869899640006889121881262979071632362722768029251452078709144629038628434457147640255659879e+128");
|
||||
yield return new("random-094", 2.0047803527677465e-36, -8.352389719038111e-53, 0.3972434671765325, 1.3877787807814457e-17, false, "6.59521933947450124330362945646442062215706149421706932936792600486590969593216379735183770910588890137513007801538412460e-15");
|
||||
yield return new("random-094", 2.0047803527677465e-36, -8.352389719038111e-53, 0.3972434671765325, 1.3877787807814457e-17, true, "6.59521933947450876660133483788877634428107696732443726699820322949456864870706982398877725040803958916218050692226893294e-15");
|
||||
yield return new("random-095", 7.446811474230911e+124, -2.3485425827738332e+108, 0.5407062438043025, 2.7755575615628914e-17, false, "3.30410659183203835612267603767795387679938362667237621025402344138235919880680216614155522176373741923335263749230965562e+67");
|
||||
yield return new("random-095", 7.446811474230911e+124, -2.3485425827738332e+108, 0.5407062438043025, 2.7755575615628914e-17, true, "3.30410659183201198765206868603944360741303118834805146104764792169176177950577620217880380987316243426581858629788342457e+67");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
"""Regenerate Exp reference rows using only Python's standard library.
|
||||
|
||||
Decimal.exp/ln are correctly rounded. Evaluate exact stored binary64 sums at
|
||||
180 and 260 digits and require identical 120-digit references and split inputs.
|
||||
No DD implementation, binary64 exp, or DD-rounded mathematical constants are used.
|
||||
Run from the repo root; stdout is the body of ExpReferenceData.Cases.
|
||||
"""
|
||||
from decimal import Decimal, localcontext
|
||||
import math
|
||||
import random
|
||||
|
||||
|
||||
def generate(precision):
|
||||
with localcontext() as context:
|
||||
context.prec = precision
|
||||
two = Decimal(2)
|
||||
ln2 = two.ln()
|
||||
high_ln2 = float(ln2)
|
||||
low_ln2 = float(ln2 - Decimal.from_float(high_ln2))
|
||||
tail_ln2 = float(ln2 - Decimal.from_float(high_ln2) - Decimal.from_float(low_ln2))
|
||||
inputs = [(x, 0.0) for x in [1.0, -1.0, 0.5, -0.5, 709.5, 709.781, -740.0,
|
||||
-745.131, 710.0, -746.0, 1e-30, -1e-30, 5e-324, -5e-324]]
|
||||
for high in [1.0, -1.0, 0.5, -0.5, 709.5, -740.0]:
|
||||
for low in [math.ulp(high) / 4, -math.ulp(high) / 4, 5e-324, -5e-324]:
|
||||
inputs.append((high, low))
|
||||
rng = random.Random(271828)
|
||||
for _ in range(240):
|
||||
high = rng.uniform(-745, 709.78)
|
||||
inputs.append((high, rng.choice([-1, 0, 1]) * math.ulp(high) / 4))
|
||||
# Neighbors of binary range-reduction half steps, covering both signs of k.
|
||||
for k in [-1074, -1022, -100, -1, 0, 1, 100, 1023]:
|
||||
midpoint = (Decimal(k) + Decimal('0.5')) * ln2
|
||||
high = float(midpoint)
|
||||
low = float(midpoint - Decimal.from_float(high))
|
||||
inputs.extend((high, residual) for residual in [math.nextafter(low, -math.inf), low, math.nextafter(low, math.inf)])
|
||||
# Adjacent representable low components straddling true overflow and
|
||||
# half-minimum-subnormal thresholds. Min-normal neighbors pin gradual underflow.
|
||||
for boundary in [(two ** 1024 - two ** 970).ln(), -1075 * ln2, -1022 * ln2]:
|
||||
high = float(boundary)
|
||||
low = float(boundary - Decimal.from_float(high))
|
||||
inputs.extend((high, residual) for residual in [math.nextafter(low, -math.inf), low, math.nextafter(low, math.inf)])
|
||||
rows = []
|
||||
for high, low in inputs:
|
||||
# 1100 digits preserve even a minimum-subnormal low beside these
|
||||
# bounded highs. Decimal.exp consumes this exact input before rounding.
|
||||
with localcontext() as input_context:
|
||||
input_context.prec = 1100
|
||||
exact = Decimal.from_float(high) + Decimal.from_float(low)
|
||||
result = exact.exp()
|
||||
overflow = result >= two ** 1024 - two ** 970
|
||||
underflow = result <= two ** -1075
|
||||
with localcontext() as output_context:
|
||||
output_context.prec = 120
|
||||
reference = format(+result, 'e')
|
||||
rows.append(f' yield return new({high!r}, {low!r}, "{reference}", {str(overflow).lower()}, {str(underflow).lower()});')
|
||||
return tail_ln2, rows
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
first = generate(180)
|
||||
assert first == generate(260), 'References changed with increased precision'
|
||||
print(f'// ln(2) third component: {first[0]!r}')
|
||||
print('\n'.join(first[1]))
|
||||
@@ -0,0 +1,110 @@
|
||||
"""Generate Log fixtures independently with Python's standard library.
|
||||
|
||||
Run from any directory: python3 path/to/generate_log.py [--check].
|
||||
Construct exact binary64 component sums at 2200 decimal digits, verify against
|
||||
Fraction, and require identical 120-digit Decimal.ln references at 450/650 digits.
|
||||
The C# suite also multiplies the independent ln(2) reference by integer exponents
|
||||
using BigInteger to check powers of two across every binary64 input exponent.
|
||||
"""
|
||||
from decimal import Decimal, localcontext
|
||||
from fractions import Fraction
|
||||
from pathlib import Path
|
||||
import argparse
|
||||
import math
|
||||
import random
|
||||
import sys
|
||||
|
||||
|
||||
OUTPUT = Path(__file__).with_name('LogReferenceData.cs')
|
||||
|
||||
|
||||
def exact_sum(high, low):
|
||||
with localcontext() as context:
|
||||
context.prec = 2200
|
||||
result = Decimal.from_float(high) + Decimal.from_float(low)
|
||||
assert Fraction(result) == Fraction(high) + Fraction(low), (high, low)
|
||||
return result
|
||||
|
||||
|
||||
def reference(high, low, precision):
|
||||
value = exact_sum(high, low)
|
||||
assert value > 0
|
||||
with localcontext() as context:
|
||||
context.prec = precision
|
||||
result = value.ln()
|
||||
with localcontext() as output_context:
|
||||
output_context.prec = 120
|
||||
rounded = +result
|
||||
assert abs(result - rounded) <= abs(rounded) * Decimal(2) ** -350
|
||||
return format(rounded, 'e')
|
||||
|
||||
|
||||
def inputs():
|
||||
for high in [0.5, 0.75, 1.0, 1.25, 1.5, 2.0, 3.0, 10.0, 1e-308, 1e308,
|
||||
sys.float_info.max, sys.float_info.min, math.ulp(0.0),
|
||||
3 * math.ulp(0.0), math.nextafter(sys.float_info.min, 0.0),
|
||||
math.nextafter(sys.float_info.min, math.inf),
|
||||
math.nextafter(1.0, 0.0), math.nextafter(1.0, math.inf)]:
|
||||
yield 'scalar-boundary', high, 0.0
|
||||
for scale in [-1074, -1073, -1022, -1000, -500, -1, 0, 1, 500, 1000, 1023]:
|
||||
high = math.ldexp(1.5, scale)
|
||||
for low in [math.ulp(high) / 4, -math.ulp(high) / 4]:
|
||||
yield 'binade-residual', high, low
|
||||
for high in [1.0, math.sqrt(2), 1 / math.sqrt(2), 1e-308, 1e308, sys.float_info.max]:
|
||||
for low in [math.ulp(high) / 4, -math.ulp(high) / 4, math.ulp(0.0), -math.ulp(0.0)]:
|
||||
yield 'dense-and-sparse-low', high, low
|
||||
# Same high with adjacent lows crosses the tiny-delta kernel cutoff.
|
||||
for low in [2.0 ** -54, -2.0 ** -54]:
|
||||
for neighbor in [math.nextafter(low, -math.inf), low, math.nextafter(low, math.inf)]:
|
||||
yield 'tiny-delta-transition', 1.0, neighbor
|
||||
for scale in [-53, -54, -55, -100, -500, -1000, -1022, -1073, -1074]:
|
||||
for sign in [-1, 1]:
|
||||
yield 'near-one-log', 1.0, sign * 2.0 ** scale
|
||||
# Centering transitions in both high and low, far from x=1 cancellation.
|
||||
for high in [math.sqrt(2), 1 / math.sqrt(2)]:
|
||||
for neighbor in [math.nextafter(high, 0.0), high, math.nextafter(high, math.inf)]:
|
||||
for low in [math.ulp(neighbor) / 4, -math.ulp(neighbor) / 4]:
|
||||
yield 'centering-transition', neighbor, low
|
||||
rng = random.Random(3141592)
|
||||
for index in range(256):
|
||||
high = math.ldexp(rng.uniform(1.0, 1.999), rng.randint(-1074, 1023))
|
||||
yield f'random-{index:03}', high, rng.choice([-1, 0, 1]) * math.ulp(high) / 4
|
||||
|
||||
|
||||
def generate():
|
||||
ln2 = reference(2.0, 0.0, 450)
|
||||
assert ln2 == reference(2.0, 0.0, 650)
|
||||
rows = []
|
||||
for label, high, low in inputs():
|
||||
first = reference(high, low, 450)
|
||||
assert first == reference(high, low, 650), (label, high, low)
|
||||
rows.append(f' yield return new("{label}", {high!r}, {low!r}, "{first}");')
|
||||
content = '''// Generated by generate_log.py; do not hand-edit reference literals.
|
||||
// Exact binary64 sums; Decimal.ln at 450/650 digits, rounded to 120 digits.
|
||||
using Xunit;
|
||||
|
||||
namespace Just.PreciseMath.Tests.ReferenceData;
|
||||
|
||||
internal static class LogReferenceData
|
||||
{
|
||||
''' + f' internal const string Ln2 = "{ln2}";\n\n' + ''' internal static IEnumerable<TheoryDataRow<string, double, double, string>> Cases()
|
||||
{
|
||||
''' + '\n'.join(rows) + '\n }\n}\n'
|
||||
return content, len(rows)
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(description=__doc__)
|
||||
parser.add_argument('--check', action='store_true', help='Verify fixtures without writing')
|
||||
args = parser.parse_args()
|
||||
content, count = generate()
|
||||
if args.check:
|
||||
assert OUTPUT.read_text() == content, 'Fixture is stale; regenerate it'
|
||||
print(f'Verified {count} Log references and ln(2) at 450/650 digits with exact input sums.')
|
||||
else:
|
||||
OUTPUT.write_text(content)
|
||||
print(f'Generated {count} Log references in {OUTPUT.name}.')
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
@@ -0,0 +1,43 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Generate integer Pow fixtures independently with Python's stdlib Decimal.
|
||||
|
||||
Use exact binary64 components, then Decimal integer exponentiation at 160 and
|
||||
240 significant decimal digits. Retain only rows whose floor after multiplication
|
||||
by 10**100 agrees at both precisions. Tests check both ends of the resulting
|
||||
100-decimal-place reference interval, far tighter than their DD error tolerance.
|
||||
No Python or generated data is needed when running the .NET tests.
|
||||
"""
|
||||
from decimal import Decimal, localcontext, ROUND_FLOOR
|
||||
import math
|
||||
|
||||
|
||||
def reference(high, low, exponent, precision):
|
||||
with localcontext() as context:
|
||||
context.prec = precision
|
||||
value = Decimal.from_float(high) + Decimal.from_float(low)
|
||||
result = context.power(value, exponent)
|
||||
return int((result * (Decimal(10) ** 100)).to_integral_value(rounding=ROUND_FLOOR))
|
||||
|
||||
|
||||
def main():
|
||||
inputs = [
|
||||
(1.0, math.ldexp(1.0, -54)),
|
||||
(1.0, -math.ldexp(1.0, -54)),
|
||||
(1.0 + math.ldexp(1.0, -30), math.ldexp(1.0, -84)),
|
||||
(1.0 - math.ldexp(1.0, -30), -math.ldexp(1.0, -84)),
|
||||
(1.00000003, math.ldexp(1.0, -55)),
|
||||
]
|
||||
for high, low in inputs:
|
||||
for exponent in [-2147483648, 2147483647]:
|
||||
first = reference(high, low, exponent, 160)
|
||||
second = reference(high, low, exponent, 240)
|
||||
assert first == second, (high, low, exponent)
|
||||
# Very tiny results need a relative rather than fixed-place interval;
|
||||
# these rows instead exercise the large positive-power fixture.
|
||||
if first == 0:
|
||||
continue
|
||||
print(f' [InlineData({high!r}, {low!r}, {exponent}, "{first}")]')
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -0,0 +1,151 @@
|
||||
"""Independent finite Pow fixtures; Python standard library only.
|
||||
|
||||
Run from any directory: python3 path/to/generate_real_pow.py [--check].
|
||||
Build each binary64 component sum EXACTLY at 2200 decimal digits and verify
|
||||
against Fraction. Decimal.ln/exp evaluate at 450 and 650 digits; the rounded
|
||||
120-significant-digit references must agree. Even 1 +/- 2^-1074 is retained
|
||||
before logarithm evaluation, so huge exponents can amplify sparse corrections.
|
||||
No library-under-test operations or binary64 Pow supply expected values.
|
||||
Each scalar case discards exponent low BEFORE independently evaluating its oracle.
|
||||
"""
|
||||
from decimal import Decimal, localcontext
|
||||
from fractions import Fraction
|
||||
from pathlib import Path
|
||||
import argparse
|
||||
import math
|
||||
import random
|
||||
import sys
|
||||
|
||||
|
||||
OUTPUT = Path(__file__).with_name('RealPowReferenceData.cs')
|
||||
|
||||
|
||||
def exact_sum(high, low):
|
||||
with localcontext() as context:
|
||||
context.prec = 2200
|
||||
result = Decimal.from_float(high) + Decimal.from_float(low)
|
||||
assert Fraction(result) == Fraction(high) + Fraction(low), (high, low)
|
||||
return result
|
||||
|
||||
|
||||
def inputs():
|
||||
# (label, base high, base low, exponent high, exponent low).
|
||||
rows = []
|
||||
for high in [0.125, 0.5, 1.25, 2.0, 10.0, 1e-308, 1e308,
|
||||
sys.float_info.max, sys.float_info.min, math.ulp(0.0),
|
||||
3 * math.ulp(0.0), math.nextafter(sys.float_info.min, 0.0)]:
|
||||
for power in [0.5, -0.5, 0.25, -0.25]:
|
||||
rows.append(('magnitude-fractional', high, 0.0, power, 0.0))
|
||||
for high in [0.75, 1.25, 2.0, 10.0, 1e-300, 1e300]:
|
||||
for sign in [-1, 1]:
|
||||
rows.append(('both-residuals', high, sign * math.ulp(high) / 4,
|
||||
-0.75, -sign * math.ulp(0.75) / 4))
|
||||
for low in [2.0 ** -54, -2.0 ** -54, 1e-300, -1e-300, 1e-308, -1e-308,
|
||||
math.ulp(0.0), -math.ulp(0.0)]:
|
||||
powers = [1e16, -1e16] if abs(low) > 1e-100 else [1e300, -1e300]
|
||||
if abs(low) < 1e-307:
|
||||
powers.extend([sys.float_info.max, -sys.float_info.max])
|
||||
for power in powers:
|
||||
for exponent_low in [0.0, math.ulp(power) / 4]:
|
||||
rows.append(('near-one-amplification', 1.0, low, power, exponent_low))
|
||||
# Tiny deltas on both sides of likely sparse-kernel cutoffs.
|
||||
for scale in [-26, -27, -40, -53, -100, -500, -1000, -1022, -1073]:
|
||||
for sign in [-1, 1]:
|
||||
rows.append(('sparse-scale-sweep', 1.0, sign * 2.0 ** scale,
|
||||
math.ldexp(0.75, min(-scale, 1023)), 0.125))
|
||||
# Nonzero exponent lows distinguish DD from scalar, including high integers.
|
||||
for high in [2.0, 10.0, 1e308, 1e-308]:
|
||||
for power, low in [(1.0, 2.0 ** -54), (-1.0, -2.0 ** -54),
|
||||
(0.0, math.ulp(0.0)), (0.5, 2.0 ** -55)]:
|
||||
rows.append(('exponent-low-decisive', high, 0.0, power, low))
|
||||
for power in [float(-(2 ** 31)), float(2 ** 31 - 1), float(2 ** 31),
|
||||
float(-(2 ** 31) - 1), float(2 ** 53), float(2 ** 54)]:
|
||||
for low in [-0.5, 0.0, 0.5]:
|
||||
rows.append(('integer-boundary', 1.0, 2.0 ** -54, power, low))
|
||||
# Exact DD integer parity includes low; scalar has its own (usually even) sign.
|
||||
for power, low in [(2.0 ** 53, 1.0), (2.0 ** 54, -1.0),
|
||||
(-2.0 ** 53, -1.0), (2.0 ** 54, 2.0)]:
|
||||
rows.append(('negative-integral-low-parity', -1.0, -2.0 ** -54, power, low))
|
||||
for power in [-63.0, -7.0, 7.0, 63.0]:
|
||||
rows.append(('negative-int-dispatch', -1.25, 2.0 ** -55, power, 0.0))
|
||||
# Finite range shoulders are far from ambiguous overflow/zero thresholds.
|
||||
for power in [1023.75, -1021.75, -1073.5, -1074.25]:
|
||||
rows.append(('finite-range-shoulder', 2.0, 2.0 ** -54, power, 2.0 ** -45))
|
||||
rng = random.Random(1618033)
|
||||
for index in range(96):
|
||||
high = math.ldexp(rng.uniform(1.125, 1.875), rng.randint(-1000, 1000))
|
||||
low = rng.choice([-1, 1]) * math.ulp(high) / 4
|
||||
# Binary64 log selects well-separated finite cases, NEVER their references.
|
||||
target_log = rng.uniform(-740.0, 708.0)
|
||||
power = target_log / math.log(high)
|
||||
rows.append((f'random-{index:03}', high, low, power,
|
||||
rng.choice([-1, 1]) * math.ulp(power) / 4))
|
||||
return rows
|
||||
|
||||
|
||||
def reference(high, low, power_high, power_low, precision):
|
||||
base = exact_sum(high, low)
|
||||
power = exact_sum(power_high, power_low)
|
||||
sign = 1
|
||||
if base < 0:
|
||||
assert power == power.to_integral_value(), (base, power)
|
||||
sign = -1 if int(power) % 2 else 1
|
||||
base = base.copy_abs()
|
||||
with localcontext() as context:
|
||||
context.prec = precision
|
||||
result = (base.ln() * power).exp() * sign
|
||||
# No disputed overflow boundary expectations: leave a large margin.
|
||||
assert result.copy_abs() < Decimal.from_float(sys.float_info.max) * Decimal('0.999999999999')
|
||||
with localcontext() as output_context:
|
||||
output_context.prec = 120
|
||||
rounded = +result
|
||||
# Verify a generous 2^-350 reference-relative allowance explicitly.
|
||||
assert abs(result - rounded) <= abs(rounded) * Decimal(2) ** -350
|
||||
return format(rounded, 'e')
|
||||
|
||||
|
||||
def generate():
|
||||
rows = []
|
||||
references = 0
|
||||
for label, high, low, power, power_low in inputs():
|
||||
for scalar in [False, True]:
|
||||
oracle_low = 0.0 if scalar else power_low
|
||||
first = reference(high, low, power, oracle_low, 450)
|
||||
assert first == reference(high, low, power, oracle_low, 650), (label, scalar)
|
||||
references += 1
|
||||
rows.append(f' yield return new("{label}", {high!r}, {low!r}, '
|
||||
f'{power!r}, {power_low!r}, {str(scalar).lower()}, "{first}");')
|
||||
content = '''// Generated by generate_real_pow.py; do not hand-edit reference literals.
|
||||
// Exact binary64 sums; Decimal ln/exp at 450/650 digits, rounded to 120 digits.
|
||||
// Reference uncertainty is explicitly allowed as 2^-350 relative in the tests.
|
||||
using Xunit;
|
||||
|
||||
namespace Just.PreciseMath.Tests.ReferenceData;
|
||||
|
||||
internal static class RealPowReferenceData
|
||||
{
|
||||
public static IEnumerable<TheoryDataRow<string, double, double, double, double, bool, string>> Cases()
|
||||
{
|
||||
''' + '\n'.join(rows) + '\n }\n}\n'
|
||||
return content, references
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(description=__doc__)
|
||||
parser.add_argument('--check', action='store_true', help='Verify checked-in fixture without writing it')
|
||||
args = parser.parse_args()
|
||||
# Sparse input construction sentinels include more than 1000 decimal places.
|
||||
for high, low in [(1.0, math.ulp(0.0)), (1.0, -math.ulp(0.0)),
|
||||
(sys.float_info.max, math.ulp(0.0))]:
|
||||
exact_sum(high, low)
|
||||
content, count = generate()
|
||||
if args.check:
|
||||
assert OUTPUT.read_text() == content, 'Fixture is stale; regenerate it'
|
||||
print(f'Verified {count} finite references at 450/650 digits and exact component sums.')
|
||||
else:
|
||||
OUTPUT.write_text(content)
|
||||
print(f'Generated {count} finite references in {OUTPUT.name}.')
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
@@ -75,11 +75,11 @@ DoubleDouble quarterTurn = DoubleDouble.PiOver2;
|
||||
The factors avoid deriving constants at runtime; the multiplication itself remains
|
||||
approximate DD arithmetic, so conversions are not guaranteed exact round trips.
|
||||
The list is mathematical and dimensionless, not a table of unit-dependent physical
|
||||
constants. Precomputed logarithms do not imply a general `Log` function is implemented.
|
||||
constants. The natural logarithm function is provided separately by `DDMath.Log`.
|
||||
|
||||
## Mathematical functions
|
||||
|
||||
The initial `DDMath` static class provides:
|
||||
The `DDMath` static class provides:
|
||||
|
||||
- `Abs(DoubleDouble)`: preserves both components, maps either signed zero to
|
||||
positive zero and either infinity to positive infinity, and returns canonical NaN.
|
||||
@@ -88,12 +88,40 @@ The initial `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.
|
||||
- `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.
|
||||
Any value to power zero is one (including NaN and signed zero). Other NaNs
|
||||
propagate; zero/infinity signs follow integer-power parity and exponent sign.
|
||||
- `Pow(DoubleDouble, double)` and `Pow(DoubleDouble, DoubleDouble)`: arbitrary
|
||||
real powers, retaining the base's low component and, for the DD overload, the
|
||||
exponent's low component. For finite exponents, negative finite bases require integers;
|
||||
integrality and odd/even parity use the complete exponent, even above `2^53`.
|
||||
Integer-valued exponents within `int` range reuse the integer implementation.
|
||||
Other finite cases share `Log`'s range-scaled finite kernel, followed by `Exp`.
|
||||
Near-one bases retain tiny low components before multiplication by large powers.
|
||||
- `Exp(DoubleDouble)`: binary range reduction with three components of `ln(2)`,
|
||||
followed by a [12/12] Padé approximation and power-of-two scaling. Both input
|
||||
components affect range boundaries; representable subnormals are retained.
|
||||
Either zero maps to one, negative infinity to positive zero, positive infinity
|
||||
to positive infinity, and NaN to canonical NaN.
|
||||
- `Log(DoubleDouble)`: natural logarithm using binary range reduction and a
|
||||
centered atanh series. The bounded mantissa avoids denominator overflow for
|
||||
large inputs; a separate near-one path retains even minimum-subnormal low
|
||||
components. Either zero maps to negative infinity, one to positive zero,
|
||||
positive infinity to itself, and negative nonzero inputs or NaN to canonical NaN.
|
||||
|
||||
```csharp
|
||||
using Just.PreciseMath;
|
||||
|
||||
DoubleDouble root = DDMath.Sqrt(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));
|
||||
DoubleDouble logarithm = DDMath.Log(new DoubleDouble(10.0));
|
||||
DoubleDouble fractionalPower = DDMath.Pow(new DoubleDouble(2.0), 0.5);
|
||||
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
|
||||
@@ -102,6 +130,44 @@ exponent, boundary neighbors, both signs of the low component, and exact binary
|
||||
squares. 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
|
||||
120-digit decimal references, requiring agreement at 450 and 650 digits. They
|
||||
check `2^-100` relative error plus one minimum binary64 subnormal, with an explicit
|
||||
reference-rounding allowance. Powers of two cover every finite binary64 exponent;
|
||||
additional tests cover extreme magnitudes, near-one cancellation, sparse lows of
|
||||
either sign, and range-reduction transitions. This is sampled approximate accuracy,
|
||||
not a universal error proof or a correct-rounding guarantee.
|
||||
|
||||
Exponential tests use independent high-precision decimal references evaluated at
|
||||
two precisions, with exact integer comparisons of the stored component sum. They
|
||||
check `2^-100` relative error plus one minimum binary64 subnormal, with a separately
|
||||
bounded reference-rounding allowance. Integer-power tests use exact rational
|
||||
references and high-precision fixtures for large exponents; their tested absolute
|
||||
error bound is `|exact result| * (|exponent| + 1) * 2^-100 + 2^-1074`, not uniform
|
||||
relative accuracy independent of the exponent. Both functions are approximate;
|
||||
precision decreases near underflow and approximation can affect results extremely
|
||||
close to a rounding boundary. Final scaling uses the existing allocating exact
|
||||
boundary machinery where necessary. No performance measurements are claimed.
|
||||
|
||||
For real powers, `x^±0 = 1` and `1^y = 1`, including NaN in the other operand;
|
||||
other NaNs propagate. Infinite exponents compare the complete `|x|` with one,
|
||||
with `(-1)^±∞ = 1`. Zero and infinite bases yield a negative sign only for odd
|
||||
integer exponents; negative powers exchange zero and infinity. Finite negative
|
||||
bases with non-integer finite exponents return canonical NaN.
|
||||
|
||||
Real-power reference tests check `2^-90` relative error plus one minimum binary64
|
||||
subnormal for the logarithm/Exp path, with an explicit reference-rounding allowance.
|
||||
Integer dispatch retains the exponent-dependent bound above. These are tested
|
||||
approximate-accuracy contracts, not universal error proofs or correct-rounding
|
||||
guarantees. Reference inputs are exact component sums; logarithms/exponentials
|
||||
are independently evaluated at 450 and 650 decimal digits.
|
||||
|
||||
**Known real-power limitations:** extremely close to the range boundaries, the
|
||||
logarithm/Exp path can return infinity for a mathematically finite result, or a
|
||||
minimum subnormal where zero is expected. The latter can also break monotonicity
|
||||
across integer-exponent dispatch. These issues remain unresolved; passing the
|
||||
sampled error bounds does not guarantee correct range decisions for every input.
|
||||
|
||||
## Conversions and formatting
|
||||
|
||||
- Explicit conversions support `double`, `float`, `int`, `long`, and `decimal`
|
||||
@@ -189,8 +255,8 @@ bool success = DoubleDouble.TryParse("1.25e-2".AsSpan(), CultureInfo.InvariantCu
|
||||
|
||||
## Deferred scope
|
||||
|
||||
The `DDMath.Pow`, `DDMath.Exp`, and `DDMath.Log` functions remain unimplemented.
|
||||
Generic-math interfaces beyond `ISignedNumber`,
|
||||
Natural `DDMath.Log`, `Exp`, and all three `Pow` overloads are implemented.
|
||||
Logarithms in other bases, generic-math interfaces beyond `ISignedNumber`,
|
||||
additional text formats/general round-trip formatting, and non-arithmetic performance
|
||||
benchmarks remain deferred.
|
||||
Replacing allocating arithmetic boundary fallbacks is also deferred; the current
|
||||
|
||||
Reference in New Issue
Block a user