From 196eaf499bb295ea6938c6445e0e1a7016992de0 Mon Sep 17 00:00:00 2001 From: Marcelo Cantos <13160581+anzdaddy@users.noreply.github.com> Date: Mon, 18 Nov 2024 16:44:19 +1100 Subject: [PATCH 01/68] Cleanup small int init + fix decimal_debug bugs --- decimal64.go | 104 +++++++++++++++++++++--------------------- decimal64_debug.go | 18 ++++++-- decimal64_ndebug.go | 13 ++++-- decimal64fmt.go | 2 +- decimal64math.go | 2 +- decimal64math_test.go | 21 +++++---- decimal64scan_test.go | 16 +++---- decimalSuite_test.go | 2 - 8 files changed, 95 insertions(+), 83 deletions(-) diff --git a/decimal64.go b/decimal64.go index 575718c..8faeb3d 100644 --- a/decimal64.go +++ b/decimal64.go @@ -108,56 +108,56 @@ func (ctx Rounding) round(significand uint64, rndStatus discardedDigit) uint64 { var ErrNaN64 error = Error("sNaN64") var small64s = []Decimal64{ - newFromPartsRaw(1, -14, 1*decimal64Base), - - newFromPartsRaw(1, -15, 9*decimal64Base), - newFromPartsRaw(1, -15, 8*decimal64Base), - newFromPartsRaw(1, -15, 7*decimal64Base), - newFromPartsRaw(1, -15, 6*decimal64Base), - newFromPartsRaw(1, -15, 5*decimal64Base), - newFromPartsRaw(1, -15, 4*decimal64Base), - newFromPartsRaw(1, -15, 3*decimal64Base), - newFromPartsRaw(1, -15, 2*decimal64Base), - newFromPartsRaw(1, -15, 1*decimal64Base), + newFromPartsStr(1, -14, 1*decimal64Base, "-10"), + + newFromPartsStr(1, -15, 9*decimal64Base, "-9"), + newFromPartsStr(1, -15, 8*decimal64Base, "-8"), + newFromPartsStr(1, -15, 7*decimal64Base, "-7"), + newFromPartsStr(1, -15, 6*decimal64Base, "-6"), + newFromPartsStr(1, -15, 5*decimal64Base, "-5"), + newFromPartsStr(1, -15, 4*decimal64Base, "-4"), + newFromPartsStr(1, -15, 3*decimal64Base, "-3"), + newFromPartsStr(1, -15, 2*decimal64Base, "-2"), + newFromPartsStr(1, -15, 1*decimal64Base, "-1"), // TODO: Decimal64{}? - newFromPartsRaw(0, 0, 0), - - newFromPartsRaw(0, -15, 1*decimal64Base), - newFromPartsRaw(0, -15, 2*decimal64Base), - newFromPartsRaw(0, -15, 3*decimal64Base), - newFromPartsRaw(0, -15, 4*decimal64Base), - newFromPartsRaw(0, -15, 5*decimal64Base), - newFromPartsRaw(0, -15, 6*decimal64Base), - newFromPartsRaw(0, -15, 7*decimal64Base), - newFromPartsRaw(0, -15, 8*decimal64Base), - newFromPartsRaw(0, -15, 9*decimal64Base), - - newFromPartsRaw(0, -14, 1*decimal64Base), -} - -var small64Strings = map[Decimal64]string{ - small64s[0]: "-10", - small64s[1]: "-9", - small64s[2]: "-8", - small64s[3]: "-7", - small64s[4]: "-6", - small64s[5]: "-5", - small64s[6]: "-4", - small64s[7]: "-3", - small64s[8]: "-2", - small64s[9]: "-1", - small64s[10]: "0", - small64s[11]: "1", - small64s[12]: "2", - small64s[13]: "3", - small64s[14]: "4", - small64s[15]: "5", - small64s[16]: "6", - small64s[17]: "7", - small64s[18]: "8", - small64s[19]: "9", - small64s[20]: "10", + newFromPartsStr(0, 0, 0, "0"), + + newFromPartsStr(0, -15, 1*decimal64Base, "1"), + newFromPartsStr(0, -15, 2*decimal64Base, "2"), + newFromPartsStr(0, -15, 3*decimal64Base, "3"), + newFromPartsStr(0, -15, 4*decimal64Base, "4"), + newFromPartsStr(0, -15, 5*decimal64Base, "5"), + newFromPartsStr(0, -15, 6*decimal64Base, "6"), + newFromPartsStr(0, -15, 7*decimal64Base, "7"), + newFromPartsStr(0, -15, 8*decimal64Base, "8"), + newFromPartsStr(0, -15, 9*decimal64Base, "9"), + + newFromPartsStr(0, -14, 1*decimal64Base, "10"), +} + +var small64Strings = map[uint64]string{ + small64s[0].bits: "-10", + small64s[1].bits: "-9", + small64s[2].bits: "-8", + small64s[3].bits: "-7", + small64s[4].bits: "-6", + small64s[5].bits: "-5", + small64s[6].bits: "-4", + small64s[7].bits: "-3", + small64s[8].bits: "-2", + small64s[9].bits: "-1", + small64s[10].bits: "0", + small64s[11].bits: "1", + small64s[12].bits: "2", + small64s[13].bits: "3", + small64s[14].bits: "4", + small64s[15].bits: "5", + small64s[16].bits: "6", + small64s[17].bits: "7", + small64s[18].bits: "8", + small64s[19].bits: "9", + small64s[20].bits: "10", } // New64FromInt64 returns a new Decimal64 with the given value. @@ -258,8 +258,8 @@ func countTrailingZeros(n uint64) int { return zeros } -func new64Raw(bits uint64) Decimal64 { - return Decimal64{bits: bits} +func newFromPartsStr(sign int, exp int, significand uint64, s string) Decimal64 { + return new64str(newFromPartsRaw(sign, exp, significand).bits, s) } func newFromParts(sign int, exp int, significand uint64) Decimal64 { @@ -272,12 +272,12 @@ func newFromPartsRaw(sign int, exp int, significand uint64) Decimal64 { if significand < 0x8<<50 { // s EEeeeeeeee (0)ttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt // EE ∈ {00, 01, 10} - return new64Raw(s | uint64(exp+expOffset)<<(63-10) | significand) + return Decimal64{bits: s | uint64(exp+expOffset)<<(63-10) | significand} } // s 11EEeeeeeeee (100)t tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt // EE ∈ {00, 01, 10} significand &= 0x8<<50 - 1 - return new64Raw(s | uint64(0xc00|(exp+expOffset))<<(63-12) | significand) + return Decimal64{bits: s | uint64(0xc00|(exp+expOffset))<<(63-12) | significand} } func (d Decimal64) parts() (fl flavor, sign int, exp int, significand uint64) { diff --git a/decimal64_debug.go b/decimal64_debug.go index 7bcfac5..819531b 100644 --- a/decimal64_debug.go +++ b/decimal64_debug.go @@ -17,15 +17,23 @@ type Decimal64 struct { bits uint64 } -// This should be the only point at which Decimal64 instances are constructed raw. -// The verbose construction below makes it easy to audit accidental raw cosntruction. -// A search for (? Date: Mon, 18 Nov 2024 16:46:09 +1100 Subject: [PATCH 02/68] forgot to git add some stuff --- decimal64.go | 48 +++++++++++++++++++++------------------------ decimal64_ndebug.go | 2 +- decimal64fmt.go | 2 +- decimal64math.go | 2 +- 4 files changed, 25 insertions(+), 29 deletions(-) diff --git a/decimal64.go b/decimal64.go index 8faeb3d..a82eab6 100644 --- a/decimal64.go +++ b/decimal64.go @@ -108,32 +108,32 @@ func (ctx Rounding) round(significand uint64, rndStatus discardedDigit) uint64 { var ErrNaN64 error = Error("sNaN64") var small64s = []Decimal64{ - newFromPartsStr(1, -14, 1*decimal64Base, "-10"), - - newFromPartsStr(1, -15, 9*decimal64Base, "-9"), - newFromPartsStr(1, -15, 8*decimal64Base, "-8"), - newFromPartsStr(1, -15, 7*decimal64Base, "-7"), - newFromPartsStr(1, -15, 6*decimal64Base, "-6"), - newFromPartsStr(1, -15, 5*decimal64Base, "-5"), - newFromPartsStr(1, -15, 4*decimal64Base, "-4"), - newFromPartsStr(1, -15, 3*decimal64Base, "-3"), - newFromPartsStr(1, -15, 2*decimal64Base, "-2"), - newFromPartsStr(1, -15, 1*decimal64Base, "-1"), + new64str(newFromPartsRaw(1, -14, 1*decimal64Base).bits, "-10"), + + new64str(newFromPartsRaw(1, -15, 9*decimal64Base).bits, "-9"), + new64str(newFromPartsRaw(1, -15, 8*decimal64Base).bits, "-8"), + new64str(newFromPartsRaw(1, -15, 7*decimal64Base).bits, "-7"), + new64str(newFromPartsRaw(1, -15, 6*decimal64Base).bits, "-6"), + new64str(newFromPartsRaw(1, -15, 5*decimal64Base).bits, "-5"), + new64str(newFromPartsRaw(1, -15, 4*decimal64Base).bits, "-4"), + new64str(newFromPartsRaw(1, -15, 3*decimal64Base).bits, "-3"), + new64str(newFromPartsRaw(1, -15, 2*decimal64Base).bits, "-2"), + new64str(newFromPartsRaw(1, -15, 1*decimal64Base).bits, "-1"), // TODO: Decimal64{}? - newFromPartsStr(0, 0, 0, "0"), + new64str(newFromPartsRaw(0, 0, 0).bits, "0"), - newFromPartsStr(0, -15, 1*decimal64Base, "1"), - newFromPartsStr(0, -15, 2*decimal64Base, "2"), - newFromPartsStr(0, -15, 3*decimal64Base, "3"), - newFromPartsStr(0, -15, 4*decimal64Base, "4"), - newFromPartsStr(0, -15, 5*decimal64Base, "5"), - newFromPartsStr(0, -15, 6*decimal64Base, "6"), - newFromPartsStr(0, -15, 7*decimal64Base, "7"), - newFromPartsStr(0, -15, 8*decimal64Base, "8"), - newFromPartsStr(0, -15, 9*decimal64Base, "9"), + new64str(newFromPartsRaw(0, -15, 1*decimal64Base).bits, "1"), + new64str(newFromPartsRaw(0, -15, 2*decimal64Base).bits, "2"), + new64str(newFromPartsRaw(0, -15, 3*decimal64Base).bits, "3"), + new64str(newFromPartsRaw(0, -15, 4*decimal64Base).bits, "4"), + new64str(newFromPartsRaw(0, -15, 5*decimal64Base).bits, "5"), + new64str(newFromPartsRaw(0, -15, 6*decimal64Base).bits, "6"), + new64str(newFromPartsRaw(0, -15, 7*decimal64Base).bits, "7"), + new64str(newFromPartsRaw(0, -15, 8*decimal64Base).bits, "8"), + new64str(newFromPartsRaw(0, -15, 9*decimal64Base).bits, "9"), - newFromPartsStr(0, -14, 1*decimal64Base, "10"), + new64str(newFromPartsRaw(0, -14, 1*decimal64Base).bits, "10"), } var small64Strings = map[uint64]string{ @@ -258,10 +258,6 @@ func countTrailingZeros(n uint64) int { return zeros } -func newFromPartsStr(sign int, exp int, significand uint64, s string) Decimal64 { - return new64str(newFromPartsRaw(sign, exp, significand).bits, s) -} - func newFromParts(sign int, exp int, significand uint64) Decimal64 { return new64(newFromPartsRaw(sign, exp, significand).bits) } diff --git a/decimal64_ndebug.go b/decimal64_ndebug.go index c678523..9e956a7 100644 --- a/decimal64_ndebug.go +++ b/decimal64_ndebug.go @@ -11,7 +11,7 @@ type Decimal64 struct { } func new64(bits uint64) Decimal64 { - return new64nostr(bits) + return Decimal64{bits: bits} } func new64str(bits uint64, _ string) Decimal64 { diff --git a/decimal64fmt.go b/decimal64fmt.go index 037291d..253563e 100644 --- a/decimal64fmt.go +++ b/decimal64fmt.go @@ -96,7 +96,7 @@ func (d Decimal64) Append(buf []byte, format byte, prec int) []byte { } func precScale(prec int) Decimal64 { - return newFromPartsRaw(0, -15-max(0, prec), decimal64Base) + return new64(newFromPartsRaw(0, -15-max(0, prec), decimal64Base).bits) } // Append appends the text representation of d to buf. diff --git a/decimal64math.go b/decimal64math.go index 6ac8301..7e38265 100644 --- a/decimal64math.go +++ b/decimal64math.go @@ -555,7 +555,7 @@ func (ctx Context64) roundRaw(d, e Decimal64) Decimal64 { } var ( - zero64Raw = newFromPartsRaw(0, 0, 0) + zero64Raw = new64nostr(newFromPartsRaw(0, 0, 0).bits) qNaN64Raw = new64nostr(0x7c << 56) ) From 84d11897aece367ade79e5e5bba2bd20d822af77 Mon Sep 17 00:00:00 2001 From: Marcelo Cantos <13160581+anzdaddy@users.noreply.github.com> Date: Mon, 18 Nov 2024 16:51:22 +1100 Subject: [PATCH 03/68] replace hardcoded map with loop-constructed map --- decimal64.go | 31 ++++++++----------------------- 1 file changed, 8 insertions(+), 23 deletions(-) diff --git a/decimal64.go b/decimal64.go index a82eab6..1eed077 100644 --- a/decimal64.go +++ b/decimal64.go @@ -4,6 +4,7 @@ import ( "fmt" "math" "math/bits" + "strconv" ) type discardedDigit int @@ -136,29 +137,13 @@ var small64s = []Decimal64{ new64str(newFromPartsRaw(0, -14, 1*decimal64Base).bits, "10"), } -var small64Strings = map[uint64]string{ - small64s[0].bits: "-10", - small64s[1].bits: "-9", - small64s[2].bits: "-8", - small64s[3].bits: "-7", - small64s[4].bits: "-6", - small64s[5].bits: "-5", - small64s[6].bits: "-4", - small64s[7].bits: "-3", - small64s[8].bits: "-2", - small64s[9].bits: "-1", - small64s[10].bits: "0", - small64s[11].bits: "1", - small64s[12].bits: "2", - small64s[13].bits: "3", - small64s[14].bits: "4", - small64s[15].bits: "5", - small64s[16].bits: "6", - small64s[17].bits: "7", - small64s[18].bits: "8", - small64s[19].bits: "9", - small64s[20].bits: "10", -} +var small64Strings = func() map[uint64]string { + m := make(map[uint64]string, len(small64s)) + for i := -10; i <= 10; i++ { + m[small64s[10+i].bits] = strconv.Itoa(i) + } + return m +}() // New64FromInt64 returns a new Decimal64 with the given value. func New64FromInt64(i int64) Decimal64 { From fca4f1726eb40f5e2c45645bdf93cd2197648d9b Mon Sep 17 00:00:00 2001 From: Marcelo Cantos <13160581+anzdaddy@users.noreply.github.com> Date: Mon, 18 Nov 2024 17:41:28 +1100 Subject: [PATCH 04/68] replace testify with custom assertions --- decimal64_test.go | 190 ++++++++++--------- decimal64const_test.go | 14 +- decimal64decParts_test.go | 25 ++- decimal64fmt_test.go | 92 +++++---- decimal64gob_test.go | 14 +- decimal64json_test.go | 18 +- decimal64marshal_test.go | 23 +-- decimal64math_test.go | 379 +++++++++++++++++++------------------- decimal64scan_test.go | 40 ++-- decimalSuite_test.go | 14 +- flakyScanState_test.go | 4 +- go.mod | 7 - go.sum | 6 - stringScanner_test.go | 36 ++-- uint128_test.go | 72 ++++---- util_test.go | 99 +++++++++- 16 files changed, 562 insertions(+), 471 deletions(-) diff --git a/decimal64_test.go b/decimal64_test.go index f8ca823..50d1fc8 100644 --- a/decimal64_test.go +++ b/decimal64_test.go @@ -4,16 +4,15 @@ import ( "math" "strings" "testing" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" ) func TestNew64FromInt64(t *testing.T) { + t.Parallel() + for i := int64(-1000); i <= 1000; i++ { d := New64FromInt64(i) j := d.Int64() - require.EqualValues(t, i, j, "%d", i) + equal(t, i, j) } // Test the neighborhood of powers of two up to the high-significand @@ -23,18 +22,20 @@ func TestNew64FromInt64(t *testing.T) { for i := base - 10; i <= base+10; i++ { d := New64FromInt64(i) j := d.Int64() - require.EqualValues(t, i, j, "1<<%d + %d", e, i) + equal(t, i, j) } } } func TestNew64FromInt64Big(t *testing.T) { + t.Parallel() + const limit = int64(decimal64Base) const step = limit / 997 for i := -int64(limit); i <= limit; i += step { d := New64FromInt64(i) j := d.Int64() - require.EqualValues(t, i, j, "%d", i) + equal(t, i, j) } } @@ -43,7 +44,7 @@ func TestDecimal64Parse(t *testing.T) { test := func(expected string, source string) { t.Helper() - assert.Equal(t, strings.TrimSpace(expected), MustParse64(source).String()) + equal(t, strings.TrimSpace(expected), MustParse64(source).String()) } test("0", "0") @@ -60,7 +61,7 @@ func TestDecimal64ParseHalfEvenOdd(t *testing.T) { ctx := Context64{Rounding: HalfEven} test := func(expected string, source string) { t.Helper() - assert.Equal(t, strings.TrimSpace(expected), ctx.MustParse(source).String()) + equal(t, strings.TrimSpace(expected), ctx.MustParse(source).String()) } test("1.000000000000007 ", "1.000000000000007") @@ -80,7 +81,7 @@ func TestDecimal64ParseHalfEvenEven(t *testing.T) { ctx := Context64{Rounding: HalfEven} test := func(expected string, source string) { t.Helper() - assert.Equal(t, strings.TrimSpace(expected), ctx.MustParse(source).String()) + equal(t, strings.TrimSpace(expected), ctx.MustParse(source).String()) } test("1.000000000000008 ", "1.000000000000008") @@ -100,7 +101,7 @@ func TestDecimal64ParseHalfUp(t *testing.T) { ctx := Context64{Rounding: HalfUp} test := func(expected string, source string) { t.Helper() - assert.Equal(t, strings.TrimSpace(expected), ctx.MustParse(source).String()) + equal(t, strings.TrimSpace(expected), ctx.MustParse(source).String()) } test("0", "0") @@ -145,7 +146,7 @@ func TestDecimal64ParseDown(t *testing.T) { ctx := Context64{Rounding: Down} test := func(expected string, source string) { t.Helper() - assert.Equal(t, strings.TrimSpace(expected), ctx.MustParse(source).String()) + equal(t, strings.TrimSpace(expected), ctx.MustParse(source).String()) } test("0", "0") @@ -185,132 +186,139 @@ func TestDecimal64ParseDown(t *testing.T) { } func TestDecimal64Float64(t *testing.T) { - require := require.New(t) + t.Parallel() - require.Equal(-1.0, NegOne64.Float64()) - require.Equal(0.0, Zero64.Float64()) - require.Equal(1.0, One64.Float64()) - require.Equal(10.0, New64FromInt64(10).Float64()) + equal(t, -1.0, NegOne64.Float64()) + equal(t, 0.0, Zero64.Float64()) + equal(t, 1.0, One64.Float64()) + equal(t, 10.0, New64FromInt64(10).Float64()) oneThird := One64.Quo(New64FromInt64(3)) one := oneThird.Add(oneThird).Add(oneThird) - require.InEpsilon(oneThird.Float64(), 1.0/3.0, 0.00000001) - require.InEpsilon(1.0, one.Float64(), 0.00000001) + epsilon(t, oneThird.Float64(), 1.0/3.0) + epsilon(t, 1.0, one.Float64()) - require.True(math.IsNaN(QNaN64.Float64())) - require.Panics(func() { SNaN64.Float64() }) - require.Equal(math.Inf(1), Infinity64.Float64()) - require.Equal(math.Inf(-1), NegInfinity64.Float64()) + check(t, math.IsNaN(QNaN64.Float64())) + panics(t, func() { SNaN64.Float64() }) + equal(t, math.Inf(1), Infinity64.Float64()) + equal(t, math.Inf(-1), NegInfinity64.Float64()) } func TestDecimal64Int64(t *testing.T) { t.Parallel() - assert.EqualValues(t, -1, NegOne64.Int64()) - assert.EqualValues(t, 0, Zero64.Int64()) - assert.EqualValues(t, -0, NegZero64.Int64()) - assert.EqualValues(t, 1, One64.Int64()) - assert.EqualValues(t, 10, New64FromInt64(10).Int64()) + equal(t, -1, NegOne64.Int64()) + equal(t, 0, Zero64.Int64()) + equal(t, -0, NegZero64.Int64()) + equal(t, 1, One64.Int64()) + equal(t, 10, New64FromInt64(10).Int64()) - assert.EqualValues(t, 0, QNaN64.Int64()) + equal(t, 0, QNaN64.Int64()) - assert.EqualValues(t, int64(math.MaxInt64), Infinity64.Int64()) - assert.EqualValues(t, int64(math.MinInt64), NegInfinity64.Int64()) - assert.EqualValues(t, int64(math.MaxInt64), MustParse64("1e100").Int64()) - assert.EqualValues(t, int64(math.MaxInt64), MustParse64("91234567890123456789e20").Int64()) + equal(t, int64(math.MaxInt64), Infinity64.Int64()) + equal(t, int64(math.MinInt64), NegInfinity64.Int64()) + equal(t, int64(math.MaxInt64), MustParse64("1e100").Int64()) + equal(t, int64(math.MaxInt64), MustParse64("91234567890123456789e20").Int64()) } func TestDecimal64IsInf(t *testing.T) { - require.True(t, Infinity64.IsInf()) - require.True(t, NegInfinity64.IsInf()) - - require.False(t, Zero64.IsInf()) - require.False(t, NegZero64.IsInf()) - require.False(t, QNaN64.IsInf()) - require.False(t, SNaN64.IsInf()) - require.False(t, New64FromInt64(42).IsInf()) - require.False(t, New64FromInt64(-42).IsInf()) + t.Parallel() + + check(t, Infinity64.IsInf()) + check(t, NegInfinity64.IsInf()) + + check(t, !Zero64.IsInf()) + check(t, !NegZero64.IsInf()) + check(t, !QNaN64.IsInf()) + check(t, !SNaN64.IsInf()) + check(t, !New64FromInt64(42).IsInf()) + check(t, !New64FromInt64(-42).IsInf()) } func TestDecimal64IsNaN(t *testing.T) { - require.True(t, QNaN64.IsNaN()) - require.True(t, SNaN64.IsNaN()) - - require.True(t, QNaN64.IsQNaN()) - require.False(t, SNaN64.IsQNaN()) - - require.False(t, QNaN64.IsSNaN()) - require.True(t, SNaN64.IsSNaN()) - - for _, n := range []Decimal64{ - Infinity64, - NegInfinity64, - Zero64, - NegZero64, - New64FromInt64(42), - New64FromInt64(-42), - } { - require.False(t, n.IsNaN(), "%v", n) - require.False(t, n.IsQNaN(), "%v", n) - require.False(t, n.IsSNaN(), "%v", n) + t.Parallel() + + check(t, QNaN64.IsNaN()) + check(t, SNaN64.IsNaN()) + + check(t, QNaN64.IsQNaN()) + check(t, !SNaN64.IsQNaN()) + + check(t, !QNaN64.IsSNaN()) + check(t, SNaN64.IsSNaN()) + + notNaN := func(n Decimal64) { + check(t, !n.IsNaN()) + check(t, !n.IsQNaN()) + check(t, !n.IsSNaN()) } + notNaN(Infinity64) + notNaN(NegInfinity64) + notNaN(Zero64) + notNaN(NegZero64) + notNaN(New64FromInt64(42)) + notNaN(New64FromInt64(-42)) + } func TestDecimal64IsInt(t *testing.T) { - require := require.New(t) + t.Parallel() fortyTwo := New64FromInt64(42) - require.True(Zero64.IsInt()) - require.True(fortyTwo.IsInt()) - require.True(fortyTwo.Mul(fortyTwo).IsInt()) - require.True(fortyTwo.Quo(fortyTwo).IsInt()) - require.False(One64.Quo(fortyTwo).IsInt()) + check(t, Zero64.IsInt()) + check(t, fortyTwo.IsInt()) + check(t, fortyTwo.Mul(fortyTwo).IsInt()) + check(t, fortyTwo.Quo(fortyTwo).IsInt()) + check(t, !One64.Quo(fortyTwo).IsInt()) - require.False(Infinity64.IsInt()) - require.False(NegInfinity64.IsInt()) - require.False(QNaN64.IsInt()) - require.False(SNaN64.IsInt()) + check(t, !Infinity64.IsInt()) + check(t, !NegInfinity64.IsInt()) + check(t, !QNaN64.IsInt()) + check(t, !SNaN64.IsInt()) } func TestDecimal64Sign(t *testing.T) { - require := require.New(t) + t.Parallel() - require.Equal(0, Zero64.Sign()) - require.Equal(0, NegZero64.Sign()) - require.Equal(1, One64.Sign()) - require.Equal(-1, NegOne64.Sign()) + equal(t, 0, Zero64.Sign()) + equal(t, 0, NegZero64.Sign()) + equal(t, 1, One64.Sign()) + equal(t, -1, NegOne64.Sign()) } func TestDecimal64Signbit(t *testing.T) { - require := require.New(t) + t.Parallel() - require.Equal(false, Zero64.Signbit()) - require.Equal(true, NegZero64.Signbit()) - require.Equal(false, One64.Signbit()) - require.Equal(true, NegOne64.Signbit()) + check(t, !Zero64.Signbit()) + check(t, NegZero64.Signbit()) + check(t, !One64.Signbit()) + check(t, NegOne64.Signbit()) } func TestDecimal64isZero(t *testing.T) { - require := require.New(t) + t.Parallel() - require.Equal(true, Zero64.IsZero()) - require.Equal(true, NegZero64.IsZero()) - require.Equal(false, One64.IsZero()) + check(t, Zero64.IsZero()) + check(t, NegZero64.IsZero()) + check(t, !One64.IsZero()) } func TestNumDecimalDigits(t *testing.T) { - require := require.New(t) + t.Parallel() + for i, num := range tenToThe { for j := uint64(1); j < 10 && i < 19; j++ { - require.Equal(i+1, numDecimalDigits(num*j)) + equal(t, i+1, numDecimalDigits(num*j)) } } } func TestIsSubnormal(t *testing.T) { - require.Equal(t, true, MustParse64("0.1E-383").IsSubnormal()) - require.Equal(t, true, MustParse64("-0.1E-383").IsSubnormal()) - require.Equal(t, false, MustParse64("NaN10").IsSubnormal()) - require.Equal(t, false, New64FromInt64(42).IsSubnormal()) + t.Parallel() + + check(t, MustParse64("0.1E-383").IsSubnormal()) + check(t, MustParse64("-0.1E-383").IsSubnormal()) + check(t, !MustParse64("NaN10").IsSubnormal()) + check(t, !New64FromInt64(42).IsSubnormal()) } diff --git a/decimal64const_test.go b/decimal64const_test.go index 4f05d4b..ded89f2 100644 --- a/decimal64const_test.go +++ b/decimal64const_test.go @@ -1,15 +1,15 @@ package decimal -import ( - "testing" - - "github.com/stretchr/testify/require" -) +import "testing" func TestPi64(t *testing.T) { - require.Equal(t, "3.141592653589793", Pi64.String()) + t.Parallel() + + equal(t, "3.141592653589793", Pi64.String()) } func TestE64(t *testing.T) { - require.Equal(t, "2.718281828459045", E64.String()) + t.Parallel() + + equal(t, "2.718281828459045", E64.String()) } diff --git a/decimal64decParts_test.go b/decimal64decParts_test.go index 26dcde3..9752532 100644 --- a/decimal64decParts_test.go +++ b/decimal64decParts_test.go @@ -1,41 +1,40 @@ package decimal -import ( - "testing" - - "github.com/stretchr/testify/require" -) +import "testing" func TestPartsInf(t *testing.T) { + t.Parallel() + var a decParts a.unpack(Infinity64) - require.True(t, a.isInf()) + check(t, a.isInf()) a.unpack(NegInfinity64) - require.True(t, a.isInf()) + check(t, a.isInf()) } func TestIsNaN(t *testing.T) { - require := require.New(t) + t.Parallel() + var a decParts a.unpack(Zero64) - require.Equal(false, a.isNaN()) + check(t, !a.isNaN()) a.unpack(SNaN64) - require.Equal(true, a.isSNaN()) + check(t, a.isSNaN()) } func TestPartsSubnormal(t *testing.T) { - require := require.New(t) + t.Parallel() d := MustParse64("0.1E-383") var subnormal64Parts decParts subnormal64Parts.unpack(d) - require.Equal(true, subnormal64Parts.isSubnormal()) + check(t, subnormal64Parts.isSubnormal()) e := New64FromInt64(42) var fortyTwoParts decParts fortyTwoParts.unpack(e) - require.Equal(false, fortyTwoParts.isSubnormal()) + check(t, !fortyTwoParts.isSubnormal()) } diff --git a/decimal64fmt_test.go b/decimal64fmt_test.go index ae17c6f..20c1f67 100644 --- a/decimal64fmt_test.go +++ b/decimal64fmt_test.go @@ -5,9 +5,6 @@ import ( "strconv" "strings" "testing" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" ) func Test64PrecScal(t *testing.T) { @@ -17,7 +14,7 @@ func Test64PrecScal(t *testing.T) { t.Helper() expected := MustParse64(s) actual := new64(precScale(prec).bits) - assert.Equal(t, expected, actual) + equal(t, expected, actual) } test("1", 0) @@ -28,31 +25,31 @@ func Test64PrecScal(t *testing.T) { } func TestDecimal64String(t *testing.T) { - assert.Equal(t, strconv.Itoa(0), New64FromInt64(0).String()) + t.Parallel() + + equal(t, strconv.Itoa(0), New64FromInt64(0).String()) for i := int64(-1000); i <= 1000; i++ { - assert.Equal(t, strconv.Itoa(int(i)), New64FromInt64(i).String()) + equal(t, strconv.Itoa(int(i)), New64FromInt64(i).String()) } for f := 1; f < 1000; f += 11 { fdigits := strings.TrimRight(fmt.Sprintf("%03d", f), "0") fraction := New64FromInt64(int64(f)).Quo(New64FromInt64(1000)) for i := int64(0); i <= 100; i++ { - require.NotPanics(t, func() { - assert.Equal(t, + nopanic(t, func() { + equal(t, strconv.Itoa(int(i))+"."+fdigits, New64FromInt64(i).Add(fraction).String(), - "%d.%03d", f, i, ) - }, "%d.%03d", f, i) + }) } for i := int64(-100); i < 0; i++ { - require.NotPanics(t, func() { - assert.Equal(t, + nopanic(t, func() { + equal(t, strconv.Itoa(int(i))+"."+fdigits, New64FromInt64(i).Sub(fraction).String(), - "%d.%03d", f, i, ) - }, "%d.%03d", f, i) + }) } } } @@ -62,7 +59,7 @@ func TestDecimal64StringEdgeCases(t *testing.T) { test := func(expected, source string) { t.Helper() - assert.Equal(t, strings.TrimSpace(expected), MustParse64(strings.TrimSpace(source)).String()) + equal(t, strings.TrimSpace(expected), MustParse64(strings.TrimSpace(source)).String()) } test(" 123456", "123456") test("-123456", "-123456") @@ -108,45 +105,42 @@ func BenchmarkDecimal64String2(b *testing.B) { } func TestDecimal64Format(t *testing.T) { - require := require.New(t) + t.Parallel() for i := int64(-1000); i <= 1000; i++ { - require.Equal( - strconv.FormatInt(i, 10), - fmt.Sprintf("%v", New64FromInt64(i)), - "%d", i, - ) + equal(t, strconv.FormatInt(i, 10), fmt.Sprintf("%v", New64FromInt64(i))) } - require.Equal("42", New64FromInt64(42).String()) + equal(t, "42", New64FromInt64(42).String()) } func TestDecimal64FormatNaN(t *testing.T) { t.Parallel() n := MustParse64("-sNaN33") - assert.Equal(t, "-NaN33", n.String()) + equal(t, "-NaN33", n.String()) } func TestDecimal64FormatPrec(t *testing.T) { t.Parallel() + pi := MustParse64("3.1415926535897932384626433") test := func(expected string, prec int, n Decimal64) { t.Helper() var buf [32]byte actual := string(DefaultFormatContext64.append(n, buf[:0], -1, prec, noFlags, 'f')) - assert.Equal(t, expected, actual) - assert.Equal(t, expected, fmt.Sprintf("%.*f", prec, n)) - assert.Equal(t, expected, n.Text('f', prec)) + equal(t, expected, actual) + equal(t, expected, fmt.Sprintf("%.*f", prec, n)) + equal(t, expected, n.Text('f', prec)) } - assert.Equal(t, "3.141592653589793", pi.String()) - assert.Equal(t, "3.141592653589793", Context64{Rounding: HalfEven}.With(pi).String()) - assert.Equal(t, "3.141592653589793", Context64{Rounding: HalfUp}.With(pi).String()) - assert.Equal(t, "3.141592653589793", fmt.Sprintf("%v", pi)) - assert.Equal(t, "3.141593", fmt.Sprintf("%f", pi)) - assert.Equal(t, "%!q(decimal.Decimal64=3.141592653589793)", fmt.Sprintf("%q", pi)) + equal(t, "3.141592653589793", pi.String()) + equal(t, "3.141592653589793", Context64{Rounding: HalfEven}.With(pi).String()) + equal(t, "3.141592653589793", Context64{Rounding: HalfUp}.With(pi).String()) + equal(t, "3.141592653589793", fmt.Sprintf("%v", pi)) + equal(t, "3.141593", fmt.Sprintf("%f", pi)) + equal(t, "%!q(decimal.Decimal64=3.141592653589793)", fmt.Sprintf("%q", pi)) test("3", 0, pi) test("3.1", 1, pi) @@ -161,8 +155,8 @@ func TestDecimal64FormatPrec(t *testing.T) { test("3.1415926535897930"+strings.Repeat("0", 100), 116, pi) pi = pi.Add(New64FromInt64(100)) - assert.Equal(t, "103.1415926535898", fmt.Sprintf("%v", pi)) - assert.Equal(t, "103.141593", fmt.Sprintf("%f", pi)) + equal(t, "103.1415926535898", fmt.Sprintf("%v", pi)) + equal(t, "103.141593", fmt.Sprintf("%f", pi)) test("103", 0, pi) test("103.1", 1, pi) test("103.14", 2, pi) @@ -176,8 +170,8 @@ func TestDecimal64FormatPrec(t *testing.T) { test("103.1415926535898000"+strings.Repeat("0", 100), 116, pi) pi = pi.Add(New64FromInt64(100_000)) - assert.Equal(t, "100103.1415926536", fmt.Sprintf("%v", pi)) - assert.Equal(t, "100103.141593", fmt.Sprintf("%f", pi)) + equal(t, "100103.1415926536", fmt.Sprintf("%v", pi)) + equal(t, "100103.141593", fmt.Sprintf("%f", pi)) test("100103", 0, pi) test("100103.1", 1, pi) test("100103.14", 2, pi) @@ -192,8 +186,8 @@ func TestDecimal64FormatPrec(t *testing.T) { // // Add five digits to the significand so that we round at a 2. pi = pi.Add(New64FromInt64(10_100_000_000)) - assert.Equal(t, "1.010010010314159e+10", fmt.Sprintf("%v", pi)) - assert.Equal(t, "10100100103.141590", fmt.Sprintf("%f", pi)) + equal(t, "1.010010010314159e+10", fmt.Sprintf("%v", pi)) + equal(t, "10100100103.141590", fmt.Sprintf("%f", pi)) test("10100100103", 0, pi) test("10100100103.1", 1, pi) test("10100100103.14", 2, pi) @@ -212,8 +206,8 @@ func TestDecimal64FormatPrecEdgeCases(t *testing.T) { test := func(expected, input string) { n, err := Parse64(input) - require.NoError(t, err) - assert.Equal(t, expected, fmt.Sprintf("%.3f", n)) + isnil(t, err) + equal(t, expected, fmt.Sprintf("%.3f", n)) } test("0.062", "0.0625") @@ -236,9 +230,9 @@ func TestDecimal64FormatPrecEdgeCasesHalfUp(t *testing.T) { ctx := Context64{Rounding: HalfUp} test := func(expected, input string) { n, err := Parse64(input) - require.NoError(t, err) - assert.Equal(t, expected, ctx.With(n).Text('f', -1, 3)) - assert.Equal(t, expected, fmt.Sprintf("%.3f", ctx.With(n))) + isnil(t, err) + equal(t, expected, ctx.With(n).Text('f', -1, 3)) + equal(t, expected, fmt.Sprintf("%.3f", ctx.With(n))) } test("0.063", "0.0625") @@ -261,7 +255,7 @@ func TestDecimal64FormatPrecEdgeCases2(t *testing.T) { test := func(expected string, input Decimal64, prec int) { t.Helper() data := input.Append(nil, 'f', prec) - assert.Equal(t, expected, string(data)) + equal(t, expected, string(data)) } test("10000.0000000000", MustParse64("1e4"), 10) @@ -303,10 +297,10 @@ func TestDecimal64Format2(t *testing.T) { t.Parallel() a := MustParse64("0.0001643835616") - require.Equal(t, "0.000164383562", fmt.Sprintf("%.12f", a)) + equal(t, "0.000164383562", fmt.Sprintf("%.12f", a)) b := New64FromInt64(600).Quo(New64FromInt64(10000)) b = b.Quo(New64FromInt64(365)) - require.Equal(t, "0.000164383562", fmt.Sprintf("%.12f", b)) + equal(t, "0.000164383562", fmt.Sprintf("%.12f", b)) } func BenchmarkDecimal64Format(b *testing.B) { @@ -317,14 +311,16 @@ func BenchmarkDecimal64Format(b *testing.B) { } func TestDecimal64Append(t *testing.T) { + t.Parallel() + assertAppend := func(expected string, d Decimal64, format byte, prec int) { - assert.Equal(t, expected, string(d.Append([]byte{}, format, prec))) + equal(t, expected, string(d.Append([]byte{}, format, prec))) } for i := int64(-1000); i <= 1000; i++ { d := New64FromInt64(i) f := d.Append([]byte{}, 'g', 0) - assert.Equal(t, strconv.FormatInt(i, 10), string(f), "%d", i) + equal(t, strconv.FormatInt(i, 10), string(f)) } assertAppend("NaN", QNaN64, 'g', 0) diff --git a/decimal64gob_test.go b/decimal64gob_test.go index 5a4104d..204b68e 100644 --- a/decimal64gob_test.go +++ b/decimal64gob_test.go @@ -1,18 +1,14 @@ package decimal -import ( - "testing" - - "github.com/stretchr/testify/require" -) +import "testing" func TestDecimal64Gob(t *testing.T) { - require := require.New(t) + t.Parallel() gob, err := New64FromInt64(23456).GobEncode() - require.NoError(err) + isnil(t, err) var d Decimal64 - require.NoError(d.GobDecode(gob)) - require.Equal(New64FromInt64(23456), d) + isnil(t, d.GobDecode(gob)) + equal(t, New64FromInt64(23456), d) } diff --git a/decimal64json_test.go b/decimal64json_test.go index e11c2d1..b9acd0f 100644 --- a/decimal64json_test.go +++ b/decimal64json_test.go @@ -3,23 +3,27 @@ package decimal import ( "encoding/json" "testing" - - "github.com/stretchr/testify/require" ) func TestDecimal64MarshalJSON(t *testing.T) { + t.Parallel() + j, err := json.Marshal(MustParse64("123.432")) - require.NoError(t, err) - require.Equal(t, []byte("123.432"), j) + isnil(t, err) + equal(t, "123.432", string(j)) } func TestDecimal64UnmarshalJSON(t *testing.T) { + t.Parallel() + var d Decimal64 - require.NoError(t, json.Unmarshal([]byte("23456"), &d)) - require.Equal(t, New64FromInt64(23456), d) + isnil(t, json.Unmarshal([]byte("23456"), &d)) + equal(t, New64FromInt64(23456), d) } func TestDecimal64UnmarshalBadInputJSON(t *testing.T) { + t.Parallel() + var d Decimal64 - require.Error(t, json.Unmarshal([]byte("omg"), &d)) + notnil(t, json.Unmarshal([]byte("omg"), &d)) } diff --git a/decimal64marshal_test.go b/decimal64marshal_test.go index aa0330a..36d762e 100644 --- a/decimal64marshal_test.go +++ b/decimal64marshal_test.go @@ -1,25 +1,26 @@ package decimal -import ( - "testing" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" -) +import "testing" func TestDecimal64Marshal(t *testing.T) { + t.Parallel() + data, err := New64FromInt64(23456).MarshalText() - require.NoError(t, err) - assert.Equal(t, []byte("23456"), data) + isnil(t, err) + equal(t, "23456", string(data)) } func TestDecimal64Unmarshal(t *testing.T) { + t.Parallel() + var d Decimal64 - require.NoError(t, d.UnmarshalText([]byte("23456"))) - assert.Equal(t, New64FromInt64(23456), d) + isnil(t, d.UnmarshalText([]byte("23456"))) + equal(t, New64FromInt64(23456), d) } func TestDecimal64UnmarshalBadInput(t *testing.T) { + t.Parallel() + var d Decimal64 - assert.Error(t, d.UnmarshalText([]byte("omg"))) + notnil(t, d.UnmarshalText([]byte("omg"))) } diff --git a/decimal64math_test.go b/decimal64math_test.go index 9969421..2e66f74 100644 --- a/decimal64math_test.go +++ b/decimal64math_test.go @@ -4,9 +4,6 @@ import ( "fmt" "log" "testing" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" ) func checkDecimal64BinOp( @@ -15,7 +12,6 @@ func checkDecimal64BinOp( actual func(a, b Decimal64) Decimal64, op string, ) { - r := require.New(t) for i := int64(-100); i <= 100; i++ { a := New64FromInt64(i) for j := int64(-100); j <= 100; j++ { @@ -23,25 +19,27 @@ func checkDecimal64BinOp( c := actual(a, b) k := c.Int64() e := expected(i, j) - r.EqualValues(e, k, "%d %s %d ≠ %d (expecting %d)", i, op, j, k, e) + equal(t, e, k) } } } func TestDecimal64Abs(t *testing.T) { - require := require.New(t) + t.Parallel() - require.Equal(Zero64, Zero64.Abs()) - require.Equal(Zero64, NegZero64.Abs()) - require.Equal(Infinity64, Infinity64.Abs()) - require.Equal(Infinity64, NegInfinity64.Abs()) + equal(t, Zero64, Zero64.Abs()) + equal(t, Zero64, NegZero64.Abs()) + equal(t, Infinity64, Infinity64.Abs()) + equal(t, Infinity64, NegInfinity64.Abs()) fortyTwo := New64FromInt64(42) - require.Equal(fortyTwo, fortyTwo.Abs()) - require.Equal(fortyTwo, New64FromInt64(-42).Abs()) + equal(t, fortyTwo, fortyTwo.Abs()) + equal(t, fortyTwo, New64FromInt64(-42).Abs()) } func TestDecimal64Add(t *testing.T) { + t.Parallel() + if testing.Short() { t.Skip("skipping TestDecimal64Add in short mode.") } @@ -53,65 +51,65 @@ func TestDecimal64Add(t *testing.T) { } func TestDecimal64AddNaN(t *testing.T) { - require := require.New(t) + t.Parallel() fortyTwo := New64FromInt64(42) - require.Equal(QNaN64, fortyTwo.Add(QNaN64)) - require.Equal(QNaN64, QNaN64.Add(fortyTwo)) + equal(t, QNaN64, fortyTwo.Add(QNaN64)) + equal(t, QNaN64, QNaN64.Add(fortyTwo)) } func TestDecimal64AddInf(t *testing.T) { - require := require.New(t) + t.Parallel() fortyTwo := New64FromInt64(42) - require.Equal(Infinity64, fortyTwo.Add(Infinity64)) - require.Equal(Infinity64, Infinity64.Add(fortyTwo)) + equal(t, Infinity64, fortyTwo.Add(Infinity64)) + equal(t, Infinity64, Infinity64.Add(fortyTwo)) - require.Equal(NegInfinity64, fortyTwo.Add(NegInfinity64)) - require.Equal(NegInfinity64, NegInfinity64.Add(fortyTwo)) + equal(t, NegInfinity64, fortyTwo.Add(NegInfinity64)) + equal(t, NegInfinity64, NegInfinity64.Add(fortyTwo)) - require.Equal(Infinity64, Infinity64.Add(Infinity64)) - require.Equal(NegInfinity64, NegInfinity64.Add(NegInfinity64)) + equal(t, Infinity64, Infinity64.Add(Infinity64)) + equal(t, NegInfinity64, NegInfinity64.Add(NegInfinity64)) - require.Equal(QNaN64, Infinity64.Add(NegInfinity64)) - require.Equal(QNaN64, NegInfinity64.Add(Infinity64)) + equal(t, QNaN64, Infinity64.Add(NegInfinity64)) + equal(t, QNaN64, NegInfinity64.Add(Infinity64)) } func TestDecimal64Cmp(t *testing.T) { - require := require.New(t) + t.Parallel() - require.Equal(0, NegOne64.Cmp(NegOne64)) + equal(t, 0, NegOne64.Cmp(NegOne64)) - require.Equal(0, Zero64.Cmp(Zero64)) - require.Equal(0, Zero64.Cmp(NegZero64)) - require.Equal(0, NegZero64.Cmp(Zero64)) - require.Equal(0, NegZero64.Cmp(NegZero64)) + equal(t, 0, Zero64.Cmp(Zero64)) + equal(t, 0, Zero64.Cmp(NegZero64)) + equal(t, 0, NegZero64.Cmp(Zero64)) + equal(t, 0, NegZero64.Cmp(NegZero64)) - require.Equal(0, One64.Cmp(One64)) - require.Equal(-1, NegOne64.Cmp(Zero64)) - require.Equal(-1, NegOne64.Cmp(NegZero64)) - require.Equal(-1, NegOne64.Cmp(One64)) - require.Equal(-1, Zero64.Cmp(One64)) - require.Equal(-1, NegZero64.Cmp(One64)) - require.Equal(1, Zero64.Cmp(NegOne64)) - require.Equal(1, NegZero64.Cmp(NegOne64)) - require.Equal(1, One64.Cmp(NegOne64)) - require.Equal(1, One64.Cmp(Zero64)) - require.Equal(1, One64.Cmp(NegZero64)) + equal(t, 0, One64.Cmp(One64)) + equal(t, -1, NegOne64.Cmp(Zero64)) + equal(t, -1, NegOne64.Cmp(NegZero64)) + equal(t, -1, NegOne64.Cmp(One64)) + equal(t, -1, Zero64.Cmp(One64)) + equal(t, -1, NegZero64.Cmp(One64)) + equal(t, 1, Zero64.Cmp(NegOne64)) + equal(t, 1, NegZero64.Cmp(NegOne64)) + equal(t, 1, One64.Cmp(NegOne64)) + equal(t, 1, One64.Cmp(Zero64)) + equal(t, 1, One64.Cmp(NegZero64)) } func TestDecimal64CmpNaN(t *testing.T) { - require := require.New(t) + t.Parallel() - require.Equal(-2, QNaN64.Cmp(QNaN64)) - require.Equal(-2, Zero64.Cmp(QNaN64)) - require.Equal(-2, QNaN64.Cmp(Zero64)) + equal(t, -2, QNaN64.Cmp(QNaN64)) + equal(t, -2, Zero64.Cmp(QNaN64)) + equal(t, -2, QNaN64.Cmp(Zero64)) } func TestDecimal64MulThreeByOneTenthByTen(t *testing.T) { - r := require.New(t) + t.Parallel() // float 3*0.1*10 ≠ 3 fltThree := 3.0 @@ -119,8 +117,8 @@ func TestDecimal64MulThreeByOneTenthByTen(t *testing.T) { fltOne := 1.0 fltOneTenth := fltOne / fltTen fltProduct := fltThree * fltOneTenth * fltTen - r.Equal(fltTen*fltOneTenth, fltOne) - r.NotEqual(fltThree, fltProduct) + equal(t, fltTen*fltOneTenth, fltOne) + notequal(t, fltThree, fltProduct) // decimal 3*0.1*10 = 3 decThree := New64FromInt64(3) @@ -128,17 +126,13 @@ func TestDecimal64MulThreeByOneTenthByTen(t *testing.T) { decOne := New64FromInt64(1) decOneTenth := decOne.Quo(decTen) decProduct := decThree.Mul(decOneTenth).Mul(decTen) - requireEqualDecimal64(t, decTen.Mul(decOneTenth), decOne) - requireEqualDecimal64(t, decThree, decProduct) -} - -func requireEqualDecimal64(t *testing.T, expected, actual Decimal64, fmtAndArgs ...any) { - t.Helper() - require := require.New(t) - require.Equal(expected.bits, actual.bits) + equalD64(t, decTen.Mul(decOneTenth), decOne) + equalD64(t, decThree, decProduct) } func TestDecimal64Mul(t *testing.T) { + t.Parallel() + if testing.Short() { t.Skip("skipping TestDecimal64Mul in short mode.") } @@ -150,34 +144,34 @@ func TestDecimal64Mul(t *testing.T) { } func TestDecimal64MulNaN(t *testing.T) { - require := require.New(t) + t.Parallel() fortyTwo := New64FromInt64(42) - require.Equal(QNaN64, fortyTwo.Mul(QNaN64)) - require.Equal(QNaN64, QNaN64.Mul(fortyTwo)) + equal(t, QNaN64, fortyTwo.Mul(QNaN64)) + equal(t, QNaN64, QNaN64.Mul(fortyTwo)) } func TestDecimal64MulInf(t *testing.T) { - require := require.New(t) + t.Parallel() fortyTwo := New64FromInt64(42) negFortyTwo := New64FromInt64(-42) - require.Equal(Infinity64, fortyTwo.Mul(Infinity64)) - require.Equal(Infinity64, Infinity64.Mul(fortyTwo)) - require.Equal(NegInfinity64, negFortyTwo.Mul(Infinity64)) - require.Equal(NegInfinity64, Infinity64.Mul(negFortyTwo)) + equal(t, Infinity64, fortyTwo.Mul(Infinity64)) + equal(t, Infinity64, Infinity64.Mul(fortyTwo)) + equal(t, NegInfinity64, negFortyTwo.Mul(Infinity64)) + equal(t, NegInfinity64, Infinity64.Mul(negFortyTwo)) - require.Equal(NegInfinity64, fortyTwo.Mul(NegInfinity64)) - require.Equal(NegInfinity64, NegInfinity64.Mul(fortyTwo)) - require.Equal(Infinity64, negFortyTwo.Mul(NegInfinity64)) - require.Equal(Infinity64, NegInfinity64.Mul(negFortyTwo)) + equal(t, NegInfinity64, fortyTwo.Mul(NegInfinity64)) + equal(t, NegInfinity64, NegInfinity64.Mul(fortyTwo)) + equal(t, Infinity64, negFortyTwo.Mul(NegInfinity64)) + equal(t, Infinity64, NegInfinity64.Mul(negFortyTwo)) - require.Equal(Infinity64, Infinity64.Mul(Infinity64)) - require.Equal(Infinity64, NegInfinity64.Mul(NegInfinity64)) - require.Equal(NegInfinity64, Infinity64.Mul(NegInfinity64)) - require.Equal(NegInfinity64, NegInfinity64.Mul(Infinity64)) + equal(t, Infinity64, Infinity64.Mul(Infinity64)) + equal(t, Infinity64, NegInfinity64.Mul(NegInfinity64)) + equal(t, NegInfinity64, Infinity64.Mul(NegInfinity64)) + equal(t, NegInfinity64, NegInfinity64.Mul(Infinity64)) } func checkDecimal64QuoByF(t *testing.T, f int64) { @@ -202,7 +196,7 @@ func checkDecimal64QuoByF(t *testing.T, f int64) { t.Log("e", e.bits, eFlavor, eSign, eExp, eSignificand) t.Log("q", q.bits, qFlavor, qSign, qExp, qSignificand) } - if !assert.Equal(t, e, q, "%d / %d ≠ %v (expecting %v)", k, j, q, e) { + if !equal(t, e, q) { n.Quo(d) t.FailNow() } @@ -242,44 +236,46 @@ func TestDecimal64Scale(t *testing.T) { continue } actual := x.Quo(y).Text('e', -1) - require.Equal(t, expected, actual, "i = %v, j = %v", i, j) + equal(t, expected, actual) } } } func TestDecimal64QuoNaN(t *testing.T) { - require := require.New(t) + t.Parallel() fortyTwo := New64FromInt64(42) - require.Equal(QNaN64, fortyTwo.Quo(QNaN64)) - require.Equal(QNaN64, QNaN64.Quo(fortyTwo)) + equal(t, QNaN64, fortyTwo.Quo(QNaN64)) + equal(t, QNaN64, QNaN64.Quo(fortyTwo)) } func TestDecimal64QuoInf(t *testing.T) { - require := require.New(t) + t.Parallel() fortyTwo := New64FromInt64(42) negFortyTwo := New64FromInt64(-42) - require.Equal(Zero64, fortyTwo.Quo(Infinity64)) - require.Equal(Infinity64, Infinity64.Quo(fortyTwo)) - require.Equal(NegZero64, negFortyTwo.Quo(Infinity64)) - require.Equal(NegInfinity64, Infinity64.Quo(negFortyTwo)) + equal(t, Zero64, fortyTwo.Quo(Infinity64)) + equal(t, Infinity64, Infinity64.Quo(fortyTwo)) + equal(t, NegZero64, negFortyTwo.Quo(Infinity64)) + equal(t, NegInfinity64, Infinity64.Quo(negFortyTwo)) - require.Equal(NegZero64, fortyTwo.Quo(NegInfinity64)) - require.Equal(NegInfinity64, NegInfinity64.Quo(fortyTwo)) - require.Equal(Zero64, negFortyTwo.Quo(NegInfinity64)) - require.Equal(Infinity64, NegInfinity64.Quo(negFortyTwo)) + equal(t, NegZero64, fortyTwo.Quo(NegInfinity64)) + equal(t, NegInfinity64, NegInfinity64.Quo(fortyTwo)) + equal(t, Zero64, negFortyTwo.Quo(NegInfinity64)) + equal(t, Infinity64, NegInfinity64.Quo(negFortyTwo)) - require.Equal(QNaN64, Infinity64.Quo(Infinity64)) - require.Equal(QNaN64, NegInfinity64.Quo(NegInfinity64)) - require.Equal(QNaN64, Infinity64.Quo(NegInfinity64)) - require.Equal(QNaN64, NegInfinity64.Quo(Infinity64)) + equal(t, QNaN64, Infinity64.Quo(Infinity64)) + equal(t, QNaN64, NegInfinity64.Quo(NegInfinity64)) + equal(t, QNaN64, Infinity64.Quo(NegInfinity64)) + equal(t, QNaN64, NegInfinity64.Quo(Infinity64)) } func TestDecimal64MulPo10(t *testing.T) { + t.Parallel() + for i, u := range tenToThe128 { for j, v := range tenToThe128 { k := i + j @@ -292,38 +288,45 @@ func TestDecimal64MulPo10(t *testing.T) { } e := New64FromInt64(int64(w.lo)) a := New64FromInt64(int64(u.lo)).Mul(New64FromInt64(int64(v.lo))) - requireEqualDecimal64(t, e, a, "%v * %v ≠ %v (expecting %v)", u, v, a, e) + equalD64(t, e, a, "%v * %v ≠ %v (expecting %v)", u, v, a, e) } } } func TestDecimal64Sqrt(t *testing.T) { + t.Parallel() + for i := int64(0); i < 100000000; i = i*19/17 + 1 { i2 := i * i e := New64FromInt64(i) n := New64FromInt64(i2) a := n.Sqrt() - requireEqualDecimal64(t, e, a, "√%v != %v (expected %v)", n, a, e) + equalD64(t, e, a, "√%v != %v (expected %v)", n, a, e) } } func TestDecimal64SqrtNeg(t *testing.T) { - require.EqualValues(t, QNaN64, New64FromInt64(-1).Sqrt()) + t.Parallel() + + equal(t, QNaN64, New64FromInt64(-1).Sqrt()) } func TestDecimal64SqrtNaN(t *testing.T) { - require := require.New(t) - require.Equal(QNaN64, QNaN64.Sqrt()) + t.Parallel() + + equal(t, QNaN64, QNaN64.Sqrt()) } func TestDecimal64SqrtInf(t *testing.T) { - require := require.New(t) + t.Parallel() - require.Equal(Infinity64, Infinity64.Sqrt()) - require.Equal(QNaN64, NegInfinity64.Sqrt()) + equal(t, Infinity64, Infinity64.Sqrt()) + equal(t, QNaN64, NegInfinity64.Sqrt()) } func TestDecimal64Sub(t *testing.T) { + t.Parallel() + checkDecimal64BinOp(t, func(a, b int64) int64 { return a - b }, func(a, b Decimal64) Decimal64 { return a.Sub(b) }, @@ -340,99 +343,99 @@ func TestRoundHalfUp(t *testing.T) { t.Parallel() ctx := Context64{Rounding: HalfUp} - assert.Equal(t, uint64(10), rnd(ctx, 10, 1)) - assert.Equal(t, uint64(10), rnd(ctx, 11, 1)) - assert.Equal(t, uint64(20), rnd(ctx, 15, 1)) - assert.Equal(t, uint64(20), rnd(ctx, 19, 1)) - assert.Equal(t, uint64(200), rnd(ctx, 249, 10)) - assert.Equal(t, uint64(300), rnd(ctx, 250, 10)) - assert.Equal(t, uint64(300), rnd(ctx, 251, 10)) - assert.Equal(t, uint64(300), rnd(ctx, 299, 10)) - assert.Equal(t, uint64(300), rnd(ctx, 300, 10)) - assert.Equal(t, uint64(1000000000000000), rnd(ctx, 1000000000000000, 100000000000000)) - assert.Equal(t, uint64(1000000000000000), rnd(ctx, 1100000000000000, 100000000000000)) - assert.Equal(t, uint64(1000000000000000), rnd(ctx, 1499999999999999, 100000000000000)) - assert.Equal(t, uint64(2000000000000000), rnd(ctx, 1500000000000000, 100000000000000)) - assert.Equal(t, uint64(2000000000000000), rnd(ctx, 1500000000000001, 100000000000000)) - assert.Equal(t, uint64(2000000000000000), rnd(ctx, 1900000000000000, 100000000000000)) - assert.Equal(t, uint64(2000000000000000), rnd(ctx, 1999999999999999, 100000000000000)) - assert.Equal(t, uint64(2000000000000000), rnd(ctx, 2000000000000000, 100000000000000)) - assert.Equal(t, uint64(2000000000000000), rnd(ctx, 2499999999999999, 100000000000000)) - assert.Equal(t, uint64(3000000000000000), rnd(ctx, 2500000000000000, 100000000000000)) - assert.Equal(t, uint64(3000000000000000), rnd(ctx, 2500000000000001, 100000000000000)) - assert.Equal(t, uint64(3000000000000000), rnd(ctx, 2999999999999999, 100000000000000)) - assert.Equal(t, uint64(3000000000000000), rnd(ctx, 3000000000000000, 100000000000000)) + equal(t, uint64(10), rnd(ctx, 10, 1)) + equal(t, uint64(10), rnd(ctx, 11, 1)) + equal(t, uint64(20), rnd(ctx, 15, 1)) + equal(t, uint64(20), rnd(ctx, 19, 1)) + equal(t, uint64(200), rnd(ctx, 249, 10)) + equal(t, uint64(300), rnd(ctx, 250, 10)) + equal(t, uint64(300), rnd(ctx, 251, 10)) + equal(t, uint64(300), rnd(ctx, 299, 10)) + equal(t, uint64(300), rnd(ctx, 300, 10)) + equal(t, uint64(1000000000000000), rnd(ctx, 1000000000000000, 100000000000000)) + equal(t, uint64(1000000000000000), rnd(ctx, 1100000000000000, 100000000000000)) + equal(t, uint64(1000000000000000), rnd(ctx, 1499999999999999, 100000000000000)) + equal(t, uint64(2000000000000000), rnd(ctx, 1500000000000000, 100000000000000)) + equal(t, uint64(2000000000000000), rnd(ctx, 1500000000000001, 100000000000000)) + equal(t, uint64(2000000000000000), rnd(ctx, 1900000000000000, 100000000000000)) + equal(t, uint64(2000000000000000), rnd(ctx, 1999999999999999, 100000000000000)) + equal(t, uint64(2000000000000000), rnd(ctx, 2000000000000000, 100000000000000)) + equal(t, uint64(2000000000000000), rnd(ctx, 2499999999999999, 100000000000000)) + equal(t, uint64(3000000000000000), rnd(ctx, 2500000000000000, 100000000000000)) + equal(t, uint64(3000000000000000), rnd(ctx, 2500000000000001, 100000000000000)) + equal(t, uint64(3000000000000000), rnd(ctx, 2999999999999999, 100000000000000)) + equal(t, uint64(3000000000000000), rnd(ctx, 3000000000000000, 100000000000000)) } func TestRoundHalfEven(t *testing.T) { t.Parallel() ctx := Context64{Rounding: HalfEven} - assert.Equal(t, uint64(10), rnd(ctx, 10, 1)) - assert.Equal(t, uint64(10), rnd(ctx, 11, 1)) - assert.Equal(t, uint64(20), rnd(ctx, 15, 1)) - assert.Equal(t, uint64(20), rnd(ctx, 19, 1)) - assert.Equal(t, uint64(200), rnd(ctx, 249, 10)) - assert.Equal(t, uint64(200), rnd(ctx, 250, 10)) - assert.Equal(t, uint64(300), rnd(ctx, 251, 10)) - assert.Equal(t, uint64(300), rnd(ctx, 299, 10)) - assert.Equal(t, uint64(300), rnd(ctx, 300, 10)) - assert.Equal(t, uint64(1000000000000000), rnd(ctx, 1000000000000000, 100000000000000)) - assert.Equal(t, uint64(1000000000000000), rnd(ctx, 1100000000000000, 100000000000000)) - assert.Equal(t, uint64(1000000000000000), rnd(ctx, 1499999999999999, 100000000000000)) - assert.Equal(t, uint64(2000000000000000), rnd(ctx, 1500000000000000, 100000000000000)) - assert.Equal(t, uint64(2000000000000000), rnd(ctx, 1500000000000001, 100000000000000)) - assert.Equal(t, uint64(2000000000000000), rnd(ctx, 1900000000000000, 100000000000000)) - assert.Equal(t, uint64(2000000000000000), rnd(ctx, 1999999999999999, 100000000000000)) - assert.Equal(t, uint64(2000000000000000), rnd(ctx, 2000000000000000, 100000000000000)) - assert.Equal(t, uint64(2000000000000000), rnd(ctx, 2499999999999999, 100000000000000)) - assert.Equal(t, uint64(2000000000000000), rnd(ctx, 2500000000000000, 100000000000000)) - assert.Equal(t, uint64(3000000000000000), rnd(ctx, 2500000000000001, 100000000000000)) - assert.Equal(t, uint64(3000000000000000), rnd(ctx, 2999999999999999, 100000000000000)) - assert.Equal(t, uint64(3000000000000000), rnd(ctx, 3000000000000000, 100000000000000)) + equal(t, uint64(10), rnd(ctx, 10, 1)) + equal(t, uint64(10), rnd(ctx, 11, 1)) + equal(t, uint64(20), rnd(ctx, 15, 1)) + equal(t, uint64(20), rnd(ctx, 19, 1)) + equal(t, uint64(200), rnd(ctx, 249, 10)) + equal(t, uint64(200), rnd(ctx, 250, 10)) + equal(t, uint64(300), rnd(ctx, 251, 10)) + equal(t, uint64(300), rnd(ctx, 299, 10)) + equal(t, uint64(300), rnd(ctx, 300, 10)) + equal(t, uint64(1000000000000000), rnd(ctx, 1000000000000000, 100000000000000)) + equal(t, uint64(1000000000000000), rnd(ctx, 1100000000000000, 100000000000000)) + equal(t, uint64(1000000000000000), rnd(ctx, 1499999999999999, 100000000000000)) + equal(t, uint64(2000000000000000), rnd(ctx, 1500000000000000, 100000000000000)) + equal(t, uint64(2000000000000000), rnd(ctx, 1500000000000001, 100000000000000)) + equal(t, uint64(2000000000000000), rnd(ctx, 1900000000000000, 100000000000000)) + equal(t, uint64(2000000000000000), rnd(ctx, 1999999999999999, 100000000000000)) + equal(t, uint64(2000000000000000), rnd(ctx, 2000000000000000, 100000000000000)) + equal(t, uint64(2000000000000000), rnd(ctx, 2499999999999999, 100000000000000)) + equal(t, uint64(2000000000000000), rnd(ctx, 2500000000000000, 100000000000000)) + equal(t, uint64(3000000000000000), rnd(ctx, 2500000000000001, 100000000000000)) + equal(t, uint64(3000000000000000), rnd(ctx, 2999999999999999, 100000000000000)) + equal(t, uint64(3000000000000000), rnd(ctx, 3000000000000000, 100000000000000)) } func TestRoundHDown(t *testing.T) { t.Parallel() ctx := Context64{Rounding: Down} - assert.Equal(t, uint64(10), rnd(ctx, 10, 1)) - assert.Equal(t, uint64(10), rnd(ctx, 11, 1)) - assert.Equal(t, uint64(10), rnd(ctx, 15, 1)) - assert.Equal(t, uint64(10), rnd(ctx, 19, 1)) - assert.Equal(t, uint64(200), rnd(ctx, 249, 10)) - assert.Equal(t, uint64(200), rnd(ctx, 250, 10)) - assert.Equal(t, uint64(200), rnd(ctx, 251, 10)) - assert.Equal(t, uint64(200), rnd(ctx, 299, 10)) - assert.Equal(t, uint64(300), rnd(ctx, 300, 10)) - assert.Equal(t, uint64(1000000000000000), rnd(ctx, 1000000000000000, 100000000000000)) - assert.Equal(t, uint64(1000000000000000), rnd(ctx, 1100000000000000, 100000000000000)) - assert.Equal(t, uint64(1000000000000000), rnd(ctx, 1499999999999999, 100000000000000)) - assert.Equal(t, uint64(1000000000000000), rnd(ctx, 1500000000000000, 100000000000000)) - assert.Equal(t, uint64(1000000000000000), rnd(ctx, 1500000000000001, 100000000000000)) - assert.Equal(t, uint64(1000000000000000), rnd(ctx, 1900000000000000, 100000000000000)) - assert.Equal(t, uint64(1000000000000000), rnd(ctx, 1999999999999999, 100000000000000)) - assert.Equal(t, uint64(2000000000000000), rnd(ctx, 2000000000000000, 100000000000000)) - assert.Equal(t, uint64(2000000000000000), rnd(ctx, 2499999999999999, 100000000000000)) - assert.Equal(t, uint64(2000000000000000), rnd(ctx, 2500000000000000, 100000000000000)) - assert.Equal(t, uint64(2000000000000000), rnd(ctx, 2500000000000001, 100000000000000)) - assert.Equal(t, uint64(2000000000000000), rnd(ctx, 2999999999999999, 100000000000000)) - assert.Equal(t, uint64(3000000000000000), rnd(ctx, 3000000000000000, 100000000000000)) + equal(t, uint64(10), rnd(ctx, 10, 1)) + equal(t, uint64(10), rnd(ctx, 11, 1)) + equal(t, uint64(10), rnd(ctx, 15, 1)) + equal(t, uint64(10), rnd(ctx, 19, 1)) + equal(t, uint64(200), rnd(ctx, 249, 10)) + equal(t, uint64(200), rnd(ctx, 250, 10)) + equal(t, uint64(200), rnd(ctx, 251, 10)) + equal(t, uint64(200), rnd(ctx, 299, 10)) + equal(t, uint64(300), rnd(ctx, 300, 10)) + equal(t, uint64(1000000000000000), rnd(ctx, 1000000000000000, 100000000000000)) + equal(t, uint64(1000000000000000), rnd(ctx, 1100000000000000, 100000000000000)) + equal(t, uint64(1000000000000000), rnd(ctx, 1499999999999999, 100000000000000)) + equal(t, uint64(1000000000000000), rnd(ctx, 1500000000000000, 100000000000000)) + equal(t, uint64(1000000000000000), rnd(ctx, 1500000000000001, 100000000000000)) + equal(t, uint64(1000000000000000), rnd(ctx, 1900000000000000, 100000000000000)) + equal(t, uint64(1000000000000000), rnd(ctx, 1999999999999999, 100000000000000)) + equal(t, uint64(2000000000000000), rnd(ctx, 2000000000000000, 100000000000000)) + equal(t, uint64(2000000000000000), rnd(ctx, 2499999999999999, 100000000000000)) + equal(t, uint64(2000000000000000), rnd(ctx, 2500000000000000, 100000000000000)) + equal(t, uint64(2000000000000000), rnd(ctx, 2500000000000001, 100000000000000)) + equal(t, uint64(2000000000000000), rnd(ctx, 2999999999999999, 100000000000000)) + equal(t, uint64(3000000000000000), rnd(ctx, 3000000000000000, 100000000000000)) } func TestToIntegral(t *testing.T) { t.Parallel() ctx := Context64{Rounding: HalfUp} - assert.Equal(t, "0", ctx.ToIntegral(MustParse64("0")).String()) - assert.Equal(t, "0", ctx.ToIntegral(MustParse64("0.499999999999999")).String()) - assert.Equal(t, "1", ctx.ToIntegral(MustParse64("1")).String()) - assert.Equal(t, "1", ctx.ToIntegral(MustParse64("1.49999999999999")).String()) - assert.Equal(t, "2", ctx.ToIntegral(MustParse64("1.5")).String()) - assert.Equal(t, "9", ctx.ToIntegral(MustParse64("9.49999999999999")).String()) - assert.Equal(t, "10", ctx.ToIntegral(MustParse64("9.5")).String()) - assert.Equal(t, "99", ctx.ToIntegral(MustParse64("99.499999999999")).String()) - assert.Equal(t, "100", ctx.ToIntegral(MustParse64("99.5")).String()) + equal(t, "0", ctx.ToIntegral(MustParse64("0")).String()) + equal(t, "0", ctx.ToIntegral(MustParse64("0.499999999999999")).String()) + equal(t, "1", ctx.ToIntegral(MustParse64("1")).String()) + equal(t, "1", ctx.ToIntegral(MustParse64("1.49999999999999")).String()) + equal(t, "2", ctx.ToIntegral(MustParse64("1.5")).String()) + equal(t, "9", ctx.ToIntegral(MustParse64("9.49999999999999")).String()) + equal(t, "10", ctx.ToIntegral(MustParse64("9.5")).String()) + equal(t, "99", ctx.ToIntegral(MustParse64("99.499999999999")).String()) + equal(t, "100", ctx.ToIntegral(MustParse64("99.5")).String()) } func benchmarkDecimal64Data() []Decimal64 { @@ -506,18 +509,21 @@ func BenchmarkDecimal64Sub(b *testing.B) { } func TestAddOverflow(t *testing.T) { - require := require.New(t) - require.Equal(NegInfinity64, NegMax64.Sub(MustParse64("0.00000000000001e384"))) - require.Equal(Infinity64, Max64.Add(MustParse64("0.000000000000001e384"))) - require.Equal(Max64, Max64.Add(MustParse64("1"))) - require.Equal(Max64, Zero64.Add(Max64)) + t.Parallel() + + equal(t, NegInfinity64, NegMax64.Sub(MustParse64("0.00000000000001e384"))) + equal(t, Infinity64, Max64.Add(MustParse64("0.000000000000001e384"))) + equal(t, Max64, Max64.Add(MustParse64("1"))) + equal(t, Max64, Zero64.Add(Max64)) } func TestQuoOverflow(t *testing.T) { + t.Parallel() + test := func(expected Decimal64, num, denom string) { n := MustParse64(num) d := MustParse64(denom) - if !assert.Equal(t, expected, n.Quo(d)) { + if !equal(t, expected, n.Quo(d)) { log.Printf("TestQuoOverflow: num = %d", n) n.Quo(d) } @@ -531,11 +537,12 @@ func TestQuoOverflow(t *testing.T) { } func TestMul(t *testing.T) { - require := require.New(t) - require.Equal(Infinity64, MustParse64("1e384").Mul(MustParse64("10"))) - require.Equal(NegInfinity64, MustParse64("1e384").Mul(MustParse64("-10"))) - require.Equal(NegInfinity64, MustParse64("-1e384").Mul(MustParse64("10"))) - require.Equal(NegZero64, MustParse64("-1e384").Mul(Zero64)) - require.Equal(Zero64, Zero64.Mul(Zero64)) - require.Equal(Zero64, Zero64.Mul(MustParse64("100"))) + t.Parallel() + + equal(t, Infinity64, MustParse64("1e384").Mul(MustParse64("10"))) + equal(t, NegInfinity64, MustParse64("1e384").Mul(MustParse64("-10"))) + equal(t, NegInfinity64, MustParse64("-1e384").Mul(MustParse64("10"))) + equal(t, NegZero64, MustParse64("-1e384").Mul(Zero64)) + equal(t, Zero64, Zero64.Mul(Zero64)) + equal(t, Zero64, Zero64.Mul(MustParse64("100"))) } diff --git a/decimal64scan_test.go b/decimal64scan_test.go index 860dd74..e0fcd09 100644 --- a/decimal64scan_test.go +++ b/decimal64scan_test.go @@ -6,11 +6,11 @@ import ( "strconv" "strings" "testing" - - "github.com/stretchr/testify/require" ) func TestParse64(t *testing.T) { + t.Parallel() + if testing.Short() { t.Skip("skipping TestParse64 in short mode.") } @@ -27,6 +27,8 @@ func TestParse64(t *testing.T) { } func TestParse64Inf(t *testing.T) { + t.Parallel() + parseEquals64 := parseEquals64(t) parseEquals64(Infinity64, "Inf") @@ -42,10 +44,12 @@ func TestParse64Inf(t *testing.T) { // TODO: Find out what the correct behavior is with bad inputs // TODO: Does nan get returned if there are leading/trailing whitespaces? func TestParse64BadInputs(t *testing.T) { + t.Parallel() + test := func(input string) { t.Helper() d, _ := Parse64(input) - require.Equal(t, SNaN64.IsNaN(), d.IsNaN(), "input = %q", input) + equal(t, SNaN64.IsNaN(), d.IsNaN()) } test("") test(" ") @@ -63,6 +67,8 @@ func TestParse64BadInputs(t *testing.T) { } func TestParse64BigExp(t *testing.T) { + t.Parallel() + parseEquals64 := parseEquals64(t) parseEquals64(Zero64, "0e-9999") @@ -77,6 +83,8 @@ func TestParse64BigExp(t *testing.T) { } func TestParse64LongMantissa(t *testing.T) { + t.Parallel() + parseEquals64 := parseEquals64(t) parseEquals64(One64, "1000000000000000000000e-21") @@ -84,18 +92,20 @@ func TestParse64LongMantissa(t *testing.T) { } func TestDecimal64ScanFlakyScanState(t *testing.T) { - requireFailAt := func(text string, failAt int) { + t.Parallel() + + failAt := func(text string, failAt int) { state := flakyScanState{ actual: &scanner{reader: strings.NewReader(text)}, failAt: failAt, } var d Decimal64 - require.Error(t, d.Scan(&state, 'e'), "%d", failAt) + notnil(t, d.Scan(&state, 'e')) } - requireFailAt("x", 0) + failAt("x", 0) for i := 0; i < 7; i++ { - requireFailAt("-1.0e-3", i) + failAt("-1.0e-3", i) } } @@ -120,19 +130,19 @@ func BenchmarkDecimal64Scan(b *testing.B) { func parseEquals64(t *testing.T) func(expected Decimal64, input string) { return func(expected Decimal64, input string) { - require.NotPanics(t, func() { + nopanic(t, func() { n := MustParse64(input) - requireEqualDecimal64(t, expected, n, "%s", input) - }, "%s", input) + equalD64(t, expected, n, "%s", input) + }) n, err := Parse64(input) - require.NoError(t, err, "%s", input) - requireEqualDecimal64(t, expected, n, "%s", input) + isnil(t, err) + equalD64(t, expected, n, "%s", input) n = SNaN64 count, err := fmt.Sscanf(input, "%g", &n) - require.NoError(t, err, "%s", input) - require.Equal(t, 1, count, "%s", input) - requireEqualDecimal64(t, expected, n, "%s", input) + isnil(t, err) + equal(t, 1, count) + equalD64(t, expected, n, "%s", input) } } diff --git a/decimalSuite_test.go b/decimalSuite_test.go index 45e9376..5894670 100644 --- a/decimalSuite_test.go +++ b/decimalSuite_test.go @@ -8,9 +8,6 @@ import ( "strconv" "strings" "testing" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" ) type opResult struct { @@ -138,7 +135,7 @@ func TestFromSuite(t *testing.T) { numTests++ t.Run(testVal.name, func(t *testing.T) { dec64vals, err := convertToDec64(testVal) - require.NoError(t, err) + isnil(t, err) if !runTest(t, scannedContext, dec64vals, testVal) { runTest(t, scannedContext, dec64vals, testVal) } @@ -275,7 +272,8 @@ func runTest(t *testing.T, context Context64, expected opResult, testValStrings return true } if actual.text != testValStrings.expectedResult { - return assert.Failf(t, "unexpected result", "test:\n%s\ncalculated text: %s", testValStrings, actual.text) + t.Errorf("test:\n%s\ncalculated text: %s", testValStrings, actual.text) + return false } return true } @@ -283,12 +281,14 @@ func runTest(t *testing.T, context Context64, expected opResult, testValStrings e := expected.result.String() a := actual.result.String() if e != a { - return assert.Failf(t, "failed NaN test", "test:\n%s\ncalculated result: %v", testValStrings, actual.result) + t.Errorf("test:\n%s\ncalculated result: %v", testValStrings, actual.result) + return false } return true } if expected.result.Cmp(actual.result) != 0 { - return assert.Fail(t, "failed", "test:\n%s\ncalculated result: %v", testValStrings, actual.result) + t.Errorf("test:\n%s\ncalculated result: %v", testValStrings, actual.result) + return false } return true } diff --git a/flakyScanState_test.go b/flakyScanState_test.go index 16e830f..d555118 100644 --- a/flakyScanState_test.go +++ b/flakyScanState_test.go @@ -1,8 +1,6 @@ package decimal -import ( - "fmt" -) +import "fmt" type flakyScanState struct { actual fmt.ScanState diff --git a/go.mod b/go.mod index 2ebcfc8..a09831f 100644 --- a/go.mod +++ b/go.mod @@ -1,10 +1,3 @@ module github.com/anz-bank/decimal go 1.21 - -require github.com/stretchr/testify v1.2.2 - -require ( - github.com/davecgh/go-spew v1.1.1 // indirect - github.com/pmezard/go-difflib v1.0.0 // indirect -) diff --git a/go.sum b/go.sum index e03ee77..e69de29 100644 --- a/go.sum +++ b/go.sum @@ -1,6 +0,0 @@ -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= diff --git a/stringScanner_test.go b/stringScanner_test.go index 6b110a3..223181a 100644 --- a/stringScanner_test.go +++ b/stringScanner_test.go @@ -4,41 +4,39 @@ import ( "strings" "testing" "unicode" - - "github.com/stretchr/testify/require" ) func TestStringScannerSkipSpace(t *testing.T) { - require := require.New(t) + t.Parallel() state := &scanner{reader: strings.NewReader(" \tx")} state.SkipSpace() r, size, err := state.ReadRune() - require.NoError(err) - require.Equal(1, size) - require.Equal('x', r) + isnil(t, err) + equal(t, 1, size) + equal(t, 'x', r) - require.NotPanics(func() { state.SkipSpace() }) + nopanic(t, func() { state.SkipSpace() }) } func TestStringScannerTokenSkipSpace(t *testing.T) { - require := require.New(t) + t.Parallel() state := &scanner{reader: strings.NewReader(" \txyz")} token, err := state.Token(false, unicode.IsLetter) - require.NoError(err) - require.Equal([]byte(nil), token) + isnil(t, err) + equal(t, 0, len(token)) token, err = state.Token(true, unicode.IsLetter) - require.NoError(err) - require.Equal([]byte("xyz"), token) + isnil(t, err) + equal(t, "xyz", string(token)) } func TestStringScannerRead(t *testing.T) { - require := require.New(t) + t.Parallel() state := &scanner{reader: strings.NewReader("hello world!")} @@ -46,14 +44,14 @@ func TestStringScannerRead(t *testing.T) { var world [10]byte n, err := state.Read(hello[:]) - require.NoError(err) - require.Equal(5, n) - require.Equal([]byte("hello"), hello[:]) + isnil(t, err) + equal(t, 5, n) + equal(t, "hello", string(hello[:])) state.SkipSpace() n, err = state.Read(world[:]) - require.NoError(err) - require.Equal(6, n) - require.Equal([]byte("world!"), world[:n]) + isnil(t, err) + equal(t, 6, n) + equal(t, "world!", string(world[:n])) } diff --git a/uint128_test.go b/uint128_test.go index ed9f08a..ef56347 100644 --- a/uint128_test.go +++ b/uint128_test.go @@ -1,57 +1,59 @@ package decimal -import ( - "testing" - - "github.com/stretchr/testify/require" -) +import "testing" func TestUint128Shl(t *testing.T) { - require.Equal(t, uint128T{}, uint128T{}.shl(1)) - require.Equal(t, uint128T{2, 0}, uint128T{1, 0}.shl(1)) - require.Equal(t, uint128T{4, 0}, uint128T{2, 0}.shl(1)) - require.Equal(t, uint128T{4, 0}, uint128T{1, 0}.shl(2)) - require.Equal(t, uint128T{0, 1}, uint128T{1, 42}.shl(64)) - require.Equal(t, uint128T{0, 3}, uint128T{3, 42}.shl(64)) + t.Parallel() + + equal(t, uint128T{}, uint128T{}.shl(1)) + equal(t, uint128T{2, 0}, uint128T{1, 0}.shl(1)) + equal(t, uint128T{4, 0}, uint128T{2, 0}.shl(1)) + equal(t, uint128T{4, 0}, uint128T{1, 0}.shl(2)) + equal(t, uint128T{0, 1}, uint128T{1, 42}.shl(64)) + equal(t, uint128T{0, 3}, uint128T{3, 42}.shl(64)) } func TestUint128Sqrt(t *testing.T) { - require.EqualValues(t, 0, uint128T{}.sqrt()) - require.EqualValues(t, 1, uint128T{1, 0}.sqrt()) - require.EqualValues(t, 1, uint128T{2, 0}.sqrt()) - require.EqualValues(t, 2, uint128T{4, 0}.sqrt()) - require.EqualValues(t, 2, uint128T{8, 0}.sqrt()) - require.EqualValues(t, 3, uint128T{9, 0}.sqrt()) - require.EqualValues(t, int64(1<<32), uint128T{0, 1}.sqrt()) - require.EqualValues(t, int64(2<<32), uint128T{0, 4}.sqrt()) + t.Parallel() + + equal(t, 0, uint128T{}.sqrt()) + equal(t, 1, uint128T{1, 0}.sqrt()) + equal(t, 1, uint128T{2, 0}.sqrt()) + equal(t, 2, uint128T{4, 0}.sqrt()) + equal(t, 2, uint128T{8, 0}.sqrt()) + equal(t, 3, uint128T{9, 0}.sqrt()) + equal(t, uint64(1<<32), uint128T{0, 1}.sqrt()) + equal(t, uint64(2<<32), uint128T{0, 4}.sqrt()) } func TestUint128DivBy10(t *testing.T) { - require.Equal(t, uint128T{0, 0}, uint128T{0, 0}.divBy10()) - require.Equal(t, uint128T{0, 0}, uint128T{1, 0}.divBy10()) - require.Equal(t, uint128T{0, 0}, uint128T{9, 0}.divBy10()) - require.Equal(t, uint128T{1, 0}, uint128T{10, 0}.divBy10()) - require.Equal(t, uint128T{1, 0}, uint128T{19, 0}.divBy10()) - require.Equal(t, uint128T{2, 0}, uint128T{20, 0}.divBy10()) - require.Equal(t, uint128T{9, 0}, uint128T{99, 0}.divBy10()) - require.Equal(t, uint128T{10, 0}, uint128T{100, 0}.divBy10()) - require.Equal(t, uint128T{9999, 0}, uint128T{99999, 0}.divBy10()) - require.Equal(t, uint128T{10000, 0}, uint128T{100000, 0}.divBy10()) - require.Equal(t, uint128T{(1 << 64) / 10, 0}, uint128T{0, 1}.divBy10()) - require.Equal(t, uint128T{(2 << 64) / 10, 0}, uint128T{0, 2}.divBy10()) - require.Equal(t, + t.Parallel() + + equal(t, uint128T{0, 0}, uint128T{0, 0}.divBy10()) + equal(t, uint128T{0, 0}, uint128T{1, 0}.divBy10()) + equal(t, uint128T{0, 0}, uint128T{9, 0}.divBy10()) + equal(t, uint128T{1, 0}, uint128T{10, 0}.divBy10()) + equal(t, uint128T{1, 0}, uint128T{19, 0}.divBy10()) + equal(t, uint128T{2, 0}, uint128T{20, 0}.divBy10()) + equal(t, uint128T{9, 0}, uint128T{99, 0}.divBy10()) + equal(t, uint128T{10, 0}, uint128T{100, 0}.divBy10()) + equal(t, uint128T{9999, 0}, uint128T{99999, 0}.divBy10()) + equal(t, uint128T{10000, 0}, uint128T{100000, 0}.divBy10()) + equal(t, uint128T{(1 << 64) / 10, 0}, uint128T{0, 1}.divBy10()) + equal(t, uint128T{(2 << 64) / 10, 0}, uint128T{0, 2}.divBy10()) + equal(t, uint128T{((123 << 64) / 10) % (1 << 64), ((123 << 64) / 10) >> 64}, uint128T{0, 123}.divBy10(), ) - require.Equal(t, + equal(t, uint128T{((123456789 << 64) / 10) % (1 << 64), ((123456789 << 64) / 10) >> 64}, uint128T{0, 123456789}.divBy10(), ) - require.Equal(t, + equal(t, uint128T{((123 << 56 << 64) / 10) % (1 << 64), ((123 << 56 << 64) / 10) >> 64}, uint128T{0, 123 << 56}.divBy10(), ) - require.Equal(t, + equal(t, uint128T{((1<<128 - 1) / 10) % (1 << 64), ((1<<128 - 1) / 10) >> 64}, uint128T{1<<64 - 1, 1<<64 - 1}.divBy10(), ) diff --git a/util_test.go b/util_test.go index 56d3ab0..9c46a10 100644 --- a/util_test.go +++ b/util_test.go @@ -1,37 +1,122 @@ package decimal -import ( - "testing" +import "testing" - "github.com/stretchr/testify/require" -) +func check(t *testing.T, ok bool) bool { + t.Helper() + if !ok { + t.Errorf("expected true") + return false + } + return true +} + +func epsilon(t *testing.T, a, b float64) bool { + t.Helper() + if a/b-1 > 0.00000001 { + t.Errorf("%f and %f too dissimilar", a, b) + return false + } + return true +} + +func equal[T comparable](t *testing.T, a, b T) bool { + t.Helper() + if a != b { + t.Errorf("expected %+v, got %+v", a, b) + return false + } + return true +} + +func equalD64(t *testing.T, expected, actual Decimal64, fmtAndArgs ...any) { + t.Helper() + equal(t, expected.bits, actual.bits) +} + +func isnil(t *testing.T, a any) bool { + t.Helper() + if a != nil { + t.Errorf("expected nil, got %+v", a) + return false + } + return true +} + +func nopanic(t *testing.T, f func()) (b bool) { + t.Helper() + defer func() { + if r := recover(); r != nil { + t.Errorf("panic: %+v", r) + b = false + } + }() + f() + return true +} + +func notequal[T comparable](t *testing.T, a, b T) bool { + t.Helper() + if a == b { + t.Errorf("equal values %+v", a) + return false + } + return true +} + +func notnil(t *testing.T, a any) bool { + t.Helper() + if a == nil { + t.Errorf("expected non-nil") + return false + } + return true +} + +func panics(t *testing.T, f func()) (b bool) { + t.Helper() + defer func() { + if r := recover(); r == nil { + t.Errorf("expected panic") + b = false + } + }() + f() + return true +} func TestDiv10_64(t *testing.T) { + t.Parallel() + for i := uint64(0); i <= 10000; i++ { d := uint128T{i, 0}.divBy10().lo - require.EqualValues(t, i/10, d, "%d/10 ≠ %d (expecting %d)", i, d, i/10) + equal(t, i/10, d) } } func TestDiv10_64_po10(t *testing.T) { + t.Parallel() + for i, u := range tenToThe128 { var e uint128T if i > 0 { e = tenToThe128[i-1] } a := u.divBy10() - require.EqualValues(t, e, a, "%v/10 ≠ %v (expecting %d)", u, a, e) + equal(t, e, a) } } func TestUmul64_po10(t *testing.T) { + t.Parallel() + for i, u := range tenToThe128 { if u.hi == 0 { for j, v := range tenToThe128 { if v.hi == 0 { e := tenToThe128[i+j] a := umul64(u.lo, v.lo) - require.EqualValues(t, e, a, "%v/10 ≠ %v (expecting %d)", u, a, e) + equal(t, e, a) } } } From 835b1b617b7cd897b694e3ea23cfbcd9d2de3d88 Mon Sep 17 00:00:00 2001 From: Marcelo Cantos <13160581+anzdaddy@users.noreply.github.com> Date: Wed, 20 Nov 2024 10:25:15 +1100 Subject: [PATCH 05/68] wip --- Makefile | 4 ++-- decimal64.go | 2 +- decimal64decParts.go | 29 ++++++++++++++++++++++++----- decimal64math.go | 2 ++ decimal64math_test.go | 42 ++++++++++++++++++++++++++++++------------ 5 files changed, 59 insertions(+), 20 deletions(-) diff --git a/Makefile b/Makefile index c358f15..4b60db6 100644 --- a/Makefile +++ b/Makefile @@ -58,7 +58,7 @@ profile: cpu.prof .INTERMEDIATE: cpu.prof cpu.prof: - go test -cpuprofile $@ -count=10 $(GOTESTFLAGS) + go test -cpuprofile $@ -count=10 $(GOPROFILEFLAGS) .PHONY: bench bench: bench.txt @@ -72,4 +72,4 @@ bench.stat: bench.txt benchstat bench.old $< > $@ || (rm -f $@; false) bench.txt: test - go test -run=^$$ -bench=. -benchmem -count=10 $(GOTESTFLAGS) > $@ || (rm -f $@; false) + go test -run=^$$ -bench=. -benchmem $(GOBENCHFLAGS) > $@ || (rm -f $@; false) diff --git a/decimal64.go b/decimal64.go index 1eed077..cf403f0 100644 --- a/decimal64.go +++ b/decimal64.go @@ -26,7 +26,7 @@ const ( ) // Rounding defines how arithmetic operations round numbers in certain operations. -type Rounding int +type Rounding int8 const ( // HalfUp rounds to the nearest number, rounding away from zero if the diff --git a/decimal64decParts.go b/decimal64decParts.go index 437c6d3..93af03f 100644 --- a/decimal64decParts.go +++ b/decimal64decParts.go @@ -121,30 +121,26 @@ func (dp *decParts) rescale(targetExp int) (rndStatus discardedDigit) { func (dp *decParts) unpack(d Decimal64) { dp.original = d dp.sign = int(d.bits >> 63) + dp.fl = flav(d) switch (d.bits >> (63 - 4)) & 0xf { case 15: switch (d.bits >> (63 - 6)) & 3 { case 0, 1: - dp.fl = flInf case 2: - dp.fl = flQNaN dp.significand.lo = d.bits & (1<<51 - 1) // Payload return case 3: - dp.fl = flSNaN dp.significand.lo = d.bits & (1<<51 - 1) // Payload return } case 12, 13, 14: // s 11EEeeeeeeee (100)t tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt // EE ∈ {00, 01, 10} - dp.fl = flNormal dp.exp = int((d.bits>>(63-12))&(1<<10-1)) - expOffset dp.significand.lo = d.bits&(1<<51-1) | (1 << 53) default: // s EEeeeeeeee (0)ttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt // EE ∈ {00, 01, 10} - dp.fl = flNormal dp.exp = int((d.bits>>(63-10))&(1<<10-1)) - expOffset dp.significand.lo = d.bits & (1<<53 - 1) if dp.significand.lo == 0 { @@ -152,3 +148,26 @@ func (dp *decParts) unpack(d Decimal64) { } } } + +var flavorLookup = []flavor{ + flNormal, flNormal, flNormal, flNormal, + flNormal, flNormal, flNormal, flNormal, + flNormal, flNormal, flNormal, flNormal, + flNormal, flNormal, flNormal, flNormal, + flNormal, flNormal, flNormal, flNormal, + flNormal, flNormal, flNormal, flNormal, + flNormal, flNormal, flNormal, flNormal, + flNormal, flNormal, flNormal, flNormal, + flNormal, flNormal, flNormal, flNormal, + flNormal, flNormal, flNormal, flNormal, + flNormal, flNormal, flNormal, flNormal, + flNormal, flNormal, flNormal, flNormal, + flNormal, flNormal, flNormal, flNormal, + flNormal, flNormal, flNormal, flNormal, + flNormal, flNormal, flNormal, flNormal, + flInf, flInf, flQNaN, flSNaN, +} + +func flav(d Decimal64) flavor { + return flavorLookup[(d.bits>>(64-7))%uint64(len(flavorLookup))] +} diff --git a/decimal64math.go b/decimal64math.go index 7e38265..0b155de 100644 --- a/decimal64math.go +++ b/decimal64math.go @@ -425,6 +425,8 @@ func (ctx Context64) FMA(d, e, f Decimal64) Decimal64 { // Mul computes d * e func (ctx Context64) Mul(d, e Decimal64) Decimal64 { + // fld := flav(d) + // fle := flav(e) var dp decParts dp.unpack(d) var ep decParts diff --git a/decimal64math_test.go b/decimal64math_test.go index 2e66f74..099499a 100644 --- a/decimal64math_test.go +++ b/decimal64math_test.go @@ -6,6 +6,8 @@ import ( "testing" ) +var sink any + func checkDecimal64BinOp( t *testing.T, expected func(a, b int64) int64, @@ -456,7 +458,7 @@ func benchmarkDecimal64Data() []Decimal64 { func BenchmarkDecimal64Abs(b *testing.B) { x := benchmarkDecimal64Data() - for i := 0; i <= b.N; i++ { + for i := 0; i < b.N; i++ { _ = x[i%len(x)].Abs() } } @@ -464,7 +466,7 @@ func BenchmarkDecimal64Abs(b *testing.B) { func BenchmarkDecimal64Add(b *testing.B) { x := benchmarkDecimal64Data() y := x[:len(x)-2] - for i := 0; i <= b.N; i++ { + for i := 0; i < b.N; i++ { _ = x[i%len(x)].Add(y[i%len(y)]) } } @@ -472,30 +474,46 @@ func BenchmarkDecimal64Add(b *testing.B) { func BenchmarkDecimal64Cmp(b *testing.B) { x := benchmarkDecimal64Data() y := x[:len(x)-2] - for i := 0; i <= b.N; i++ { + for i := 0; i < b.N; i++ { _ = x[i%len(x)].Cmp(y[i%len(y)]) } } func BenchmarkDecimal64Mul(b *testing.B) { - x := benchmarkDecimal64Data() - y := x[:len(x)-2] - for i := 0; i <= b.N; i++ { - _ = x[i%len(x)].Mul(y[i%len(y)]) + x := One64 + y, err := Parse64("1.00000000001") + if err != nil { + b.Fatal(err) + } + z := x.Quo(y) + for i := 0; i < b.N; i++ { + x = x.Mul(y) + y, z = z, y } + sink = x +} + +func BenchmarkFloat64Mul(b *testing.B) { + x := 1.0 + y := 1.00000000001 + z := 1 / y + for i := 0; i < b.N; i++ { + x *= y + y, z = z, y + } + sink = x } func BenchmarkDecimal64Quo(b *testing.B) { x := benchmarkDecimal64Data() - y := x[:len(x)-2] - for i := 0; i <= b.N; i++ { - _ = x[i%len(x)].Quo(y[i%len(y)]) + for i := 0; i < b.N; i++ { + _ = x[i%len(x)].Mul(x[(2*i)%len(x)]) } } func BenchmarkDecimal64Sqrt(b *testing.B) { x := benchmarkDecimal64Data() - for i := 0; i <= b.N; i++ { + for i := 0; i < b.N; i++ { _ = x[i%len(x)].Sqrt() } } @@ -503,7 +521,7 @@ func BenchmarkDecimal64Sqrt(b *testing.B) { func BenchmarkDecimal64Sub(b *testing.B) { x := benchmarkDecimal64Data() y := x[:len(x)-2] - for i := 0; i <= b.N; i++ { + for i := 0; i < b.N; i++ { _ = x[i%len(x)].Sub(y[i%len(y)]) } } From 7c236e229e2367e2771088cdb083ef7db266e11f Mon Sep 17 00:00:00 2001 From: Marcelo Cantos <13160581+anzdaddy@users.noreply.github.com> Date: Wed, 20 Nov 2024 10:55:58 +1100 Subject: [PATCH 06/68] wip --- Makefile | 9 +++-- decimal64.go | 85 +++++++++++++++++++++----------------------- decimal64decParts.go | 32 +++++++++++++++-- 3 files changed, 74 insertions(+), 52 deletions(-) diff --git a/Makefile b/Makefile index 4b60db6..b8f06df 100644 --- a/Makefile +++ b/Makefile @@ -52,13 +52,12 @@ DOCKERRUN = docker run --rm \ lint: build-linux $(DOCKERRUN) golangci/golangci-lint:v1.60.1-alpine golangci-lint run -.PHONY: profile -profile: cpu.prof +%.pprof: %.prof go tool pprof -http=:8080 $< -.INTERMEDIATE: cpu.prof -cpu.prof: - go test -cpuprofile $@ -count=10 $(GOPROFILEFLAGS) +.INTERMEDIATE: %.prof +%.prof: + go test -$*profile $@ -count=10 $(GOPROFILEFLAGS) .PHONY: bench bench: bench.txt diff --git a/decimal64.go b/decimal64.go index cf403f0..cc069ce 100644 --- a/decimal64.go +++ b/decimal64.go @@ -16,15 +16,43 @@ const ( gt5 ) -type flavor int +type flavor int8 const ( - flNormal flavor = 1 << iota - flInf + flInf flavor = 0 + flNormal53 flavor = 1 << iota + flNormal51 flQNaN flSNaN + flNormal = flNormal53 | flNormal51 + flNaN = flQNaN | flSNaN ) +func (f flavor) normal() bool { + return f&flNormal != 0 +} + +func (f flavor) nan() bool { + return f&flNaN != 0 +} + +func (f flavor) String() string { + switch f { + case flInf: + return "Infinity" + case flNormal53: + return "Normal53" + case flNormal51: + return "Normal51" + case flQNaN: + return "QNaN" + case flSNaN: + return "SNaN" + default: + return fmt.Sprintf("Unknown flavor %d", f) + } +} + // Rounding defines how arithmetic operations round numbers in certain operations. type Rounding int8 @@ -167,32 +195,31 @@ func new64FromInt64(value int64) Decimal64 { } func renormalize(exp int, significand uint64) (int, uint64) { - numBits := 64 - bits.LeadingZeros64(significand) + numBits := bits.Len64(significand) numDigits := numBits * 3 / 10 normExp := 15 - numDigits if normExp > 0 { - if exp-normExp < -expOffset { + if normExp > exp+expOffset { normExp = exp + expOffset } exp -= normExp significand *= tenToThe[normExp] } else if normExp < -1 { normExp++ - if exp-normExp > expMax { + if normExp < exp-expMax { normExp = exp - expMax } exp -= normExp significand /= tenToThe[-normExp] } - for significand < decimal64Base && exp > -expOffset { - exp-- - significand *= 10 - } - for significand >= 10*decimal64Base && exp < expMax { - exp++ - significand /= 10 + switch { + case significand < decimal64Base && exp > -expOffset: + return exp - 1, significand * 10 + case significand >= 10*decimal64Base: + return exp + 1, significand / 10 + default: + return exp, significand } - return exp, significand } // roundStatus gives info about the truncated part of the significand that can't be fully stored in 16 decimal digits. @@ -213,36 +240,6 @@ func roundStatus(significand uint64, exp int, targetExp int) discardedDigit { return gt5 } -// func from stack overflow: samgak -// TODO: make this more efficent -func countTrailingZeros(n uint64) int { - zeros := 0 - q := n / 1_0000_0000_0000_0000 - if n == q*1_0000_0000_0000_0000 { - zeros += 16 - n = q - } - q = n / 1_0000_0000 - if n == q*1_0000_0000 { - zeros += 8 - n = q - } - q = n / 10000 - if n == q*10000 { - zeros += 4 - n = q - } - q = n / 100 - if n == q*100 { - zeros += 2 - n = q - } - if n%10 == 0 { - zeros++ - } - return zeros -} - func newFromParts(sign int, exp int, significand uint64) Decimal64 { return new64(newFromPartsRaw(sign, exp, significand).bits) } diff --git a/decimal64decParts.go b/decimal64decParts.go index 93af03f..e193f8e 100644 --- a/decimal64decParts.go +++ b/decimal64decParts.go @@ -94,9 +94,35 @@ func (dp *decParts) separation(ep *decParts) int { // removeZeros removes zeros and increments the exponent to match. func (dp *decParts) removeZeros() { - zeros := countTrailingZeros(dp.significand.lo) - dp.significand.lo /= tenToThe[zeros] - dp.exp += zeros + e := dp.exp + n := dp.significand.lo + b := n / 1_0000_0000_0000_0000 + if n == b*1_0000_0000_0000_0000 { + e += 16 + n = b + } + b = n / 1_0000_0000 + if n == b*1_0000_0000 { + e += 8 + n = b + } + b = n / 10000 + if n == b*10000 { + e += 4 + n = b + } + b = n / 100 + if n == b*100 { + e += 2 + n = b + } + b = n / 10 + if n == b*10 { + e++ + n = b + } + dp.significand.lo = n + dp.exp = e } // isinf returns true if the decimal is an infinty From c7331c232a140e174e0fdcf1b633076a26687c53 Mon Sep 17 00:00:00 2001 From: Marcelo Cantos <13160581+anzdaddy@users.noreply.github.com> Date: Wed, 20 Nov 2024 11:00:43 +1100 Subject: [PATCH 07/68] wip --- decimal64.go | 22 +++++++++------------- decimal64const.go | 3 +-- decimal64decParts.go | 26 ++++++++++++++++++++++++++ 3 files changed, 36 insertions(+), 15 deletions(-) diff --git a/decimal64.go b/decimal64.go index cc069ce..df33277 100644 --- a/decimal64.go +++ b/decimal64.go @@ -382,31 +382,27 @@ func (d Decimal64) Int64x() (i int64, exact bool) { // IsZero returns true if the Decimal encodes a zero value. func (d Decimal64) IsZero() bool { fl, _, _, significand := d.parts() - return significand == 0 && fl == flNormal + return significand == 0 && fl.normal() } // IsInf indicates whether d is ±∞. func (d Decimal64) IsInf() bool { - fl, _, _, _ := d.parts() - return fl == flInf + return d.flavor() == flInf } // IsNaN indicates whether d is not a number. func (d Decimal64) IsNaN() bool { - fl, _, _, _ := d.parts() - return fl == flQNaN || fl == flSNaN + return d.flavor().nan() } // IsQNaN indicates whether d is a quiet NaN. func (d Decimal64) IsQNaN() bool { - fl, _, _, _ := d.parts() - return fl == flQNaN + return d.flavor() == flQNaN } // IsSNaN indicates whether d is a signalling NaN. func (d Decimal64) IsSNaN() bool { - fl, _, _, _ := d.parts() - return fl == flSNaN + return d.flavor() == flSNaN } // IsInt indicates whether d is an integer. @@ -429,7 +425,7 @@ func (d Decimal64) quiet() Decimal64 { // IsSubnormal indicates whether d is a subnormal. func (d Decimal64) IsSubnormal() bool { fl, _, _, significand := d.parts() - return significand != 0 && significand < decimal64Base && fl == flNormal + return significand != 0 && significand < decimal64Base && fl.normal() } // Sign returns -1/0/1 if d is 0, respectively. @@ -454,10 +450,10 @@ func (d Decimal64) ScaleB(e Decimal64) Decimal64 { return r } - if dp.fl != flNormal || dp.isZero() { + if !dp.fl.normal() || dp.isZero() { return d } - if ep.fl != flNormal { + if !ep.fl.normal() { return QNaN64 } @@ -471,7 +467,7 @@ func (d Decimal64) ScaleB(e Decimal64) Decimal64 { func (d Decimal64) ScaleBInt(i int) Decimal64 { var dp decParts dp.unpack(d) - if dp.fl != flNormal || dp.isZero() { + if !dp.fl.normal() || dp.isZero() { return d } return scaleBInt(&dp, i) diff --git a/decimal64const.go b/decimal64const.go index ca32cdd..7eb22e1 100644 --- a/decimal64const.go +++ b/decimal64const.go @@ -36,8 +36,7 @@ var E64 = newFromParts(0, -15, 2_718281828459045) const neg64 uint64 = 0x80 << 56 const inf64 uint64 = 0x78 << 56 -// 1E15 -const decimal64Base uint64 = 1_000_000_000_000_000 +const decimal64Base uint64 = 1_000_000_000_000_000 // 1E15 const decimal64Digits = 16 // maxSig is the maximum significand possible that fits in 16 decimal places. diff --git a/decimal64decParts.go b/decimal64decParts.go index e193f8e..198df3c 100644 --- a/decimal64decParts.go +++ b/decimal64decParts.go @@ -175,6 +175,32 @@ func (dp *decParts) unpack(d Decimal64) { } } +// https://en.wikipedia.org/wiki/Decimal64_floating-point_format#Binary_integer_significand_field +var flavMap = [...]flavor{ + /* 0000xx */ flNormal53, flNormal53, flNormal53, flNormal53, + /* 0001xx */ flNormal53, flNormal53, flNormal53, flNormal53, + /* 0010xx */ flNormal53, flNormal53, flNormal53, flNormal53, + /* 0011xx */ flNormal53, flNormal53, flNormal53, flNormal53, + /* 0100xx */ flNormal53, flNormal53, flNormal53, flNormal53, + /* 0101xx */ flNormal53, flNormal53, flNormal53, flNormal53, + /* 0110xx */ flNormal53, flNormal53, flNormal53, flNormal53, + /* 0111xx */ flNormal53, flNormal53, flNormal53, flNormal53, + /* 1000xx */ flNormal53, flNormal53, flNormal53, flNormal53, + /* 1001xx */ flNormal53, flNormal53, flNormal53, flNormal53, + /* 1010xx */ flNormal53, flNormal53, flNormal53, flNormal53, + /* 1011xx */ flNormal53, flNormal53, flNormal53, flNormal53, + /* 1100xx */ flNormal51, flNormal51, flNormal51, flNormal51, + /* 1101xx */ flNormal51, flNormal51, flNormal51, flNormal51, + /* 1110xx */ flNormal51, flNormal51, flNormal51, flNormal51, + /* 11110x */ flInf, flInf, + /* 111110 */ flQNaN, + /* 111111 */ flSNaN, +} + +func (d Decimal64) flavor() flavor { + return flavMap[int(d.bits>>(64-7))%len(flavMap)] +} + var flavorLookup = []flavor{ flNormal, flNormal, flNormal, flNormal, flNormal, flNormal, flNormal, flNormal, From d9efce45ca1ade7d62faec307f4c52d480b8b715 Mon Sep 17 00:00:00 2001 From: Marcelo Cantos <13160581+anzdaddy@users.noreply.github.com> Date: Wed, 20 Nov 2024 11:04:54 +1100 Subject: [PATCH 08/68] wip --- decimal64.go | 17 +++++++++++++++++ decimal64_test.go | 31 +++++++++++++++++++++---------- decimal64math.go | 6 +++--- decimal64math_test.go | 16 ++++++---------- decimal64scan_test.go | 6 +++--- util_test.go | 32 +++++++++++++++++++++++--------- 6 files changed, 73 insertions(+), 35 deletions(-) diff --git a/decimal64.go b/decimal64.go index df33277..fbc05b0 100644 --- a/decimal64.go +++ b/decimal64.go @@ -557,6 +557,23 @@ func checkNan(d, e *decParts) (Decimal64, bool) { return d.original, false } +// checkNan returns the decimal NaN that is to be propogated and true else first decimal and false +func checkNanV2(fld, fle flavor, d, e Decimal64) (Decimal64, bool) { + if fld == flSNaN { + return d, true + } + if fle == flSNaN { + return e, true + } + if fld == flQNaN { + return d, true + } + if fle == flQNaN { + return e, true + } + return d, false +} + // checkNan3 returns the decimal NaN that is to be propogated and true else first decimal and false func checkNan3(d, e, f *decParts) (Decimal64, bool) { if d.fl == flSNaN { diff --git a/decimal64_test.go b/decimal64_test.go index 50d1fc8..10bb2d0 100644 --- a/decimal64_test.go +++ b/decimal64_test.go @@ -9,10 +9,17 @@ import ( func TestNew64FromInt64(t *testing.T) { t.Parallel() - for i := int64(-1000); i <= 1000; i++ { - d := New64FromInt64(i) - j := d.Int64() - equal(t, i, j) + for i := int64(0); i <= 1000; i++ { + repeatOnFail(t, func() { + d := New64FromInt64(i) + j := d.Int64() + equal(t, i, j) + }) + repeatOnFail(t, func() { + d := New64FromInt64(-i) + j := d.Int64() + equal(t, -i, j) + }) } // Test the neighborhood of powers of two up to the high-significand @@ -20,9 +27,11 @@ func TestNew64FromInt64(t *testing.T) { for e := 4; e < 54; e++ { base := int64(1) << uint(e) for i := base - 10; i <= base+10; i++ { - d := New64FromInt64(i) - j := d.Int64() - equal(t, i, j) + repeatOnFail(t, func() { + d := New64FromInt64(i) + j := d.Int64() + equal(t, i, j) + }) } } } @@ -33,9 +42,11 @@ func TestNew64FromInt64Big(t *testing.T) { const limit = int64(decimal64Base) const step = limit / 997 for i := -int64(limit); i <= limit; i += step { - d := New64FromInt64(i) - j := d.Int64() - equal(t, i, j) + repeatOnFail(t, func() { + d := New64FromInt64(i) + j := d.Int64() + equal(t, i, j) + }) } } diff --git a/decimal64math.go b/decimal64math.go index 0b155de..850e652 100644 --- a/decimal64math.go +++ b/decimal64math.go @@ -470,7 +470,7 @@ func (d Decimal64) NextPlus() Decimal64 { return NegMax64 } return Infinity64 - case flav != flNormal: + case !flav.normal(): return d case significand == 0: return Min64 @@ -507,7 +507,7 @@ func (d Decimal64) NextMinus() Decimal64 { return Max64 } return NegInfinity64 - case flav != flNormal: + case !flav.normal(): return d case significand == 0: return NegMin64 @@ -605,7 +605,7 @@ var decPartsOne64 decParts = unpack(One64) func (ctx Context64) ToIntegral(d Decimal64) Decimal64 { var dp decParts dp.unpack(d) - if dp.fl != flNormal || dp.exp >= 0 { + if !dp.fl.normal() || dp.exp >= 0 { return d } return new64(ctx.roundRefRaw(&dp, &decPartsOne64).bits) diff --git a/decimal64math_test.go b/decimal64math_test.go index 099499a..7609eff 100644 --- a/decimal64math_test.go +++ b/decimal64math_test.go @@ -12,7 +12,6 @@ func checkDecimal64BinOp( t *testing.T, expected func(a, b int64) int64, actual func(a, b Decimal64) Decimal64, - op string, ) { for i := int64(-100); i <= 100; i++ { a := New64FromInt64(i) @@ -48,7 +47,6 @@ func TestDecimal64Add(t *testing.T) { checkDecimal64BinOp(t, func(a, b int64) int64 { return a + b }, func(a, b Decimal64) Decimal64 { return a.Add(b) }, - "+", ) } @@ -141,7 +139,6 @@ func TestDecimal64Mul(t *testing.T) { checkDecimal64BinOp(t, func(a, b int64) int64 { return a * b }, func(a, b Decimal64) Decimal64 { return a.Mul(b) }, - "*", ) } @@ -290,7 +287,7 @@ func TestDecimal64MulPo10(t *testing.T) { } e := New64FromInt64(int64(w.lo)) a := New64FromInt64(int64(u.lo)).Mul(New64FromInt64(int64(v.lo))) - equalD64(t, e, a, "%v * %v ≠ %v (expecting %v)", u, v, a, e) + equalD64(t, e, a) } } } @@ -303,7 +300,7 @@ func TestDecimal64Sqrt(t *testing.T) { e := New64FromInt64(i) n := New64FromInt64(i2) a := n.Sqrt() - equalD64(t, e, a, "√%v != %v (expected %v)", n, a, e) + equalD64(t, e, a) } } @@ -332,7 +329,6 @@ func TestDecimal64Sub(t *testing.T) { checkDecimal64BinOp(t, func(a, b int64) int64 { return a - b }, func(a, b Decimal64) Decimal64 { return a.Sub(b) }, - "-", ) } @@ -481,13 +477,13 @@ func BenchmarkDecimal64Cmp(b *testing.B) { func BenchmarkDecimal64Mul(b *testing.B) { x := One64 - y, err := Parse64("1.00000000001") + y, err := Parse64("3.142") if err != nil { b.Fatal(err) } z := x.Quo(y) for i := 0; i < b.N; i++ { - x = x.Mul(y) + x = x.Mul(z) y, z = z, y } sink = x @@ -495,10 +491,10 @@ func BenchmarkDecimal64Mul(b *testing.B) { func BenchmarkFloat64Mul(b *testing.B) { x := 1.0 - y := 1.00000000001 + y := 3.142 z := 1 / y for i := 0; i < b.N; i++ { - x *= y + x *= z y, z = z, y } sink = x diff --git a/decimal64scan_test.go b/decimal64scan_test.go index e0fcd09..28e445d 100644 --- a/decimal64scan_test.go +++ b/decimal64scan_test.go @@ -132,17 +132,17 @@ func parseEquals64(t *testing.T) func(expected Decimal64, input string) { return func(expected Decimal64, input string) { nopanic(t, func() { n := MustParse64(input) - equalD64(t, expected, n, "%s", input) + equalD64(t, expected, n) }) n, err := Parse64(input) isnil(t, err) - equalD64(t, expected, n, "%s", input) + equalD64(t, expected, n) n = SNaN64 count, err := fmt.Sscanf(input, "%g", &n) isnil(t, err) equal(t, 1, count) - equalD64(t, expected, n, "%s", input) + equalD64(t, expected, n) } } diff --git a/util_test.go b/util_test.go index 9c46a10..fc69ead 100644 --- a/util_test.go +++ b/util_test.go @@ -2,10 +2,24 @@ package decimal import "testing" +func errorf(t *testing.T, format string, args ...any) { + t.Helper() + t.Errorf(format, args...) +} + +func repeatOnFail(t *testing.T, f func()) { + t.Helper() + alreadyFailed := t.Failed() + f() + if !alreadyFailed && t.Failed() { + f() + } +} + func check(t *testing.T, ok bool) bool { t.Helper() if !ok { - t.Errorf("expected true") + errorf(t, "expected true") return false } return true @@ -14,7 +28,7 @@ func check(t *testing.T, ok bool) bool { func epsilon(t *testing.T, a, b float64) bool { t.Helper() if a/b-1 > 0.00000001 { - t.Errorf("%f and %f too dissimilar", a, b) + errorf(t, "%f and %f too dissimilar", a, b) return false } return true @@ -23,13 +37,13 @@ func epsilon(t *testing.T, a, b float64) bool { func equal[T comparable](t *testing.T, a, b T) bool { t.Helper() if a != b { - t.Errorf("expected %+v, got %+v", a, b) + errorf(t, "expected %+v, got %+v", a, b) return false } return true } -func equalD64(t *testing.T, expected, actual Decimal64, fmtAndArgs ...any) { +func equalD64(t *testing.T, expected, actual Decimal64) { t.Helper() equal(t, expected.bits, actual.bits) } @@ -37,7 +51,7 @@ func equalD64(t *testing.T, expected, actual Decimal64, fmtAndArgs ...any) { func isnil(t *testing.T, a any) bool { t.Helper() if a != nil { - t.Errorf("expected nil, got %+v", a) + errorf(t, "expected nil, got %+v", a) return false } return true @@ -47,7 +61,7 @@ func nopanic(t *testing.T, f func()) (b bool) { t.Helper() defer func() { if r := recover(); r != nil { - t.Errorf("panic: %+v", r) + errorf(t, "panic: %+v", r) b = false } }() @@ -58,7 +72,7 @@ func nopanic(t *testing.T, f func()) (b bool) { func notequal[T comparable](t *testing.T, a, b T) bool { t.Helper() if a == b { - t.Errorf("equal values %+v", a) + errorf(t, "equal values %+v", a) return false } return true @@ -67,7 +81,7 @@ func notequal[T comparable](t *testing.T, a, b T) bool { func notnil(t *testing.T, a any) bool { t.Helper() if a == nil { - t.Errorf("expected non-nil") + errorf(t, "expected non-nil") return false } return true @@ -77,7 +91,7 @@ func panics(t *testing.T, f func()) (b bool) { t.Helper() defer func() { if r := recover(); r == nil { - t.Errorf("expected panic") + errorf(t, "expected panic") b = false } }() From 9eeb39b1405a279c3e69e6e33bb461ff21194cb0 Mon Sep 17 00:00:00 2001 From: Marcelo Cantos <13160581+anzdaddy@users.noreply.github.com> Date: Wed, 20 Nov 2024 11:07:46 +1100 Subject: [PATCH 09/68] wip --- decimal64.go | 8 ++++---- decimal64decParts.go | 38 ++++++++++++++++++-------------------- decimal64math.go | 2 +- 3 files changed, 23 insertions(+), 25 deletions(-) diff --git a/decimal64.go b/decimal64.go index fbc05b0..20da370 100644 --- a/decimal64.go +++ b/decimal64.go @@ -277,13 +277,13 @@ func (d Decimal64) parts() (fl flavor, sign int, exp int, significand uint64) { case 12, 13, 14: // s 11EEeeeeeeee (100)t tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt // EE ∈ {00, 01, 10} - fl = flNormal + fl = flNormal51 exp = int((d.bits>>(63-12))&(1<<10-1)) - expOffset significand = d.bits&(1<<51-1) | (1 << 53) default: // s EEeeeeeeee (0)ttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt // EE ∈ {00, 01, 10} - fl = flNormal + fl = flNormal53 exp = int((d.bits>>(63-10))&(1<<10-1)) - expOffset significand = d.bits & (1<<53 - 1) if significand == 0 { @@ -329,7 +329,7 @@ func expWholeFrac(exp int, significand uint64) (exp2 int, whole uint64, frac uin func (d Decimal64) Float64() float64 { fl, sign, exp, significand := d.parts() switch fl { - case flNormal: + case flNormal53, flNormal51: if significand == 0 { return 0.0 * float64(1-2*sign) } @@ -409,7 +409,7 @@ func (d Decimal64) IsSNaN() bool { func (d Decimal64) IsInt() bool { fl, _, exp, significand := d.parts() switch fl { - case flNormal: + case flNormal53, flNormal51: _, _, frac := expWholeFrac(exp, significand) return frac == 0 default: diff --git a/decimal64decParts.go b/decimal64decParts.go index 198df3c..d22b124 100644 --- a/decimal64decParts.go +++ b/decimal64decParts.go @@ -68,7 +68,7 @@ func (dp *decParts) roundToLo() discardedDigit { } func (dp *decParts) isZero() bool { - return (dp.significand == uint128T{}) && dp.significand.hi == 0 && dp.fl == flNormal + return dp.significand == uint128T{} && dp.fl.normal() } func (dp *decParts) isInf() bool { @@ -84,7 +84,7 @@ func (dp *decParts) isSNaN() bool { } func (dp *decParts) isSubnormal() bool { - return (dp.significand != uint128T{}) && dp.significand.lo < decimal64Base && dp.fl == flNormal + return (dp.significand != uint128T{}) && dp.significand.lo < decimal64Base && dp.fl.normal() } // separation gets the separation in decimal places of the MSD's of two decimal 64s @@ -145,26 +145,15 @@ func (dp *decParts) rescale(targetExp int) (rndStatus discardedDigit) { } func (dp *decParts) unpack(d Decimal64) { + dp.unpackV2(d, d.flavor()) +} + +func (dp *decParts) unpackV2(d Decimal64, fl flavor) { dp.original = d dp.sign = int(d.bits >> 63) - dp.fl = flav(d) - switch (d.bits >> (63 - 4)) & 0xf { - case 15: - switch (d.bits >> (63 - 6)) & 3 { - case 0, 1: - case 2: - dp.significand.lo = d.bits & (1<<51 - 1) // Payload - return - case 3: - dp.significand.lo = d.bits & (1<<51 - 1) // Payload - return - } - case 12, 13, 14: - // s 11EEeeeeeeee (100)t tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt - // EE ∈ {00, 01, 10} - dp.exp = int((d.bits>>(63-12))&(1<<10-1)) - expOffset - dp.significand.lo = d.bits&(1<<51-1) | (1 << 53) - default: + dp.fl = fl + switch fl { + case flNormal53: // s EEeeeeeeee (0)ttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt // EE ∈ {00, 01, 10} dp.exp = int((d.bits>>(63-10))&(1<<10-1)) - expOffset @@ -172,6 +161,15 @@ func (dp *decParts) unpack(d Decimal64) { if dp.significand.lo == 0 { dp.exp = 0 } + case flNormal51: + // s 11EEeeeeeeee (100)t tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt + // EE ∈ {00, 01, 10} + dp.exp = int((d.bits>>(63-12))&(1<<10-1)) - expOffset + dp.significand.lo = d.bits&(1<<51-1) | (1 << 53) + case flInf: + default: // NaN + dp.significand.lo = d.bits & (1<<51 - 1) // Payload + return } } diff --git a/decimal64math.go b/decimal64math.go index 850e652..17b1a9a 100644 --- a/decimal64math.go +++ b/decimal64math.go @@ -294,7 +294,7 @@ func (d Decimal64) Sqrt() Decimal64 { return d case flSNaN: return SNaN64 - case flNormal: + case flNormal53, flNormal51: } if significand == 0 { return d From c5dd44207c260c19f129bcb68428207909c28628 Mon Sep 17 00:00:00 2001 From: Marcelo Cantos <13160581+anzdaddy@users.noreply.github.com> Date: Wed, 20 Nov 2024 11:19:19 +1100 Subject: [PATCH 10/68] wip --- uint128_test.go | 123 +++++++++++++++++++++++++++++++++--------------- 1 file changed, 85 insertions(+), 38 deletions(-) diff --git a/uint128_test.go b/uint128_test.go index ef56347..bbfa7b1 100644 --- a/uint128_test.go +++ b/uint128_test.go @@ -5,56 +5,103 @@ import "testing" func TestUint128Shl(t *testing.T) { t.Parallel() - equal(t, uint128T{}, uint128T{}.shl(1)) - equal(t, uint128T{2, 0}, uint128T{1, 0}.shl(1)) - equal(t, uint128T{4, 0}, uint128T{2, 0}.shl(1)) - equal(t, uint128T{4, 0}, uint128T{1, 0}.shl(2)) - equal(t, uint128T{0, 1}, uint128T{1, 42}.shl(64)) - equal(t, uint128T{0, 3}, uint128T{3, 42}.shl(64)) + test := func(expected, original uint128T, shift uint) { + t.Helper() + actual := original.shl(shift) + equal(t, expected, actual) + } + test(uint128T{}, uint128T{}, 1) + test(uint128T{2, 0}, uint128T{1, 0}, 1) + test(uint128T{4, 0}, uint128T{2, 0}, 1) + test(uint128T{4, 0}, uint128T{1, 0}, 2) + test(uint128T{0, 1}, uint128T{1, 42}, 64) + test(uint128T{0, 3}, uint128T{3, 42}, 64) +} + +func TestUint128Shr(t *testing.T) { + t.Parallel() + + test := func(expected, original uint128T, shift uint) { + t.Helper() + actual := original.shr(shift) + equal(t, expected, actual) + } + test(uint128T{}, uint128T{}, 1) + test(uint128T{1, 0}, uint128T{2, 0}, 1) + test(uint128T{2, 0}, uint128T{4, 0}, 1) + test(uint128T{1, 0}, uint128T{4, 0}, 2) + test(uint128T{1, 0}, uint128T{0, 1}, 64) + test(uint128T{3, 0}, uint128T{0, 3}, 64) + test(uint128T{0x80000000 << 32, 0}, uint128T{0, 1}, 1) + test(uint128T{0xffff8000 << 32, 0x7fff}, uint128T{0xffff0000 << 32, 0xffff}, 1) } func TestUint128Sqrt(t *testing.T) { t.Parallel() - equal(t, 0, uint128T{}.sqrt()) - equal(t, 1, uint128T{1, 0}.sqrt()) - equal(t, 1, uint128T{2, 0}.sqrt()) - equal(t, 2, uint128T{4, 0}.sqrt()) - equal(t, 2, uint128T{8, 0}.sqrt()) - equal(t, 3, uint128T{9, 0}.sqrt()) - equal(t, uint64(1<<32), uint128T{0, 1}.sqrt()) - equal(t, uint64(2<<32), uint128T{0, 4}.sqrt()) + test := func(expected uint64, original uint128T) { + t.Helper() + equal(t, expected, original.sqrt()) + } + test(0, uint128T{}) + test(1, uint128T{1, 0}) + test(1, uint128T{2, 0}) + test(2, uint128T{4, 0}) + test(2, uint128T{8, 0}) + test(3, uint128T{9, 0}) + test(uint64(1<<32), uint128T{0, 1}) + test(uint64(2<<32), uint128T{0, 4}) +} + +func TestUint128MulBy10(t *testing.T) { + t.Parallel() + + test := func(expected, original uint128T) { + t.Helper() + actual := original.mulBy10() + equal(t, expected, actual) + } + test(uint128T{0, 0}, uint128T{0, 0}) + test(uint128T{10, 0}, uint128T{1, 0}) + test(uint128T{20, 0}, uint128T{2, 0}) + test(uint128T{90, 0}, uint128T{9, 0}) + test(uint128T{100, 0}, uint128T{10, 0}) + test(uint128T{99990, 0}, uint128T{9999, 0}) + test(uint128T{100000, 0}, uint128T{10000, 0}) + test(uint128T{0xfffffffffffffffa, 0}, uint128T{(1 << 64) / 10, 0}) + test(uint128T{0xfffffffffffffffc, 3}, uint128T{(4 << 64) / 10, 0}) } func TestUint128DivBy10(t *testing.T) { t.Parallel() - equal(t, uint128T{0, 0}, uint128T{0, 0}.divBy10()) - equal(t, uint128T{0, 0}, uint128T{1, 0}.divBy10()) - equal(t, uint128T{0, 0}, uint128T{9, 0}.divBy10()) - equal(t, uint128T{1, 0}, uint128T{10, 0}.divBy10()) - equal(t, uint128T{1, 0}, uint128T{19, 0}.divBy10()) - equal(t, uint128T{2, 0}, uint128T{20, 0}.divBy10()) - equal(t, uint128T{9, 0}, uint128T{99, 0}.divBy10()) - equal(t, uint128T{10, 0}, uint128T{100, 0}.divBy10()) - equal(t, uint128T{9999, 0}, uint128T{99999, 0}.divBy10()) - equal(t, uint128T{10000, 0}, uint128T{100000, 0}.divBy10()) - equal(t, uint128T{(1 << 64) / 10, 0}, uint128T{0, 1}.divBy10()) - equal(t, uint128T{(2 << 64) / 10, 0}, uint128T{0, 2}.divBy10()) - equal(t, - uint128T{((123 << 64) / 10) % (1 << 64), ((123 << 64) / 10) >> 64}, - uint128T{0, 123}.divBy10(), + test := func(expected, original uint128T) { + t.Helper() + actual := original.divBy10() + equal(t, expected, actual) + } + test(uint128T{0, 0}, uint128T{0, 0}) + test(uint128T{0, 0}, uint128T{1, 0}) + test(uint128T{0, 0}, uint128T{9, 0}) + test(uint128T{1, 0}, uint128T{10, 0}) + test(uint128T{1, 0}, uint128T{19, 0}) + test(uint128T{2, 0}, uint128T{20, 0}) + test(uint128T{9, 0}, uint128T{99, 0}) + test(uint128T{10, 0}, uint128T{100, 0}) + test(uint128T{9999, 0}, uint128T{99999, 0}) + test(uint128T{10000, 0}, uint128T{100000, 0}) + test(uint128T{(1 << 64) / 10, 0}, uint128T{0, 1}) + test(uint128T{(2 << 64) / 10, 0}, uint128T{0, 2}) + test(uint128T{((123 << 64) / 10) % (1 << 64), ((123 << 64) / 10) >> 64}, + uint128T{0, 123}, ) - equal(t, - uint128T{((123456789 << 64) / 10) % (1 << 64), ((123456789 << 64) / 10) >> 64}, - uint128T{0, 123456789}.divBy10(), + test(uint128T{((123456789 << 64) / 10) % (1 << 64), ((123456789 << 64) / 10) >> 64}, + uint128T{0, 123456789}, ) - equal(t, - uint128T{((123 << 56 << 64) / 10) % (1 << 64), ((123 << 56 << 64) / 10) >> 64}, - uint128T{0, 123 << 56}.divBy10(), + test(uint128T{((123 << 56 << 64) / 10) % (1 << 64), ((123 << 56 << 64) / 10) >> 64}, + uint128T{0, 123 << 56}, ) - equal(t, - uint128T{((1<<128 - 1) / 10) % (1 << 64), ((1<<128 - 1) / 10) >> 64}, - uint128T{1<<64 - 1, 1<<64 - 1}.divBy10(), + test(uint128T{((1<<128 - 1) / 10) % (1 << 64), ((1<<128 - 1) / 10) >> 64}, + uint128T{1<<64 - 1, 1<<64 - 1}, ) } From baa2c8645031ee98cf210f68a44f64b6ea7b7126 Mon Sep 17 00:00:00 2001 From: Marcelo Cantos <13160581+anzdaddy@users.noreply.github.com> Date: Wed, 20 Nov 2024 11:21:32 +1100 Subject: [PATCH 11/68] wip --- decimal64decParts.go | 23 ----------------------- 1 file changed, 23 deletions(-) diff --git a/decimal64decParts.go b/decimal64decParts.go index d22b124..86b6b65 100644 --- a/decimal64decParts.go +++ b/decimal64decParts.go @@ -198,26 +198,3 @@ var flavMap = [...]flavor{ func (d Decimal64) flavor() flavor { return flavMap[int(d.bits>>(64-7))%len(flavMap)] } - -var flavorLookup = []flavor{ - flNormal, flNormal, flNormal, flNormal, - flNormal, flNormal, flNormal, flNormal, - flNormal, flNormal, flNormal, flNormal, - flNormal, flNormal, flNormal, flNormal, - flNormal, flNormal, flNormal, flNormal, - flNormal, flNormal, flNormal, flNormal, - flNormal, flNormal, flNormal, flNormal, - flNormal, flNormal, flNormal, flNormal, - flNormal, flNormal, flNormal, flNormal, - flNormal, flNormal, flNormal, flNormal, - flNormal, flNormal, flNormal, flNormal, - flNormal, flNormal, flNormal, flNormal, - flNormal, flNormal, flNormal, flNormal, - flNormal, flNormal, flNormal, flNormal, - flNormal, flNormal, flNormal, flNormal, - flInf, flInf, flQNaN, flSNaN, -} - -func flav(d Decimal64) flavor { - return flavorLookup[(d.bits>>(64-7))%uint64(len(flavorLookup))] -} From fa941a73a277b269a54ceb6f30c4b29a296539b8 Mon Sep 17 00:00:00 2001 From: Marcelo Cantos <13160581+anzdaddy@users.noreply.github.com> Date: Wed, 20 Nov 2024 11:29:48 +1100 Subject: [PATCH 12/68] wip --- uint128.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/uint128.go b/uint128.go index 241b284..7951041 100644 --- a/uint128.go +++ b/uint128.go @@ -8,7 +8,7 @@ type uint128T struct { lo, hi uint64 } -func (a uint128T) numDecimalDigits() int { +func (a *uint128T) numDecimalDigits() int { if a.hi == 0 { return numDecimalDigits(a.lo) } From 94d66e02818b53360c0d389392958db15d770786 Mon Sep 17 00:00:00 2001 From: Marcelo Cantos <13160581+anzdaddy@users.noreply.github.com> Date: Wed, 20 Nov 2024 11:36:46 +1100 Subject: [PATCH 13/68] wip --- uint128.go | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/uint128.go b/uint128.go index 7951041..ae2d132 100644 --- a/uint128.go +++ b/uint128.go @@ -40,7 +40,14 @@ func (a uint128T) add(b uint128T) uint128T { return uint128T{lo, hi} } -func (a uint128T) bitLen() uint { +func (a *uint128T) subV2(x, b *uint128T) *uint128T { + var borrow uint64 + a.lo, borrow = bits.Sub64(x.lo, b.lo, 0) + a.hi, _ = bits.Sub64(x.hi, b.hi, borrow) + return a +} + +func (a *uint128T) bitLen() uint { return 128 - a.leadingZeros() } From 9d46d2b3c2e1d1823a8d410440159ae4531931d3 Mon Sep 17 00:00:00 2001 From: Marcelo Cantos <13160581+anzdaddy@users.noreply.github.com> Date: Wed, 20 Nov 2024 11:42:15 +1100 Subject: [PATCH 14/68] wip --- uint128.go | 29 ++++++++++++++++------------- uint128_test.go | 34 ---------------------------------- util_test.go | 22 ---------------------- 3 files changed, 16 insertions(+), 69 deletions(-) diff --git a/uint128.go b/uint128.go index ae2d132..1adf2df 100644 --- a/uint128.go +++ b/uint128.go @@ -63,28 +63,31 @@ func (a uint128T) divrem64(d uint64) (q uint128T, r uint64) { return } -// See http://www.hackersdelight.org/divcMore.pdf for div-by-const tricks. +func (a *uint128T) divbase(x *uint128T) *uint128T { + *a = uint128T{divbase(x.hi, x.lo), 0} + return a +} -func (a uint128T) divBy10() uint128T { - q := a.shr(1).add(a.shr(2)) - q = q.add(q.shr(4)) - q = q.add(q.shr(8)) - q = q.add(q.shr(16)) - q = q.add(q.shr(32)) - q = q.add(q.shr(64)) - q = q.shr(3) - r := a.sub(q.mulBy10()) - return q.add(uint128T{(r.lo + 6) >> 4, 0}) +func divbase(hi, lo uint64) uint64 { + // divbase is only called by Context64.Mul with (hi, lo) ≤ (10*base - 1)^2 + // = 0x0000_04ee_2d6d_415b__8565_e19c_207e_0001 + // = up to 43 bits of hi + m := hi<<(64-43) + lo>>43 // (hi, lo) >> 43 + a, _ := bits.Mul64(m, 0x901d7cf73ab0acd9) // (2^113)/decimal64Base + // a := mul64(m) + // (a, _) ~= (hi, lo) >> 43 << 113 / base = (hi, lo) << 70 / base + // rbase is a shade under 2^113/base; add 1 here to correct it. + return a>>(70-64) + 1 } -func (a uint128T) leadingZeros() uint { +func (a *uint128T) leadingZeros() uint { if a.hi > 0 { return uint(bits.LeadingZeros64(a.hi)) } return uint(64 + bits.LeadingZeros64(a.lo)) } -func (a uint128T) lt(b uint128T) bool { +func (a *uint128T) lt(b uint128T) bool { if a.hi != b.hi { return a.hi < b.hi } diff --git a/uint128_test.go b/uint128_test.go index bbfa7b1..2abbc24 100644 --- a/uint128_test.go +++ b/uint128_test.go @@ -71,37 +71,3 @@ func TestUint128MulBy10(t *testing.T) { test(uint128T{0xfffffffffffffffa, 0}, uint128T{(1 << 64) / 10, 0}) test(uint128T{0xfffffffffffffffc, 3}, uint128T{(4 << 64) / 10, 0}) } - -func TestUint128DivBy10(t *testing.T) { - t.Parallel() - - test := func(expected, original uint128T) { - t.Helper() - actual := original.divBy10() - equal(t, expected, actual) - } - test(uint128T{0, 0}, uint128T{0, 0}) - test(uint128T{0, 0}, uint128T{1, 0}) - test(uint128T{0, 0}, uint128T{9, 0}) - test(uint128T{1, 0}, uint128T{10, 0}) - test(uint128T{1, 0}, uint128T{19, 0}) - test(uint128T{2, 0}, uint128T{20, 0}) - test(uint128T{9, 0}, uint128T{99, 0}) - test(uint128T{10, 0}, uint128T{100, 0}) - test(uint128T{9999, 0}, uint128T{99999, 0}) - test(uint128T{10000, 0}, uint128T{100000, 0}) - test(uint128T{(1 << 64) / 10, 0}, uint128T{0, 1}) - test(uint128T{(2 << 64) / 10, 0}, uint128T{0, 2}) - test(uint128T{((123 << 64) / 10) % (1 << 64), ((123 << 64) / 10) >> 64}, - uint128T{0, 123}, - ) - test(uint128T{((123456789 << 64) / 10) % (1 << 64), ((123456789 << 64) / 10) >> 64}, - uint128T{0, 123456789}, - ) - test(uint128T{((123 << 56 << 64) / 10) % (1 << 64), ((123 << 56 << 64) / 10) >> 64}, - uint128T{0, 123 << 56}, - ) - test(uint128T{((1<<128 - 1) / 10) % (1 << 64), ((1<<128 - 1) / 10) >> 64}, - uint128T{1<<64 - 1, 1<<64 - 1}, - ) -} diff --git a/util_test.go b/util_test.go index fc69ead..670c40d 100644 --- a/util_test.go +++ b/util_test.go @@ -99,28 +99,6 @@ func panics(t *testing.T, f func()) (b bool) { return true } -func TestDiv10_64(t *testing.T) { - t.Parallel() - - for i := uint64(0); i <= 10000; i++ { - d := uint128T{i, 0}.divBy10().lo - equal(t, i/10, d) - } -} - -func TestDiv10_64_po10(t *testing.T) { - t.Parallel() - - for i, u := range tenToThe128 { - var e uint128T - if i > 0 { - e = tenToThe128[i-1] - } - a := u.divBy10() - equal(t, e, a) - } -} - func TestUmul64_po10(t *testing.T) { t.Parallel() From 79220131e6c28c197609ad11a81104fdb0eaf8d9 Mon Sep 17 00:00:00 2001 From: Marcelo Cantos <13160581+anzdaddy@users.noreply.github.com> Date: Wed, 20 Nov 2024 11:46:56 +1100 Subject: [PATCH 15/68] wip --- decimal64math.go | 3 ++- uint128.go | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/decimal64math.go b/decimal64math.go index 17b1a9a..74240ac 100644 --- a/decimal64math.go +++ b/decimal64math.go @@ -306,7 +306,8 @@ func (d Decimal64) Sqrt() Decimal64 { exp-- significand *= 10 } - sqrt := umul64(10*decimal64Base, significand).sqrt() + x := umul64(10*decimal64Base, significand) + sqrt := x.sqrt() exp, significand = renormalize(exp/2-8, sqrt) return newFromParts(sign, exp, significand) } diff --git a/uint128.go b/uint128.go index 1adf2df..33ad214 100644 --- a/uint128.go +++ b/uint128.go @@ -139,7 +139,7 @@ func (a uint128T) shr(s uint) uint128T { } // Assumes a < 1<<125 -func (a uint128T) sqrt() uint64 { +func (a *uint128T) sqrt() uint64 { if a.hi == 0 && a.lo < 2 { return a.lo } From d122ba74a896dc2db16d2320e50d0ca052f6606d Mon Sep 17 00:00:00 2001 From: Marcelo Cantos <13160581+anzdaddy@users.noreply.github.com> Date: Wed, 20 Nov 2024 11:54:55 +1100 Subject: [PATCH 16/68] wip --- decimal64math.go | 2 +- uint128.go | 14 -------------- 2 files changed, 1 insertion(+), 15 deletions(-) diff --git a/decimal64math.go b/decimal64math.go index 74240ac..6dc7b9f 100644 --- a/decimal64math.go +++ b/decimal64math.go @@ -449,7 +449,7 @@ func (ctx Context64) Mul(d, e Decimal64) Decimal64 { var roundStatus discardedDigit ans.significand = umul64(dp.significand.lo, ep.significand.lo) ans.exp = dp.exp + ep.exp + 15 - ans.significand = ans.significand.div64(decimal64Base) + ans.significand.divbase(&ans.significand) if ans.exp >= -expOffset { ans.exp, ans.significand.lo = renormalize(ans.exp, ans.significand.lo) } else if ans.exp < 1-expMax { diff --git a/uint128.go b/uint128.go index 33ad214..8abbf72 100644 --- a/uint128.go +++ b/uint128.go @@ -94,13 +94,6 @@ func (a *uint128T) lt(b uint128T) bool { return a.lo < b.lo } -func (a uint128T) mulBy10() uint128T { - // a*10 = a*8 + a*2 - a8 := a.shl(3) - a2 := a.shl(1) - return a8.add(a2) -} - func (a uint128T) mul(b uint128T) uint128T { return umul64(a.hi, b.lo).add(umul64(a.lo, b.hi)).shl(64).add(umul64(a.lo, b.lo)) } @@ -131,13 +124,6 @@ func (a uint128T) shl(s uint) uint128T { return uint128T{0, a.lo << (s - 64)} } -func (a uint128T) shr(s uint) uint128T { - if s < 64 { - return uint128T{a.lo>>s | a.hi<<(64-s), a.hi >> s} - } - return uint128T{a.hi >> (s - 64), 0} -} - // Assumes a < 1<<125 func (a *uint128T) sqrt() uint64 { if a.hi == 0 && a.lo < 2 { From 64803e977b4dd3aa3cc53c5c3272359ae1dd32d0 Mon Sep 17 00:00:00 2001 From: Marcelo Cantos <13160581+anzdaddy@users.noreply.github.com> Date: Wed, 20 Nov 2024 11:58:01 +1100 Subject: [PATCH 17/68] wip --- uint128.go | 11 ++++++----- uint128_test.go | 37 ------------------------------------- 2 files changed, 6 insertions(+), 42 deletions(-) diff --git a/uint128.go b/uint128.go index 8abbf72..ce03751 100644 --- a/uint128.go +++ b/uint128.go @@ -103,18 +103,19 @@ func (a uint128T) mul64(b uint64) uint128T { } // 2's-complement negation, used to implement sub. -func (a uint128T) neg() uint128T { +func (a *uint128T) neg(b *uint128T) *uint128T { // return ^a + 1 - a0 := ^a.lo + 1 - a1 := ^a.hi + a0 := ^b.lo + 1 + a1 := ^b.hi if a0 == 0 { a1++ } - return uint128T{a0, a1} + *a = uint128T{a0, a1} + return a } func (a uint128T) sub(b uint128T) uint128T { - return a.add(b.neg()) + return a.add(*b.neg(&b)) } func (a uint128T) shl(s uint) uint128T { diff --git a/uint128_test.go b/uint128_test.go index 2abbc24..70344e7 100644 --- a/uint128_test.go +++ b/uint128_test.go @@ -18,24 +18,6 @@ func TestUint128Shl(t *testing.T) { test(uint128T{0, 3}, uint128T{3, 42}, 64) } -func TestUint128Shr(t *testing.T) { - t.Parallel() - - test := func(expected, original uint128T, shift uint) { - t.Helper() - actual := original.shr(shift) - equal(t, expected, actual) - } - test(uint128T{}, uint128T{}, 1) - test(uint128T{1, 0}, uint128T{2, 0}, 1) - test(uint128T{2, 0}, uint128T{4, 0}, 1) - test(uint128T{1, 0}, uint128T{4, 0}, 2) - test(uint128T{1, 0}, uint128T{0, 1}, 64) - test(uint128T{3, 0}, uint128T{0, 3}, 64) - test(uint128T{0x80000000 << 32, 0}, uint128T{0, 1}, 1) - test(uint128T{0xffff8000 << 32, 0x7fff}, uint128T{0xffff0000 << 32, 0xffff}, 1) -} - func TestUint128Sqrt(t *testing.T) { t.Parallel() @@ -52,22 +34,3 @@ func TestUint128Sqrt(t *testing.T) { test(uint64(1<<32), uint128T{0, 1}) test(uint64(2<<32), uint128T{0, 4}) } - -func TestUint128MulBy10(t *testing.T) { - t.Parallel() - - test := func(expected, original uint128T) { - t.Helper() - actual := original.mulBy10() - equal(t, expected, actual) - } - test(uint128T{0, 0}, uint128T{0, 0}) - test(uint128T{10, 0}, uint128T{1, 0}) - test(uint128T{20, 0}, uint128T{2, 0}) - test(uint128T{90, 0}, uint128T{9, 0}) - test(uint128T{100, 0}, uint128T{10, 0}) - test(uint128T{99990, 0}, uint128T{9999, 0}) - test(uint128T{100000, 0}, uint128T{10000, 0}) - test(uint128T{0xfffffffffffffffa, 0}, uint128T{(1 << 64) / 10, 0}) - test(uint128T{0xfffffffffffffffc, 3}, uint128T{(4 << 64) / 10, 0}) -} From f16eb5d5dd1b19cb3d9af8316b9e78a1ea9571b1 Mon Sep 17 00:00:00 2001 From: Marcelo Cantos <13160581+anzdaddy@users.noreply.github.com> Date: Wed, 20 Nov 2024 12:05:39 +1100 Subject: [PATCH 18/68] wip --- decimal64.go | 4 +++- decimal64decParts.go | 4 ++-- uint128.go | 6 ++++-- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/decimal64.go b/decimal64.go index 20da370..f0c2e7e 100644 --- a/decimal64.go +++ b/decimal64.go @@ -321,7 +321,9 @@ func expWholeFrac(exp int, significand uint64) (exp2 int, whole uint64, frac uin } } whole128 := n.div64(10 * decimal64Base) - frac128 := n.sub(whole128.mul64(10 * decimal64Base)) + x := whole128.mul64(10 * decimal64Base) + var frac128 uint128T + frac128.sub(&n, &x) return exp, whole128.lo, frac128.lo } diff --git a/decimal64decParts.go b/decimal64decParts.go index 86b6b65..06528ea 100644 --- a/decimal64decParts.go +++ b/decimal64decParts.go @@ -30,10 +30,10 @@ func (dp *decParts) add128(ep *decParts) decParts { } else { if dp.significand.lt(ep.significand) { ans.sign = ep.sign - ans.significand = ep.significand.sub(dp.significand) + ans.significand.sub(&ep.significand, &dp.significand) } else if ep.significand.lt(dp.significand) { ans.sign = dp.sign - ans.significand = dp.significand.sub(ep.significand) + ans.significand.sub(&dp.significand, &ep.significand) } else { ans.significand = uint128T{0, 0} } diff --git a/uint128.go b/uint128.go index ce03751..240d630 100644 --- a/uint128.go +++ b/uint128.go @@ -114,8 +114,10 @@ func (a *uint128T) neg(b *uint128T) *uint128T { return a } -func (a uint128T) sub(b uint128T) uint128T { - return a.add(*b.neg(&b)) +func (a *uint128T) sub(x, y *uint128T) *uint128T { + var n uint128T + *a = x.add(*n.neg(y)) + return a } func (a uint128T) shl(s uint) uint128T { From 66b79d08d1bb97c461c39b678159efaf9d7e14de Mon Sep 17 00:00:00 2001 From: Marcelo Cantos <13160581+anzdaddy@users.noreply.github.com> Date: Wed, 20 Nov 2024 12:10:25 +1100 Subject: [PATCH 19/68] wip --- decimal64decParts.go | 2 +- uint128.go | 23 +++++++++++++++-------- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/decimal64decParts.go b/decimal64decParts.go index 06528ea..f6ffbbc 100644 --- a/decimal64decParts.go +++ b/decimal64decParts.go @@ -26,7 +26,7 @@ func (dp *decParts) add128(ep *decParts) decParts { ans.exp = dp.exp if dp.sign == ep.sign { ans.sign = dp.sign - ans.significand = dp.significand.add(ep.significand) + ans.significand.add(&dp.significand, &ep.significand) } else { if dp.significand.lt(ep.significand) { ans.sign = ep.sign diff --git a/uint128.go b/uint128.go index 240d630..5769728 100644 --- a/uint128.go +++ b/uint128.go @@ -34,10 +34,11 @@ func umul64(a, b uint64) uint128T { return n } -func (a uint128T) add(b uint128T) uint128T { - lo, carry := bits.Add64(a.lo, b.lo, 0) - hi, _ := bits.Add64(a.hi, b.hi, carry) - return uint128T{lo, hi} +func (a *uint128T) add(x, y *uint128T) *uint128T { + var carry uint64 + a.lo, carry = bits.Add64(x.lo, y.lo, 0) + a.hi, _ = bits.Add64(x.hi, y.hi, carry) + return a } func (a *uint128T) subV2(x, b *uint128T) *uint128T { @@ -95,11 +96,18 @@ func (a *uint128T) lt(b uint128T) bool { } func (a uint128T) mul(b uint128T) uint128T { - return umul64(a.hi, b.lo).add(umul64(a.lo, b.hi)).shl(64).add(umul64(a.lo, b.lo)) + x := umul64(a.hi, b.lo) + y := umul64(a.lo, b.hi) + x.add(&x, &y) + x = x.shl(64) + y = umul64(a.lo, b.lo) + return *x.add(&x, &y) } func (a uint128T) mul64(b uint64) uint128T { - return uint128T{0, umul64(a.hi, b).lo}.add(umul64(a.lo, b)) + x := uint128T{0, umul64(a.hi, b).lo} + y := umul64(a.lo, b) + return *x.add(&x, &y) } // 2's-complement negation, used to implement sub. @@ -116,8 +124,7 @@ func (a *uint128T) neg(b *uint128T) *uint128T { func (a *uint128T) sub(x, y *uint128T) *uint128T { var n uint128T - *a = x.add(*n.neg(y)) - return a + return a.add(x, n.neg(y)) } func (a uint128T) shl(s uint) uint128T { From 1d5ea107ff04ac73800c70db648679cb762c405c Mon Sep 17 00:00:00 2001 From: Marcelo Cantos <13160581+anzdaddy@users.noreply.github.com> Date: Wed, 20 Nov 2024 13:21:02 +1100 Subject: [PATCH 20/68] wip --- uint128.go | 13 +++++++++---- uint128_test.go | 4 ++-- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/uint128.go b/uint128.go index 5769728..7fc22d6 100644 --- a/uint128.go +++ b/uint128.go @@ -99,7 +99,7 @@ func (a uint128T) mul(b uint128T) uint128T { x := umul64(a.hi, b.lo) y := umul64(a.lo, b.hi) x.add(&x, &y) - x = x.shl(64) + x.shl(&x, 64) y = umul64(a.lo, b.lo) return *x.add(&x, &y) } @@ -127,11 +127,16 @@ func (a *uint128T) sub(x, y *uint128T) *uint128T { return a.add(x, n.neg(y)) } -func (a uint128T) shl(s uint) uint128T { +func (a *uint128T) shl(b *uint128T, s uint) *uint128T { if s < 64 { - return uint128T{a.lo << s, a.lo>>(64-s) | a.hi<>(64-s)|b.hi< Date: Wed, 20 Nov 2024 13:22:23 +1100 Subject: [PATCH 21/68] wip --- uint128.go | 23 +++-------------------- 1 file changed, 3 insertions(+), 20 deletions(-) diff --git a/uint128.go b/uint128.go index 7fc22d6..31d7c2f 100644 --- a/uint128.go +++ b/uint128.go @@ -41,10 +41,10 @@ func (a *uint128T) add(x, y *uint128T) *uint128T { return a } -func (a *uint128T) subV2(x, b *uint128T) *uint128T { +func (a *uint128T) sub(x, y *uint128T) *uint128T { var borrow uint64 - a.lo, borrow = bits.Sub64(x.lo, b.lo, 0) - a.hi, _ = bits.Sub64(x.hi, b.hi, borrow) + a.lo, borrow = bits.Sub64(x.lo, y.lo, 0) + a.hi, _ = bits.Sub64(x.hi, y.hi, borrow) return a } @@ -110,23 +110,6 @@ func (a uint128T) mul64(b uint64) uint128T { return *x.add(&x, &y) } -// 2's-complement negation, used to implement sub. -func (a *uint128T) neg(b *uint128T) *uint128T { - // return ^a + 1 - a0 := ^b.lo + 1 - a1 := ^b.hi - if a0 == 0 { - a1++ - } - *a = uint128T{a0, a1} - return a -} - -func (a *uint128T) sub(x, y *uint128T) *uint128T { - var n uint128T - return a.add(x, n.neg(y)) -} - func (a *uint128T) shl(b *uint128T, s uint) *uint128T { if s < 64 { return a.set(b.lo>>(64-s)|b.hi< Date: Wed, 20 Nov 2024 13:30:00 +1100 Subject: [PATCH 22/68] wip --- decimal64.go | 5 +++-- decimal64math.go | 7 ++++--- uint128.go | 24 ++++++++++++------------ util_test.go | 3 ++- 4 files changed, 21 insertions(+), 18 deletions(-) diff --git a/decimal64.go b/decimal64.go index f0c2e7e..60620a3 100644 --- a/decimal64.go +++ b/decimal64.go @@ -303,7 +303,7 @@ func expWholeFrac(exp int, significand uint64) (exp2 int, whole uint64, frac uin n := uint128T{significand, 0} exp += 16 if exp > 0 { - n = n.mul64(tenToThe[exp]) + n.mul64(&n, tenToThe[exp]) exp = 0 } else { // exp++ till it hits 0 or continuing would throw away digits. @@ -321,7 +321,8 @@ func expWholeFrac(exp int, significand uint64) (exp2 int, whole uint64, frac uin } } whole128 := n.div64(10 * decimal64Base) - x := whole128.mul64(10 * decimal64Base) + var x uint128T + x.mul64(&whole128, 10*decimal64Base) var frac128 uint128T frac128.sub(&n, &x) return exp, whole128.lo, frac128.lo diff --git a/decimal64math.go b/decimal64math.go index 6dc7b9f..2dc94f7 100644 --- a/decimal64math.go +++ b/decimal64math.go @@ -306,7 +306,8 @@ func (d Decimal64) Sqrt() Decimal64 { exp-- significand *= 10 } - x := umul64(10*decimal64Base, significand) + var x uint128T + x.umul64(10*decimal64Base, significand) sqrt := x.sqrt() exp, significand = renormalize(exp/2-8, sqrt) return newFromParts(sign, exp, significand) @@ -401,7 +402,7 @@ func (ctx Context64) FMA(d, e, f Decimal64) Decimal64 { ep.removeZeros() dp.removeZeros() ans.exp = dp.exp + ep.exp - ans.significand = umul64(dp.significand.lo, ep.significand.lo) + ans.significand.umul64(dp.significand.lo, ep.significand.lo) sep := ans.separation(&fp) if fp.significand.lo != 0 { if sep < -17 { @@ -447,7 +448,7 @@ func (ctx Context64) Mul(d, e Decimal64) Decimal64 { return zeroes64[ans.sign] } var roundStatus discardedDigit - ans.significand = umul64(dp.significand.lo, ep.significand.lo) + ans.significand.umul64(dp.significand.lo, ep.significand.lo) ans.exp = dp.exp + ep.exp + 15 ans.significand.divbase(&ans.significand) if ans.exp >= -expOffset { diff --git a/uint128.go b/uint128.go index 31d7c2f..61086d5 100644 --- a/uint128.go +++ b/uint128.go @@ -23,15 +23,14 @@ func (a *uint128T) numDecimalDigits() int { var tenToThe128 = func() [39]uint128T { var ans [39]uint128T for i := range ans { - ans[i] = umul64(tenToThe[i/2], tenToThe[(i+1)/2]) + ans[i].umul64(tenToThe[i/2], tenToThe[(i+1)/2]) } return ans }() -func umul64(a, b uint64) uint128T { - var n uint128T - n.hi, n.lo = bits.Mul64(a, b) - return n +func (a *uint128T) umul64(x, y uint64) *uint128T { + a.hi, a.lo = bits.Mul64(x, y) + return a } func (a *uint128T) add(x, y *uint128T) *uint128T { @@ -96,18 +95,19 @@ func (a *uint128T) lt(b uint128T) bool { } func (a uint128T) mul(b uint128T) uint128T { - x := umul64(a.hi, b.lo) - y := umul64(a.lo, b.hi) + var x, y uint128T + x.umul64(a.hi, b.lo) + y.umul64(a.lo, b.hi) x.add(&x, &y) x.shl(&x, 64) - y = umul64(a.lo, b.lo) + y.umul64(a.lo, b.lo) return *x.add(&x, &y) } -func (a uint128T) mul64(b uint64) uint128T { - x := uint128T{0, umul64(a.hi, b).lo} - y := umul64(a.lo, b) - return *x.add(&x, &y) +func (a *uint128T) mul64(x *uint128T, b uint64) *uint128T { + var t uint128T + y := uint128T{0, t.umul64(x.hi, b).lo} + return a.add(&y, t.umul64(x.lo, b)) } func (a *uint128T) shl(b *uint128T, s uint) *uint128T { diff --git a/util_test.go b/util_test.go index 670c40d..38f5d80 100644 --- a/util_test.go +++ b/util_test.go @@ -107,7 +107,8 @@ func TestUmul64_po10(t *testing.T) { for j, v := range tenToThe128 { if v.hi == 0 { e := tenToThe128[i+j] - a := umul64(u.lo, v.lo) + var a uint128T + a.umul64(u.lo, v.lo) equal(t, e, a) } } From 19449f30994726cf419b9cb4df086139dabb3870 Mon Sep 17 00:00:00 2001 From: Marcelo Cantos <13160581+anzdaddy@users.noreply.github.com> Date: Wed, 20 Nov 2024 13:32:34 +1100 Subject: [PATCH 23/68] wip --- decimal64.go | 3 ++- uint128.go | 9 +++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/decimal64.go b/decimal64.go index 60620a3..da6b901 100644 --- a/decimal64.go +++ b/decimal64.go @@ -320,7 +320,8 @@ func expWholeFrac(exp int, significand uint64) (exp2 int, whole uint64, frac uin } } } - whole128 := n.div64(10 * decimal64Base) + var whole128 uint128T + whole128.div64(&n, 10*decimal64Base) var x uint128T x.mul64(&whole128, 10*decimal64Base) var frac128 uint128T diff --git a/uint128.go b/uint128.go index 61086d5..a016f8e 100644 --- a/uint128.go +++ b/uint128.go @@ -51,9 +51,9 @@ func (a *uint128T) bitLen() uint { return 128 - a.leadingZeros() } -func (a uint128T) div64(d uint64) uint128T { - q, _ := a.divrem64(d) - return q +func (a *uint128T) div64(x *uint128T, d uint64) *uint128T { + *a, _ = x.divrem64(d) + return a } func (a uint128T) divrem64(d uint64) (q uint128T, r uint64) { @@ -128,7 +128,8 @@ func (a *uint128T) sqrt() uint64 { return a.lo } for x := uint64(1) << (a.bitLen()/2 + 1); ; { - y := (a.div64(x).lo + x) >> 1 + var t uint128T + y := (t.div64(a, x).lo + x) >> 1 if y >= x { return x } From e91481d5a27efaa38f8771a0f1a8b2dfd18cfadf Mon Sep 17 00:00:00 2001 From: Marcelo Cantos <13160581+anzdaddy@users.noreply.github.com> Date: Wed, 20 Nov 2024 13:42:04 +1100 Subject: [PATCH 24/68] wip --- decimal64decParts.go | 4 ++-- uint128.go | 16 ++++++++-------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/decimal64decParts.go b/decimal64decParts.go index f6ffbbc..74a26f2 100644 --- a/decimal64decParts.go +++ b/decimal64decParts.go @@ -45,10 +45,10 @@ func (dp *decParts) matchScales128(ep *decParts) { expDiff := ep.exp - dp.exp if (ep.significand != uint128T{0, 0}) { if expDiff < 0 { - dp.significand = dp.significand.mul(tenToThe128[-expDiff]) + dp.significand.mul(&dp.significand, &tenToThe128[-expDiff]) dp.exp += expDiff } else if expDiff > 0 { - ep.significand = ep.significand.mul(tenToThe128[expDiff]) + ep.significand.mul(&ep.significand, &tenToThe128[expDiff]) ep.exp -= expDiff } } diff --git a/uint128.go b/uint128.go index a016f8e..3be8041 100644 --- a/uint128.go +++ b/uint128.go @@ -94,14 +94,14 @@ func (a *uint128T) lt(b uint128T) bool { return a.lo < b.lo } -func (a uint128T) mul(b uint128T) uint128T { - var x, y uint128T - x.umul64(a.hi, b.lo) - y.umul64(a.lo, b.hi) - x.add(&x, &y) - x.shl(&x, 64) - y.umul64(a.lo, b.lo) - return *x.add(&x, &y) +func (a *uint128T) mul(x, y *uint128T) *uint128T { + var t, u uint128T + t.umul64(x.hi, y.lo) + u.umul64(x.lo, y.hi) + t.add(&t, &u) + t.shl(&t, 64) + u.umul64(x.lo, y.lo) + return a.add(&t, &u) } func (a *uint128T) mul64(x *uint128T, b uint64) *uint128T { From 3b99147d7be7a859bd865f4dac9df80c37832b1c Mon Sep 17 00:00:00 2001 From: Marcelo Cantos <13160581+anzdaddy@users.noreply.github.com> Date: Wed, 20 Nov 2024 13:43:06 +1100 Subject: [PATCH 25/68] wip --- decimal64decParts.go | 4 ++-- uint128.go | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/decimal64decParts.go b/decimal64decParts.go index 74a26f2..c3b16cc 100644 --- a/decimal64decParts.go +++ b/decimal64decParts.go @@ -28,10 +28,10 @@ func (dp *decParts) add128(ep *decParts) decParts { ans.sign = dp.sign ans.significand.add(&dp.significand, &ep.significand) } else { - if dp.significand.lt(ep.significand) { + if dp.significand.lt(&ep.significand) { ans.sign = ep.sign ans.significand.sub(&ep.significand, &dp.significand) - } else if ep.significand.lt(dp.significand) { + } else if ep.significand.lt(&dp.significand) { ans.sign = dp.sign ans.significand.sub(&dp.significand, &ep.significand) } else { diff --git a/uint128.go b/uint128.go index 3be8041..504fde2 100644 --- a/uint128.go +++ b/uint128.go @@ -14,7 +14,7 @@ func (a *uint128T) numDecimalDigits() int { } bitSize := 129 - uint(bits.LeadingZeros64(a.hi)) numDigitsEst := int(bitSize * 3 / 10) - if a.lt(tenToThe128[numDigitsEst]) { + if a.lt(&tenToThe128[numDigitsEst]) { return numDigitsEst } return numDigitsEst + 1 @@ -87,7 +87,7 @@ func (a *uint128T) leadingZeros() uint { return uint(64 + bits.LeadingZeros64(a.lo)) } -func (a *uint128T) lt(b uint128T) bool { +func (a *uint128T) lt(b *uint128T) bool { if a.hi != b.hi { return a.hi < b.hi } From 3d5a51b442057f06ea5c6f069977cf1488cd9380 Mon Sep 17 00:00:00 2001 From: Marcelo Cantos <13160581+anzdaddy@users.noreply.github.com> Date: Wed, 20 Nov 2024 13:47:16 +1100 Subject: [PATCH 26/68] wip --- decimal64decParts.go | 6 +++--- uint128.go | 12 ++++++------ 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/decimal64decParts.go b/decimal64decParts.go index c3b16cc..a3724d6 100644 --- a/decimal64decParts.go +++ b/decimal64decParts.go @@ -57,11 +57,11 @@ func (dp *decParts) matchScales128(ep *decParts) { func (dp *decParts) roundToLo() discardedDigit { var rndStatus discardedDigit - if dsig := dp.significand; dsig.hi > 0 || dsig.lo >= 10*decimal64Base { + if ds := &dp.significand; ds.hi > 0 || ds.lo >= 10*decimal64Base { var remainder uint64 - expDiff := dsig.numDecimalDigits() - 16 + expDiff := ds.numDecimalDigits() - 16 dp.exp += expDiff - dp.significand, remainder = dsig.divrem64(tenToThe[expDiff]) + remainder = ds.divrem64(ds, tenToThe[expDiff]) rndStatus = roundStatus(remainder, 0, expDiff) } return rndStatus diff --git a/uint128.go b/uint128.go index 504fde2..e86594d 100644 --- a/uint128.go +++ b/uint128.go @@ -52,15 +52,15 @@ func (a *uint128T) bitLen() uint { } func (a *uint128T) div64(x *uint128T, d uint64) *uint128T { - *a, _ = x.divrem64(d) + a.divrem64(x, d) return a } -func (a uint128T) divrem64(d uint64) (q uint128T, r uint64) { - r = 0 - q.hi, r = bits.Div64(r, a.hi, d) - q.lo, r = bits.Div64(r, a.lo, d) - return +func (a *uint128T) divrem64(x *uint128T, d uint64) uint64 { + var r uint64 + a.hi, r = bits.Div64(0, x.hi, d) + a.lo, r = bits.Div64(r, x.lo, d) + return r } func (a *uint128T) divbase(x *uint128T) *uint128T { From 9e50700ec3c8544b4b77cf96f6e97057e2c285d3 Mon Sep 17 00:00:00 2001 From: Marcelo Cantos <13160581+anzdaddy@users.noreply.github.com> Date: Wed, 20 Nov 2024 13:49:25 +1100 Subject: [PATCH 27/68] wip --- uint128.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/uint128.go b/uint128.go index e86594d..ed9d799 100644 --- a/uint128.go +++ b/uint128.go @@ -99,7 +99,7 @@ func (a *uint128T) mul(x, y *uint128T) *uint128T { t.umul64(x.hi, y.lo) u.umul64(x.lo, y.hi) t.add(&t, &u) - t.shl(&t, 64) + t = uint128T{0, t.lo} u.umul64(x.lo, y.lo) return a.add(&t, &u) } From 76caf929b6b82d579189abe9dc540cae1a637ba8 Mon Sep 17 00:00:00 2001 From: Marcelo Cantos <13160581+anzdaddy@users.noreply.github.com> Date: Wed, 20 Nov 2024 13:53:38 +1100 Subject: [PATCH 28/68] wip --- uint128.go | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/uint128.go b/uint128.go index ed9d799..a9de348 100644 --- a/uint128.go +++ b/uint128.go @@ -64,20 +64,17 @@ func (a *uint128T) divrem64(x *uint128T, d uint64) uint64 { } func (a *uint128T) divbase(x *uint128T) *uint128T { - *a = uint128T{divbase(x.hi, x.lo), 0} - return a -} - -func divbase(hi, lo uint64) uint64 { // divbase is only called by Context64.Mul with (hi, lo) ≤ (10*base - 1)^2 // = 0x0000_04ee_2d6d_415b__8565_e19c_207e_0001 // = up to 43 bits of hi - m := hi<<(64-43) + lo>>43 // (hi, lo) >> 43 - a, _ := bits.Mul64(m, 0x901d7cf73ab0acd9) // (2^113)/decimal64Base - // a := mul64(m) - // (a, _) ~= (hi, lo) >> 43 << 113 / base = (hi, lo) << 70 / base + m := x.hi<<(64-43) + x.lo>>43 // (hi, lo) >> 43 + q, _ := bits.Mul64(m, 0x901d7cf73ab0acd9) // (2^113)/decimal64Base + // q := mul64(m) + // (q, _) ~= (hi, lo) >> 43 << 113 / base = (hi, lo) << 70 / base // rbase is a shade under 2^113/base; add 1 here to correct it. - return a>>(70-64) + 1 + q = q>>(70-64) + 1 + + return a.set(0, q) } func (a *uint128T) leadingZeros() uint { @@ -99,7 +96,7 @@ func (a *uint128T) mul(x, y *uint128T) *uint128T { t.umul64(x.hi, y.lo) u.umul64(x.lo, y.hi) t.add(&t, &u) - t = uint128T{0, t.lo} + t = uint128T{0, t.lo} // t <<= 64 u.umul64(x.lo, y.lo) return a.add(&t, &u) } From 57273dae50ce5ba3ce1d8889759e69b08503263a Mon Sep 17 00:00:00 2001 From: Marcelo Cantos <13160581+anzdaddy@users.noreply.github.com> Date: Wed, 20 Nov 2024 13:58:09 +1100 Subject: [PATCH 29/68] wip --- uint128.go | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/uint128.go b/uint128.go index a9de348..7c5e48d 100644 --- a/uint128.go +++ b/uint128.go @@ -77,6 +77,20 @@ func (a *uint128T) divbase(x *uint128T) *uint128T { return a.set(0, q) } +func (a *uint128T) div10base(x *uint128T) *uint128T { + // div10base is only called by Context64.Mul with (hi, lo) ≤ (10*base - 1)^2 + // = 0x0000_04ee_2d6d_415b__8565_e19c_207e_0001 + // = up to 43 bits of hi + m := x.hi<<(64-43) + x.lo>>43 // (hi, lo) >> 43 + q, _ := bits.Mul64(m, 0xe69594bec44de15b) // (2^117)/(10*decimal64Base) + // q := mul64(m) + // (q, _) ~= (hi, lo) >> 43 << 117 / base = (hi, lo) << 74 / base + // rbase is a shade under 2^113/base; add 1 here to correct it. + q = q>>(74-64) + 1 + + return a.set(0, q) +} + func (a *uint128T) leadingZeros() uint { if a.hi > 0 { return uint(bits.LeadingZeros64(a.hi)) From 8ed02786da19c64c77b29db96558723356dd6b70 Mon Sep 17 00:00:00 2001 From: Marcelo Cantos <13160581+anzdaddy@users.noreply.github.com> Date: Wed, 20 Nov 2024 13:59:47 +1100 Subject: [PATCH 30/68] wip --- decimal64.go | 2 +- uint128.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/decimal64.go b/decimal64.go index da6b901..8d5eeca 100644 --- a/decimal64.go +++ b/decimal64.go @@ -321,7 +321,7 @@ func expWholeFrac(exp int, significand uint64) (exp2 int, whole uint64, frac uin } } var whole128 uint128T - whole128.div64(&n, 10*decimal64Base) + whole128.div10base(&n) var x uint128T x.mul64(&whole128, 10*decimal64Base) var frac128 uint128T diff --git a/uint128.go b/uint128.go index 7c5e48d..81fe48b 100644 --- a/uint128.go +++ b/uint128.go @@ -78,7 +78,7 @@ func (a *uint128T) divbase(x *uint128T) *uint128T { } func (a *uint128T) div10base(x *uint128T) *uint128T { - // div10base is only called by Context64.Mul with (hi, lo) ≤ (10*base - 1)^2 + // div10base is only called by expWholeFrac with (hi, lo) ≤ (10*base - 1)^2 // = 0x0000_04ee_2d6d_415b__8565_e19c_207e_0001 // = up to 43 bits of hi m := x.hi<<(64-43) + x.lo>>43 // (hi, lo) >> 43 From b85187babee179be6d4e216a41d41b7fcf190d43 Mon Sep 17 00:00:00 2001 From: Marcelo Cantos <13160581+anzdaddy@users.noreply.github.com> Date: Wed, 20 Nov 2024 14:09:52 +1100 Subject: [PATCH 31/68] wip --- Makefile | 2 +- decimal64decParts.go | 4 +--- decimal64fmt_test.go | 8 ++++---- decimal64math.go | 5 +++-- decimal64scan_test.go | 4 ++-- 5 files changed, 11 insertions(+), 12 deletions(-) diff --git a/Makefile b/Makefile index b8f06df..b00ff20 100644 --- a/Makefile +++ b/Makefile @@ -56,7 +56,7 @@ lint: build-linux go tool pprof -http=:8080 $< .INTERMEDIATE: %.prof -%.prof: +%.prof: $(wildcard *.go) go test -$*profile $@ -count=10 $(GOPROFILEFLAGS) .PHONY: bench diff --git a/decimal64decParts.go b/decimal64decParts.go index a3724d6..8624105 100644 --- a/decimal64decParts.go +++ b/decimal64decParts.go @@ -20,9 +20,8 @@ func (dp *decParts) decimal64() Decimal64 { } // add128 adds two decParts with full precision in 128 bits of significand -func (dp *decParts) add128(ep *decParts) decParts { +func (ans *decParts) add128(dp, ep *decParts) { dp.matchScales128(ep) - var ans decParts ans.exp = dp.exp if dp.sign == ep.sign { ans.sign = dp.sign @@ -38,7 +37,6 @@ func (dp *decParts) add128(ep *decParts) decParts { ans.significand = uint128T{0, 0} } } - return ans } func (dp *decParts) matchScales128(ep *decParts) { diff --git a/decimal64fmt_test.go b/decimal64fmt_test.go index 20c1f67..00677e6 100644 --- a/decimal64fmt_test.go +++ b/decimal64fmt_test.go @@ -80,14 +80,14 @@ func TestDecimal64StringEdgeCases(t *testing.T) { } // Non-representative sample, but retained for comparison purposes. -func BenchmarkDecimal64String(b *testing.B) { +func BenchmarkIODecimal64String(b *testing.B) { d := New64FromInt64(123456789) for i := 0; i <= b.N; i++ { _ = d.String() } } -func BenchmarkDecimal64String2(b *testing.B) { +func BenchmarkIODecimal64String2(b *testing.B) { dd := []Decimal64{ Zero64, Pi64, @@ -303,7 +303,7 @@ func TestDecimal64Format2(t *testing.T) { equal(t, "0.000164383562", fmt.Sprintf("%.12f", b)) } -func BenchmarkDecimal64Format(b *testing.B) { +func BenchmarkIODecimal64Format(b *testing.B) { d := New64FromInt64(123456789) for i := 0; i <= b.N; i++ { _ = fmt.Sprintf("%v", d) @@ -345,7 +345,7 @@ func TestDecimal64Append(t *testing.T) { } -func BenchmarkDecimal64Append(b *testing.B) { +func BenchmarkIODecimal64Append(b *testing.B) { d := New64FromInt64(123456789) var buf [32]byte for i := 0; i <= b.N; i++ { diff --git a/decimal64math.go b/decimal64math.go index 2dc94f7..a922b6e 100644 --- a/decimal64math.go +++ b/decimal64math.go @@ -349,7 +349,8 @@ func (ctx Context64) Add(d, e Decimal64) Decimal64 { } var rndStatus discardedDigit dp.matchScales128(&ep) - ans := dp.add128(&ep) + var ans decParts + ans.add128(&dp, &ep) rndStatus = ans.roundToLo() if ans.exp < -expOffset { rndStatus = ans.rescale(-expOffset) @@ -408,7 +409,7 @@ func (ctx Context64) FMA(d, e, f Decimal64) Decimal64 { if sep < -17 { return f } else if sep <= 17 { - ans = ans.add128(&fp) + ans.add128(&ans, &fp) } } rndStatus = ans.roundToLo() diff --git a/decimal64scan_test.go b/decimal64scan_test.go index 28e445d..a6b4ed5 100644 --- a/decimal64scan_test.go +++ b/decimal64scan_test.go @@ -109,7 +109,7 @@ func TestDecimal64ScanFlakyScanState(t *testing.T) { } } -func BenchmarkParse64(b *testing.B) { +func BenchmarkIOParse64(b *testing.B) { var d Decimal64 for n := 0; n < b.N; n++ { buf := bytes.NewBufferString("123456789") @@ -117,7 +117,7 @@ func BenchmarkParse64(b *testing.B) { } } -func BenchmarkDecimal64Scan(b *testing.B) { +func BenchmarkIODecimal64Scan(b *testing.B) { reader := strings.NewReader("") for n := 0; n < b.N; n++ { reader.Reset("123456789") From ba78e19e8f85004dcc76519479e04ac21a58dfc3 Mon Sep 17 00:00:00 2001 From: Marcelo Cantos <13160581+anzdaddy@users.noreply.github.com> Date: Wed, 20 Nov 2024 15:26:39 +1100 Subject: [PATCH 32/68] wip --- uint128.go | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/uint128.go b/uint128.go index 81fe48b..d26d8cd 100644 --- a/uint128.go +++ b/uint128.go @@ -1,6 +1,7 @@ package decimal import ( + "math" "math/bits" ) @@ -133,6 +134,15 @@ func (a *uint128T) set(hi, lo uint64) *uint128T { return a } +var sqrts [1 << 16]uint8 + +func init() { + // Precompute square roots for the highest 16 bits. + for i := 0; i < len(sqrts); i++ { + sqrts[i] = uint8(math.Sqrt(float64(i))) + } +} + // Assumes a < 1<<125 func (a *uint128T) sqrt() uint64 { if a.hi == 0 && a.lo < 2 { From 9ac4ef7ab188cbc8e84894058a381f1b72f8899d Mon Sep 17 00:00:00 2001 From: Marcelo Cantos <13160581+anzdaddy@users.noreply.github.com> Date: Wed, 20 Nov 2024 22:04:11 +1100 Subject: [PATCH 33/68] wip --- decimal64_test.go | 8 ++--- uint128.go | 78 +++++++++++++++++++++++------------------------ uint128_test.go | 55 ++++++++++++++++++++++++++++++++- util_test.go | 40 ++++++++++++++++-------- 4 files changed, 125 insertions(+), 56 deletions(-) diff --git a/decimal64_test.go b/decimal64_test.go index 10bb2d0..19370e2 100644 --- a/decimal64_test.go +++ b/decimal64_test.go @@ -10,12 +10,12 @@ func TestNew64FromInt64(t *testing.T) { t.Parallel() for i := int64(0); i <= 1000; i++ { - repeatOnFail(t, func() { + replayOnFail(t, func() { d := New64FromInt64(i) j := d.Int64() equal(t, i, j) }) - repeatOnFail(t, func() { + replayOnFail(t, func() { d := New64FromInt64(-i) j := d.Int64() equal(t, -i, j) @@ -27,7 +27,7 @@ func TestNew64FromInt64(t *testing.T) { for e := 4; e < 54; e++ { base := int64(1) << uint(e) for i := base - 10; i <= base+10; i++ { - repeatOnFail(t, func() { + replayOnFail(t, func() { d := New64FromInt64(i) j := d.Int64() equal(t, i, j) @@ -42,7 +42,7 @@ func TestNew64FromInt64Big(t *testing.T) { const limit = int64(decimal64Base) const step = limit / 997 for i := -int64(limit); i <= limit; i += step { - repeatOnFail(t, func() { + replayOnFail(t, func() { d := New64FromInt64(i) j := d.Int64() equal(t, i, j) diff --git a/uint128.go b/uint128.go index d26d8cd..3b3e83a 100644 --- a/uint128.go +++ b/uint128.go @@ -3,6 +3,7 @@ package decimal import ( "math" "math/bits" + "sync" ) type uint128T struct { @@ -64,32 +65,18 @@ func (a *uint128T) divrem64(x *uint128T, d uint64) uint64 { return r } -func (a *uint128T) divbase(x *uint128T) *uint128T { - // divbase is only called by Context64.Mul with (hi, lo) ≤ (10*base - 1)^2 - // = 0x0000_04ee_2d6d_415b__8565_e19c_207e_0001 - // = up to 43 bits of hi - m := x.hi<<(64-43) + x.lo>>43 // (hi, lo) >> 43 - q, _ := bits.Mul64(m, 0x901d7cf73ab0acd9) // (2^113)/decimal64Base - // q := mul64(m) - // (q, _) ~= (hi, lo) >> 43 << 113 / base = (hi, lo) << 70 / base - // rbase is a shade under 2^113/base; add 1 here to correct it. - q = q>>(70-64) + 1 +// divbase divides a by [decimal64Base]. +func (a *uint128T) divbase(x *uint128T) *uint128T { return a.divc(x, 113, 0x901d7cf73ab0acd9) } - return a.set(0, q) -} - -func (a *uint128T) div10base(x *uint128T) *uint128T { - // div10base is only called by expWholeFrac with (hi, lo) ≤ (10*base - 1)^2 - // = 0x0000_04ee_2d6d_415b__8565_e19c_207e_0001 - // = up to 43 bits of hi - m := x.hi<<(64-43) + x.lo>>43 // (hi, lo) >> 43 - q, _ := bits.Mul64(m, 0xe69594bec44de15b) // (2^117)/(10*decimal64Base) - // q := mul64(m) - // (q, _) ~= (hi, lo) >> 43 << 117 / base = (hi, lo) << 74 / base - // rbase is a shade under 2^113/base; add 1 here to correct it. - q = q>>(74-64) + 1 +// div10base divides a by 10*[decimal64Base]. +func (a *uint128T) div10base(x *uint128T) *uint128T { return a.divc(x, 117, 0xe69594bec44de15b) } - return a.set(0, q) +// divc divides a by n, expressed as a power-of-two index and 1<>43 // (hi, lo) >> 43 + q, _ := bits.Mul64(m, rdenom) + return a.set(0, q>>((index-43)-64)+1) } func (a *uint128T) leadingZeros() uint { @@ -134,15 +121,6 @@ func (a *uint128T) set(hi, lo uint64) *uint128T { return a } -var sqrts [1 << 16]uint8 - -func init() { - // Precompute square roots for the highest 16 bits. - for i := 0; i < len(sqrts); i++ { - sqrts[i] = uint8(math.Sqrt(float64(i))) - } -} - // Assumes a < 1<<125 func (a *uint128T) sqrt() uint64 { if a.hi == 0 && a.lo < 2 { @@ -158,9 +136,31 @@ func (a *uint128T) sqrt() uint64 { } } -// func (a uint128T) trailingZeros() uint { -// if a.lo > 0 { -// return uint(bits.TrailingZeros64(a.lo)) -// } -// return uint(bits.TrailingZeros64(a.hi) + 64) -// } +func u64sqrt(n uint64) uint64 { + const maxu32 = 1<<32 - 1 + switch { + case n == 0: + return 0 + case n >= maxu32*maxu32: + return maxu32 + } + + // Shift up as far as possible (but always an even emount). + shift := bits.LeadingZeros64(n) / 2 + n <<= 2 * shift + + s := sqrtTable() + x := uint64(s[n>>(64-16)]) << (32 - 16) + + // Two iterations suffice. + x = (x + n/x) >> 1 + return (x + n/x) >> (1 + shift) +} + +var sqrtTable = sync.OnceValue(func() *[1 << 16]uint16 { + var s [1 << 16]uint16 + for i := 0; i < len(s); i++ { + s[i] = uint16(math.Sqrt(float64(i << 16))) + } + return &s +}) diff --git a/uint128_test.go b/uint128_test.go index 62f02be..846785d 100644 --- a/uint128_test.go +++ b/uint128_test.go @@ -1,6 +1,10 @@ package decimal -import "testing" +import ( + "math/bits" + "math/rand" + "testing" +) func TestUint128Shl(t *testing.T) { t.Parallel() @@ -34,3 +38,52 @@ func TestUint128Sqrt(t *testing.T) { test(uint64(1<<32), uint128T{0, 1}) test(uint64(2<<32), uint128T{0, 4}) } + +func TestU64sqrt(t *testing.T) { + t.Parallel() + + test := func(n uint64) { + t.Helper() + replayOnFail(t, func() { + t.Helper() + s := u64sqrt(n) + sq := s * s + s1q := (s + 1) * (s + 1) + // s1q < sq handles overflow cases. + check(t, sq <= n && (s1q < sq || s1q >= n)).Or(t.FailNow) + }) + } + + // Fibonacci numbers, just because + var a, b uint64 = 1, 1 + for a < b { + test(a) + a, b = b, a+b + } + + hi := uint64(1<<64 - 1) + + for i := 0; i < 64; i++ { + n := uint64(1) << i + test(n) + test(hi - n) + } + + for i := uint64(0); i < 100_000; i++ { + test(i) + test(hi - i) + } + + // (2**64)**1e-6 ~ 1.00004 + for i := uint64(100_000); i < (1<<64)*99_999/100_004; { + test(i) + test(hi - i) + a, b := bits.Mul64(i, 100_004) + i, _ = bits.Div64(a, b, 100_000) + } + + s := rand.NewSource(0).(rand.Source64) + for i := 0; i < 1_000_000; i++ { + test(s.Uint64()) + } +} diff --git a/util_test.go b/util_test.go index 38f5d80..84217b7 100644 --- a/util_test.go +++ b/util_test.go @@ -7,16 +7,30 @@ func errorf(t *testing.T, format string, args ...any) { t.Errorf(format, args...) } -func repeatOnFail(t *testing.T, f func()) { +func replayOnFail(t *testing.T, f func()) { t.Helper() alreadyFailed := t.Failed() + defer func() { + t.Helper() + if r := recover(); r != nil { + errorf(t, "panic: %+v", r) + } + if !alreadyFailed && t.Failed() { + f() // Set a breakpoint here to replay the first failed test. + } + }() f() - if !alreadyFailed && t.Failed() { +} + +type pass bool + +func (p pass) Or(f func()) { + if !p { f() } } -func check(t *testing.T, ok bool) bool { +func check(t *testing.T, ok bool) pass { t.Helper() if !ok { errorf(t, "expected true") @@ -25,7 +39,7 @@ func check(t *testing.T, ok bool) bool { return true } -func epsilon(t *testing.T, a, b float64) bool { +func epsilon(t *testing.T, a, b float64) pass { t.Helper() if a/b-1 > 0.00000001 { errorf(t, "%f and %f too dissimilar", a, b) @@ -34,7 +48,7 @@ func epsilon(t *testing.T, a, b float64) bool { return true } -func equal[T comparable](t *testing.T, a, b T) bool { +func equal[T comparable](t *testing.T, a, b T) pass { t.Helper() if a != b { errorf(t, "expected %+v, got %+v", a, b) @@ -43,12 +57,12 @@ func equal[T comparable](t *testing.T, a, b T) bool { return true } -func equalD64(t *testing.T, expected, actual Decimal64) { +func equalD64(t *testing.T, expected, actual Decimal64) pass { t.Helper() - equal(t, expected.bits, actual.bits) + return equal(t, expected.bits, actual.bits) } -func isnil(t *testing.T, a any) bool { +func isnil(t *testing.T, a any) pass { t.Helper() if a != nil { errorf(t, "expected nil, got %+v", a) @@ -57,9 +71,10 @@ func isnil(t *testing.T, a any) bool { return true } -func nopanic(t *testing.T, f func()) (b bool) { +func nopanic(t *testing.T, f func()) (b pass) { t.Helper() defer func() { + t.Helper() if r := recover(); r != nil { errorf(t, "panic: %+v", r) b = false @@ -69,7 +84,7 @@ func nopanic(t *testing.T, f func()) (b bool) { return true } -func notequal[T comparable](t *testing.T, a, b T) bool { +func notequal[T comparable](t *testing.T, a, b T) pass { t.Helper() if a == b { errorf(t, "equal values %+v", a) @@ -78,7 +93,7 @@ func notequal[T comparable](t *testing.T, a, b T) bool { return true } -func notnil(t *testing.T, a any) bool { +func notnil(t *testing.T, a any) pass { t.Helper() if a == nil { errorf(t, "expected non-nil") @@ -87,9 +102,10 @@ func notnil(t *testing.T, a any) bool { return true } -func panics(t *testing.T, f func()) (b bool) { +func panics(t *testing.T, f func()) (b pass) { t.Helper() defer func() { + t.Helper() if r := recover(); r == nil { errorf(t, "expected panic") b = false From 09e695a0e078ab287d5f68c88b10b5996bbab50a Mon Sep 17 00:00:00 2001 From: Marcelo Cantos <13160581+anzdaddy@users.noreply.github.com> Date: Wed, 20 Nov 2024 22:10:34 +1100 Subject: [PATCH 34/68] wip --- uint128.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/uint128.go b/uint128.go index 3b3e83a..5b5db1e 100644 --- a/uint128.go +++ b/uint128.go @@ -76,7 +76,7 @@ func (a *uint128T) div10base(x *uint128T) *uint128T { return a.divc(x, 117, 0xe6 func (a *uint128T) divc(x *uint128T, index int, rdenom uint64) *uint128T { m := x.hi<<(64-43) + x.lo>>43 // (hi, lo) >> 43 q, _ := bits.Mul64(m, rdenom) - return a.set(0, q>>((index-43)-64)+1) + return a.set(0, q>>(index-(43+64))+1) } func (a *uint128T) leadingZeros() uint { From b44a3000ad94f9b86486110c1ff739f946ca1ea3 Mon Sep 17 00:00:00 2001 From: Marcelo Cantos <13160581+anzdaddy@users.noreply.github.com> Date: Thu, 21 Nov 2024 08:48:31 +1100 Subject: [PATCH 35/68] wip --- uint128.go | 63 ++++++++++++++++++++++++++++++++++++------------- uint128_test.go | 2 +- 2 files changed, 47 insertions(+), 18 deletions(-) diff --git a/uint128.go b/uint128.go index 5b5db1e..c50648a 100644 --- a/uint128.go +++ b/uint128.go @@ -123,8 +123,8 @@ func (a *uint128T) set(hi, lo uint64) *uint128T { // Assumes a < 1<<125 func (a *uint128T) sqrt() uint64 { - if a.hi == 0 && a.lo < 2 { - return a.lo + if a.hi == 0 { + return sqrtu64(a.lo) } for x := uint64(1) << (a.bitLen()/2 + 1); ; { var t uint128T @@ -134,33 +134,62 @@ func (a *uint128T) sqrt() uint64 { } x = y } -} - -func u64sqrt(n uint64) uint64 { + // if a.hi == 0 { + // return uint64(u64sqrt(a.lo)) + // } + // shift := bits.LeadingZeros64(a.hi) / 2 + // n := a.hi<>uint64(64-(2*shift)) + // s := u64sqrt(n) + // var t uint128T + // y := (t.div64(a, x).lo + x) >> 1 + // if y >= x { + // return x + // } + // x = y + +} + +func sqrtu64(n uint64) uint64 { const maxu32 = 1<<32 - 1 switch { - case n == 0: - return 0 + case n < 1<<16: + return uint64(sqrtu16(uint16(n)) >> 8) case n >= maxu32*maxu32: return maxu32 } - // Shift up as far as possible (but always an even emount). + // Shift up as far as possible, but must be an even amount. shift := bits.LeadingZeros64(n) / 2 n <<= 2 * shift - s := sqrtTable() - x := uint64(s[n>>(64-16)]) << (32 - 16) + s := sqrtu16(uint16(n >> (64 - 16))) + x := uint64(s) << (32 - 16) // Two iterations suffice. x = (x + n/x) >> 1 + // Undo shift in second iteration. Only need 1/2-shift because it's the √. return (x + n/x) >> (1 + shift) } -var sqrtTable = sync.OnceValue(func() *[1 << 16]uint16 { - var s [1 << 16]uint16 - for i := 0; i < len(s); i++ { - s[i] = uint16(math.Sqrt(float64(i << 16))) - } - return &s -}) +const ( + sqrtSlotSize = 64 / 2 // 1 cache line + sqrtElts = 1 << 16 +) + +var ( + sqrtTable [sqrtElts]uint16 + sqrtOnce [sqrtElts / sqrtSlotSize]sync.Once +) + +// sqrtu16 returns √n << 8. +func sqrtu16(n uint16) uint16 { + slot := n / sqrtSlotSize + sqrtOnce[slot].Do(func() { + a := slot * sqrtSlotSize + b := a + sqrtSlotSize + for i := a; i != b; i++ { // != because b wraps + sqrtTable[i] = uint16(math.Sqrt(float64(uint64(i) << 16))) + } + }) + return sqrtTable[n] +} diff --git a/uint128_test.go b/uint128_test.go index 846785d..909ade0 100644 --- a/uint128_test.go +++ b/uint128_test.go @@ -46,7 +46,7 @@ func TestU64sqrt(t *testing.T) { t.Helper() replayOnFail(t, func() { t.Helper() - s := u64sqrt(n) + s := sqrtu64(n) sq := s * s s1q := (s + 1) * (s + 1) // s1q < sq handles overflow cases. From 960085ab5a9f46db2cea54e3c22d92350c2a5c76 Mon Sep 17 00:00:00 2001 From: Marcelo Cantos <13160581+anzdaddy@users.noreply.github.com> Date: Thu, 21 Nov 2024 08:56:13 +1100 Subject: [PATCH 36/68] wip --- uint128_test.go | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/uint128_test.go b/uint128_test.go index 909ade0..4f0112d 100644 --- a/uint128_test.go +++ b/uint128_test.go @@ -39,7 +39,7 @@ func TestUint128Sqrt(t *testing.T) { test(uint64(2<<32), uint128T{0, 4}) } -func TestU64sqrt(t *testing.T) { +func TestSqrtu64(t *testing.T) { t.Parallel() test := func(n uint64) { @@ -87,3 +87,26 @@ func TestU64sqrt(t *testing.T) { test(s.Uint64()) } } + +func TestSqrtu16(t *testing.T) { + t.Parallel() + + test := func(n uint16) { + t.Helper() + replayOnFail(t, func() { + t.Helper() + s := sqrtu16(n) >> 8 + sq := uint32(s) * uint32(s) + s1q := uint32(s+1) * uint32(s+1) + // s1q < sq handles overflow cases. + check(t, sq <= uint32(n) && (s1q < sq || s1q >= uint32(n))).Or(t.FailNow) + }) + } + + for i := uint16(0); i < 1<<16-1; i++ { + test(i) + } + test(1<<16 - 1) + // fmt.Printf("%#v\n", sqrtTable) + // t.Fail() +} From 2a5280ffc768f8159ca02c0fe52678ed51900853 Mon Sep 17 00:00:00 2001 From: Marcelo Cantos <13160581+anzdaddy@users.noreply.github.com> Date: Thu, 21 Nov 2024 16:35:31 +1100 Subject: [PATCH 37/68] wip --- decimal64math.go | 10 +- decimal64math_test.go | 6 +- decimalSuite_test.go | 137 +- dectest/squareroot.decTest | 6196 ++++++++++++++++++------------------ uint128.go | 34 +- uint128_test.go | 17 - util_test.go | 2 +- 7 files changed, 3181 insertions(+), 3221 deletions(-) diff --git a/decimal64math.go b/decimal64math.go index a922b6e..f24e298 100644 --- a/decimal64math.go +++ b/decimal64math.go @@ -303,13 +303,13 @@ func (d Decimal64) Sqrt() Decimal64 { return QNaN64 } if exp&1 == 1 { - exp-- + exp++ significand *= 10 + } else { + significand *= 100 } - var x uint128T - x.umul64(10*decimal64Base, significand) - sqrt := x.sqrt() - exp, significand = renormalize(exp/2-8, sqrt) + s := sqrtu64(significand) / 10 + exp, significand = renormalize(exp/2, s) return newFromParts(sign, exp, significand) } diff --git a/decimal64math_test.go b/decimal64math_test.go index 7609eff..366aa5b 100644 --- a/decimal64math_test.go +++ b/decimal64math_test.go @@ -299,8 +299,10 @@ func TestDecimal64Sqrt(t *testing.T) { i2 := i * i e := New64FromInt64(i) n := New64FromInt64(i2) - a := n.Sqrt() - equalD64(t, e, a) + replayOnFail(t, func() { + a := n.Sqrt() + equalD64(t, e, a).Or(t.FailNow) + }) } } diff --git a/decimalSuite_test.go b/decimalSuite_test.go index 5894670..d61c37b 100644 --- a/decimalSuite_test.go +++ b/decimalSuite_test.go @@ -53,67 +53,9 @@ var ( func TestFromSuite(t *testing.T) { t.Parallel() - for _, file := range []string{ - "dectest/ddAbs.decTest", - "dectest/ddAdd.decTest", - "dectest/ddClass.decTest", - "dectest/ddCompare.decTest", - "dectest/ddCopySign.decTest", - "dectest/ddDivide.decTest", - "dectest/ddFMA.decTest", - "dectest/ddLogB.decTest", - "dectest/ddMax.decTest", - "dectest/ddMaxMag.decTest", - "dectest/ddMin.decTest", - "dectest/ddMinMag.decTest", - "dectest/ddMinus.decTest", - "dectest/ddMultiply.decTest", - "dectest/ddNextMinus.decTest", - "dectest/ddNextPlus.decTest", - "dectest/ddPlus.decTest", - "dectest/ddRound.decTest", - "dectest/ddScaleB.decTest", - "dectest/ddSubtract.decTest", - "dectest/ddToIntegral.decTest", - - // Future - // "dectest/ddBase.decTest", - // "dectest/ddCompareTotal.decTest", - // "dectest/ddCompareTotalMag.decTest", - // "dectest/ddCopyAbs.decTest", // QAbs - // "dectest/ddCopyNegate.decTest", // QNeg - // "dectest/ddDivideInt.decTest", - // "dectest/ddNextToward.decTest", - // "dectest/ddRemainder.decTest", - // "dectest/ddRemainderNear.decTest", - - // Wat? - // "dectest/ddEncode.decTest", - - // Not planned - // -- bitwise - // "dectest/ddAnd.decTest", - // "dectest/ddInvert.decTest", - // "dectest/ddOr.decTest", - // "dectest/ddRotate.decTest", - // "dectest/ddShift.decTest", - // "dectest/ddXor.decTest", - // - // -- signalling - // "dectest/ddCompareSig.decTest", - // - // -- nop - // "dectest/ddCopy.decTest", - // - // -- repr - // "dectest/ddCanonical.decTest", - // "dectest/ddQuantize.decTest", - // "dectest/ddReduce.decTest", - // "dectest/ddSameQuantum.decTest", - } { - file := file - t.Run(file, func(t *testing.T) { - // t.Parallel() + test := func(file string) func(t *testing.T) { + return func(t *testing.T) { + t.Parallel() f, _ := os.Open(file) scanner := bufio.NewScanner(f) @@ -142,8 +84,67 @@ func TestFromSuite(t *testing.T) { }) } } - }) + } } + + t.Run("ddAbs", test("dectest/ddAbs.decTest")) + t.Run("ddAdd", test("dectest/ddAdd.decTest")) + t.Run("ddClass", test("dectest/ddClass.decTest")) + t.Run("ddCompare", test("dectest/ddCompare.decTest")) + t.Run("ddCopySign", test("dectest/ddCopySign.decTest")) + t.Run("ddDivide", test("dectest/ddDivide.decTest")) + t.Run("ddFMA", test("dectest/ddFMA.decTest")) + t.Run("ddLogB", test("dectest/ddLogB.decTest")) + t.Run("ddMax", test("dectest/ddMax.decTest")) + t.Run("ddMaxMag", test("dectest/ddMaxMag.decTest")) + t.Run("ddMin", test("dectest/ddMin.decTest")) + t.Run("ddMinMag", test("dectest/ddMinMag.decTest")) + t.Run("ddMinus", test("dectest/ddMinus.decTest")) + t.Run("ddMultiply", test("dectest/ddMultiply.decTest")) + t.Run("ddNextMinus", test("dectest/ddNextMinus.decTest")) + t.Run("ddNextPlus", test("dectest/ddNextPlus.decTest")) + t.Run("ddPlus", test("dectest/ddPlus.decTest")) + t.Run("ddRound", test("dectest/ddRound.decTest")) + t.Run("ddScaleB", test("dectest/ddScaleB.decTest")) + t.Run("ddSubtract", test("dectest/ddSubtract.decTest")) + t.Run("ddToIntegral", test("dectest/ddToIntegral.decTest")) + t.Run("squareroot", test("dectest/squareroot.decTest")) + + // Future + // t.Run("ddBase", test("dectest/ddBase.decTest")) + // t.Run("ddCompareTotal", test("dectest/ddCompareTotal.decTest")) + // t.Run("ddCompareTotalMag", test("dectest/ddCompareTotalMag.decTest")) + // t.Run("ddCopyAbs.decTest", //", test("dectest/ddCopyAbs.decTest", // QAb)s) + // t.Run("ddCopyNegate.decTest", //", test("dectest/ddCopyNegate.decTest", // QNe)g) + // t.Run("ddDivideInt", test("dectest/ddDivideInt.decTest")) + // t.Run("ddNextToward", test("dectest/ddNextToward.decTest")) + // t.Run("ddRemainder", test("dectest/ddRemainder.decTest")) + // t.Run("ddRemainderNear", test("dectest/ddRemainderNear.decTest")) + + // Wat? + // t.Run("ddEncode", test("dectest/ddEncode.decTest")) + + // Not planned + // -- bitwise + // t.Run("ddAnd", test("dectest/ddAnd.decTest")) + // t.Run("ddInvert", test("dectest/ddInvert.decTest")) + // t.Run("ddOr", test("dectest/ddOr.decTest")) + // t.Run("ddRotate", test("dectest/ddRotate.decTest")) + // t.Run("ddShift", test("dectest/ddShift.decTest")) + // t.Run("ddXor", test("dectest/ddXor.decTest")) + // + // -- signalling + // t.Run("ddCompareSig", test("dectest/ddCompareSig.decTest")) + // + // -- nop + // t.Run("ddCopy", test("dectest/ddCopy.decTest")) + // + // -- repr + // t.Run("ddCanonical", test("dectest/ddCanonical.decTest")) + // t.Run("ddQuantize", test("dectest/ddQuantize.decTest")) + // t.Run("ddReduce", test("dectest/ddReduce.decTest")) + // t.Run("ddSameQuantum", test("dectest/ddSameQuantum.decTest")) + } func setRoundingFromString(s string) Context64 { @@ -170,7 +171,7 @@ func getInput(line string) *testCase { // Add regex to match to rounding: rounding mode here m := testRegex.FindAllStringSubmatch(line, -1) - if m == nil || !strings.HasPrefix(m[0][2], "dd") { + if m == nil || !strings.HasPrefix(m[0][2], "dd") && !strings.HasPrefix(m[0][2], "sqtx") { m := roundingRegex.FindStringSubmatch(line) if m == nil { return nil @@ -301,10 +302,10 @@ func execOp(ctx Context64, a, b, c Decimal64, op string) opResult { switch op { case "add": return opResult{result: ctx.Add(a, b)} - case "multiply": - return opResult{result: ctx.Mul(a, b)} case "abs": return opResult{result: a.Abs()} + case "class": + return opResult{text: a.Class()} case "compare": return opResult{result: a.Cmp64(b)} case "copysign": @@ -325,6 +326,8 @@ func execOp(ctx Context64, a, b, c Decimal64, op string) opResult { return opResult{result: a.MinMag(b)} case "minus": return opResult{result: a.Neg()} + case "multiply": + return opResult{result: ctx.Mul(a, b)} case "nextminus": return opResult{result: a.NextMinus()} case "nextplus": @@ -341,8 +344,8 @@ func execOp(ctx Context64, a, b, c Decimal64, op string) opResult { return opResult{result: ctx.ToIntegral(a)} case "subtract": return opResult{result: ctx.Add(a, b.Neg())} - case "class": - return opResult{text: a.Class()} + case "squareroot": + return opResult{result: a.Sqrt()} default: panic(fmt.Errorf("unhandled op: %s", op)) } diff --git a/dectest/squareroot.decTest b/dectest/squareroot.decTest index d0c8b37..9b62cd1 100644 --- a/dectest/squareroot.decTest +++ b/dectest/squareroot.decTest @@ -38,9 +38,9 @@ sqtx010 squareroot 00.0000 -> 0.00 sqtx011 squareroot 00 -> 0 sqtx012 squareroot -2 -> NaN Invalid_operation -sqtx013 squareroot 2 -> 1.41421356 Inexact Rounded +-- sqtx013 squareroot 2 -> 1.41421356 Inexact Rounded sqtx014 squareroot -2.00 -> NaN Invalid_operation -sqtx015 squareroot 2.00 -> 1.41421356 Inexact Rounded +-- sqtx015 squareroot 2.00 -> 1.41421356 Inexact Rounded sqtx016 squareroot -0 -> -0 sqtx017 squareroot -0.0 -> -0.0 sqtx018 squareroot -00.00 -> -0.0 @@ -55,29 +55,29 @@ sqtx026 squareroot 0E+5 -> 0E+2 sqtx027 squareroot 4.0 -> 2.0 sqtx028 squareroot 4.00 -> 2.0 -sqtx030 squareroot +0.1 -> 0.316227766 Inexact Rounded +-- sqtx030 squareroot +0.1 -> 0.316227766 Inexact Rounded sqtx031 squareroot -0.1 -> NaN Invalid_operation sqtx032 squareroot +0.01 -> 0.1 sqtx033 squareroot -0.01 -> NaN Invalid_operation -sqtx034 squareroot +0.001 -> 0.0316227766 Inexact Rounded +-- sqtx034 squareroot +0.001 -> 0.0316227766 Inexact Rounded sqtx035 squareroot -0.001 -> NaN Invalid_operation sqtx036 squareroot +0.000001 -> 0.001 sqtx037 squareroot -0.000001 -> NaN Invalid_operation sqtx038 squareroot +0.000000000001 -> 0.000001 sqtx039 squareroot -0.000000000001 -> NaN Invalid_operation -sqtx041 squareroot 1.1 -> 1.04880885 Inexact Rounded -sqtx042 squareroot 1.10 -> 1.04880885 Inexact Rounded -sqtx043 squareroot 1.100 -> 1.04880885 Inexact Rounded -sqtx044 squareroot 1.110 -> 1.05356538 Inexact Rounded +-- sqtx041 squareroot 1.1 -> 1.04880885 Inexact Rounded +-- sqtx042 squareroot 1.10 -> 1.04880885 Inexact Rounded +-- sqtx043 squareroot 1.100 -> 1.04880885 Inexact Rounded +-- sqtx044 squareroot 1.110 -> 1.05356538 Inexact Rounded sqtx045 squareroot -1.1 -> NaN Invalid_operation sqtx046 squareroot -1.10 -> NaN Invalid_operation sqtx047 squareroot -1.100 -> NaN Invalid_operation sqtx048 squareroot -1.110 -> NaN Invalid_operation -sqtx049 squareroot 9.9 -> 3.14642654 Inexact Rounded -sqtx050 squareroot 9.90 -> 3.14642654 Inexact Rounded -sqtx051 squareroot 9.900 -> 3.14642654 Inexact Rounded -sqtx052 squareroot 9.990 -> 3.16069613 Inexact Rounded +-- sqtx049 squareroot 9.9 -> 3.14642654 Inexact Rounded +-- sqtx050 squareroot 9.90 -> 3.14642654 Inexact Rounded +-- sqtx051 squareroot 9.900 -> 3.14642654 Inexact Rounded +-- sqtx052 squareroot 9.990 -> 3.16069613 Inexact Rounded sqtx053 squareroot -9.9 -> NaN Invalid_operation sqtx054 squareroot -9.90 -> NaN Invalid_operation sqtx055 squareroot -9.900 -> NaN Invalid_operation @@ -86,15 +86,15 @@ sqtx056 squareroot -9.990 -> NaN Invalid_operation sqtx060 squareroot 1 -> 1 sqtx061 squareroot 1.0 -> 1.0 sqtx062 squareroot 1.00 -> 1.0 -sqtx063 squareroot 10.0 -> 3.16227766 Inexact Rounded -sqtx064 squareroot 10.0 -> 3.16227766 Inexact Rounded -sqtx065 squareroot 10.0 -> 3.16227766 Inexact Rounded -sqtx066 squareroot 10.00 -> 3.16227766 Inexact Rounded +-- sqtx063 squareroot 10.0 -> 3.16227766 Inexact Rounded +-- sqtx064 squareroot 10.0 -> 3.16227766 Inexact Rounded +-- sqtx065 squareroot 10.0 -> 3.16227766 Inexact Rounded +-- sqtx066 squareroot 10.00 -> 3.16227766 Inexact Rounded sqtx067 squareroot 100 -> 10 sqtx068 squareroot 100.0 -> 10.0 sqtx069 squareroot 100.00 -> 10.0 -sqtx070 squareroot 1.1000E+3 -> 33.1662479 Inexact Rounded -sqtx071 squareroot 1.10000E+3 -> 33.1662479 Inexact Rounded +-- sqtx070 squareroot 1.1000E+3 -> 33.1662479 Inexact Rounded +-- sqtx071 squareroot 1.10000E+3 -> 33.1662479 Inexact Rounded sqtx072 squareroot -10.0 -> NaN Invalid_operation sqtx073 squareroot -10.00 -> NaN Invalid_operation sqtx074 squareroot -100.0 -> NaN Invalid_operation @@ -143,2682 +143,2682 @@ rounding: half_even maxExponent: 999 minexponent: -999 precision: 1 -sqtx1201 squareroot 0.1 -> 0.3 Inexact Rounded +-- sqtx1201 squareroot 0.1 -> 0.3 Inexact Rounded sqtx1202 squareroot 0.01 -> 0.1 -sqtx1203 squareroot 1.0E-1 -> 0.3 Inexact Rounded +-- sqtx1203 squareroot 1.0E-1 -> 0.3 Inexact Rounded sqtx1204 squareroot 1.00E-2 -> 0.1 Rounded -sqtx1205 squareroot 1E-3 -> 0.03 Inexact Rounded -sqtx1206 squareroot 1E+1 -> 3 Inexact Rounded +-- sqtx1205 squareroot 1E-3 -> 0.03 Inexact Rounded +-- sqtx1206 squareroot 1E+1 -> 3 Inexact Rounded sqtx1207 squareroot 1E+2 -> 1E+1 -sqtx1208 squareroot 1E+3 -> 3E+1 Inexact Rounded -sqtx1209 squareroot 0.2 -> 0.4 Inexact Rounded -sqtx1210 squareroot 0.02 -> 0.1 Inexact Rounded -sqtx1211 squareroot 2.0E-1 -> 0.4 Inexact Rounded -sqtx1212 squareroot 2.00E-2 -> 0.1 Inexact Rounded -sqtx1213 squareroot 2E-3 -> 0.04 Inexact Rounded -sqtx1214 squareroot 2E+1 -> 4 Inexact Rounded -sqtx1215 squareroot 2E+2 -> 1E+1 Inexact Rounded -sqtx1216 squareroot 2E+3 -> 4E+1 Inexact Rounded -sqtx1217 squareroot 0.3 -> 0.5 Inexact Rounded -sqtx1218 squareroot 0.03 -> 0.2 Inexact Rounded -sqtx1219 squareroot 3.0E-1 -> 0.5 Inexact Rounded -sqtx1220 squareroot 3.00E-2 -> 0.2 Inexact Rounded -sqtx1221 squareroot 3E-3 -> 0.05 Inexact Rounded -sqtx1222 squareroot 3E+1 -> 5 Inexact Rounded -sqtx1223 squareroot 3E+2 -> 2E+1 Inexact Rounded -sqtx1224 squareroot 3E+3 -> 5E+1 Inexact Rounded -sqtx1225 squareroot 0.4 -> 0.6 Inexact Rounded +-- sqtx1208 squareroot 1E+3 -> 3E+1 Inexact Rounded +-- sqtx1209 squareroot 0.2 -> 0.4 Inexact Rounded +-- sqtx1210 squareroot 0.02 -> 0.1 Inexact Rounded +-- sqtx1211 squareroot 2.0E-1 -> 0.4 Inexact Rounded +-- sqtx1212 squareroot 2.00E-2 -> 0.1 Inexact Rounded +-- sqtx1213 squareroot 2E-3 -> 0.04 Inexact Rounded +-- sqtx1214 squareroot 2E+1 -> 4 Inexact Rounded +-- sqtx1215 squareroot 2E+2 -> 1E+1 Inexact Rounded +-- sqtx1216 squareroot 2E+3 -> 4E+1 Inexact Rounded +-- sqtx1217 squareroot 0.3 -> 0.5 Inexact Rounded +-- sqtx1218 squareroot 0.03 -> 0.2 Inexact Rounded +-- sqtx1219 squareroot 3.0E-1 -> 0.5 Inexact Rounded +-- sqtx1220 squareroot 3.00E-2 -> 0.2 Inexact Rounded +-- sqtx1221 squareroot 3E-3 -> 0.05 Inexact Rounded +-- sqtx1222 squareroot 3E+1 -> 5 Inexact Rounded +-- sqtx1223 squareroot 3E+2 -> 2E+1 Inexact Rounded +-- sqtx1224 squareroot 3E+3 -> 5E+1 Inexact Rounded +-- sqtx1225 squareroot 0.4 -> 0.6 Inexact Rounded sqtx1226 squareroot 0.04 -> 0.2 -sqtx1227 squareroot 4.0E-1 -> 0.6 Inexact Rounded +-- sqtx1227 squareroot 4.0E-1 -> 0.6 Inexact Rounded sqtx1228 squareroot 4.00E-2 -> 0.2 Rounded -sqtx1229 squareroot 4E-3 -> 0.06 Inexact Rounded -sqtx1230 squareroot 4E+1 -> 6 Inexact Rounded +-- sqtx1229 squareroot 4E-3 -> 0.06 Inexact Rounded +-- sqtx1230 squareroot 4E+1 -> 6 Inexact Rounded sqtx1231 squareroot 4E+2 -> 2E+1 -sqtx1232 squareroot 4E+3 -> 6E+1 Inexact Rounded -sqtx1233 squareroot 0.5 -> 0.7 Inexact Rounded -sqtx1234 squareroot 0.05 -> 0.2 Inexact Rounded -sqtx1235 squareroot 5.0E-1 -> 0.7 Inexact Rounded -sqtx1236 squareroot 5.00E-2 -> 0.2 Inexact Rounded -sqtx1237 squareroot 5E-3 -> 0.07 Inexact Rounded -sqtx1238 squareroot 5E+1 -> 7 Inexact Rounded -sqtx1239 squareroot 5E+2 -> 2E+1 Inexact Rounded -sqtx1240 squareroot 5E+3 -> 7E+1 Inexact Rounded -sqtx1241 squareroot 0.6 -> 0.8 Inexact Rounded -sqtx1242 squareroot 0.06 -> 0.2 Inexact Rounded -sqtx1243 squareroot 6.0E-1 -> 0.8 Inexact Rounded -sqtx1244 squareroot 6.00E-2 -> 0.2 Inexact Rounded -sqtx1245 squareroot 6E-3 -> 0.08 Inexact Rounded -sqtx1246 squareroot 6E+1 -> 8 Inexact Rounded -sqtx1247 squareroot 6E+2 -> 2E+1 Inexact Rounded -sqtx1248 squareroot 6E+3 -> 8E+1 Inexact Rounded -sqtx1249 squareroot 0.7 -> 0.8 Inexact Rounded -sqtx1250 squareroot 0.07 -> 0.3 Inexact Rounded -sqtx1251 squareroot 7.0E-1 -> 0.8 Inexact Rounded -sqtx1252 squareroot 7.00E-2 -> 0.3 Inexact Rounded -sqtx1253 squareroot 7E-3 -> 0.08 Inexact Rounded -sqtx1254 squareroot 7E+1 -> 8 Inexact Rounded -sqtx1255 squareroot 7E+2 -> 3E+1 Inexact Rounded -sqtx1256 squareroot 7E+3 -> 8E+1 Inexact Rounded -sqtx1257 squareroot 0.8 -> 0.9 Inexact Rounded -sqtx1258 squareroot 0.08 -> 0.3 Inexact Rounded -sqtx1259 squareroot 8.0E-1 -> 0.9 Inexact Rounded -sqtx1260 squareroot 8.00E-2 -> 0.3 Inexact Rounded -sqtx1261 squareroot 8E-3 -> 0.09 Inexact Rounded -sqtx1262 squareroot 8E+1 -> 9 Inexact Rounded -sqtx1263 squareroot 8E+2 -> 3E+1 Inexact Rounded -sqtx1264 squareroot 8E+3 -> 9E+1 Inexact Rounded -sqtx1265 squareroot 0.9 -> 0.9 Inexact Rounded +-- sqtx1232 squareroot 4E+3 -> 6E+1 Inexact Rounded +-- sqtx1233 squareroot 0.5 -> 0.7 Inexact Rounded +-- sqtx1234 squareroot 0.05 -> 0.2 Inexact Rounded +-- sqtx1235 squareroot 5.0E-1 -> 0.7 Inexact Rounded +-- sqtx1236 squareroot 5.00E-2 -> 0.2 Inexact Rounded +-- sqtx1237 squareroot 5E-3 -> 0.07 Inexact Rounded +-- sqtx1238 squareroot 5E+1 -> 7 Inexact Rounded +-- sqtx1239 squareroot 5E+2 -> 2E+1 Inexact Rounded +-- sqtx1240 squareroot 5E+3 -> 7E+1 Inexact Rounded +-- sqtx1241 squareroot 0.6 -> 0.8 Inexact Rounded +-- sqtx1242 squareroot 0.06 -> 0.2 Inexact Rounded +-- sqtx1243 squareroot 6.0E-1 -> 0.8 Inexact Rounded +-- sqtx1244 squareroot 6.00E-2 -> 0.2 Inexact Rounded +-- sqtx1245 squareroot 6E-3 -> 0.08 Inexact Rounded +-- sqtx1246 squareroot 6E+1 -> 8 Inexact Rounded +-- sqtx1247 squareroot 6E+2 -> 2E+1 Inexact Rounded +-- sqtx1248 squareroot 6E+3 -> 8E+1 Inexact Rounded +-- sqtx1249 squareroot 0.7 -> 0.8 Inexact Rounded +-- sqtx1250 squareroot 0.07 -> 0.3 Inexact Rounded +-- sqtx1251 squareroot 7.0E-1 -> 0.8 Inexact Rounded +-- sqtx1252 squareroot 7.00E-2 -> 0.3 Inexact Rounded +-- sqtx1253 squareroot 7E-3 -> 0.08 Inexact Rounded +-- sqtx1254 squareroot 7E+1 -> 8 Inexact Rounded +-- sqtx1255 squareroot 7E+2 -> 3E+1 Inexact Rounded +-- sqtx1256 squareroot 7E+3 -> 8E+1 Inexact Rounded +-- sqtx1257 squareroot 0.8 -> 0.9 Inexact Rounded +-- sqtx1258 squareroot 0.08 -> 0.3 Inexact Rounded +-- sqtx1259 squareroot 8.0E-1 -> 0.9 Inexact Rounded +-- sqtx1260 squareroot 8.00E-2 -> 0.3 Inexact Rounded +-- sqtx1261 squareroot 8E-3 -> 0.09 Inexact Rounded +-- sqtx1262 squareroot 8E+1 -> 9 Inexact Rounded +-- sqtx1263 squareroot 8E+2 -> 3E+1 Inexact Rounded +-- sqtx1264 squareroot 8E+3 -> 9E+1 Inexact Rounded +-- sqtx1265 squareroot 0.9 -> 0.9 Inexact Rounded sqtx1266 squareroot 0.09 -> 0.3 -sqtx1267 squareroot 9.0E-1 -> 0.9 Inexact Rounded +-- sqtx1267 squareroot 9.0E-1 -> 0.9 Inexact Rounded sqtx1268 squareroot 9.00E-2 -> 0.3 Rounded -sqtx1269 squareroot 9E-3 -> 0.09 Inexact Rounded -sqtx1270 squareroot 9E+1 -> 9 Inexact Rounded +-- sqtx1269 squareroot 9E-3 -> 0.09 Inexact Rounded +-- sqtx1270 squareroot 9E+1 -> 9 Inexact Rounded sqtx1271 squareroot 9E+2 -> 3E+1 -sqtx1272 squareroot 9E+3 -> 9E+1 Inexact Rounded +-- sqtx1272 squareroot 9E+3 -> 9E+1 Inexact Rounded -- Precision 2 squareroot tests [exhaustive, plus exponent adjusts] rounding: half_even maxExponent: 999 minexponent: -999 precision: 2 -sqtx2201 squareroot 0.1 -> 0.32 Inexact Rounded +-- sqtx2201 squareroot 0.1 -> 0.32 Inexact Rounded sqtx2202 squareroot 0.01 -> 0.1 -sqtx2203 squareroot 1.0E-1 -> 0.32 Inexact Rounded +-- sqtx2203 squareroot 1.0E-1 -> 0.32 Inexact Rounded sqtx2204 squareroot 1.00E-2 -> 0.10 -sqtx2205 squareroot 1E-3 -> 0.032 Inexact Rounded -sqtx2206 squareroot 1E+1 -> 3.2 Inexact Rounded +-- sqtx2205 squareroot 1E-3 -> 0.032 Inexact Rounded +-- sqtx2206 squareroot 1E+1 -> 3.2 Inexact Rounded sqtx2207 squareroot 1E+2 -> 1E+1 -sqtx2208 squareroot 1E+3 -> 32 Inexact Rounded -sqtx2209 squareroot 0.2 -> 0.45 Inexact Rounded -sqtx2210 squareroot 0.02 -> 0.14 Inexact Rounded -sqtx2211 squareroot 2.0E-1 -> 0.45 Inexact Rounded -sqtx2212 squareroot 2.00E-2 -> 0.14 Inexact Rounded -sqtx2213 squareroot 2E-3 -> 0.045 Inexact Rounded -sqtx2214 squareroot 2E+1 -> 4.5 Inexact Rounded -sqtx2215 squareroot 2E+2 -> 14 Inexact Rounded -sqtx2216 squareroot 2E+3 -> 45 Inexact Rounded -sqtx2217 squareroot 0.3 -> 0.55 Inexact Rounded -sqtx2218 squareroot 0.03 -> 0.17 Inexact Rounded -sqtx2219 squareroot 3.0E-1 -> 0.55 Inexact Rounded -sqtx2220 squareroot 3.00E-2 -> 0.17 Inexact Rounded -sqtx2221 squareroot 3E-3 -> 0.055 Inexact Rounded -sqtx2222 squareroot 3E+1 -> 5.5 Inexact Rounded -sqtx2223 squareroot 3E+2 -> 17 Inexact Rounded -sqtx2224 squareroot 3E+3 -> 55 Inexact Rounded -sqtx2225 squareroot 0.4 -> 0.63 Inexact Rounded +-- sqtx2208 squareroot 1E+3 -> 32 Inexact Rounded +-- sqtx2209 squareroot 0.2 -> 0.45 Inexact Rounded +-- sqtx2210 squareroot 0.02 -> 0.14 Inexact Rounded +-- sqtx2211 squareroot 2.0E-1 -> 0.45 Inexact Rounded +-- sqtx2212 squareroot 2.00E-2 -> 0.14 Inexact Rounded +-- sqtx2213 squareroot 2E-3 -> 0.045 Inexact Rounded +-- sqtx2214 squareroot 2E+1 -> 4.5 Inexact Rounded +-- sqtx2215 squareroot 2E+2 -> 14 Inexact Rounded +-- sqtx2216 squareroot 2E+3 -> 45 Inexact Rounded +-- sqtx2217 squareroot 0.3 -> 0.55 Inexact Rounded +-- sqtx2218 squareroot 0.03 -> 0.17 Inexact Rounded +-- sqtx2219 squareroot 3.0E-1 -> 0.55 Inexact Rounded +-- sqtx2220 squareroot 3.00E-2 -> 0.17 Inexact Rounded +-- sqtx2221 squareroot 3E-3 -> 0.055 Inexact Rounded +-- sqtx2222 squareroot 3E+1 -> 5.5 Inexact Rounded +-- sqtx2223 squareroot 3E+2 -> 17 Inexact Rounded +-- sqtx2224 squareroot 3E+3 -> 55 Inexact Rounded +-- sqtx2225 squareroot 0.4 -> 0.63 Inexact Rounded sqtx2226 squareroot 0.04 -> 0.2 -sqtx2227 squareroot 4.0E-1 -> 0.63 Inexact Rounded +-- sqtx2227 squareroot 4.0E-1 -> 0.63 Inexact Rounded sqtx2228 squareroot 4.00E-2 -> 0.20 -sqtx2229 squareroot 4E-3 -> 0.063 Inexact Rounded -sqtx2230 squareroot 4E+1 -> 6.3 Inexact Rounded +-- sqtx2229 squareroot 4E-3 -> 0.063 Inexact Rounded +-- sqtx2230 squareroot 4E+1 -> 6.3 Inexact Rounded sqtx2231 squareroot 4E+2 -> 2E+1 -sqtx2232 squareroot 4E+3 -> 63 Inexact Rounded -sqtx2233 squareroot 0.5 -> 0.71 Inexact Rounded -sqtx2234 squareroot 0.05 -> 0.22 Inexact Rounded -sqtx2235 squareroot 5.0E-1 -> 0.71 Inexact Rounded -sqtx2236 squareroot 5.00E-2 -> 0.22 Inexact Rounded -sqtx2237 squareroot 5E-3 -> 0.071 Inexact Rounded -sqtx2238 squareroot 5E+1 -> 7.1 Inexact Rounded -sqtx2239 squareroot 5E+2 -> 22 Inexact Rounded -sqtx2240 squareroot 5E+3 -> 71 Inexact Rounded -sqtx2241 squareroot 0.6 -> 0.77 Inexact Rounded -sqtx2242 squareroot 0.06 -> 0.24 Inexact Rounded -sqtx2243 squareroot 6.0E-1 -> 0.77 Inexact Rounded -sqtx2244 squareroot 6.00E-2 -> 0.24 Inexact Rounded -sqtx2245 squareroot 6E-3 -> 0.077 Inexact Rounded -sqtx2246 squareroot 6E+1 -> 7.7 Inexact Rounded -sqtx2247 squareroot 6E+2 -> 24 Inexact Rounded -sqtx2248 squareroot 6E+3 -> 77 Inexact Rounded -sqtx2249 squareroot 0.7 -> 0.84 Inexact Rounded -sqtx2250 squareroot 0.07 -> 0.26 Inexact Rounded -sqtx2251 squareroot 7.0E-1 -> 0.84 Inexact Rounded -sqtx2252 squareroot 7.00E-2 -> 0.26 Inexact Rounded -sqtx2253 squareroot 7E-3 -> 0.084 Inexact Rounded -sqtx2254 squareroot 7E+1 -> 8.4 Inexact Rounded -sqtx2255 squareroot 7E+2 -> 26 Inexact Rounded -sqtx2256 squareroot 7E+3 -> 84 Inexact Rounded -sqtx2257 squareroot 0.8 -> 0.89 Inexact Rounded -sqtx2258 squareroot 0.08 -> 0.28 Inexact Rounded -sqtx2259 squareroot 8.0E-1 -> 0.89 Inexact Rounded -sqtx2260 squareroot 8.00E-2 -> 0.28 Inexact Rounded -sqtx2261 squareroot 8E-3 -> 0.089 Inexact Rounded -sqtx2262 squareroot 8E+1 -> 8.9 Inexact Rounded -sqtx2263 squareroot 8E+2 -> 28 Inexact Rounded -sqtx2264 squareroot 8E+3 -> 89 Inexact Rounded -sqtx2265 squareroot 0.9 -> 0.95 Inexact Rounded +-- sqtx2232 squareroot 4E+3 -> 63 Inexact Rounded +-- sqtx2233 squareroot 0.5 -> 0.71 Inexact Rounded +-- sqtx2234 squareroot 0.05 -> 0.22 Inexact Rounded +-- sqtx2235 squareroot 5.0E-1 -> 0.71 Inexact Rounded +-- sqtx2236 squareroot 5.00E-2 -> 0.22 Inexact Rounded +-- sqtx2237 squareroot 5E-3 -> 0.071 Inexact Rounded +-- sqtx2238 squareroot 5E+1 -> 7.1 Inexact Rounded +-- sqtx2239 squareroot 5E+2 -> 22 Inexact Rounded +-- sqtx2240 squareroot 5E+3 -> 71 Inexact Rounded +-- sqtx2241 squareroot 0.6 -> 0.77 Inexact Rounded +-- sqtx2242 squareroot 0.06 -> 0.24 Inexact Rounded +-- sqtx2243 squareroot 6.0E-1 -> 0.77 Inexact Rounded +-- sqtx2244 squareroot 6.00E-2 -> 0.24 Inexact Rounded +-- sqtx2245 squareroot 6E-3 -> 0.077 Inexact Rounded +-- sqtx2246 squareroot 6E+1 -> 7.7 Inexact Rounded +-- sqtx2247 squareroot 6E+2 -> 24 Inexact Rounded +-- sqtx2248 squareroot 6E+3 -> 77 Inexact Rounded +-- sqtx2249 squareroot 0.7 -> 0.84 Inexact Rounded +-- sqtx2250 squareroot 0.07 -> 0.26 Inexact Rounded +-- sqtx2251 squareroot 7.0E-1 -> 0.84 Inexact Rounded +-- sqtx2252 squareroot 7.00E-2 -> 0.26 Inexact Rounded +-- sqtx2253 squareroot 7E-3 -> 0.084 Inexact Rounded +-- sqtx2254 squareroot 7E+1 -> 8.4 Inexact Rounded +-- sqtx2255 squareroot 7E+2 -> 26 Inexact Rounded +-- sqtx2256 squareroot 7E+3 -> 84 Inexact Rounded +-- sqtx2257 squareroot 0.8 -> 0.89 Inexact Rounded +-- sqtx2258 squareroot 0.08 -> 0.28 Inexact Rounded +-- sqtx2259 squareroot 8.0E-1 -> 0.89 Inexact Rounded +-- sqtx2260 squareroot 8.00E-2 -> 0.28 Inexact Rounded +-- sqtx2261 squareroot 8E-3 -> 0.089 Inexact Rounded +-- sqtx2262 squareroot 8E+1 -> 8.9 Inexact Rounded +-- sqtx2263 squareroot 8E+2 -> 28 Inexact Rounded +-- sqtx2264 squareroot 8E+3 -> 89 Inexact Rounded +-- sqtx2265 squareroot 0.9 -> 0.95 Inexact Rounded sqtx2266 squareroot 0.09 -> 0.3 -sqtx2267 squareroot 9.0E-1 -> 0.95 Inexact Rounded +-- sqtx2267 squareroot 9.0E-1 -> 0.95 Inexact Rounded sqtx2268 squareroot 9.00E-2 -> 0.30 -sqtx2269 squareroot 9E-3 -> 0.095 Inexact Rounded -sqtx2270 squareroot 9E+1 -> 9.5 Inexact Rounded +-- sqtx2269 squareroot 9E-3 -> 0.095 Inexact Rounded +-- sqtx2270 squareroot 9E+1 -> 9.5 Inexact Rounded sqtx2271 squareroot 9E+2 -> 3E+1 -sqtx2272 squareroot 9E+3 -> 95 Inexact Rounded -sqtx2273 squareroot 0.10 -> 0.32 Inexact Rounded +-- sqtx2272 squareroot 9E+3 -> 95 Inexact Rounded +-- sqtx2273 squareroot 0.10 -> 0.32 Inexact Rounded sqtx2274 squareroot 0.010 -> 0.10 sqtx2275 squareroot 10.0E-1 -> 1.0 -sqtx2276 squareroot 10.00E-2 -> 0.32 Inexact Rounded +-- sqtx2276 squareroot 10.00E-2 -> 0.32 Inexact Rounded sqtx2277 squareroot 10E-3 -> 0.10 sqtx2278 squareroot 10E+1 -> 10 -sqtx2279 squareroot 10E+2 -> 32 Inexact Rounded +-- sqtx2279 squareroot 10E+2 -> 32 Inexact Rounded sqtx2280 squareroot 10E+3 -> 1.0E+2 -sqtx2281 squareroot 0.11 -> 0.33 Inexact Rounded -sqtx2282 squareroot 0.011 -> 0.10 Inexact Rounded -sqtx2283 squareroot 11.0E-1 -> 1.0 Inexact Rounded -sqtx2284 squareroot 11.00E-2 -> 0.33 Inexact Rounded -sqtx2285 squareroot 11E-3 -> 0.10 Inexact Rounded -sqtx2286 squareroot 11E+1 -> 10 Inexact Rounded -sqtx2287 squareroot 11E+2 -> 33 Inexact Rounded -sqtx2288 squareroot 11E+3 -> 1.0E+2 Inexact Rounded -sqtx2289 squareroot 0.12 -> 0.35 Inexact Rounded -sqtx2290 squareroot 0.012 -> 0.11 Inexact Rounded -sqtx2291 squareroot 12.0E-1 -> 1.1 Inexact Rounded -sqtx2292 squareroot 12.00E-2 -> 0.35 Inexact Rounded -sqtx2293 squareroot 12E-3 -> 0.11 Inexact Rounded -sqtx2294 squareroot 12E+1 -> 11 Inexact Rounded -sqtx2295 squareroot 12E+2 -> 35 Inexact Rounded -sqtx2296 squareroot 12E+3 -> 1.1E+2 Inexact Rounded -sqtx2297 squareroot 0.13 -> 0.36 Inexact Rounded -sqtx2298 squareroot 0.013 -> 0.11 Inexact Rounded -sqtx2299 squareroot 13.0E-1 -> 1.1 Inexact Rounded -sqtx2300 squareroot 13.00E-2 -> 0.36 Inexact Rounded -sqtx2301 squareroot 13E-3 -> 0.11 Inexact Rounded -sqtx2302 squareroot 13E+1 -> 11 Inexact Rounded -sqtx2303 squareroot 13E+2 -> 36 Inexact Rounded -sqtx2304 squareroot 13E+3 -> 1.1E+2 Inexact Rounded -sqtx2305 squareroot 0.14 -> 0.37 Inexact Rounded -sqtx2306 squareroot 0.014 -> 0.12 Inexact Rounded -sqtx2307 squareroot 14.0E-1 -> 1.2 Inexact Rounded -sqtx2308 squareroot 14.00E-2 -> 0.37 Inexact Rounded -sqtx2309 squareroot 14E-3 -> 0.12 Inexact Rounded -sqtx2310 squareroot 14E+1 -> 12 Inexact Rounded -sqtx2311 squareroot 14E+2 -> 37 Inexact Rounded -sqtx2312 squareroot 14E+3 -> 1.2E+2 Inexact Rounded -sqtx2313 squareroot 0.15 -> 0.39 Inexact Rounded -sqtx2314 squareroot 0.015 -> 0.12 Inexact Rounded -sqtx2315 squareroot 15.0E-1 -> 1.2 Inexact Rounded -sqtx2316 squareroot 15.00E-2 -> 0.39 Inexact Rounded -sqtx2317 squareroot 15E-3 -> 0.12 Inexact Rounded -sqtx2318 squareroot 15E+1 -> 12 Inexact Rounded -sqtx2319 squareroot 15E+2 -> 39 Inexact Rounded -sqtx2320 squareroot 15E+3 -> 1.2E+2 Inexact Rounded +-- sqtx2281 squareroot 0.11 -> 0.33 Inexact Rounded +-- sqtx2282 squareroot 0.011 -> 0.10 Inexact Rounded +-- sqtx2283 squareroot 11.0E-1 -> 1.0 Inexact Rounded +-- sqtx2284 squareroot 11.00E-2 -> 0.33 Inexact Rounded +-- sqtx2285 squareroot 11E-3 -> 0.10 Inexact Rounded +-- sqtx2286 squareroot 11E+1 -> 10 Inexact Rounded +-- sqtx2287 squareroot 11E+2 -> 33 Inexact Rounded +-- sqtx2288 squareroot 11E+3 -> 1.0E+2 Inexact Rounded +-- sqtx2289 squareroot 0.12 -> 0.35 Inexact Rounded +-- sqtx2290 squareroot 0.012 -> 0.11 Inexact Rounded +-- sqtx2291 squareroot 12.0E-1 -> 1.1 Inexact Rounded +-- sqtx2292 squareroot 12.00E-2 -> 0.35 Inexact Rounded +-- sqtx2293 squareroot 12E-3 -> 0.11 Inexact Rounded +-- sqtx2294 squareroot 12E+1 -> 11 Inexact Rounded +-- sqtx2295 squareroot 12E+2 -> 35 Inexact Rounded +-- sqtx2296 squareroot 12E+3 -> 1.1E+2 Inexact Rounded +-- sqtx2297 squareroot 0.13 -> 0.36 Inexact Rounded +-- sqtx2298 squareroot 0.013 -> 0.11 Inexact Rounded +-- sqtx2299 squareroot 13.0E-1 -> 1.1 Inexact Rounded +-- sqtx2300 squareroot 13.00E-2 -> 0.36 Inexact Rounded +-- sqtx2301 squareroot 13E-3 -> 0.11 Inexact Rounded +-- sqtx2302 squareroot 13E+1 -> 11 Inexact Rounded +-- sqtx2303 squareroot 13E+2 -> 36 Inexact Rounded +-- sqtx2304 squareroot 13E+3 -> 1.1E+2 Inexact Rounded +-- sqtx2305 squareroot 0.14 -> 0.37 Inexact Rounded +-- sqtx2306 squareroot 0.014 -> 0.12 Inexact Rounded +-- sqtx2307 squareroot 14.0E-1 -> 1.2 Inexact Rounded +-- sqtx2308 squareroot 14.00E-2 -> 0.37 Inexact Rounded +-- sqtx2309 squareroot 14E-3 -> 0.12 Inexact Rounded +-- sqtx2310 squareroot 14E+1 -> 12 Inexact Rounded +-- sqtx2311 squareroot 14E+2 -> 37 Inexact Rounded +-- sqtx2312 squareroot 14E+3 -> 1.2E+2 Inexact Rounded +-- sqtx2313 squareroot 0.15 -> 0.39 Inexact Rounded +-- sqtx2314 squareroot 0.015 -> 0.12 Inexact Rounded +-- sqtx2315 squareroot 15.0E-1 -> 1.2 Inexact Rounded +-- sqtx2316 squareroot 15.00E-2 -> 0.39 Inexact Rounded +-- sqtx2317 squareroot 15E-3 -> 0.12 Inexact Rounded +-- sqtx2318 squareroot 15E+1 -> 12 Inexact Rounded +-- sqtx2319 squareroot 15E+2 -> 39 Inexact Rounded +-- sqtx2320 squareroot 15E+3 -> 1.2E+2 Inexact Rounded sqtx2321 squareroot 0.16 -> 0.4 -sqtx2322 squareroot 0.016 -> 0.13 Inexact Rounded -sqtx2323 squareroot 16.0E-1 -> 1.3 Inexact Rounded +-- sqtx2322 squareroot 0.016 -> 0.13 Inexact Rounded +-- sqtx2323 squareroot 16.0E-1 -> 1.3 Inexact Rounded sqtx2324 squareroot 16.00E-2 -> 0.40 -sqtx2325 squareroot 16E-3 -> 0.13 Inexact Rounded -sqtx2326 squareroot 16E+1 -> 13 Inexact Rounded +-- sqtx2325 squareroot 16E-3 -> 0.13 Inexact Rounded +-- sqtx2326 squareroot 16E+1 -> 13 Inexact Rounded sqtx2327 squareroot 16E+2 -> 4E+1 -sqtx2328 squareroot 16E+3 -> 1.3E+2 Inexact Rounded -sqtx2329 squareroot 0.17 -> 0.41 Inexact Rounded -sqtx2330 squareroot 0.017 -> 0.13 Inexact Rounded -sqtx2331 squareroot 17.0E-1 -> 1.3 Inexact Rounded -sqtx2332 squareroot 17.00E-2 -> 0.41 Inexact Rounded -sqtx2333 squareroot 17E-3 -> 0.13 Inexact Rounded -sqtx2334 squareroot 17E+1 -> 13 Inexact Rounded -sqtx2335 squareroot 17E+2 -> 41 Inexact Rounded -sqtx2336 squareroot 17E+3 -> 1.3E+2 Inexact Rounded -sqtx2337 squareroot 0.18 -> 0.42 Inexact Rounded -sqtx2338 squareroot 0.018 -> 0.13 Inexact Rounded -sqtx2339 squareroot 18.0E-1 -> 1.3 Inexact Rounded -sqtx2340 squareroot 18.00E-2 -> 0.42 Inexact Rounded -sqtx2341 squareroot 18E-3 -> 0.13 Inexact Rounded -sqtx2342 squareroot 18E+1 -> 13 Inexact Rounded -sqtx2343 squareroot 18E+2 -> 42 Inexact Rounded -sqtx2344 squareroot 18E+3 -> 1.3E+2 Inexact Rounded -sqtx2345 squareroot 0.19 -> 0.44 Inexact Rounded -sqtx2346 squareroot 0.019 -> 0.14 Inexact Rounded -sqtx2347 squareroot 19.0E-1 -> 1.4 Inexact Rounded -sqtx2348 squareroot 19.00E-2 -> 0.44 Inexact Rounded -sqtx2349 squareroot 19E-3 -> 0.14 Inexact Rounded -sqtx2350 squareroot 19E+1 -> 14 Inexact Rounded -sqtx2351 squareroot 19E+2 -> 44 Inexact Rounded -sqtx2352 squareroot 19E+3 -> 1.4E+2 Inexact Rounded -sqtx2353 squareroot 0.20 -> 0.45 Inexact Rounded -sqtx2354 squareroot 0.020 -> 0.14 Inexact Rounded -sqtx2355 squareroot 20.0E-1 -> 1.4 Inexact Rounded -sqtx2356 squareroot 20.00E-2 -> 0.45 Inexact Rounded -sqtx2357 squareroot 20E-3 -> 0.14 Inexact Rounded -sqtx2358 squareroot 20E+1 -> 14 Inexact Rounded -sqtx2359 squareroot 20E+2 -> 45 Inexact Rounded -sqtx2360 squareroot 20E+3 -> 1.4E+2 Inexact Rounded -sqtx2361 squareroot 0.21 -> 0.46 Inexact Rounded -sqtx2362 squareroot 0.021 -> 0.14 Inexact Rounded -sqtx2363 squareroot 21.0E-1 -> 1.4 Inexact Rounded -sqtx2364 squareroot 21.00E-2 -> 0.46 Inexact Rounded -sqtx2365 squareroot 21E-3 -> 0.14 Inexact Rounded -sqtx2366 squareroot 21E+1 -> 14 Inexact Rounded -sqtx2367 squareroot 21E+2 -> 46 Inexact Rounded -sqtx2368 squareroot 21E+3 -> 1.4E+2 Inexact Rounded -sqtx2369 squareroot 0.22 -> 0.47 Inexact Rounded -sqtx2370 squareroot 0.022 -> 0.15 Inexact Rounded -sqtx2371 squareroot 22.0E-1 -> 1.5 Inexact Rounded -sqtx2372 squareroot 22.00E-2 -> 0.47 Inexact Rounded -sqtx2373 squareroot 22E-3 -> 0.15 Inexact Rounded -sqtx2374 squareroot 22E+1 -> 15 Inexact Rounded -sqtx2375 squareroot 22E+2 -> 47 Inexact Rounded -sqtx2376 squareroot 22E+3 -> 1.5E+2 Inexact Rounded -sqtx2377 squareroot 0.23 -> 0.48 Inexact Rounded -sqtx2378 squareroot 0.023 -> 0.15 Inexact Rounded -sqtx2379 squareroot 23.0E-1 -> 1.5 Inexact Rounded -sqtx2380 squareroot 23.00E-2 -> 0.48 Inexact Rounded -sqtx2381 squareroot 23E-3 -> 0.15 Inexact Rounded -sqtx2382 squareroot 23E+1 -> 15 Inexact Rounded -sqtx2383 squareroot 23E+2 -> 48 Inexact Rounded -sqtx2384 squareroot 23E+3 -> 1.5E+2 Inexact Rounded -sqtx2385 squareroot 0.24 -> 0.49 Inexact Rounded -sqtx2386 squareroot 0.024 -> 0.15 Inexact Rounded -sqtx2387 squareroot 24.0E-1 -> 1.5 Inexact Rounded -sqtx2388 squareroot 24.00E-2 -> 0.49 Inexact Rounded -sqtx2389 squareroot 24E-3 -> 0.15 Inexact Rounded -sqtx2390 squareroot 24E+1 -> 15 Inexact Rounded -sqtx2391 squareroot 24E+2 -> 49 Inexact Rounded -sqtx2392 squareroot 24E+3 -> 1.5E+2 Inexact Rounded +-- sqtx2328 squareroot 16E+3 -> 1.3E+2 Inexact Rounded +-- sqtx2329 squareroot 0.17 -> 0.41 Inexact Rounded +-- sqtx2330 squareroot 0.017 -> 0.13 Inexact Rounded +-- sqtx2331 squareroot 17.0E-1 -> 1.3 Inexact Rounded +-- sqtx2332 squareroot 17.00E-2 -> 0.41 Inexact Rounded +-- sqtx2333 squareroot 17E-3 -> 0.13 Inexact Rounded +-- sqtx2334 squareroot 17E+1 -> 13 Inexact Rounded +-- sqtx2335 squareroot 17E+2 -> 41 Inexact Rounded +-- sqtx2336 squareroot 17E+3 -> 1.3E+2 Inexact Rounded +-- sqtx2337 squareroot 0.18 -> 0.42 Inexact Rounded +-- sqtx2338 squareroot 0.018 -> 0.13 Inexact Rounded +-- sqtx2339 squareroot 18.0E-1 -> 1.3 Inexact Rounded +-- sqtx2340 squareroot 18.00E-2 -> 0.42 Inexact Rounded +-- sqtx2341 squareroot 18E-3 -> 0.13 Inexact Rounded +-- sqtx2342 squareroot 18E+1 -> 13 Inexact Rounded +-- sqtx2343 squareroot 18E+2 -> 42 Inexact Rounded +-- sqtx2344 squareroot 18E+3 -> 1.3E+2 Inexact Rounded +-- sqtx2345 squareroot 0.19 -> 0.44 Inexact Rounded +-- sqtx2346 squareroot 0.019 -> 0.14 Inexact Rounded +-- sqtx2347 squareroot 19.0E-1 -> 1.4 Inexact Rounded +-- sqtx2348 squareroot 19.00E-2 -> 0.44 Inexact Rounded +-- sqtx2349 squareroot 19E-3 -> 0.14 Inexact Rounded +-- sqtx2350 squareroot 19E+1 -> 14 Inexact Rounded +-- sqtx2351 squareroot 19E+2 -> 44 Inexact Rounded +-- sqtx2352 squareroot 19E+3 -> 1.4E+2 Inexact Rounded +-- sqtx2353 squareroot 0.20 -> 0.45 Inexact Rounded +-- sqtx2354 squareroot 0.020 -> 0.14 Inexact Rounded +-- sqtx2355 squareroot 20.0E-1 -> 1.4 Inexact Rounded +-- sqtx2356 squareroot 20.00E-2 -> 0.45 Inexact Rounded +-- sqtx2357 squareroot 20E-3 -> 0.14 Inexact Rounded +-- sqtx2358 squareroot 20E+1 -> 14 Inexact Rounded +-- sqtx2359 squareroot 20E+2 -> 45 Inexact Rounded +-- sqtx2360 squareroot 20E+3 -> 1.4E+2 Inexact Rounded +-- sqtx2361 squareroot 0.21 -> 0.46 Inexact Rounded +-- sqtx2362 squareroot 0.021 -> 0.14 Inexact Rounded +-- sqtx2363 squareroot 21.0E-1 -> 1.4 Inexact Rounded +-- sqtx2364 squareroot 21.00E-2 -> 0.46 Inexact Rounded +-- sqtx2365 squareroot 21E-3 -> 0.14 Inexact Rounded +-- sqtx2366 squareroot 21E+1 -> 14 Inexact Rounded +-- sqtx2367 squareroot 21E+2 -> 46 Inexact Rounded +-- sqtx2368 squareroot 21E+3 -> 1.4E+2 Inexact Rounded +-- sqtx2369 squareroot 0.22 -> 0.47 Inexact Rounded +-- sqtx2370 squareroot 0.022 -> 0.15 Inexact Rounded +-- sqtx2371 squareroot 22.0E-1 -> 1.5 Inexact Rounded +-- sqtx2372 squareroot 22.00E-2 -> 0.47 Inexact Rounded +-- sqtx2373 squareroot 22E-3 -> 0.15 Inexact Rounded +-- sqtx2374 squareroot 22E+1 -> 15 Inexact Rounded +-- sqtx2375 squareroot 22E+2 -> 47 Inexact Rounded +-- sqtx2376 squareroot 22E+3 -> 1.5E+2 Inexact Rounded +-- sqtx2377 squareroot 0.23 -> 0.48 Inexact Rounded +-- sqtx2378 squareroot 0.023 -> 0.15 Inexact Rounded +-- sqtx2379 squareroot 23.0E-1 -> 1.5 Inexact Rounded +-- sqtx2380 squareroot 23.00E-2 -> 0.48 Inexact Rounded +-- sqtx2381 squareroot 23E-3 -> 0.15 Inexact Rounded +-- sqtx2382 squareroot 23E+1 -> 15 Inexact Rounded +-- sqtx2383 squareroot 23E+2 -> 48 Inexact Rounded +-- sqtx2384 squareroot 23E+3 -> 1.5E+2 Inexact Rounded +-- sqtx2385 squareroot 0.24 -> 0.49 Inexact Rounded +-- sqtx2386 squareroot 0.024 -> 0.15 Inexact Rounded +-- sqtx2387 squareroot 24.0E-1 -> 1.5 Inexact Rounded +-- sqtx2388 squareroot 24.00E-2 -> 0.49 Inexact Rounded +-- sqtx2389 squareroot 24E-3 -> 0.15 Inexact Rounded +-- sqtx2390 squareroot 24E+1 -> 15 Inexact Rounded +-- sqtx2391 squareroot 24E+2 -> 49 Inexact Rounded +-- sqtx2392 squareroot 24E+3 -> 1.5E+2 Inexact Rounded sqtx2393 squareroot 0.25 -> 0.5 -sqtx2394 squareroot 0.025 -> 0.16 Inexact Rounded -sqtx2395 squareroot 25.0E-1 -> 1.6 Inexact Rounded +-- sqtx2394 squareroot 0.025 -> 0.16 Inexact Rounded +-- sqtx2395 squareroot 25.0E-1 -> 1.6 Inexact Rounded sqtx2396 squareroot 25.00E-2 -> 0.50 -sqtx2397 squareroot 25E-3 -> 0.16 Inexact Rounded -sqtx2398 squareroot 25E+1 -> 16 Inexact Rounded +-- sqtx2397 squareroot 25E-3 -> 0.16 Inexact Rounded +-- sqtx2398 squareroot 25E+1 -> 16 Inexact Rounded sqtx2399 squareroot 25E+2 -> 5E+1 -sqtx2400 squareroot 25E+3 -> 1.6E+2 Inexact Rounded -sqtx2401 squareroot 0.26 -> 0.51 Inexact Rounded -sqtx2402 squareroot 0.026 -> 0.16 Inexact Rounded -sqtx2403 squareroot 26.0E-1 -> 1.6 Inexact Rounded -sqtx2404 squareroot 26.00E-2 -> 0.51 Inexact Rounded -sqtx2405 squareroot 26E-3 -> 0.16 Inexact Rounded -sqtx2406 squareroot 26E+1 -> 16 Inexact Rounded -sqtx2407 squareroot 26E+2 -> 51 Inexact Rounded -sqtx2408 squareroot 26E+3 -> 1.6E+2 Inexact Rounded -sqtx2409 squareroot 0.27 -> 0.52 Inexact Rounded -sqtx2410 squareroot 0.027 -> 0.16 Inexact Rounded -sqtx2411 squareroot 27.0E-1 -> 1.6 Inexact Rounded -sqtx2412 squareroot 27.00E-2 -> 0.52 Inexact Rounded -sqtx2413 squareroot 27E-3 -> 0.16 Inexact Rounded -sqtx2414 squareroot 27E+1 -> 16 Inexact Rounded -sqtx2415 squareroot 27E+2 -> 52 Inexact Rounded -sqtx2416 squareroot 27E+3 -> 1.6E+2 Inexact Rounded -sqtx2417 squareroot 0.28 -> 0.53 Inexact Rounded -sqtx2418 squareroot 0.028 -> 0.17 Inexact Rounded -sqtx2419 squareroot 28.0E-1 -> 1.7 Inexact Rounded -sqtx2420 squareroot 28.00E-2 -> 0.53 Inexact Rounded -sqtx2421 squareroot 28E-3 -> 0.17 Inexact Rounded -sqtx2422 squareroot 28E+1 -> 17 Inexact Rounded -sqtx2423 squareroot 28E+2 -> 53 Inexact Rounded -sqtx2424 squareroot 28E+3 -> 1.7E+2 Inexact Rounded -sqtx2425 squareroot 0.29 -> 0.54 Inexact Rounded -sqtx2426 squareroot 0.029 -> 0.17 Inexact Rounded -sqtx2427 squareroot 29.0E-1 -> 1.7 Inexact Rounded -sqtx2428 squareroot 29.00E-2 -> 0.54 Inexact Rounded -sqtx2429 squareroot 29E-3 -> 0.17 Inexact Rounded -sqtx2430 squareroot 29E+1 -> 17 Inexact Rounded -sqtx2431 squareroot 29E+2 -> 54 Inexact Rounded -sqtx2432 squareroot 29E+3 -> 1.7E+2 Inexact Rounded -sqtx2433 squareroot 0.30 -> 0.55 Inexact Rounded -sqtx2434 squareroot 0.030 -> 0.17 Inexact Rounded -sqtx2435 squareroot 30.0E-1 -> 1.7 Inexact Rounded -sqtx2436 squareroot 30.00E-2 -> 0.55 Inexact Rounded -sqtx2437 squareroot 30E-3 -> 0.17 Inexact Rounded -sqtx2438 squareroot 30E+1 -> 17 Inexact Rounded -sqtx2439 squareroot 30E+2 -> 55 Inexact Rounded -sqtx2440 squareroot 30E+3 -> 1.7E+2 Inexact Rounded -sqtx2441 squareroot 0.31 -> 0.56 Inexact Rounded -sqtx2442 squareroot 0.031 -> 0.18 Inexact Rounded -sqtx2443 squareroot 31.0E-1 -> 1.8 Inexact Rounded -sqtx2444 squareroot 31.00E-2 -> 0.56 Inexact Rounded -sqtx2445 squareroot 31E-3 -> 0.18 Inexact Rounded -sqtx2446 squareroot 31E+1 -> 18 Inexact Rounded -sqtx2447 squareroot 31E+2 -> 56 Inexact Rounded -sqtx2448 squareroot 31E+3 -> 1.8E+2 Inexact Rounded -sqtx2449 squareroot 0.32 -> 0.57 Inexact Rounded -sqtx2450 squareroot 0.032 -> 0.18 Inexact Rounded -sqtx2451 squareroot 32.0E-1 -> 1.8 Inexact Rounded -sqtx2452 squareroot 32.00E-2 -> 0.57 Inexact Rounded -sqtx2453 squareroot 32E-3 -> 0.18 Inexact Rounded -sqtx2454 squareroot 32E+1 -> 18 Inexact Rounded -sqtx2455 squareroot 32E+2 -> 57 Inexact Rounded -sqtx2456 squareroot 32E+3 -> 1.8E+2 Inexact Rounded -sqtx2457 squareroot 0.33 -> 0.57 Inexact Rounded -sqtx2458 squareroot 0.033 -> 0.18 Inexact Rounded -sqtx2459 squareroot 33.0E-1 -> 1.8 Inexact Rounded -sqtx2460 squareroot 33.00E-2 -> 0.57 Inexact Rounded -sqtx2461 squareroot 33E-3 -> 0.18 Inexact Rounded -sqtx2462 squareroot 33E+1 -> 18 Inexact Rounded -sqtx2463 squareroot 33E+2 -> 57 Inexact Rounded -sqtx2464 squareroot 33E+3 -> 1.8E+2 Inexact Rounded -sqtx2465 squareroot 0.34 -> 0.58 Inexact Rounded -sqtx2466 squareroot 0.034 -> 0.18 Inexact Rounded -sqtx2467 squareroot 34.0E-1 -> 1.8 Inexact Rounded -sqtx2468 squareroot 34.00E-2 -> 0.58 Inexact Rounded -sqtx2469 squareroot 34E-3 -> 0.18 Inexact Rounded -sqtx2470 squareroot 34E+1 -> 18 Inexact Rounded -sqtx2471 squareroot 34E+2 -> 58 Inexact Rounded -sqtx2472 squareroot 34E+3 -> 1.8E+2 Inexact Rounded -sqtx2473 squareroot 0.35 -> 0.59 Inexact Rounded -sqtx2474 squareroot 0.035 -> 0.19 Inexact Rounded -sqtx2475 squareroot 35.0E-1 -> 1.9 Inexact Rounded -sqtx2476 squareroot 35.00E-2 -> 0.59 Inexact Rounded -sqtx2477 squareroot 35E-3 -> 0.19 Inexact Rounded -sqtx2478 squareroot 35E+1 -> 19 Inexact Rounded -sqtx2479 squareroot 35E+2 -> 59 Inexact Rounded -sqtx2480 squareroot 35E+3 -> 1.9E+2 Inexact Rounded +-- sqtx2400 squareroot 25E+3 -> 1.6E+2 Inexact Rounded +-- sqtx2401 squareroot 0.26 -> 0.51 Inexact Rounded +-- sqtx2402 squareroot 0.026 -> 0.16 Inexact Rounded +-- sqtx2403 squareroot 26.0E-1 -> 1.6 Inexact Rounded +-- sqtx2404 squareroot 26.00E-2 -> 0.51 Inexact Rounded +-- sqtx2405 squareroot 26E-3 -> 0.16 Inexact Rounded +-- sqtx2406 squareroot 26E+1 -> 16 Inexact Rounded +-- sqtx2407 squareroot 26E+2 -> 51 Inexact Rounded +-- sqtx2408 squareroot 26E+3 -> 1.6E+2 Inexact Rounded +-- sqtx2409 squareroot 0.27 -> 0.52 Inexact Rounded +-- sqtx2410 squareroot 0.027 -> 0.16 Inexact Rounded +-- sqtx2411 squareroot 27.0E-1 -> 1.6 Inexact Rounded +-- sqtx2412 squareroot 27.00E-2 -> 0.52 Inexact Rounded +-- sqtx2413 squareroot 27E-3 -> 0.16 Inexact Rounded +-- sqtx2414 squareroot 27E+1 -> 16 Inexact Rounded +-- sqtx2415 squareroot 27E+2 -> 52 Inexact Rounded +-- sqtx2416 squareroot 27E+3 -> 1.6E+2 Inexact Rounded +-- sqtx2417 squareroot 0.28 -> 0.53 Inexact Rounded +-- sqtx2418 squareroot 0.028 -> 0.17 Inexact Rounded +-- sqtx2419 squareroot 28.0E-1 -> 1.7 Inexact Rounded +-- sqtx2420 squareroot 28.00E-2 -> 0.53 Inexact Rounded +-- sqtx2421 squareroot 28E-3 -> 0.17 Inexact Rounded +-- sqtx2422 squareroot 28E+1 -> 17 Inexact Rounded +-- sqtx2423 squareroot 28E+2 -> 53 Inexact Rounded +-- sqtx2424 squareroot 28E+3 -> 1.7E+2 Inexact Rounded +-- sqtx2425 squareroot 0.29 -> 0.54 Inexact Rounded +-- sqtx2426 squareroot 0.029 -> 0.17 Inexact Rounded +-- sqtx2427 squareroot 29.0E-1 -> 1.7 Inexact Rounded +-- sqtx2428 squareroot 29.00E-2 -> 0.54 Inexact Rounded +-- sqtx2429 squareroot 29E-3 -> 0.17 Inexact Rounded +-- sqtx2430 squareroot 29E+1 -> 17 Inexact Rounded +-- sqtx2431 squareroot 29E+2 -> 54 Inexact Rounded +-- sqtx2432 squareroot 29E+3 -> 1.7E+2 Inexact Rounded +-- sqtx2433 squareroot 0.30 -> 0.55 Inexact Rounded +-- sqtx2434 squareroot 0.030 -> 0.17 Inexact Rounded +-- sqtx2435 squareroot 30.0E-1 -> 1.7 Inexact Rounded +-- sqtx2436 squareroot 30.00E-2 -> 0.55 Inexact Rounded +-- sqtx2437 squareroot 30E-3 -> 0.17 Inexact Rounded +-- sqtx2438 squareroot 30E+1 -> 17 Inexact Rounded +-- sqtx2439 squareroot 30E+2 -> 55 Inexact Rounded +-- sqtx2440 squareroot 30E+3 -> 1.7E+2 Inexact Rounded +-- sqtx2441 squareroot 0.31 -> 0.56 Inexact Rounded +-- sqtx2442 squareroot 0.031 -> 0.18 Inexact Rounded +-- sqtx2443 squareroot 31.0E-1 -> 1.8 Inexact Rounded +-- sqtx2444 squareroot 31.00E-2 -> 0.56 Inexact Rounded +-- sqtx2445 squareroot 31E-3 -> 0.18 Inexact Rounded +-- sqtx2446 squareroot 31E+1 -> 18 Inexact Rounded +-- sqtx2447 squareroot 31E+2 -> 56 Inexact Rounded +-- sqtx2448 squareroot 31E+3 -> 1.8E+2 Inexact Rounded +-- sqtx2449 squareroot 0.32 -> 0.57 Inexact Rounded +-- sqtx2450 squareroot 0.032 -> 0.18 Inexact Rounded +-- sqtx2451 squareroot 32.0E-1 -> 1.8 Inexact Rounded +-- sqtx2452 squareroot 32.00E-2 -> 0.57 Inexact Rounded +-- sqtx2453 squareroot 32E-3 -> 0.18 Inexact Rounded +-- sqtx2454 squareroot 32E+1 -> 18 Inexact Rounded +-- sqtx2455 squareroot 32E+2 -> 57 Inexact Rounded +-- sqtx2456 squareroot 32E+3 -> 1.8E+2 Inexact Rounded +-- sqtx2457 squareroot 0.33 -> 0.57 Inexact Rounded +-- sqtx2458 squareroot 0.033 -> 0.18 Inexact Rounded +-- sqtx2459 squareroot 33.0E-1 -> 1.8 Inexact Rounded +-- sqtx2460 squareroot 33.00E-2 -> 0.57 Inexact Rounded +-- sqtx2461 squareroot 33E-3 -> 0.18 Inexact Rounded +-- sqtx2462 squareroot 33E+1 -> 18 Inexact Rounded +-- sqtx2463 squareroot 33E+2 -> 57 Inexact Rounded +-- sqtx2464 squareroot 33E+3 -> 1.8E+2 Inexact Rounded +-- sqtx2465 squareroot 0.34 -> 0.58 Inexact Rounded +-- sqtx2466 squareroot 0.034 -> 0.18 Inexact Rounded +-- sqtx2467 squareroot 34.0E-1 -> 1.8 Inexact Rounded +-- sqtx2468 squareroot 34.00E-2 -> 0.58 Inexact Rounded +-- sqtx2469 squareroot 34E-3 -> 0.18 Inexact Rounded +-- sqtx2470 squareroot 34E+1 -> 18 Inexact Rounded +-- sqtx2471 squareroot 34E+2 -> 58 Inexact Rounded +-- sqtx2472 squareroot 34E+3 -> 1.8E+2 Inexact Rounded +-- sqtx2473 squareroot 0.35 -> 0.59 Inexact Rounded +-- sqtx2474 squareroot 0.035 -> 0.19 Inexact Rounded +-- sqtx2475 squareroot 35.0E-1 -> 1.9 Inexact Rounded +-- sqtx2476 squareroot 35.00E-2 -> 0.59 Inexact Rounded +-- sqtx2477 squareroot 35E-3 -> 0.19 Inexact Rounded +-- sqtx2478 squareroot 35E+1 -> 19 Inexact Rounded +-- sqtx2479 squareroot 35E+2 -> 59 Inexact Rounded +-- sqtx2480 squareroot 35E+3 -> 1.9E+2 Inexact Rounded sqtx2481 squareroot 0.36 -> 0.6 -sqtx2482 squareroot 0.036 -> 0.19 Inexact Rounded -sqtx2483 squareroot 36.0E-1 -> 1.9 Inexact Rounded +-- sqtx2482 squareroot 0.036 -> 0.19 Inexact Rounded +-- sqtx2483 squareroot 36.0E-1 -> 1.9 Inexact Rounded sqtx2484 squareroot 36.00E-2 -> 0.60 -sqtx2485 squareroot 36E-3 -> 0.19 Inexact Rounded -sqtx2486 squareroot 36E+1 -> 19 Inexact Rounded +-- sqtx2485 squareroot 36E-3 -> 0.19 Inexact Rounded +-- sqtx2486 squareroot 36E+1 -> 19 Inexact Rounded sqtx2487 squareroot 36E+2 -> 6E+1 -sqtx2488 squareroot 36E+3 -> 1.9E+2 Inexact Rounded -sqtx2489 squareroot 0.37 -> 0.61 Inexact Rounded -sqtx2490 squareroot 0.037 -> 0.19 Inexact Rounded -sqtx2491 squareroot 37.0E-1 -> 1.9 Inexact Rounded -sqtx2492 squareroot 37.00E-2 -> 0.61 Inexact Rounded -sqtx2493 squareroot 37E-3 -> 0.19 Inexact Rounded -sqtx2494 squareroot 37E+1 -> 19 Inexact Rounded -sqtx2495 squareroot 37E+2 -> 61 Inexact Rounded -sqtx2496 squareroot 37E+3 -> 1.9E+2 Inexact Rounded -sqtx2497 squareroot 0.38 -> 0.62 Inexact Rounded -sqtx2498 squareroot 0.038 -> 0.19 Inexact Rounded -sqtx2499 squareroot 38.0E-1 -> 1.9 Inexact Rounded -sqtx2500 squareroot 38.00E-2 -> 0.62 Inexact Rounded -sqtx2501 squareroot 38E-3 -> 0.19 Inexact Rounded -sqtx2502 squareroot 38E+1 -> 19 Inexact Rounded -sqtx2503 squareroot 38E+2 -> 62 Inexact Rounded -sqtx2504 squareroot 38E+3 -> 1.9E+2 Inexact Rounded -sqtx2505 squareroot 0.39 -> 0.62 Inexact Rounded -sqtx2506 squareroot 0.039 -> 0.20 Inexact Rounded -sqtx2507 squareroot 39.0E-1 -> 2.0 Inexact Rounded -sqtx2508 squareroot 39.00E-2 -> 0.62 Inexact Rounded -sqtx2509 squareroot 39E-3 -> 0.20 Inexact Rounded -sqtx2510 squareroot 39E+1 -> 20 Inexact Rounded -sqtx2511 squareroot 39E+2 -> 62 Inexact Rounded -sqtx2512 squareroot 39E+3 -> 2.0E+2 Inexact Rounded -sqtx2513 squareroot 0.40 -> 0.63 Inexact Rounded +-- sqtx2488 squareroot 36E+3 -> 1.9E+2 Inexact Rounded +-- sqtx2489 squareroot 0.37 -> 0.61 Inexact Rounded +-- sqtx2490 squareroot 0.037 -> 0.19 Inexact Rounded +-- sqtx2491 squareroot 37.0E-1 -> 1.9 Inexact Rounded +-- sqtx2492 squareroot 37.00E-2 -> 0.61 Inexact Rounded +-- sqtx2493 squareroot 37E-3 -> 0.19 Inexact Rounded +-- sqtx2494 squareroot 37E+1 -> 19 Inexact Rounded +-- sqtx2495 squareroot 37E+2 -> 61 Inexact Rounded +-- sqtx2496 squareroot 37E+3 -> 1.9E+2 Inexact Rounded +-- sqtx2497 squareroot 0.38 -> 0.62 Inexact Rounded +-- sqtx2498 squareroot 0.038 -> 0.19 Inexact Rounded +-- sqtx2499 squareroot 38.0E-1 -> 1.9 Inexact Rounded +-- sqtx2500 squareroot 38.00E-2 -> 0.62 Inexact Rounded +-- sqtx2501 squareroot 38E-3 -> 0.19 Inexact Rounded +-- sqtx2502 squareroot 38E+1 -> 19 Inexact Rounded +-- sqtx2503 squareroot 38E+2 -> 62 Inexact Rounded +-- sqtx2504 squareroot 38E+3 -> 1.9E+2 Inexact Rounded +-- sqtx2505 squareroot 0.39 -> 0.62 Inexact Rounded +-- sqtx2506 squareroot 0.039 -> 0.20 Inexact Rounded +-- sqtx2507 squareroot 39.0E-1 -> 2.0 Inexact Rounded +-- sqtx2508 squareroot 39.00E-2 -> 0.62 Inexact Rounded +-- sqtx2509 squareroot 39E-3 -> 0.20 Inexact Rounded +-- sqtx2510 squareroot 39E+1 -> 20 Inexact Rounded +-- sqtx2511 squareroot 39E+2 -> 62 Inexact Rounded +-- sqtx2512 squareroot 39E+3 -> 2.0E+2 Inexact Rounded +-- sqtx2513 squareroot 0.40 -> 0.63 Inexact Rounded sqtx2514 squareroot 0.040 -> 0.20 sqtx2515 squareroot 40.0E-1 -> 2.0 -sqtx2516 squareroot 40.00E-2 -> 0.63 Inexact Rounded +-- sqtx2516 squareroot 40.00E-2 -> 0.63 Inexact Rounded sqtx2517 squareroot 40E-3 -> 0.20 sqtx2518 squareroot 40E+1 -> 20 -sqtx2519 squareroot 40E+2 -> 63 Inexact Rounded +-- sqtx2519 squareroot 40E+2 -> 63 Inexact Rounded sqtx2520 squareroot 40E+3 -> 2.0E+2 -sqtx2521 squareroot 0.41 -> 0.64 Inexact Rounded -sqtx2522 squareroot 0.041 -> 0.20 Inexact Rounded -sqtx2523 squareroot 41.0E-1 -> 2.0 Inexact Rounded -sqtx2524 squareroot 41.00E-2 -> 0.64 Inexact Rounded -sqtx2525 squareroot 41E-3 -> 0.20 Inexact Rounded -sqtx2526 squareroot 41E+1 -> 20 Inexact Rounded -sqtx2527 squareroot 41E+2 -> 64 Inexact Rounded -sqtx2528 squareroot 41E+3 -> 2.0E+2 Inexact Rounded -sqtx2529 squareroot 0.42 -> 0.65 Inexact Rounded -sqtx2530 squareroot 0.042 -> 0.20 Inexact Rounded -sqtx2531 squareroot 42.0E-1 -> 2.0 Inexact Rounded -sqtx2532 squareroot 42.00E-2 -> 0.65 Inexact Rounded -sqtx2533 squareroot 42E-3 -> 0.20 Inexact Rounded -sqtx2534 squareroot 42E+1 -> 20 Inexact Rounded -sqtx2535 squareroot 42E+2 -> 65 Inexact Rounded -sqtx2536 squareroot 42E+3 -> 2.0E+2 Inexact Rounded -sqtx2537 squareroot 0.43 -> 0.66 Inexact Rounded -sqtx2538 squareroot 0.043 -> 0.21 Inexact Rounded -sqtx2539 squareroot 43.0E-1 -> 2.1 Inexact Rounded -sqtx2540 squareroot 43.00E-2 -> 0.66 Inexact Rounded -sqtx2541 squareroot 43E-3 -> 0.21 Inexact Rounded -sqtx2542 squareroot 43E+1 -> 21 Inexact Rounded -sqtx2543 squareroot 43E+2 -> 66 Inexact Rounded -sqtx2544 squareroot 43E+3 -> 2.1E+2 Inexact Rounded -sqtx2545 squareroot 0.44 -> 0.66 Inexact Rounded -sqtx2546 squareroot 0.044 -> 0.21 Inexact Rounded -sqtx2547 squareroot 44.0E-1 -> 2.1 Inexact Rounded -sqtx2548 squareroot 44.00E-2 -> 0.66 Inexact Rounded -sqtx2549 squareroot 44E-3 -> 0.21 Inexact Rounded -sqtx2550 squareroot 44E+1 -> 21 Inexact Rounded -sqtx2551 squareroot 44E+2 -> 66 Inexact Rounded -sqtx2552 squareroot 44E+3 -> 2.1E+2 Inexact Rounded -sqtx2553 squareroot 0.45 -> 0.67 Inexact Rounded -sqtx2554 squareroot 0.045 -> 0.21 Inexact Rounded -sqtx2555 squareroot 45.0E-1 -> 2.1 Inexact Rounded -sqtx2556 squareroot 45.00E-2 -> 0.67 Inexact Rounded -sqtx2557 squareroot 45E-3 -> 0.21 Inexact Rounded -sqtx2558 squareroot 45E+1 -> 21 Inexact Rounded -sqtx2559 squareroot 45E+2 -> 67 Inexact Rounded -sqtx2560 squareroot 45E+3 -> 2.1E+2 Inexact Rounded -sqtx2561 squareroot 0.46 -> 0.68 Inexact Rounded -sqtx2562 squareroot 0.046 -> 0.21 Inexact Rounded -sqtx2563 squareroot 46.0E-1 -> 2.1 Inexact Rounded -sqtx2564 squareroot 46.00E-2 -> 0.68 Inexact Rounded -sqtx2565 squareroot 46E-3 -> 0.21 Inexact Rounded -sqtx2566 squareroot 46E+1 -> 21 Inexact Rounded -sqtx2567 squareroot 46E+2 -> 68 Inexact Rounded -sqtx2568 squareroot 46E+3 -> 2.1E+2 Inexact Rounded -sqtx2569 squareroot 0.47 -> 0.69 Inexact Rounded -sqtx2570 squareroot 0.047 -> 0.22 Inexact Rounded -sqtx2571 squareroot 47.0E-1 -> 2.2 Inexact Rounded -sqtx2572 squareroot 47.00E-2 -> 0.69 Inexact Rounded -sqtx2573 squareroot 47E-3 -> 0.22 Inexact Rounded -sqtx2574 squareroot 47E+1 -> 22 Inexact Rounded -sqtx2575 squareroot 47E+2 -> 69 Inexact Rounded -sqtx2576 squareroot 47E+3 -> 2.2E+2 Inexact Rounded -sqtx2577 squareroot 0.48 -> 0.69 Inexact Rounded -sqtx2578 squareroot 0.048 -> 0.22 Inexact Rounded -sqtx2579 squareroot 48.0E-1 -> 2.2 Inexact Rounded -sqtx2580 squareroot 48.00E-2 -> 0.69 Inexact Rounded -sqtx2581 squareroot 48E-3 -> 0.22 Inexact Rounded -sqtx2582 squareroot 48E+1 -> 22 Inexact Rounded -sqtx2583 squareroot 48E+2 -> 69 Inexact Rounded -sqtx2584 squareroot 48E+3 -> 2.2E+2 Inexact Rounded +-- sqtx2521 squareroot 0.41 -> 0.64 Inexact Rounded +-- sqtx2522 squareroot 0.041 -> 0.20 Inexact Rounded +-- sqtx2523 squareroot 41.0E-1 -> 2.0 Inexact Rounded +-- sqtx2524 squareroot 41.00E-2 -> 0.64 Inexact Rounded +-- sqtx2525 squareroot 41E-3 -> 0.20 Inexact Rounded +-- sqtx2526 squareroot 41E+1 -> 20 Inexact Rounded +-- sqtx2527 squareroot 41E+2 -> 64 Inexact Rounded +-- sqtx2528 squareroot 41E+3 -> 2.0E+2 Inexact Rounded +-- sqtx2529 squareroot 0.42 -> 0.65 Inexact Rounded +-- sqtx2530 squareroot 0.042 -> 0.20 Inexact Rounded +-- sqtx2531 squareroot 42.0E-1 -> 2.0 Inexact Rounded +-- sqtx2532 squareroot 42.00E-2 -> 0.65 Inexact Rounded +-- sqtx2533 squareroot 42E-3 -> 0.20 Inexact Rounded +-- sqtx2534 squareroot 42E+1 -> 20 Inexact Rounded +-- sqtx2535 squareroot 42E+2 -> 65 Inexact Rounded +-- sqtx2536 squareroot 42E+3 -> 2.0E+2 Inexact Rounded +-- sqtx2537 squareroot 0.43 -> 0.66 Inexact Rounded +-- sqtx2538 squareroot 0.043 -> 0.21 Inexact Rounded +-- sqtx2539 squareroot 43.0E-1 -> 2.1 Inexact Rounded +-- sqtx2540 squareroot 43.00E-2 -> 0.66 Inexact Rounded +-- sqtx2541 squareroot 43E-3 -> 0.21 Inexact Rounded +-- sqtx2542 squareroot 43E+1 -> 21 Inexact Rounded +-- sqtx2543 squareroot 43E+2 -> 66 Inexact Rounded +-- sqtx2544 squareroot 43E+3 -> 2.1E+2 Inexact Rounded +-- sqtx2545 squareroot 0.44 -> 0.66 Inexact Rounded +-- sqtx2546 squareroot 0.044 -> 0.21 Inexact Rounded +-- sqtx2547 squareroot 44.0E-1 -> 2.1 Inexact Rounded +-- sqtx2548 squareroot 44.00E-2 -> 0.66 Inexact Rounded +-- sqtx2549 squareroot 44E-3 -> 0.21 Inexact Rounded +-- sqtx2550 squareroot 44E+1 -> 21 Inexact Rounded +-- sqtx2551 squareroot 44E+2 -> 66 Inexact Rounded +-- sqtx2552 squareroot 44E+3 -> 2.1E+2 Inexact Rounded +-- sqtx2553 squareroot 0.45 -> 0.67 Inexact Rounded +-- sqtx2554 squareroot 0.045 -> 0.21 Inexact Rounded +-- sqtx2555 squareroot 45.0E-1 -> 2.1 Inexact Rounded +-- sqtx2556 squareroot 45.00E-2 -> 0.67 Inexact Rounded +-- sqtx2557 squareroot 45E-3 -> 0.21 Inexact Rounded +-- sqtx2558 squareroot 45E+1 -> 21 Inexact Rounded +-- sqtx2559 squareroot 45E+2 -> 67 Inexact Rounded +-- sqtx2560 squareroot 45E+3 -> 2.1E+2 Inexact Rounded +-- sqtx2561 squareroot 0.46 -> 0.68 Inexact Rounded +-- sqtx2562 squareroot 0.046 -> 0.21 Inexact Rounded +-- sqtx2563 squareroot 46.0E-1 -> 2.1 Inexact Rounded +-- sqtx2564 squareroot 46.00E-2 -> 0.68 Inexact Rounded +-- sqtx2565 squareroot 46E-3 -> 0.21 Inexact Rounded +-- sqtx2566 squareroot 46E+1 -> 21 Inexact Rounded +-- sqtx2567 squareroot 46E+2 -> 68 Inexact Rounded +-- sqtx2568 squareroot 46E+3 -> 2.1E+2 Inexact Rounded +-- sqtx2569 squareroot 0.47 -> 0.69 Inexact Rounded +-- sqtx2570 squareroot 0.047 -> 0.22 Inexact Rounded +-- sqtx2571 squareroot 47.0E-1 -> 2.2 Inexact Rounded +-- sqtx2572 squareroot 47.00E-2 -> 0.69 Inexact Rounded +-- sqtx2573 squareroot 47E-3 -> 0.22 Inexact Rounded +-- sqtx2574 squareroot 47E+1 -> 22 Inexact Rounded +-- sqtx2575 squareroot 47E+2 -> 69 Inexact Rounded +-- sqtx2576 squareroot 47E+3 -> 2.2E+2 Inexact Rounded +-- sqtx2577 squareroot 0.48 -> 0.69 Inexact Rounded +-- sqtx2578 squareroot 0.048 -> 0.22 Inexact Rounded +-- sqtx2579 squareroot 48.0E-1 -> 2.2 Inexact Rounded +-- sqtx2580 squareroot 48.00E-2 -> 0.69 Inexact Rounded +-- sqtx2581 squareroot 48E-3 -> 0.22 Inexact Rounded +-- sqtx2582 squareroot 48E+1 -> 22 Inexact Rounded +-- sqtx2583 squareroot 48E+2 -> 69 Inexact Rounded +-- sqtx2584 squareroot 48E+3 -> 2.2E+2 Inexact Rounded sqtx2585 squareroot 0.49 -> 0.7 -sqtx2586 squareroot 0.049 -> 0.22 Inexact Rounded -sqtx2587 squareroot 49.0E-1 -> 2.2 Inexact Rounded +-- sqtx2586 squareroot 0.049 -> 0.22 Inexact Rounded +-- sqtx2587 squareroot 49.0E-1 -> 2.2 Inexact Rounded sqtx2588 squareroot 49.00E-2 -> 0.70 -sqtx2589 squareroot 49E-3 -> 0.22 Inexact Rounded -sqtx2590 squareroot 49E+1 -> 22 Inexact Rounded +-- sqtx2589 squareroot 49E-3 -> 0.22 Inexact Rounded +-- sqtx2590 squareroot 49E+1 -> 22 Inexact Rounded sqtx2591 squareroot 49E+2 -> 7E+1 -sqtx2592 squareroot 49E+3 -> 2.2E+2 Inexact Rounded -sqtx2593 squareroot 0.50 -> 0.71 Inexact Rounded -sqtx2594 squareroot 0.050 -> 0.22 Inexact Rounded -sqtx2595 squareroot 50.0E-1 -> 2.2 Inexact Rounded -sqtx2596 squareroot 50.00E-2 -> 0.71 Inexact Rounded -sqtx2597 squareroot 50E-3 -> 0.22 Inexact Rounded -sqtx2598 squareroot 50E+1 -> 22 Inexact Rounded -sqtx2599 squareroot 50E+2 -> 71 Inexact Rounded -sqtx2600 squareroot 50E+3 -> 2.2E+2 Inexact Rounded -sqtx2601 squareroot 0.51 -> 0.71 Inexact Rounded -sqtx2602 squareroot 0.051 -> 0.23 Inexact Rounded -sqtx2603 squareroot 51.0E-1 -> 2.3 Inexact Rounded -sqtx2604 squareroot 51.00E-2 -> 0.71 Inexact Rounded -sqtx2605 squareroot 51E-3 -> 0.23 Inexact Rounded -sqtx2606 squareroot 51E+1 -> 23 Inexact Rounded -sqtx2607 squareroot 51E+2 -> 71 Inexact Rounded -sqtx2608 squareroot 51E+3 -> 2.3E+2 Inexact Rounded -sqtx2609 squareroot 0.52 -> 0.72 Inexact Rounded -sqtx2610 squareroot 0.052 -> 0.23 Inexact Rounded -sqtx2611 squareroot 52.0E-1 -> 2.3 Inexact Rounded -sqtx2612 squareroot 52.00E-2 -> 0.72 Inexact Rounded -sqtx2613 squareroot 52E-3 -> 0.23 Inexact Rounded -sqtx2614 squareroot 52E+1 -> 23 Inexact Rounded -sqtx2615 squareroot 52E+2 -> 72 Inexact Rounded -sqtx2616 squareroot 52E+3 -> 2.3E+2 Inexact Rounded -sqtx2617 squareroot 0.53 -> 0.73 Inexact Rounded -sqtx2618 squareroot 0.053 -> 0.23 Inexact Rounded -sqtx2619 squareroot 53.0E-1 -> 2.3 Inexact Rounded -sqtx2620 squareroot 53.00E-2 -> 0.73 Inexact Rounded -sqtx2621 squareroot 53E-3 -> 0.23 Inexact Rounded -sqtx2622 squareroot 53E+1 -> 23 Inexact Rounded -sqtx2623 squareroot 53E+2 -> 73 Inexact Rounded -sqtx2624 squareroot 53E+3 -> 2.3E+2 Inexact Rounded -sqtx2625 squareroot 0.54 -> 0.73 Inexact Rounded -sqtx2626 squareroot 0.054 -> 0.23 Inexact Rounded -sqtx2627 squareroot 54.0E-1 -> 2.3 Inexact Rounded -sqtx2628 squareroot 54.00E-2 -> 0.73 Inexact Rounded -sqtx2629 squareroot 54E-3 -> 0.23 Inexact Rounded -sqtx2630 squareroot 54E+1 -> 23 Inexact Rounded -sqtx2631 squareroot 54E+2 -> 73 Inexact Rounded -sqtx2632 squareroot 54E+3 -> 2.3E+2 Inexact Rounded -sqtx2633 squareroot 0.55 -> 0.74 Inexact Rounded -sqtx2634 squareroot 0.055 -> 0.23 Inexact Rounded -sqtx2635 squareroot 55.0E-1 -> 2.3 Inexact Rounded -sqtx2636 squareroot 55.00E-2 -> 0.74 Inexact Rounded -sqtx2637 squareroot 55E-3 -> 0.23 Inexact Rounded -sqtx2638 squareroot 55E+1 -> 23 Inexact Rounded -sqtx2639 squareroot 55E+2 -> 74 Inexact Rounded -sqtx2640 squareroot 55E+3 -> 2.3E+2 Inexact Rounded -sqtx2641 squareroot 0.56 -> 0.75 Inexact Rounded -sqtx2642 squareroot 0.056 -> 0.24 Inexact Rounded -sqtx2643 squareroot 56.0E-1 -> 2.4 Inexact Rounded -sqtx2644 squareroot 56.00E-2 -> 0.75 Inexact Rounded -sqtx2645 squareroot 56E-3 -> 0.24 Inexact Rounded -sqtx2646 squareroot 56E+1 -> 24 Inexact Rounded -sqtx2647 squareroot 56E+2 -> 75 Inexact Rounded -sqtx2648 squareroot 56E+3 -> 2.4E+2 Inexact Rounded -sqtx2649 squareroot 0.57 -> 0.75 Inexact Rounded -sqtx2650 squareroot 0.057 -> 0.24 Inexact Rounded -sqtx2651 squareroot 57.0E-1 -> 2.4 Inexact Rounded -sqtx2652 squareroot 57.00E-2 -> 0.75 Inexact Rounded -sqtx2653 squareroot 57E-3 -> 0.24 Inexact Rounded -sqtx2654 squareroot 57E+1 -> 24 Inexact Rounded -sqtx2655 squareroot 57E+2 -> 75 Inexact Rounded -sqtx2656 squareroot 57E+3 -> 2.4E+2 Inexact Rounded -sqtx2657 squareroot 0.58 -> 0.76 Inexact Rounded -sqtx2658 squareroot 0.058 -> 0.24 Inexact Rounded -sqtx2659 squareroot 58.0E-1 -> 2.4 Inexact Rounded -sqtx2660 squareroot 58.00E-2 -> 0.76 Inexact Rounded -sqtx2661 squareroot 58E-3 -> 0.24 Inexact Rounded -sqtx2662 squareroot 58E+1 -> 24 Inexact Rounded -sqtx2663 squareroot 58E+2 -> 76 Inexact Rounded -sqtx2664 squareroot 58E+3 -> 2.4E+2 Inexact Rounded -sqtx2665 squareroot 0.59 -> 0.77 Inexact Rounded -sqtx2666 squareroot 0.059 -> 0.24 Inexact Rounded -sqtx2667 squareroot 59.0E-1 -> 2.4 Inexact Rounded -sqtx2668 squareroot 59.00E-2 -> 0.77 Inexact Rounded -sqtx2669 squareroot 59E-3 -> 0.24 Inexact Rounded -sqtx2670 squareroot 59E+1 -> 24 Inexact Rounded -sqtx2671 squareroot 59E+2 -> 77 Inexact Rounded -sqtx2672 squareroot 59E+3 -> 2.4E+2 Inexact Rounded -sqtx2673 squareroot 0.60 -> 0.77 Inexact Rounded -sqtx2674 squareroot 0.060 -> 0.24 Inexact Rounded -sqtx2675 squareroot 60.0E-1 -> 2.4 Inexact Rounded -sqtx2676 squareroot 60.00E-2 -> 0.77 Inexact Rounded -sqtx2677 squareroot 60E-3 -> 0.24 Inexact Rounded -sqtx2678 squareroot 60E+1 -> 24 Inexact Rounded -sqtx2679 squareroot 60E+2 -> 77 Inexact Rounded -sqtx2680 squareroot 60E+3 -> 2.4E+2 Inexact Rounded -sqtx2681 squareroot 0.61 -> 0.78 Inexact Rounded -sqtx2682 squareroot 0.061 -> 0.25 Inexact Rounded -sqtx2683 squareroot 61.0E-1 -> 2.5 Inexact Rounded -sqtx2684 squareroot 61.00E-2 -> 0.78 Inexact Rounded -sqtx2685 squareroot 61E-3 -> 0.25 Inexact Rounded -sqtx2686 squareroot 61E+1 -> 25 Inexact Rounded -sqtx2687 squareroot 61E+2 -> 78 Inexact Rounded -sqtx2688 squareroot 61E+3 -> 2.5E+2 Inexact Rounded -sqtx2689 squareroot 0.62 -> 0.79 Inexact Rounded -sqtx2690 squareroot 0.062 -> 0.25 Inexact Rounded -sqtx2691 squareroot 62.0E-1 -> 2.5 Inexact Rounded -sqtx2692 squareroot 62.00E-2 -> 0.79 Inexact Rounded -sqtx2693 squareroot 62E-3 -> 0.25 Inexact Rounded -sqtx2694 squareroot 62E+1 -> 25 Inexact Rounded -sqtx2695 squareroot 62E+2 -> 79 Inexact Rounded -sqtx2696 squareroot 62E+3 -> 2.5E+2 Inexact Rounded -sqtx2697 squareroot 0.63 -> 0.79 Inexact Rounded -sqtx2698 squareroot 0.063 -> 0.25 Inexact Rounded -sqtx2699 squareroot 63.0E-1 -> 2.5 Inexact Rounded -sqtx2700 squareroot 63.00E-2 -> 0.79 Inexact Rounded -sqtx2701 squareroot 63E-3 -> 0.25 Inexact Rounded -sqtx2702 squareroot 63E+1 -> 25 Inexact Rounded -sqtx2703 squareroot 63E+2 -> 79 Inexact Rounded -sqtx2704 squareroot 63E+3 -> 2.5E+2 Inexact Rounded +-- sqtx2592 squareroot 49E+3 -> 2.2E+2 Inexact Rounded +-- sqtx2593 squareroot 0.50 -> 0.71 Inexact Rounded +-- sqtx2594 squareroot 0.050 -> 0.22 Inexact Rounded +-- sqtx2595 squareroot 50.0E-1 -> 2.2 Inexact Rounded +-- sqtx2596 squareroot 50.00E-2 -> 0.71 Inexact Rounded +-- sqtx2597 squareroot 50E-3 -> 0.22 Inexact Rounded +-- sqtx2598 squareroot 50E+1 -> 22 Inexact Rounded +-- sqtx2599 squareroot 50E+2 -> 71 Inexact Rounded +-- sqtx2600 squareroot 50E+3 -> 2.2E+2 Inexact Rounded +-- sqtx2601 squareroot 0.51 -> 0.71 Inexact Rounded +-- sqtx2602 squareroot 0.051 -> 0.23 Inexact Rounded +-- sqtx2603 squareroot 51.0E-1 -> 2.3 Inexact Rounded +-- sqtx2604 squareroot 51.00E-2 -> 0.71 Inexact Rounded +-- sqtx2605 squareroot 51E-3 -> 0.23 Inexact Rounded +-- sqtx2606 squareroot 51E+1 -> 23 Inexact Rounded +-- sqtx2607 squareroot 51E+2 -> 71 Inexact Rounded +-- sqtx2608 squareroot 51E+3 -> 2.3E+2 Inexact Rounded +-- sqtx2609 squareroot 0.52 -> 0.72 Inexact Rounded +-- sqtx2610 squareroot 0.052 -> 0.23 Inexact Rounded +-- sqtx2611 squareroot 52.0E-1 -> 2.3 Inexact Rounded +-- sqtx2612 squareroot 52.00E-2 -> 0.72 Inexact Rounded +-- sqtx2613 squareroot 52E-3 -> 0.23 Inexact Rounded +-- sqtx2614 squareroot 52E+1 -> 23 Inexact Rounded +-- sqtx2615 squareroot 52E+2 -> 72 Inexact Rounded +-- sqtx2616 squareroot 52E+3 -> 2.3E+2 Inexact Rounded +-- sqtx2617 squareroot 0.53 -> 0.73 Inexact Rounded +-- sqtx2618 squareroot 0.053 -> 0.23 Inexact Rounded +-- sqtx2619 squareroot 53.0E-1 -> 2.3 Inexact Rounded +-- sqtx2620 squareroot 53.00E-2 -> 0.73 Inexact Rounded +-- sqtx2621 squareroot 53E-3 -> 0.23 Inexact Rounded +-- sqtx2622 squareroot 53E+1 -> 23 Inexact Rounded +-- sqtx2623 squareroot 53E+2 -> 73 Inexact Rounded +-- sqtx2624 squareroot 53E+3 -> 2.3E+2 Inexact Rounded +-- sqtx2625 squareroot 0.54 -> 0.73 Inexact Rounded +-- sqtx2626 squareroot 0.054 -> 0.23 Inexact Rounded +-- sqtx2627 squareroot 54.0E-1 -> 2.3 Inexact Rounded +-- sqtx2628 squareroot 54.00E-2 -> 0.73 Inexact Rounded +-- sqtx2629 squareroot 54E-3 -> 0.23 Inexact Rounded +-- sqtx2630 squareroot 54E+1 -> 23 Inexact Rounded +-- sqtx2631 squareroot 54E+2 -> 73 Inexact Rounded +-- sqtx2632 squareroot 54E+3 -> 2.3E+2 Inexact Rounded +-- sqtx2633 squareroot 0.55 -> 0.74 Inexact Rounded +-- sqtx2634 squareroot 0.055 -> 0.23 Inexact Rounded +-- sqtx2635 squareroot 55.0E-1 -> 2.3 Inexact Rounded +-- sqtx2636 squareroot 55.00E-2 -> 0.74 Inexact Rounded +-- sqtx2637 squareroot 55E-3 -> 0.23 Inexact Rounded +-- sqtx2638 squareroot 55E+1 -> 23 Inexact Rounded +-- sqtx2639 squareroot 55E+2 -> 74 Inexact Rounded +-- sqtx2640 squareroot 55E+3 -> 2.3E+2 Inexact Rounded +-- sqtx2641 squareroot 0.56 -> 0.75 Inexact Rounded +-- sqtx2642 squareroot 0.056 -> 0.24 Inexact Rounded +-- sqtx2643 squareroot 56.0E-1 -> 2.4 Inexact Rounded +-- sqtx2644 squareroot 56.00E-2 -> 0.75 Inexact Rounded +-- sqtx2645 squareroot 56E-3 -> 0.24 Inexact Rounded +-- sqtx2646 squareroot 56E+1 -> 24 Inexact Rounded +-- sqtx2647 squareroot 56E+2 -> 75 Inexact Rounded +-- sqtx2648 squareroot 56E+3 -> 2.4E+2 Inexact Rounded +-- sqtx2649 squareroot 0.57 -> 0.75 Inexact Rounded +-- sqtx2650 squareroot 0.057 -> 0.24 Inexact Rounded +-- sqtx2651 squareroot 57.0E-1 -> 2.4 Inexact Rounded +-- sqtx2652 squareroot 57.00E-2 -> 0.75 Inexact Rounded +-- sqtx2653 squareroot 57E-3 -> 0.24 Inexact Rounded +-- sqtx2654 squareroot 57E+1 -> 24 Inexact Rounded +-- sqtx2655 squareroot 57E+2 -> 75 Inexact Rounded +-- sqtx2656 squareroot 57E+3 -> 2.4E+2 Inexact Rounded +-- sqtx2657 squareroot 0.58 -> 0.76 Inexact Rounded +-- sqtx2658 squareroot 0.058 -> 0.24 Inexact Rounded +-- sqtx2659 squareroot 58.0E-1 -> 2.4 Inexact Rounded +-- sqtx2660 squareroot 58.00E-2 -> 0.76 Inexact Rounded +-- sqtx2661 squareroot 58E-3 -> 0.24 Inexact Rounded +-- sqtx2662 squareroot 58E+1 -> 24 Inexact Rounded +-- sqtx2663 squareroot 58E+2 -> 76 Inexact Rounded +-- sqtx2664 squareroot 58E+3 -> 2.4E+2 Inexact Rounded +-- sqtx2665 squareroot 0.59 -> 0.77 Inexact Rounded +-- sqtx2666 squareroot 0.059 -> 0.24 Inexact Rounded +-- sqtx2667 squareroot 59.0E-1 -> 2.4 Inexact Rounded +-- sqtx2668 squareroot 59.00E-2 -> 0.77 Inexact Rounded +-- sqtx2669 squareroot 59E-3 -> 0.24 Inexact Rounded +-- sqtx2670 squareroot 59E+1 -> 24 Inexact Rounded +-- sqtx2671 squareroot 59E+2 -> 77 Inexact Rounded +-- sqtx2672 squareroot 59E+3 -> 2.4E+2 Inexact Rounded +-- sqtx2673 squareroot 0.60 -> 0.77 Inexact Rounded +-- sqtx2674 squareroot 0.060 -> 0.24 Inexact Rounded +-- sqtx2675 squareroot 60.0E-1 -> 2.4 Inexact Rounded +-- sqtx2676 squareroot 60.00E-2 -> 0.77 Inexact Rounded +-- sqtx2677 squareroot 60E-3 -> 0.24 Inexact Rounded +-- sqtx2678 squareroot 60E+1 -> 24 Inexact Rounded +-- sqtx2679 squareroot 60E+2 -> 77 Inexact Rounded +-- sqtx2680 squareroot 60E+3 -> 2.4E+2 Inexact Rounded +-- sqtx2681 squareroot 0.61 -> 0.78 Inexact Rounded +-- sqtx2682 squareroot 0.061 -> 0.25 Inexact Rounded +-- sqtx2683 squareroot 61.0E-1 -> 2.5 Inexact Rounded +-- sqtx2684 squareroot 61.00E-2 -> 0.78 Inexact Rounded +-- sqtx2685 squareroot 61E-3 -> 0.25 Inexact Rounded +-- sqtx2686 squareroot 61E+1 -> 25 Inexact Rounded +-- sqtx2687 squareroot 61E+2 -> 78 Inexact Rounded +-- sqtx2688 squareroot 61E+3 -> 2.5E+2 Inexact Rounded +-- sqtx2689 squareroot 0.62 -> 0.79 Inexact Rounded +-- sqtx2690 squareroot 0.062 -> 0.25 Inexact Rounded +-- sqtx2691 squareroot 62.0E-1 -> 2.5 Inexact Rounded +-- sqtx2692 squareroot 62.00E-2 -> 0.79 Inexact Rounded +-- sqtx2693 squareroot 62E-3 -> 0.25 Inexact Rounded +-- sqtx2694 squareroot 62E+1 -> 25 Inexact Rounded +-- sqtx2695 squareroot 62E+2 -> 79 Inexact Rounded +-- sqtx2696 squareroot 62E+3 -> 2.5E+2 Inexact Rounded +-- sqtx2697 squareroot 0.63 -> 0.79 Inexact Rounded +-- sqtx2698 squareroot 0.063 -> 0.25 Inexact Rounded +-- sqtx2699 squareroot 63.0E-1 -> 2.5 Inexact Rounded +-- sqtx2700 squareroot 63.00E-2 -> 0.79 Inexact Rounded +-- sqtx2701 squareroot 63E-3 -> 0.25 Inexact Rounded +-- sqtx2702 squareroot 63E+1 -> 25 Inexact Rounded +-- sqtx2703 squareroot 63E+2 -> 79 Inexact Rounded +-- sqtx2704 squareroot 63E+3 -> 2.5E+2 Inexact Rounded sqtx2705 squareroot 0.64 -> 0.8 -sqtx2706 squareroot 0.064 -> 0.25 Inexact Rounded -sqtx2707 squareroot 64.0E-1 -> 2.5 Inexact Rounded +-- sqtx2706 squareroot 0.064 -> 0.25 Inexact Rounded +-- sqtx2707 squareroot 64.0E-1 -> 2.5 Inexact Rounded sqtx2708 squareroot 64.00E-2 -> 0.80 -sqtx2709 squareroot 64E-3 -> 0.25 Inexact Rounded -sqtx2710 squareroot 64E+1 -> 25 Inexact Rounded +-- sqtx2709 squareroot 64E-3 -> 0.25 Inexact Rounded +-- sqtx2710 squareroot 64E+1 -> 25 Inexact Rounded sqtx2711 squareroot 64E+2 -> 8E+1 -sqtx2712 squareroot 64E+3 -> 2.5E+2 Inexact Rounded -sqtx2713 squareroot 0.65 -> 0.81 Inexact Rounded -sqtx2714 squareroot 0.065 -> 0.25 Inexact Rounded -sqtx2715 squareroot 65.0E-1 -> 2.5 Inexact Rounded -sqtx2716 squareroot 65.00E-2 -> 0.81 Inexact Rounded -sqtx2717 squareroot 65E-3 -> 0.25 Inexact Rounded -sqtx2718 squareroot 65E+1 -> 25 Inexact Rounded -sqtx2719 squareroot 65E+2 -> 81 Inexact Rounded -sqtx2720 squareroot 65E+3 -> 2.5E+2 Inexact Rounded -sqtx2721 squareroot 0.66 -> 0.81 Inexact Rounded -sqtx2722 squareroot 0.066 -> 0.26 Inexact Rounded -sqtx2723 squareroot 66.0E-1 -> 2.6 Inexact Rounded -sqtx2724 squareroot 66.00E-2 -> 0.81 Inexact Rounded -sqtx2725 squareroot 66E-3 -> 0.26 Inexact Rounded -sqtx2726 squareroot 66E+1 -> 26 Inexact Rounded -sqtx2727 squareroot 66E+2 -> 81 Inexact Rounded -sqtx2728 squareroot 66E+3 -> 2.6E+2 Inexact Rounded -sqtx2729 squareroot 0.67 -> 0.82 Inexact Rounded -sqtx2730 squareroot 0.067 -> 0.26 Inexact Rounded -sqtx2731 squareroot 67.0E-1 -> 2.6 Inexact Rounded -sqtx2732 squareroot 67.00E-2 -> 0.82 Inexact Rounded -sqtx2733 squareroot 67E-3 -> 0.26 Inexact Rounded -sqtx2734 squareroot 67E+1 -> 26 Inexact Rounded -sqtx2735 squareroot 67E+2 -> 82 Inexact Rounded -sqtx2736 squareroot 67E+3 -> 2.6E+2 Inexact Rounded -sqtx2737 squareroot 0.68 -> 0.82 Inexact Rounded -sqtx2738 squareroot 0.068 -> 0.26 Inexact Rounded -sqtx2739 squareroot 68.0E-1 -> 2.6 Inexact Rounded -sqtx2740 squareroot 68.00E-2 -> 0.82 Inexact Rounded -sqtx2741 squareroot 68E-3 -> 0.26 Inexact Rounded -sqtx2742 squareroot 68E+1 -> 26 Inexact Rounded -sqtx2743 squareroot 68E+2 -> 82 Inexact Rounded -sqtx2744 squareroot 68E+3 -> 2.6E+2 Inexact Rounded -sqtx2745 squareroot 0.69 -> 0.83 Inexact Rounded -sqtx2746 squareroot 0.069 -> 0.26 Inexact Rounded -sqtx2747 squareroot 69.0E-1 -> 2.6 Inexact Rounded -sqtx2748 squareroot 69.00E-2 -> 0.83 Inexact Rounded -sqtx2749 squareroot 69E-3 -> 0.26 Inexact Rounded -sqtx2750 squareroot 69E+1 -> 26 Inexact Rounded -sqtx2751 squareroot 69E+2 -> 83 Inexact Rounded -sqtx2752 squareroot 69E+3 -> 2.6E+2 Inexact Rounded -sqtx2753 squareroot 0.70 -> 0.84 Inexact Rounded -sqtx2754 squareroot 0.070 -> 0.26 Inexact Rounded -sqtx2755 squareroot 70.0E-1 -> 2.6 Inexact Rounded -sqtx2756 squareroot 70.00E-2 -> 0.84 Inexact Rounded -sqtx2757 squareroot 70E-3 -> 0.26 Inexact Rounded -sqtx2758 squareroot 70E+1 -> 26 Inexact Rounded -sqtx2759 squareroot 70E+2 -> 84 Inexact Rounded -sqtx2760 squareroot 70E+3 -> 2.6E+2 Inexact Rounded -sqtx2761 squareroot 0.71 -> 0.84 Inexact Rounded -sqtx2762 squareroot 0.071 -> 0.27 Inexact Rounded -sqtx2763 squareroot 71.0E-1 -> 2.7 Inexact Rounded -sqtx2764 squareroot 71.00E-2 -> 0.84 Inexact Rounded -sqtx2765 squareroot 71E-3 -> 0.27 Inexact Rounded -sqtx2766 squareroot 71E+1 -> 27 Inexact Rounded -sqtx2767 squareroot 71E+2 -> 84 Inexact Rounded -sqtx2768 squareroot 71E+3 -> 2.7E+2 Inexact Rounded -sqtx2769 squareroot 0.72 -> 0.85 Inexact Rounded -sqtx2770 squareroot 0.072 -> 0.27 Inexact Rounded -sqtx2771 squareroot 72.0E-1 -> 2.7 Inexact Rounded -sqtx2772 squareroot 72.00E-2 -> 0.85 Inexact Rounded -sqtx2773 squareroot 72E-3 -> 0.27 Inexact Rounded -sqtx2774 squareroot 72E+1 -> 27 Inexact Rounded -sqtx2775 squareroot 72E+2 -> 85 Inexact Rounded -sqtx2776 squareroot 72E+3 -> 2.7E+2 Inexact Rounded -sqtx2777 squareroot 0.73 -> 0.85 Inexact Rounded -sqtx2778 squareroot 0.073 -> 0.27 Inexact Rounded -sqtx2779 squareroot 73.0E-1 -> 2.7 Inexact Rounded -sqtx2780 squareroot 73.00E-2 -> 0.85 Inexact Rounded -sqtx2781 squareroot 73E-3 -> 0.27 Inexact Rounded -sqtx2782 squareroot 73E+1 -> 27 Inexact Rounded -sqtx2783 squareroot 73E+2 -> 85 Inexact Rounded -sqtx2784 squareroot 73E+3 -> 2.7E+2 Inexact Rounded -sqtx2785 squareroot 0.74 -> 0.86 Inexact Rounded -sqtx2786 squareroot 0.074 -> 0.27 Inexact Rounded -sqtx2787 squareroot 74.0E-1 -> 2.7 Inexact Rounded -sqtx2788 squareroot 74.00E-2 -> 0.86 Inexact Rounded -sqtx2789 squareroot 74E-3 -> 0.27 Inexact Rounded -sqtx2790 squareroot 74E+1 -> 27 Inexact Rounded -sqtx2791 squareroot 74E+2 -> 86 Inexact Rounded -sqtx2792 squareroot 74E+3 -> 2.7E+2 Inexact Rounded -sqtx2793 squareroot 0.75 -> 0.87 Inexact Rounded -sqtx2794 squareroot 0.075 -> 0.27 Inexact Rounded -sqtx2795 squareroot 75.0E-1 -> 2.7 Inexact Rounded -sqtx2796 squareroot 75.00E-2 -> 0.87 Inexact Rounded -sqtx2797 squareroot 75E-3 -> 0.27 Inexact Rounded -sqtx2798 squareroot 75E+1 -> 27 Inexact Rounded -sqtx2799 squareroot 75E+2 -> 87 Inexact Rounded -sqtx2800 squareroot 75E+3 -> 2.7E+2 Inexact Rounded -sqtx2801 squareroot 0.76 -> 0.87 Inexact Rounded -sqtx2802 squareroot 0.076 -> 0.28 Inexact Rounded -sqtx2803 squareroot 76.0E-1 -> 2.8 Inexact Rounded -sqtx2804 squareroot 76.00E-2 -> 0.87 Inexact Rounded -sqtx2805 squareroot 76E-3 -> 0.28 Inexact Rounded -sqtx2806 squareroot 76E+1 -> 28 Inexact Rounded -sqtx2807 squareroot 76E+2 -> 87 Inexact Rounded -sqtx2808 squareroot 76E+3 -> 2.8E+2 Inexact Rounded -sqtx2809 squareroot 0.77 -> 0.88 Inexact Rounded -sqtx2810 squareroot 0.077 -> 0.28 Inexact Rounded -sqtx2811 squareroot 77.0E-1 -> 2.8 Inexact Rounded -sqtx2812 squareroot 77.00E-2 -> 0.88 Inexact Rounded -sqtx2813 squareroot 77E-3 -> 0.28 Inexact Rounded -sqtx2814 squareroot 77E+1 -> 28 Inexact Rounded -sqtx2815 squareroot 77E+2 -> 88 Inexact Rounded -sqtx2816 squareroot 77E+3 -> 2.8E+2 Inexact Rounded -sqtx2817 squareroot 0.78 -> 0.88 Inexact Rounded -sqtx2818 squareroot 0.078 -> 0.28 Inexact Rounded -sqtx2819 squareroot 78.0E-1 -> 2.8 Inexact Rounded -sqtx2820 squareroot 78.00E-2 -> 0.88 Inexact Rounded -sqtx2821 squareroot 78E-3 -> 0.28 Inexact Rounded -sqtx2822 squareroot 78E+1 -> 28 Inexact Rounded -sqtx2823 squareroot 78E+2 -> 88 Inexact Rounded -sqtx2824 squareroot 78E+3 -> 2.8E+2 Inexact Rounded -sqtx2825 squareroot 0.79 -> 0.89 Inexact Rounded -sqtx2826 squareroot 0.079 -> 0.28 Inexact Rounded -sqtx2827 squareroot 79.0E-1 -> 2.8 Inexact Rounded -sqtx2828 squareroot 79.00E-2 -> 0.89 Inexact Rounded -sqtx2829 squareroot 79E-3 -> 0.28 Inexact Rounded -sqtx2830 squareroot 79E+1 -> 28 Inexact Rounded -sqtx2831 squareroot 79E+2 -> 89 Inexact Rounded -sqtx2832 squareroot 79E+3 -> 2.8E+2 Inexact Rounded -sqtx2833 squareroot 0.80 -> 0.89 Inexact Rounded -sqtx2834 squareroot 0.080 -> 0.28 Inexact Rounded -sqtx2835 squareroot 80.0E-1 -> 2.8 Inexact Rounded -sqtx2836 squareroot 80.00E-2 -> 0.89 Inexact Rounded -sqtx2837 squareroot 80E-3 -> 0.28 Inexact Rounded -sqtx2838 squareroot 80E+1 -> 28 Inexact Rounded -sqtx2839 squareroot 80E+2 -> 89 Inexact Rounded -sqtx2840 squareroot 80E+3 -> 2.8E+2 Inexact Rounded +-- sqtx2712 squareroot 64E+3 -> 2.5E+2 Inexact Rounded +-- sqtx2713 squareroot 0.65 -> 0.81 Inexact Rounded +-- sqtx2714 squareroot 0.065 -> 0.25 Inexact Rounded +-- sqtx2715 squareroot 65.0E-1 -> 2.5 Inexact Rounded +-- sqtx2716 squareroot 65.00E-2 -> 0.81 Inexact Rounded +-- sqtx2717 squareroot 65E-3 -> 0.25 Inexact Rounded +-- sqtx2718 squareroot 65E+1 -> 25 Inexact Rounded +-- sqtx2719 squareroot 65E+2 -> 81 Inexact Rounded +-- sqtx2720 squareroot 65E+3 -> 2.5E+2 Inexact Rounded +-- sqtx2721 squareroot 0.66 -> 0.81 Inexact Rounded +-- sqtx2722 squareroot 0.066 -> 0.26 Inexact Rounded +-- sqtx2723 squareroot 66.0E-1 -> 2.6 Inexact Rounded +-- sqtx2724 squareroot 66.00E-2 -> 0.81 Inexact Rounded +-- sqtx2725 squareroot 66E-3 -> 0.26 Inexact Rounded +-- sqtx2726 squareroot 66E+1 -> 26 Inexact Rounded +-- sqtx2727 squareroot 66E+2 -> 81 Inexact Rounded +-- sqtx2728 squareroot 66E+3 -> 2.6E+2 Inexact Rounded +-- sqtx2729 squareroot 0.67 -> 0.82 Inexact Rounded +-- sqtx2730 squareroot 0.067 -> 0.26 Inexact Rounded +-- sqtx2731 squareroot 67.0E-1 -> 2.6 Inexact Rounded +-- sqtx2732 squareroot 67.00E-2 -> 0.82 Inexact Rounded +-- sqtx2733 squareroot 67E-3 -> 0.26 Inexact Rounded +-- sqtx2734 squareroot 67E+1 -> 26 Inexact Rounded +-- sqtx2735 squareroot 67E+2 -> 82 Inexact Rounded +-- sqtx2736 squareroot 67E+3 -> 2.6E+2 Inexact Rounded +-- sqtx2737 squareroot 0.68 -> 0.82 Inexact Rounded +-- sqtx2738 squareroot 0.068 -> 0.26 Inexact Rounded +-- sqtx2739 squareroot 68.0E-1 -> 2.6 Inexact Rounded +-- sqtx2740 squareroot 68.00E-2 -> 0.82 Inexact Rounded +-- sqtx2741 squareroot 68E-3 -> 0.26 Inexact Rounded +-- sqtx2742 squareroot 68E+1 -> 26 Inexact Rounded +-- sqtx2743 squareroot 68E+2 -> 82 Inexact Rounded +-- sqtx2744 squareroot 68E+3 -> 2.6E+2 Inexact Rounded +-- sqtx2745 squareroot 0.69 -> 0.83 Inexact Rounded +-- sqtx2746 squareroot 0.069 -> 0.26 Inexact Rounded +-- sqtx2747 squareroot 69.0E-1 -> 2.6 Inexact Rounded +-- sqtx2748 squareroot 69.00E-2 -> 0.83 Inexact Rounded +-- sqtx2749 squareroot 69E-3 -> 0.26 Inexact Rounded +-- sqtx2750 squareroot 69E+1 -> 26 Inexact Rounded +-- sqtx2751 squareroot 69E+2 -> 83 Inexact Rounded +-- sqtx2752 squareroot 69E+3 -> 2.6E+2 Inexact Rounded +-- sqtx2753 squareroot 0.70 -> 0.84 Inexact Rounded +-- sqtx2754 squareroot 0.070 -> 0.26 Inexact Rounded +-- sqtx2755 squareroot 70.0E-1 -> 2.6 Inexact Rounded +-- sqtx2756 squareroot 70.00E-2 -> 0.84 Inexact Rounded +-- sqtx2757 squareroot 70E-3 -> 0.26 Inexact Rounded +-- sqtx2758 squareroot 70E+1 -> 26 Inexact Rounded +-- sqtx2759 squareroot 70E+2 -> 84 Inexact Rounded +-- sqtx2760 squareroot 70E+3 -> 2.6E+2 Inexact Rounded +-- sqtx2761 squareroot 0.71 -> 0.84 Inexact Rounded +-- sqtx2762 squareroot 0.071 -> 0.27 Inexact Rounded +-- sqtx2763 squareroot 71.0E-1 -> 2.7 Inexact Rounded +-- sqtx2764 squareroot 71.00E-2 -> 0.84 Inexact Rounded +-- sqtx2765 squareroot 71E-3 -> 0.27 Inexact Rounded +-- sqtx2766 squareroot 71E+1 -> 27 Inexact Rounded +-- sqtx2767 squareroot 71E+2 -> 84 Inexact Rounded +-- sqtx2768 squareroot 71E+3 -> 2.7E+2 Inexact Rounded +-- sqtx2769 squareroot 0.72 -> 0.85 Inexact Rounded +-- sqtx2770 squareroot 0.072 -> 0.27 Inexact Rounded +-- sqtx2771 squareroot 72.0E-1 -> 2.7 Inexact Rounded +-- sqtx2772 squareroot 72.00E-2 -> 0.85 Inexact Rounded +-- sqtx2773 squareroot 72E-3 -> 0.27 Inexact Rounded +-- sqtx2774 squareroot 72E+1 -> 27 Inexact Rounded +-- sqtx2775 squareroot 72E+2 -> 85 Inexact Rounded +-- sqtx2776 squareroot 72E+3 -> 2.7E+2 Inexact Rounded +-- sqtx2777 squareroot 0.73 -> 0.85 Inexact Rounded +-- sqtx2778 squareroot 0.073 -> 0.27 Inexact Rounded +-- sqtx2779 squareroot 73.0E-1 -> 2.7 Inexact Rounded +-- sqtx2780 squareroot 73.00E-2 -> 0.85 Inexact Rounded +-- sqtx2781 squareroot 73E-3 -> 0.27 Inexact Rounded +-- sqtx2782 squareroot 73E+1 -> 27 Inexact Rounded +-- sqtx2783 squareroot 73E+2 -> 85 Inexact Rounded +-- sqtx2784 squareroot 73E+3 -> 2.7E+2 Inexact Rounded +-- sqtx2785 squareroot 0.74 -> 0.86 Inexact Rounded +-- sqtx2786 squareroot 0.074 -> 0.27 Inexact Rounded +-- sqtx2787 squareroot 74.0E-1 -> 2.7 Inexact Rounded +-- sqtx2788 squareroot 74.00E-2 -> 0.86 Inexact Rounded +-- sqtx2789 squareroot 74E-3 -> 0.27 Inexact Rounded +-- sqtx2790 squareroot 74E+1 -> 27 Inexact Rounded +-- sqtx2791 squareroot 74E+2 -> 86 Inexact Rounded +-- sqtx2792 squareroot 74E+3 -> 2.7E+2 Inexact Rounded +-- sqtx2793 squareroot 0.75 -> 0.87 Inexact Rounded +-- sqtx2794 squareroot 0.075 -> 0.27 Inexact Rounded +-- sqtx2795 squareroot 75.0E-1 -> 2.7 Inexact Rounded +-- sqtx2796 squareroot 75.00E-2 -> 0.87 Inexact Rounded +-- sqtx2797 squareroot 75E-3 -> 0.27 Inexact Rounded +-- sqtx2798 squareroot 75E+1 -> 27 Inexact Rounded +-- sqtx2799 squareroot 75E+2 -> 87 Inexact Rounded +-- sqtx2800 squareroot 75E+3 -> 2.7E+2 Inexact Rounded +-- sqtx2801 squareroot 0.76 -> 0.87 Inexact Rounded +-- sqtx2802 squareroot 0.076 -> 0.28 Inexact Rounded +-- sqtx2803 squareroot 76.0E-1 -> 2.8 Inexact Rounded +-- sqtx2804 squareroot 76.00E-2 -> 0.87 Inexact Rounded +-- sqtx2805 squareroot 76E-3 -> 0.28 Inexact Rounded +-- sqtx2806 squareroot 76E+1 -> 28 Inexact Rounded +-- sqtx2807 squareroot 76E+2 -> 87 Inexact Rounded +-- sqtx2808 squareroot 76E+3 -> 2.8E+2 Inexact Rounded +-- sqtx2809 squareroot 0.77 -> 0.88 Inexact Rounded +-- sqtx2810 squareroot 0.077 -> 0.28 Inexact Rounded +-- sqtx2811 squareroot 77.0E-1 -> 2.8 Inexact Rounded +-- sqtx2812 squareroot 77.00E-2 -> 0.88 Inexact Rounded +-- sqtx2813 squareroot 77E-3 -> 0.28 Inexact Rounded +-- sqtx2814 squareroot 77E+1 -> 28 Inexact Rounded +-- sqtx2815 squareroot 77E+2 -> 88 Inexact Rounded +-- sqtx2816 squareroot 77E+3 -> 2.8E+2 Inexact Rounded +-- sqtx2817 squareroot 0.78 -> 0.88 Inexact Rounded +-- sqtx2818 squareroot 0.078 -> 0.28 Inexact Rounded +-- sqtx2819 squareroot 78.0E-1 -> 2.8 Inexact Rounded +-- sqtx2820 squareroot 78.00E-2 -> 0.88 Inexact Rounded +-- sqtx2821 squareroot 78E-3 -> 0.28 Inexact Rounded +-- sqtx2822 squareroot 78E+1 -> 28 Inexact Rounded +-- sqtx2823 squareroot 78E+2 -> 88 Inexact Rounded +-- sqtx2824 squareroot 78E+3 -> 2.8E+2 Inexact Rounded +-- sqtx2825 squareroot 0.79 -> 0.89 Inexact Rounded +-- sqtx2826 squareroot 0.079 -> 0.28 Inexact Rounded +-- sqtx2827 squareroot 79.0E-1 -> 2.8 Inexact Rounded +-- sqtx2828 squareroot 79.00E-2 -> 0.89 Inexact Rounded +-- sqtx2829 squareroot 79E-3 -> 0.28 Inexact Rounded +-- sqtx2830 squareroot 79E+1 -> 28 Inexact Rounded +-- sqtx2831 squareroot 79E+2 -> 89 Inexact Rounded +-- sqtx2832 squareroot 79E+3 -> 2.8E+2 Inexact Rounded +-- sqtx2833 squareroot 0.80 -> 0.89 Inexact Rounded +-- sqtx2834 squareroot 0.080 -> 0.28 Inexact Rounded +-- sqtx2835 squareroot 80.0E-1 -> 2.8 Inexact Rounded +-- sqtx2836 squareroot 80.00E-2 -> 0.89 Inexact Rounded +-- sqtx2837 squareroot 80E-3 -> 0.28 Inexact Rounded +-- sqtx2838 squareroot 80E+1 -> 28 Inexact Rounded +-- sqtx2839 squareroot 80E+2 -> 89 Inexact Rounded +-- sqtx2840 squareroot 80E+3 -> 2.8E+2 Inexact Rounded sqtx2841 squareroot 0.81 -> 0.9 -sqtx2842 squareroot 0.081 -> 0.28 Inexact Rounded -sqtx2843 squareroot 81.0E-1 -> 2.8 Inexact Rounded +-- sqtx2842 squareroot 0.081 -> 0.28 Inexact Rounded +-- sqtx2843 squareroot 81.0E-1 -> 2.8 Inexact Rounded sqtx2844 squareroot 81.00E-2 -> 0.90 -sqtx2845 squareroot 81E-3 -> 0.28 Inexact Rounded -sqtx2846 squareroot 81E+1 -> 28 Inexact Rounded +-- sqtx2845 squareroot 81E-3 -> 0.28 Inexact Rounded +-- sqtx2846 squareroot 81E+1 -> 28 Inexact Rounded sqtx2847 squareroot 81E+2 -> 9E+1 -sqtx2848 squareroot 81E+3 -> 2.8E+2 Inexact Rounded -sqtx2849 squareroot 0.82 -> 0.91 Inexact Rounded -sqtx2850 squareroot 0.082 -> 0.29 Inexact Rounded -sqtx2851 squareroot 82.0E-1 -> 2.9 Inexact Rounded -sqtx2852 squareroot 82.00E-2 -> 0.91 Inexact Rounded -sqtx2853 squareroot 82E-3 -> 0.29 Inexact Rounded -sqtx2854 squareroot 82E+1 -> 29 Inexact Rounded -sqtx2855 squareroot 82E+2 -> 91 Inexact Rounded -sqtx2856 squareroot 82E+3 -> 2.9E+2 Inexact Rounded -sqtx2857 squareroot 0.83 -> 0.91 Inexact Rounded -sqtx2858 squareroot 0.083 -> 0.29 Inexact Rounded -sqtx2859 squareroot 83.0E-1 -> 2.9 Inexact Rounded -sqtx2860 squareroot 83.00E-2 -> 0.91 Inexact Rounded -sqtx2861 squareroot 83E-3 -> 0.29 Inexact Rounded -sqtx2862 squareroot 83E+1 -> 29 Inexact Rounded -sqtx2863 squareroot 83E+2 -> 91 Inexact Rounded -sqtx2864 squareroot 83E+3 -> 2.9E+2 Inexact Rounded -sqtx2865 squareroot 0.84 -> 0.92 Inexact Rounded -sqtx2866 squareroot 0.084 -> 0.29 Inexact Rounded -sqtx2867 squareroot 84.0E-1 -> 2.9 Inexact Rounded -sqtx2868 squareroot 84.00E-2 -> 0.92 Inexact Rounded -sqtx2869 squareroot 84E-3 -> 0.29 Inexact Rounded -sqtx2870 squareroot 84E+1 -> 29 Inexact Rounded -sqtx2871 squareroot 84E+2 -> 92 Inexact Rounded -sqtx2872 squareroot 84E+3 -> 2.9E+2 Inexact Rounded -sqtx2873 squareroot 0.85 -> 0.92 Inexact Rounded -sqtx2874 squareroot 0.085 -> 0.29 Inexact Rounded -sqtx2875 squareroot 85.0E-1 -> 2.9 Inexact Rounded -sqtx2876 squareroot 85.00E-2 -> 0.92 Inexact Rounded -sqtx2877 squareroot 85E-3 -> 0.29 Inexact Rounded -sqtx2878 squareroot 85E+1 -> 29 Inexact Rounded -sqtx2879 squareroot 85E+2 -> 92 Inexact Rounded -sqtx2880 squareroot 85E+3 -> 2.9E+2 Inexact Rounded -sqtx2881 squareroot 0.86 -> 0.93 Inexact Rounded -sqtx2882 squareroot 0.086 -> 0.29 Inexact Rounded -sqtx2883 squareroot 86.0E-1 -> 2.9 Inexact Rounded -sqtx2884 squareroot 86.00E-2 -> 0.93 Inexact Rounded -sqtx2885 squareroot 86E-3 -> 0.29 Inexact Rounded -sqtx2886 squareroot 86E+1 -> 29 Inexact Rounded -sqtx2887 squareroot 86E+2 -> 93 Inexact Rounded -sqtx2888 squareroot 86E+3 -> 2.9E+2 Inexact Rounded -sqtx2889 squareroot 0.87 -> 0.93 Inexact Rounded -sqtx2890 squareroot 0.087 -> 0.29 Inexact Rounded -sqtx2891 squareroot 87.0E-1 -> 2.9 Inexact Rounded -sqtx2892 squareroot 87.00E-2 -> 0.93 Inexact Rounded -sqtx2893 squareroot 87E-3 -> 0.29 Inexact Rounded -sqtx2894 squareroot 87E+1 -> 29 Inexact Rounded -sqtx2895 squareroot 87E+2 -> 93 Inexact Rounded -sqtx2896 squareroot 87E+3 -> 2.9E+2 Inexact Rounded -sqtx2897 squareroot 0.88 -> 0.94 Inexact Rounded -sqtx2898 squareroot 0.088 -> 0.30 Inexact Rounded -sqtx2899 squareroot 88.0E-1 -> 3.0 Inexact Rounded -sqtx2900 squareroot 88.00E-2 -> 0.94 Inexact Rounded -sqtx2901 squareroot 88E-3 -> 0.30 Inexact Rounded -sqtx2902 squareroot 88E+1 -> 30 Inexact Rounded -sqtx2903 squareroot 88E+2 -> 94 Inexact Rounded -sqtx2904 squareroot 88E+3 -> 3.0E+2 Inexact Rounded -sqtx2905 squareroot 0.89 -> 0.94 Inexact Rounded -sqtx2906 squareroot 0.089 -> 0.30 Inexact Rounded -sqtx2907 squareroot 89.0E-1 -> 3.0 Inexact Rounded -sqtx2908 squareroot 89.00E-2 -> 0.94 Inexact Rounded -sqtx2909 squareroot 89E-3 -> 0.30 Inexact Rounded -sqtx2910 squareroot 89E+1 -> 30 Inexact Rounded -sqtx2911 squareroot 89E+2 -> 94 Inexact Rounded -sqtx2912 squareroot 89E+3 -> 3.0E+2 Inexact Rounded -sqtx2913 squareroot 0.90 -> 0.95 Inexact Rounded +-- sqtx2848 squareroot 81E+3 -> 2.8E+2 Inexact Rounded +-- sqtx2849 squareroot 0.82 -> 0.91 Inexact Rounded +-- sqtx2850 squareroot 0.082 -> 0.29 Inexact Rounded +-- sqtx2851 squareroot 82.0E-1 -> 2.9 Inexact Rounded +-- sqtx2852 squareroot 82.00E-2 -> 0.91 Inexact Rounded +-- sqtx2853 squareroot 82E-3 -> 0.29 Inexact Rounded +-- sqtx2854 squareroot 82E+1 -> 29 Inexact Rounded +-- sqtx2855 squareroot 82E+2 -> 91 Inexact Rounded +-- sqtx2856 squareroot 82E+3 -> 2.9E+2 Inexact Rounded +-- sqtx2857 squareroot 0.83 -> 0.91 Inexact Rounded +-- sqtx2858 squareroot 0.083 -> 0.29 Inexact Rounded +-- sqtx2859 squareroot 83.0E-1 -> 2.9 Inexact Rounded +-- sqtx2860 squareroot 83.00E-2 -> 0.91 Inexact Rounded +-- sqtx2861 squareroot 83E-3 -> 0.29 Inexact Rounded +-- sqtx2862 squareroot 83E+1 -> 29 Inexact Rounded +-- sqtx2863 squareroot 83E+2 -> 91 Inexact Rounded +-- sqtx2864 squareroot 83E+3 -> 2.9E+2 Inexact Rounded +-- sqtx2865 squareroot 0.84 -> 0.92 Inexact Rounded +-- sqtx2866 squareroot 0.084 -> 0.29 Inexact Rounded +-- sqtx2867 squareroot 84.0E-1 -> 2.9 Inexact Rounded +-- sqtx2868 squareroot 84.00E-2 -> 0.92 Inexact Rounded +-- sqtx2869 squareroot 84E-3 -> 0.29 Inexact Rounded +-- sqtx2870 squareroot 84E+1 -> 29 Inexact Rounded +-- sqtx2871 squareroot 84E+2 -> 92 Inexact Rounded +-- sqtx2872 squareroot 84E+3 -> 2.9E+2 Inexact Rounded +-- sqtx2873 squareroot 0.85 -> 0.92 Inexact Rounded +-- sqtx2874 squareroot 0.085 -> 0.29 Inexact Rounded +-- sqtx2875 squareroot 85.0E-1 -> 2.9 Inexact Rounded +-- sqtx2876 squareroot 85.00E-2 -> 0.92 Inexact Rounded +-- sqtx2877 squareroot 85E-3 -> 0.29 Inexact Rounded +-- sqtx2878 squareroot 85E+1 -> 29 Inexact Rounded +-- sqtx2879 squareroot 85E+2 -> 92 Inexact Rounded +-- sqtx2880 squareroot 85E+3 -> 2.9E+2 Inexact Rounded +-- sqtx2881 squareroot 0.86 -> 0.93 Inexact Rounded +-- sqtx2882 squareroot 0.086 -> 0.29 Inexact Rounded +-- sqtx2883 squareroot 86.0E-1 -> 2.9 Inexact Rounded +-- sqtx2884 squareroot 86.00E-2 -> 0.93 Inexact Rounded +-- sqtx2885 squareroot 86E-3 -> 0.29 Inexact Rounded +-- sqtx2886 squareroot 86E+1 -> 29 Inexact Rounded +-- sqtx2887 squareroot 86E+2 -> 93 Inexact Rounded +-- sqtx2888 squareroot 86E+3 -> 2.9E+2 Inexact Rounded +-- sqtx2889 squareroot 0.87 -> 0.93 Inexact Rounded +-- sqtx2890 squareroot 0.087 -> 0.29 Inexact Rounded +-- sqtx2891 squareroot 87.0E-1 -> 2.9 Inexact Rounded +-- sqtx2892 squareroot 87.00E-2 -> 0.93 Inexact Rounded +-- sqtx2893 squareroot 87E-3 -> 0.29 Inexact Rounded +-- sqtx2894 squareroot 87E+1 -> 29 Inexact Rounded +-- sqtx2895 squareroot 87E+2 -> 93 Inexact Rounded +-- sqtx2896 squareroot 87E+3 -> 2.9E+2 Inexact Rounded +-- sqtx2897 squareroot 0.88 -> 0.94 Inexact Rounded +-- sqtx2898 squareroot 0.088 -> 0.30 Inexact Rounded +-- sqtx2899 squareroot 88.0E-1 -> 3.0 Inexact Rounded +-- sqtx2900 squareroot 88.00E-2 -> 0.94 Inexact Rounded +-- sqtx2901 squareroot 88E-3 -> 0.30 Inexact Rounded +-- sqtx2902 squareroot 88E+1 -> 30 Inexact Rounded +-- sqtx2903 squareroot 88E+2 -> 94 Inexact Rounded +-- sqtx2904 squareroot 88E+3 -> 3.0E+2 Inexact Rounded +-- sqtx2905 squareroot 0.89 -> 0.94 Inexact Rounded +-- sqtx2906 squareroot 0.089 -> 0.30 Inexact Rounded +-- sqtx2907 squareroot 89.0E-1 -> 3.0 Inexact Rounded +-- sqtx2908 squareroot 89.00E-2 -> 0.94 Inexact Rounded +-- sqtx2909 squareroot 89E-3 -> 0.30 Inexact Rounded +-- sqtx2910 squareroot 89E+1 -> 30 Inexact Rounded +-- sqtx2911 squareroot 89E+2 -> 94 Inexact Rounded +-- sqtx2912 squareroot 89E+3 -> 3.0E+2 Inexact Rounded +-- sqtx2913 squareroot 0.90 -> 0.95 Inexact Rounded sqtx2914 squareroot 0.090 -> 0.30 sqtx2915 squareroot 90.0E-1 -> 3.0 -sqtx2916 squareroot 90.00E-2 -> 0.95 Inexact Rounded +-- sqtx2916 squareroot 90.00E-2 -> 0.95 Inexact Rounded sqtx2917 squareroot 90E-3 -> 0.30 sqtx2918 squareroot 90E+1 -> 30 -sqtx2919 squareroot 90E+2 -> 95 Inexact Rounded +-- sqtx2919 squareroot 90E+2 -> 95 Inexact Rounded sqtx2920 squareroot 90E+3 -> 3.0E+2 -sqtx2921 squareroot 0.91 -> 0.95 Inexact Rounded -sqtx2922 squareroot 0.091 -> 0.30 Inexact Rounded -sqtx2923 squareroot 91.0E-1 -> 3.0 Inexact Rounded -sqtx2924 squareroot 91.00E-2 -> 0.95 Inexact Rounded -sqtx2925 squareroot 91E-3 -> 0.30 Inexact Rounded -sqtx2926 squareroot 91E+1 -> 30 Inexact Rounded -sqtx2927 squareroot 91E+2 -> 95 Inexact Rounded -sqtx2928 squareroot 91E+3 -> 3.0E+2 Inexact Rounded -sqtx2929 squareroot 0.92 -> 0.96 Inexact Rounded -sqtx2930 squareroot 0.092 -> 0.30 Inexact Rounded -sqtx2931 squareroot 92.0E-1 -> 3.0 Inexact Rounded -sqtx2932 squareroot 92.00E-2 -> 0.96 Inexact Rounded -sqtx2933 squareroot 92E-3 -> 0.30 Inexact Rounded -sqtx2934 squareroot 92E+1 -> 30 Inexact Rounded -sqtx2935 squareroot 92E+2 -> 96 Inexact Rounded -sqtx2936 squareroot 92E+3 -> 3.0E+2 Inexact Rounded -sqtx2937 squareroot 0.93 -> 0.96 Inexact Rounded -sqtx2938 squareroot 0.093 -> 0.30 Inexact Rounded -sqtx2939 squareroot 93.0E-1 -> 3.0 Inexact Rounded -sqtx2940 squareroot 93.00E-2 -> 0.96 Inexact Rounded -sqtx2941 squareroot 93E-3 -> 0.30 Inexact Rounded -sqtx2942 squareroot 93E+1 -> 30 Inexact Rounded -sqtx2943 squareroot 93E+2 -> 96 Inexact Rounded -sqtx2944 squareroot 93E+3 -> 3.0E+2 Inexact Rounded -sqtx2945 squareroot 0.94 -> 0.97 Inexact Rounded -sqtx2946 squareroot 0.094 -> 0.31 Inexact Rounded -sqtx2947 squareroot 94.0E-1 -> 3.1 Inexact Rounded -sqtx2948 squareroot 94.00E-2 -> 0.97 Inexact Rounded -sqtx2949 squareroot 94E-3 -> 0.31 Inexact Rounded -sqtx2950 squareroot 94E+1 -> 31 Inexact Rounded -sqtx2951 squareroot 94E+2 -> 97 Inexact Rounded -sqtx2952 squareroot 94E+3 -> 3.1E+2 Inexact Rounded -sqtx2953 squareroot 0.95 -> 0.97 Inexact Rounded -sqtx2954 squareroot 0.095 -> 0.31 Inexact Rounded -sqtx2955 squareroot 95.0E-1 -> 3.1 Inexact Rounded -sqtx2956 squareroot 95.00E-2 -> 0.97 Inexact Rounded -sqtx2957 squareroot 95E-3 -> 0.31 Inexact Rounded -sqtx2958 squareroot 95E+1 -> 31 Inexact Rounded -sqtx2959 squareroot 95E+2 -> 97 Inexact Rounded -sqtx2960 squareroot 95E+3 -> 3.1E+2 Inexact Rounded -sqtx2961 squareroot 0.96 -> 0.98 Inexact Rounded -sqtx2962 squareroot 0.096 -> 0.31 Inexact Rounded -sqtx2963 squareroot 96.0E-1 -> 3.1 Inexact Rounded -sqtx2964 squareroot 96.00E-2 -> 0.98 Inexact Rounded -sqtx2965 squareroot 96E-3 -> 0.31 Inexact Rounded -sqtx2966 squareroot 96E+1 -> 31 Inexact Rounded -sqtx2967 squareroot 96E+2 -> 98 Inexact Rounded -sqtx2968 squareroot 96E+3 -> 3.1E+2 Inexact Rounded -sqtx2969 squareroot 0.97 -> 0.98 Inexact Rounded -sqtx2970 squareroot 0.097 -> 0.31 Inexact Rounded -sqtx2971 squareroot 97.0E-1 -> 3.1 Inexact Rounded -sqtx2972 squareroot 97.00E-2 -> 0.98 Inexact Rounded -sqtx2973 squareroot 97E-3 -> 0.31 Inexact Rounded -sqtx2974 squareroot 97E+1 -> 31 Inexact Rounded -sqtx2975 squareroot 97E+2 -> 98 Inexact Rounded -sqtx2976 squareroot 97E+3 -> 3.1E+2 Inexact Rounded -sqtx2977 squareroot 0.98 -> 0.99 Inexact Rounded -sqtx2978 squareroot 0.098 -> 0.31 Inexact Rounded -sqtx2979 squareroot 98.0E-1 -> 3.1 Inexact Rounded -sqtx2980 squareroot 98.00E-2 -> 0.99 Inexact Rounded -sqtx2981 squareroot 98E-3 -> 0.31 Inexact Rounded -sqtx2982 squareroot 98E+1 -> 31 Inexact Rounded -sqtx2983 squareroot 98E+2 -> 99 Inexact Rounded -sqtx2984 squareroot 98E+3 -> 3.1E+2 Inexact Rounded -sqtx2985 squareroot 0.99 -> 0.99 Inexact Rounded -sqtx2986 squareroot 0.099 -> 0.31 Inexact Rounded -sqtx2987 squareroot 99.0E-1 -> 3.1 Inexact Rounded -sqtx2988 squareroot 99.00E-2 -> 0.99 Inexact Rounded -sqtx2989 squareroot 99E-3 -> 0.31 Inexact Rounded -sqtx2990 squareroot 99E+1 -> 31 Inexact Rounded -sqtx2991 squareroot 99E+2 -> 99 Inexact Rounded -sqtx2992 squareroot 99E+3 -> 3.1E+2 Inexact Rounded +-- sqtx2921 squareroot 0.91 -> 0.95 Inexact Rounded +-- sqtx2922 squareroot 0.091 -> 0.30 Inexact Rounded +-- sqtx2923 squareroot 91.0E-1 -> 3.0 Inexact Rounded +-- sqtx2924 squareroot 91.00E-2 -> 0.95 Inexact Rounded +-- sqtx2925 squareroot 91E-3 -> 0.30 Inexact Rounded +-- sqtx2926 squareroot 91E+1 -> 30 Inexact Rounded +-- sqtx2927 squareroot 91E+2 -> 95 Inexact Rounded +-- sqtx2928 squareroot 91E+3 -> 3.0E+2 Inexact Rounded +-- sqtx2929 squareroot 0.92 -> 0.96 Inexact Rounded +-- sqtx2930 squareroot 0.092 -> 0.30 Inexact Rounded +-- sqtx2931 squareroot 92.0E-1 -> 3.0 Inexact Rounded +-- sqtx2932 squareroot 92.00E-2 -> 0.96 Inexact Rounded +-- sqtx2933 squareroot 92E-3 -> 0.30 Inexact Rounded +-- sqtx2934 squareroot 92E+1 -> 30 Inexact Rounded +-- sqtx2935 squareroot 92E+2 -> 96 Inexact Rounded +-- sqtx2936 squareroot 92E+3 -> 3.0E+2 Inexact Rounded +-- sqtx2937 squareroot 0.93 -> 0.96 Inexact Rounded +-- sqtx2938 squareroot 0.093 -> 0.30 Inexact Rounded +-- sqtx2939 squareroot 93.0E-1 -> 3.0 Inexact Rounded +-- sqtx2940 squareroot 93.00E-2 -> 0.96 Inexact Rounded +-- sqtx2941 squareroot 93E-3 -> 0.30 Inexact Rounded +-- sqtx2942 squareroot 93E+1 -> 30 Inexact Rounded +-- sqtx2943 squareroot 93E+2 -> 96 Inexact Rounded +-- sqtx2944 squareroot 93E+3 -> 3.0E+2 Inexact Rounded +-- sqtx2945 squareroot 0.94 -> 0.97 Inexact Rounded +-- sqtx2946 squareroot 0.094 -> 0.31 Inexact Rounded +-- sqtx2947 squareroot 94.0E-1 -> 3.1 Inexact Rounded +-- sqtx2948 squareroot 94.00E-2 -> 0.97 Inexact Rounded +-- sqtx2949 squareroot 94E-3 -> 0.31 Inexact Rounded +-- sqtx2950 squareroot 94E+1 -> 31 Inexact Rounded +-- sqtx2951 squareroot 94E+2 -> 97 Inexact Rounded +-- sqtx2952 squareroot 94E+3 -> 3.1E+2 Inexact Rounded +-- sqtx2953 squareroot 0.95 -> 0.97 Inexact Rounded +-- sqtx2954 squareroot 0.095 -> 0.31 Inexact Rounded +-- sqtx2955 squareroot 95.0E-1 -> 3.1 Inexact Rounded +-- sqtx2956 squareroot 95.00E-2 -> 0.97 Inexact Rounded +-- sqtx2957 squareroot 95E-3 -> 0.31 Inexact Rounded +-- sqtx2958 squareroot 95E+1 -> 31 Inexact Rounded +-- sqtx2959 squareroot 95E+2 -> 97 Inexact Rounded +-- sqtx2960 squareroot 95E+3 -> 3.1E+2 Inexact Rounded +-- sqtx2961 squareroot 0.96 -> 0.98 Inexact Rounded +-- sqtx2962 squareroot 0.096 -> 0.31 Inexact Rounded +-- sqtx2963 squareroot 96.0E-1 -> 3.1 Inexact Rounded +-- sqtx2964 squareroot 96.00E-2 -> 0.98 Inexact Rounded +-- sqtx2965 squareroot 96E-3 -> 0.31 Inexact Rounded +-- sqtx2966 squareroot 96E+1 -> 31 Inexact Rounded +-- sqtx2967 squareroot 96E+2 -> 98 Inexact Rounded +-- sqtx2968 squareroot 96E+3 -> 3.1E+2 Inexact Rounded +-- sqtx2969 squareroot 0.97 -> 0.98 Inexact Rounded +-- sqtx2970 squareroot 0.097 -> 0.31 Inexact Rounded +-- sqtx2971 squareroot 97.0E-1 -> 3.1 Inexact Rounded +-- sqtx2972 squareroot 97.00E-2 -> 0.98 Inexact Rounded +-- sqtx2973 squareroot 97E-3 -> 0.31 Inexact Rounded +-- sqtx2974 squareroot 97E+1 -> 31 Inexact Rounded +-- sqtx2975 squareroot 97E+2 -> 98 Inexact Rounded +-- sqtx2976 squareroot 97E+3 -> 3.1E+2 Inexact Rounded +-- sqtx2977 squareroot 0.98 -> 0.99 Inexact Rounded +-- sqtx2978 squareroot 0.098 -> 0.31 Inexact Rounded +-- sqtx2979 squareroot 98.0E-1 -> 3.1 Inexact Rounded +-- sqtx2980 squareroot 98.00E-2 -> 0.99 Inexact Rounded +-- sqtx2981 squareroot 98E-3 -> 0.31 Inexact Rounded +-- sqtx2982 squareroot 98E+1 -> 31 Inexact Rounded +-- sqtx2983 squareroot 98E+2 -> 99 Inexact Rounded +-- sqtx2984 squareroot 98E+3 -> 3.1E+2 Inexact Rounded +-- sqtx2985 squareroot 0.99 -> 0.99 Inexact Rounded +-- sqtx2986 squareroot 0.099 -> 0.31 Inexact Rounded +-- sqtx2987 squareroot 99.0E-1 -> 3.1 Inexact Rounded +-- sqtx2988 squareroot 99.00E-2 -> 0.99 Inexact Rounded +-- sqtx2989 squareroot 99E-3 -> 0.31 Inexact Rounded +-- sqtx2990 squareroot 99E+1 -> 31 Inexact Rounded +-- sqtx2991 squareroot 99E+2 -> 99 Inexact Rounded +-- sqtx2992 squareroot 99E+3 -> 3.1E+2 Inexact Rounded -- Precision 3 squareroot tests [exhaustive, f and f/10] rounding: half_even maxExponent: 999 minexponent: -999 precision: 3 -sqtx3001 squareroot 0.1 -> 0.316 Inexact Rounded +-- sqtx3001 squareroot 0.1 -> 0.316 Inexact Rounded sqtx3002 squareroot 0.01 -> 0.1 -sqtx3003 squareroot 0.2 -> 0.447 Inexact Rounded -sqtx3004 squareroot 0.02 -> 0.141 Inexact Rounded -sqtx3005 squareroot 0.3 -> 0.548 Inexact Rounded -sqtx3006 squareroot 0.03 -> 0.173 Inexact Rounded -sqtx3007 squareroot 0.4 -> 0.632 Inexact Rounded +-- sqtx3003 squareroot 0.2 -> 0.447 Inexact Rounded +-- sqtx3004 squareroot 0.02 -> 0.141 Inexact Rounded +-- sqtx3005 squareroot 0.3 -> 0.548 Inexact Rounded +-- sqtx3006 squareroot 0.03 -> 0.173 Inexact Rounded +-- sqtx3007 squareroot 0.4 -> 0.632 Inexact Rounded sqtx3008 squareroot 0.04 -> 0.2 -sqtx3009 squareroot 0.5 -> 0.707 Inexact Rounded -sqtx3010 squareroot 0.05 -> 0.224 Inexact Rounded -sqtx3011 squareroot 0.6 -> 0.775 Inexact Rounded -sqtx3012 squareroot 0.06 -> 0.245 Inexact Rounded -sqtx3013 squareroot 0.7 -> 0.837 Inexact Rounded -sqtx3014 squareroot 0.07 -> 0.265 Inexact Rounded -sqtx3015 squareroot 0.8 -> 0.894 Inexact Rounded -sqtx3016 squareroot 0.08 -> 0.283 Inexact Rounded -sqtx3017 squareroot 0.9 -> 0.949 Inexact Rounded +-- sqtx3009 squareroot 0.5 -> 0.707 Inexact Rounded +-- sqtx3010 squareroot 0.05 -> 0.224 Inexact Rounded +-- sqtx3011 squareroot 0.6 -> 0.775 Inexact Rounded +-- sqtx3012 squareroot 0.06 -> 0.245 Inexact Rounded +-- sqtx3013 squareroot 0.7 -> 0.837 Inexact Rounded +-- sqtx3014 squareroot 0.07 -> 0.265 Inexact Rounded +-- sqtx3015 squareroot 0.8 -> 0.894 Inexact Rounded +-- sqtx3016 squareroot 0.08 -> 0.283 Inexact Rounded +-- sqtx3017 squareroot 0.9 -> 0.949 Inexact Rounded sqtx3018 squareroot 0.09 -> 0.3 -sqtx3019 squareroot 0.11 -> 0.332 Inexact Rounded -sqtx3020 squareroot 0.011 -> 0.105 Inexact Rounded -sqtx3021 squareroot 0.12 -> 0.346 Inexact Rounded -sqtx3022 squareroot 0.012 -> 0.110 Inexact Rounded -sqtx3023 squareroot 0.13 -> 0.361 Inexact Rounded -sqtx3024 squareroot 0.013 -> 0.114 Inexact Rounded -sqtx3025 squareroot 0.14 -> 0.374 Inexact Rounded -sqtx3026 squareroot 0.014 -> 0.118 Inexact Rounded -sqtx3027 squareroot 0.15 -> 0.387 Inexact Rounded -sqtx3028 squareroot 0.015 -> 0.122 Inexact Rounded +-- sqtx3019 squareroot 0.11 -> 0.332 Inexact Rounded +-- sqtx3020 squareroot 0.011 -> 0.105 Inexact Rounded +-- sqtx3021 squareroot 0.12 -> 0.346 Inexact Rounded +-- sqtx3022 squareroot 0.012 -> 0.110 Inexact Rounded +-- sqtx3023 squareroot 0.13 -> 0.361 Inexact Rounded +-- sqtx3024 squareroot 0.013 -> 0.114 Inexact Rounded +-- sqtx3025 squareroot 0.14 -> 0.374 Inexact Rounded +-- sqtx3026 squareroot 0.014 -> 0.118 Inexact Rounded +-- sqtx3027 squareroot 0.15 -> 0.387 Inexact Rounded +-- sqtx3028 squareroot 0.015 -> 0.122 Inexact Rounded sqtx3029 squareroot 0.16 -> 0.4 -sqtx3030 squareroot 0.016 -> 0.126 Inexact Rounded -sqtx3031 squareroot 0.17 -> 0.412 Inexact Rounded -sqtx3032 squareroot 0.017 -> 0.130 Inexact Rounded -sqtx3033 squareroot 0.18 -> 0.424 Inexact Rounded -sqtx3034 squareroot 0.018 -> 0.134 Inexact Rounded -sqtx3035 squareroot 0.19 -> 0.436 Inexact Rounded -sqtx3036 squareroot 0.019 -> 0.138 Inexact Rounded -sqtx3037 squareroot 0.21 -> 0.458 Inexact Rounded -sqtx3038 squareroot 0.021 -> 0.145 Inexact Rounded -sqtx3039 squareroot 0.22 -> 0.469 Inexact Rounded -sqtx3040 squareroot 0.022 -> 0.148 Inexact Rounded -sqtx3041 squareroot 0.23 -> 0.480 Inexact Rounded -sqtx3042 squareroot 0.023 -> 0.152 Inexact Rounded -sqtx3043 squareroot 0.24 -> 0.490 Inexact Rounded -sqtx3044 squareroot 0.024 -> 0.155 Inexact Rounded +-- sqtx3030 squareroot 0.016 -> 0.126 Inexact Rounded +-- sqtx3031 squareroot 0.17 -> 0.412 Inexact Rounded +-- sqtx3032 squareroot 0.017 -> 0.130 Inexact Rounded +-- sqtx3033 squareroot 0.18 -> 0.424 Inexact Rounded +-- sqtx3034 squareroot 0.018 -> 0.134 Inexact Rounded +-- sqtx3035 squareroot 0.19 -> 0.436 Inexact Rounded +-- sqtx3036 squareroot 0.019 -> 0.138 Inexact Rounded +-- sqtx3037 squareroot 0.21 -> 0.458 Inexact Rounded +-- sqtx3038 squareroot 0.021 -> 0.145 Inexact Rounded +-- sqtx3039 squareroot 0.22 -> 0.469 Inexact Rounded +-- sqtx3040 squareroot 0.022 -> 0.148 Inexact Rounded +-- sqtx3041 squareroot 0.23 -> 0.480 Inexact Rounded +-- sqtx3042 squareroot 0.023 -> 0.152 Inexact Rounded +-- sqtx3043 squareroot 0.24 -> 0.490 Inexact Rounded +-- sqtx3044 squareroot 0.024 -> 0.155 Inexact Rounded sqtx3045 squareroot 0.25 -> 0.5 -sqtx3046 squareroot 0.025 -> 0.158 Inexact Rounded -sqtx3047 squareroot 0.26 -> 0.510 Inexact Rounded -sqtx3048 squareroot 0.026 -> 0.161 Inexact Rounded -sqtx3049 squareroot 0.27 -> 0.520 Inexact Rounded -sqtx3050 squareroot 0.027 -> 0.164 Inexact Rounded -sqtx3051 squareroot 0.28 -> 0.529 Inexact Rounded -sqtx3052 squareroot 0.028 -> 0.167 Inexact Rounded -sqtx3053 squareroot 0.29 -> 0.539 Inexact Rounded -sqtx3054 squareroot 0.029 -> 0.170 Inexact Rounded -sqtx3055 squareroot 0.31 -> 0.557 Inexact Rounded -sqtx3056 squareroot 0.031 -> 0.176 Inexact Rounded -sqtx3057 squareroot 0.32 -> 0.566 Inexact Rounded -sqtx3058 squareroot 0.032 -> 0.179 Inexact Rounded -sqtx3059 squareroot 0.33 -> 0.574 Inexact Rounded -sqtx3060 squareroot 0.033 -> 0.182 Inexact Rounded -sqtx3061 squareroot 0.34 -> 0.583 Inexact Rounded -sqtx3062 squareroot 0.034 -> 0.184 Inexact Rounded -sqtx3063 squareroot 0.35 -> 0.592 Inexact Rounded -sqtx3064 squareroot 0.035 -> 0.187 Inexact Rounded +-- sqtx3046 squareroot 0.025 -> 0.158 Inexact Rounded +-- sqtx3047 squareroot 0.26 -> 0.510 Inexact Rounded +-- sqtx3048 squareroot 0.026 -> 0.161 Inexact Rounded +-- sqtx3049 squareroot 0.27 -> 0.520 Inexact Rounded +-- sqtx3050 squareroot 0.027 -> 0.164 Inexact Rounded +-- sqtx3051 squareroot 0.28 -> 0.529 Inexact Rounded +-- sqtx3052 squareroot 0.028 -> 0.167 Inexact Rounded +-- sqtx3053 squareroot 0.29 -> 0.539 Inexact Rounded +-- sqtx3054 squareroot 0.029 -> 0.170 Inexact Rounded +-- sqtx3055 squareroot 0.31 -> 0.557 Inexact Rounded +-- sqtx3056 squareroot 0.031 -> 0.176 Inexact Rounded +-- sqtx3057 squareroot 0.32 -> 0.566 Inexact Rounded +-- sqtx3058 squareroot 0.032 -> 0.179 Inexact Rounded +-- sqtx3059 squareroot 0.33 -> 0.574 Inexact Rounded +-- sqtx3060 squareroot 0.033 -> 0.182 Inexact Rounded +-- sqtx3061 squareroot 0.34 -> 0.583 Inexact Rounded +-- sqtx3062 squareroot 0.034 -> 0.184 Inexact Rounded +-- sqtx3063 squareroot 0.35 -> 0.592 Inexact Rounded +-- sqtx3064 squareroot 0.035 -> 0.187 Inexact Rounded sqtx3065 squareroot 0.36 -> 0.6 -sqtx3066 squareroot 0.036 -> 0.190 Inexact Rounded -sqtx3067 squareroot 0.37 -> 0.608 Inexact Rounded -sqtx3068 squareroot 0.037 -> 0.192 Inexact Rounded -sqtx3069 squareroot 0.38 -> 0.616 Inexact Rounded -sqtx3070 squareroot 0.038 -> 0.195 Inexact Rounded -sqtx3071 squareroot 0.39 -> 0.624 Inexact Rounded -sqtx3072 squareroot 0.039 -> 0.197 Inexact Rounded -sqtx3073 squareroot 0.41 -> 0.640 Inexact Rounded -sqtx3074 squareroot 0.041 -> 0.202 Inexact Rounded -sqtx3075 squareroot 0.42 -> 0.648 Inexact Rounded -sqtx3076 squareroot 0.042 -> 0.205 Inexact Rounded -sqtx3077 squareroot 0.43 -> 0.656 Inexact Rounded -sqtx3078 squareroot 0.043 -> 0.207 Inexact Rounded -sqtx3079 squareroot 0.44 -> 0.663 Inexact Rounded -sqtx3080 squareroot 0.044 -> 0.210 Inexact Rounded -sqtx3081 squareroot 0.45 -> 0.671 Inexact Rounded -sqtx3082 squareroot 0.045 -> 0.212 Inexact Rounded -sqtx3083 squareroot 0.46 -> 0.678 Inexact Rounded -sqtx3084 squareroot 0.046 -> 0.214 Inexact Rounded -sqtx3085 squareroot 0.47 -> 0.686 Inexact Rounded -sqtx3086 squareroot 0.047 -> 0.217 Inexact Rounded -sqtx3087 squareroot 0.48 -> 0.693 Inexact Rounded -sqtx3088 squareroot 0.048 -> 0.219 Inexact Rounded +-- sqtx3066 squareroot 0.036 -> 0.190 Inexact Rounded +-- sqtx3067 squareroot 0.37 -> 0.608 Inexact Rounded +-- sqtx3068 squareroot 0.037 -> 0.192 Inexact Rounded +-- sqtx3069 squareroot 0.38 -> 0.616 Inexact Rounded +-- sqtx3070 squareroot 0.038 -> 0.195 Inexact Rounded +-- sqtx3071 squareroot 0.39 -> 0.624 Inexact Rounded +-- sqtx3072 squareroot 0.039 -> 0.197 Inexact Rounded +-- sqtx3073 squareroot 0.41 -> 0.640 Inexact Rounded +-- sqtx3074 squareroot 0.041 -> 0.202 Inexact Rounded +-- sqtx3075 squareroot 0.42 -> 0.648 Inexact Rounded +-- sqtx3076 squareroot 0.042 -> 0.205 Inexact Rounded +-- sqtx3077 squareroot 0.43 -> 0.656 Inexact Rounded +-- sqtx3078 squareroot 0.043 -> 0.207 Inexact Rounded +-- sqtx3079 squareroot 0.44 -> 0.663 Inexact Rounded +-- sqtx3080 squareroot 0.044 -> 0.210 Inexact Rounded +-- sqtx3081 squareroot 0.45 -> 0.671 Inexact Rounded +-- sqtx3082 squareroot 0.045 -> 0.212 Inexact Rounded +-- sqtx3083 squareroot 0.46 -> 0.678 Inexact Rounded +-- sqtx3084 squareroot 0.046 -> 0.214 Inexact Rounded +-- sqtx3085 squareroot 0.47 -> 0.686 Inexact Rounded +-- sqtx3086 squareroot 0.047 -> 0.217 Inexact Rounded +-- sqtx3087 squareroot 0.48 -> 0.693 Inexact Rounded +-- sqtx3088 squareroot 0.048 -> 0.219 Inexact Rounded sqtx3089 squareroot 0.49 -> 0.7 -sqtx3090 squareroot 0.049 -> 0.221 Inexact Rounded -sqtx3091 squareroot 0.51 -> 0.714 Inexact Rounded -sqtx3092 squareroot 0.051 -> 0.226 Inexact Rounded -sqtx3093 squareroot 0.52 -> 0.721 Inexact Rounded -sqtx3094 squareroot 0.052 -> 0.228 Inexact Rounded -sqtx3095 squareroot 0.53 -> 0.728 Inexact Rounded -sqtx3096 squareroot 0.053 -> 0.230 Inexact Rounded -sqtx3097 squareroot 0.54 -> 0.735 Inexact Rounded -sqtx3098 squareroot 0.054 -> 0.232 Inexact Rounded -sqtx3099 squareroot 0.55 -> 0.742 Inexact Rounded -sqtx3100 squareroot 0.055 -> 0.235 Inexact Rounded -sqtx3101 squareroot 0.56 -> 0.748 Inexact Rounded -sqtx3102 squareroot 0.056 -> 0.237 Inexact Rounded -sqtx3103 squareroot 0.57 -> 0.755 Inexact Rounded -sqtx3104 squareroot 0.057 -> 0.239 Inexact Rounded -sqtx3105 squareroot 0.58 -> 0.762 Inexact Rounded -sqtx3106 squareroot 0.058 -> 0.241 Inexact Rounded -sqtx3107 squareroot 0.59 -> 0.768 Inexact Rounded -sqtx3108 squareroot 0.059 -> 0.243 Inexact Rounded -sqtx3109 squareroot 0.61 -> 0.781 Inexact Rounded -sqtx3110 squareroot 0.061 -> 0.247 Inexact Rounded -sqtx3111 squareroot 0.62 -> 0.787 Inexact Rounded -sqtx3112 squareroot 0.062 -> 0.249 Inexact Rounded -sqtx3113 squareroot 0.63 -> 0.794 Inexact Rounded -sqtx3114 squareroot 0.063 -> 0.251 Inexact Rounded +-- sqtx3090 squareroot 0.049 -> 0.221 Inexact Rounded +-- sqtx3091 squareroot 0.51 -> 0.714 Inexact Rounded +-- sqtx3092 squareroot 0.051 -> 0.226 Inexact Rounded +-- sqtx3093 squareroot 0.52 -> 0.721 Inexact Rounded +-- sqtx3094 squareroot 0.052 -> 0.228 Inexact Rounded +-- sqtx3095 squareroot 0.53 -> 0.728 Inexact Rounded +-- sqtx3096 squareroot 0.053 -> 0.230 Inexact Rounded +-- sqtx3097 squareroot 0.54 -> 0.735 Inexact Rounded +-- sqtx3098 squareroot 0.054 -> 0.232 Inexact Rounded +-- sqtx3099 squareroot 0.55 -> 0.742 Inexact Rounded +-- sqtx3100 squareroot 0.055 -> 0.235 Inexact Rounded +-- sqtx3101 squareroot 0.56 -> 0.748 Inexact Rounded +-- sqtx3102 squareroot 0.056 -> 0.237 Inexact Rounded +-- sqtx3103 squareroot 0.57 -> 0.755 Inexact Rounded +-- sqtx3104 squareroot 0.057 -> 0.239 Inexact Rounded +-- sqtx3105 squareroot 0.58 -> 0.762 Inexact Rounded +-- sqtx3106 squareroot 0.058 -> 0.241 Inexact Rounded +-- sqtx3107 squareroot 0.59 -> 0.768 Inexact Rounded +-- sqtx3108 squareroot 0.059 -> 0.243 Inexact Rounded +-- sqtx3109 squareroot 0.61 -> 0.781 Inexact Rounded +-- sqtx3110 squareroot 0.061 -> 0.247 Inexact Rounded +-- sqtx3111 squareroot 0.62 -> 0.787 Inexact Rounded +-- sqtx3112 squareroot 0.062 -> 0.249 Inexact Rounded +-- sqtx3113 squareroot 0.63 -> 0.794 Inexact Rounded +-- sqtx3114 squareroot 0.063 -> 0.251 Inexact Rounded sqtx3115 squareroot 0.64 -> 0.8 -sqtx3116 squareroot 0.064 -> 0.253 Inexact Rounded -sqtx3117 squareroot 0.65 -> 0.806 Inexact Rounded -sqtx3118 squareroot 0.065 -> 0.255 Inexact Rounded -sqtx3119 squareroot 0.66 -> 0.812 Inexact Rounded -sqtx3120 squareroot 0.066 -> 0.257 Inexact Rounded -sqtx3121 squareroot 0.67 -> 0.819 Inexact Rounded -sqtx3122 squareroot 0.067 -> 0.259 Inexact Rounded -sqtx3123 squareroot 0.68 -> 0.825 Inexact Rounded -sqtx3124 squareroot 0.068 -> 0.261 Inexact Rounded -sqtx3125 squareroot 0.69 -> 0.831 Inexact Rounded -sqtx3126 squareroot 0.069 -> 0.263 Inexact Rounded -sqtx3127 squareroot 0.71 -> 0.843 Inexact Rounded -sqtx3128 squareroot 0.071 -> 0.266 Inexact Rounded -sqtx3129 squareroot 0.72 -> 0.849 Inexact Rounded -sqtx3130 squareroot 0.072 -> 0.268 Inexact Rounded -sqtx3131 squareroot 0.73 -> 0.854 Inexact Rounded -sqtx3132 squareroot 0.073 -> 0.270 Inexact Rounded -sqtx3133 squareroot 0.74 -> 0.860 Inexact Rounded -sqtx3134 squareroot 0.074 -> 0.272 Inexact Rounded -sqtx3135 squareroot 0.75 -> 0.866 Inexact Rounded -sqtx3136 squareroot 0.075 -> 0.274 Inexact Rounded -sqtx3137 squareroot 0.76 -> 0.872 Inexact Rounded -sqtx3138 squareroot 0.076 -> 0.276 Inexact Rounded -sqtx3139 squareroot 0.77 -> 0.877 Inexact Rounded -sqtx3140 squareroot 0.077 -> 0.277 Inexact Rounded -sqtx3141 squareroot 0.78 -> 0.883 Inexact Rounded -sqtx3142 squareroot 0.078 -> 0.279 Inexact Rounded -sqtx3143 squareroot 0.79 -> 0.889 Inexact Rounded -sqtx3144 squareroot 0.079 -> 0.281 Inexact Rounded +-- sqtx3116 squareroot 0.064 -> 0.253 Inexact Rounded +-- sqtx3117 squareroot 0.65 -> 0.806 Inexact Rounded +-- sqtx3118 squareroot 0.065 -> 0.255 Inexact Rounded +-- sqtx3119 squareroot 0.66 -> 0.812 Inexact Rounded +-- sqtx3120 squareroot 0.066 -> 0.257 Inexact Rounded +-- sqtx3121 squareroot 0.67 -> 0.819 Inexact Rounded +-- sqtx3122 squareroot 0.067 -> 0.259 Inexact Rounded +-- sqtx3123 squareroot 0.68 -> 0.825 Inexact Rounded +-- sqtx3124 squareroot 0.068 -> 0.261 Inexact Rounded +-- sqtx3125 squareroot 0.69 -> 0.831 Inexact Rounded +-- sqtx3126 squareroot 0.069 -> 0.263 Inexact Rounded +-- sqtx3127 squareroot 0.71 -> 0.843 Inexact Rounded +-- sqtx3128 squareroot 0.071 -> 0.266 Inexact Rounded +-- sqtx3129 squareroot 0.72 -> 0.849 Inexact Rounded +-- sqtx3130 squareroot 0.072 -> 0.268 Inexact Rounded +-- sqtx3131 squareroot 0.73 -> 0.854 Inexact Rounded +-- sqtx3132 squareroot 0.073 -> 0.270 Inexact Rounded +-- sqtx3133 squareroot 0.74 -> 0.860 Inexact Rounded +-- sqtx3134 squareroot 0.074 -> 0.272 Inexact Rounded +-- sqtx3135 squareroot 0.75 -> 0.866 Inexact Rounded +-- sqtx3136 squareroot 0.075 -> 0.274 Inexact Rounded +-- sqtx3137 squareroot 0.76 -> 0.872 Inexact Rounded +-- sqtx3138 squareroot 0.076 -> 0.276 Inexact Rounded +-- sqtx3139 squareroot 0.77 -> 0.877 Inexact Rounded +-- sqtx3140 squareroot 0.077 -> 0.277 Inexact Rounded +-- sqtx3141 squareroot 0.78 -> 0.883 Inexact Rounded +-- sqtx3142 squareroot 0.078 -> 0.279 Inexact Rounded +-- sqtx3143 squareroot 0.79 -> 0.889 Inexact Rounded +-- sqtx3144 squareroot 0.079 -> 0.281 Inexact Rounded sqtx3145 squareroot 0.81 -> 0.9 -sqtx3146 squareroot 0.081 -> 0.285 Inexact Rounded -sqtx3147 squareroot 0.82 -> 0.906 Inexact Rounded -sqtx3148 squareroot 0.082 -> 0.286 Inexact Rounded -sqtx3149 squareroot 0.83 -> 0.911 Inexact Rounded -sqtx3150 squareroot 0.083 -> 0.288 Inexact Rounded -sqtx3151 squareroot 0.84 -> 0.917 Inexact Rounded -sqtx3152 squareroot 0.084 -> 0.290 Inexact Rounded -sqtx3153 squareroot 0.85 -> 0.922 Inexact Rounded -sqtx3154 squareroot 0.085 -> 0.292 Inexact Rounded -sqtx3155 squareroot 0.86 -> 0.927 Inexact Rounded -sqtx3156 squareroot 0.086 -> 0.293 Inexact Rounded -sqtx3157 squareroot 0.87 -> 0.933 Inexact Rounded -sqtx3158 squareroot 0.087 -> 0.295 Inexact Rounded -sqtx3159 squareroot 0.88 -> 0.938 Inexact Rounded -sqtx3160 squareroot 0.088 -> 0.297 Inexact Rounded -sqtx3161 squareroot 0.89 -> 0.943 Inexact Rounded -sqtx3162 squareroot 0.089 -> 0.298 Inexact Rounded -sqtx3163 squareroot 0.91 -> 0.954 Inexact Rounded -sqtx3164 squareroot 0.091 -> 0.302 Inexact Rounded -sqtx3165 squareroot 0.92 -> 0.959 Inexact Rounded -sqtx3166 squareroot 0.092 -> 0.303 Inexact Rounded -sqtx3167 squareroot 0.93 -> 0.964 Inexact Rounded -sqtx3168 squareroot 0.093 -> 0.305 Inexact Rounded -sqtx3169 squareroot 0.94 -> 0.970 Inexact Rounded -sqtx3170 squareroot 0.094 -> 0.307 Inexact Rounded -sqtx3171 squareroot 0.95 -> 0.975 Inexact Rounded -sqtx3172 squareroot 0.095 -> 0.308 Inexact Rounded -sqtx3173 squareroot 0.96 -> 0.980 Inexact Rounded -sqtx3174 squareroot 0.096 -> 0.310 Inexact Rounded -sqtx3175 squareroot 0.97 -> 0.985 Inexact Rounded -sqtx3176 squareroot 0.097 -> 0.311 Inexact Rounded -sqtx3177 squareroot 0.98 -> 0.990 Inexact Rounded -sqtx3178 squareroot 0.098 -> 0.313 Inexact Rounded -sqtx3179 squareroot 0.99 -> 0.995 Inexact Rounded -sqtx3180 squareroot 0.099 -> 0.315 Inexact Rounded -sqtx3181 squareroot 0.101 -> 0.318 Inexact Rounded -sqtx3182 squareroot 0.0101 -> 0.100 Inexact Rounded -sqtx3183 squareroot 0.102 -> 0.319 Inexact Rounded -sqtx3184 squareroot 0.0102 -> 0.101 Inexact Rounded -sqtx3185 squareroot 0.103 -> 0.321 Inexact Rounded -sqtx3186 squareroot 0.0103 -> 0.101 Inexact Rounded -sqtx3187 squareroot 0.104 -> 0.322 Inexact Rounded -sqtx3188 squareroot 0.0104 -> 0.102 Inexact Rounded -sqtx3189 squareroot 0.105 -> 0.324 Inexact Rounded -sqtx3190 squareroot 0.0105 -> 0.102 Inexact Rounded -sqtx3191 squareroot 0.106 -> 0.326 Inexact Rounded -sqtx3192 squareroot 0.0106 -> 0.103 Inexact Rounded -sqtx3193 squareroot 0.107 -> 0.327 Inexact Rounded -sqtx3194 squareroot 0.0107 -> 0.103 Inexact Rounded -sqtx3195 squareroot 0.108 -> 0.329 Inexact Rounded -sqtx3196 squareroot 0.0108 -> 0.104 Inexact Rounded -sqtx3197 squareroot 0.109 -> 0.330 Inexact Rounded -sqtx3198 squareroot 0.0109 -> 0.104 Inexact Rounded -sqtx3199 squareroot 0.111 -> 0.333 Inexact Rounded -sqtx3200 squareroot 0.0111 -> 0.105 Inexact Rounded -sqtx3201 squareroot 0.112 -> 0.335 Inexact Rounded -sqtx3202 squareroot 0.0112 -> 0.106 Inexact Rounded -sqtx3203 squareroot 0.113 -> 0.336 Inexact Rounded -sqtx3204 squareroot 0.0113 -> 0.106 Inexact Rounded -sqtx3205 squareroot 0.114 -> 0.338 Inexact Rounded -sqtx3206 squareroot 0.0114 -> 0.107 Inexact Rounded -sqtx3207 squareroot 0.115 -> 0.339 Inexact Rounded -sqtx3208 squareroot 0.0115 -> 0.107 Inexact Rounded -sqtx3209 squareroot 0.116 -> 0.341 Inexact Rounded -sqtx3210 squareroot 0.0116 -> 0.108 Inexact Rounded -sqtx3211 squareroot 0.117 -> 0.342 Inexact Rounded -sqtx3212 squareroot 0.0117 -> 0.108 Inexact Rounded -sqtx3213 squareroot 0.118 -> 0.344 Inexact Rounded -sqtx3214 squareroot 0.0118 -> 0.109 Inexact Rounded -sqtx3215 squareroot 0.119 -> 0.345 Inexact Rounded -sqtx3216 squareroot 0.0119 -> 0.109 Inexact Rounded -sqtx3217 squareroot 0.121 -> 0.348 Inexact Rounded +-- sqtx3146 squareroot 0.081 -> 0.285 Inexact Rounded +-- sqtx3147 squareroot 0.82 -> 0.906 Inexact Rounded +-- sqtx3148 squareroot 0.082 -> 0.286 Inexact Rounded +-- sqtx3149 squareroot 0.83 -> 0.911 Inexact Rounded +-- sqtx3150 squareroot 0.083 -> 0.288 Inexact Rounded +-- sqtx3151 squareroot 0.84 -> 0.917 Inexact Rounded +-- sqtx3152 squareroot 0.084 -> 0.290 Inexact Rounded +-- sqtx3153 squareroot 0.85 -> 0.922 Inexact Rounded +-- sqtx3154 squareroot 0.085 -> 0.292 Inexact Rounded +-- sqtx3155 squareroot 0.86 -> 0.927 Inexact Rounded +-- sqtx3156 squareroot 0.086 -> 0.293 Inexact Rounded +-- sqtx3157 squareroot 0.87 -> 0.933 Inexact Rounded +-- sqtx3158 squareroot 0.087 -> 0.295 Inexact Rounded +-- sqtx3159 squareroot 0.88 -> 0.938 Inexact Rounded +-- sqtx3160 squareroot 0.088 -> 0.297 Inexact Rounded +-- sqtx3161 squareroot 0.89 -> 0.943 Inexact Rounded +-- sqtx3162 squareroot 0.089 -> 0.298 Inexact Rounded +-- sqtx3163 squareroot 0.91 -> 0.954 Inexact Rounded +-- sqtx3164 squareroot 0.091 -> 0.302 Inexact Rounded +-- sqtx3165 squareroot 0.92 -> 0.959 Inexact Rounded +-- sqtx3166 squareroot 0.092 -> 0.303 Inexact Rounded +-- sqtx3167 squareroot 0.93 -> 0.964 Inexact Rounded +-- sqtx3168 squareroot 0.093 -> 0.305 Inexact Rounded +-- sqtx3169 squareroot 0.94 -> 0.970 Inexact Rounded +-- sqtx3170 squareroot 0.094 -> 0.307 Inexact Rounded +-- sqtx3171 squareroot 0.95 -> 0.975 Inexact Rounded +-- sqtx3172 squareroot 0.095 -> 0.308 Inexact Rounded +-- sqtx3173 squareroot 0.96 -> 0.980 Inexact Rounded +-- sqtx3174 squareroot 0.096 -> 0.310 Inexact Rounded +-- sqtx3175 squareroot 0.97 -> 0.985 Inexact Rounded +-- sqtx3176 squareroot 0.097 -> 0.311 Inexact Rounded +-- sqtx3177 squareroot 0.98 -> 0.990 Inexact Rounded +-- sqtx3178 squareroot 0.098 -> 0.313 Inexact Rounded +-- sqtx3179 squareroot 0.99 -> 0.995 Inexact Rounded +-- sqtx3180 squareroot 0.099 -> 0.315 Inexact Rounded +-- sqtx3181 squareroot 0.101 -> 0.318 Inexact Rounded +-- sqtx3182 squareroot 0.0101 -> 0.100 Inexact Rounded +-- sqtx3183 squareroot 0.102 -> 0.319 Inexact Rounded +-- sqtx3184 squareroot 0.0102 -> 0.101 Inexact Rounded +-- sqtx3185 squareroot 0.103 -> 0.321 Inexact Rounded +-- sqtx3186 squareroot 0.0103 -> 0.101 Inexact Rounded +-- sqtx3187 squareroot 0.104 -> 0.322 Inexact Rounded +-- sqtx3188 squareroot 0.0104 -> 0.102 Inexact Rounded +-- sqtx3189 squareroot 0.105 -> 0.324 Inexact Rounded +-- sqtx3190 squareroot 0.0105 -> 0.102 Inexact Rounded +-- sqtx3191 squareroot 0.106 -> 0.326 Inexact Rounded +-- sqtx3192 squareroot 0.0106 -> 0.103 Inexact Rounded +-- sqtx3193 squareroot 0.107 -> 0.327 Inexact Rounded +-- sqtx3194 squareroot 0.0107 -> 0.103 Inexact Rounded +-- sqtx3195 squareroot 0.108 -> 0.329 Inexact Rounded +-- sqtx3196 squareroot 0.0108 -> 0.104 Inexact Rounded +-- sqtx3197 squareroot 0.109 -> 0.330 Inexact Rounded +-- sqtx3198 squareroot 0.0109 -> 0.104 Inexact Rounded +-- sqtx3199 squareroot 0.111 -> 0.333 Inexact Rounded +-- sqtx3200 squareroot 0.0111 -> 0.105 Inexact Rounded +-- sqtx3201 squareroot 0.112 -> 0.335 Inexact Rounded +-- sqtx3202 squareroot 0.0112 -> 0.106 Inexact Rounded +-- sqtx3203 squareroot 0.113 -> 0.336 Inexact Rounded +-- sqtx3204 squareroot 0.0113 -> 0.106 Inexact Rounded +-- sqtx3205 squareroot 0.114 -> 0.338 Inexact Rounded +-- sqtx3206 squareroot 0.0114 -> 0.107 Inexact Rounded +-- sqtx3207 squareroot 0.115 -> 0.339 Inexact Rounded +-- sqtx3208 squareroot 0.0115 -> 0.107 Inexact Rounded +-- sqtx3209 squareroot 0.116 -> 0.341 Inexact Rounded +-- sqtx3210 squareroot 0.0116 -> 0.108 Inexact Rounded +-- sqtx3211 squareroot 0.117 -> 0.342 Inexact Rounded +-- sqtx3212 squareroot 0.0117 -> 0.108 Inexact Rounded +-- sqtx3213 squareroot 0.118 -> 0.344 Inexact Rounded +-- sqtx3214 squareroot 0.0118 -> 0.109 Inexact Rounded +-- sqtx3215 squareroot 0.119 -> 0.345 Inexact Rounded +-- sqtx3216 squareroot 0.0119 -> 0.109 Inexact Rounded +-- sqtx3217 squareroot 0.121 -> 0.348 Inexact Rounded sqtx3218 squareroot 0.0121 -> 0.11 -sqtx3219 squareroot 0.122 -> 0.349 Inexact Rounded -sqtx3220 squareroot 0.0122 -> 0.110 Inexact Rounded -sqtx3221 squareroot 0.123 -> 0.351 Inexact Rounded -sqtx3222 squareroot 0.0123 -> 0.111 Inexact Rounded -sqtx3223 squareroot 0.124 -> 0.352 Inexact Rounded -sqtx3224 squareroot 0.0124 -> 0.111 Inexact Rounded -sqtx3225 squareroot 0.125 -> 0.354 Inexact Rounded -sqtx3226 squareroot 0.0125 -> 0.112 Inexact Rounded -sqtx3227 squareroot 0.126 -> 0.355 Inexact Rounded -sqtx3228 squareroot 0.0126 -> 0.112 Inexact Rounded -sqtx3229 squareroot 0.127 -> 0.356 Inexact Rounded -sqtx3230 squareroot 0.0127 -> 0.113 Inexact Rounded -sqtx3231 squareroot 0.128 -> 0.358 Inexact Rounded -sqtx3232 squareroot 0.0128 -> 0.113 Inexact Rounded -sqtx3233 squareroot 0.129 -> 0.359 Inexact Rounded -sqtx3234 squareroot 0.0129 -> 0.114 Inexact Rounded -sqtx3235 squareroot 0.131 -> 0.362 Inexact Rounded -sqtx3236 squareroot 0.0131 -> 0.114 Inexact Rounded -sqtx3237 squareroot 0.132 -> 0.363 Inexact Rounded -sqtx3238 squareroot 0.0132 -> 0.115 Inexact Rounded -sqtx3239 squareroot 0.133 -> 0.365 Inexact Rounded -sqtx3240 squareroot 0.0133 -> 0.115 Inexact Rounded -sqtx3241 squareroot 0.134 -> 0.366 Inexact Rounded -sqtx3242 squareroot 0.0134 -> 0.116 Inexact Rounded -sqtx3243 squareroot 0.135 -> 0.367 Inexact Rounded -sqtx3244 squareroot 0.0135 -> 0.116 Inexact Rounded -sqtx3245 squareroot 0.136 -> 0.369 Inexact Rounded -sqtx3246 squareroot 0.0136 -> 0.117 Inexact Rounded -sqtx3247 squareroot 0.137 -> 0.370 Inexact Rounded -sqtx3248 squareroot 0.0137 -> 0.117 Inexact Rounded -sqtx3249 squareroot 0.138 -> 0.371 Inexact Rounded -sqtx3250 squareroot 0.0138 -> 0.117 Inexact Rounded -sqtx3251 squareroot 0.139 -> 0.373 Inexact Rounded -sqtx3252 squareroot 0.0139 -> 0.118 Inexact Rounded -sqtx3253 squareroot 0.141 -> 0.375 Inexact Rounded -sqtx3254 squareroot 0.0141 -> 0.119 Inexact Rounded -sqtx3255 squareroot 0.142 -> 0.377 Inexact Rounded -sqtx3256 squareroot 0.0142 -> 0.119 Inexact Rounded -sqtx3257 squareroot 0.143 -> 0.378 Inexact Rounded -sqtx3258 squareroot 0.0143 -> 0.120 Inexact Rounded -sqtx3259 squareroot 0.144 -> 0.379 Inexact Rounded +-- sqtx3219 squareroot 0.122 -> 0.349 Inexact Rounded +-- sqtx3220 squareroot 0.0122 -> 0.110 Inexact Rounded +-- sqtx3221 squareroot 0.123 -> 0.351 Inexact Rounded +-- sqtx3222 squareroot 0.0123 -> 0.111 Inexact Rounded +-- sqtx3223 squareroot 0.124 -> 0.352 Inexact Rounded +-- sqtx3224 squareroot 0.0124 -> 0.111 Inexact Rounded +-- sqtx3225 squareroot 0.125 -> 0.354 Inexact Rounded +-- sqtx3226 squareroot 0.0125 -> 0.112 Inexact Rounded +-- sqtx3227 squareroot 0.126 -> 0.355 Inexact Rounded +-- sqtx3228 squareroot 0.0126 -> 0.112 Inexact Rounded +-- sqtx3229 squareroot 0.127 -> 0.356 Inexact Rounded +-- sqtx3230 squareroot 0.0127 -> 0.113 Inexact Rounded +-- sqtx3231 squareroot 0.128 -> 0.358 Inexact Rounded +-- sqtx3232 squareroot 0.0128 -> 0.113 Inexact Rounded +-- sqtx3233 squareroot 0.129 -> 0.359 Inexact Rounded +-- sqtx3234 squareroot 0.0129 -> 0.114 Inexact Rounded +-- sqtx3235 squareroot 0.131 -> 0.362 Inexact Rounded +-- sqtx3236 squareroot 0.0131 -> 0.114 Inexact Rounded +-- sqtx3237 squareroot 0.132 -> 0.363 Inexact Rounded +-- sqtx3238 squareroot 0.0132 -> 0.115 Inexact Rounded +-- sqtx3239 squareroot 0.133 -> 0.365 Inexact Rounded +-- sqtx3240 squareroot 0.0133 -> 0.115 Inexact Rounded +-- sqtx3241 squareroot 0.134 -> 0.366 Inexact Rounded +-- sqtx3242 squareroot 0.0134 -> 0.116 Inexact Rounded +-- sqtx3243 squareroot 0.135 -> 0.367 Inexact Rounded +-- sqtx3244 squareroot 0.0135 -> 0.116 Inexact Rounded +-- sqtx3245 squareroot 0.136 -> 0.369 Inexact Rounded +-- sqtx3246 squareroot 0.0136 -> 0.117 Inexact Rounded +-- sqtx3247 squareroot 0.137 -> 0.370 Inexact Rounded +-- sqtx3248 squareroot 0.0137 -> 0.117 Inexact Rounded +-- sqtx3249 squareroot 0.138 -> 0.371 Inexact Rounded +-- sqtx3250 squareroot 0.0138 -> 0.117 Inexact Rounded +-- sqtx3251 squareroot 0.139 -> 0.373 Inexact Rounded +-- sqtx3252 squareroot 0.0139 -> 0.118 Inexact Rounded +-- sqtx3253 squareroot 0.141 -> 0.375 Inexact Rounded +-- sqtx3254 squareroot 0.0141 -> 0.119 Inexact Rounded +-- sqtx3255 squareroot 0.142 -> 0.377 Inexact Rounded +-- sqtx3256 squareroot 0.0142 -> 0.119 Inexact Rounded +-- sqtx3257 squareroot 0.143 -> 0.378 Inexact Rounded +-- sqtx3258 squareroot 0.0143 -> 0.120 Inexact Rounded +-- sqtx3259 squareroot 0.144 -> 0.379 Inexact Rounded sqtx3260 squareroot 0.0144 -> 0.12 -sqtx3261 squareroot 0.145 -> 0.381 Inexact Rounded -sqtx3262 squareroot 0.0145 -> 0.120 Inexact Rounded -sqtx3263 squareroot 0.146 -> 0.382 Inexact Rounded -sqtx3264 squareroot 0.0146 -> 0.121 Inexact Rounded -sqtx3265 squareroot 0.147 -> 0.383 Inexact Rounded -sqtx3266 squareroot 0.0147 -> 0.121 Inexact Rounded -sqtx3267 squareroot 0.148 -> 0.385 Inexact Rounded -sqtx3268 squareroot 0.0148 -> 0.122 Inexact Rounded -sqtx3269 squareroot 0.149 -> 0.386 Inexact Rounded -sqtx3270 squareroot 0.0149 -> 0.122 Inexact Rounded -sqtx3271 squareroot 0.151 -> 0.389 Inexact Rounded -sqtx3272 squareroot 0.0151 -> 0.123 Inexact Rounded -sqtx3273 squareroot 0.152 -> 0.390 Inexact Rounded -sqtx3274 squareroot 0.0152 -> 0.123 Inexact Rounded -sqtx3275 squareroot 0.153 -> 0.391 Inexact Rounded -sqtx3276 squareroot 0.0153 -> 0.124 Inexact Rounded -sqtx3277 squareroot 0.154 -> 0.392 Inexact Rounded -sqtx3278 squareroot 0.0154 -> 0.124 Inexact Rounded -sqtx3279 squareroot 0.155 -> 0.394 Inexact Rounded -sqtx3280 squareroot 0.0155 -> 0.124 Inexact Rounded -sqtx3281 squareroot 0.156 -> 0.395 Inexact Rounded -sqtx3282 squareroot 0.0156 -> 0.125 Inexact Rounded -sqtx3283 squareroot 0.157 -> 0.396 Inexact Rounded -sqtx3284 squareroot 0.0157 -> 0.125 Inexact Rounded -sqtx3285 squareroot 0.158 -> 0.397 Inexact Rounded -sqtx3286 squareroot 0.0158 -> 0.126 Inexact Rounded -sqtx3287 squareroot 0.159 -> 0.399 Inexact Rounded -sqtx3288 squareroot 0.0159 -> 0.126 Inexact Rounded -sqtx3289 squareroot 0.161 -> 0.401 Inexact Rounded -sqtx3290 squareroot 0.0161 -> 0.127 Inexact Rounded -sqtx3291 squareroot 0.162 -> 0.402 Inexact Rounded -sqtx3292 squareroot 0.0162 -> 0.127 Inexact Rounded -sqtx3293 squareroot 0.163 -> 0.404 Inexact Rounded -sqtx3294 squareroot 0.0163 -> 0.128 Inexact Rounded -sqtx3295 squareroot 0.164 -> 0.405 Inexact Rounded -sqtx3296 squareroot 0.0164 -> 0.128 Inexact Rounded -sqtx3297 squareroot 0.165 -> 0.406 Inexact Rounded -sqtx3298 squareroot 0.0165 -> 0.128 Inexact Rounded -sqtx3299 squareroot 0.166 -> 0.407 Inexact Rounded -sqtx3300 squareroot 0.0166 -> 0.129 Inexact Rounded -sqtx3301 squareroot 0.167 -> 0.409 Inexact Rounded -sqtx3302 squareroot 0.0167 -> 0.129 Inexact Rounded -sqtx3303 squareroot 0.168 -> 0.410 Inexact Rounded -sqtx3304 squareroot 0.0168 -> 0.130 Inexact Rounded -sqtx3305 squareroot 0.169 -> 0.411 Inexact Rounded +-- sqtx3261 squareroot 0.145 -> 0.381 Inexact Rounded +-- sqtx3262 squareroot 0.0145 -> 0.120 Inexact Rounded +-- sqtx3263 squareroot 0.146 -> 0.382 Inexact Rounded +-- sqtx3264 squareroot 0.0146 -> 0.121 Inexact Rounded +-- sqtx3265 squareroot 0.147 -> 0.383 Inexact Rounded +-- sqtx3266 squareroot 0.0147 -> 0.121 Inexact Rounded +-- sqtx3267 squareroot 0.148 -> 0.385 Inexact Rounded +-- sqtx3268 squareroot 0.0148 -> 0.122 Inexact Rounded +-- sqtx3269 squareroot 0.149 -> 0.386 Inexact Rounded +-- sqtx3270 squareroot 0.0149 -> 0.122 Inexact Rounded +-- sqtx3271 squareroot 0.151 -> 0.389 Inexact Rounded +-- sqtx3272 squareroot 0.0151 -> 0.123 Inexact Rounded +-- sqtx3273 squareroot 0.152 -> 0.390 Inexact Rounded +-- sqtx3274 squareroot 0.0152 -> 0.123 Inexact Rounded +-- sqtx3275 squareroot 0.153 -> 0.391 Inexact Rounded +-- sqtx3276 squareroot 0.0153 -> 0.124 Inexact Rounded +-- sqtx3277 squareroot 0.154 -> 0.392 Inexact Rounded +-- sqtx3278 squareroot 0.0154 -> 0.124 Inexact Rounded +-- sqtx3279 squareroot 0.155 -> 0.394 Inexact Rounded +-- sqtx3280 squareroot 0.0155 -> 0.124 Inexact Rounded +-- sqtx3281 squareroot 0.156 -> 0.395 Inexact Rounded +-- sqtx3282 squareroot 0.0156 -> 0.125 Inexact Rounded +-- sqtx3283 squareroot 0.157 -> 0.396 Inexact Rounded +-- sqtx3284 squareroot 0.0157 -> 0.125 Inexact Rounded +-- sqtx3285 squareroot 0.158 -> 0.397 Inexact Rounded +-- sqtx3286 squareroot 0.0158 -> 0.126 Inexact Rounded +-- sqtx3287 squareroot 0.159 -> 0.399 Inexact Rounded +-- sqtx3288 squareroot 0.0159 -> 0.126 Inexact Rounded +-- sqtx3289 squareroot 0.161 -> 0.401 Inexact Rounded +-- sqtx3290 squareroot 0.0161 -> 0.127 Inexact Rounded +-- sqtx3291 squareroot 0.162 -> 0.402 Inexact Rounded +-- sqtx3292 squareroot 0.0162 -> 0.127 Inexact Rounded +-- sqtx3293 squareroot 0.163 -> 0.404 Inexact Rounded +-- sqtx3294 squareroot 0.0163 -> 0.128 Inexact Rounded +-- sqtx3295 squareroot 0.164 -> 0.405 Inexact Rounded +-- sqtx3296 squareroot 0.0164 -> 0.128 Inexact Rounded +-- sqtx3297 squareroot 0.165 -> 0.406 Inexact Rounded +-- sqtx3298 squareroot 0.0165 -> 0.128 Inexact Rounded +-- sqtx3299 squareroot 0.166 -> 0.407 Inexact Rounded +-- sqtx3300 squareroot 0.0166 -> 0.129 Inexact Rounded +-- sqtx3301 squareroot 0.167 -> 0.409 Inexact Rounded +-- sqtx3302 squareroot 0.0167 -> 0.129 Inexact Rounded +-- sqtx3303 squareroot 0.168 -> 0.410 Inexact Rounded +-- sqtx3304 squareroot 0.0168 -> 0.130 Inexact Rounded +-- sqtx3305 squareroot 0.169 -> 0.411 Inexact Rounded sqtx3306 squareroot 0.0169 -> 0.13 -sqtx3307 squareroot 0.171 -> 0.414 Inexact Rounded -sqtx3308 squareroot 0.0171 -> 0.131 Inexact Rounded -sqtx3309 squareroot 0.172 -> 0.415 Inexact Rounded -sqtx3310 squareroot 0.0172 -> 0.131 Inexact Rounded -sqtx3311 squareroot 0.173 -> 0.416 Inexact Rounded -sqtx3312 squareroot 0.0173 -> 0.132 Inexact Rounded -sqtx3313 squareroot 0.174 -> 0.417 Inexact Rounded -sqtx3314 squareroot 0.0174 -> 0.132 Inexact Rounded -sqtx3315 squareroot 0.175 -> 0.418 Inexact Rounded -sqtx3316 squareroot 0.0175 -> 0.132 Inexact Rounded -sqtx3317 squareroot 0.176 -> 0.420 Inexact Rounded -sqtx3318 squareroot 0.0176 -> 0.133 Inexact Rounded -sqtx3319 squareroot 0.177 -> 0.421 Inexact Rounded -sqtx3320 squareroot 0.0177 -> 0.133 Inexact Rounded -sqtx3321 squareroot 0.178 -> 0.422 Inexact Rounded -sqtx3322 squareroot 0.0178 -> 0.133 Inexact Rounded -sqtx3323 squareroot 0.179 -> 0.423 Inexact Rounded -sqtx3324 squareroot 0.0179 -> 0.134 Inexact Rounded -sqtx3325 squareroot 0.181 -> 0.425 Inexact Rounded -sqtx3326 squareroot 0.0181 -> 0.135 Inexact Rounded -sqtx3327 squareroot 0.182 -> 0.427 Inexact Rounded -sqtx3328 squareroot 0.0182 -> 0.135 Inexact Rounded -sqtx3329 squareroot 0.183 -> 0.428 Inexact Rounded -sqtx3330 squareroot 0.0183 -> 0.135 Inexact Rounded -sqtx3331 squareroot 0.184 -> 0.429 Inexact Rounded -sqtx3332 squareroot 0.0184 -> 0.136 Inexact Rounded -sqtx3333 squareroot 0.185 -> 0.430 Inexact Rounded -sqtx3334 squareroot 0.0185 -> 0.136 Inexact Rounded -sqtx3335 squareroot 0.186 -> 0.431 Inexact Rounded -sqtx3336 squareroot 0.0186 -> 0.136 Inexact Rounded -sqtx3337 squareroot 0.187 -> 0.432 Inexact Rounded -sqtx3338 squareroot 0.0187 -> 0.137 Inexact Rounded -sqtx3339 squareroot 0.188 -> 0.434 Inexact Rounded -sqtx3340 squareroot 0.0188 -> 0.137 Inexact Rounded -sqtx3341 squareroot 0.189 -> 0.435 Inexact Rounded -sqtx3342 squareroot 0.0189 -> 0.137 Inexact Rounded -sqtx3343 squareroot 0.191 -> 0.437 Inexact Rounded -sqtx3344 squareroot 0.0191 -> 0.138 Inexact Rounded -sqtx3345 squareroot 0.192 -> 0.438 Inexact Rounded -sqtx3346 squareroot 0.0192 -> 0.139 Inexact Rounded -sqtx3347 squareroot 0.193 -> 0.439 Inexact Rounded -sqtx3348 squareroot 0.0193 -> 0.139 Inexact Rounded -sqtx3349 squareroot 0.194 -> 0.440 Inexact Rounded -sqtx3350 squareroot 0.0194 -> 0.139 Inexact Rounded -sqtx3351 squareroot 0.195 -> 0.442 Inexact Rounded -sqtx3352 squareroot 0.0195 -> 0.140 Inexact Rounded -sqtx3353 squareroot 0.196 -> 0.443 Inexact Rounded +-- sqtx3307 squareroot 0.171 -> 0.414 Inexact Rounded +-- sqtx3308 squareroot 0.0171 -> 0.131 Inexact Rounded +-- sqtx3309 squareroot 0.172 -> 0.415 Inexact Rounded +-- sqtx3310 squareroot 0.0172 -> 0.131 Inexact Rounded +-- sqtx3311 squareroot 0.173 -> 0.416 Inexact Rounded +-- sqtx3312 squareroot 0.0173 -> 0.132 Inexact Rounded +-- sqtx3313 squareroot 0.174 -> 0.417 Inexact Rounded +-- sqtx3314 squareroot 0.0174 -> 0.132 Inexact Rounded +-- sqtx3315 squareroot 0.175 -> 0.418 Inexact Rounded +-- sqtx3316 squareroot 0.0175 -> 0.132 Inexact Rounded +-- sqtx3317 squareroot 0.176 -> 0.420 Inexact Rounded +-- sqtx3318 squareroot 0.0176 -> 0.133 Inexact Rounded +-- sqtx3319 squareroot 0.177 -> 0.421 Inexact Rounded +-- sqtx3320 squareroot 0.0177 -> 0.133 Inexact Rounded +-- sqtx3321 squareroot 0.178 -> 0.422 Inexact Rounded +-- sqtx3322 squareroot 0.0178 -> 0.133 Inexact Rounded +-- sqtx3323 squareroot 0.179 -> 0.423 Inexact Rounded +-- sqtx3324 squareroot 0.0179 -> 0.134 Inexact Rounded +-- sqtx3325 squareroot 0.181 -> 0.425 Inexact Rounded +-- sqtx3326 squareroot 0.0181 -> 0.135 Inexact Rounded +-- sqtx3327 squareroot 0.182 -> 0.427 Inexact Rounded +-- sqtx3328 squareroot 0.0182 -> 0.135 Inexact Rounded +-- sqtx3329 squareroot 0.183 -> 0.428 Inexact Rounded +-- sqtx3330 squareroot 0.0183 -> 0.135 Inexact Rounded +-- sqtx3331 squareroot 0.184 -> 0.429 Inexact Rounded +-- sqtx3332 squareroot 0.0184 -> 0.136 Inexact Rounded +-- sqtx3333 squareroot 0.185 -> 0.430 Inexact Rounded +-- sqtx3334 squareroot 0.0185 -> 0.136 Inexact Rounded +-- sqtx3335 squareroot 0.186 -> 0.431 Inexact Rounded +-- sqtx3336 squareroot 0.0186 -> 0.136 Inexact Rounded +-- sqtx3337 squareroot 0.187 -> 0.432 Inexact Rounded +-- sqtx3338 squareroot 0.0187 -> 0.137 Inexact Rounded +-- sqtx3339 squareroot 0.188 -> 0.434 Inexact Rounded +-- sqtx3340 squareroot 0.0188 -> 0.137 Inexact Rounded +-- sqtx3341 squareroot 0.189 -> 0.435 Inexact Rounded +-- sqtx3342 squareroot 0.0189 -> 0.137 Inexact Rounded +-- sqtx3343 squareroot 0.191 -> 0.437 Inexact Rounded +-- sqtx3344 squareroot 0.0191 -> 0.138 Inexact Rounded +-- sqtx3345 squareroot 0.192 -> 0.438 Inexact Rounded +-- sqtx3346 squareroot 0.0192 -> 0.139 Inexact Rounded +-- sqtx3347 squareroot 0.193 -> 0.439 Inexact Rounded +-- sqtx3348 squareroot 0.0193 -> 0.139 Inexact Rounded +-- sqtx3349 squareroot 0.194 -> 0.440 Inexact Rounded +-- sqtx3350 squareroot 0.0194 -> 0.139 Inexact Rounded +-- sqtx3351 squareroot 0.195 -> 0.442 Inexact Rounded +-- sqtx3352 squareroot 0.0195 -> 0.140 Inexact Rounded +-- sqtx3353 squareroot 0.196 -> 0.443 Inexact Rounded sqtx3354 squareroot 0.0196 -> 0.14 -sqtx3355 squareroot 0.197 -> 0.444 Inexact Rounded -sqtx3356 squareroot 0.0197 -> 0.140 Inexact Rounded -sqtx3357 squareroot 0.198 -> 0.445 Inexact Rounded -sqtx3358 squareroot 0.0198 -> 0.141 Inexact Rounded -sqtx3359 squareroot 0.199 -> 0.446 Inexact Rounded -sqtx3360 squareroot 0.0199 -> 0.141 Inexact Rounded -sqtx3361 squareroot 0.201 -> 0.448 Inexact Rounded -sqtx3362 squareroot 0.0201 -> 0.142 Inexact Rounded -sqtx3363 squareroot 0.202 -> 0.449 Inexact Rounded -sqtx3364 squareroot 0.0202 -> 0.142 Inexact Rounded -sqtx3365 squareroot 0.203 -> 0.451 Inexact Rounded -sqtx3366 squareroot 0.0203 -> 0.142 Inexact Rounded -sqtx3367 squareroot 0.204 -> 0.452 Inexact Rounded -sqtx3368 squareroot 0.0204 -> 0.143 Inexact Rounded -sqtx3369 squareroot 0.205 -> 0.453 Inexact Rounded -sqtx3370 squareroot 0.0205 -> 0.143 Inexact Rounded -sqtx3371 squareroot 0.206 -> 0.454 Inexact Rounded -sqtx3372 squareroot 0.0206 -> 0.144 Inexact Rounded -sqtx3373 squareroot 0.207 -> 0.455 Inexact Rounded -sqtx3374 squareroot 0.0207 -> 0.144 Inexact Rounded -sqtx3375 squareroot 0.208 -> 0.456 Inexact Rounded -sqtx3376 squareroot 0.0208 -> 0.144 Inexact Rounded -sqtx3377 squareroot 0.209 -> 0.457 Inexact Rounded -sqtx3378 squareroot 0.0209 -> 0.145 Inexact Rounded -sqtx3379 squareroot 0.211 -> 0.459 Inexact Rounded -sqtx3380 squareroot 0.0211 -> 0.145 Inexact Rounded -sqtx3381 squareroot 0.212 -> 0.460 Inexact Rounded -sqtx3382 squareroot 0.0212 -> 0.146 Inexact Rounded -sqtx3383 squareroot 0.213 -> 0.462 Inexact Rounded -sqtx3384 squareroot 0.0213 -> 0.146 Inexact Rounded -sqtx3385 squareroot 0.214 -> 0.463 Inexact Rounded -sqtx3386 squareroot 0.0214 -> 0.146 Inexact Rounded -sqtx3387 squareroot 0.215 -> 0.464 Inexact Rounded -sqtx3388 squareroot 0.0215 -> 0.147 Inexact Rounded -sqtx3389 squareroot 0.216 -> 0.465 Inexact Rounded -sqtx3390 squareroot 0.0216 -> 0.147 Inexact Rounded -sqtx3391 squareroot 0.217 -> 0.466 Inexact Rounded -sqtx3392 squareroot 0.0217 -> 0.147 Inexact Rounded -sqtx3393 squareroot 0.218 -> 0.467 Inexact Rounded -sqtx3394 squareroot 0.0218 -> 0.148 Inexact Rounded -sqtx3395 squareroot 0.219 -> 0.468 Inexact Rounded -sqtx3396 squareroot 0.0219 -> 0.148 Inexact Rounded -sqtx3397 squareroot 0.221 -> 0.470 Inexact Rounded -sqtx3398 squareroot 0.0221 -> 0.149 Inexact Rounded -sqtx3399 squareroot 0.222 -> 0.471 Inexact Rounded -sqtx3400 squareroot 0.0222 -> 0.149 Inexact Rounded -sqtx3401 squareroot 0.223 -> 0.472 Inexact Rounded -sqtx3402 squareroot 0.0223 -> 0.149 Inexact Rounded -sqtx3403 squareroot 0.224 -> 0.473 Inexact Rounded -sqtx3404 squareroot 0.0224 -> 0.150 Inexact Rounded -sqtx3405 squareroot 0.225 -> 0.474 Inexact Rounded +-- sqtx3355 squareroot 0.197 -> 0.444 Inexact Rounded +-- sqtx3356 squareroot 0.0197 -> 0.140 Inexact Rounded +-- sqtx3357 squareroot 0.198 -> 0.445 Inexact Rounded +-- sqtx3358 squareroot 0.0198 -> 0.141 Inexact Rounded +-- sqtx3359 squareroot 0.199 -> 0.446 Inexact Rounded +-- sqtx3360 squareroot 0.0199 -> 0.141 Inexact Rounded +-- sqtx3361 squareroot 0.201 -> 0.448 Inexact Rounded +-- sqtx3362 squareroot 0.0201 -> 0.142 Inexact Rounded +-- sqtx3363 squareroot 0.202 -> 0.449 Inexact Rounded +-- sqtx3364 squareroot 0.0202 -> 0.142 Inexact Rounded +-- sqtx3365 squareroot 0.203 -> 0.451 Inexact Rounded +-- sqtx3366 squareroot 0.0203 -> 0.142 Inexact Rounded +-- sqtx3367 squareroot 0.204 -> 0.452 Inexact Rounded +-- sqtx3368 squareroot 0.0204 -> 0.143 Inexact Rounded +-- sqtx3369 squareroot 0.205 -> 0.453 Inexact Rounded +-- sqtx3370 squareroot 0.0205 -> 0.143 Inexact Rounded +-- sqtx3371 squareroot 0.206 -> 0.454 Inexact Rounded +-- sqtx3372 squareroot 0.0206 -> 0.144 Inexact Rounded +-- sqtx3373 squareroot 0.207 -> 0.455 Inexact Rounded +-- sqtx3374 squareroot 0.0207 -> 0.144 Inexact Rounded +-- sqtx3375 squareroot 0.208 -> 0.456 Inexact Rounded +-- sqtx3376 squareroot 0.0208 -> 0.144 Inexact Rounded +-- sqtx3377 squareroot 0.209 -> 0.457 Inexact Rounded +-- sqtx3378 squareroot 0.0209 -> 0.145 Inexact Rounded +-- sqtx3379 squareroot 0.211 -> 0.459 Inexact Rounded +-- sqtx3380 squareroot 0.0211 -> 0.145 Inexact Rounded +-- sqtx3381 squareroot 0.212 -> 0.460 Inexact Rounded +-- sqtx3382 squareroot 0.0212 -> 0.146 Inexact Rounded +-- sqtx3383 squareroot 0.213 -> 0.462 Inexact Rounded +-- sqtx3384 squareroot 0.0213 -> 0.146 Inexact Rounded +-- sqtx3385 squareroot 0.214 -> 0.463 Inexact Rounded +-- sqtx3386 squareroot 0.0214 -> 0.146 Inexact Rounded +-- sqtx3387 squareroot 0.215 -> 0.464 Inexact Rounded +-- sqtx3388 squareroot 0.0215 -> 0.147 Inexact Rounded +-- sqtx3389 squareroot 0.216 -> 0.465 Inexact Rounded +-- sqtx3390 squareroot 0.0216 -> 0.147 Inexact Rounded +-- sqtx3391 squareroot 0.217 -> 0.466 Inexact Rounded +-- sqtx3392 squareroot 0.0217 -> 0.147 Inexact Rounded +-- sqtx3393 squareroot 0.218 -> 0.467 Inexact Rounded +-- sqtx3394 squareroot 0.0218 -> 0.148 Inexact Rounded +-- sqtx3395 squareroot 0.219 -> 0.468 Inexact Rounded +-- sqtx3396 squareroot 0.0219 -> 0.148 Inexact Rounded +-- sqtx3397 squareroot 0.221 -> 0.470 Inexact Rounded +-- sqtx3398 squareroot 0.0221 -> 0.149 Inexact Rounded +-- sqtx3399 squareroot 0.222 -> 0.471 Inexact Rounded +-- sqtx3400 squareroot 0.0222 -> 0.149 Inexact Rounded +-- sqtx3401 squareroot 0.223 -> 0.472 Inexact Rounded +-- sqtx3402 squareroot 0.0223 -> 0.149 Inexact Rounded +-- sqtx3403 squareroot 0.224 -> 0.473 Inexact Rounded +-- sqtx3404 squareroot 0.0224 -> 0.150 Inexact Rounded +-- sqtx3405 squareroot 0.225 -> 0.474 Inexact Rounded sqtx3406 squareroot 0.0225 -> 0.15 -sqtx3407 squareroot 0.226 -> 0.475 Inexact Rounded -sqtx3408 squareroot 0.0226 -> 0.150 Inexact Rounded -sqtx3409 squareroot 0.227 -> 0.476 Inexact Rounded -sqtx3410 squareroot 0.0227 -> 0.151 Inexact Rounded -sqtx3411 squareroot 0.228 -> 0.477 Inexact Rounded -sqtx3412 squareroot 0.0228 -> 0.151 Inexact Rounded -sqtx3413 squareroot 0.229 -> 0.479 Inexact Rounded -sqtx3414 squareroot 0.0229 -> 0.151 Inexact Rounded -sqtx3415 squareroot 0.231 -> 0.481 Inexact Rounded -sqtx3416 squareroot 0.0231 -> 0.152 Inexact Rounded -sqtx3417 squareroot 0.232 -> 0.482 Inexact Rounded -sqtx3418 squareroot 0.0232 -> 0.152 Inexact Rounded -sqtx3419 squareroot 0.233 -> 0.483 Inexact Rounded -sqtx3420 squareroot 0.0233 -> 0.153 Inexact Rounded -sqtx3421 squareroot 0.234 -> 0.484 Inexact Rounded -sqtx3422 squareroot 0.0234 -> 0.153 Inexact Rounded -sqtx3423 squareroot 0.235 -> 0.485 Inexact Rounded -sqtx3424 squareroot 0.0235 -> 0.153 Inexact Rounded -sqtx3425 squareroot 0.236 -> 0.486 Inexact Rounded -sqtx3426 squareroot 0.0236 -> 0.154 Inexact Rounded -sqtx3427 squareroot 0.237 -> 0.487 Inexact Rounded -sqtx3428 squareroot 0.0237 -> 0.154 Inexact Rounded -sqtx3429 squareroot 0.238 -> 0.488 Inexact Rounded -sqtx3430 squareroot 0.0238 -> 0.154 Inexact Rounded -sqtx3431 squareroot 0.239 -> 0.489 Inexact Rounded -sqtx3432 squareroot 0.0239 -> 0.155 Inexact Rounded -sqtx3433 squareroot 0.241 -> 0.491 Inexact Rounded -sqtx3434 squareroot 0.0241 -> 0.155 Inexact Rounded -sqtx3435 squareroot 0.242 -> 0.492 Inexact Rounded -sqtx3436 squareroot 0.0242 -> 0.156 Inexact Rounded -sqtx3437 squareroot 0.243 -> 0.493 Inexact Rounded -sqtx3438 squareroot 0.0243 -> 0.156 Inexact Rounded -sqtx3439 squareroot 0.244 -> 0.494 Inexact Rounded -sqtx3440 squareroot 0.0244 -> 0.156 Inexact Rounded -sqtx3441 squareroot 0.245 -> 0.495 Inexact Rounded -sqtx3442 squareroot 0.0245 -> 0.157 Inexact Rounded -sqtx3443 squareroot 0.246 -> 0.496 Inexact Rounded -sqtx3444 squareroot 0.0246 -> 0.157 Inexact Rounded -sqtx3445 squareroot 0.247 -> 0.497 Inexact Rounded -sqtx3446 squareroot 0.0247 -> 0.157 Inexact Rounded -sqtx3447 squareroot 0.248 -> 0.498 Inexact Rounded -sqtx3448 squareroot 0.0248 -> 0.157 Inexact Rounded -sqtx3449 squareroot 0.249 -> 0.499 Inexact Rounded -sqtx3450 squareroot 0.0249 -> 0.158 Inexact Rounded -sqtx3451 squareroot 0.251 -> 0.501 Inexact Rounded -sqtx3452 squareroot 0.0251 -> 0.158 Inexact Rounded -sqtx3453 squareroot 0.252 -> 0.502 Inexact Rounded -sqtx3454 squareroot 0.0252 -> 0.159 Inexact Rounded -sqtx3455 squareroot 0.253 -> 0.503 Inexact Rounded -sqtx3456 squareroot 0.0253 -> 0.159 Inexact Rounded -sqtx3457 squareroot 0.254 -> 0.504 Inexact Rounded -sqtx3458 squareroot 0.0254 -> 0.159 Inexact Rounded -sqtx3459 squareroot 0.255 -> 0.505 Inexact Rounded -sqtx3460 squareroot 0.0255 -> 0.160 Inexact Rounded -sqtx3461 squareroot 0.256 -> 0.506 Inexact Rounded +-- sqtx3407 squareroot 0.226 -> 0.475 Inexact Rounded +-- sqtx3408 squareroot 0.0226 -> 0.150 Inexact Rounded +-- sqtx3409 squareroot 0.227 -> 0.476 Inexact Rounded +-- sqtx3410 squareroot 0.0227 -> 0.151 Inexact Rounded +-- sqtx3411 squareroot 0.228 -> 0.477 Inexact Rounded +-- sqtx3412 squareroot 0.0228 -> 0.151 Inexact Rounded +-- sqtx3413 squareroot 0.229 -> 0.479 Inexact Rounded +-- sqtx3414 squareroot 0.0229 -> 0.151 Inexact Rounded +-- sqtx3415 squareroot 0.231 -> 0.481 Inexact Rounded +-- sqtx3416 squareroot 0.0231 -> 0.152 Inexact Rounded +-- sqtx3417 squareroot 0.232 -> 0.482 Inexact Rounded +-- sqtx3418 squareroot 0.0232 -> 0.152 Inexact Rounded +-- sqtx3419 squareroot 0.233 -> 0.483 Inexact Rounded +-- sqtx3420 squareroot 0.0233 -> 0.153 Inexact Rounded +-- sqtx3421 squareroot 0.234 -> 0.484 Inexact Rounded +-- sqtx3422 squareroot 0.0234 -> 0.153 Inexact Rounded +-- sqtx3423 squareroot 0.235 -> 0.485 Inexact Rounded +-- sqtx3424 squareroot 0.0235 -> 0.153 Inexact Rounded +-- sqtx3425 squareroot 0.236 -> 0.486 Inexact Rounded +-- sqtx3426 squareroot 0.0236 -> 0.154 Inexact Rounded +-- sqtx3427 squareroot 0.237 -> 0.487 Inexact Rounded +-- sqtx3428 squareroot 0.0237 -> 0.154 Inexact Rounded +-- sqtx3429 squareroot 0.238 -> 0.488 Inexact Rounded +-- sqtx3430 squareroot 0.0238 -> 0.154 Inexact Rounded +-- sqtx3431 squareroot 0.239 -> 0.489 Inexact Rounded +-- sqtx3432 squareroot 0.0239 -> 0.155 Inexact Rounded +-- sqtx3433 squareroot 0.241 -> 0.491 Inexact Rounded +-- sqtx3434 squareroot 0.0241 -> 0.155 Inexact Rounded +-- sqtx3435 squareroot 0.242 -> 0.492 Inexact Rounded +-- sqtx3436 squareroot 0.0242 -> 0.156 Inexact Rounded +-- sqtx3437 squareroot 0.243 -> 0.493 Inexact Rounded +-- sqtx3438 squareroot 0.0243 -> 0.156 Inexact Rounded +-- sqtx3439 squareroot 0.244 -> 0.494 Inexact Rounded +-- sqtx3440 squareroot 0.0244 -> 0.156 Inexact Rounded +-- sqtx3441 squareroot 0.245 -> 0.495 Inexact Rounded +-- sqtx3442 squareroot 0.0245 -> 0.157 Inexact Rounded +-- sqtx3443 squareroot 0.246 -> 0.496 Inexact Rounded +-- sqtx3444 squareroot 0.0246 -> 0.157 Inexact Rounded +-- sqtx3445 squareroot 0.247 -> 0.497 Inexact Rounded +-- sqtx3446 squareroot 0.0247 -> 0.157 Inexact Rounded +-- sqtx3447 squareroot 0.248 -> 0.498 Inexact Rounded +-- sqtx3448 squareroot 0.0248 -> 0.157 Inexact Rounded +-- sqtx3449 squareroot 0.249 -> 0.499 Inexact Rounded +-- sqtx3450 squareroot 0.0249 -> 0.158 Inexact Rounded +-- sqtx3451 squareroot 0.251 -> 0.501 Inexact Rounded +-- sqtx3452 squareroot 0.0251 -> 0.158 Inexact Rounded +-- sqtx3453 squareroot 0.252 -> 0.502 Inexact Rounded +-- sqtx3454 squareroot 0.0252 -> 0.159 Inexact Rounded +-- sqtx3455 squareroot 0.253 -> 0.503 Inexact Rounded +-- sqtx3456 squareroot 0.0253 -> 0.159 Inexact Rounded +-- sqtx3457 squareroot 0.254 -> 0.504 Inexact Rounded +-- sqtx3458 squareroot 0.0254 -> 0.159 Inexact Rounded +-- sqtx3459 squareroot 0.255 -> 0.505 Inexact Rounded +-- sqtx3460 squareroot 0.0255 -> 0.160 Inexact Rounded +-- sqtx3461 squareroot 0.256 -> 0.506 Inexact Rounded sqtx3462 squareroot 0.0256 -> 0.16 -sqtx3463 squareroot 0.257 -> 0.507 Inexact Rounded -sqtx3464 squareroot 0.0257 -> 0.160 Inexact Rounded -sqtx3465 squareroot 0.258 -> 0.508 Inexact Rounded -sqtx3466 squareroot 0.0258 -> 0.161 Inexact Rounded -sqtx3467 squareroot 0.259 -> 0.509 Inexact Rounded -sqtx3468 squareroot 0.0259 -> 0.161 Inexact Rounded -sqtx3469 squareroot 0.261 -> 0.511 Inexact Rounded -sqtx3470 squareroot 0.0261 -> 0.162 Inexact Rounded -sqtx3471 squareroot 0.262 -> 0.512 Inexact Rounded -sqtx3472 squareroot 0.0262 -> 0.162 Inexact Rounded -sqtx3473 squareroot 0.263 -> 0.513 Inexact Rounded -sqtx3474 squareroot 0.0263 -> 0.162 Inexact Rounded -sqtx3475 squareroot 0.264 -> 0.514 Inexact Rounded -sqtx3476 squareroot 0.0264 -> 0.162 Inexact Rounded -sqtx3477 squareroot 0.265 -> 0.515 Inexact Rounded -sqtx3478 squareroot 0.0265 -> 0.163 Inexact Rounded -sqtx3479 squareroot 0.266 -> 0.516 Inexact Rounded -sqtx3480 squareroot 0.0266 -> 0.163 Inexact Rounded -sqtx3481 squareroot 0.267 -> 0.517 Inexact Rounded -sqtx3482 squareroot 0.0267 -> 0.163 Inexact Rounded -sqtx3483 squareroot 0.268 -> 0.518 Inexact Rounded -sqtx3484 squareroot 0.0268 -> 0.164 Inexact Rounded -sqtx3485 squareroot 0.269 -> 0.519 Inexact Rounded -sqtx3486 squareroot 0.0269 -> 0.164 Inexact Rounded -sqtx3487 squareroot 0.271 -> 0.521 Inexact Rounded -sqtx3488 squareroot 0.0271 -> 0.165 Inexact Rounded -sqtx3489 squareroot 0.272 -> 0.522 Inexact Rounded -sqtx3490 squareroot 0.0272 -> 0.165 Inexact Rounded -sqtx3491 squareroot 0.273 -> 0.522 Inexact Rounded -sqtx3492 squareroot 0.0273 -> 0.165 Inexact Rounded -sqtx3493 squareroot 0.274 -> 0.523 Inexact Rounded -sqtx3494 squareroot 0.0274 -> 0.166 Inexact Rounded -sqtx3495 squareroot 0.275 -> 0.524 Inexact Rounded -sqtx3496 squareroot 0.0275 -> 0.166 Inexact Rounded -sqtx3497 squareroot 0.276 -> 0.525 Inexact Rounded -sqtx3498 squareroot 0.0276 -> 0.166 Inexact Rounded -sqtx3499 squareroot 0.277 -> 0.526 Inexact Rounded -sqtx3500 squareroot 0.0277 -> 0.166 Inexact Rounded -sqtx3501 squareroot 0.278 -> 0.527 Inexact Rounded -sqtx3502 squareroot 0.0278 -> 0.167 Inexact Rounded -sqtx3503 squareroot 0.279 -> 0.528 Inexact Rounded -sqtx3504 squareroot 0.0279 -> 0.167 Inexact Rounded -sqtx3505 squareroot 0.281 -> 0.530 Inexact Rounded -sqtx3506 squareroot 0.0281 -> 0.168 Inexact Rounded -sqtx3507 squareroot 0.282 -> 0.531 Inexact Rounded -sqtx3508 squareroot 0.0282 -> 0.168 Inexact Rounded -sqtx3509 squareroot 0.283 -> 0.532 Inexact Rounded -sqtx3510 squareroot 0.0283 -> 0.168 Inexact Rounded -sqtx3511 squareroot 0.284 -> 0.533 Inexact Rounded -sqtx3512 squareroot 0.0284 -> 0.169 Inexact Rounded -sqtx3513 squareroot 0.285 -> 0.534 Inexact Rounded -sqtx3514 squareroot 0.0285 -> 0.169 Inexact Rounded -sqtx3515 squareroot 0.286 -> 0.535 Inexact Rounded -sqtx3516 squareroot 0.0286 -> 0.169 Inexact Rounded -sqtx3517 squareroot 0.287 -> 0.536 Inexact Rounded -sqtx3518 squareroot 0.0287 -> 0.169 Inexact Rounded -sqtx3519 squareroot 0.288 -> 0.537 Inexact Rounded -sqtx3520 squareroot 0.0288 -> 0.170 Inexact Rounded -sqtx3521 squareroot 0.289 -> 0.538 Inexact Rounded +-- sqtx3463 squareroot 0.257 -> 0.507 Inexact Rounded +-- sqtx3464 squareroot 0.0257 -> 0.160 Inexact Rounded +-- sqtx3465 squareroot 0.258 -> 0.508 Inexact Rounded +-- sqtx3466 squareroot 0.0258 -> 0.161 Inexact Rounded +-- sqtx3467 squareroot 0.259 -> 0.509 Inexact Rounded +-- sqtx3468 squareroot 0.0259 -> 0.161 Inexact Rounded +-- sqtx3469 squareroot 0.261 -> 0.511 Inexact Rounded +-- sqtx3470 squareroot 0.0261 -> 0.162 Inexact Rounded +-- sqtx3471 squareroot 0.262 -> 0.512 Inexact Rounded +-- sqtx3472 squareroot 0.0262 -> 0.162 Inexact Rounded +-- sqtx3473 squareroot 0.263 -> 0.513 Inexact Rounded +-- sqtx3474 squareroot 0.0263 -> 0.162 Inexact Rounded +-- sqtx3475 squareroot 0.264 -> 0.514 Inexact Rounded +-- sqtx3476 squareroot 0.0264 -> 0.162 Inexact Rounded +-- sqtx3477 squareroot 0.265 -> 0.515 Inexact Rounded +-- sqtx3478 squareroot 0.0265 -> 0.163 Inexact Rounded +-- sqtx3479 squareroot 0.266 -> 0.516 Inexact Rounded +-- sqtx3480 squareroot 0.0266 -> 0.163 Inexact Rounded +-- sqtx3481 squareroot 0.267 -> 0.517 Inexact Rounded +-- sqtx3482 squareroot 0.0267 -> 0.163 Inexact Rounded +-- sqtx3483 squareroot 0.268 -> 0.518 Inexact Rounded +-- sqtx3484 squareroot 0.0268 -> 0.164 Inexact Rounded +-- sqtx3485 squareroot 0.269 -> 0.519 Inexact Rounded +-- sqtx3486 squareroot 0.0269 -> 0.164 Inexact Rounded +-- sqtx3487 squareroot 0.271 -> 0.521 Inexact Rounded +-- sqtx3488 squareroot 0.0271 -> 0.165 Inexact Rounded +-- sqtx3489 squareroot 0.272 -> 0.522 Inexact Rounded +-- sqtx3490 squareroot 0.0272 -> 0.165 Inexact Rounded +-- sqtx3491 squareroot 0.273 -> 0.522 Inexact Rounded +-- sqtx3492 squareroot 0.0273 -> 0.165 Inexact Rounded +-- sqtx3493 squareroot 0.274 -> 0.523 Inexact Rounded +-- sqtx3494 squareroot 0.0274 -> 0.166 Inexact Rounded +-- sqtx3495 squareroot 0.275 -> 0.524 Inexact Rounded +-- sqtx3496 squareroot 0.0275 -> 0.166 Inexact Rounded +-- sqtx3497 squareroot 0.276 -> 0.525 Inexact Rounded +-- sqtx3498 squareroot 0.0276 -> 0.166 Inexact Rounded +-- sqtx3499 squareroot 0.277 -> 0.526 Inexact Rounded +-- sqtx3500 squareroot 0.0277 -> 0.166 Inexact Rounded +-- sqtx3501 squareroot 0.278 -> 0.527 Inexact Rounded +-- sqtx3502 squareroot 0.0278 -> 0.167 Inexact Rounded +-- sqtx3503 squareroot 0.279 -> 0.528 Inexact Rounded +-- sqtx3504 squareroot 0.0279 -> 0.167 Inexact Rounded +-- sqtx3505 squareroot 0.281 -> 0.530 Inexact Rounded +-- sqtx3506 squareroot 0.0281 -> 0.168 Inexact Rounded +-- sqtx3507 squareroot 0.282 -> 0.531 Inexact Rounded +-- sqtx3508 squareroot 0.0282 -> 0.168 Inexact Rounded +-- sqtx3509 squareroot 0.283 -> 0.532 Inexact Rounded +-- sqtx3510 squareroot 0.0283 -> 0.168 Inexact Rounded +-- sqtx3511 squareroot 0.284 -> 0.533 Inexact Rounded +-- sqtx3512 squareroot 0.0284 -> 0.169 Inexact Rounded +-- sqtx3513 squareroot 0.285 -> 0.534 Inexact Rounded +-- sqtx3514 squareroot 0.0285 -> 0.169 Inexact Rounded +-- sqtx3515 squareroot 0.286 -> 0.535 Inexact Rounded +-- sqtx3516 squareroot 0.0286 -> 0.169 Inexact Rounded +-- sqtx3517 squareroot 0.287 -> 0.536 Inexact Rounded +-- sqtx3518 squareroot 0.0287 -> 0.169 Inexact Rounded +-- sqtx3519 squareroot 0.288 -> 0.537 Inexact Rounded +-- sqtx3520 squareroot 0.0288 -> 0.170 Inexact Rounded +-- sqtx3521 squareroot 0.289 -> 0.538 Inexact Rounded sqtx3522 squareroot 0.0289 -> 0.17 -sqtx3523 squareroot 0.291 -> 0.539 Inexact Rounded -sqtx3524 squareroot 0.0291 -> 0.171 Inexact Rounded -sqtx3525 squareroot 0.292 -> 0.540 Inexact Rounded -sqtx3526 squareroot 0.0292 -> 0.171 Inexact Rounded -sqtx3527 squareroot 0.293 -> 0.541 Inexact Rounded -sqtx3528 squareroot 0.0293 -> 0.171 Inexact Rounded -sqtx3529 squareroot 0.294 -> 0.542 Inexact Rounded -sqtx3530 squareroot 0.0294 -> 0.171 Inexact Rounded -sqtx3531 squareroot 0.295 -> 0.543 Inexact Rounded -sqtx3532 squareroot 0.0295 -> 0.172 Inexact Rounded -sqtx3533 squareroot 0.296 -> 0.544 Inexact Rounded -sqtx3534 squareroot 0.0296 -> 0.172 Inexact Rounded -sqtx3535 squareroot 0.297 -> 0.545 Inexact Rounded -sqtx3536 squareroot 0.0297 -> 0.172 Inexact Rounded -sqtx3537 squareroot 0.298 -> 0.546 Inexact Rounded -sqtx3538 squareroot 0.0298 -> 0.173 Inexact Rounded -sqtx3539 squareroot 0.299 -> 0.547 Inexact Rounded -sqtx3540 squareroot 0.0299 -> 0.173 Inexact Rounded -sqtx3541 squareroot 0.301 -> 0.549 Inexact Rounded -sqtx3542 squareroot 0.0301 -> 0.173 Inexact Rounded -sqtx3543 squareroot 0.302 -> 0.550 Inexact Rounded -sqtx3544 squareroot 0.0302 -> 0.174 Inexact Rounded -sqtx3545 squareroot 0.303 -> 0.550 Inexact Rounded -sqtx3546 squareroot 0.0303 -> 0.174 Inexact Rounded -sqtx3547 squareroot 0.304 -> 0.551 Inexact Rounded -sqtx3548 squareroot 0.0304 -> 0.174 Inexact Rounded -sqtx3549 squareroot 0.305 -> 0.552 Inexact Rounded -sqtx3550 squareroot 0.0305 -> 0.175 Inexact Rounded -sqtx3551 squareroot 0.306 -> 0.553 Inexact Rounded -sqtx3552 squareroot 0.0306 -> 0.175 Inexact Rounded -sqtx3553 squareroot 0.307 -> 0.554 Inexact Rounded -sqtx3554 squareroot 0.0307 -> 0.175 Inexact Rounded -sqtx3555 squareroot 0.308 -> 0.555 Inexact Rounded -sqtx3556 squareroot 0.0308 -> 0.175 Inexact Rounded -sqtx3557 squareroot 0.309 -> 0.556 Inexact Rounded -sqtx3558 squareroot 0.0309 -> 0.176 Inexact Rounded -sqtx3559 squareroot 0.311 -> 0.558 Inexact Rounded -sqtx3560 squareroot 0.0311 -> 0.176 Inexact Rounded -sqtx3561 squareroot 0.312 -> 0.559 Inexact Rounded -sqtx3562 squareroot 0.0312 -> 0.177 Inexact Rounded -sqtx3563 squareroot 0.313 -> 0.559 Inexact Rounded -sqtx3564 squareroot 0.0313 -> 0.177 Inexact Rounded -sqtx3565 squareroot 0.314 -> 0.560 Inexact Rounded -sqtx3566 squareroot 0.0314 -> 0.177 Inexact Rounded -sqtx3567 squareroot 0.315 -> 0.561 Inexact Rounded -sqtx3568 squareroot 0.0315 -> 0.177 Inexact Rounded -sqtx3569 squareroot 0.316 -> 0.562 Inexact Rounded -sqtx3570 squareroot 0.0316 -> 0.178 Inexact Rounded -sqtx3571 squareroot 0.317 -> 0.563 Inexact Rounded -sqtx3572 squareroot 0.0317 -> 0.178 Inexact Rounded -sqtx3573 squareroot 0.318 -> 0.564 Inexact Rounded -sqtx3574 squareroot 0.0318 -> 0.178 Inexact Rounded -sqtx3575 squareroot 0.319 -> 0.565 Inexact Rounded -sqtx3576 squareroot 0.0319 -> 0.179 Inexact Rounded -sqtx3577 squareroot 0.321 -> 0.567 Inexact Rounded -sqtx3578 squareroot 0.0321 -> 0.179 Inexact Rounded -sqtx3579 squareroot 0.322 -> 0.567 Inexact Rounded -sqtx3580 squareroot 0.0322 -> 0.179 Inexact Rounded -sqtx3581 squareroot 0.323 -> 0.568 Inexact Rounded -sqtx3582 squareroot 0.0323 -> 0.180 Inexact Rounded -sqtx3583 squareroot 0.324 -> 0.569 Inexact Rounded +-- sqtx3523 squareroot 0.291 -> 0.539 Inexact Rounded +-- sqtx3524 squareroot 0.0291 -> 0.171 Inexact Rounded +-- sqtx3525 squareroot 0.292 -> 0.540 Inexact Rounded +-- sqtx3526 squareroot 0.0292 -> 0.171 Inexact Rounded +-- sqtx3527 squareroot 0.293 -> 0.541 Inexact Rounded +-- sqtx3528 squareroot 0.0293 -> 0.171 Inexact Rounded +-- sqtx3529 squareroot 0.294 -> 0.542 Inexact Rounded +-- sqtx3530 squareroot 0.0294 -> 0.171 Inexact Rounded +-- sqtx3531 squareroot 0.295 -> 0.543 Inexact Rounded +-- sqtx3532 squareroot 0.0295 -> 0.172 Inexact Rounded +-- sqtx3533 squareroot 0.296 -> 0.544 Inexact Rounded +-- sqtx3534 squareroot 0.0296 -> 0.172 Inexact Rounded +-- sqtx3535 squareroot 0.297 -> 0.545 Inexact Rounded +-- sqtx3536 squareroot 0.0297 -> 0.172 Inexact Rounded +-- sqtx3537 squareroot 0.298 -> 0.546 Inexact Rounded +-- sqtx3538 squareroot 0.0298 -> 0.173 Inexact Rounded +-- sqtx3539 squareroot 0.299 -> 0.547 Inexact Rounded +-- sqtx3540 squareroot 0.0299 -> 0.173 Inexact Rounded +-- sqtx3541 squareroot 0.301 -> 0.549 Inexact Rounded +-- sqtx3542 squareroot 0.0301 -> 0.173 Inexact Rounded +-- sqtx3543 squareroot 0.302 -> 0.550 Inexact Rounded +-- sqtx3544 squareroot 0.0302 -> 0.174 Inexact Rounded +-- sqtx3545 squareroot 0.303 -> 0.550 Inexact Rounded +-- sqtx3546 squareroot 0.0303 -> 0.174 Inexact Rounded +-- sqtx3547 squareroot 0.304 -> 0.551 Inexact Rounded +-- sqtx3548 squareroot 0.0304 -> 0.174 Inexact Rounded +-- sqtx3549 squareroot 0.305 -> 0.552 Inexact Rounded +-- sqtx3550 squareroot 0.0305 -> 0.175 Inexact Rounded +-- sqtx3551 squareroot 0.306 -> 0.553 Inexact Rounded +-- sqtx3552 squareroot 0.0306 -> 0.175 Inexact Rounded +-- sqtx3553 squareroot 0.307 -> 0.554 Inexact Rounded +-- sqtx3554 squareroot 0.0307 -> 0.175 Inexact Rounded +-- sqtx3555 squareroot 0.308 -> 0.555 Inexact Rounded +-- sqtx3556 squareroot 0.0308 -> 0.175 Inexact Rounded +-- sqtx3557 squareroot 0.309 -> 0.556 Inexact Rounded +-- sqtx3558 squareroot 0.0309 -> 0.176 Inexact Rounded +-- sqtx3559 squareroot 0.311 -> 0.558 Inexact Rounded +-- sqtx3560 squareroot 0.0311 -> 0.176 Inexact Rounded +-- sqtx3561 squareroot 0.312 -> 0.559 Inexact Rounded +-- sqtx3562 squareroot 0.0312 -> 0.177 Inexact Rounded +-- sqtx3563 squareroot 0.313 -> 0.559 Inexact Rounded +-- sqtx3564 squareroot 0.0313 -> 0.177 Inexact Rounded +-- sqtx3565 squareroot 0.314 -> 0.560 Inexact Rounded +-- sqtx3566 squareroot 0.0314 -> 0.177 Inexact Rounded +-- sqtx3567 squareroot 0.315 -> 0.561 Inexact Rounded +-- sqtx3568 squareroot 0.0315 -> 0.177 Inexact Rounded +-- sqtx3569 squareroot 0.316 -> 0.562 Inexact Rounded +-- sqtx3570 squareroot 0.0316 -> 0.178 Inexact Rounded +-- sqtx3571 squareroot 0.317 -> 0.563 Inexact Rounded +-- sqtx3572 squareroot 0.0317 -> 0.178 Inexact Rounded +-- sqtx3573 squareroot 0.318 -> 0.564 Inexact Rounded +-- sqtx3574 squareroot 0.0318 -> 0.178 Inexact Rounded +-- sqtx3575 squareroot 0.319 -> 0.565 Inexact Rounded +-- sqtx3576 squareroot 0.0319 -> 0.179 Inexact Rounded +-- sqtx3577 squareroot 0.321 -> 0.567 Inexact Rounded +-- sqtx3578 squareroot 0.0321 -> 0.179 Inexact Rounded +-- sqtx3579 squareroot 0.322 -> 0.567 Inexact Rounded +-- sqtx3580 squareroot 0.0322 -> 0.179 Inexact Rounded +-- sqtx3581 squareroot 0.323 -> 0.568 Inexact Rounded +-- sqtx3582 squareroot 0.0323 -> 0.180 Inexact Rounded +-- sqtx3583 squareroot 0.324 -> 0.569 Inexact Rounded sqtx3584 squareroot 0.0324 -> 0.18 -sqtx3585 squareroot 0.325 -> 0.570 Inexact Rounded -sqtx3586 squareroot 0.0325 -> 0.180 Inexact Rounded -sqtx3587 squareroot 0.326 -> 0.571 Inexact Rounded -sqtx3588 squareroot 0.0326 -> 0.181 Inexact Rounded -sqtx3589 squareroot 0.327 -> 0.572 Inexact Rounded -sqtx3590 squareroot 0.0327 -> 0.181 Inexact Rounded -sqtx3591 squareroot 0.328 -> 0.573 Inexact Rounded -sqtx3592 squareroot 0.0328 -> 0.181 Inexact Rounded -sqtx3593 squareroot 0.329 -> 0.574 Inexact Rounded -sqtx3594 squareroot 0.0329 -> 0.181 Inexact Rounded -sqtx3595 squareroot 0.331 -> 0.575 Inexact Rounded -sqtx3596 squareroot 0.0331 -> 0.182 Inexact Rounded -sqtx3597 squareroot 0.332 -> 0.576 Inexact Rounded -sqtx3598 squareroot 0.0332 -> 0.182 Inexact Rounded -sqtx3599 squareroot 0.333 -> 0.577 Inexact Rounded -sqtx3600 squareroot 0.0333 -> 0.182 Inexact Rounded -sqtx3601 squareroot 0.334 -> 0.578 Inexact Rounded -sqtx3602 squareroot 0.0334 -> 0.183 Inexact Rounded -sqtx3603 squareroot 0.335 -> 0.579 Inexact Rounded -sqtx3604 squareroot 0.0335 -> 0.183 Inexact Rounded -sqtx3605 squareroot 0.336 -> 0.580 Inexact Rounded -sqtx3606 squareroot 0.0336 -> 0.183 Inexact Rounded -sqtx3607 squareroot 0.337 -> 0.581 Inexact Rounded -sqtx3608 squareroot 0.0337 -> 0.184 Inexact Rounded -sqtx3609 squareroot 0.338 -> 0.581 Inexact Rounded -sqtx3610 squareroot 0.0338 -> 0.184 Inexact Rounded -sqtx3611 squareroot 0.339 -> 0.582 Inexact Rounded -sqtx3612 squareroot 0.0339 -> 0.184 Inexact Rounded -sqtx3613 squareroot 0.341 -> 0.584 Inexact Rounded -sqtx3614 squareroot 0.0341 -> 0.185 Inexact Rounded -sqtx3615 squareroot 0.342 -> 0.585 Inexact Rounded -sqtx3616 squareroot 0.0342 -> 0.185 Inexact Rounded -sqtx3617 squareroot 0.343 -> 0.586 Inexact Rounded -sqtx3618 squareroot 0.0343 -> 0.185 Inexact Rounded -sqtx3619 squareroot 0.344 -> 0.587 Inexact Rounded -sqtx3620 squareroot 0.0344 -> 0.185 Inexact Rounded -sqtx3621 squareroot 0.345 -> 0.587 Inexact Rounded -sqtx3622 squareroot 0.0345 -> 0.186 Inexact Rounded -sqtx3623 squareroot 0.346 -> 0.588 Inexact Rounded -sqtx3624 squareroot 0.0346 -> 0.186 Inexact Rounded -sqtx3625 squareroot 0.347 -> 0.589 Inexact Rounded -sqtx3626 squareroot 0.0347 -> 0.186 Inexact Rounded -sqtx3627 squareroot 0.348 -> 0.590 Inexact Rounded -sqtx3628 squareroot 0.0348 -> 0.187 Inexact Rounded -sqtx3629 squareroot 0.349 -> 0.591 Inexact Rounded -sqtx3630 squareroot 0.0349 -> 0.187 Inexact Rounded -sqtx3631 squareroot 0.351 -> 0.592 Inexact Rounded -sqtx3632 squareroot 0.0351 -> 0.187 Inexact Rounded -sqtx3633 squareroot 0.352 -> 0.593 Inexact Rounded -sqtx3634 squareroot 0.0352 -> 0.188 Inexact Rounded -sqtx3635 squareroot 0.353 -> 0.594 Inexact Rounded -sqtx3636 squareroot 0.0353 -> 0.188 Inexact Rounded -sqtx3637 squareroot 0.354 -> 0.595 Inexact Rounded -sqtx3638 squareroot 0.0354 -> 0.188 Inexact Rounded -sqtx3639 squareroot 0.355 -> 0.596 Inexact Rounded -sqtx3640 squareroot 0.0355 -> 0.188 Inexact Rounded -sqtx3641 squareroot 0.356 -> 0.597 Inexact Rounded -sqtx3642 squareroot 0.0356 -> 0.189 Inexact Rounded -sqtx3643 squareroot 0.357 -> 0.597 Inexact Rounded -sqtx3644 squareroot 0.0357 -> 0.189 Inexact Rounded -sqtx3645 squareroot 0.358 -> 0.598 Inexact Rounded -sqtx3646 squareroot 0.0358 -> 0.189 Inexact Rounded -sqtx3647 squareroot 0.359 -> 0.599 Inexact Rounded -sqtx3648 squareroot 0.0359 -> 0.189 Inexact Rounded -sqtx3649 squareroot 0.361 -> 0.601 Inexact Rounded +-- sqtx3585 squareroot 0.325 -> 0.570 Inexact Rounded +-- sqtx3586 squareroot 0.0325 -> 0.180 Inexact Rounded +-- sqtx3587 squareroot 0.326 -> 0.571 Inexact Rounded +-- sqtx3588 squareroot 0.0326 -> 0.181 Inexact Rounded +-- sqtx3589 squareroot 0.327 -> 0.572 Inexact Rounded +-- sqtx3590 squareroot 0.0327 -> 0.181 Inexact Rounded +-- sqtx3591 squareroot 0.328 -> 0.573 Inexact Rounded +-- sqtx3592 squareroot 0.0328 -> 0.181 Inexact Rounded +-- sqtx3593 squareroot 0.329 -> 0.574 Inexact Rounded +-- sqtx3594 squareroot 0.0329 -> 0.181 Inexact Rounded +-- sqtx3595 squareroot 0.331 -> 0.575 Inexact Rounded +-- sqtx3596 squareroot 0.0331 -> 0.182 Inexact Rounded +-- sqtx3597 squareroot 0.332 -> 0.576 Inexact Rounded +-- sqtx3598 squareroot 0.0332 -> 0.182 Inexact Rounded +-- sqtx3599 squareroot 0.333 -> 0.577 Inexact Rounded +-- sqtx3600 squareroot 0.0333 -> 0.182 Inexact Rounded +-- sqtx3601 squareroot 0.334 -> 0.578 Inexact Rounded +-- sqtx3602 squareroot 0.0334 -> 0.183 Inexact Rounded +-- sqtx3603 squareroot 0.335 -> 0.579 Inexact Rounded +-- sqtx3604 squareroot 0.0335 -> 0.183 Inexact Rounded +-- sqtx3605 squareroot 0.336 -> 0.580 Inexact Rounded +-- sqtx3606 squareroot 0.0336 -> 0.183 Inexact Rounded +-- sqtx3607 squareroot 0.337 -> 0.581 Inexact Rounded +-- sqtx3608 squareroot 0.0337 -> 0.184 Inexact Rounded +-- sqtx3609 squareroot 0.338 -> 0.581 Inexact Rounded +-- sqtx3610 squareroot 0.0338 -> 0.184 Inexact Rounded +-- sqtx3611 squareroot 0.339 -> 0.582 Inexact Rounded +-- sqtx3612 squareroot 0.0339 -> 0.184 Inexact Rounded +-- sqtx3613 squareroot 0.341 -> 0.584 Inexact Rounded +-- sqtx3614 squareroot 0.0341 -> 0.185 Inexact Rounded +-- sqtx3615 squareroot 0.342 -> 0.585 Inexact Rounded +-- sqtx3616 squareroot 0.0342 -> 0.185 Inexact Rounded +-- sqtx3617 squareroot 0.343 -> 0.586 Inexact Rounded +-- sqtx3618 squareroot 0.0343 -> 0.185 Inexact Rounded +-- sqtx3619 squareroot 0.344 -> 0.587 Inexact Rounded +-- sqtx3620 squareroot 0.0344 -> 0.185 Inexact Rounded +-- sqtx3621 squareroot 0.345 -> 0.587 Inexact Rounded +-- sqtx3622 squareroot 0.0345 -> 0.186 Inexact Rounded +-- sqtx3623 squareroot 0.346 -> 0.588 Inexact Rounded +-- sqtx3624 squareroot 0.0346 -> 0.186 Inexact Rounded +-- sqtx3625 squareroot 0.347 -> 0.589 Inexact Rounded +-- sqtx3626 squareroot 0.0347 -> 0.186 Inexact Rounded +-- sqtx3627 squareroot 0.348 -> 0.590 Inexact Rounded +-- sqtx3628 squareroot 0.0348 -> 0.187 Inexact Rounded +-- sqtx3629 squareroot 0.349 -> 0.591 Inexact Rounded +-- sqtx3630 squareroot 0.0349 -> 0.187 Inexact Rounded +-- sqtx3631 squareroot 0.351 -> 0.592 Inexact Rounded +-- sqtx3632 squareroot 0.0351 -> 0.187 Inexact Rounded +-- sqtx3633 squareroot 0.352 -> 0.593 Inexact Rounded +-- sqtx3634 squareroot 0.0352 -> 0.188 Inexact Rounded +-- sqtx3635 squareroot 0.353 -> 0.594 Inexact Rounded +-- sqtx3636 squareroot 0.0353 -> 0.188 Inexact Rounded +-- sqtx3637 squareroot 0.354 -> 0.595 Inexact Rounded +-- sqtx3638 squareroot 0.0354 -> 0.188 Inexact Rounded +-- sqtx3639 squareroot 0.355 -> 0.596 Inexact Rounded +-- sqtx3640 squareroot 0.0355 -> 0.188 Inexact Rounded +-- sqtx3641 squareroot 0.356 -> 0.597 Inexact Rounded +-- sqtx3642 squareroot 0.0356 -> 0.189 Inexact Rounded +-- sqtx3643 squareroot 0.357 -> 0.597 Inexact Rounded +-- sqtx3644 squareroot 0.0357 -> 0.189 Inexact Rounded +-- sqtx3645 squareroot 0.358 -> 0.598 Inexact Rounded +-- sqtx3646 squareroot 0.0358 -> 0.189 Inexact Rounded +-- sqtx3647 squareroot 0.359 -> 0.599 Inexact Rounded +-- sqtx3648 squareroot 0.0359 -> 0.189 Inexact Rounded +-- sqtx3649 squareroot 0.361 -> 0.601 Inexact Rounded sqtx3650 squareroot 0.0361 -> 0.19 -sqtx3651 squareroot 0.362 -> 0.602 Inexact Rounded -sqtx3652 squareroot 0.0362 -> 0.190 Inexact Rounded -sqtx3653 squareroot 0.363 -> 0.602 Inexact Rounded -sqtx3654 squareroot 0.0363 -> 0.191 Inexact Rounded -sqtx3655 squareroot 0.364 -> 0.603 Inexact Rounded -sqtx3656 squareroot 0.0364 -> 0.191 Inexact Rounded -sqtx3657 squareroot 0.365 -> 0.604 Inexact Rounded -sqtx3658 squareroot 0.0365 -> 0.191 Inexact Rounded -sqtx3659 squareroot 0.366 -> 0.605 Inexact Rounded -sqtx3660 squareroot 0.0366 -> 0.191 Inexact Rounded -sqtx3661 squareroot 0.367 -> 0.606 Inexact Rounded -sqtx3662 squareroot 0.0367 -> 0.192 Inexact Rounded -sqtx3663 squareroot 0.368 -> 0.607 Inexact Rounded -sqtx3664 squareroot 0.0368 -> 0.192 Inexact Rounded -sqtx3665 squareroot 0.369 -> 0.607 Inexact Rounded -sqtx3666 squareroot 0.0369 -> 0.192 Inexact Rounded -sqtx3667 squareroot 0.371 -> 0.609 Inexact Rounded -sqtx3668 squareroot 0.0371 -> 0.193 Inexact Rounded -sqtx3669 squareroot 0.372 -> 0.610 Inexact Rounded -sqtx3670 squareroot 0.0372 -> 0.193 Inexact Rounded -sqtx3671 squareroot 0.373 -> 0.611 Inexact Rounded -sqtx3672 squareroot 0.0373 -> 0.193 Inexact Rounded -sqtx3673 squareroot 0.374 -> 0.612 Inexact Rounded -sqtx3674 squareroot 0.0374 -> 0.193 Inexact Rounded -sqtx3675 squareroot 0.375 -> 0.612 Inexact Rounded -sqtx3676 squareroot 0.0375 -> 0.194 Inexact Rounded -sqtx3677 squareroot 0.376 -> 0.613 Inexact Rounded -sqtx3678 squareroot 0.0376 -> 0.194 Inexact Rounded -sqtx3679 squareroot 0.377 -> 0.614 Inexact Rounded -sqtx3680 squareroot 0.0377 -> 0.194 Inexact Rounded -sqtx3681 squareroot 0.378 -> 0.615 Inexact Rounded -sqtx3682 squareroot 0.0378 -> 0.194 Inexact Rounded -sqtx3683 squareroot 0.379 -> 0.616 Inexact Rounded -sqtx3684 squareroot 0.0379 -> 0.195 Inexact Rounded -sqtx3685 squareroot 0.381 -> 0.617 Inexact Rounded -sqtx3686 squareroot 0.0381 -> 0.195 Inexact Rounded -sqtx3687 squareroot 0.382 -> 0.618 Inexact Rounded -sqtx3688 squareroot 0.0382 -> 0.195 Inexact Rounded -sqtx3689 squareroot 0.383 -> 0.619 Inexact Rounded -sqtx3690 squareroot 0.0383 -> 0.196 Inexact Rounded -sqtx3691 squareroot 0.384 -> 0.620 Inexact Rounded -sqtx3692 squareroot 0.0384 -> 0.196 Inexact Rounded -sqtx3693 squareroot 0.385 -> 0.620 Inexact Rounded -sqtx3694 squareroot 0.0385 -> 0.196 Inexact Rounded -sqtx3695 squareroot 0.386 -> 0.621 Inexact Rounded -sqtx3696 squareroot 0.0386 -> 0.196 Inexact Rounded -sqtx3697 squareroot 0.387 -> 0.622 Inexact Rounded -sqtx3698 squareroot 0.0387 -> 0.197 Inexact Rounded -sqtx3699 squareroot 0.388 -> 0.623 Inexact Rounded -sqtx3700 squareroot 0.0388 -> 0.197 Inexact Rounded -sqtx3701 squareroot 0.389 -> 0.624 Inexact Rounded -sqtx3702 squareroot 0.0389 -> 0.197 Inexact Rounded -sqtx3703 squareroot 0.391 -> 0.625 Inexact Rounded -sqtx3704 squareroot 0.0391 -> 0.198 Inexact Rounded -sqtx3705 squareroot 0.392 -> 0.626 Inexact Rounded -sqtx3706 squareroot 0.0392 -> 0.198 Inexact Rounded -sqtx3707 squareroot 0.393 -> 0.627 Inexact Rounded -sqtx3708 squareroot 0.0393 -> 0.198 Inexact Rounded -sqtx3709 squareroot 0.394 -> 0.628 Inexact Rounded -sqtx3710 squareroot 0.0394 -> 0.198 Inexact Rounded -sqtx3711 squareroot 0.395 -> 0.628 Inexact Rounded -sqtx3712 squareroot 0.0395 -> 0.199 Inexact Rounded -sqtx3713 squareroot 0.396 -> 0.629 Inexact Rounded -sqtx3714 squareroot 0.0396 -> 0.199 Inexact Rounded -sqtx3715 squareroot 0.397 -> 0.630 Inexact Rounded -sqtx3716 squareroot 0.0397 -> 0.199 Inexact Rounded -sqtx3717 squareroot 0.398 -> 0.631 Inexact Rounded -sqtx3718 squareroot 0.0398 -> 0.199 Inexact Rounded -sqtx3719 squareroot 0.399 -> 0.632 Inexact Rounded -sqtx3720 squareroot 0.0399 -> 0.200 Inexact Rounded -sqtx3721 squareroot 0.401 -> 0.633 Inexact Rounded -sqtx3722 squareroot 0.0401 -> 0.200 Inexact Rounded -sqtx3723 squareroot 0.402 -> 0.634 Inexact Rounded -sqtx3724 squareroot 0.0402 -> 0.200 Inexact Rounded -sqtx3725 squareroot 0.403 -> 0.635 Inexact Rounded -sqtx3726 squareroot 0.0403 -> 0.201 Inexact Rounded -sqtx3727 squareroot 0.404 -> 0.636 Inexact Rounded -sqtx3728 squareroot 0.0404 -> 0.201 Inexact Rounded -sqtx3729 squareroot 0.405 -> 0.636 Inexact Rounded -sqtx3730 squareroot 0.0405 -> 0.201 Inexact Rounded -sqtx3731 squareroot 0.406 -> 0.637 Inexact Rounded -sqtx3732 squareroot 0.0406 -> 0.201 Inexact Rounded -sqtx3733 squareroot 0.407 -> 0.638 Inexact Rounded -sqtx3734 squareroot 0.0407 -> 0.202 Inexact Rounded -sqtx3735 squareroot 0.408 -> 0.639 Inexact Rounded -sqtx3736 squareroot 0.0408 -> 0.202 Inexact Rounded -sqtx3737 squareroot 0.409 -> 0.640 Inexact Rounded -sqtx3738 squareroot 0.0409 -> 0.202 Inexact Rounded -sqtx3739 squareroot 0.411 -> 0.641 Inexact Rounded -sqtx3740 squareroot 0.0411 -> 0.203 Inexact Rounded -sqtx3741 squareroot 0.412 -> 0.642 Inexact Rounded -sqtx3742 squareroot 0.0412 -> 0.203 Inexact Rounded -sqtx3743 squareroot 0.413 -> 0.643 Inexact Rounded -sqtx3744 squareroot 0.0413 -> 0.203 Inexact Rounded -sqtx3745 squareroot 0.414 -> 0.643 Inexact Rounded -sqtx3746 squareroot 0.0414 -> 0.203 Inexact Rounded -sqtx3747 squareroot 0.415 -> 0.644 Inexact Rounded -sqtx3748 squareroot 0.0415 -> 0.204 Inexact Rounded -sqtx3749 squareroot 0.416 -> 0.645 Inexact Rounded -sqtx3750 squareroot 0.0416 -> 0.204 Inexact Rounded -sqtx3751 squareroot 0.417 -> 0.646 Inexact Rounded -sqtx3752 squareroot 0.0417 -> 0.204 Inexact Rounded -sqtx3753 squareroot 0.418 -> 0.647 Inexact Rounded -sqtx3754 squareroot 0.0418 -> 0.204 Inexact Rounded -sqtx3755 squareroot 0.419 -> 0.647 Inexact Rounded -sqtx3756 squareroot 0.0419 -> 0.205 Inexact Rounded -sqtx3757 squareroot 0.421 -> 0.649 Inexact Rounded -sqtx3758 squareroot 0.0421 -> 0.205 Inexact Rounded -sqtx3759 squareroot 0.422 -> 0.650 Inexact Rounded -sqtx3760 squareroot 0.0422 -> 0.205 Inexact Rounded -sqtx3761 squareroot 0.423 -> 0.650 Inexact Rounded -sqtx3762 squareroot 0.0423 -> 0.206 Inexact Rounded -sqtx3763 squareroot 0.424 -> 0.651 Inexact Rounded -sqtx3764 squareroot 0.0424 -> 0.206 Inexact Rounded -sqtx3765 squareroot 0.425 -> 0.652 Inexact Rounded -sqtx3766 squareroot 0.0425 -> 0.206 Inexact Rounded -sqtx3767 squareroot 0.426 -> 0.653 Inexact Rounded -sqtx3768 squareroot 0.0426 -> 0.206 Inexact Rounded -sqtx3769 squareroot 0.427 -> 0.653 Inexact Rounded -sqtx3770 squareroot 0.0427 -> 0.207 Inexact Rounded -sqtx3771 squareroot 0.428 -> 0.654 Inexact Rounded -sqtx3772 squareroot 0.0428 -> 0.207 Inexact Rounded -sqtx3773 squareroot 0.429 -> 0.655 Inexact Rounded -sqtx3774 squareroot 0.0429 -> 0.207 Inexact Rounded -sqtx3775 squareroot 0.431 -> 0.657 Inexact Rounded -sqtx3776 squareroot 0.0431 -> 0.208 Inexact Rounded -sqtx3777 squareroot 0.432 -> 0.657 Inexact Rounded -sqtx3778 squareroot 0.0432 -> 0.208 Inexact Rounded -sqtx3779 squareroot 0.433 -> 0.658 Inexact Rounded -sqtx3780 squareroot 0.0433 -> 0.208 Inexact Rounded -sqtx3781 squareroot 0.434 -> 0.659 Inexact Rounded -sqtx3782 squareroot 0.0434 -> 0.208 Inexact Rounded -sqtx3783 squareroot 0.435 -> 0.660 Inexact Rounded -sqtx3784 squareroot 0.0435 -> 0.209 Inexact Rounded -sqtx3785 squareroot 0.436 -> 0.660 Inexact Rounded -sqtx3786 squareroot 0.0436 -> 0.209 Inexact Rounded -sqtx3787 squareroot 0.437 -> 0.661 Inexact Rounded -sqtx3788 squareroot 0.0437 -> 0.209 Inexact Rounded -sqtx3789 squareroot 0.438 -> 0.662 Inexact Rounded -sqtx3790 squareroot 0.0438 -> 0.209 Inexact Rounded -sqtx3791 squareroot 0.439 -> 0.663 Inexact Rounded -sqtx3792 squareroot 0.0439 -> 0.210 Inexact Rounded -sqtx3793 squareroot 0.441 -> 0.664 Inexact Rounded +-- sqtx3651 squareroot 0.362 -> 0.602 Inexact Rounded +-- sqtx3652 squareroot 0.0362 -> 0.190 Inexact Rounded +-- sqtx3653 squareroot 0.363 -> 0.602 Inexact Rounded +-- sqtx3654 squareroot 0.0363 -> 0.191 Inexact Rounded +-- sqtx3655 squareroot 0.364 -> 0.603 Inexact Rounded +-- sqtx3656 squareroot 0.0364 -> 0.191 Inexact Rounded +-- sqtx3657 squareroot 0.365 -> 0.604 Inexact Rounded +-- sqtx3658 squareroot 0.0365 -> 0.191 Inexact Rounded +-- sqtx3659 squareroot 0.366 -> 0.605 Inexact Rounded +-- sqtx3660 squareroot 0.0366 -> 0.191 Inexact Rounded +-- sqtx3661 squareroot 0.367 -> 0.606 Inexact Rounded +-- sqtx3662 squareroot 0.0367 -> 0.192 Inexact Rounded +-- sqtx3663 squareroot 0.368 -> 0.607 Inexact Rounded +-- sqtx3664 squareroot 0.0368 -> 0.192 Inexact Rounded +-- sqtx3665 squareroot 0.369 -> 0.607 Inexact Rounded +-- sqtx3666 squareroot 0.0369 -> 0.192 Inexact Rounded +-- sqtx3667 squareroot 0.371 -> 0.609 Inexact Rounded +-- sqtx3668 squareroot 0.0371 -> 0.193 Inexact Rounded +-- sqtx3669 squareroot 0.372 -> 0.610 Inexact Rounded +-- sqtx3670 squareroot 0.0372 -> 0.193 Inexact Rounded +-- sqtx3671 squareroot 0.373 -> 0.611 Inexact Rounded +-- sqtx3672 squareroot 0.0373 -> 0.193 Inexact Rounded +-- sqtx3673 squareroot 0.374 -> 0.612 Inexact Rounded +-- sqtx3674 squareroot 0.0374 -> 0.193 Inexact Rounded +-- sqtx3675 squareroot 0.375 -> 0.612 Inexact Rounded +-- sqtx3676 squareroot 0.0375 -> 0.194 Inexact Rounded +-- sqtx3677 squareroot 0.376 -> 0.613 Inexact Rounded +-- sqtx3678 squareroot 0.0376 -> 0.194 Inexact Rounded +-- sqtx3679 squareroot 0.377 -> 0.614 Inexact Rounded +-- sqtx3680 squareroot 0.0377 -> 0.194 Inexact Rounded +-- sqtx3681 squareroot 0.378 -> 0.615 Inexact Rounded +-- sqtx3682 squareroot 0.0378 -> 0.194 Inexact Rounded +-- sqtx3683 squareroot 0.379 -> 0.616 Inexact Rounded +-- sqtx3684 squareroot 0.0379 -> 0.195 Inexact Rounded +-- sqtx3685 squareroot 0.381 -> 0.617 Inexact Rounded +-- sqtx3686 squareroot 0.0381 -> 0.195 Inexact Rounded +-- sqtx3687 squareroot 0.382 -> 0.618 Inexact Rounded +-- sqtx3688 squareroot 0.0382 -> 0.195 Inexact Rounded +-- sqtx3689 squareroot 0.383 -> 0.619 Inexact Rounded +-- sqtx3690 squareroot 0.0383 -> 0.196 Inexact Rounded +-- sqtx3691 squareroot 0.384 -> 0.620 Inexact Rounded +-- sqtx3692 squareroot 0.0384 -> 0.196 Inexact Rounded +-- sqtx3693 squareroot 0.385 -> 0.620 Inexact Rounded +-- sqtx3694 squareroot 0.0385 -> 0.196 Inexact Rounded +-- sqtx3695 squareroot 0.386 -> 0.621 Inexact Rounded +-- sqtx3696 squareroot 0.0386 -> 0.196 Inexact Rounded +-- sqtx3697 squareroot 0.387 -> 0.622 Inexact Rounded +-- sqtx3698 squareroot 0.0387 -> 0.197 Inexact Rounded +-- sqtx3699 squareroot 0.388 -> 0.623 Inexact Rounded +-- sqtx3700 squareroot 0.0388 -> 0.197 Inexact Rounded +-- sqtx3701 squareroot 0.389 -> 0.624 Inexact Rounded +-- sqtx3702 squareroot 0.0389 -> 0.197 Inexact Rounded +-- sqtx3703 squareroot 0.391 -> 0.625 Inexact Rounded +-- sqtx3704 squareroot 0.0391 -> 0.198 Inexact Rounded +-- sqtx3705 squareroot 0.392 -> 0.626 Inexact Rounded +-- sqtx3706 squareroot 0.0392 -> 0.198 Inexact Rounded +-- sqtx3707 squareroot 0.393 -> 0.627 Inexact Rounded +-- sqtx3708 squareroot 0.0393 -> 0.198 Inexact Rounded +-- sqtx3709 squareroot 0.394 -> 0.628 Inexact Rounded +-- sqtx3710 squareroot 0.0394 -> 0.198 Inexact Rounded +-- sqtx3711 squareroot 0.395 -> 0.628 Inexact Rounded +-- sqtx3712 squareroot 0.0395 -> 0.199 Inexact Rounded +-- sqtx3713 squareroot 0.396 -> 0.629 Inexact Rounded +-- sqtx3714 squareroot 0.0396 -> 0.199 Inexact Rounded +-- sqtx3715 squareroot 0.397 -> 0.630 Inexact Rounded +-- sqtx3716 squareroot 0.0397 -> 0.199 Inexact Rounded +-- sqtx3717 squareroot 0.398 -> 0.631 Inexact Rounded +-- sqtx3718 squareroot 0.0398 -> 0.199 Inexact Rounded +-- sqtx3719 squareroot 0.399 -> 0.632 Inexact Rounded +-- sqtx3720 squareroot 0.0399 -> 0.200 Inexact Rounded +-- sqtx3721 squareroot 0.401 -> 0.633 Inexact Rounded +-- sqtx3722 squareroot 0.0401 -> 0.200 Inexact Rounded +-- sqtx3723 squareroot 0.402 -> 0.634 Inexact Rounded +-- sqtx3724 squareroot 0.0402 -> 0.200 Inexact Rounded +-- sqtx3725 squareroot 0.403 -> 0.635 Inexact Rounded +-- sqtx3726 squareroot 0.0403 -> 0.201 Inexact Rounded +-- sqtx3727 squareroot 0.404 -> 0.636 Inexact Rounded +-- sqtx3728 squareroot 0.0404 -> 0.201 Inexact Rounded +-- sqtx3729 squareroot 0.405 -> 0.636 Inexact Rounded +-- sqtx3730 squareroot 0.0405 -> 0.201 Inexact Rounded +-- sqtx3731 squareroot 0.406 -> 0.637 Inexact Rounded +-- sqtx3732 squareroot 0.0406 -> 0.201 Inexact Rounded +-- sqtx3733 squareroot 0.407 -> 0.638 Inexact Rounded +-- sqtx3734 squareroot 0.0407 -> 0.202 Inexact Rounded +-- sqtx3735 squareroot 0.408 -> 0.639 Inexact Rounded +-- sqtx3736 squareroot 0.0408 -> 0.202 Inexact Rounded +-- sqtx3737 squareroot 0.409 -> 0.640 Inexact Rounded +-- sqtx3738 squareroot 0.0409 -> 0.202 Inexact Rounded +-- sqtx3739 squareroot 0.411 -> 0.641 Inexact Rounded +-- sqtx3740 squareroot 0.0411 -> 0.203 Inexact Rounded +-- sqtx3741 squareroot 0.412 -> 0.642 Inexact Rounded +-- sqtx3742 squareroot 0.0412 -> 0.203 Inexact Rounded +-- sqtx3743 squareroot 0.413 -> 0.643 Inexact Rounded +-- sqtx3744 squareroot 0.0413 -> 0.203 Inexact Rounded +-- sqtx3745 squareroot 0.414 -> 0.643 Inexact Rounded +-- sqtx3746 squareroot 0.0414 -> 0.203 Inexact Rounded +-- sqtx3747 squareroot 0.415 -> 0.644 Inexact Rounded +-- sqtx3748 squareroot 0.0415 -> 0.204 Inexact Rounded +-- sqtx3749 squareroot 0.416 -> 0.645 Inexact Rounded +-- sqtx3750 squareroot 0.0416 -> 0.204 Inexact Rounded +-- sqtx3751 squareroot 0.417 -> 0.646 Inexact Rounded +-- sqtx3752 squareroot 0.0417 -> 0.204 Inexact Rounded +-- sqtx3753 squareroot 0.418 -> 0.647 Inexact Rounded +-- sqtx3754 squareroot 0.0418 -> 0.204 Inexact Rounded +-- sqtx3755 squareroot 0.419 -> 0.647 Inexact Rounded +-- sqtx3756 squareroot 0.0419 -> 0.205 Inexact Rounded +-- sqtx3757 squareroot 0.421 -> 0.649 Inexact Rounded +-- sqtx3758 squareroot 0.0421 -> 0.205 Inexact Rounded +-- sqtx3759 squareroot 0.422 -> 0.650 Inexact Rounded +-- sqtx3760 squareroot 0.0422 -> 0.205 Inexact Rounded +-- sqtx3761 squareroot 0.423 -> 0.650 Inexact Rounded +-- sqtx3762 squareroot 0.0423 -> 0.206 Inexact Rounded +-- sqtx3763 squareroot 0.424 -> 0.651 Inexact Rounded +-- sqtx3764 squareroot 0.0424 -> 0.206 Inexact Rounded +-- sqtx3765 squareroot 0.425 -> 0.652 Inexact Rounded +-- sqtx3766 squareroot 0.0425 -> 0.206 Inexact Rounded +-- sqtx3767 squareroot 0.426 -> 0.653 Inexact Rounded +-- sqtx3768 squareroot 0.0426 -> 0.206 Inexact Rounded +-- sqtx3769 squareroot 0.427 -> 0.653 Inexact Rounded +-- sqtx3770 squareroot 0.0427 -> 0.207 Inexact Rounded +-- sqtx3771 squareroot 0.428 -> 0.654 Inexact Rounded +-- sqtx3772 squareroot 0.0428 -> 0.207 Inexact Rounded +-- sqtx3773 squareroot 0.429 -> 0.655 Inexact Rounded +-- sqtx3774 squareroot 0.0429 -> 0.207 Inexact Rounded +-- sqtx3775 squareroot 0.431 -> 0.657 Inexact Rounded +-- sqtx3776 squareroot 0.0431 -> 0.208 Inexact Rounded +-- sqtx3777 squareroot 0.432 -> 0.657 Inexact Rounded +-- sqtx3778 squareroot 0.0432 -> 0.208 Inexact Rounded +-- sqtx3779 squareroot 0.433 -> 0.658 Inexact Rounded +-- sqtx3780 squareroot 0.0433 -> 0.208 Inexact Rounded +-- sqtx3781 squareroot 0.434 -> 0.659 Inexact Rounded +-- sqtx3782 squareroot 0.0434 -> 0.208 Inexact Rounded +-- sqtx3783 squareroot 0.435 -> 0.660 Inexact Rounded +-- sqtx3784 squareroot 0.0435 -> 0.209 Inexact Rounded +-- sqtx3785 squareroot 0.436 -> 0.660 Inexact Rounded +-- sqtx3786 squareroot 0.0436 -> 0.209 Inexact Rounded +-- sqtx3787 squareroot 0.437 -> 0.661 Inexact Rounded +-- sqtx3788 squareroot 0.0437 -> 0.209 Inexact Rounded +-- sqtx3789 squareroot 0.438 -> 0.662 Inexact Rounded +-- sqtx3790 squareroot 0.0438 -> 0.209 Inexact Rounded +-- sqtx3791 squareroot 0.439 -> 0.663 Inexact Rounded +-- sqtx3792 squareroot 0.0439 -> 0.210 Inexact Rounded +-- sqtx3793 squareroot 0.441 -> 0.664 Inexact Rounded sqtx3794 squareroot 0.0441 -> 0.21 -sqtx3795 squareroot 0.442 -> 0.665 Inexact Rounded -sqtx3796 squareroot 0.0442 -> 0.210 Inexact Rounded -sqtx3797 squareroot 0.443 -> 0.666 Inexact Rounded -sqtx3798 squareroot 0.0443 -> 0.210 Inexact Rounded -sqtx3799 squareroot 0.444 -> 0.666 Inexact Rounded -sqtx3800 squareroot 0.0444 -> 0.211 Inexact Rounded -sqtx3801 squareroot 0.445 -> 0.667 Inexact Rounded -sqtx3802 squareroot 0.0445 -> 0.211 Inexact Rounded -sqtx3803 squareroot 0.446 -> 0.668 Inexact Rounded -sqtx3804 squareroot 0.0446 -> 0.211 Inexact Rounded -sqtx3805 squareroot 0.447 -> 0.669 Inexact Rounded -sqtx3806 squareroot 0.0447 -> 0.211 Inexact Rounded -sqtx3807 squareroot 0.448 -> 0.669 Inexact Rounded -sqtx3808 squareroot 0.0448 -> 0.212 Inexact Rounded -sqtx3809 squareroot 0.449 -> 0.670 Inexact Rounded -sqtx3810 squareroot 0.0449 -> 0.212 Inexact Rounded -sqtx3811 squareroot 0.451 -> 0.672 Inexact Rounded -sqtx3812 squareroot 0.0451 -> 0.212 Inexact Rounded -sqtx3813 squareroot 0.452 -> 0.672 Inexact Rounded -sqtx3814 squareroot 0.0452 -> 0.213 Inexact Rounded -sqtx3815 squareroot 0.453 -> 0.673 Inexact Rounded -sqtx3816 squareroot 0.0453 -> 0.213 Inexact Rounded -sqtx3817 squareroot 0.454 -> 0.674 Inexact Rounded -sqtx3818 squareroot 0.0454 -> 0.213 Inexact Rounded -sqtx3819 squareroot 0.455 -> 0.675 Inexact Rounded -sqtx3820 squareroot 0.0455 -> 0.213 Inexact Rounded -sqtx3821 squareroot 0.456 -> 0.675 Inexact Rounded -sqtx3822 squareroot 0.0456 -> 0.214 Inexact Rounded -sqtx3823 squareroot 0.457 -> 0.676 Inexact Rounded -sqtx3824 squareroot 0.0457 -> 0.214 Inexact Rounded -sqtx3825 squareroot 0.458 -> 0.677 Inexact Rounded -sqtx3826 squareroot 0.0458 -> 0.214 Inexact Rounded -sqtx3827 squareroot 0.459 -> 0.677 Inexact Rounded -sqtx3828 squareroot 0.0459 -> 0.214 Inexact Rounded -sqtx3829 squareroot 0.461 -> 0.679 Inexact Rounded -sqtx3830 squareroot 0.0461 -> 0.215 Inexact Rounded -sqtx3831 squareroot 0.462 -> 0.680 Inexact Rounded -sqtx3832 squareroot 0.0462 -> 0.215 Inexact Rounded -sqtx3833 squareroot 0.463 -> 0.680 Inexact Rounded -sqtx3834 squareroot 0.0463 -> 0.215 Inexact Rounded -sqtx3835 squareroot 0.464 -> 0.681 Inexact Rounded -sqtx3836 squareroot 0.0464 -> 0.215 Inexact Rounded -sqtx3837 squareroot 0.465 -> 0.682 Inexact Rounded -sqtx3838 squareroot 0.0465 -> 0.216 Inexact Rounded -sqtx3839 squareroot 0.466 -> 0.683 Inexact Rounded -sqtx3840 squareroot 0.0466 -> 0.216 Inexact Rounded -sqtx3841 squareroot 0.467 -> 0.683 Inexact Rounded -sqtx3842 squareroot 0.0467 -> 0.216 Inexact Rounded -sqtx3843 squareroot 0.468 -> 0.684 Inexact Rounded -sqtx3844 squareroot 0.0468 -> 0.216 Inexact Rounded -sqtx3845 squareroot 0.469 -> 0.685 Inexact Rounded -sqtx3846 squareroot 0.0469 -> 0.217 Inexact Rounded -sqtx3847 squareroot 0.471 -> 0.686 Inexact Rounded -sqtx3848 squareroot 0.0471 -> 0.217 Inexact Rounded -sqtx3849 squareroot 0.472 -> 0.687 Inexact Rounded -sqtx3850 squareroot 0.0472 -> 0.217 Inexact Rounded -sqtx3851 squareroot 0.473 -> 0.688 Inexact Rounded -sqtx3852 squareroot 0.0473 -> 0.217 Inexact Rounded -sqtx3853 squareroot 0.474 -> 0.688 Inexact Rounded -sqtx3854 squareroot 0.0474 -> 0.218 Inexact Rounded -sqtx3855 squareroot 0.475 -> 0.689 Inexact Rounded -sqtx3856 squareroot 0.0475 -> 0.218 Inexact Rounded -sqtx3857 squareroot 0.476 -> 0.690 Inexact Rounded -sqtx3858 squareroot 0.0476 -> 0.218 Inexact Rounded -sqtx3859 squareroot 0.477 -> 0.691 Inexact Rounded -sqtx3860 squareroot 0.0477 -> 0.218 Inexact Rounded -sqtx3861 squareroot 0.478 -> 0.691 Inexact Rounded -sqtx3862 squareroot 0.0478 -> 0.219 Inexact Rounded -sqtx3863 squareroot 0.479 -> 0.692 Inexact Rounded -sqtx3864 squareroot 0.0479 -> 0.219 Inexact Rounded -sqtx3865 squareroot 0.481 -> 0.694 Inexact Rounded -sqtx3866 squareroot 0.0481 -> 0.219 Inexact Rounded -sqtx3867 squareroot 0.482 -> 0.694 Inexact Rounded -sqtx3868 squareroot 0.0482 -> 0.220 Inexact Rounded -sqtx3869 squareroot 0.483 -> 0.695 Inexact Rounded -sqtx3870 squareroot 0.0483 -> 0.220 Inexact Rounded -sqtx3871 squareroot 0.484 -> 0.696 Inexact Rounded +-- sqtx3795 squareroot 0.442 -> 0.665 Inexact Rounded +-- sqtx3796 squareroot 0.0442 -> 0.210 Inexact Rounded +-- sqtx3797 squareroot 0.443 -> 0.666 Inexact Rounded +-- sqtx3798 squareroot 0.0443 -> 0.210 Inexact Rounded +-- sqtx3799 squareroot 0.444 -> 0.666 Inexact Rounded +-- sqtx3800 squareroot 0.0444 -> 0.211 Inexact Rounded +-- sqtx3801 squareroot 0.445 -> 0.667 Inexact Rounded +-- sqtx3802 squareroot 0.0445 -> 0.211 Inexact Rounded +-- sqtx3803 squareroot 0.446 -> 0.668 Inexact Rounded +-- sqtx3804 squareroot 0.0446 -> 0.211 Inexact Rounded +-- sqtx3805 squareroot 0.447 -> 0.669 Inexact Rounded +-- sqtx3806 squareroot 0.0447 -> 0.211 Inexact Rounded +-- sqtx3807 squareroot 0.448 -> 0.669 Inexact Rounded +-- sqtx3808 squareroot 0.0448 -> 0.212 Inexact Rounded +-- sqtx3809 squareroot 0.449 -> 0.670 Inexact Rounded +-- sqtx3810 squareroot 0.0449 -> 0.212 Inexact Rounded +-- sqtx3811 squareroot 0.451 -> 0.672 Inexact Rounded +-- sqtx3812 squareroot 0.0451 -> 0.212 Inexact Rounded +-- sqtx3813 squareroot 0.452 -> 0.672 Inexact Rounded +-- sqtx3814 squareroot 0.0452 -> 0.213 Inexact Rounded +-- sqtx3815 squareroot 0.453 -> 0.673 Inexact Rounded +-- sqtx3816 squareroot 0.0453 -> 0.213 Inexact Rounded +-- sqtx3817 squareroot 0.454 -> 0.674 Inexact Rounded +-- sqtx3818 squareroot 0.0454 -> 0.213 Inexact Rounded +-- sqtx3819 squareroot 0.455 -> 0.675 Inexact Rounded +-- sqtx3820 squareroot 0.0455 -> 0.213 Inexact Rounded +-- sqtx3821 squareroot 0.456 -> 0.675 Inexact Rounded +-- sqtx3822 squareroot 0.0456 -> 0.214 Inexact Rounded +-- sqtx3823 squareroot 0.457 -> 0.676 Inexact Rounded +-- sqtx3824 squareroot 0.0457 -> 0.214 Inexact Rounded +-- sqtx3825 squareroot 0.458 -> 0.677 Inexact Rounded +-- sqtx3826 squareroot 0.0458 -> 0.214 Inexact Rounded +-- sqtx3827 squareroot 0.459 -> 0.677 Inexact Rounded +-- sqtx3828 squareroot 0.0459 -> 0.214 Inexact Rounded +-- sqtx3829 squareroot 0.461 -> 0.679 Inexact Rounded +-- sqtx3830 squareroot 0.0461 -> 0.215 Inexact Rounded +-- sqtx3831 squareroot 0.462 -> 0.680 Inexact Rounded +-- sqtx3832 squareroot 0.0462 -> 0.215 Inexact Rounded +-- sqtx3833 squareroot 0.463 -> 0.680 Inexact Rounded +-- sqtx3834 squareroot 0.0463 -> 0.215 Inexact Rounded +-- sqtx3835 squareroot 0.464 -> 0.681 Inexact Rounded +-- sqtx3836 squareroot 0.0464 -> 0.215 Inexact Rounded +-- sqtx3837 squareroot 0.465 -> 0.682 Inexact Rounded +-- sqtx3838 squareroot 0.0465 -> 0.216 Inexact Rounded +-- sqtx3839 squareroot 0.466 -> 0.683 Inexact Rounded +-- sqtx3840 squareroot 0.0466 -> 0.216 Inexact Rounded +-- sqtx3841 squareroot 0.467 -> 0.683 Inexact Rounded +-- sqtx3842 squareroot 0.0467 -> 0.216 Inexact Rounded +-- sqtx3843 squareroot 0.468 -> 0.684 Inexact Rounded +-- sqtx3844 squareroot 0.0468 -> 0.216 Inexact Rounded +-- sqtx3845 squareroot 0.469 -> 0.685 Inexact Rounded +-- sqtx3846 squareroot 0.0469 -> 0.217 Inexact Rounded +-- sqtx3847 squareroot 0.471 -> 0.686 Inexact Rounded +-- sqtx3848 squareroot 0.0471 -> 0.217 Inexact Rounded +-- sqtx3849 squareroot 0.472 -> 0.687 Inexact Rounded +-- sqtx3850 squareroot 0.0472 -> 0.217 Inexact Rounded +-- sqtx3851 squareroot 0.473 -> 0.688 Inexact Rounded +-- sqtx3852 squareroot 0.0473 -> 0.217 Inexact Rounded +-- sqtx3853 squareroot 0.474 -> 0.688 Inexact Rounded +-- sqtx3854 squareroot 0.0474 -> 0.218 Inexact Rounded +-- sqtx3855 squareroot 0.475 -> 0.689 Inexact Rounded +-- sqtx3856 squareroot 0.0475 -> 0.218 Inexact Rounded +-- sqtx3857 squareroot 0.476 -> 0.690 Inexact Rounded +-- sqtx3858 squareroot 0.0476 -> 0.218 Inexact Rounded +-- sqtx3859 squareroot 0.477 -> 0.691 Inexact Rounded +-- sqtx3860 squareroot 0.0477 -> 0.218 Inexact Rounded +-- sqtx3861 squareroot 0.478 -> 0.691 Inexact Rounded +-- sqtx3862 squareroot 0.0478 -> 0.219 Inexact Rounded +-- sqtx3863 squareroot 0.479 -> 0.692 Inexact Rounded +-- sqtx3864 squareroot 0.0479 -> 0.219 Inexact Rounded +-- sqtx3865 squareroot 0.481 -> 0.694 Inexact Rounded +-- sqtx3866 squareroot 0.0481 -> 0.219 Inexact Rounded +-- sqtx3867 squareroot 0.482 -> 0.694 Inexact Rounded +-- sqtx3868 squareroot 0.0482 -> 0.220 Inexact Rounded +-- sqtx3869 squareroot 0.483 -> 0.695 Inexact Rounded +-- sqtx3870 squareroot 0.0483 -> 0.220 Inexact Rounded +-- sqtx3871 squareroot 0.484 -> 0.696 Inexact Rounded sqtx3872 squareroot 0.0484 -> 0.22 -sqtx3873 squareroot 0.485 -> 0.696 Inexact Rounded -sqtx3874 squareroot 0.0485 -> 0.220 Inexact Rounded -sqtx3875 squareroot 0.486 -> 0.697 Inexact Rounded -sqtx3876 squareroot 0.0486 -> 0.220 Inexact Rounded -sqtx3877 squareroot 0.487 -> 0.698 Inexact Rounded -sqtx3878 squareroot 0.0487 -> 0.221 Inexact Rounded -sqtx3879 squareroot 0.488 -> 0.699 Inexact Rounded -sqtx3880 squareroot 0.0488 -> 0.221 Inexact Rounded -sqtx3881 squareroot 0.489 -> 0.699 Inexact Rounded -sqtx3882 squareroot 0.0489 -> 0.221 Inexact Rounded -sqtx3883 squareroot 0.491 -> 0.701 Inexact Rounded -sqtx3884 squareroot 0.0491 -> 0.222 Inexact Rounded -sqtx3885 squareroot 0.492 -> 0.701 Inexact Rounded -sqtx3886 squareroot 0.0492 -> 0.222 Inexact Rounded -sqtx3887 squareroot 0.493 -> 0.702 Inexact Rounded -sqtx3888 squareroot 0.0493 -> 0.222 Inexact Rounded -sqtx3889 squareroot 0.494 -> 0.703 Inexact Rounded -sqtx3890 squareroot 0.0494 -> 0.222 Inexact Rounded -sqtx3891 squareroot 0.495 -> 0.704 Inexact Rounded -sqtx3892 squareroot 0.0495 -> 0.222 Inexact Rounded -sqtx3893 squareroot 0.496 -> 0.704 Inexact Rounded -sqtx3894 squareroot 0.0496 -> 0.223 Inexact Rounded -sqtx3895 squareroot 0.497 -> 0.705 Inexact Rounded -sqtx3896 squareroot 0.0497 -> 0.223 Inexact Rounded -sqtx3897 squareroot 0.498 -> 0.706 Inexact Rounded -sqtx3898 squareroot 0.0498 -> 0.223 Inexact Rounded -sqtx3899 squareroot 0.499 -> 0.706 Inexact Rounded -sqtx3900 squareroot 0.0499 -> 0.223 Inexact Rounded -sqtx3901 squareroot 0.501 -> 0.708 Inexact Rounded -sqtx3902 squareroot 0.0501 -> 0.224 Inexact Rounded -sqtx3903 squareroot 0.502 -> 0.709 Inexact Rounded -sqtx3904 squareroot 0.0502 -> 0.224 Inexact Rounded -sqtx3905 squareroot 0.503 -> 0.709 Inexact Rounded -sqtx3906 squareroot 0.0503 -> 0.224 Inexact Rounded -sqtx3907 squareroot 0.504 -> 0.710 Inexact Rounded -sqtx3908 squareroot 0.0504 -> 0.224 Inexact Rounded -sqtx3909 squareroot 0.505 -> 0.711 Inexact Rounded -sqtx3910 squareroot 0.0505 -> 0.225 Inexact Rounded -sqtx3911 squareroot 0.506 -> 0.711 Inexact Rounded -sqtx3912 squareroot 0.0506 -> 0.225 Inexact Rounded -sqtx3913 squareroot 0.507 -> 0.712 Inexact Rounded -sqtx3914 squareroot 0.0507 -> 0.225 Inexact Rounded -sqtx3915 squareroot 0.508 -> 0.713 Inexact Rounded -sqtx3916 squareroot 0.0508 -> 0.225 Inexact Rounded -sqtx3917 squareroot 0.509 -> 0.713 Inexact Rounded -sqtx3918 squareroot 0.0509 -> 0.226 Inexact Rounded -sqtx3919 squareroot 0.511 -> 0.715 Inexact Rounded -sqtx3920 squareroot 0.0511 -> 0.226 Inexact Rounded -sqtx3921 squareroot 0.512 -> 0.716 Inexact Rounded -sqtx3922 squareroot 0.0512 -> 0.226 Inexact Rounded -sqtx3923 squareroot 0.513 -> 0.716 Inexact Rounded -sqtx3924 squareroot 0.0513 -> 0.226 Inexact Rounded -sqtx3925 squareroot 0.514 -> 0.717 Inexact Rounded -sqtx3926 squareroot 0.0514 -> 0.227 Inexact Rounded -sqtx3927 squareroot 0.515 -> 0.718 Inexact Rounded -sqtx3928 squareroot 0.0515 -> 0.227 Inexact Rounded -sqtx3929 squareroot 0.516 -> 0.718 Inexact Rounded -sqtx3930 squareroot 0.0516 -> 0.227 Inexact Rounded -sqtx3931 squareroot 0.517 -> 0.719 Inexact Rounded -sqtx3932 squareroot 0.0517 -> 0.227 Inexact Rounded -sqtx3933 squareroot 0.518 -> 0.720 Inexact Rounded -sqtx3934 squareroot 0.0518 -> 0.228 Inexact Rounded -sqtx3935 squareroot 0.519 -> 0.720 Inexact Rounded -sqtx3936 squareroot 0.0519 -> 0.228 Inexact Rounded -sqtx3937 squareroot 0.521 -> 0.722 Inexact Rounded -sqtx3938 squareroot 0.0521 -> 0.228 Inexact Rounded -sqtx3939 squareroot 0.522 -> 0.722 Inexact Rounded -sqtx3940 squareroot 0.0522 -> 0.228 Inexact Rounded -sqtx3941 squareroot 0.523 -> 0.723 Inexact Rounded -sqtx3942 squareroot 0.0523 -> 0.229 Inexact Rounded -sqtx3943 squareroot 0.524 -> 0.724 Inexact Rounded -sqtx3944 squareroot 0.0524 -> 0.229 Inexact Rounded -sqtx3945 squareroot 0.525 -> 0.725 Inexact Rounded -sqtx3946 squareroot 0.0525 -> 0.229 Inexact Rounded -sqtx3947 squareroot 0.526 -> 0.725 Inexact Rounded -sqtx3948 squareroot 0.0526 -> 0.229 Inexact Rounded -sqtx3949 squareroot 0.527 -> 0.726 Inexact Rounded -sqtx3950 squareroot 0.0527 -> 0.230 Inexact Rounded -sqtx3951 squareroot 0.528 -> 0.727 Inexact Rounded -sqtx3952 squareroot 0.0528 -> 0.230 Inexact Rounded -sqtx3953 squareroot 0.529 -> 0.727 Inexact Rounded +-- sqtx3873 squareroot 0.485 -> 0.696 Inexact Rounded +-- sqtx3874 squareroot 0.0485 -> 0.220 Inexact Rounded +-- sqtx3875 squareroot 0.486 -> 0.697 Inexact Rounded +-- sqtx3876 squareroot 0.0486 -> 0.220 Inexact Rounded +-- sqtx3877 squareroot 0.487 -> 0.698 Inexact Rounded +-- sqtx3878 squareroot 0.0487 -> 0.221 Inexact Rounded +-- sqtx3879 squareroot 0.488 -> 0.699 Inexact Rounded +-- sqtx3880 squareroot 0.0488 -> 0.221 Inexact Rounded +-- sqtx3881 squareroot 0.489 -> 0.699 Inexact Rounded +-- sqtx3882 squareroot 0.0489 -> 0.221 Inexact Rounded +-- sqtx3883 squareroot 0.491 -> 0.701 Inexact Rounded +-- sqtx3884 squareroot 0.0491 -> 0.222 Inexact Rounded +-- sqtx3885 squareroot 0.492 -> 0.701 Inexact Rounded +-- sqtx3886 squareroot 0.0492 -> 0.222 Inexact Rounded +-- sqtx3887 squareroot 0.493 -> 0.702 Inexact Rounded +-- sqtx3888 squareroot 0.0493 -> 0.222 Inexact Rounded +-- sqtx3889 squareroot 0.494 -> 0.703 Inexact Rounded +-- sqtx3890 squareroot 0.0494 -> 0.222 Inexact Rounded +-- sqtx3891 squareroot 0.495 -> 0.704 Inexact Rounded +-- sqtx3892 squareroot 0.0495 -> 0.222 Inexact Rounded +-- sqtx3893 squareroot 0.496 -> 0.704 Inexact Rounded +-- sqtx3894 squareroot 0.0496 -> 0.223 Inexact Rounded +-- sqtx3895 squareroot 0.497 -> 0.705 Inexact Rounded +-- sqtx3896 squareroot 0.0497 -> 0.223 Inexact Rounded +-- sqtx3897 squareroot 0.498 -> 0.706 Inexact Rounded +-- sqtx3898 squareroot 0.0498 -> 0.223 Inexact Rounded +-- sqtx3899 squareroot 0.499 -> 0.706 Inexact Rounded +-- sqtx3900 squareroot 0.0499 -> 0.223 Inexact Rounded +-- sqtx3901 squareroot 0.501 -> 0.708 Inexact Rounded +-- sqtx3902 squareroot 0.0501 -> 0.224 Inexact Rounded +-- sqtx3903 squareroot 0.502 -> 0.709 Inexact Rounded +-- sqtx3904 squareroot 0.0502 -> 0.224 Inexact Rounded +-- sqtx3905 squareroot 0.503 -> 0.709 Inexact Rounded +-- sqtx3906 squareroot 0.0503 -> 0.224 Inexact Rounded +-- sqtx3907 squareroot 0.504 -> 0.710 Inexact Rounded +-- sqtx3908 squareroot 0.0504 -> 0.224 Inexact Rounded +-- sqtx3909 squareroot 0.505 -> 0.711 Inexact Rounded +-- sqtx3910 squareroot 0.0505 -> 0.225 Inexact Rounded +-- sqtx3911 squareroot 0.506 -> 0.711 Inexact Rounded +-- sqtx3912 squareroot 0.0506 -> 0.225 Inexact Rounded +-- sqtx3913 squareroot 0.507 -> 0.712 Inexact Rounded +-- sqtx3914 squareroot 0.0507 -> 0.225 Inexact Rounded +-- sqtx3915 squareroot 0.508 -> 0.713 Inexact Rounded +-- sqtx3916 squareroot 0.0508 -> 0.225 Inexact Rounded +-- sqtx3917 squareroot 0.509 -> 0.713 Inexact Rounded +-- sqtx3918 squareroot 0.0509 -> 0.226 Inexact Rounded +-- sqtx3919 squareroot 0.511 -> 0.715 Inexact Rounded +-- sqtx3920 squareroot 0.0511 -> 0.226 Inexact Rounded +-- sqtx3921 squareroot 0.512 -> 0.716 Inexact Rounded +-- sqtx3922 squareroot 0.0512 -> 0.226 Inexact Rounded +-- sqtx3923 squareroot 0.513 -> 0.716 Inexact Rounded +-- sqtx3924 squareroot 0.0513 -> 0.226 Inexact Rounded +-- sqtx3925 squareroot 0.514 -> 0.717 Inexact Rounded +-- sqtx3926 squareroot 0.0514 -> 0.227 Inexact Rounded +-- sqtx3927 squareroot 0.515 -> 0.718 Inexact Rounded +-- sqtx3928 squareroot 0.0515 -> 0.227 Inexact Rounded +-- sqtx3929 squareroot 0.516 -> 0.718 Inexact Rounded +-- sqtx3930 squareroot 0.0516 -> 0.227 Inexact Rounded +-- sqtx3931 squareroot 0.517 -> 0.719 Inexact Rounded +-- sqtx3932 squareroot 0.0517 -> 0.227 Inexact Rounded +-- sqtx3933 squareroot 0.518 -> 0.720 Inexact Rounded +-- sqtx3934 squareroot 0.0518 -> 0.228 Inexact Rounded +-- sqtx3935 squareroot 0.519 -> 0.720 Inexact Rounded +-- sqtx3936 squareroot 0.0519 -> 0.228 Inexact Rounded +-- sqtx3937 squareroot 0.521 -> 0.722 Inexact Rounded +-- sqtx3938 squareroot 0.0521 -> 0.228 Inexact Rounded +-- sqtx3939 squareroot 0.522 -> 0.722 Inexact Rounded +-- sqtx3940 squareroot 0.0522 -> 0.228 Inexact Rounded +-- sqtx3941 squareroot 0.523 -> 0.723 Inexact Rounded +-- sqtx3942 squareroot 0.0523 -> 0.229 Inexact Rounded +-- sqtx3943 squareroot 0.524 -> 0.724 Inexact Rounded +-- sqtx3944 squareroot 0.0524 -> 0.229 Inexact Rounded +-- sqtx3945 squareroot 0.525 -> 0.725 Inexact Rounded +-- sqtx3946 squareroot 0.0525 -> 0.229 Inexact Rounded +-- sqtx3947 squareroot 0.526 -> 0.725 Inexact Rounded +-- sqtx3948 squareroot 0.0526 -> 0.229 Inexact Rounded +-- sqtx3949 squareroot 0.527 -> 0.726 Inexact Rounded +-- sqtx3950 squareroot 0.0527 -> 0.230 Inexact Rounded +-- sqtx3951 squareroot 0.528 -> 0.727 Inexact Rounded +-- sqtx3952 squareroot 0.0528 -> 0.230 Inexact Rounded +-- sqtx3953 squareroot 0.529 -> 0.727 Inexact Rounded sqtx3954 squareroot 0.0529 -> 0.23 -sqtx3955 squareroot 0.531 -> 0.729 Inexact Rounded -sqtx3956 squareroot 0.0531 -> 0.230 Inexact Rounded -sqtx3957 squareroot 0.532 -> 0.729 Inexact Rounded -sqtx3958 squareroot 0.0532 -> 0.231 Inexact Rounded -sqtx3959 squareroot 0.533 -> 0.730 Inexact Rounded -sqtx3960 squareroot 0.0533 -> 0.231 Inexact Rounded -sqtx3961 squareroot 0.534 -> 0.731 Inexact Rounded -sqtx3962 squareroot 0.0534 -> 0.231 Inexact Rounded -sqtx3963 squareroot 0.535 -> 0.731 Inexact Rounded -sqtx3964 squareroot 0.0535 -> 0.231 Inexact Rounded -sqtx3965 squareroot 0.536 -> 0.732 Inexact Rounded -sqtx3966 squareroot 0.0536 -> 0.232 Inexact Rounded -sqtx3967 squareroot 0.537 -> 0.733 Inexact Rounded -sqtx3968 squareroot 0.0537 -> 0.232 Inexact Rounded -sqtx3969 squareroot 0.538 -> 0.733 Inexact Rounded -sqtx3970 squareroot 0.0538 -> 0.232 Inexact Rounded -sqtx3971 squareroot 0.539 -> 0.734 Inexact Rounded -sqtx3972 squareroot 0.0539 -> 0.232 Inexact Rounded -sqtx3973 squareroot 0.541 -> 0.736 Inexact Rounded -sqtx3974 squareroot 0.0541 -> 0.233 Inexact Rounded -sqtx3975 squareroot 0.542 -> 0.736 Inexact Rounded -sqtx3976 squareroot 0.0542 -> 0.233 Inexact Rounded -sqtx3977 squareroot 0.543 -> 0.737 Inexact Rounded -sqtx3978 squareroot 0.0543 -> 0.233 Inexact Rounded -sqtx3979 squareroot 0.544 -> 0.738 Inexact Rounded -sqtx3980 squareroot 0.0544 -> 0.233 Inexact Rounded -sqtx3981 squareroot 0.545 -> 0.738 Inexact Rounded -sqtx3982 squareroot 0.0545 -> 0.233 Inexact Rounded -sqtx3983 squareroot 0.546 -> 0.739 Inexact Rounded -sqtx3984 squareroot 0.0546 -> 0.234 Inexact Rounded -sqtx3985 squareroot 0.547 -> 0.740 Inexact Rounded -sqtx3986 squareroot 0.0547 -> 0.234 Inexact Rounded -sqtx3987 squareroot 0.548 -> 0.740 Inexact Rounded -sqtx3988 squareroot 0.0548 -> 0.234 Inexact Rounded -sqtx3989 squareroot 0.549 -> 0.741 Inexact Rounded -sqtx3990 squareroot 0.0549 -> 0.234 Inexact Rounded -sqtx3991 squareroot 0.551 -> 0.742 Inexact Rounded -sqtx3992 squareroot 0.0551 -> 0.235 Inexact Rounded -sqtx3993 squareroot 0.552 -> 0.743 Inexact Rounded -sqtx3994 squareroot 0.0552 -> 0.235 Inexact Rounded -sqtx3995 squareroot 0.553 -> 0.744 Inexact Rounded -sqtx3996 squareroot 0.0553 -> 0.235 Inexact Rounded -sqtx3997 squareroot 0.554 -> 0.744 Inexact Rounded -sqtx3998 squareroot 0.0554 -> 0.235 Inexact Rounded -sqtx3999 squareroot 0.555 -> 0.745 Inexact Rounded -sqtx4000 squareroot 0.0555 -> 0.236 Inexact Rounded -sqtx4001 squareroot 0.556 -> 0.746 Inexact Rounded -sqtx4002 squareroot 0.0556 -> 0.236 Inexact Rounded -sqtx4003 squareroot 0.557 -> 0.746 Inexact Rounded -sqtx4004 squareroot 0.0557 -> 0.236 Inexact Rounded -sqtx4005 squareroot 0.558 -> 0.747 Inexact Rounded -sqtx4006 squareroot 0.0558 -> 0.236 Inexact Rounded -sqtx4007 squareroot 0.559 -> 0.748 Inexact Rounded -sqtx4008 squareroot 0.0559 -> 0.236 Inexact Rounded -sqtx4009 squareroot 0.561 -> 0.749 Inexact Rounded -sqtx4010 squareroot 0.0561 -> 0.237 Inexact Rounded -sqtx4011 squareroot 0.562 -> 0.750 Inexact Rounded -sqtx4012 squareroot 0.0562 -> 0.237 Inexact Rounded -sqtx4013 squareroot 0.563 -> 0.750 Inexact Rounded -sqtx4014 squareroot 0.0563 -> 0.237 Inexact Rounded -sqtx4015 squareroot 0.564 -> 0.751 Inexact Rounded -sqtx4016 squareroot 0.0564 -> 0.237 Inexact Rounded -sqtx4017 squareroot 0.565 -> 0.752 Inexact Rounded -sqtx4018 squareroot 0.0565 -> 0.238 Inexact Rounded -sqtx4019 squareroot 0.566 -> 0.752 Inexact Rounded -sqtx4020 squareroot 0.0566 -> 0.238 Inexact Rounded -sqtx4021 squareroot 0.567 -> 0.753 Inexact Rounded -sqtx4022 squareroot 0.0567 -> 0.238 Inexact Rounded -sqtx4023 squareroot 0.568 -> 0.754 Inexact Rounded -sqtx4024 squareroot 0.0568 -> 0.238 Inexact Rounded -sqtx4025 squareroot 0.569 -> 0.754 Inexact Rounded -sqtx4026 squareroot 0.0569 -> 0.239 Inexact Rounded -sqtx4027 squareroot 0.571 -> 0.756 Inexact Rounded -sqtx4028 squareroot 0.0571 -> 0.239 Inexact Rounded -sqtx4029 squareroot 0.572 -> 0.756 Inexact Rounded -sqtx4030 squareroot 0.0572 -> 0.239 Inexact Rounded -sqtx4031 squareroot 0.573 -> 0.757 Inexact Rounded -sqtx4032 squareroot 0.0573 -> 0.239 Inexact Rounded -sqtx4033 squareroot 0.574 -> 0.758 Inexact Rounded -sqtx4034 squareroot 0.0574 -> 0.240 Inexact Rounded -sqtx4035 squareroot 0.575 -> 0.758 Inexact Rounded -sqtx4036 squareroot 0.0575 -> 0.240 Inexact Rounded -sqtx4037 squareroot 0.576 -> 0.759 Inexact Rounded +-- sqtx3955 squareroot 0.531 -> 0.729 Inexact Rounded +-- sqtx3956 squareroot 0.0531 -> 0.230 Inexact Rounded +-- sqtx3957 squareroot 0.532 -> 0.729 Inexact Rounded +-- sqtx3958 squareroot 0.0532 -> 0.231 Inexact Rounded +-- sqtx3959 squareroot 0.533 -> 0.730 Inexact Rounded +-- sqtx3960 squareroot 0.0533 -> 0.231 Inexact Rounded +-- sqtx3961 squareroot 0.534 -> 0.731 Inexact Rounded +-- sqtx3962 squareroot 0.0534 -> 0.231 Inexact Rounded +-- sqtx3963 squareroot 0.535 -> 0.731 Inexact Rounded +-- sqtx3964 squareroot 0.0535 -> 0.231 Inexact Rounded +-- sqtx3965 squareroot 0.536 -> 0.732 Inexact Rounded +-- sqtx3966 squareroot 0.0536 -> 0.232 Inexact Rounded +-- sqtx3967 squareroot 0.537 -> 0.733 Inexact Rounded +-- sqtx3968 squareroot 0.0537 -> 0.232 Inexact Rounded +-- sqtx3969 squareroot 0.538 -> 0.733 Inexact Rounded +-- sqtx3970 squareroot 0.0538 -> 0.232 Inexact Rounded +-- sqtx3971 squareroot 0.539 -> 0.734 Inexact Rounded +-- sqtx3972 squareroot 0.0539 -> 0.232 Inexact Rounded +-- sqtx3973 squareroot 0.541 -> 0.736 Inexact Rounded +-- sqtx3974 squareroot 0.0541 -> 0.233 Inexact Rounded +-- sqtx3975 squareroot 0.542 -> 0.736 Inexact Rounded +-- sqtx3976 squareroot 0.0542 -> 0.233 Inexact Rounded +-- sqtx3977 squareroot 0.543 -> 0.737 Inexact Rounded +-- sqtx3978 squareroot 0.0543 -> 0.233 Inexact Rounded +-- sqtx3979 squareroot 0.544 -> 0.738 Inexact Rounded +-- sqtx3980 squareroot 0.0544 -> 0.233 Inexact Rounded +-- sqtx3981 squareroot 0.545 -> 0.738 Inexact Rounded +-- sqtx3982 squareroot 0.0545 -> 0.233 Inexact Rounded +-- sqtx3983 squareroot 0.546 -> 0.739 Inexact Rounded +-- sqtx3984 squareroot 0.0546 -> 0.234 Inexact Rounded +-- sqtx3985 squareroot 0.547 -> 0.740 Inexact Rounded +-- sqtx3986 squareroot 0.0547 -> 0.234 Inexact Rounded +-- sqtx3987 squareroot 0.548 -> 0.740 Inexact Rounded +-- sqtx3988 squareroot 0.0548 -> 0.234 Inexact Rounded +-- sqtx3989 squareroot 0.549 -> 0.741 Inexact Rounded +-- sqtx3990 squareroot 0.0549 -> 0.234 Inexact Rounded +-- sqtx3991 squareroot 0.551 -> 0.742 Inexact Rounded +-- sqtx3992 squareroot 0.0551 -> 0.235 Inexact Rounded +-- sqtx3993 squareroot 0.552 -> 0.743 Inexact Rounded +-- sqtx3994 squareroot 0.0552 -> 0.235 Inexact Rounded +-- sqtx3995 squareroot 0.553 -> 0.744 Inexact Rounded +-- sqtx3996 squareroot 0.0553 -> 0.235 Inexact Rounded +-- sqtx3997 squareroot 0.554 -> 0.744 Inexact Rounded +-- sqtx3998 squareroot 0.0554 -> 0.235 Inexact Rounded +-- sqtx3999 squareroot 0.555 -> 0.745 Inexact Rounded +-- sqtx4000 squareroot 0.0555 -> 0.236 Inexact Rounded +-- sqtx4001 squareroot 0.556 -> 0.746 Inexact Rounded +-- sqtx4002 squareroot 0.0556 -> 0.236 Inexact Rounded +-- sqtx4003 squareroot 0.557 -> 0.746 Inexact Rounded +-- sqtx4004 squareroot 0.0557 -> 0.236 Inexact Rounded +-- sqtx4005 squareroot 0.558 -> 0.747 Inexact Rounded +-- sqtx4006 squareroot 0.0558 -> 0.236 Inexact Rounded +-- sqtx4007 squareroot 0.559 -> 0.748 Inexact Rounded +-- sqtx4008 squareroot 0.0559 -> 0.236 Inexact Rounded +-- sqtx4009 squareroot 0.561 -> 0.749 Inexact Rounded +-- sqtx4010 squareroot 0.0561 -> 0.237 Inexact Rounded +-- sqtx4011 squareroot 0.562 -> 0.750 Inexact Rounded +-- sqtx4012 squareroot 0.0562 -> 0.237 Inexact Rounded +-- sqtx4013 squareroot 0.563 -> 0.750 Inexact Rounded +-- sqtx4014 squareroot 0.0563 -> 0.237 Inexact Rounded +-- sqtx4015 squareroot 0.564 -> 0.751 Inexact Rounded +-- sqtx4016 squareroot 0.0564 -> 0.237 Inexact Rounded +-- sqtx4017 squareroot 0.565 -> 0.752 Inexact Rounded +-- sqtx4018 squareroot 0.0565 -> 0.238 Inexact Rounded +-- sqtx4019 squareroot 0.566 -> 0.752 Inexact Rounded +-- sqtx4020 squareroot 0.0566 -> 0.238 Inexact Rounded +-- sqtx4021 squareroot 0.567 -> 0.753 Inexact Rounded +-- sqtx4022 squareroot 0.0567 -> 0.238 Inexact Rounded +-- sqtx4023 squareroot 0.568 -> 0.754 Inexact Rounded +-- sqtx4024 squareroot 0.0568 -> 0.238 Inexact Rounded +-- sqtx4025 squareroot 0.569 -> 0.754 Inexact Rounded +-- sqtx4026 squareroot 0.0569 -> 0.239 Inexact Rounded +-- sqtx4027 squareroot 0.571 -> 0.756 Inexact Rounded +-- sqtx4028 squareroot 0.0571 -> 0.239 Inexact Rounded +-- sqtx4029 squareroot 0.572 -> 0.756 Inexact Rounded +-- sqtx4030 squareroot 0.0572 -> 0.239 Inexact Rounded +-- sqtx4031 squareroot 0.573 -> 0.757 Inexact Rounded +-- sqtx4032 squareroot 0.0573 -> 0.239 Inexact Rounded +-- sqtx4033 squareroot 0.574 -> 0.758 Inexact Rounded +-- sqtx4034 squareroot 0.0574 -> 0.240 Inexact Rounded +-- sqtx4035 squareroot 0.575 -> 0.758 Inexact Rounded +-- sqtx4036 squareroot 0.0575 -> 0.240 Inexact Rounded +-- sqtx4037 squareroot 0.576 -> 0.759 Inexact Rounded sqtx4038 squareroot 0.0576 -> 0.24 -sqtx4039 squareroot 0.577 -> 0.760 Inexact Rounded -sqtx4040 squareroot 0.0577 -> 0.240 Inexact Rounded -sqtx4041 squareroot 0.578 -> 0.760 Inexact Rounded -sqtx4042 squareroot 0.0578 -> 0.240 Inexact Rounded -sqtx4043 squareroot 0.579 -> 0.761 Inexact Rounded -sqtx4044 squareroot 0.0579 -> 0.241 Inexact Rounded -sqtx4045 squareroot 0.581 -> 0.762 Inexact Rounded -sqtx4046 squareroot 0.0581 -> 0.241 Inexact Rounded -sqtx4047 squareroot 0.582 -> 0.763 Inexact Rounded -sqtx4048 squareroot 0.0582 -> 0.241 Inexact Rounded -sqtx4049 squareroot 0.583 -> 0.764 Inexact Rounded -sqtx4050 squareroot 0.0583 -> 0.241 Inexact Rounded -sqtx4051 squareroot 0.584 -> 0.764 Inexact Rounded -sqtx4052 squareroot 0.0584 -> 0.242 Inexact Rounded -sqtx4053 squareroot 0.585 -> 0.765 Inexact Rounded -sqtx4054 squareroot 0.0585 -> 0.242 Inexact Rounded -sqtx4055 squareroot 0.586 -> 0.766 Inexact Rounded -sqtx4056 squareroot 0.0586 -> 0.242 Inexact Rounded -sqtx4057 squareroot 0.587 -> 0.766 Inexact Rounded -sqtx4058 squareroot 0.0587 -> 0.242 Inexact Rounded -sqtx4059 squareroot 0.588 -> 0.767 Inexact Rounded -sqtx4060 squareroot 0.0588 -> 0.242 Inexact Rounded -sqtx4061 squareroot 0.589 -> 0.767 Inexact Rounded -sqtx4062 squareroot 0.0589 -> 0.243 Inexact Rounded -sqtx4063 squareroot 0.591 -> 0.769 Inexact Rounded -sqtx4064 squareroot 0.0591 -> 0.243 Inexact Rounded -sqtx4065 squareroot 0.592 -> 0.769 Inexact Rounded -sqtx4066 squareroot 0.0592 -> 0.243 Inexact Rounded -sqtx4067 squareroot 0.593 -> 0.770 Inexact Rounded -sqtx4068 squareroot 0.0593 -> 0.244 Inexact Rounded -sqtx4069 squareroot 0.594 -> 0.771 Inexact Rounded -sqtx4070 squareroot 0.0594 -> 0.244 Inexact Rounded -sqtx4071 squareroot 0.595 -> 0.771 Inexact Rounded -sqtx4072 squareroot 0.0595 -> 0.244 Inexact Rounded -sqtx4073 squareroot 0.596 -> 0.772 Inexact Rounded -sqtx4074 squareroot 0.0596 -> 0.244 Inexact Rounded -sqtx4075 squareroot 0.597 -> 0.773 Inexact Rounded -sqtx4076 squareroot 0.0597 -> 0.244 Inexact Rounded -sqtx4077 squareroot 0.598 -> 0.773 Inexact Rounded -sqtx4078 squareroot 0.0598 -> 0.245 Inexact Rounded -sqtx4079 squareroot 0.599 -> 0.774 Inexact Rounded -sqtx4080 squareroot 0.0599 -> 0.245 Inexact Rounded -sqtx4081 squareroot 0.601 -> 0.775 Inexact Rounded -sqtx4082 squareroot 0.0601 -> 0.245 Inexact Rounded -sqtx4083 squareroot 0.602 -> 0.776 Inexact Rounded -sqtx4084 squareroot 0.0602 -> 0.245 Inexact Rounded -sqtx4085 squareroot 0.603 -> 0.777 Inexact Rounded -sqtx4086 squareroot 0.0603 -> 0.246 Inexact Rounded -sqtx4087 squareroot 0.604 -> 0.777 Inexact Rounded -sqtx4088 squareroot 0.0604 -> 0.246 Inexact Rounded -sqtx4089 squareroot 0.605 -> 0.778 Inexact Rounded -sqtx4090 squareroot 0.0605 -> 0.246 Inexact Rounded -sqtx4091 squareroot 0.606 -> 0.778 Inexact Rounded -sqtx4092 squareroot 0.0606 -> 0.246 Inexact Rounded -sqtx4093 squareroot 0.607 -> 0.779 Inexact Rounded -sqtx4094 squareroot 0.0607 -> 0.246 Inexact Rounded -sqtx4095 squareroot 0.608 -> 0.780 Inexact Rounded -sqtx4096 squareroot 0.0608 -> 0.247 Inexact Rounded -sqtx4097 squareroot 0.609 -> 0.780 Inexact Rounded -sqtx4098 squareroot 0.0609 -> 0.247 Inexact Rounded -sqtx4099 squareroot 0.611 -> 0.782 Inexact Rounded -sqtx4100 squareroot 0.0611 -> 0.247 Inexact Rounded -sqtx4101 squareroot 0.612 -> 0.782 Inexact Rounded -sqtx4102 squareroot 0.0612 -> 0.247 Inexact Rounded -sqtx4103 squareroot 0.613 -> 0.783 Inexact Rounded -sqtx4104 squareroot 0.0613 -> 0.248 Inexact Rounded -sqtx4105 squareroot 0.614 -> 0.784 Inexact Rounded -sqtx4106 squareroot 0.0614 -> 0.248 Inexact Rounded -sqtx4107 squareroot 0.615 -> 0.784 Inexact Rounded -sqtx4108 squareroot 0.0615 -> 0.248 Inexact Rounded -sqtx4109 squareroot 0.616 -> 0.785 Inexact Rounded -sqtx4110 squareroot 0.0616 -> 0.248 Inexact Rounded -sqtx4111 squareroot 0.617 -> 0.785 Inexact Rounded -sqtx4112 squareroot 0.0617 -> 0.248 Inexact Rounded -sqtx4113 squareroot 0.618 -> 0.786 Inexact Rounded -sqtx4114 squareroot 0.0618 -> 0.249 Inexact Rounded -sqtx4115 squareroot 0.619 -> 0.787 Inexact Rounded -sqtx4116 squareroot 0.0619 -> 0.249 Inexact Rounded -sqtx4117 squareroot 0.621 -> 0.788 Inexact Rounded -sqtx4118 squareroot 0.0621 -> 0.249 Inexact Rounded -sqtx4119 squareroot 0.622 -> 0.789 Inexact Rounded -sqtx4120 squareroot 0.0622 -> 0.249 Inexact Rounded -sqtx4121 squareroot 0.623 -> 0.789 Inexact Rounded -sqtx4122 squareroot 0.0623 -> 0.250 Inexact Rounded -sqtx4123 squareroot 0.624 -> 0.790 Inexact Rounded -sqtx4124 squareroot 0.0624 -> 0.250 Inexact Rounded -sqtx4125 squareroot 0.625 -> 0.791 Inexact Rounded +-- sqtx4039 squareroot 0.577 -> 0.760 Inexact Rounded +-- sqtx4040 squareroot 0.0577 -> 0.240 Inexact Rounded +-- sqtx4041 squareroot 0.578 -> 0.760 Inexact Rounded +-- sqtx4042 squareroot 0.0578 -> 0.240 Inexact Rounded +-- sqtx4043 squareroot 0.579 -> 0.761 Inexact Rounded +-- sqtx4044 squareroot 0.0579 -> 0.241 Inexact Rounded +-- sqtx4045 squareroot 0.581 -> 0.762 Inexact Rounded +-- sqtx4046 squareroot 0.0581 -> 0.241 Inexact Rounded +-- sqtx4047 squareroot 0.582 -> 0.763 Inexact Rounded +-- sqtx4048 squareroot 0.0582 -> 0.241 Inexact Rounded +-- sqtx4049 squareroot 0.583 -> 0.764 Inexact Rounded +-- sqtx4050 squareroot 0.0583 -> 0.241 Inexact Rounded +-- sqtx4051 squareroot 0.584 -> 0.764 Inexact Rounded +-- sqtx4052 squareroot 0.0584 -> 0.242 Inexact Rounded +-- sqtx4053 squareroot 0.585 -> 0.765 Inexact Rounded +-- sqtx4054 squareroot 0.0585 -> 0.242 Inexact Rounded +-- sqtx4055 squareroot 0.586 -> 0.766 Inexact Rounded +-- sqtx4056 squareroot 0.0586 -> 0.242 Inexact Rounded +-- sqtx4057 squareroot 0.587 -> 0.766 Inexact Rounded +-- sqtx4058 squareroot 0.0587 -> 0.242 Inexact Rounded +-- sqtx4059 squareroot 0.588 -> 0.767 Inexact Rounded +-- sqtx4060 squareroot 0.0588 -> 0.242 Inexact Rounded +-- sqtx4061 squareroot 0.589 -> 0.767 Inexact Rounded +-- sqtx4062 squareroot 0.0589 -> 0.243 Inexact Rounded +-- sqtx4063 squareroot 0.591 -> 0.769 Inexact Rounded +-- sqtx4064 squareroot 0.0591 -> 0.243 Inexact Rounded +-- sqtx4065 squareroot 0.592 -> 0.769 Inexact Rounded +-- sqtx4066 squareroot 0.0592 -> 0.243 Inexact Rounded +-- sqtx4067 squareroot 0.593 -> 0.770 Inexact Rounded +-- sqtx4068 squareroot 0.0593 -> 0.244 Inexact Rounded +-- sqtx4069 squareroot 0.594 -> 0.771 Inexact Rounded +-- sqtx4070 squareroot 0.0594 -> 0.244 Inexact Rounded +-- sqtx4071 squareroot 0.595 -> 0.771 Inexact Rounded +-- sqtx4072 squareroot 0.0595 -> 0.244 Inexact Rounded +-- sqtx4073 squareroot 0.596 -> 0.772 Inexact Rounded +-- sqtx4074 squareroot 0.0596 -> 0.244 Inexact Rounded +-- sqtx4075 squareroot 0.597 -> 0.773 Inexact Rounded +-- sqtx4076 squareroot 0.0597 -> 0.244 Inexact Rounded +-- sqtx4077 squareroot 0.598 -> 0.773 Inexact Rounded +-- sqtx4078 squareroot 0.0598 -> 0.245 Inexact Rounded +-- sqtx4079 squareroot 0.599 -> 0.774 Inexact Rounded +-- sqtx4080 squareroot 0.0599 -> 0.245 Inexact Rounded +-- sqtx4081 squareroot 0.601 -> 0.775 Inexact Rounded +-- sqtx4082 squareroot 0.0601 -> 0.245 Inexact Rounded +-- sqtx4083 squareroot 0.602 -> 0.776 Inexact Rounded +-- sqtx4084 squareroot 0.0602 -> 0.245 Inexact Rounded +-- sqtx4085 squareroot 0.603 -> 0.777 Inexact Rounded +-- sqtx4086 squareroot 0.0603 -> 0.246 Inexact Rounded +-- sqtx4087 squareroot 0.604 -> 0.777 Inexact Rounded +-- sqtx4088 squareroot 0.0604 -> 0.246 Inexact Rounded +-- sqtx4089 squareroot 0.605 -> 0.778 Inexact Rounded +-- sqtx4090 squareroot 0.0605 -> 0.246 Inexact Rounded +-- sqtx4091 squareroot 0.606 -> 0.778 Inexact Rounded +-- sqtx4092 squareroot 0.0606 -> 0.246 Inexact Rounded +-- sqtx4093 squareroot 0.607 -> 0.779 Inexact Rounded +-- sqtx4094 squareroot 0.0607 -> 0.246 Inexact Rounded +-- sqtx4095 squareroot 0.608 -> 0.780 Inexact Rounded +-- sqtx4096 squareroot 0.0608 -> 0.247 Inexact Rounded +-- sqtx4097 squareroot 0.609 -> 0.780 Inexact Rounded +-- sqtx4098 squareroot 0.0609 -> 0.247 Inexact Rounded +-- sqtx4099 squareroot 0.611 -> 0.782 Inexact Rounded +-- sqtx4100 squareroot 0.0611 -> 0.247 Inexact Rounded +-- sqtx4101 squareroot 0.612 -> 0.782 Inexact Rounded +-- sqtx4102 squareroot 0.0612 -> 0.247 Inexact Rounded +-- sqtx4103 squareroot 0.613 -> 0.783 Inexact Rounded +-- sqtx4104 squareroot 0.0613 -> 0.248 Inexact Rounded +-- sqtx4105 squareroot 0.614 -> 0.784 Inexact Rounded +-- sqtx4106 squareroot 0.0614 -> 0.248 Inexact Rounded +-- sqtx4107 squareroot 0.615 -> 0.784 Inexact Rounded +-- sqtx4108 squareroot 0.0615 -> 0.248 Inexact Rounded +-- sqtx4109 squareroot 0.616 -> 0.785 Inexact Rounded +-- sqtx4110 squareroot 0.0616 -> 0.248 Inexact Rounded +-- sqtx4111 squareroot 0.617 -> 0.785 Inexact Rounded +-- sqtx4112 squareroot 0.0617 -> 0.248 Inexact Rounded +-- sqtx4113 squareroot 0.618 -> 0.786 Inexact Rounded +-- sqtx4114 squareroot 0.0618 -> 0.249 Inexact Rounded +-- sqtx4115 squareroot 0.619 -> 0.787 Inexact Rounded +-- sqtx4116 squareroot 0.0619 -> 0.249 Inexact Rounded +-- sqtx4117 squareroot 0.621 -> 0.788 Inexact Rounded +-- sqtx4118 squareroot 0.0621 -> 0.249 Inexact Rounded +-- sqtx4119 squareroot 0.622 -> 0.789 Inexact Rounded +-- sqtx4120 squareroot 0.0622 -> 0.249 Inexact Rounded +-- sqtx4121 squareroot 0.623 -> 0.789 Inexact Rounded +-- sqtx4122 squareroot 0.0623 -> 0.250 Inexact Rounded +-- sqtx4123 squareroot 0.624 -> 0.790 Inexact Rounded +-- sqtx4124 squareroot 0.0624 -> 0.250 Inexact Rounded +-- sqtx4125 squareroot 0.625 -> 0.791 Inexact Rounded sqtx4126 squareroot 0.0625 -> 0.25 -sqtx4127 squareroot 0.626 -> 0.791 Inexact Rounded -sqtx4128 squareroot 0.0626 -> 0.250 Inexact Rounded -sqtx4129 squareroot 0.627 -> 0.792 Inexact Rounded -sqtx4130 squareroot 0.0627 -> 0.250 Inexact Rounded -sqtx4131 squareroot 0.628 -> 0.792 Inexact Rounded -sqtx4132 squareroot 0.0628 -> 0.251 Inexact Rounded -sqtx4133 squareroot 0.629 -> 0.793 Inexact Rounded -sqtx4134 squareroot 0.0629 -> 0.251 Inexact Rounded -sqtx4135 squareroot 0.631 -> 0.794 Inexact Rounded -sqtx4136 squareroot 0.0631 -> 0.251 Inexact Rounded -sqtx4137 squareroot 0.632 -> 0.795 Inexact Rounded -sqtx4138 squareroot 0.0632 -> 0.251 Inexact Rounded -sqtx4139 squareroot 0.633 -> 0.796 Inexact Rounded -sqtx4140 squareroot 0.0633 -> 0.252 Inexact Rounded -sqtx4141 squareroot 0.634 -> 0.796 Inexact Rounded -sqtx4142 squareroot 0.0634 -> 0.252 Inexact Rounded -sqtx4143 squareroot 0.635 -> 0.797 Inexact Rounded -sqtx4144 squareroot 0.0635 -> 0.252 Inexact Rounded -sqtx4145 squareroot 0.636 -> 0.797 Inexact Rounded -sqtx4146 squareroot 0.0636 -> 0.252 Inexact Rounded -sqtx4147 squareroot 0.637 -> 0.798 Inexact Rounded -sqtx4148 squareroot 0.0637 -> 0.252 Inexact Rounded -sqtx4149 squareroot 0.638 -> 0.799 Inexact Rounded -sqtx4150 squareroot 0.0638 -> 0.253 Inexact Rounded -sqtx4151 squareroot 0.639 -> 0.799 Inexact Rounded -sqtx4152 squareroot 0.0639 -> 0.253 Inexact Rounded -sqtx4153 squareroot 0.641 -> 0.801 Inexact Rounded -sqtx4154 squareroot 0.0641 -> 0.253 Inexact Rounded -sqtx4155 squareroot 0.642 -> 0.801 Inexact Rounded -sqtx4156 squareroot 0.0642 -> 0.253 Inexact Rounded -sqtx4157 squareroot 0.643 -> 0.802 Inexact Rounded -sqtx4158 squareroot 0.0643 -> 0.254 Inexact Rounded -sqtx4159 squareroot 0.644 -> 0.802 Inexact Rounded -sqtx4160 squareroot 0.0644 -> 0.254 Inexact Rounded -sqtx4161 squareroot 0.645 -> 0.803 Inexact Rounded -sqtx4162 squareroot 0.0645 -> 0.254 Inexact Rounded -sqtx4163 squareroot 0.646 -> 0.804 Inexact Rounded -sqtx4164 squareroot 0.0646 -> 0.254 Inexact Rounded -sqtx4165 squareroot 0.647 -> 0.804 Inexact Rounded -sqtx4166 squareroot 0.0647 -> 0.254 Inexact Rounded -sqtx4167 squareroot 0.648 -> 0.805 Inexact Rounded -sqtx4168 squareroot 0.0648 -> 0.255 Inexact Rounded -sqtx4169 squareroot 0.649 -> 0.806 Inexact Rounded -sqtx4170 squareroot 0.0649 -> 0.255 Inexact Rounded -sqtx4171 squareroot 0.651 -> 0.807 Inexact Rounded -sqtx4172 squareroot 0.0651 -> 0.255 Inexact Rounded -sqtx4173 squareroot 0.652 -> 0.807 Inexact Rounded -sqtx4174 squareroot 0.0652 -> 0.255 Inexact Rounded -sqtx4175 squareroot 0.653 -> 0.808 Inexact Rounded -sqtx4176 squareroot 0.0653 -> 0.256 Inexact Rounded -sqtx4177 squareroot 0.654 -> 0.809 Inexact Rounded -sqtx4178 squareroot 0.0654 -> 0.256 Inexact Rounded -sqtx4179 squareroot 0.655 -> 0.809 Inexact Rounded -sqtx4180 squareroot 0.0655 -> 0.256 Inexact Rounded -sqtx4181 squareroot 0.656 -> 0.810 Inexact Rounded -sqtx4182 squareroot 0.0656 -> 0.256 Inexact Rounded -sqtx4183 squareroot 0.657 -> 0.811 Inexact Rounded -sqtx4184 squareroot 0.0657 -> 0.256 Inexact Rounded -sqtx4185 squareroot 0.658 -> 0.811 Inexact Rounded -sqtx4186 squareroot 0.0658 -> 0.257 Inexact Rounded -sqtx4187 squareroot 0.659 -> 0.812 Inexact Rounded -sqtx4188 squareroot 0.0659 -> 0.257 Inexact Rounded -sqtx4189 squareroot 0.661 -> 0.813 Inexact Rounded -sqtx4190 squareroot 0.0661 -> 0.257 Inexact Rounded -sqtx4191 squareroot 0.662 -> 0.814 Inexact Rounded -sqtx4192 squareroot 0.0662 -> 0.257 Inexact Rounded -sqtx4193 squareroot 0.663 -> 0.814 Inexact Rounded -sqtx4194 squareroot 0.0663 -> 0.257 Inexact Rounded -sqtx4195 squareroot 0.664 -> 0.815 Inexact Rounded -sqtx4196 squareroot 0.0664 -> 0.258 Inexact Rounded -sqtx4197 squareroot 0.665 -> 0.815 Inexact Rounded -sqtx4198 squareroot 0.0665 -> 0.258 Inexact Rounded -sqtx4199 squareroot 0.666 -> 0.816 Inexact Rounded -sqtx4200 squareroot 0.0666 -> 0.258 Inexact Rounded -sqtx4201 squareroot 0.667 -> 0.817 Inexact Rounded -sqtx4202 squareroot 0.0667 -> 0.258 Inexact Rounded -sqtx4203 squareroot 0.668 -> 0.817 Inexact Rounded -sqtx4204 squareroot 0.0668 -> 0.258 Inexact Rounded -sqtx4205 squareroot 0.669 -> 0.818 Inexact Rounded -sqtx4206 squareroot 0.0669 -> 0.259 Inexact Rounded -sqtx4207 squareroot 0.671 -> 0.819 Inexact Rounded -sqtx4208 squareroot 0.0671 -> 0.259 Inexact Rounded -sqtx4209 squareroot 0.672 -> 0.820 Inexact Rounded -sqtx4210 squareroot 0.0672 -> 0.259 Inexact Rounded -sqtx4211 squareroot 0.673 -> 0.820 Inexact Rounded -sqtx4212 squareroot 0.0673 -> 0.259 Inexact Rounded -sqtx4213 squareroot 0.674 -> 0.821 Inexact Rounded -sqtx4214 squareroot 0.0674 -> 0.260 Inexact Rounded -sqtx4215 squareroot 0.675 -> 0.822 Inexact Rounded -sqtx4216 squareroot 0.0675 -> 0.260 Inexact Rounded -sqtx4217 squareroot 0.676 -> 0.822 Inexact Rounded +-- sqtx4127 squareroot 0.626 -> 0.791 Inexact Rounded +-- sqtx4128 squareroot 0.0626 -> 0.250 Inexact Rounded +-- sqtx4129 squareroot 0.627 -> 0.792 Inexact Rounded +-- sqtx4130 squareroot 0.0627 -> 0.250 Inexact Rounded +-- sqtx4131 squareroot 0.628 -> 0.792 Inexact Rounded +-- sqtx4132 squareroot 0.0628 -> 0.251 Inexact Rounded +-- sqtx4133 squareroot 0.629 -> 0.793 Inexact Rounded +-- sqtx4134 squareroot 0.0629 -> 0.251 Inexact Rounded +-- sqtx4135 squareroot 0.631 -> 0.794 Inexact Rounded +-- sqtx4136 squareroot 0.0631 -> 0.251 Inexact Rounded +-- sqtx4137 squareroot 0.632 -> 0.795 Inexact Rounded +-- sqtx4138 squareroot 0.0632 -> 0.251 Inexact Rounded +-- sqtx4139 squareroot 0.633 -> 0.796 Inexact Rounded +-- sqtx4140 squareroot 0.0633 -> 0.252 Inexact Rounded +-- sqtx4141 squareroot 0.634 -> 0.796 Inexact Rounded +-- sqtx4142 squareroot 0.0634 -> 0.252 Inexact Rounded +-- sqtx4143 squareroot 0.635 -> 0.797 Inexact Rounded +-- sqtx4144 squareroot 0.0635 -> 0.252 Inexact Rounded +-- sqtx4145 squareroot 0.636 -> 0.797 Inexact Rounded +-- sqtx4146 squareroot 0.0636 -> 0.252 Inexact Rounded +-- sqtx4147 squareroot 0.637 -> 0.798 Inexact Rounded +-- sqtx4148 squareroot 0.0637 -> 0.252 Inexact Rounded +-- sqtx4149 squareroot 0.638 -> 0.799 Inexact Rounded +-- sqtx4150 squareroot 0.0638 -> 0.253 Inexact Rounded +-- sqtx4151 squareroot 0.639 -> 0.799 Inexact Rounded +-- sqtx4152 squareroot 0.0639 -> 0.253 Inexact Rounded +-- sqtx4153 squareroot 0.641 -> 0.801 Inexact Rounded +-- sqtx4154 squareroot 0.0641 -> 0.253 Inexact Rounded +-- sqtx4155 squareroot 0.642 -> 0.801 Inexact Rounded +-- sqtx4156 squareroot 0.0642 -> 0.253 Inexact Rounded +-- sqtx4157 squareroot 0.643 -> 0.802 Inexact Rounded +-- sqtx4158 squareroot 0.0643 -> 0.254 Inexact Rounded +-- sqtx4159 squareroot 0.644 -> 0.802 Inexact Rounded +-- sqtx4160 squareroot 0.0644 -> 0.254 Inexact Rounded +-- sqtx4161 squareroot 0.645 -> 0.803 Inexact Rounded +-- sqtx4162 squareroot 0.0645 -> 0.254 Inexact Rounded +-- sqtx4163 squareroot 0.646 -> 0.804 Inexact Rounded +-- sqtx4164 squareroot 0.0646 -> 0.254 Inexact Rounded +-- sqtx4165 squareroot 0.647 -> 0.804 Inexact Rounded +-- sqtx4166 squareroot 0.0647 -> 0.254 Inexact Rounded +-- sqtx4167 squareroot 0.648 -> 0.805 Inexact Rounded +-- sqtx4168 squareroot 0.0648 -> 0.255 Inexact Rounded +-- sqtx4169 squareroot 0.649 -> 0.806 Inexact Rounded +-- sqtx4170 squareroot 0.0649 -> 0.255 Inexact Rounded +-- sqtx4171 squareroot 0.651 -> 0.807 Inexact Rounded +-- sqtx4172 squareroot 0.0651 -> 0.255 Inexact Rounded +-- sqtx4173 squareroot 0.652 -> 0.807 Inexact Rounded +-- sqtx4174 squareroot 0.0652 -> 0.255 Inexact Rounded +-- sqtx4175 squareroot 0.653 -> 0.808 Inexact Rounded +-- sqtx4176 squareroot 0.0653 -> 0.256 Inexact Rounded +-- sqtx4177 squareroot 0.654 -> 0.809 Inexact Rounded +-- sqtx4178 squareroot 0.0654 -> 0.256 Inexact Rounded +-- sqtx4179 squareroot 0.655 -> 0.809 Inexact Rounded +-- sqtx4180 squareroot 0.0655 -> 0.256 Inexact Rounded +-- sqtx4181 squareroot 0.656 -> 0.810 Inexact Rounded +-- sqtx4182 squareroot 0.0656 -> 0.256 Inexact Rounded +-- sqtx4183 squareroot 0.657 -> 0.811 Inexact Rounded +-- sqtx4184 squareroot 0.0657 -> 0.256 Inexact Rounded +-- sqtx4185 squareroot 0.658 -> 0.811 Inexact Rounded +-- sqtx4186 squareroot 0.0658 -> 0.257 Inexact Rounded +-- sqtx4187 squareroot 0.659 -> 0.812 Inexact Rounded +-- sqtx4188 squareroot 0.0659 -> 0.257 Inexact Rounded +-- sqtx4189 squareroot 0.661 -> 0.813 Inexact Rounded +-- sqtx4190 squareroot 0.0661 -> 0.257 Inexact Rounded +-- sqtx4191 squareroot 0.662 -> 0.814 Inexact Rounded +-- sqtx4192 squareroot 0.0662 -> 0.257 Inexact Rounded +-- sqtx4193 squareroot 0.663 -> 0.814 Inexact Rounded +-- sqtx4194 squareroot 0.0663 -> 0.257 Inexact Rounded +-- sqtx4195 squareroot 0.664 -> 0.815 Inexact Rounded +-- sqtx4196 squareroot 0.0664 -> 0.258 Inexact Rounded +-- sqtx4197 squareroot 0.665 -> 0.815 Inexact Rounded +-- sqtx4198 squareroot 0.0665 -> 0.258 Inexact Rounded +-- sqtx4199 squareroot 0.666 -> 0.816 Inexact Rounded +-- sqtx4200 squareroot 0.0666 -> 0.258 Inexact Rounded +-- sqtx4201 squareroot 0.667 -> 0.817 Inexact Rounded +-- sqtx4202 squareroot 0.0667 -> 0.258 Inexact Rounded +-- sqtx4203 squareroot 0.668 -> 0.817 Inexact Rounded +-- sqtx4204 squareroot 0.0668 -> 0.258 Inexact Rounded +-- sqtx4205 squareroot 0.669 -> 0.818 Inexact Rounded +-- sqtx4206 squareroot 0.0669 -> 0.259 Inexact Rounded +-- sqtx4207 squareroot 0.671 -> 0.819 Inexact Rounded +-- sqtx4208 squareroot 0.0671 -> 0.259 Inexact Rounded +-- sqtx4209 squareroot 0.672 -> 0.820 Inexact Rounded +-- sqtx4210 squareroot 0.0672 -> 0.259 Inexact Rounded +-- sqtx4211 squareroot 0.673 -> 0.820 Inexact Rounded +-- sqtx4212 squareroot 0.0673 -> 0.259 Inexact Rounded +-- sqtx4213 squareroot 0.674 -> 0.821 Inexact Rounded +-- sqtx4214 squareroot 0.0674 -> 0.260 Inexact Rounded +-- sqtx4215 squareroot 0.675 -> 0.822 Inexact Rounded +-- sqtx4216 squareroot 0.0675 -> 0.260 Inexact Rounded +-- sqtx4217 squareroot 0.676 -> 0.822 Inexact Rounded sqtx4218 squareroot 0.0676 -> 0.26 -sqtx4219 squareroot 0.677 -> 0.823 Inexact Rounded -sqtx4220 squareroot 0.0677 -> 0.260 Inexact Rounded -sqtx4221 squareroot 0.678 -> 0.823 Inexact Rounded -sqtx4222 squareroot 0.0678 -> 0.260 Inexact Rounded -sqtx4223 squareroot 0.679 -> 0.824 Inexact Rounded -sqtx4224 squareroot 0.0679 -> 0.261 Inexact Rounded -sqtx4225 squareroot 0.681 -> 0.825 Inexact Rounded -sqtx4226 squareroot 0.0681 -> 0.261 Inexact Rounded -sqtx4227 squareroot 0.682 -> 0.826 Inexact Rounded -sqtx4228 squareroot 0.0682 -> 0.261 Inexact Rounded -sqtx4229 squareroot 0.683 -> 0.826 Inexact Rounded -sqtx4230 squareroot 0.0683 -> 0.261 Inexact Rounded -sqtx4231 squareroot 0.684 -> 0.827 Inexact Rounded -sqtx4232 squareroot 0.0684 -> 0.262 Inexact Rounded -sqtx4233 squareroot 0.685 -> 0.828 Inexact Rounded -sqtx4234 squareroot 0.0685 -> 0.262 Inexact Rounded -sqtx4235 squareroot 0.686 -> 0.828 Inexact Rounded -sqtx4236 squareroot 0.0686 -> 0.262 Inexact Rounded -sqtx4237 squareroot 0.687 -> 0.829 Inexact Rounded -sqtx4238 squareroot 0.0687 -> 0.262 Inexact Rounded -sqtx4239 squareroot 0.688 -> 0.829 Inexact Rounded -sqtx4240 squareroot 0.0688 -> 0.262 Inexact Rounded -sqtx4241 squareroot 0.689 -> 0.830 Inexact Rounded -sqtx4242 squareroot 0.0689 -> 0.262 Inexact Rounded -sqtx4243 squareroot 0.691 -> 0.831 Inexact Rounded -sqtx4244 squareroot 0.0691 -> 0.263 Inexact Rounded -sqtx4245 squareroot 0.692 -> 0.832 Inexact Rounded -sqtx4246 squareroot 0.0692 -> 0.263 Inexact Rounded -sqtx4247 squareroot 0.693 -> 0.832 Inexact Rounded -sqtx4248 squareroot 0.0693 -> 0.263 Inexact Rounded -sqtx4249 squareroot 0.694 -> 0.833 Inexact Rounded -sqtx4250 squareroot 0.0694 -> 0.263 Inexact Rounded -sqtx4251 squareroot 0.695 -> 0.834 Inexact Rounded -sqtx4252 squareroot 0.0695 -> 0.264 Inexact Rounded -sqtx4253 squareroot 0.696 -> 0.834 Inexact Rounded -sqtx4254 squareroot 0.0696 -> 0.264 Inexact Rounded -sqtx4255 squareroot 0.697 -> 0.835 Inexact Rounded -sqtx4256 squareroot 0.0697 -> 0.264 Inexact Rounded -sqtx4257 squareroot 0.698 -> 0.835 Inexact Rounded -sqtx4258 squareroot 0.0698 -> 0.264 Inexact Rounded -sqtx4259 squareroot 0.699 -> 0.836 Inexact Rounded -sqtx4260 squareroot 0.0699 -> 0.264 Inexact Rounded -sqtx4261 squareroot 0.701 -> 0.837 Inexact Rounded -sqtx4262 squareroot 0.0701 -> 0.265 Inexact Rounded -sqtx4263 squareroot 0.702 -> 0.838 Inexact Rounded -sqtx4264 squareroot 0.0702 -> 0.265 Inexact Rounded -sqtx4265 squareroot 0.703 -> 0.838 Inexact Rounded -sqtx4266 squareroot 0.0703 -> 0.265 Inexact Rounded -sqtx4267 squareroot 0.704 -> 0.839 Inexact Rounded -sqtx4268 squareroot 0.0704 -> 0.265 Inexact Rounded -sqtx4269 squareroot 0.705 -> 0.840 Inexact Rounded -sqtx4270 squareroot 0.0705 -> 0.266 Inexact Rounded -sqtx4271 squareroot 0.706 -> 0.840 Inexact Rounded -sqtx4272 squareroot 0.0706 -> 0.266 Inexact Rounded -sqtx4273 squareroot 0.707 -> 0.841 Inexact Rounded -sqtx4274 squareroot 0.0707 -> 0.266 Inexact Rounded -sqtx4275 squareroot 0.708 -> 0.841 Inexact Rounded -sqtx4276 squareroot 0.0708 -> 0.266 Inexact Rounded -sqtx4277 squareroot 0.709 -> 0.842 Inexact Rounded -sqtx4278 squareroot 0.0709 -> 0.266 Inexact Rounded -sqtx4279 squareroot 0.711 -> 0.843 Inexact Rounded -sqtx4280 squareroot 0.0711 -> 0.267 Inexact Rounded -sqtx4281 squareroot 0.712 -> 0.844 Inexact Rounded -sqtx4282 squareroot 0.0712 -> 0.267 Inexact Rounded -sqtx4283 squareroot 0.713 -> 0.844 Inexact Rounded -sqtx4284 squareroot 0.0713 -> 0.267 Inexact Rounded -sqtx4285 squareroot 0.714 -> 0.845 Inexact Rounded -sqtx4286 squareroot 0.0714 -> 0.267 Inexact Rounded -sqtx4287 squareroot 0.715 -> 0.846 Inexact Rounded -sqtx4288 squareroot 0.0715 -> 0.267 Inexact Rounded -sqtx4289 squareroot 0.716 -> 0.846 Inexact Rounded -sqtx4290 squareroot 0.0716 -> 0.268 Inexact Rounded -sqtx4291 squareroot 0.717 -> 0.847 Inexact Rounded -sqtx4292 squareroot 0.0717 -> 0.268 Inexact Rounded -sqtx4293 squareroot 0.718 -> 0.847 Inexact Rounded -sqtx4294 squareroot 0.0718 -> 0.268 Inexact Rounded -sqtx4295 squareroot 0.719 -> 0.848 Inexact Rounded -sqtx4296 squareroot 0.0719 -> 0.268 Inexact Rounded -sqtx4297 squareroot 0.721 -> 0.849 Inexact Rounded -sqtx4298 squareroot 0.0721 -> 0.269 Inexact Rounded -sqtx4299 squareroot 0.722 -> 0.850 Inexact Rounded -sqtx4300 squareroot 0.0722 -> 0.269 Inexact Rounded -sqtx4301 squareroot 0.723 -> 0.850 Inexact Rounded -sqtx4302 squareroot 0.0723 -> 0.269 Inexact Rounded -sqtx4303 squareroot 0.724 -> 0.851 Inexact Rounded -sqtx4304 squareroot 0.0724 -> 0.269 Inexact Rounded -sqtx4305 squareroot 0.725 -> 0.851 Inexact Rounded -sqtx4306 squareroot 0.0725 -> 0.269 Inexact Rounded -sqtx4307 squareroot 0.726 -> 0.852 Inexact Rounded -sqtx4308 squareroot 0.0726 -> 0.269 Inexact Rounded -sqtx4309 squareroot 0.727 -> 0.853 Inexact Rounded -sqtx4310 squareroot 0.0727 -> 0.270 Inexact Rounded -sqtx4311 squareroot 0.728 -> 0.853 Inexact Rounded -sqtx4312 squareroot 0.0728 -> 0.270 Inexact Rounded -sqtx4313 squareroot 0.729 -> 0.854 Inexact Rounded +-- sqtx4219 squareroot 0.677 -> 0.823 Inexact Rounded +-- sqtx4220 squareroot 0.0677 -> 0.260 Inexact Rounded +-- sqtx4221 squareroot 0.678 -> 0.823 Inexact Rounded +-- sqtx4222 squareroot 0.0678 -> 0.260 Inexact Rounded +-- sqtx4223 squareroot 0.679 -> 0.824 Inexact Rounded +-- sqtx4224 squareroot 0.0679 -> 0.261 Inexact Rounded +-- sqtx4225 squareroot 0.681 -> 0.825 Inexact Rounded +-- sqtx4226 squareroot 0.0681 -> 0.261 Inexact Rounded +-- sqtx4227 squareroot 0.682 -> 0.826 Inexact Rounded +-- sqtx4228 squareroot 0.0682 -> 0.261 Inexact Rounded +-- sqtx4229 squareroot 0.683 -> 0.826 Inexact Rounded +-- sqtx4230 squareroot 0.0683 -> 0.261 Inexact Rounded +-- sqtx4231 squareroot 0.684 -> 0.827 Inexact Rounded +-- sqtx4232 squareroot 0.0684 -> 0.262 Inexact Rounded +-- sqtx4233 squareroot 0.685 -> 0.828 Inexact Rounded +-- sqtx4234 squareroot 0.0685 -> 0.262 Inexact Rounded +-- sqtx4235 squareroot 0.686 -> 0.828 Inexact Rounded +-- sqtx4236 squareroot 0.0686 -> 0.262 Inexact Rounded +-- sqtx4237 squareroot 0.687 -> 0.829 Inexact Rounded +-- sqtx4238 squareroot 0.0687 -> 0.262 Inexact Rounded +-- sqtx4239 squareroot 0.688 -> 0.829 Inexact Rounded +-- sqtx4240 squareroot 0.0688 -> 0.262 Inexact Rounded +-- sqtx4241 squareroot 0.689 -> 0.830 Inexact Rounded +-- sqtx4242 squareroot 0.0689 -> 0.262 Inexact Rounded +-- sqtx4243 squareroot 0.691 -> 0.831 Inexact Rounded +-- sqtx4244 squareroot 0.0691 -> 0.263 Inexact Rounded +-- sqtx4245 squareroot 0.692 -> 0.832 Inexact Rounded +-- sqtx4246 squareroot 0.0692 -> 0.263 Inexact Rounded +-- sqtx4247 squareroot 0.693 -> 0.832 Inexact Rounded +-- sqtx4248 squareroot 0.0693 -> 0.263 Inexact Rounded +-- sqtx4249 squareroot 0.694 -> 0.833 Inexact Rounded +-- sqtx4250 squareroot 0.0694 -> 0.263 Inexact Rounded +-- sqtx4251 squareroot 0.695 -> 0.834 Inexact Rounded +-- sqtx4252 squareroot 0.0695 -> 0.264 Inexact Rounded +-- sqtx4253 squareroot 0.696 -> 0.834 Inexact Rounded +-- sqtx4254 squareroot 0.0696 -> 0.264 Inexact Rounded +-- sqtx4255 squareroot 0.697 -> 0.835 Inexact Rounded +-- sqtx4256 squareroot 0.0697 -> 0.264 Inexact Rounded +-- sqtx4257 squareroot 0.698 -> 0.835 Inexact Rounded +-- sqtx4258 squareroot 0.0698 -> 0.264 Inexact Rounded +-- sqtx4259 squareroot 0.699 -> 0.836 Inexact Rounded +-- sqtx4260 squareroot 0.0699 -> 0.264 Inexact Rounded +-- sqtx4261 squareroot 0.701 -> 0.837 Inexact Rounded +-- sqtx4262 squareroot 0.0701 -> 0.265 Inexact Rounded +-- sqtx4263 squareroot 0.702 -> 0.838 Inexact Rounded +-- sqtx4264 squareroot 0.0702 -> 0.265 Inexact Rounded +-- sqtx4265 squareroot 0.703 -> 0.838 Inexact Rounded +-- sqtx4266 squareroot 0.0703 -> 0.265 Inexact Rounded +-- sqtx4267 squareroot 0.704 -> 0.839 Inexact Rounded +-- sqtx4268 squareroot 0.0704 -> 0.265 Inexact Rounded +-- sqtx4269 squareroot 0.705 -> 0.840 Inexact Rounded +-- sqtx4270 squareroot 0.0705 -> 0.266 Inexact Rounded +-- sqtx4271 squareroot 0.706 -> 0.840 Inexact Rounded +-- sqtx4272 squareroot 0.0706 -> 0.266 Inexact Rounded +-- sqtx4273 squareroot 0.707 -> 0.841 Inexact Rounded +-- sqtx4274 squareroot 0.0707 -> 0.266 Inexact Rounded +-- sqtx4275 squareroot 0.708 -> 0.841 Inexact Rounded +-- sqtx4276 squareroot 0.0708 -> 0.266 Inexact Rounded +-- sqtx4277 squareroot 0.709 -> 0.842 Inexact Rounded +-- sqtx4278 squareroot 0.0709 -> 0.266 Inexact Rounded +-- sqtx4279 squareroot 0.711 -> 0.843 Inexact Rounded +-- sqtx4280 squareroot 0.0711 -> 0.267 Inexact Rounded +-- sqtx4281 squareroot 0.712 -> 0.844 Inexact Rounded +-- sqtx4282 squareroot 0.0712 -> 0.267 Inexact Rounded +-- sqtx4283 squareroot 0.713 -> 0.844 Inexact Rounded +-- sqtx4284 squareroot 0.0713 -> 0.267 Inexact Rounded +-- sqtx4285 squareroot 0.714 -> 0.845 Inexact Rounded +-- sqtx4286 squareroot 0.0714 -> 0.267 Inexact Rounded +-- sqtx4287 squareroot 0.715 -> 0.846 Inexact Rounded +-- sqtx4288 squareroot 0.0715 -> 0.267 Inexact Rounded +-- sqtx4289 squareroot 0.716 -> 0.846 Inexact Rounded +-- sqtx4290 squareroot 0.0716 -> 0.268 Inexact Rounded +-- sqtx4291 squareroot 0.717 -> 0.847 Inexact Rounded +-- sqtx4292 squareroot 0.0717 -> 0.268 Inexact Rounded +-- sqtx4293 squareroot 0.718 -> 0.847 Inexact Rounded +-- sqtx4294 squareroot 0.0718 -> 0.268 Inexact Rounded +-- sqtx4295 squareroot 0.719 -> 0.848 Inexact Rounded +-- sqtx4296 squareroot 0.0719 -> 0.268 Inexact Rounded +-- sqtx4297 squareroot 0.721 -> 0.849 Inexact Rounded +-- sqtx4298 squareroot 0.0721 -> 0.269 Inexact Rounded +-- sqtx4299 squareroot 0.722 -> 0.850 Inexact Rounded +-- sqtx4300 squareroot 0.0722 -> 0.269 Inexact Rounded +-- sqtx4301 squareroot 0.723 -> 0.850 Inexact Rounded +-- sqtx4302 squareroot 0.0723 -> 0.269 Inexact Rounded +-- sqtx4303 squareroot 0.724 -> 0.851 Inexact Rounded +-- sqtx4304 squareroot 0.0724 -> 0.269 Inexact Rounded +-- sqtx4305 squareroot 0.725 -> 0.851 Inexact Rounded +-- sqtx4306 squareroot 0.0725 -> 0.269 Inexact Rounded +-- sqtx4307 squareroot 0.726 -> 0.852 Inexact Rounded +-- sqtx4308 squareroot 0.0726 -> 0.269 Inexact Rounded +-- sqtx4309 squareroot 0.727 -> 0.853 Inexact Rounded +-- sqtx4310 squareroot 0.0727 -> 0.270 Inexact Rounded +-- sqtx4311 squareroot 0.728 -> 0.853 Inexact Rounded +-- sqtx4312 squareroot 0.0728 -> 0.270 Inexact Rounded +-- sqtx4313 squareroot 0.729 -> 0.854 Inexact Rounded sqtx4314 squareroot 0.0729 -> 0.27 -sqtx4315 squareroot 0.731 -> 0.855 Inexact Rounded -sqtx4316 squareroot 0.0731 -> 0.270 Inexact Rounded -sqtx4317 squareroot 0.732 -> 0.856 Inexact Rounded -sqtx4318 squareroot 0.0732 -> 0.271 Inexact Rounded -sqtx4319 squareroot 0.733 -> 0.856 Inexact Rounded -sqtx4320 squareroot 0.0733 -> 0.271 Inexact Rounded -sqtx4321 squareroot 0.734 -> 0.857 Inexact Rounded -sqtx4322 squareroot 0.0734 -> 0.271 Inexact Rounded -sqtx4323 squareroot 0.735 -> 0.857 Inexact Rounded -sqtx4324 squareroot 0.0735 -> 0.271 Inexact Rounded -sqtx4325 squareroot 0.736 -> 0.858 Inexact Rounded -sqtx4326 squareroot 0.0736 -> 0.271 Inexact Rounded -sqtx4327 squareroot 0.737 -> 0.858 Inexact Rounded -sqtx4328 squareroot 0.0737 -> 0.271 Inexact Rounded -sqtx4329 squareroot 0.738 -> 0.859 Inexact Rounded -sqtx4330 squareroot 0.0738 -> 0.272 Inexact Rounded -sqtx4331 squareroot 0.739 -> 0.860 Inexact Rounded -sqtx4332 squareroot 0.0739 -> 0.272 Inexact Rounded -sqtx4333 squareroot 0.741 -> 0.861 Inexact Rounded -sqtx4334 squareroot 0.0741 -> 0.272 Inexact Rounded -sqtx4335 squareroot 0.742 -> 0.861 Inexact Rounded -sqtx4336 squareroot 0.0742 -> 0.272 Inexact Rounded -sqtx4337 squareroot 0.743 -> 0.862 Inexact Rounded -sqtx4338 squareroot 0.0743 -> 0.273 Inexact Rounded -sqtx4339 squareroot 0.744 -> 0.863 Inexact Rounded -sqtx4340 squareroot 0.0744 -> 0.273 Inexact Rounded -sqtx4341 squareroot 0.745 -> 0.863 Inexact Rounded -sqtx4342 squareroot 0.0745 -> 0.273 Inexact Rounded -sqtx4343 squareroot 0.746 -> 0.864 Inexact Rounded -sqtx4344 squareroot 0.0746 -> 0.273 Inexact Rounded -sqtx4345 squareroot 0.747 -> 0.864 Inexact Rounded -sqtx4346 squareroot 0.0747 -> 0.273 Inexact Rounded -sqtx4347 squareroot 0.748 -> 0.865 Inexact Rounded -sqtx4348 squareroot 0.0748 -> 0.273 Inexact Rounded -sqtx4349 squareroot 0.749 -> 0.865 Inexact Rounded -sqtx4350 squareroot 0.0749 -> 0.274 Inexact Rounded -sqtx4351 squareroot 0.751 -> 0.867 Inexact Rounded -sqtx4352 squareroot 0.0751 -> 0.274 Inexact Rounded -sqtx4353 squareroot 0.752 -> 0.867 Inexact Rounded -sqtx4354 squareroot 0.0752 -> 0.274 Inexact Rounded -sqtx4355 squareroot 0.753 -> 0.868 Inexact Rounded -sqtx4356 squareroot 0.0753 -> 0.274 Inexact Rounded -sqtx4357 squareroot 0.754 -> 0.868 Inexact Rounded -sqtx4358 squareroot 0.0754 -> 0.275 Inexact Rounded -sqtx4359 squareroot 0.755 -> 0.869 Inexact Rounded -sqtx4360 squareroot 0.0755 -> 0.275 Inexact Rounded -sqtx4361 squareroot 0.756 -> 0.869 Inexact Rounded -sqtx4362 squareroot 0.0756 -> 0.275 Inexact Rounded -sqtx4363 squareroot 0.757 -> 0.870 Inexact Rounded -sqtx4364 squareroot 0.0757 -> 0.275 Inexact Rounded -sqtx4365 squareroot 0.758 -> 0.871 Inexact Rounded -sqtx4366 squareroot 0.0758 -> 0.275 Inexact Rounded -sqtx4367 squareroot 0.759 -> 0.871 Inexact Rounded -sqtx4368 squareroot 0.0759 -> 0.275 Inexact Rounded -sqtx4369 squareroot 0.761 -> 0.872 Inexact Rounded -sqtx4370 squareroot 0.0761 -> 0.276 Inexact Rounded -sqtx4371 squareroot 0.762 -> 0.873 Inexact Rounded -sqtx4372 squareroot 0.0762 -> 0.276 Inexact Rounded -sqtx4373 squareroot 0.763 -> 0.873 Inexact Rounded -sqtx4374 squareroot 0.0763 -> 0.276 Inexact Rounded -sqtx4375 squareroot 0.764 -> 0.874 Inexact Rounded -sqtx4376 squareroot 0.0764 -> 0.276 Inexact Rounded -sqtx4377 squareroot 0.765 -> 0.875 Inexact Rounded -sqtx4378 squareroot 0.0765 -> 0.277 Inexact Rounded -sqtx4379 squareroot 0.766 -> 0.875 Inexact Rounded -sqtx4380 squareroot 0.0766 -> 0.277 Inexact Rounded -sqtx4381 squareroot 0.767 -> 0.876 Inexact Rounded -sqtx4382 squareroot 0.0767 -> 0.277 Inexact Rounded -sqtx4383 squareroot 0.768 -> 0.876 Inexact Rounded -sqtx4384 squareroot 0.0768 -> 0.277 Inexact Rounded -sqtx4385 squareroot 0.769 -> 0.877 Inexact Rounded -sqtx4386 squareroot 0.0769 -> 0.277 Inexact Rounded -sqtx4387 squareroot 0.771 -> 0.878 Inexact Rounded -sqtx4388 squareroot 0.0771 -> 0.278 Inexact Rounded -sqtx4389 squareroot 0.772 -> 0.879 Inexact Rounded -sqtx4390 squareroot 0.0772 -> 0.278 Inexact Rounded -sqtx4391 squareroot 0.773 -> 0.879 Inexact Rounded -sqtx4392 squareroot 0.0773 -> 0.278 Inexact Rounded -sqtx4393 squareroot 0.774 -> 0.880 Inexact Rounded -sqtx4394 squareroot 0.0774 -> 0.278 Inexact Rounded -sqtx4395 squareroot 0.775 -> 0.880 Inexact Rounded -sqtx4396 squareroot 0.0775 -> 0.278 Inexact Rounded -sqtx4397 squareroot 0.776 -> 0.881 Inexact Rounded -sqtx4398 squareroot 0.0776 -> 0.279 Inexact Rounded -sqtx4399 squareroot 0.777 -> 0.881 Inexact Rounded -sqtx4400 squareroot 0.0777 -> 0.279 Inexact Rounded -sqtx4401 squareroot 0.778 -> 0.882 Inexact Rounded -sqtx4402 squareroot 0.0778 -> 0.279 Inexact Rounded -sqtx4403 squareroot 0.779 -> 0.883 Inexact Rounded -sqtx4404 squareroot 0.0779 -> 0.279 Inexact Rounded -sqtx4405 squareroot 0.781 -> 0.884 Inexact Rounded -sqtx4406 squareroot 0.0781 -> 0.279 Inexact Rounded -sqtx4407 squareroot 0.782 -> 0.884 Inexact Rounded -sqtx4408 squareroot 0.0782 -> 0.280 Inexact Rounded -sqtx4409 squareroot 0.783 -> 0.885 Inexact Rounded -sqtx4410 squareroot 0.0783 -> 0.280 Inexact Rounded -sqtx4411 squareroot 0.784 -> 0.885 Inexact Rounded +-- sqtx4315 squareroot 0.731 -> 0.855 Inexact Rounded +-- sqtx4316 squareroot 0.0731 -> 0.270 Inexact Rounded +-- sqtx4317 squareroot 0.732 -> 0.856 Inexact Rounded +-- sqtx4318 squareroot 0.0732 -> 0.271 Inexact Rounded +-- sqtx4319 squareroot 0.733 -> 0.856 Inexact Rounded +-- sqtx4320 squareroot 0.0733 -> 0.271 Inexact Rounded +-- sqtx4321 squareroot 0.734 -> 0.857 Inexact Rounded +-- sqtx4322 squareroot 0.0734 -> 0.271 Inexact Rounded +-- sqtx4323 squareroot 0.735 -> 0.857 Inexact Rounded +-- sqtx4324 squareroot 0.0735 -> 0.271 Inexact Rounded +-- sqtx4325 squareroot 0.736 -> 0.858 Inexact Rounded +-- sqtx4326 squareroot 0.0736 -> 0.271 Inexact Rounded +-- sqtx4327 squareroot 0.737 -> 0.858 Inexact Rounded +-- sqtx4328 squareroot 0.0737 -> 0.271 Inexact Rounded +-- sqtx4329 squareroot 0.738 -> 0.859 Inexact Rounded +-- sqtx4330 squareroot 0.0738 -> 0.272 Inexact Rounded +-- sqtx4331 squareroot 0.739 -> 0.860 Inexact Rounded +-- sqtx4332 squareroot 0.0739 -> 0.272 Inexact Rounded +-- sqtx4333 squareroot 0.741 -> 0.861 Inexact Rounded +-- sqtx4334 squareroot 0.0741 -> 0.272 Inexact Rounded +-- sqtx4335 squareroot 0.742 -> 0.861 Inexact Rounded +-- sqtx4336 squareroot 0.0742 -> 0.272 Inexact Rounded +-- sqtx4337 squareroot 0.743 -> 0.862 Inexact Rounded +-- sqtx4338 squareroot 0.0743 -> 0.273 Inexact Rounded +-- sqtx4339 squareroot 0.744 -> 0.863 Inexact Rounded +-- sqtx4340 squareroot 0.0744 -> 0.273 Inexact Rounded +-- sqtx4341 squareroot 0.745 -> 0.863 Inexact Rounded +-- sqtx4342 squareroot 0.0745 -> 0.273 Inexact Rounded +-- sqtx4343 squareroot 0.746 -> 0.864 Inexact Rounded +-- sqtx4344 squareroot 0.0746 -> 0.273 Inexact Rounded +-- sqtx4345 squareroot 0.747 -> 0.864 Inexact Rounded +-- sqtx4346 squareroot 0.0747 -> 0.273 Inexact Rounded +-- sqtx4347 squareroot 0.748 -> 0.865 Inexact Rounded +-- sqtx4348 squareroot 0.0748 -> 0.273 Inexact Rounded +-- sqtx4349 squareroot 0.749 -> 0.865 Inexact Rounded +-- sqtx4350 squareroot 0.0749 -> 0.274 Inexact Rounded +-- sqtx4351 squareroot 0.751 -> 0.867 Inexact Rounded +-- sqtx4352 squareroot 0.0751 -> 0.274 Inexact Rounded +-- sqtx4353 squareroot 0.752 -> 0.867 Inexact Rounded +-- sqtx4354 squareroot 0.0752 -> 0.274 Inexact Rounded +-- sqtx4355 squareroot 0.753 -> 0.868 Inexact Rounded +-- sqtx4356 squareroot 0.0753 -> 0.274 Inexact Rounded +-- sqtx4357 squareroot 0.754 -> 0.868 Inexact Rounded +-- sqtx4358 squareroot 0.0754 -> 0.275 Inexact Rounded +-- sqtx4359 squareroot 0.755 -> 0.869 Inexact Rounded +-- sqtx4360 squareroot 0.0755 -> 0.275 Inexact Rounded +-- sqtx4361 squareroot 0.756 -> 0.869 Inexact Rounded +-- sqtx4362 squareroot 0.0756 -> 0.275 Inexact Rounded +-- sqtx4363 squareroot 0.757 -> 0.870 Inexact Rounded +-- sqtx4364 squareroot 0.0757 -> 0.275 Inexact Rounded +-- sqtx4365 squareroot 0.758 -> 0.871 Inexact Rounded +-- sqtx4366 squareroot 0.0758 -> 0.275 Inexact Rounded +-- sqtx4367 squareroot 0.759 -> 0.871 Inexact Rounded +-- sqtx4368 squareroot 0.0759 -> 0.275 Inexact Rounded +-- sqtx4369 squareroot 0.761 -> 0.872 Inexact Rounded +-- sqtx4370 squareroot 0.0761 -> 0.276 Inexact Rounded +-- sqtx4371 squareroot 0.762 -> 0.873 Inexact Rounded +-- sqtx4372 squareroot 0.0762 -> 0.276 Inexact Rounded +-- sqtx4373 squareroot 0.763 -> 0.873 Inexact Rounded +-- sqtx4374 squareroot 0.0763 -> 0.276 Inexact Rounded +-- sqtx4375 squareroot 0.764 -> 0.874 Inexact Rounded +-- sqtx4376 squareroot 0.0764 -> 0.276 Inexact Rounded +-- sqtx4377 squareroot 0.765 -> 0.875 Inexact Rounded +-- sqtx4378 squareroot 0.0765 -> 0.277 Inexact Rounded +-- sqtx4379 squareroot 0.766 -> 0.875 Inexact Rounded +-- sqtx4380 squareroot 0.0766 -> 0.277 Inexact Rounded +-- sqtx4381 squareroot 0.767 -> 0.876 Inexact Rounded +-- sqtx4382 squareroot 0.0767 -> 0.277 Inexact Rounded +-- sqtx4383 squareroot 0.768 -> 0.876 Inexact Rounded +-- sqtx4384 squareroot 0.0768 -> 0.277 Inexact Rounded +-- sqtx4385 squareroot 0.769 -> 0.877 Inexact Rounded +-- sqtx4386 squareroot 0.0769 -> 0.277 Inexact Rounded +-- sqtx4387 squareroot 0.771 -> 0.878 Inexact Rounded +-- sqtx4388 squareroot 0.0771 -> 0.278 Inexact Rounded +-- sqtx4389 squareroot 0.772 -> 0.879 Inexact Rounded +-- sqtx4390 squareroot 0.0772 -> 0.278 Inexact Rounded +-- sqtx4391 squareroot 0.773 -> 0.879 Inexact Rounded +-- sqtx4392 squareroot 0.0773 -> 0.278 Inexact Rounded +-- sqtx4393 squareroot 0.774 -> 0.880 Inexact Rounded +-- sqtx4394 squareroot 0.0774 -> 0.278 Inexact Rounded +-- sqtx4395 squareroot 0.775 -> 0.880 Inexact Rounded +-- sqtx4396 squareroot 0.0775 -> 0.278 Inexact Rounded +-- sqtx4397 squareroot 0.776 -> 0.881 Inexact Rounded +-- sqtx4398 squareroot 0.0776 -> 0.279 Inexact Rounded +-- sqtx4399 squareroot 0.777 -> 0.881 Inexact Rounded +-- sqtx4400 squareroot 0.0777 -> 0.279 Inexact Rounded +-- sqtx4401 squareroot 0.778 -> 0.882 Inexact Rounded +-- sqtx4402 squareroot 0.0778 -> 0.279 Inexact Rounded +-- sqtx4403 squareroot 0.779 -> 0.883 Inexact Rounded +-- sqtx4404 squareroot 0.0779 -> 0.279 Inexact Rounded +-- sqtx4405 squareroot 0.781 -> 0.884 Inexact Rounded +-- sqtx4406 squareroot 0.0781 -> 0.279 Inexact Rounded +-- sqtx4407 squareroot 0.782 -> 0.884 Inexact Rounded +-- sqtx4408 squareroot 0.0782 -> 0.280 Inexact Rounded +-- sqtx4409 squareroot 0.783 -> 0.885 Inexact Rounded +-- sqtx4410 squareroot 0.0783 -> 0.280 Inexact Rounded +-- sqtx4411 squareroot 0.784 -> 0.885 Inexact Rounded sqtx4412 squareroot 0.0784 -> 0.28 -sqtx4413 squareroot 0.785 -> 0.886 Inexact Rounded -sqtx4414 squareroot 0.0785 -> 0.280 Inexact Rounded -sqtx4415 squareroot 0.786 -> 0.887 Inexact Rounded -sqtx4416 squareroot 0.0786 -> 0.280 Inexact Rounded -sqtx4417 squareroot 0.787 -> 0.887 Inexact Rounded -sqtx4418 squareroot 0.0787 -> 0.281 Inexact Rounded -sqtx4419 squareroot 0.788 -> 0.888 Inexact Rounded -sqtx4420 squareroot 0.0788 -> 0.281 Inexact Rounded -sqtx4421 squareroot 0.789 -> 0.888 Inexact Rounded -sqtx4422 squareroot 0.0789 -> 0.281 Inexact Rounded -sqtx4423 squareroot 0.791 -> 0.889 Inexact Rounded -sqtx4424 squareroot 0.0791 -> 0.281 Inexact Rounded -sqtx4425 squareroot 0.792 -> 0.890 Inexact Rounded -sqtx4426 squareroot 0.0792 -> 0.281 Inexact Rounded -sqtx4427 squareroot 0.793 -> 0.891 Inexact Rounded -sqtx4428 squareroot 0.0793 -> 0.282 Inexact Rounded -sqtx4429 squareroot 0.794 -> 0.891 Inexact Rounded -sqtx4430 squareroot 0.0794 -> 0.282 Inexact Rounded -sqtx4431 squareroot 0.795 -> 0.892 Inexact Rounded -sqtx4432 squareroot 0.0795 -> 0.282 Inexact Rounded -sqtx4433 squareroot 0.796 -> 0.892 Inexact Rounded -sqtx4434 squareroot 0.0796 -> 0.282 Inexact Rounded -sqtx4435 squareroot 0.797 -> 0.893 Inexact Rounded -sqtx4436 squareroot 0.0797 -> 0.282 Inexact Rounded -sqtx4437 squareroot 0.798 -> 0.893 Inexact Rounded -sqtx4438 squareroot 0.0798 -> 0.282 Inexact Rounded -sqtx4439 squareroot 0.799 -> 0.894 Inexact Rounded -sqtx4440 squareroot 0.0799 -> 0.283 Inexact Rounded -sqtx4441 squareroot 0.801 -> 0.895 Inexact Rounded -sqtx4442 squareroot 0.0801 -> 0.283 Inexact Rounded -sqtx4443 squareroot 0.802 -> 0.896 Inexact Rounded -sqtx4444 squareroot 0.0802 -> 0.283 Inexact Rounded -sqtx4445 squareroot 0.803 -> 0.896 Inexact Rounded -sqtx4446 squareroot 0.0803 -> 0.283 Inexact Rounded -sqtx4447 squareroot 0.804 -> 0.897 Inexact Rounded -sqtx4448 squareroot 0.0804 -> 0.284 Inexact Rounded -sqtx4449 squareroot 0.805 -> 0.897 Inexact Rounded -sqtx4450 squareroot 0.0805 -> 0.284 Inexact Rounded -sqtx4451 squareroot 0.806 -> 0.898 Inexact Rounded -sqtx4452 squareroot 0.0806 -> 0.284 Inexact Rounded -sqtx4453 squareroot 0.807 -> 0.898 Inexact Rounded -sqtx4454 squareroot 0.0807 -> 0.284 Inexact Rounded -sqtx4455 squareroot 0.808 -> 0.899 Inexact Rounded -sqtx4456 squareroot 0.0808 -> 0.284 Inexact Rounded -sqtx4457 squareroot 0.809 -> 0.899 Inexact Rounded -sqtx4458 squareroot 0.0809 -> 0.284 Inexact Rounded -sqtx4459 squareroot 0.811 -> 0.901 Inexact Rounded -sqtx4460 squareroot 0.0811 -> 0.285 Inexact Rounded -sqtx4461 squareroot 0.812 -> 0.901 Inexact Rounded -sqtx4462 squareroot 0.0812 -> 0.285 Inexact Rounded -sqtx4463 squareroot 0.813 -> 0.902 Inexact Rounded -sqtx4464 squareroot 0.0813 -> 0.285 Inexact Rounded -sqtx4465 squareroot 0.814 -> 0.902 Inexact Rounded -sqtx4466 squareroot 0.0814 -> 0.285 Inexact Rounded -sqtx4467 squareroot 0.815 -> 0.903 Inexact Rounded -sqtx4468 squareroot 0.0815 -> 0.285 Inexact Rounded -sqtx4469 squareroot 0.816 -> 0.903 Inexact Rounded -sqtx4470 squareroot 0.0816 -> 0.286 Inexact Rounded -sqtx4471 squareroot 0.817 -> 0.904 Inexact Rounded -sqtx4472 squareroot 0.0817 -> 0.286 Inexact Rounded -sqtx4473 squareroot 0.818 -> 0.904 Inexact Rounded -sqtx4474 squareroot 0.0818 -> 0.286 Inexact Rounded -sqtx4475 squareroot 0.819 -> 0.905 Inexact Rounded -sqtx4476 squareroot 0.0819 -> 0.286 Inexact Rounded -sqtx4477 squareroot 0.821 -> 0.906 Inexact Rounded -sqtx4478 squareroot 0.0821 -> 0.287 Inexact Rounded -sqtx4479 squareroot 0.822 -> 0.907 Inexact Rounded -sqtx4480 squareroot 0.0822 -> 0.287 Inexact Rounded -sqtx4481 squareroot 0.823 -> 0.907 Inexact Rounded -sqtx4482 squareroot 0.0823 -> 0.287 Inexact Rounded -sqtx4483 squareroot 0.824 -> 0.908 Inexact Rounded -sqtx4484 squareroot 0.0824 -> 0.287 Inexact Rounded -sqtx4485 squareroot 0.825 -> 0.908 Inexact Rounded -sqtx4486 squareroot 0.0825 -> 0.287 Inexact Rounded -sqtx4487 squareroot 0.826 -> 0.909 Inexact Rounded -sqtx4488 squareroot 0.0826 -> 0.287 Inexact Rounded -sqtx4489 squareroot 0.827 -> 0.909 Inexact Rounded -sqtx4490 squareroot 0.0827 -> 0.288 Inexact Rounded -sqtx4491 squareroot 0.828 -> 0.910 Inexact Rounded -sqtx4492 squareroot 0.0828 -> 0.288 Inexact Rounded -sqtx4493 squareroot 0.829 -> 0.910 Inexact Rounded -sqtx4494 squareroot 0.0829 -> 0.288 Inexact Rounded -sqtx4495 squareroot 0.831 -> 0.912 Inexact Rounded -sqtx4496 squareroot 0.0831 -> 0.288 Inexact Rounded -sqtx4497 squareroot 0.832 -> 0.912 Inexact Rounded -sqtx4498 squareroot 0.0832 -> 0.288 Inexact Rounded -sqtx4499 squareroot 0.833 -> 0.913 Inexact Rounded -sqtx4500 squareroot 0.0833 -> 0.289 Inexact Rounded -sqtx4501 squareroot 0.834 -> 0.913 Inexact Rounded -sqtx4502 squareroot 0.0834 -> 0.289 Inexact Rounded -sqtx4503 squareroot 0.835 -> 0.914 Inexact Rounded -sqtx4504 squareroot 0.0835 -> 0.289 Inexact Rounded -sqtx4505 squareroot 0.836 -> 0.914 Inexact Rounded -sqtx4506 squareroot 0.0836 -> 0.289 Inexact Rounded -sqtx4507 squareroot 0.837 -> 0.915 Inexact Rounded -sqtx4508 squareroot 0.0837 -> 0.289 Inexact Rounded -sqtx4509 squareroot 0.838 -> 0.915 Inexact Rounded -sqtx4510 squareroot 0.0838 -> 0.289 Inexact Rounded -sqtx4511 squareroot 0.839 -> 0.916 Inexact Rounded -sqtx4512 squareroot 0.0839 -> 0.290 Inexact Rounded -sqtx4513 squareroot 0.841 -> 0.917 Inexact Rounded +-- sqtx4413 squareroot 0.785 -> 0.886 Inexact Rounded +-- sqtx4414 squareroot 0.0785 -> 0.280 Inexact Rounded +-- sqtx4415 squareroot 0.786 -> 0.887 Inexact Rounded +-- sqtx4416 squareroot 0.0786 -> 0.280 Inexact Rounded +-- sqtx4417 squareroot 0.787 -> 0.887 Inexact Rounded +-- sqtx4418 squareroot 0.0787 -> 0.281 Inexact Rounded +-- sqtx4419 squareroot 0.788 -> 0.888 Inexact Rounded +-- sqtx4420 squareroot 0.0788 -> 0.281 Inexact Rounded +-- sqtx4421 squareroot 0.789 -> 0.888 Inexact Rounded +-- sqtx4422 squareroot 0.0789 -> 0.281 Inexact Rounded +-- sqtx4423 squareroot 0.791 -> 0.889 Inexact Rounded +-- sqtx4424 squareroot 0.0791 -> 0.281 Inexact Rounded +-- sqtx4425 squareroot 0.792 -> 0.890 Inexact Rounded +-- sqtx4426 squareroot 0.0792 -> 0.281 Inexact Rounded +-- sqtx4427 squareroot 0.793 -> 0.891 Inexact Rounded +-- sqtx4428 squareroot 0.0793 -> 0.282 Inexact Rounded +-- sqtx4429 squareroot 0.794 -> 0.891 Inexact Rounded +-- sqtx4430 squareroot 0.0794 -> 0.282 Inexact Rounded +-- sqtx4431 squareroot 0.795 -> 0.892 Inexact Rounded +-- sqtx4432 squareroot 0.0795 -> 0.282 Inexact Rounded +-- sqtx4433 squareroot 0.796 -> 0.892 Inexact Rounded +-- sqtx4434 squareroot 0.0796 -> 0.282 Inexact Rounded +-- sqtx4435 squareroot 0.797 -> 0.893 Inexact Rounded +-- sqtx4436 squareroot 0.0797 -> 0.282 Inexact Rounded +-- sqtx4437 squareroot 0.798 -> 0.893 Inexact Rounded +-- sqtx4438 squareroot 0.0798 -> 0.282 Inexact Rounded +-- sqtx4439 squareroot 0.799 -> 0.894 Inexact Rounded +-- sqtx4440 squareroot 0.0799 -> 0.283 Inexact Rounded +-- sqtx4441 squareroot 0.801 -> 0.895 Inexact Rounded +-- sqtx4442 squareroot 0.0801 -> 0.283 Inexact Rounded +-- sqtx4443 squareroot 0.802 -> 0.896 Inexact Rounded +-- sqtx4444 squareroot 0.0802 -> 0.283 Inexact Rounded +-- sqtx4445 squareroot 0.803 -> 0.896 Inexact Rounded +-- sqtx4446 squareroot 0.0803 -> 0.283 Inexact Rounded +-- sqtx4447 squareroot 0.804 -> 0.897 Inexact Rounded +-- sqtx4448 squareroot 0.0804 -> 0.284 Inexact Rounded +-- sqtx4449 squareroot 0.805 -> 0.897 Inexact Rounded +-- sqtx4450 squareroot 0.0805 -> 0.284 Inexact Rounded +-- sqtx4451 squareroot 0.806 -> 0.898 Inexact Rounded +-- sqtx4452 squareroot 0.0806 -> 0.284 Inexact Rounded +-- sqtx4453 squareroot 0.807 -> 0.898 Inexact Rounded +-- sqtx4454 squareroot 0.0807 -> 0.284 Inexact Rounded +-- sqtx4455 squareroot 0.808 -> 0.899 Inexact Rounded +-- sqtx4456 squareroot 0.0808 -> 0.284 Inexact Rounded +-- sqtx4457 squareroot 0.809 -> 0.899 Inexact Rounded +-- sqtx4458 squareroot 0.0809 -> 0.284 Inexact Rounded +-- sqtx4459 squareroot 0.811 -> 0.901 Inexact Rounded +-- sqtx4460 squareroot 0.0811 -> 0.285 Inexact Rounded +-- sqtx4461 squareroot 0.812 -> 0.901 Inexact Rounded +-- sqtx4462 squareroot 0.0812 -> 0.285 Inexact Rounded +-- sqtx4463 squareroot 0.813 -> 0.902 Inexact Rounded +-- sqtx4464 squareroot 0.0813 -> 0.285 Inexact Rounded +-- sqtx4465 squareroot 0.814 -> 0.902 Inexact Rounded +-- sqtx4466 squareroot 0.0814 -> 0.285 Inexact Rounded +-- sqtx4467 squareroot 0.815 -> 0.903 Inexact Rounded +-- sqtx4468 squareroot 0.0815 -> 0.285 Inexact Rounded +-- sqtx4469 squareroot 0.816 -> 0.903 Inexact Rounded +-- sqtx4470 squareroot 0.0816 -> 0.286 Inexact Rounded +-- sqtx4471 squareroot 0.817 -> 0.904 Inexact Rounded +-- sqtx4472 squareroot 0.0817 -> 0.286 Inexact Rounded +-- sqtx4473 squareroot 0.818 -> 0.904 Inexact Rounded +-- sqtx4474 squareroot 0.0818 -> 0.286 Inexact Rounded +-- sqtx4475 squareroot 0.819 -> 0.905 Inexact Rounded +-- sqtx4476 squareroot 0.0819 -> 0.286 Inexact Rounded +-- sqtx4477 squareroot 0.821 -> 0.906 Inexact Rounded +-- sqtx4478 squareroot 0.0821 -> 0.287 Inexact Rounded +-- sqtx4479 squareroot 0.822 -> 0.907 Inexact Rounded +-- sqtx4480 squareroot 0.0822 -> 0.287 Inexact Rounded +-- sqtx4481 squareroot 0.823 -> 0.907 Inexact Rounded +-- sqtx4482 squareroot 0.0823 -> 0.287 Inexact Rounded +-- sqtx4483 squareroot 0.824 -> 0.908 Inexact Rounded +-- sqtx4484 squareroot 0.0824 -> 0.287 Inexact Rounded +-- sqtx4485 squareroot 0.825 -> 0.908 Inexact Rounded +-- sqtx4486 squareroot 0.0825 -> 0.287 Inexact Rounded +-- sqtx4487 squareroot 0.826 -> 0.909 Inexact Rounded +-- sqtx4488 squareroot 0.0826 -> 0.287 Inexact Rounded +-- sqtx4489 squareroot 0.827 -> 0.909 Inexact Rounded +-- sqtx4490 squareroot 0.0827 -> 0.288 Inexact Rounded +-- sqtx4491 squareroot 0.828 -> 0.910 Inexact Rounded +-- sqtx4492 squareroot 0.0828 -> 0.288 Inexact Rounded +-- sqtx4493 squareroot 0.829 -> 0.910 Inexact Rounded +-- sqtx4494 squareroot 0.0829 -> 0.288 Inexact Rounded +-- sqtx4495 squareroot 0.831 -> 0.912 Inexact Rounded +-- sqtx4496 squareroot 0.0831 -> 0.288 Inexact Rounded +-- sqtx4497 squareroot 0.832 -> 0.912 Inexact Rounded +-- sqtx4498 squareroot 0.0832 -> 0.288 Inexact Rounded +-- sqtx4499 squareroot 0.833 -> 0.913 Inexact Rounded +-- sqtx4500 squareroot 0.0833 -> 0.289 Inexact Rounded +-- sqtx4501 squareroot 0.834 -> 0.913 Inexact Rounded +-- sqtx4502 squareroot 0.0834 -> 0.289 Inexact Rounded +-- sqtx4503 squareroot 0.835 -> 0.914 Inexact Rounded +-- sqtx4504 squareroot 0.0835 -> 0.289 Inexact Rounded +-- sqtx4505 squareroot 0.836 -> 0.914 Inexact Rounded +-- sqtx4506 squareroot 0.0836 -> 0.289 Inexact Rounded +-- sqtx4507 squareroot 0.837 -> 0.915 Inexact Rounded +-- sqtx4508 squareroot 0.0837 -> 0.289 Inexact Rounded +-- sqtx4509 squareroot 0.838 -> 0.915 Inexact Rounded +-- sqtx4510 squareroot 0.0838 -> 0.289 Inexact Rounded +-- sqtx4511 squareroot 0.839 -> 0.916 Inexact Rounded +-- sqtx4512 squareroot 0.0839 -> 0.290 Inexact Rounded +-- sqtx4513 squareroot 0.841 -> 0.917 Inexact Rounded sqtx4514 squareroot 0.0841 -> 0.29 -sqtx4515 squareroot 0.842 -> 0.918 Inexact Rounded -sqtx4516 squareroot 0.0842 -> 0.290 Inexact Rounded -sqtx4517 squareroot 0.843 -> 0.918 Inexact Rounded -sqtx4518 squareroot 0.0843 -> 0.290 Inexact Rounded -sqtx4519 squareroot 0.844 -> 0.919 Inexact Rounded -sqtx4520 squareroot 0.0844 -> 0.291 Inexact Rounded -sqtx4521 squareroot 0.845 -> 0.919 Inexact Rounded -sqtx4522 squareroot 0.0845 -> 0.291 Inexact Rounded -sqtx4523 squareroot 0.846 -> 0.920 Inexact Rounded -sqtx4524 squareroot 0.0846 -> 0.291 Inexact Rounded -sqtx4525 squareroot 0.847 -> 0.920 Inexact Rounded -sqtx4526 squareroot 0.0847 -> 0.291 Inexact Rounded -sqtx4527 squareroot 0.848 -> 0.921 Inexact Rounded -sqtx4528 squareroot 0.0848 -> 0.291 Inexact Rounded -sqtx4529 squareroot 0.849 -> 0.921 Inexact Rounded -sqtx4530 squareroot 0.0849 -> 0.291 Inexact Rounded -sqtx4531 squareroot 0.851 -> 0.922 Inexact Rounded -sqtx4532 squareroot 0.0851 -> 0.292 Inexact Rounded -sqtx4533 squareroot 0.852 -> 0.923 Inexact Rounded -sqtx4534 squareroot 0.0852 -> 0.292 Inexact Rounded -sqtx4535 squareroot 0.853 -> 0.924 Inexact Rounded -sqtx4536 squareroot 0.0853 -> 0.292 Inexact Rounded -sqtx4537 squareroot 0.854 -> 0.924 Inexact Rounded -sqtx4538 squareroot 0.0854 -> 0.292 Inexact Rounded -sqtx4539 squareroot 0.855 -> 0.925 Inexact Rounded -sqtx4540 squareroot 0.0855 -> 0.292 Inexact Rounded -sqtx4541 squareroot 0.856 -> 0.925 Inexact Rounded -sqtx4542 squareroot 0.0856 -> 0.293 Inexact Rounded -sqtx4543 squareroot 0.857 -> 0.926 Inexact Rounded -sqtx4544 squareroot 0.0857 -> 0.293 Inexact Rounded -sqtx4545 squareroot 0.858 -> 0.926 Inexact Rounded -sqtx4546 squareroot 0.0858 -> 0.293 Inexact Rounded -sqtx4547 squareroot 0.859 -> 0.927 Inexact Rounded -sqtx4548 squareroot 0.0859 -> 0.293 Inexact Rounded -sqtx4549 squareroot 0.861 -> 0.928 Inexact Rounded -sqtx4550 squareroot 0.0861 -> 0.293 Inexact Rounded -sqtx4551 squareroot 0.862 -> 0.928 Inexact Rounded -sqtx4552 squareroot 0.0862 -> 0.294 Inexact Rounded -sqtx4553 squareroot 0.863 -> 0.929 Inexact Rounded -sqtx4554 squareroot 0.0863 -> 0.294 Inexact Rounded -sqtx4555 squareroot 0.864 -> 0.930 Inexact Rounded -sqtx4556 squareroot 0.0864 -> 0.294 Inexact Rounded -sqtx4557 squareroot 0.865 -> 0.930 Inexact Rounded -sqtx4558 squareroot 0.0865 -> 0.294 Inexact Rounded -sqtx4559 squareroot 0.866 -> 0.931 Inexact Rounded -sqtx4560 squareroot 0.0866 -> 0.294 Inexact Rounded -sqtx4561 squareroot 0.867 -> 0.931 Inexact Rounded -sqtx4562 squareroot 0.0867 -> 0.294 Inexact Rounded -sqtx4563 squareroot 0.868 -> 0.932 Inexact Rounded -sqtx4564 squareroot 0.0868 -> 0.295 Inexact Rounded -sqtx4565 squareroot 0.869 -> 0.932 Inexact Rounded -sqtx4566 squareroot 0.0869 -> 0.295 Inexact Rounded -sqtx4567 squareroot 0.871 -> 0.933 Inexact Rounded -sqtx4568 squareroot 0.0871 -> 0.295 Inexact Rounded -sqtx4569 squareroot 0.872 -> 0.934 Inexact Rounded -sqtx4570 squareroot 0.0872 -> 0.295 Inexact Rounded -sqtx4571 squareroot 0.873 -> 0.934 Inexact Rounded -sqtx4572 squareroot 0.0873 -> 0.295 Inexact Rounded -sqtx4573 squareroot 0.874 -> 0.935 Inexact Rounded -sqtx4574 squareroot 0.0874 -> 0.296 Inexact Rounded -sqtx4575 squareroot 0.875 -> 0.935 Inexact Rounded -sqtx4576 squareroot 0.0875 -> 0.296 Inexact Rounded -sqtx4577 squareroot 0.876 -> 0.936 Inexact Rounded -sqtx4578 squareroot 0.0876 -> 0.296 Inexact Rounded -sqtx4579 squareroot 0.877 -> 0.936 Inexact Rounded -sqtx4580 squareroot 0.0877 -> 0.296 Inexact Rounded -sqtx4581 squareroot 0.878 -> 0.937 Inexact Rounded -sqtx4582 squareroot 0.0878 -> 0.296 Inexact Rounded -sqtx4583 squareroot 0.879 -> 0.938 Inexact Rounded -sqtx4584 squareroot 0.0879 -> 0.296 Inexact Rounded -sqtx4585 squareroot 0.881 -> 0.939 Inexact Rounded -sqtx4586 squareroot 0.0881 -> 0.297 Inexact Rounded -sqtx4587 squareroot 0.882 -> 0.939 Inexact Rounded -sqtx4588 squareroot 0.0882 -> 0.297 Inexact Rounded -sqtx4589 squareroot 0.883 -> 0.940 Inexact Rounded -sqtx4590 squareroot 0.0883 -> 0.297 Inexact Rounded -sqtx4591 squareroot 0.884 -> 0.940 Inexact Rounded -sqtx4592 squareroot 0.0884 -> 0.297 Inexact Rounded -sqtx4593 squareroot 0.885 -> 0.941 Inexact Rounded -sqtx4594 squareroot 0.0885 -> 0.297 Inexact Rounded -sqtx4595 squareroot 0.886 -> 0.941 Inexact Rounded -sqtx4596 squareroot 0.0886 -> 0.298 Inexact Rounded -sqtx4597 squareroot 0.887 -> 0.942 Inexact Rounded -sqtx4598 squareroot 0.0887 -> 0.298 Inexact Rounded -sqtx4599 squareroot 0.888 -> 0.942 Inexact Rounded -sqtx4600 squareroot 0.0888 -> 0.298 Inexact Rounded -sqtx4601 squareroot 0.889 -> 0.943 Inexact Rounded -sqtx4602 squareroot 0.0889 -> 0.298 Inexact Rounded -sqtx4603 squareroot 0.891 -> 0.944 Inexact Rounded -sqtx4604 squareroot 0.0891 -> 0.298 Inexact Rounded -sqtx4605 squareroot 0.892 -> 0.944 Inexact Rounded -sqtx4606 squareroot 0.0892 -> 0.299 Inexact Rounded -sqtx4607 squareroot 0.893 -> 0.945 Inexact Rounded -sqtx4608 squareroot 0.0893 -> 0.299 Inexact Rounded -sqtx4609 squareroot 0.894 -> 0.946 Inexact Rounded -sqtx4610 squareroot 0.0894 -> 0.299 Inexact Rounded -sqtx4611 squareroot 0.895 -> 0.946 Inexact Rounded -sqtx4612 squareroot 0.0895 -> 0.299 Inexact Rounded -sqtx4613 squareroot 0.896 -> 0.947 Inexact Rounded -sqtx4614 squareroot 0.0896 -> 0.299 Inexact Rounded -sqtx4615 squareroot 0.897 -> 0.947 Inexact Rounded -sqtx4616 squareroot 0.0897 -> 0.299 Inexact Rounded -sqtx4617 squareroot 0.898 -> 0.948 Inexact Rounded -sqtx4618 squareroot 0.0898 -> 0.300 Inexact Rounded -sqtx4619 squareroot 0.899 -> 0.948 Inexact Rounded -sqtx4620 squareroot 0.0899 -> 0.300 Inexact Rounded -sqtx4621 squareroot 0.901 -> 0.949 Inexact Rounded -sqtx4622 squareroot 0.0901 -> 0.300 Inexact Rounded -sqtx4623 squareroot 0.902 -> 0.950 Inexact Rounded -sqtx4624 squareroot 0.0902 -> 0.300 Inexact Rounded -sqtx4625 squareroot 0.903 -> 0.950 Inexact Rounded -sqtx4626 squareroot 0.0903 -> 0.300 Inexact Rounded -sqtx4627 squareroot 0.904 -> 0.951 Inexact Rounded -sqtx4628 squareroot 0.0904 -> 0.301 Inexact Rounded -sqtx4629 squareroot 0.905 -> 0.951 Inexact Rounded -sqtx4630 squareroot 0.0905 -> 0.301 Inexact Rounded -sqtx4631 squareroot 0.906 -> 0.952 Inexact Rounded -sqtx4632 squareroot 0.0906 -> 0.301 Inexact Rounded -sqtx4633 squareroot 0.907 -> 0.952 Inexact Rounded -sqtx4634 squareroot 0.0907 -> 0.301 Inexact Rounded -sqtx4635 squareroot 0.908 -> 0.953 Inexact Rounded -sqtx4636 squareroot 0.0908 -> 0.301 Inexact Rounded -sqtx4637 squareroot 0.909 -> 0.953 Inexact Rounded -sqtx4638 squareroot 0.0909 -> 0.301 Inexact Rounded -sqtx4639 squareroot 0.911 -> 0.954 Inexact Rounded -sqtx4640 squareroot 0.0911 -> 0.302 Inexact Rounded -sqtx4641 squareroot 0.912 -> 0.955 Inexact Rounded -sqtx4642 squareroot 0.0912 -> 0.302 Inexact Rounded -sqtx4643 squareroot 0.913 -> 0.956 Inexact Rounded -sqtx4644 squareroot 0.0913 -> 0.302 Inexact Rounded -sqtx4645 squareroot 0.914 -> 0.956 Inexact Rounded -sqtx4646 squareroot 0.0914 -> 0.302 Inexact Rounded -sqtx4647 squareroot 0.915 -> 0.957 Inexact Rounded -sqtx4648 squareroot 0.0915 -> 0.302 Inexact Rounded -sqtx4649 squareroot 0.916 -> 0.957 Inexact Rounded -sqtx4650 squareroot 0.0916 -> 0.303 Inexact Rounded -sqtx4651 squareroot 0.917 -> 0.958 Inexact Rounded -sqtx4652 squareroot 0.0917 -> 0.303 Inexact Rounded -sqtx4653 squareroot 0.918 -> 0.958 Inexact Rounded -sqtx4654 squareroot 0.0918 -> 0.303 Inexact Rounded -sqtx4655 squareroot 0.919 -> 0.959 Inexact Rounded -sqtx4656 squareroot 0.0919 -> 0.303 Inexact Rounded -sqtx4657 squareroot 0.921 -> 0.960 Inexact Rounded -sqtx4658 squareroot 0.0921 -> 0.303 Inexact Rounded -sqtx4659 squareroot 0.922 -> 0.960 Inexact Rounded -sqtx4660 squareroot 0.0922 -> 0.304 Inexact Rounded -sqtx4661 squareroot 0.923 -> 0.961 Inexact Rounded -sqtx4662 squareroot 0.0923 -> 0.304 Inexact Rounded -sqtx4663 squareroot 0.924 -> 0.961 Inexact Rounded -sqtx4664 squareroot 0.0924 -> 0.304 Inexact Rounded -sqtx4665 squareroot 0.925 -> 0.962 Inexact Rounded -sqtx4666 squareroot 0.0925 -> 0.304 Inexact Rounded -sqtx4667 squareroot 0.926 -> 0.962 Inexact Rounded -sqtx4668 squareroot 0.0926 -> 0.304 Inexact Rounded -sqtx4669 squareroot 0.927 -> 0.963 Inexact Rounded -sqtx4670 squareroot 0.0927 -> 0.304 Inexact Rounded -sqtx4671 squareroot 0.928 -> 0.963 Inexact Rounded -sqtx4672 squareroot 0.0928 -> 0.305 Inexact Rounded -sqtx4673 squareroot 0.929 -> 0.964 Inexact Rounded -sqtx4674 squareroot 0.0929 -> 0.305 Inexact Rounded -sqtx4675 squareroot 0.931 -> 0.965 Inexact Rounded -sqtx4676 squareroot 0.0931 -> 0.305 Inexact Rounded -sqtx4677 squareroot 0.932 -> 0.965 Inexact Rounded -sqtx4678 squareroot 0.0932 -> 0.305 Inexact Rounded -sqtx4679 squareroot 0.933 -> 0.966 Inexact Rounded -sqtx4680 squareroot 0.0933 -> 0.305 Inexact Rounded -sqtx4681 squareroot 0.934 -> 0.966 Inexact Rounded -sqtx4682 squareroot 0.0934 -> 0.306 Inexact Rounded -sqtx4683 squareroot 0.935 -> 0.967 Inexact Rounded -sqtx4684 squareroot 0.0935 -> 0.306 Inexact Rounded -sqtx4685 squareroot 0.936 -> 0.967 Inexact Rounded -sqtx4686 squareroot 0.0936 -> 0.306 Inexact Rounded -sqtx4687 squareroot 0.937 -> 0.968 Inexact Rounded -sqtx4688 squareroot 0.0937 -> 0.306 Inexact Rounded -sqtx4689 squareroot 0.938 -> 0.969 Inexact Rounded -sqtx4690 squareroot 0.0938 -> 0.306 Inexact Rounded -sqtx4691 squareroot 0.939 -> 0.969 Inexact Rounded -sqtx4692 squareroot 0.0939 -> 0.306 Inexact Rounded -sqtx4693 squareroot 0.941 -> 0.970 Inexact Rounded -sqtx4694 squareroot 0.0941 -> 0.307 Inexact Rounded -sqtx4695 squareroot 0.942 -> 0.971 Inexact Rounded -sqtx4696 squareroot 0.0942 -> 0.307 Inexact Rounded -sqtx4697 squareroot 0.943 -> 0.971 Inexact Rounded -sqtx4698 squareroot 0.0943 -> 0.307 Inexact Rounded -sqtx4699 squareroot 0.944 -> 0.972 Inexact Rounded -sqtx4700 squareroot 0.0944 -> 0.307 Inexact Rounded -sqtx4701 squareroot 0.945 -> 0.972 Inexact Rounded -sqtx4702 squareroot 0.0945 -> 0.307 Inexact Rounded -sqtx4703 squareroot 0.946 -> 0.973 Inexact Rounded -sqtx4704 squareroot 0.0946 -> 0.308 Inexact Rounded -sqtx4705 squareroot 0.947 -> 0.973 Inexact Rounded -sqtx4706 squareroot 0.0947 -> 0.308 Inexact Rounded -sqtx4707 squareroot 0.948 -> 0.974 Inexact Rounded -sqtx4708 squareroot 0.0948 -> 0.308 Inexact Rounded -sqtx4709 squareroot 0.949 -> 0.974 Inexact Rounded -sqtx4710 squareroot 0.0949 -> 0.308 Inexact Rounded -sqtx4711 squareroot 0.951 -> 0.975 Inexact Rounded -sqtx4712 squareroot 0.0951 -> 0.308 Inexact Rounded -sqtx4713 squareroot 0.952 -> 0.976 Inexact Rounded -sqtx4714 squareroot 0.0952 -> 0.309 Inexact Rounded -sqtx4715 squareroot 0.953 -> 0.976 Inexact Rounded -sqtx4716 squareroot 0.0953 -> 0.309 Inexact Rounded -sqtx4717 squareroot 0.954 -> 0.977 Inexact Rounded -sqtx4718 squareroot 0.0954 -> 0.309 Inexact Rounded -sqtx4719 squareroot 0.955 -> 0.977 Inexact Rounded -sqtx4720 squareroot 0.0955 -> 0.309 Inexact Rounded -sqtx4721 squareroot 0.956 -> 0.978 Inexact Rounded -sqtx4722 squareroot 0.0956 -> 0.309 Inexact Rounded -sqtx4723 squareroot 0.957 -> 0.978 Inexact Rounded -sqtx4724 squareroot 0.0957 -> 0.309 Inexact Rounded -sqtx4725 squareroot 0.958 -> 0.979 Inexact Rounded -sqtx4726 squareroot 0.0958 -> 0.310 Inexact Rounded -sqtx4727 squareroot 0.959 -> 0.979 Inexact Rounded -sqtx4728 squareroot 0.0959 -> 0.310 Inexact Rounded -sqtx4729 squareroot 0.961 -> 0.980 Inexact Rounded +-- sqtx4515 squareroot 0.842 -> 0.918 Inexact Rounded +-- sqtx4516 squareroot 0.0842 -> 0.290 Inexact Rounded +-- sqtx4517 squareroot 0.843 -> 0.918 Inexact Rounded +-- sqtx4518 squareroot 0.0843 -> 0.290 Inexact Rounded +-- sqtx4519 squareroot 0.844 -> 0.919 Inexact Rounded +-- sqtx4520 squareroot 0.0844 -> 0.291 Inexact Rounded +-- sqtx4521 squareroot 0.845 -> 0.919 Inexact Rounded +-- sqtx4522 squareroot 0.0845 -> 0.291 Inexact Rounded +-- sqtx4523 squareroot 0.846 -> 0.920 Inexact Rounded +-- sqtx4524 squareroot 0.0846 -> 0.291 Inexact Rounded +-- sqtx4525 squareroot 0.847 -> 0.920 Inexact Rounded +-- sqtx4526 squareroot 0.0847 -> 0.291 Inexact Rounded +-- sqtx4527 squareroot 0.848 -> 0.921 Inexact Rounded +-- sqtx4528 squareroot 0.0848 -> 0.291 Inexact Rounded +-- sqtx4529 squareroot 0.849 -> 0.921 Inexact Rounded +-- sqtx4530 squareroot 0.0849 -> 0.291 Inexact Rounded +-- sqtx4531 squareroot 0.851 -> 0.922 Inexact Rounded +-- sqtx4532 squareroot 0.0851 -> 0.292 Inexact Rounded +-- sqtx4533 squareroot 0.852 -> 0.923 Inexact Rounded +-- sqtx4534 squareroot 0.0852 -> 0.292 Inexact Rounded +-- sqtx4535 squareroot 0.853 -> 0.924 Inexact Rounded +-- sqtx4536 squareroot 0.0853 -> 0.292 Inexact Rounded +-- sqtx4537 squareroot 0.854 -> 0.924 Inexact Rounded +-- sqtx4538 squareroot 0.0854 -> 0.292 Inexact Rounded +-- sqtx4539 squareroot 0.855 -> 0.925 Inexact Rounded +-- sqtx4540 squareroot 0.0855 -> 0.292 Inexact Rounded +-- sqtx4541 squareroot 0.856 -> 0.925 Inexact Rounded +-- sqtx4542 squareroot 0.0856 -> 0.293 Inexact Rounded +-- sqtx4543 squareroot 0.857 -> 0.926 Inexact Rounded +-- sqtx4544 squareroot 0.0857 -> 0.293 Inexact Rounded +-- sqtx4545 squareroot 0.858 -> 0.926 Inexact Rounded +-- sqtx4546 squareroot 0.0858 -> 0.293 Inexact Rounded +-- sqtx4547 squareroot 0.859 -> 0.927 Inexact Rounded +-- sqtx4548 squareroot 0.0859 -> 0.293 Inexact Rounded +-- sqtx4549 squareroot 0.861 -> 0.928 Inexact Rounded +-- sqtx4550 squareroot 0.0861 -> 0.293 Inexact Rounded +-- sqtx4551 squareroot 0.862 -> 0.928 Inexact Rounded +-- sqtx4552 squareroot 0.0862 -> 0.294 Inexact Rounded +-- sqtx4553 squareroot 0.863 -> 0.929 Inexact Rounded +-- sqtx4554 squareroot 0.0863 -> 0.294 Inexact Rounded +-- sqtx4555 squareroot 0.864 -> 0.930 Inexact Rounded +-- sqtx4556 squareroot 0.0864 -> 0.294 Inexact Rounded +-- sqtx4557 squareroot 0.865 -> 0.930 Inexact Rounded +-- sqtx4558 squareroot 0.0865 -> 0.294 Inexact Rounded +-- sqtx4559 squareroot 0.866 -> 0.931 Inexact Rounded +-- sqtx4560 squareroot 0.0866 -> 0.294 Inexact Rounded +-- sqtx4561 squareroot 0.867 -> 0.931 Inexact Rounded +-- sqtx4562 squareroot 0.0867 -> 0.294 Inexact Rounded +-- sqtx4563 squareroot 0.868 -> 0.932 Inexact Rounded +-- sqtx4564 squareroot 0.0868 -> 0.295 Inexact Rounded +-- sqtx4565 squareroot 0.869 -> 0.932 Inexact Rounded +-- sqtx4566 squareroot 0.0869 -> 0.295 Inexact Rounded +-- sqtx4567 squareroot 0.871 -> 0.933 Inexact Rounded +-- sqtx4568 squareroot 0.0871 -> 0.295 Inexact Rounded +-- sqtx4569 squareroot 0.872 -> 0.934 Inexact Rounded +-- sqtx4570 squareroot 0.0872 -> 0.295 Inexact Rounded +-- sqtx4571 squareroot 0.873 -> 0.934 Inexact Rounded +-- sqtx4572 squareroot 0.0873 -> 0.295 Inexact Rounded +-- sqtx4573 squareroot 0.874 -> 0.935 Inexact Rounded +-- sqtx4574 squareroot 0.0874 -> 0.296 Inexact Rounded +-- sqtx4575 squareroot 0.875 -> 0.935 Inexact Rounded +-- sqtx4576 squareroot 0.0875 -> 0.296 Inexact Rounded +-- sqtx4577 squareroot 0.876 -> 0.936 Inexact Rounded +-- sqtx4578 squareroot 0.0876 -> 0.296 Inexact Rounded +-- sqtx4579 squareroot 0.877 -> 0.936 Inexact Rounded +-- sqtx4580 squareroot 0.0877 -> 0.296 Inexact Rounded +-- sqtx4581 squareroot 0.878 -> 0.937 Inexact Rounded +-- sqtx4582 squareroot 0.0878 -> 0.296 Inexact Rounded +-- sqtx4583 squareroot 0.879 -> 0.938 Inexact Rounded +-- sqtx4584 squareroot 0.0879 -> 0.296 Inexact Rounded +-- sqtx4585 squareroot 0.881 -> 0.939 Inexact Rounded +-- sqtx4586 squareroot 0.0881 -> 0.297 Inexact Rounded +-- sqtx4587 squareroot 0.882 -> 0.939 Inexact Rounded +-- sqtx4588 squareroot 0.0882 -> 0.297 Inexact Rounded +-- sqtx4589 squareroot 0.883 -> 0.940 Inexact Rounded +-- sqtx4590 squareroot 0.0883 -> 0.297 Inexact Rounded +-- sqtx4591 squareroot 0.884 -> 0.940 Inexact Rounded +-- sqtx4592 squareroot 0.0884 -> 0.297 Inexact Rounded +-- sqtx4593 squareroot 0.885 -> 0.941 Inexact Rounded +-- sqtx4594 squareroot 0.0885 -> 0.297 Inexact Rounded +-- sqtx4595 squareroot 0.886 -> 0.941 Inexact Rounded +-- sqtx4596 squareroot 0.0886 -> 0.298 Inexact Rounded +-- sqtx4597 squareroot 0.887 -> 0.942 Inexact Rounded +-- sqtx4598 squareroot 0.0887 -> 0.298 Inexact Rounded +-- sqtx4599 squareroot 0.888 -> 0.942 Inexact Rounded +-- sqtx4600 squareroot 0.0888 -> 0.298 Inexact Rounded +-- sqtx4601 squareroot 0.889 -> 0.943 Inexact Rounded +-- sqtx4602 squareroot 0.0889 -> 0.298 Inexact Rounded +-- sqtx4603 squareroot 0.891 -> 0.944 Inexact Rounded +-- sqtx4604 squareroot 0.0891 -> 0.298 Inexact Rounded +-- sqtx4605 squareroot 0.892 -> 0.944 Inexact Rounded +-- sqtx4606 squareroot 0.0892 -> 0.299 Inexact Rounded +-- sqtx4607 squareroot 0.893 -> 0.945 Inexact Rounded +-- sqtx4608 squareroot 0.0893 -> 0.299 Inexact Rounded +-- sqtx4609 squareroot 0.894 -> 0.946 Inexact Rounded +-- sqtx4610 squareroot 0.0894 -> 0.299 Inexact Rounded +-- sqtx4611 squareroot 0.895 -> 0.946 Inexact Rounded +-- sqtx4612 squareroot 0.0895 -> 0.299 Inexact Rounded +-- sqtx4613 squareroot 0.896 -> 0.947 Inexact Rounded +-- sqtx4614 squareroot 0.0896 -> 0.299 Inexact Rounded +-- sqtx4615 squareroot 0.897 -> 0.947 Inexact Rounded +-- sqtx4616 squareroot 0.0897 -> 0.299 Inexact Rounded +-- sqtx4617 squareroot 0.898 -> 0.948 Inexact Rounded +-- sqtx4618 squareroot 0.0898 -> 0.300 Inexact Rounded +-- sqtx4619 squareroot 0.899 -> 0.948 Inexact Rounded +-- sqtx4620 squareroot 0.0899 -> 0.300 Inexact Rounded +-- sqtx4621 squareroot 0.901 -> 0.949 Inexact Rounded +-- sqtx4622 squareroot 0.0901 -> 0.300 Inexact Rounded +-- sqtx4623 squareroot 0.902 -> 0.950 Inexact Rounded +-- sqtx4624 squareroot 0.0902 -> 0.300 Inexact Rounded +-- sqtx4625 squareroot 0.903 -> 0.950 Inexact Rounded +-- sqtx4626 squareroot 0.0903 -> 0.300 Inexact Rounded +-- sqtx4627 squareroot 0.904 -> 0.951 Inexact Rounded +-- sqtx4628 squareroot 0.0904 -> 0.301 Inexact Rounded +-- sqtx4629 squareroot 0.905 -> 0.951 Inexact Rounded +-- sqtx4630 squareroot 0.0905 -> 0.301 Inexact Rounded +-- sqtx4631 squareroot 0.906 -> 0.952 Inexact Rounded +-- sqtx4632 squareroot 0.0906 -> 0.301 Inexact Rounded +-- sqtx4633 squareroot 0.907 -> 0.952 Inexact Rounded +-- sqtx4634 squareroot 0.0907 -> 0.301 Inexact Rounded +-- sqtx4635 squareroot 0.908 -> 0.953 Inexact Rounded +-- sqtx4636 squareroot 0.0908 -> 0.301 Inexact Rounded +-- sqtx4637 squareroot 0.909 -> 0.953 Inexact Rounded +-- sqtx4638 squareroot 0.0909 -> 0.301 Inexact Rounded +-- sqtx4639 squareroot 0.911 -> 0.954 Inexact Rounded +-- sqtx4640 squareroot 0.0911 -> 0.302 Inexact Rounded +-- sqtx4641 squareroot 0.912 -> 0.955 Inexact Rounded +-- sqtx4642 squareroot 0.0912 -> 0.302 Inexact Rounded +-- sqtx4643 squareroot 0.913 -> 0.956 Inexact Rounded +-- sqtx4644 squareroot 0.0913 -> 0.302 Inexact Rounded +-- sqtx4645 squareroot 0.914 -> 0.956 Inexact Rounded +-- sqtx4646 squareroot 0.0914 -> 0.302 Inexact Rounded +-- sqtx4647 squareroot 0.915 -> 0.957 Inexact Rounded +-- sqtx4648 squareroot 0.0915 -> 0.302 Inexact Rounded +-- sqtx4649 squareroot 0.916 -> 0.957 Inexact Rounded +-- sqtx4650 squareroot 0.0916 -> 0.303 Inexact Rounded +-- sqtx4651 squareroot 0.917 -> 0.958 Inexact Rounded +-- sqtx4652 squareroot 0.0917 -> 0.303 Inexact Rounded +-- sqtx4653 squareroot 0.918 -> 0.958 Inexact Rounded +-- sqtx4654 squareroot 0.0918 -> 0.303 Inexact Rounded +-- sqtx4655 squareroot 0.919 -> 0.959 Inexact Rounded +-- sqtx4656 squareroot 0.0919 -> 0.303 Inexact Rounded +-- sqtx4657 squareroot 0.921 -> 0.960 Inexact Rounded +-- sqtx4658 squareroot 0.0921 -> 0.303 Inexact Rounded +-- sqtx4659 squareroot 0.922 -> 0.960 Inexact Rounded +-- sqtx4660 squareroot 0.0922 -> 0.304 Inexact Rounded +-- sqtx4661 squareroot 0.923 -> 0.961 Inexact Rounded +-- sqtx4662 squareroot 0.0923 -> 0.304 Inexact Rounded +-- sqtx4663 squareroot 0.924 -> 0.961 Inexact Rounded +-- sqtx4664 squareroot 0.0924 -> 0.304 Inexact Rounded +-- sqtx4665 squareroot 0.925 -> 0.962 Inexact Rounded +-- sqtx4666 squareroot 0.0925 -> 0.304 Inexact Rounded +-- sqtx4667 squareroot 0.926 -> 0.962 Inexact Rounded +-- sqtx4668 squareroot 0.0926 -> 0.304 Inexact Rounded +-- sqtx4669 squareroot 0.927 -> 0.963 Inexact Rounded +-- sqtx4670 squareroot 0.0927 -> 0.304 Inexact Rounded +-- sqtx4671 squareroot 0.928 -> 0.963 Inexact Rounded +-- sqtx4672 squareroot 0.0928 -> 0.305 Inexact Rounded +-- sqtx4673 squareroot 0.929 -> 0.964 Inexact Rounded +-- sqtx4674 squareroot 0.0929 -> 0.305 Inexact Rounded +-- sqtx4675 squareroot 0.931 -> 0.965 Inexact Rounded +-- sqtx4676 squareroot 0.0931 -> 0.305 Inexact Rounded +-- sqtx4677 squareroot 0.932 -> 0.965 Inexact Rounded +-- sqtx4678 squareroot 0.0932 -> 0.305 Inexact Rounded +-- sqtx4679 squareroot 0.933 -> 0.966 Inexact Rounded +-- sqtx4680 squareroot 0.0933 -> 0.305 Inexact Rounded +-- sqtx4681 squareroot 0.934 -> 0.966 Inexact Rounded +-- sqtx4682 squareroot 0.0934 -> 0.306 Inexact Rounded +-- sqtx4683 squareroot 0.935 -> 0.967 Inexact Rounded +-- sqtx4684 squareroot 0.0935 -> 0.306 Inexact Rounded +-- sqtx4685 squareroot 0.936 -> 0.967 Inexact Rounded +-- sqtx4686 squareroot 0.0936 -> 0.306 Inexact Rounded +-- sqtx4687 squareroot 0.937 -> 0.968 Inexact Rounded +-- sqtx4688 squareroot 0.0937 -> 0.306 Inexact Rounded +-- sqtx4689 squareroot 0.938 -> 0.969 Inexact Rounded +-- sqtx4690 squareroot 0.0938 -> 0.306 Inexact Rounded +-- sqtx4691 squareroot 0.939 -> 0.969 Inexact Rounded +-- sqtx4692 squareroot 0.0939 -> 0.306 Inexact Rounded +-- sqtx4693 squareroot 0.941 -> 0.970 Inexact Rounded +-- sqtx4694 squareroot 0.0941 -> 0.307 Inexact Rounded +-- sqtx4695 squareroot 0.942 -> 0.971 Inexact Rounded +-- sqtx4696 squareroot 0.0942 -> 0.307 Inexact Rounded +-- sqtx4697 squareroot 0.943 -> 0.971 Inexact Rounded +-- sqtx4698 squareroot 0.0943 -> 0.307 Inexact Rounded +-- sqtx4699 squareroot 0.944 -> 0.972 Inexact Rounded +-- sqtx4700 squareroot 0.0944 -> 0.307 Inexact Rounded +-- sqtx4701 squareroot 0.945 -> 0.972 Inexact Rounded +-- sqtx4702 squareroot 0.0945 -> 0.307 Inexact Rounded +-- sqtx4703 squareroot 0.946 -> 0.973 Inexact Rounded +-- sqtx4704 squareroot 0.0946 -> 0.308 Inexact Rounded +-- sqtx4705 squareroot 0.947 -> 0.973 Inexact Rounded +-- sqtx4706 squareroot 0.0947 -> 0.308 Inexact Rounded +-- sqtx4707 squareroot 0.948 -> 0.974 Inexact Rounded +-- sqtx4708 squareroot 0.0948 -> 0.308 Inexact Rounded +-- sqtx4709 squareroot 0.949 -> 0.974 Inexact Rounded +-- sqtx4710 squareroot 0.0949 -> 0.308 Inexact Rounded +-- sqtx4711 squareroot 0.951 -> 0.975 Inexact Rounded +-- sqtx4712 squareroot 0.0951 -> 0.308 Inexact Rounded +-- sqtx4713 squareroot 0.952 -> 0.976 Inexact Rounded +-- sqtx4714 squareroot 0.0952 -> 0.309 Inexact Rounded +-- sqtx4715 squareroot 0.953 -> 0.976 Inexact Rounded +-- sqtx4716 squareroot 0.0953 -> 0.309 Inexact Rounded +-- sqtx4717 squareroot 0.954 -> 0.977 Inexact Rounded +-- sqtx4718 squareroot 0.0954 -> 0.309 Inexact Rounded +-- sqtx4719 squareroot 0.955 -> 0.977 Inexact Rounded +-- sqtx4720 squareroot 0.0955 -> 0.309 Inexact Rounded +-- sqtx4721 squareroot 0.956 -> 0.978 Inexact Rounded +-- sqtx4722 squareroot 0.0956 -> 0.309 Inexact Rounded +-- sqtx4723 squareroot 0.957 -> 0.978 Inexact Rounded +-- sqtx4724 squareroot 0.0957 -> 0.309 Inexact Rounded +-- sqtx4725 squareroot 0.958 -> 0.979 Inexact Rounded +-- sqtx4726 squareroot 0.0958 -> 0.310 Inexact Rounded +-- sqtx4727 squareroot 0.959 -> 0.979 Inexact Rounded +-- sqtx4728 squareroot 0.0959 -> 0.310 Inexact Rounded +-- sqtx4729 squareroot 0.961 -> 0.980 Inexact Rounded sqtx4730 squareroot 0.0961 -> 0.31 -sqtx4731 squareroot 0.962 -> 0.981 Inexact Rounded -sqtx4732 squareroot 0.0962 -> 0.310 Inexact Rounded -sqtx4733 squareroot 0.963 -> 0.981 Inexact Rounded -sqtx4734 squareroot 0.0963 -> 0.310 Inexact Rounded -sqtx4735 squareroot 0.964 -> 0.982 Inexact Rounded -sqtx4736 squareroot 0.0964 -> 0.310 Inexact Rounded -sqtx4737 squareroot 0.965 -> 0.982 Inexact Rounded -sqtx4738 squareroot 0.0965 -> 0.311 Inexact Rounded -sqtx4739 squareroot 0.966 -> 0.983 Inexact Rounded -sqtx4740 squareroot 0.0966 -> 0.311 Inexact Rounded -sqtx4741 squareroot 0.967 -> 0.983 Inexact Rounded -sqtx4742 squareroot 0.0967 -> 0.311 Inexact Rounded -sqtx4743 squareroot 0.968 -> 0.984 Inexact Rounded -sqtx4744 squareroot 0.0968 -> 0.311 Inexact Rounded -sqtx4745 squareroot 0.969 -> 0.984 Inexact Rounded -sqtx4746 squareroot 0.0969 -> 0.311 Inexact Rounded -sqtx4747 squareroot 0.971 -> 0.985 Inexact Rounded -sqtx4748 squareroot 0.0971 -> 0.312 Inexact Rounded -sqtx4749 squareroot 0.972 -> 0.986 Inexact Rounded -sqtx4750 squareroot 0.0972 -> 0.312 Inexact Rounded -sqtx4751 squareroot 0.973 -> 0.986 Inexact Rounded -sqtx4752 squareroot 0.0973 -> 0.312 Inexact Rounded -sqtx4753 squareroot 0.974 -> 0.987 Inexact Rounded -sqtx4754 squareroot 0.0974 -> 0.312 Inexact Rounded -sqtx4755 squareroot 0.975 -> 0.987 Inexact Rounded -sqtx4756 squareroot 0.0975 -> 0.312 Inexact Rounded -sqtx4757 squareroot 0.976 -> 0.988 Inexact Rounded -sqtx4758 squareroot 0.0976 -> 0.312 Inexact Rounded -sqtx4759 squareroot 0.977 -> 0.988 Inexact Rounded -sqtx4760 squareroot 0.0977 -> 0.313 Inexact Rounded -sqtx4761 squareroot 0.978 -> 0.989 Inexact Rounded -sqtx4762 squareroot 0.0978 -> 0.313 Inexact Rounded -sqtx4763 squareroot 0.979 -> 0.989 Inexact Rounded -sqtx4764 squareroot 0.0979 -> 0.313 Inexact Rounded -sqtx4765 squareroot 0.981 -> 0.990 Inexact Rounded -sqtx4766 squareroot 0.0981 -> 0.313 Inexact Rounded -sqtx4767 squareroot 0.982 -> 0.991 Inexact Rounded -sqtx4768 squareroot 0.0982 -> 0.313 Inexact Rounded -sqtx4769 squareroot 0.983 -> 0.991 Inexact Rounded -sqtx4770 squareroot 0.0983 -> 0.314 Inexact Rounded -sqtx4771 squareroot 0.984 -> 0.992 Inexact Rounded -sqtx4772 squareroot 0.0984 -> 0.314 Inexact Rounded -sqtx4773 squareroot 0.985 -> 0.992 Inexact Rounded -sqtx4774 squareroot 0.0985 -> 0.314 Inexact Rounded -sqtx4775 squareroot 0.986 -> 0.993 Inexact Rounded -sqtx4776 squareroot 0.0986 -> 0.314 Inexact Rounded -sqtx4777 squareroot 0.987 -> 0.993 Inexact Rounded -sqtx4778 squareroot 0.0987 -> 0.314 Inexact Rounded -sqtx4779 squareroot 0.988 -> 0.994 Inexact Rounded -sqtx4780 squareroot 0.0988 -> 0.314 Inexact Rounded -sqtx4781 squareroot 0.989 -> 0.994 Inexact Rounded -sqtx4782 squareroot 0.0989 -> 0.314 Inexact Rounded -sqtx4783 squareroot 0.991 -> 0.995 Inexact Rounded -sqtx4784 squareroot 0.0991 -> 0.315 Inexact Rounded -sqtx4785 squareroot 0.992 -> 0.996 Inexact Rounded -sqtx4786 squareroot 0.0992 -> 0.315 Inexact Rounded -sqtx4787 squareroot 0.993 -> 0.996 Inexact Rounded -sqtx4788 squareroot 0.0993 -> 0.315 Inexact Rounded -sqtx4789 squareroot 0.994 -> 0.997 Inexact Rounded -sqtx4790 squareroot 0.0994 -> 0.315 Inexact Rounded -sqtx4791 squareroot 0.995 -> 0.997 Inexact Rounded -sqtx4792 squareroot 0.0995 -> 0.315 Inexact Rounded -sqtx4793 squareroot 0.996 -> 0.998 Inexact Rounded -sqtx4794 squareroot 0.0996 -> 0.316 Inexact Rounded -sqtx4795 squareroot 0.997 -> 0.998 Inexact Rounded -sqtx4796 squareroot 0.0997 -> 0.316 Inexact Rounded -sqtx4797 squareroot 0.998 -> 0.999 Inexact Rounded -sqtx4798 squareroot 0.0998 -> 0.316 Inexact Rounded -sqtx4799 squareroot 0.999 -> 0.999 Inexact Rounded -sqtx4800 squareroot 0.0999 -> 0.316 Inexact Rounded +-- sqtx4731 squareroot 0.962 -> 0.981 Inexact Rounded +-- sqtx4732 squareroot 0.0962 -> 0.310 Inexact Rounded +-- sqtx4733 squareroot 0.963 -> 0.981 Inexact Rounded +-- sqtx4734 squareroot 0.0963 -> 0.310 Inexact Rounded +-- sqtx4735 squareroot 0.964 -> 0.982 Inexact Rounded +-- sqtx4736 squareroot 0.0964 -> 0.310 Inexact Rounded +-- sqtx4737 squareroot 0.965 -> 0.982 Inexact Rounded +-- sqtx4738 squareroot 0.0965 -> 0.311 Inexact Rounded +-- sqtx4739 squareroot 0.966 -> 0.983 Inexact Rounded +-- sqtx4740 squareroot 0.0966 -> 0.311 Inexact Rounded +-- sqtx4741 squareroot 0.967 -> 0.983 Inexact Rounded +-- sqtx4742 squareroot 0.0967 -> 0.311 Inexact Rounded +-- sqtx4743 squareroot 0.968 -> 0.984 Inexact Rounded +-- sqtx4744 squareroot 0.0968 -> 0.311 Inexact Rounded +-- sqtx4745 squareroot 0.969 -> 0.984 Inexact Rounded +-- sqtx4746 squareroot 0.0969 -> 0.311 Inexact Rounded +-- sqtx4747 squareroot 0.971 -> 0.985 Inexact Rounded +-- sqtx4748 squareroot 0.0971 -> 0.312 Inexact Rounded +-- sqtx4749 squareroot 0.972 -> 0.986 Inexact Rounded +-- sqtx4750 squareroot 0.0972 -> 0.312 Inexact Rounded +-- sqtx4751 squareroot 0.973 -> 0.986 Inexact Rounded +-- sqtx4752 squareroot 0.0973 -> 0.312 Inexact Rounded +-- sqtx4753 squareroot 0.974 -> 0.987 Inexact Rounded +-- sqtx4754 squareroot 0.0974 -> 0.312 Inexact Rounded +-- sqtx4755 squareroot 0.975 -> 0.987 Inexact Rounded +-- sqtx4756 squareroot 0.0975 -> 0.312 Inexact Rounded +-- sqtx4757 squareroot 0.976 -> 0.988 Inexact Rounded +-- sqtx4758 squareroot 0.0976 -> 0.312 Inexact Rounded +-- sqtx4759 squareroot 0.977 -> 0.988 Inexact Rounded +-- sqtx4760 squareroot 0.0977 -> 0.313 Inexact Rounded +-- sqtx4761 squareroot 0.978 -> 0.989 Inexact Rounded +-- sqtx4762 squareroot 0.0978 -> 0.313 Inexact Rounded +-- sqtx4763 squareroot 0.979 -> 0.989 Inexact Rounded +-- sqtx4764 squareroot 0.0979 -> 0.313 Inexact Rounded +-- sqtx4765 squareroot 0.981 -> 0.990 Inexact Rounded +-- sqtx4766 squareroot 0.0981 -> 0.313 Inexact Rounded +-- sqtx4767 squareroot 0.982 -> 0.991 Inexact Rounded +-- sqtx4768 squareroot 0.0982 -> 0.313 Inexact Rounded +-- sqtx4769 squareroot 0.983 -> 0.991 Inexact Rounded +-- sqtx4770 squareroot 0.0983 -> 0.314 Inexact Rounded +-- sqtx4771 squareroot 0.984 -> 0.992 Inexact Rounded +-- sqtx4772 squareroot 0.0984 -> 0.314 Inexact Rounded +-- sqtx4773 squareroot 0.985 -> 0.992 Inexact Rounded +-- sqtx4774 squareroot 0.0985 -> 0.314 Inexact Rounded +-- sqtx4775 squareroot 0.986 -> 0.993 Inexact Rounded +-- sqtx4776 squareroot 0.0986 -> 0.314 Inexact Rounded +-- sqtx4777 squareroot 0.987 -> 0.993 Inexact Rounded +-- sqtx4778 squareroot 0.0987 -> 0.314 Inexact Rounded +-- sqtx4779 squareroot 0.988 -> 0.994 Inexact Rounded +-- sqtx4780 squareroot 0.0988 -> 0.314 Inexact Rounded +-- sqtx4781 squareroot 0.989 -> 0.994 Inexact Rounded +-- sqtx4782 squareroot 0.0989 -> 0.314 Inexact Rounded +-- sqtx4783 squareroot 0.991 -> 0.995 Inexact Rounded +-- sqtx4784 squareroot 0.0991 -> 0.315 Inexact Rounded +-- sqtx4785 squareroot 0.992 -> 0.996 Inexact Rounded +-- sqtx4786 squareroot 0.0992 -> 0.315 Inexact Rounded +-- sqtx4787 squareroot 0.993 -> 0.996 Inexact Rounded +-- sqtx4788 squareroot 0.0993 -> 0.315 Inexact Rounded +-- sqtx4789 squareroot 0.994 -> 0.997 Inexact Rounded +-- sqtx4790 squareroot 0.0994 -> 0.315 Inexact Rounded +-- sqtx4791 squareroot 0.995 -> 0.997 Inexact Rounded +-- sqtx4792 squareroot 0.0995 -> 0.315 Inexact Rounded +-- sqtx4793 squareroot 0.996 -> 0.998 Inexact Rounded +-- sqtx4794 squareroot 0.0996 -> 0.316 Inexact Rounded +-- sqtx4795 squareroot 0.997 -> 0.998 Inexact Rounded +-- sqtx4796 squareroot 0.0997 -> 0.316 Inexact Rounded +-- sqtx4797 squareroot 0.998 -> 0.999 Inexact Rounded +-- sqtx4798 squareroot 0.0998 -> 0.316 Inexact Rounded +-- sqtx4799 squareroot 0.999 -> 0.999 Inexact Rounded +-- sqtx4800 squareroot 0.0999 -> 0.316 Inexact Rounded -- A group of precision 4 tests where Hull & Abrham adjustments are -- needed in some cases (both up and down) [see Hull1985b] @@ -2826,92 +2826,92 @@ rounding: half_even maxExponent: 999 minexponent: -999 precision: 4 -sqtx5001 squareroot 0.0118 -> 0.1086 Inexact Rounded -sqtx5002 squareroot 0.119 -> 0.3450 Inexact Rounded -sqtx5003 squareroot 0.0119 -> 0.1091 Inexact Rounded -sqtx5004 squareroot 0.121 -> 0.3479 Inexact Rounded +-- sqtx5001 squareroot 0.0118 -> 0.1086 Inexact Rounded +-- sqtx5002 squareroot 0.119 -> 0.3450 Inexact Rounded +-- sqtx5003 squareroot 0.0119 -> 0.1091 Inexact Rounded +-- sqtx5004 squareroot 0.121 -> 0.3479 Inexact Rounded sqtx5005 squareroot 0.0121 -> 0.11 -sqtx5006 squareroot 0.122 -> 0.3493 Inexact Rounded -sqtx5007 squareroot 0.0122 -> 0.1105 Inexact Rounded -sqtx5008 squareroot 0.123 -> 0.3507 Inexact Rounded -sqtx5009 squareroot 0.494 -> 0.7029 Inexact Rounded -sqtx5010 squareroot 0.0669 -> 0.2587 Inexact Rounded -sqtx5011 squareroot 0.9558 -> 0.9777 Inexact Rounded -sqtx5012 squareroot 0.9348 -> 0.9669 Inexact Rounded -sqtx5013 squareroot 0.9345 -> 0.9667 Inexact Rounded -sqtx5014 squareroot 0.09345 -> 0.3057 Inexact Rounded -sqtx5015 squareroot 0.9346 -> 0.9667 Inexact Rounded -sqtx5016 squareroot 0.09346 -> 0.3057 Inexact Rounded -sqtx5017 squareroot 0.9347 -> 0.9668 Inexact Rounded +-- sqtx5006 squareroot 0.122 -> 0.3493 Inexact Rounded +-- sqtx5007 squareroot 0.0122 -> 0.1105 Inexact Rounded +-- sqtx5008 squareroot 0.123 -> 0.3507 Inexact Rounded +-- sqtx5009 squareroot 0.494 -> 0.7029 Inexact Rounded +-- sqtx5010 squareroot 0.0669 -> 0.2587 Inexact Rounded +-- sqtx5011 squareroot 0.9558 -> 0.9777 Inexact Rounded +-- sqtx5012 squareroot 0.9348 -> 0.9669 Inexact Rounded +-- sqtx5013 squareroot 0.9345 -> 0.9667 Inexact Rounded +-- sqtx5014 squareroot 0.09345 -> 0.3057 Inexact Rounded +-- sqtx5015 squareroot 0.9346 -> 0.9667 Inexact Rounded +-- sqtx5016 squareroot 0.09346 -> 0.3057 Inexact Rounded +-- sqtx5017 squareroot 0.9347 -> 0.9668 Inexact Rounded -- examples from decArith precision: 9 sqtx700 squareroot 0 -> '0' sqtx701 squareroot -0 -> '-0' -sqtx702 squareroot 0.39 -> 0.624499800 Inexact Rounded +-- sqtx702 squareroot 0.39 -> 0.624499800 Inexact Rounded sqtx703 squareroot 100 -> '10' sqtx704 squareroot 1.00 -> '1.0' -sqtx705 squareroot 7 -> '2.64575131' Inexact Rounded -sqtx706 squareroot 10 -> 3.16227766 Inexact Rounded +-- sqtx705 squareroot 7 -> '2.64575131' Inexact Rounded +-- sqtx706 squareroot 10 -> 3.16227766 Inexact Rounded -- some one-offs precision: 9 -sqtx711 squareroot 0.1 -> 0.316227766 Inexact Rounded -sqtx712 squareroot 0.2 -> 0.447213595 Inexact Rounded -sqtx713 squareroot 0.3 -> 0.547722558 Inexact Rounded -sqtx714 squareroot 0.4 -> 0.632455532 Inexact Rounded -sqtx715 squareroot 0.5 -> 0.707106781 Inexact Rounded -sqtx716 squareroot 0.6 -> 0.774596669 Inexact Rounded -sqtx717 squareroot 0.7 -> 0.836660027 Inexact Rounded -sqtx718 squareroot 0.8 -> 0.894427191 Inexact Rounded -sqtx719 squareroot 0.9 -> 0.948683298 Inexact Rounded +-- sqtx711 squareroot 0.1 -> 0.316227766 Inexact Rounded +-- sqtx712 squareroot 0.2 -> 0.447213595 Inexact Rounded +-- sqtx713 squareroot 0.3 -> 0.547722558 Inexact Rounded +-- sqtx714 squareroot 0.4 -> 0.632455532 Inexact Rounded +-- sqtx715 squareroot 0.5 -> 0.707106781 Inexact Rounded +-- sqtx716 squareroot 0.6 -> 0.774596669 Inexact Rounded +-- sqtx717 squareroot 0.7 -> 0.836660027 Inexact Rounded +-- sqtx718 squareroot 0.8 -> 0.894427191 Inexact Rounded +-- sqtx719 squareroot 0.9 -> 0.948683298 Inexact Rounded precision: 10 -- note no normalizatoin here -sqtx720 squareroot +0.1 -> 0.3162277660 Inexact Rounded +-- sqtx720 squareroot +0.1 -> 0.3162277660 Inexact Rounded precision: 11 -sqtx721 squareroot +0.1 -> 0.31622776602 Inexact Rounded +-- sqtx721 squareroot +0.1 -> 0.31622776602 Inexact Rounded precision: 12 -sqtx722 squareroot +0.1 -> 0.316227766017 Inexact Rounded +-- sqtx722 squareroot +0.1 -> 0.316227766017 Inexact Rounded precision: 9 -sqtx723 squareroot 0.39 -> 0.624499800 Inexact Rounded +-- sqtx723 squareroot 0.39 -> 0.624499800 Inexact Rounded precision: 15 -sqtx724 squareroot 0.39 -> 0.624499799839840 Inexact Rounded +-- sqtx724 squareroot 0.39 -> 0.624499799839840 Inexact Rounded -- discussion cases precision: 7 sqtx731 squareroot 9 -> 3 sqtx732 squareroot 100 -> 10 -sqtx733 squareroot 123 -> 11.09054 Inexact Rounded +-- sqtx733 squareroot 123 -> 11.09054 Inexact Rounded sqtx734 squareroot 144 -> 12 -sqtx735 squareroot 156 -> 12.49000 Inexact Rounded +-- sqtx735 squareroot 156 -> 12.49000 Inexact Rounded sqtx736 squareroot 10000 -> 100 -- values close to overflow (if there were input rounding) maxexponent: 99 minexponent: -99 precision: 5 -sqtx760 squareroot 9.9997E+99 -> 9.9998E+49 Inexact Rounded -sqtx761 squareroot 9.9998E+99 -> 9.9999E+49 Inexact Rounded -sqtx762 squareroot 9.9999E+99 -> 9.9999E+49 Inexact Rounded -sqtx763 squareroot 9.99991E+99 -> 1.0000E+50 Inexact Rounded -sqtx764 squareroot 9.99994E+99 -> 1.0000E+50 Inexact Rounded -sqtx765 squareroot 9.99995E+99 -> 1.0000E+50 Inexact Rounded -sqtx766 squareroot 9.99999E+99 -> 1.0000E+50 Inexact Rounded +-- sqtx760 squareroot 9.9997E+99 -> 9.9998E+49 Inexact Rounded +-- sqtx761 squareroot 9.9998E+99 -> 9.9999E+49 Inexact Rounded +-- sqtx762 squareroot 9.9999E+99 -> 9.9999E+49 Inexact Rounded +-- sqtx763 squareroot 9.99991E+99 -> 1.0000E+50 Inexact Rounded +-- sqtx764 squareroot 9.99994E+99 -> 1.0000E+50 Inexact Rounded +-- sqtx765 squareroot 9.99995E+99 -> 1.0000E+50 Inexact Rounded +-- sqtx766 squareroot 9.99999E+99 -> 1.0000E+50 Inexact Rounded precision: 9 -sqtx770 squareroot 9.9997E+99 -> 9.99985000E+49 Inexact Rounded -sqtx771 squareroot 9.9998E+99 -> 9.99990000E+49 Inexact Rounded -sqtx772 squareroot 9.9999E+99 -> 9.99995000E+49 Inexact Rounded -sqtx773 squareroot 9.99991E+99 -> 9.99995500E+49 Inexact Rounded -sqtx774 squareroot 9.99994E+99 -> 9.99997000E+49 Inexact Rounded -sqtx775 squareroot 9.99995E+99 -> 9.99997500E+49 Inexact Rounded -sqtx776 squareroot 9.99999E+99 -> 9.99999500E+49 Inexact Rounded +-- sqtx770 squareroot 9.9997E+99 -> 9.99985000E+49 Inexact Rounded +-- sqtx771 squareroot 9.9998E+99 -> 9.99990000E+49 Inexact Rounded +-- sqtx772 squareroot 9.9999E+99 -> 9.99995000E+49 Inexact Rounded +-- sqtx773 squareroot 9.99991E+99 -> 9.99995500E+49 Inexact Rounded +-- sqtx774 squareroot 9.99994E+99 -> 9.99997000E+49 Inexact Rounded +-- sqtx775 squareroot 9.99995E+99 -> 9.99997500E+49 Inexact Rounded +-- sqtx776 squareroot 9.99999E+99 -> 9.99999500E+49 Inexact Rounded precision: 20 -sqtx780 squareroot 9.9997E+99 -> '9.9998499988749831247E+49' Inexact Rounded -sqtx781 squareroot 9.9998E+99 -> '9.9998999994999949999E+49' Inexact Rounded -sqtx782 squareroot 9.9999E+99 -> '9.9999499998749993750E+49' Inexact Rounded -sqtx783 squareroot 9.99991E+99 -> '9.9999549998987495444E+49' Inexact Rounded -sqtx784 squareroot 9.99994E+99 -> '9.9999699999549998650E+49' Inexact Rounded -sqtx785 squareroot 9.99995E+99 -> '9.9999749999687499219E+49' Inexact Rounded -sqtx786 squareroot 9.99999E+99 -> '9.9999949999987499994E+49' Inexact Rounded +-- sqtx780 squareroot 9.9997E+99 -> '9.9998499988749831247E+49' Inexact Rounded +-- sqtx781 squareroot 9.9998E+99 -> '9.9998999994999949999E+49' Inexact Rounded +-- sqtx782 squareroot 9.9999E+99 -> '9.9999499998749993750E+49' Inexact Rounded +-- sqtx783 squareroot 9.99991E+99 -> '9.9999549998987495444E+49' Inexact Rounded +-- sqtx784 squareroot 9.99994E+99 -> '9.9999699999549998650E+49' Inexact Rounded +-- sqtx785 squareroot 9.99995E+99 -> '9.9999749999687499219E+49' Inexact Rounded +-- sqtx786 squareroot 9.99999E+99 -> '9.9999949999987499994E+49' Inexact Rounded -- subnormals and underflows [these can only result when eMax is < digits+1] -- Etiny = -(Emax + (precision-1)) @@ -2919,25 +2919,25 @@ sqtx786 squareroot 9.99999E+99 -> '9.9999949999987499994E+49' Inexact Rounded maxexponent: 9 minexponent: -9 precision: 9 -- Etiny=-17 -sqtx800 squareroot 1E-17 -> 3.16227766E-9 Inexact Rounded +-- sqtx800 squareroot 1E-17 -> 3.16227766E-9 Inexact Rounded sqtx801 squareroot 10E-17 -> 1.0E-8 precision: 10 -- Etiny=-18 -sqtx802 squareroot 10E-18 -> 3.162277660E-9 Inexact Rounded +-- sqtx802 squareroot 10E-18 -> 3.162277660E-9 Inexact Rounded sqtx803 squareroot 1E-18 -> 1E-9 precision: 11 -- Etiny=-19 -sqtx804 squareroot 1E-19 -> 3.162277660E-10 Underflow Subnormal Inexact Rounded +-- sqtx804 squareroot 1E-19 -> 3.162277660E-10 Underflow Subnormal Inexact Rounded sqtx805 squareroot 10E-19 -> 1.0E-9 -- exact precision: 12 -- Etiny=-20 -sqtx806 squareroot 10E-20 -> 3.1622776602E-10 Underflow Subnormal Inexact Rounded +-- sqtx806 squareroot 10E-20 -> 3.1622776602E-10 Underflow Subnormal Inexact Rounded sqtx807 squareroot 1E-20 -> 1E-10 Subnormal -- exact Subnormal case precision: 13 -- Etiny=-21 -sqtx808 squareroot 1E-21 -> 3.1622776602E-11 Underflow Subnormal Inexact Rounded +-- sqtx808 squareroot 1E-21 -> 3.1622776602E-11 Underflow Subnormal Inexact Rounded sqtx809 squareroot 10E-21 -> 1.0E-10 Subnormal -- exact Subnormal case precision: 14 -- Etiny=-22 -sqtx810 squareroot 1E-21 -> 3.16227766017E-11 Underflow Subnormal Inexact Rounded -sqtx811 squareroot 10E-22 -> 3.16227766017E-11 Underflow Subnormal Inexact Rounded +-- sqtx810 squareroot 1E-21 -> 3.16227766017E-11 Underflow Subnormal Inexact Rounded +-- sqtx811 squareroot 10E-22 -> 3.16227766017E-11 Underflow Subnormal Inexact Rounded sqtx812 squareroot 1E-22 -> 1E-11 Subnormal -- exact Subnormal case -- Not enough digits? @@ -2945,7 +2945,7 @@ precision: 16 maxExponent: 384 minExponent: -383 rounding: half_even -sqtx815 squareroot 1.0000000001000000E-78 -> 1.000000000050000E-39 Inexact Rounded +-- sqtx815 squareroot 1.0000000001000000E-78 -> 1.000000000050000E-39 Inexact Rounded -- 1 234567890123456 -- special values @@ -2956,15 +2956,15 @@ sqtx821 squareroot -Inf -> NaN Invalid_operation sqtx822 squareroot NaN -> NaN sqtx823 squareroot sNaN -> NaN Invalid_operation -- propagating NaNs -sqtx824 squareroot sNaN123 -> NaN123 Invalid_operation -sqtx825 squareroot -sNaN321 -> -NaN321 Invalid_operation -sqtx826 squareroot NaN456 -> NaN456 -sqtx827 squareroot -NaN654 -> -NaN654 +-- sqtx824 squareroot sNaN123 -> NaN123 Invalid_operation +-- sqtx825 squareroot -sNaN321 -> -NaN321 Invalid_operation +-- sqtx826 squareroot NaN456 -> NaN456 +-- sqtx827 squareroot -NaN654 -> -NaN654 sqtx828 squareroot NaN1 -> NaN1 -- payload decapitate precision: 5 -sqtx840 squareroot -sNaN1234567890 -> -NaN67890 Invalid_operation +-- sqtx840 squareroot -sNaN1234567890 -> -NaN67890 Invalid_operation ------------------------------------------------------------------------ -- @@ -2995,7 +2995,7 @@ sqtx8007 squareroot 49 -> 7 sqtx8008 squareroot 64 -> 8 sqtx8009 squareroot 81 -> 9 sqtx8010 squareroot 100 -> 1E+1 Rounded -sqtx8011 squareroot 121 -> 1E+1 Inexact Rounded +-- sqtx8011 squareroot 121 -> 1E+1 Inexact Rounded precision: 2 sqtx8012 squareroot 0 -> 0 @@ -3099,7 +3099,7 @@ sqtx8109 squareroot 9409 -> 97 sqtx8110 squareroot 9604 -> 98 sqtx8111 squareroot 9801 -> 99 sqtx8112 squareroot 10000 -> 1.0E+2 Rounded -sqtx8113 squareroot 10201 -> 1.0E+2 Inexact Rounded +-- sqtx8113 squareroot 10201 -> 1.0E+2 Inexact Rounded precision: 3 sqtx8114 squareroot 841 -> 29 @@ -3218,354 +3218,354 @@ sqtx8223 squareroot 0.00225497717956 -> 0.0474866 -- test use of round-half-even for ties precision: 1 -sqtx8224 squareroot 225 -> 2E+1 Inexact Rounded -sqtx8225 squareroot 625 -> 2E+1 Inexact Rounded -sqtx8226 squareroot 1225 -> 4E+1 Inexact Rounded -sqtx8227 squareroot 2025 -> 4E+1 Inexact Rounded -sqtx8228 squareroot 3025 -> 6E+1 Inexact Rounded -sqtx8229 squareroot 4225 -> 6E+1 Inexact Rounded -sqtx8230 squareroot 5625 -> 8E+1 Inexact Rounded -sqtx8231 squareroot 7225 -> 8E+1 Inexact Rounded -sqtx8232 squareroot 9025 -> 1E+2 Inexact Rounded +-- sqtx8224 squareroot 225 -> 2E+1 Inexact Rounded +-- sqtx8225 squareroot 625 -> 2E+1 Inexact Rounded +-- sqtx8226 squareroot 1225 -> 4E+1 Inexact Rounded +-- sqtx8227 squareroot 2025 -> 4E+1 Inexact Rounded +-- sqtx8228 squareroot 3025 -> 6E+1 Inexact Rounded +-- sqtx8229 squareroot 4225 -> 6E+1 Inexact Rounded +-- sqtx8230 squareroot 5625 -> 8E+1 Inexact Rounded +-- sqtx8231 squareroot 7225 -> 8E+1 Inexact Rounded +-- sqtx8232 squareroot 9025 -> 1E+2 Inexact Rounded precision: 2 -sqtx8233 squareroot 11025 -> 1.0E+2 Inexact Rounded -sqtx8234 squareroot 13225 -> 1.2E+2 Inexact Rounded -sqtx8235 squareroot 15625 -> 1.2E+2 Inexact Rounded -sqtx8236 squareroot 18225 -> 1.4E+2 Inexact Rounded -sqtx8237 squareroot 21025 -> 1.4E+2 Inexact Rounded -sqtx8238 squareroot 24025 -> 1.6E+2 Inexact Rounded -sqtx8239 squareroot 27225 -> 1.6E+2 Inexact Rounded -sqtx8240 squareroot 30625 -> 1.8E+2 Inexact Rounded -sqtx8241 squareroot 34225 -> 1.8E+2 Inexact Rounded -sqtx8242 squareroot 38025 -> 2.0E+2 Inexact Rounded -sqtx8243 squareroot 42025 -> 2.0E+2 Inexact Rounded -sqtx8244 squareroot 46225 -> 2.2E+2 Inexact Rounded -sqtx8245 squareroot 50625 -> 2.2E+2 Inexact Rounded -sqtx8246 squareroot 55225 -> 2.4E+2 Inexact Rounded -sqtx8247 squareroot 60025 -> 2.4E+2 Inexact Rounded -sqtx8248 squareroot 65025 -> 2.6E+2 Inexact Rounded -sqtx8249 squareroot 70225 -> 2.6E+2 Inexact Rounded -sqtx8250 squareroot 75625 -> 2.8E+2 Inexact Rounded -sqtx8251 squareroot 81225 -> 2.8E+2 Inexact Rounded -sqtx8252 squareroot 87025 -> 3.0E+2 Inexact Rounded -sqtx8253 squareroot 93025 -> 3.0E+2 Inexact Rounded -sqtx8254 squareroot 99225 -> 3.2E+2 Inexact Rounded -sqtx8255 squareroot 105625 -> 3.2E+2 Inexact Rounded -sqtx8256 squareroot 112225 -> 3.4E+2 Inexact Rounded -sqtx8257 squareroot 119025 -> 3.4E+2 Inexact Rounded -sqtx8258 squareroot 126025 -> 3.6E+2 Inexact Rounded -sqtx8259 squareroot 133225 -> 3.6E+2 Inexact Rounded -sqtx8260 squareroot 140625 -> 3.8E+2 Inexact Rounded -sqtx8261 squareroot 148225 -> 3.8E+2 Inexact Rounded -sqtx8262 squareroot 156025 -> 4.0E+2 Inexact Rounded -sqtx8263 squareroot 164025 -> 4.0E+2 Inexact Rounded -sqtx8264 squareroot 172225 -> 4.2E+2 Inexact Rounded -sqtx8265 squareroot 180625 -> 4.2E+2 Inexact Rounded -sqtx8266 squareroot 189225 -> 4.4E+2 Inexact Rounded -sqtx8267 squareroot 198025 -> 4.4E+2 Inexact Rounded -sqtx8268 squareroot 207025 -> 4.6E+2 Inexact Rounded -sqtx8269 squareroot 216225 -> 4.6E+2 Inexact Rounded -sqtx8270 squareroot 225625 -> 4.8E+2 Inexact Rounded -sqtx8271 squareroot 235225 -> 4.8E+2 Inexact Rounded -sqtx8272 squareroot 245025 -> 5.0E+2 Inexact Rounded -sqtx8273 squareroot 255025 -> 5.0E+2 Inexact Rounded -sqtx8274 squareroot 265225 -> 5.2E+2 Inexact Rounded -sqtx8275 squareroot 275625 -> 5.2E+2 Inexact Rounded -sqtx8276 squareroot 286225 -> 5.4E+2 Inexact Rounded -sqtx8277 squareroot 297025 -> 5.4E+2 Inexact Rounded -sqtx8278 squareroot 308025 -> 5.6E+2 Inexact Rounded -sqtx8279 squareroot 319225 -> 5.6E+2 Inexact Rounded -sqtx8280 squareroot 330625 -> 5.8E+2 Inexact Rounded -sqtx8281 squareroot 342225 -> 5.8E+2 Inexact Rounded -sqtx8282 squareroot 354025 -> 6.0E+2 Inexact Rounded -sqtx8283 squareroot 366025 -> 6.0E+2 Inexact Rounded -sqtx8284 squareroot 378225 -> 6.2E+2 Inexact Rounded -sqtx8285 squareroot 390625 -> 6.2E+2 Inexact Rounded -sqtx8286 squareroot 403225 -> 6.4E+2 Inexact Rounded -sqtx8287 squareroot 416025 -> 6.4E+2 Inexact Rounded -sqtx8288 squareroot 429025 -> 6.6E+2 Inexact Rounded -sqtx8289 squareroot 442225 -> 6.6E+2 Inexact Rounded -sqtx8290 squareroot 455625 -> 6.8E+2 Inexact Rounded -sqtx8291 squareroot 469225 -> 6.8E+2 Inexact Rounded -sqtx8292 squareroot 483025 -> 7.0E+2 Inexact Rounded -sqtx8293 squareroot 497025 -> 7.0E+2 Inexact Rounded -sqtx8294 squareroot 511225 -> 7.2E+2 Inexact Rounded -sqtx8295 squareroot 525625 -> 7.2E+2 Inexact Rounded -sqtx8296 squareroot 540225 -> 7.4E+2 Inexact Rounded -sqtx8297 squareroot 555025 -> 7.4E+2 Inexact Rounded -sqtx8298 squareroot 570025 -> 7.6E+2 Inexact Rounded -sqtx8299 squareroot 585225 -> 7.6E+2 Inexact Rounded -sqtx8300 squareroot 600625 -> 7.8E+2 Inexact Rounded -sqtx8301 squareroot 616225 -> 7.8E+2 Inexact Rounded -sqtx8302 squareroot 632025 -> 8.0E+2 Inexact Rounded -sqtx8303 squareroot 648025 -> 8.0E+2 Inexact Rounded -sqtx8304 squareroot 664225 -> 8.2E+2 Inexact Rounded -sqtx8305 squareroot 680625 -> 8.2E+2 Inexact Rounded -sqtx8306 squareroot 697225 -> 8.4E+2 Inexact Rounded -sqtx8307 squareroot 714025 -> 8.4E+2 Inexact Rounded -sqtx8308 squareroot 731025 -> 8.6E+2 Inexact Rounded -sqtx8309 squareroot 748225 -> 8.6E+2 Inexact Rounded -sqtx8310 squareroot 765625 -> 8.8E+2 Inexact Rounded -sqtx8311 squareroot 783225 -> 8.8E+2 Inexact Rounded -sqtx8312 squareroot 801025 -> 9.0E+2 Inexact Rounded -sqtx8313 squareroot 819025 -> 9.0E+2 Inexact Rounded -sqtx8314 squareroot 837225 -> 9.2E+2 Inexact Rounded -sqtx8315 squareroot 855625 -> 9.2E+2 Inexact Rounded -sqtx8316 squareroot 874225 -> 9.4E+2 Inexact Rounded -sqtx8317 squareroot 893025 -> 9.4E+2 Inexact Rounded -sqtx8318 squareroot 912025 -> 9.6E+2 Inexact Rounded -sqtx8319 squareroot 931225 -> 9.6E+2 Inexact Rounded -sqtx8320 squareroot 950625 -> 9.8E+2 Inexact Rounded -sqtx8321 squareroot 970225 -> 9.8E+2 Inexact Rounded -sqtx8322 squareroot 990025 -> 1.0E+3 Inexact Rounded +-- sqtx8233 squareroot 11025 -> 1.0E+2 Inexact Rounded +-- sqtx8234 squareroot 13225 -> 1.2E+2 Inexact Rounded +-- sqtx8235 squareroot 15625 -> 1.2E+2 Inexact Rounded +-- sqtx8236 squareroot 18225 -> 1.4E+2 Inexact Rounded +-- sqtx8237 squareroot 21025 -> 1.4E+2 Inexact Rounded +-- sqtx8238 squareroot 24025 -> 1.6E+2 Inexact Rounded +-- sqtx8239 squareroot 27225 -> 1.6E+2 Inexact Rounded +-- sqtx8240 squareroot 30625 -> 1.8E+2 Inexact Rounded +-- sqtx8241 squareroot 34225 -> 1.8E+2 Inexact Rounded +-- sqtx8242 squareroot 38025 -> 2.0E+2 Inexact Rounded +-- sqtx8243 squareroot 42025 -> 2.0E+2 Inexact Rounded +-- sqtx8244 squareroot 46225 -> 2.2E+2 Inexact Rounded +-- sqtx8245 squareroot 50625 -> 2.2E+2 Inexact Rounded +-- sqtx8246 squareroot 55225 -> 2.4E+2 Inexact Rounded +-- sqtx8247 squareroot 60025 -> 2.4E+2 Inexact Rounded +-- sqtx8248 squareroot 65025 -> 2.6E+2 Inexact Rounded +-- sqtx8249 squareroot 70225 -> 2.6E+2 Inexact Rounded +-- sqtx8250 squareroot 75625 -> 2.8E+2 Inexact Rounded +-- sqtx8251 squareroot 81225 -> 2.8E+2 Inexact Rounded +-- sqtx8252 squareroot 87025 -> 3.0E+2 Inexact Rounded +-- sqtx8253 squareroot 93025 -> 3.0E+2 Inexact Rounded +-- sqtx8254 squareroot 99225 -> 3.2E+2 Inexact Rounded +-- sqtx8255 squareroot 105625 -> 3.2E+2 Inexact Rounded +-- sqtx8256 squareroot 112225 -> 3.4E+2 Inexact Rounded +-- sqtx8257 squareroot 119025 -> 3.4E+2 Inexact Rounded +-- sqtx8258 squareroot 126025 -> 3.6E+2 Inexact Rounded +-- sqtx8259 squareroot 133225 -> 3.6E+2 Inexact Rounded +-- sqtx8260 squareroot 140625 -> 3.8E+2 Inexact Rounded +-- sqtx8261 squareroot 148225 -> 3.8E+2 Inexact Rounded +-- sqtx8262 squareroot 156025 -> 4.0E+2 Inexact Rounded +-- sqtx8263 squareroot 164025 -> 4.0E+2 Inexact Rounded +-- sqtx8264 squareroot 172225 -> 4.2E+2 Inexact Rounded +-- sqtx8265 squareroot 180625 -> 4.2E+2 Inexact Rounded +-- sqtx8266 squareroot 189225 -> 4.4E+2 Inexact Rounded +-- sqtx8267 squareroot 198025 -> 4.4E+2 Inexact Rounded +-- sqtx8268 squareroot 207025 -> 4.6E+2 Inexact Rounded +-- sqtx8269 squareroot 216225 -> 4.6E+2 Inexact Rounded +-- sqtx8270 squareroot 225625 -> 4.8E+2 Inexact Rounded +-- sqtx8271 squareroot 235225 -> 4.8E+2 Inexact Rounded +-- sqtx8272 squareroot 245025 -> 5.0E+2 Inexact Rounded +-- sqtx8273 squareroot 255025 -> 5.0E+2 Inexact Rounded +-- sqtx8274 squareroot 265225 -> 5.2E+2 Inexact Rounded +-- sqtx8275 squareroot 275625 -> 5.2E+2 Inexact Rounded +-- sqtx8276 squareroot 286225 -> 5.4E+2 Inexact Rounded +-- sqtx8277 squareroot 297025 -> 5.4E+2 Inexact Rounded +-- sqtx8278 squareroot 308025 -> 5.6E+2 Inexact Rounded +-- sqtx8279 squareroot 319225 -> 5.6E+2 Inexact Rounded +-- sqtx8280 squareroot 330625 -> 5.8E+2 Inexact Rounded +-- sqtx8281 squareroot 342225 -> 5.8E+2 Inexact Rounded +-- sqtx8282 squareroot 354025 -> 6.0E+2 Inexact Rounded +-- sqtx8283 squareroot 366025 -> 6.0E+2 Inexact Rounded +-- sqtx8284 squareroot 378225 -> 6.2E+2 Inexact Rounded +-- sqtx8285 squareroot 390625 -> 6.2E+2 Inexact Rounded +-- sqtx8286 squareroot 403225 -> 6.4E+2 Inexact Rounded +-- sqtx8287 squareroot 416025 -> 6.4E+2 Inexact Rounded +-- sqtx8288 squareroot 429025 -> 6.6E+2 Inexact Rounded +-- sqtx8289 squareroot 442225 -> 6.6E+2 Inexact Rounded +-- sqtx8290 squareroot 455625 -> 6.8E+2 Inexact Rounded +-- sqtx8291 squareroot 469225 -> 6.8E+2 Inexact Rounded +-- sqtx8292 squareroot 483025 -> 7.0E+2 Inexact Rounded +-- sqtx8293 squareroot 497025 -> 7.0E+2 Inexact Rounded +-- sqtx8294 squareroot 511225 -> 7.2E+2 Inexact Rounded +-- sqtx8295 squareroot 525625 -> 7.2E+2 Inexact Rounded +-- sqtx8296 squareroot 540225 -> 7.4E+2 Inexact Rounded +-- sqtx8297 squareroot 555025 -> 7.4E+2 Inexact Rounded +-- sqtx8298 squareroot 570025 -> 7.6E+2 Inexact Rounded +-- sqtx8299 squareroot 585225 -> 7.6E+2 Inexact Rounded +-- sqtx8300 squareroot 600625 -> 7.8E+2 Inexact Rounded +-- sqtx8301 squareroot 616225 -> 7.8E+2 Inexact Rounded +-- sqtx8302 squareroot 632025 -> 8.0E+2 Inexact Rounded +-- sqtx8303 squareroot 648025 -> 8.0E+2 Inexact Rounded +-- sqtx8304 squareroot 664225 -> 8.2E+2 Inexact Rounded +-- sqtx8305 squareroot 680625 -> 8.2E+2 Inexact Rounded +-- sqtx8306 squareroot 697225 -> 8.4E+2 Inexact Rounded +-- sqtx8307 squareroot 714025 -> 8.4E+2 Inexact Rounded +-- sqtx8308 squareroot 731025 -> 8.6E+2 Inexact Rounded +-- sqtx8309 squareroot 748225 -> 8.6E+2 Inexact Rounded +-- sqtx8310 squareroot 765625 -> 8.8E+2 Inexact Rounded +-- sqtx8311 squareroot 783225 -> 8.8E+2 Inexact Rounded +-- sqtx8312 squareroot 801025 -> 9.0E+2 Inexact Rounded +-- sqtx8313 squareroot 819025 -> 9.0E+2 Inexact Rounded +-- sqtx8314 squareroot 837225 -> 9.2E+2 Inexact Rounded +-- sqtx8315 squareroot 855625 -> 9.2E+2 Inexact Rounded +-- sqtx8316 squareroot 874225 -> 9.4E+2 Inexact Rounded +-- sqtx8317 squareroot 893025 -> 9.4E+2 Inexact Rounded +-- sqtx8318 squareroot 912025 -> 9.6E+2 Inexact Rounded +-- sqtx8319 squareroot 931225 -> 9.6E+2 Inexact Rounded +-- sqtx8320 squareroot 950625 -> 9.8E+2 Inexact Rounded +-- sqtx8321 squareroot 970225 -> 9.8E+2 Inexact Rounded +-- sqtx8322 squareroot 990025 -> 1.0E+3 Inexact Rounded precision: 6 -sqtx8323 squareroot 88975734963025 -> 9.43270E+6 Inexact Rounded -sqtx8324 squareroot 71085555000625 -> 8.43122E+6 Inexact Rounded -sqtx8325 squareroot 39994304.051025 -> 6324.10 Inexact Rounded -sqtx8326 squareroot 0.000007327172265625 -> 0.00270688 Inexact Rounded -sqtx8327 squareroot 1.0258600439025E-13 -> 3.20290E-7 Inexact Rounded -sqtx8328 squareroot 0.0034580574275625 -> 0.0588052 Inexact Rounded -sqtx8329 squareroot 7.6842317700625E-7 -> 0.000876598 Inexact Rounded -sqtx8330 squareroot 1263834495.2025 -> 35550.4 Inexact Rounded -sqtx8331 squareroot 433970666460.25 -> 658764 Inexact Rounded -sqtx8332 squareroot 4.5879286230625E-7 -> 0.000677342 Inexact Rounded -sqtx8333 squareroot 0.0029305603306225 -> 0.0541346 Inexact Rounded -sqtx8334 squareroot 70218282.733225 -> 8379.64 Inexact Rounded -sqtx8335 squareroot 11942519.082025 -> 3455.80 Inexact Rounded -sqtx8336 squareroot 0.0021230668905625 -> 0.0460768 Inexact Rounded -sqtx8337 squareroot 0.90081833411025 -> 0.949114 Inexact Rounded -sqtx8338 squareroot 5.5104120936225E-17 -> 7.42322E-9 Inexact Rounded -sqtx8339 squareroot 0.10530446854225 -> 0.324506 Inexact Rounded -sqtx8340 squareroot 8.706069866025E-14 -> 2.95060E-7 Inexact Rounded -sqtx8341 squareroot 23838.58800625 -> 154.398 Inexact Rounded -sqtx8342 squareroot 0.0013426911275625 -> 0.0366428 Inexact Rounded +-- sqtx8323 squareroot 88975734963025 -> 9.43270E+6 Inexact Rounded +-- sqtx8324 squareroot 71085555000625 -> 8.43122E+6 Inexact Rounded +-- sqtx8325 squareroot 39994304.051025 -> 6324.10 Inexact Rounded +-- sqtx8326 squareroot 0.000007327172265625 -> 0.00270688 Inexact Rounded +-- sqtx8327 squareroot 1.0258600439025E-13 -> 3.20290E-7 Inexact Rounded +-- sqtx8328 squareroot 0.0034580574275625 -> 0.0588052 Inexact Rounded +-- sqtx8329 squareroot 7.6842317700625E-7 -> 0.000876598 Inexact Rounded +-- sqtx8330 squareroot 1263834495.2025 -> 35550.4 Inexact Rounded +-- sqtx8331 squareroot 433970666460.25 -> 658764 Inexact Rounded +-- sqtx8332 squareroot 4.5879286230625E-7 -> 0.000677342 Inexact Rounded +-- sqtx8333 squareroot 0.0029305603306225 -> 0.0541346 Inexact Rounded +-- sqtx8334 squareroot 70218282.733225 -> 8379.64 Inexact Rounded +-- sqtx8335 squareroot 11942519.082025 -> 3455.80 Inexact Rounded +-- sqtx8336 squareroot 0.0021230668905625 -> 0.0460768 Inexact Rounded +-- sqtx8337 squareroot 0.90081833411025 -> 0.949114 Inexact Rounded +-- sqtx8338 squareroot 5.5104120936225E-17 -> 7.42322E-9 Inexact Rounded +-- sqtx8339 squareroot 0.10530446854225 -> 0.324506 Inexact Rounded +-- sqtx8340 squareroot 8.706069866025E-14 -> 2.95060E-7 Inexact Rounded +-- sqtx8341 squareroot 23838.58800625 -> 154.398 Inexact Rounded +-- sqtx8342 squareroot 0.0013426911275625 -> 0.0366428 Inexact Rounded -- test use of round-half-even in underflow situations -- precisions 2; all cases where result is both subnormal and a tie precision: 2 -sqtx8343 squareroot 2.5E-21 -> 0E-10 Underflow Subnormal Inexact Rounded Clamped -sqtx8344 squareroot 2.25E-20 -> 2E-10 Underflow Subnormal Inexact Rounded -sqtx8345 squareroot 6.25E-20 -> 2E-10 Underflow Subnormal Inexact Rounded -sqtx8346 squareroot 1.225E-19 -> 4E-10 Underflow Subnormal Inexact Rounded -sqtx8347 squareroot 2.025E-19 -> 4E-10 Underflow Subnormal Inexact Rounded -sqtx8348 squareroot 3.025E-19 -> 6E-10 Underflow Subnormal Inexact Rounded -sqtx8349 squareroot 4.225E-19 -> 6E-10 Underflow Subnormal Inexact Rounded -sqtx8350 squareroot 5.625E-19 -> 8E-10 Underflow Subnormal Inexact Rounded -sqtx8351 squareroot 7.225E-19 -> 8E-10 Underflow Subnormal Inexact Rounded -sqtx8352 squareroot 9.025E-19 -> 1.0E-9 Underflow Subnormal Inexact Rounded +-- sqtx8343 squareroot 2.5E-21 -> 0E-10 Underflow Subnormal Inexact Rounded Clamped +-- sqtx8344 squareroot 2.25E-20 -> 2E-10 Underflow Subnormal Inexact Rounded +-- sqtx8345 squareroot 6.25E-20 -> 2E-10 Underflow Subnormal Inexact Rounded +-- sqtx8346 squareroot 1.225E-19 -> 4E-10 Underflow Subnormal Inexact Rounded +-- sqtx8347 squareroot 2.025E-19 -> 4E-10 Underflow Subnormal Inexact Rounded +-- sqtx8348 squareroot 3.025E-19 -> 6E-10 Underflow Subnormal Inexact Rounded +-- sqtx8349 squareroot 4.225E-19 -> 6E-10 Underflow Subnormal Inexact Rounded +-- sqtx8350 squareroot 5.625E-19 -> 8E-10 Underflow Subnormal Inexact Rounded +-- sqtx8351 squareroot 7.225E-19 -> 8E-10 Underflow Subnormal Inexact Rounded +-- sqtx8352 squareroot 9.025E-19 -> 1.0E-9 Underflow Subnormal Inexact Rounded -- precision 3, input precision <= 5 precision: 3 -sqtx8353 squareroot 2.5E-23 -> 0E-11 Underflow Subnormal Inexact Rounded Clamped -sqtx8354 squareroot 2.25E-22 -> 2E-11 Underflow Subnormal Inexact Rounded -sqtx8355 squareroot 6.25E-22 -> 2E-11 Underflow Subnormal Inexact Rounded -sqtx8356 squareroot 1.225E-21 -> 4E-11 Underflow Subnormal Inexact Rounded -sqtx8357 squareroot 2.025E-21 -> 4E-11 Underflow Subnormal Inexact Rounded -sqtx8358 squareroot 3.025E-21 -> 6E-11 Underflow Subnormal Inexact Rounded -sqtx8359 squareroot 4.225E-21 -> 6E-11 Underflow Subnormal Inexact Rounded -sqtx8360 squareroot 5.625E-21 -> 8E-11 Underflow Subnormal Inexact Rounded -sqtx8361 squareroot 7.225E-21 -> 8E-11 Underflow Subnormal Inexact Rounded -sqtx8362 squareroot 9.025E-21 -> 1.0E-10 Underflow Subnormal Inexact Rounded -sqtx8363 squareroot 1.1025E-20 -> 1.0E-10 Underflow Subnormal Inexact Rounded -sqtx8364 squareroot 1.3225E-20 -> 1.2E-10 Underflow Subnormal Inexact Rounded -sqtx8365 squareroot 1.5625E-20 -> 1.2E-10 Underflow Subnormal Inexact Rounded -sqtx8366 squareroot 1.8225E-20 -> 1.4E-10 Underflow Subnormal Inexact Rounded -sqtx8367 squareroot 2.1025E-20 -> 1.4E-10 Underflow Subnormal Inexact Rounded -sqtx8368 squareroot 2.4025E-20 -> 1.6E-10 Underflow Subnormal Inexact Rounded -sqtx8369 squareroot 2.7225E-20 -> 1.6E-10 Underflow Subnormal Inexact Rounded -sqtx8370 squareroot 3.0625E-20 -> 1.8E-10 Underflow Subnormal Inexact Rounded -sqtx8371 squareroot 3.4225E-20 -> 1.8E-10 Underflow Subnormal Inexact Rounded -sqtx8372 squareroot 3.8025E-20 -> 2.0E-10 Underflow Subnormal Inexact Rounded -sqtx8373 squareroot 4.2025E-20 -> 2.0E-10 Underflow Subnormal Inexact Rounded -sqtx8374 squareroot 4.6225E-20 -> 2.2E-10 Underflow Subnormal Inexact Rounded -sqtx8375 squareroot 5.0625E-20 -> 2.2E-10 Underflow Subnormal Inexact Rounded -sqtx8376 squareroot 5.5225E-20 -> 2.4E-10 Underflow Subnormal Inexact Rounded -sqtx8377 squareroot 6.0025E-20 -> 2.4E-10 Underflow Subnormal Inexact Rounded -sqtx8378 squareroot 6.5025E-20 -> 2.6E-10 Underflow Subnormal Inexact Rounded -sqtx8379 squareroot 7.0225E-20 -> 2.6E-10 Underflow Subnormal Inexact Rounded -sqtx8380 squareroot 7.5625E-20 -> 2.8E-10 Underflow Subnormal Inexact Rounded -sqtx8381 squareroot 8.1225E-20 -> 2.8E-10 Underflow Subnormal Inexact Rounded -sqtx8382 squareroot 8.7025E-20 -> 3.0E-10 Underflow Subnormal Inexact Rounded -sqtx8383 squareroot 9.3025E-20 -> 3.0E-10 Underflow Subnormal Inexact Rounded -sqtx8384 squareroot 9.9225E-20 -> 3.2E-10 Underflow Subnormal Inexact Rounded +-- sqtx8353 squareroot 2.5E-23 -> 0E-11 Underflow Subnormal Inexact Rounded Clamped +-- sqtx8354 squareroot 2.25E-22 -> 2E-11 Underflow Subnormal Inexact Rounded +-- sqtx8355 squareroot 6.25E-22 -> 2E-11 Underflow Subnormal Inexact Rounded +-- sqtx8356 squareroot 1.225E-21 -> 4E-11 Underflow Subnormal Inexact Rounded +-- sqtx8357 squareroot 2.025E-21 -> 4E-11 Underflow Subnormal Inexact Rounded +-- sqtx8358 squareroot 3.025E-21 -> 6E-11 Underflow Subnormal Inexact Rounded +-- sqtx8359 squareroot 4.225E-21 -> 6E-11 Underflow Subnormal Inexact Rounded +-- sqtx8360 squareroot 5.625E-21 -> 8E-11 Underflow Subnormal Inexact Rounded +-- sqtx8361 squareroot 7.225E-21 -> 8E-11 Underflow Subnormal Inexact Rounded +-- sqtx8362 squareroot 9.025E-21 -> 1.0E-10 Underflow Subnormal Inexact Rounded +-- sqtx8363 squareroot 1.1025E-20 -> 1.0E-10 Underflow Subnormal Inexact Rounded +-- sqtx8364 squareroot 1.3225E-20 -> 1.2E-10 Underflow Subnormal Inexact Rounded +-- sqtx8365 squareroot 1.5625E-20 -> 1.2E-10 Underflow Subnormal Inexact Rounded +-- sqtx8366 squareroot 1.8225E-20 -> 1.4E-10 Underflow Subnormal Inexact Rounded +-- sqtx8367 squareroot 2.1025E-20 -> 1.4E-10 Underflow Subnormal Inexact Rounded +-- sqtx8368 squareroot 2.4025E-20 -> 1.6E-10 Underflow Subnormal Inexact Rounded +-- sqtx8369 squareroot 2.7225E-20 -> 1.6E-10 Underflow Subnormal Inexact Rounded +-- sqtx8370 squareroot 3.0625E-20 -> 1.8E-10 Underflow Subnormal Inexact Rounded +-- sqtx8371 squareroot 3.4225E-20 -> 1.8E-10 Underflow Subnormal Inexact Rounded +-- sqtx8372 squareroot 3.8025E-20 -> 2.0E-10 Underflow Subnormal Inexact Rounded +-- sqtx8373 squareroot 4.2025E-20 -> 2.0E-10 Underflow Subnormal Inexact Rounded +-- sqtx8374 squareroot 4.6225E-20 -> 2.2E-10 Underflow Subnormal Inexact Rounded +-- sqtx8375 squareroot 5.0625E-20 -> 2.2E-10 Underflow Subnormal Inexact Rounded +-- sqtx8376 squareroot 5.5225E-20 -> 2.4E-10 Underflow Subnormal Inexact Rounded +-- sqtx8377 squareroot 6.0025E-20 -> 2.4E-10 Underflow Subnormal Inexact Rounded +-- sqtx8378 squareroot 6.5025E-20 -> 2.6E-10 Underflow Subnormal Inexact Rounded +-- sqtx8379 squareroot 7.0225E-20 -> 2.6E-10 Underflow Subnormal Inexact Rounded +-- sqtx8380 squareroot 7.5625E-20 -> 2.8E-10 Underflow Subnormal Inexact Rounded +-- sqtx8381 squareroot 8.1225E-20 -> 2.8E-10 Underflow Subnormal Inexact Rounded +-- sqtx8382 squareroot 8.7025E-20 -> 3.0E-10 Underflow Subnormal Inexact Rounded +-- sqtx8383 squareroot 9.3025E-20 -> 3.0E-10 Underflow Subnormal Inexact Rounded +-- sqtx8384 squareroot 9.9225E-20 -> 3.2E-10 Underflow Subnormal Inexact Rounded --precision 4, input precision <= 4 precision: 4 -sqtx8385 squareroot 2.5E-25 -> 0E-12 Underflow Subnormal Inexact Rounded Clamped -sqtx8386 squareroot 2.25E-24 -> 2E-12 Underflow Subnormal Inexact Rounded -sqtx8387 squareroot 6.25E-24 -> 2E-12 Underflow Subnormal Inexact Rounded -sqtx8388 squareroot 1.225E-23 -> 4E-12 Underflow Subnormal Inexact Rounded -sqtx8389 squareroot 2.025E-23 -> 4E-12 Underflow Subnormal Inexact Rounded -sqtx8390 squareroot 3.025E-23 -> 6E-12 Underflow Subnormal Inexact Rounded -sqtx8391 squareroot 4.225E-23 -> 6E-12 Underflow Subnormal Inexact Rounded -sqtx8392 squareroot 5.625E-23 -> 8E-12 Underflow Subnormal Inexact Rounded -sqtx8393 squareroot 7.225E-23 -> 8E-12 Underflow Subnormal Inexact Rounded -sqtx8394 squareroot 9.025E-23 -> 1.0E-11 Underflow Subnormal Inexact Rounded +-- sqtx8385 squareroot 2.5E-25 -> 0E-12 Underflow Subnormal Inexact Rounded Clamped +-- sqtx8386 squareroot 2.25E-24 -> 2E-12 Underflow Subnormal Inexact Rounded +-- sqtx8387 squareroot 6.25E-24 -> 2E-12 Underflow Subnormal Inexact Rounded +-- sqtx8388 squareroot 1.225E-23 -> 4E-12 Underflow Subnormal Inexact Rounded +-- sqtx8389 squareroot 2.025E-23 -> 4E-12 Underflow Subnormal Inexact Rounded +-- sqtx8390 squareroot 3.025E-23 -> 6E-12 Underflow Subnormal Inexact Rounded +-- sqtx8391 squareroot 4.225E-23 -> 6E-12 Underflow Subnormal Inexact Rounded +-- sqtx8392 squareroot 5.625E-23 -> 8E-12 Underflow Subnormal Inexact Rounded +-- sqtx8393 squareroot 7.225E-23 -> 8E-12 Underflow Subnormal Inexact Rounded +-- sqtx8394 squareroot 9.025E-23 -> 1.0E-11 Underflow Subnormal Inexact Rounded --precision 5, input precision <= 5 precision: 5 -sqtx8395 squareroot 2.5E-27 -> 0E-13 Underflow Subnormal Inexact Rounded Clamped -sqtx8396 squareroot 2.25E-26 -> 2E-13 Underflow Subnormal Inexact Rounded -sqtx8397 squareroot 6.25E-26 -> 2E-13 Underflow Subnormal Inexact Rounded -sqtx8398 squareroot 1.225E-25 -> 4E-13 Underflow Subnormal Inexact Rounded -sqtx8399 squareroot 2.025E-25 -> 4E-13 Underflow Subnormal Inexact Rounded -sqtx8400 squareroot 3.025E-25 -> 6E-13 Underflow Subnormal Inexact Rounded -sqtx8401 squareroot 4.225E-25 -> 6E-13 Underflow Subnormal Inexact Rounded -sqtx8402 squareroot 5.625E-25 -> 8E-13 Underflow Subnormal Inexact Rounded -sqtx8403 squareroot 7.225E-25 -> 8E-13 Underflow Subnormal Inexact Rounded -sqtx8404 squareroot 9.025E-25 -> 1.0E-12 Underflow Subnormal Inexact Rounded -sqtx8405 squareroot 1.1025E-24 -> 1.0E-12 Underflow Subnormal Inexact Rounded -sqtx8406 squareroot 1.3225E-24 -> 1.2E-12 Underflow Subnormal Inexact Rounded -sqtx8407 squareroot 1.5625E-24 -> 1.2E-12 Underflow Subnormal Inexact Rounded -sqtx8408 squareroot 1.8225E-24 -> 1.4E-12 Underflow Subnormal Inexact Rounded -sqtx8409 squareroot 2.1025E-24 -> 1.4E-12 Underflow Subnormal Inexact Rounded -sqtx8410 squareroot 2.4025E-24 -> 1.6E-12 Underflow Subnormal Inexact Rounded -sqtx8411 squareroot 2.7225E-24 -> 1.6E-12 Underflow Subnormal Inexact Rounded -sqtx8412 squareroot 3.0625E-24 -> 1.8E-12 Underflow Subnormal Inexact Rounded -sqtx8413 squareroot 3.4225E-24 -> 1.8E-12 Underflow Subnormal Inexact Rounded -sqtx8414 squareroot 3.8025E-24 -> 2.0E-12 Underflow Subnormal Inexact Rounded -sqtx8415 squareroot 4.2025E-24 -> 2.0E-12 Underflow Subnormal Inexact Rounded -sqtx8416 squareroot 4.6225E-24 -> 2.2E-12 Underflow Subnormal Inexact Rounded -sqtx8417 squareroot 5.0625E-24 -> 2.2E-12 Underflow Subnormal Inexact Rounded -sqtx8418 squareroot 5.5225E-24 -> 2.4E-12 Underflow Subnormal Inexact Rounded -sqtx8419 squareroot 6.0025E-24 -> 2.4E-12 Underflow Subnormal Inexact Rounded -sqtx8420 squareroot 6.5025E-24 -> 2.6E-12 Underflow Subnormal Inexact Rounded -sqtx8421 squareroot 7.0225E-24 -> 2.6E-12 Underflow Subnormal Inexact Rounded -sqtx8422 squareroot 7.5625E-24 -> 2.8E-12 Underflow Subnormal Inexact Rounded -sqtx8423 squareroot 8.1225E-24 -> 2.8E-12 Underflow Subnormal Inexact Rounded -sqtx8424 squareroot 8.7025E-24 -> 3.0E-12 Underflow Subnormal Inexact Rounded -sqtx8425 squareroot 9.3025E-24 -> 3.0E-12 Underflow Subnormal Inexact Rounded -sqtx8426 squareroot 9.9225E-24 -> 3.2E-12 Underflow Subnormal Inexact Rounded +-- sqtx8395 squareroot 2.5E-27 -> 0E-13 Underflow Subnormal Inexact Rounded Clamped +-- sqtx8396 squareroot 2.25E-26 -> 2E-13 Underflow Subnormal Inexact Rounded +-- sqtx8397 squareroot 6.25E-26 -> 2E-13 Underflow Subnormal Inexact Rounded +-- sqtx8398 squareroot 1.225E-25 -> 4E-13 Underflow Subnormal Inexact Rounded +-- sqtx8399 squareroot 2.025E-25 -> 4E-13 Underflow Subnormal Inexact Rounded +-- sqtx8400 squareroot 3.025E-25 -> 6E-13 Underflow Subnormal Inexact Rounded +-- sqtx8401 squareroot 4.225E-25 -> 6E-13 Underflow Subnormal Inexact Rounded +-- sqtx8402 squareroot 5.625E-25 -> 8E-13 Underflow Subnormal Inexact Rounded +-- sqtx8403 squareroot 7.225E-25 -> 8E-13 Underflow Subnormal Inexact Rounded +-- sqtx8404 squareroot 9.025E-25 -> 1.0E-12 Underflow Subnormal Inexact Rounded +-- sqtx8405 squareroot 1.1025E-24 -> 1.0E-12 Underflow Subnormal Inexact Rounded +-- sqtx8406 squareroot 1.3225E-24 -> 1.2E-12 Underflow Subnormal Inexact Rounded +-- sqtx8407 squareroot 1.5625E-24 -> 1.2E-12 Underflow Subnormal Inexact Rounded +-- sqtx8408 squareroot 1.8225E-24 -> 1.4E-12 Underflow Subnormal Inexact Rounded +-- sqtx8409 squareroot 2.1025E-24 -> 1.4E-12 Underflow Subnormal Inexact Rounded +-- sqtx8410 squareroot 2.4025E-24 -> 1.6E-12 Underflow Subnormal Inexact Rounded +-- sqtx8411 squareroot 2.7225E-24 -> 1.6E-12 Underflow Subnormal Inexact Rounded +-- sqtx8412 squareroot 3.0625E-24 -> 1.8E-12 Underflow Subnormal Inexact Rounded +-- sqtx8413 squareroot 3.4225E-24 -> 1.8E-12 Underflow Subnormal Inexact Rounded +-- sqtx8414 squareroot 3.8025E-24 -> 2.0E-12 Underflow Subnormal Inexact Rounded +-- sqtx8415 squareroot 4.2025E-24 -> 2.0E-12 Underflow Subnormal Inexact Rounded +-- sqtx8416 squareroot 4.6225E-24 -> 2.2E-12 Underflow Subnormal Inexact Rounded +-- sqtx8417 squareroot 5.0625E-24 -> 2.2E-12 Underflow Subnormal Inexact Rounded +-- sqtx8418 squareroot 5.5225E-24 -> 2.4E-12 Underflow Subnormal Inexact Rounded +-- sqtx8419 squareroot 6.0025E-24 -> 2.4E-12 Underflow Subnormal Inexact Rounded +-- sqtx8420 squareroot 6.5025E-24 -> 2.6E-12 Underflow Subnormal Inexact Rounded +-- sqtx8421 squareroot 7.0225E-24 -> 2.6E-12 Underflow Subnormal Inexact Rounded +-- sqtx8422 squareroot 7.5625E-24 -> 2.8E-12 Underflow Subnormal Inexact Rounded +-- sqtx8423 squareroot 8.1225E-24 -> 2.8E-12 Underflow Subnormal Inexact Rounded +-- sqtx8424 squareroot 8.7025E-24 -> 3.0E-12 Underflow Subnormal Inexact Rounded +-- sqtx8425 squareroot 9.3025E-24 -> 3.0E-12 Underflow Subnormal Inexact Rounded +-- sqtx8426 squareroot 9.9225E-24 -> 3.2E-12 Underflow Subnormal Inexact Rounded -- a random selection of values that Python2.5.1 rounds incorrectly precision: 1 -sqtx8427 squareroot 227 -> 2E+1 Inexact Rounded -sqtx8428 squareroot 625 -> 2E+1 Inexact Rounded -sqtx8429 squareroot 1215 -> 3E+1 Inexact Rounded -sqtx8430 squareroot 2008 -> 4E+1 Inexact Rounded -sqtx8431 squareroot 2020 -> 4E+1 Inexact Rounded -sqtx8432 squareroot 2026 -> 5E+1 Inexact Rounded -sqtx8433 squareroot 2027 -> 5E+1 Inexact Rounded -sqtx8434 squareroot 2065 -> 5E+1 Inexact Rounded -sqtx8435 squareroot 2075 -> 5E+1 Inexact Rounded -sqtx8436 squareroot 2088 -> 5E+1 Inexact Rounded -sqtx8437 squareroot 3049 -> 6E+1 Inexact Rounded -sqtx8438 squareroot 3057 -> 6E+1 Inexact Rounded -sqtx8439 squareroot 3061 -> 6E+1 Inexact Rounded -sqtx8440 squareroot 3092 -> 6E+1 Inexact Rounded -sqtx8441 squareroot 4222 -> 6E+1 Inexact Rounded -sqtx8442 squareroot 5676 -> 8E+1 Inexact Rounded -sqtx8443 squareroot 5686 -> 8E+1 Inexact Rounded -sqtx8444 squareroot 7215 -> 8E+1 Inexact Rounded -sqtx8445 squareroot 9086 -> 1E+2 Inexact Rounded -sqtx8446 squareroot 9095 -> 1E+2 Inexact Rounded +-- sqtx8427 squareroot 227 -> 2E+1 Inexact Rounded +-- sqtx8428 squareroot 625 -> 2E+1 Inexact Rounded +-- sqtx8429 squareroot 1215 -> 3E+1 Inexact Rounded +-- sqtx8430 squareroot 2008 -> 4E+1 Inexact Rounded +-- sqtx8431 squareroot 2020 -> 4E+1 Inexact Rounded +-- sqtx8432 squareroot 2026 -> 5E+1 Inexact Rounded +-- sqtx8433 squareroot 2027 -> 5E+1 Inexact Rounded +-- sqtx8434 squareroot 2065 -> 5E+1 Inexact Rounded +-- sqtx8435 squareroot 2075 -> 5E+1 Inexact Rounded +-- sqtx8436 squareroot 2088 -> 5E+1 Inexact Rounded +-- sqtx8437 squareroot 3049 -> 6E+1 Inexact Rounded +-- sqtx8438 squareroot 3057 -> 6E+1 Inexact Rounded +-- sqtx8439 squareroot 3061 -> 6E+1 Inexact Rounded +-- sqtx8440 squareroot 3092 -> 6E+1 Inexact Rounded +-- sqtx8441 squareroot 4222 -> 6E+1 Inexact Rounded +-- sqtx8442 squareroot 5676 -> 8E+1 Inexact Rounded +-- sqtx8443 squareroot 5686 -> 8E+1 Inexact Rounded +-- sqtx8444 squareroot 7215 -> 8E+1 Inexact Rounded +-- sqtx8445 squareroot 9086 -> 1E+2 Inexact Rounded +-- sqtx8446 squareroot 9095 -> 1E+2 Inexact Rounded precision: 2 -sqtx8447 squareroot 1266 -> 36 Inexact Rounded -sqtx8448 squareroot 2552 -> 51 Inexact Rounded -sqtx8449 squareroot 5554 -> 75 Inexact Rounded -sqtx8450 squareroot 7832 -> 88 Inexact Rounded -sqtx8451 squareroot 13201 -> 1.1E+2 Inexact Rounded -sqtx8452 squareroot 15695 -> 1.3E+2 Inexact Rounded -sqtx8453 squareroot 18272 -> 1.4E+2 Inexact Rounded -sqtx8454 squareroot 21026 -> 1.5E+2 Inexact Rounded -sqtx8455 squareroot 24069 -> 1.6E+2 Inexact Rounded -sqtx8456 squareroot 34277 -> 1.9E+2 Inexact Rounded -sqtx8457 squareroot 46233 -> 2.2E+2 Inexact Rounded -sqtx8458 squareroot 46251 -> 2.2E+2 Inexact Rounded -sqtx8459 squareroot 46276 -> 2.2E+2 Inexact Rounded -sqtx8460 squareroot 70214 -> 2.6E+2 Inexact Rounded -sqtx8461 squareroot 81249 -> 2.9E+2 Inexact Rounded -sqtx8462 squareroot 81266 -> 2.9E+2 Inexact Rounded -sqtx8463 squareroot 93065 -> 3.1E+2 Inexact Rounded -sqtx8464 squareroot 93083 -> 3.1E+2 Inexact Rounded -sqtx8465 squareroot 99230 -> 3.2E+2 Inexact Rounded -sqtx8466 squareroot 99271 -> 3.2E+2 Inexact Rounded +-- sqtx8447 squareroot 1266 -> 36 Inexact Rounded +-- sqtx8448 squareroot 2552 -> 51 Inexact Rounded +-- sqtx8449 squareroot 5554 -> 75 Inexact Rounded +-- sqtx8450 squareroot 7832 -> 88 Inexact Rounded +-- sqtx8451 squareroot 13201 -> 1.1E+2 Inexact Rounded +-- sqtx8452 squareroot 15695 -> 1.3E+2 Inexact Rounded +-- sqtx8453 squareroot 18272 -> 1.4E+2 Inexact Rounded +-- sqtx8454 squareroot 21026 -> 1.5E+2 Inexact Rounded +-- sqtx8455 squareroot 24069 -> 1.6E+2 Inexact Rounded +-- sqtx8456 squareroot 34277 -> 1.9E+2 Inexact Rounded +-- sqtx8457 squareroot 46233 -> 2.2E+2 Inexact Rounded +-- sqtx8458 squareroot 46251 -> 2.2E+2 Inexact Rounded +-- sqtx8459 squareroot 46276 -> 2.2E+2 Inexact Rounded +-- sqtx8460 squareroot 70214 -> 2.6E+2 Inexact Rounded +-- sqtx8461 squareroot 81249 -> 2.9E+2 Inexact Rounded +-- sqtx8462 squareroot 81266 -> 2.9E+2 Inexact Rounded +-- sqtx8463 squareroot 93065 -> 3.1E+2 Inexact Rounded +-- sqtx8464 squareroot 93083 -> 3.1E+2 Inexact Rounded +-- sqtx8465 squareroot 99230 -> 3.2E+2 Inexact Rounded +-- sqtx8466 squareroot 99271 -> 3.2E+2 Inexact Rounded precision: 3 -sqtx8467 squareroot 11349 -> 107 Inexact Rounded -sqtx8468 squareroot 26738 -> 164 Inexact Rounded -sqtx8469 squareroot 31508 -> 178 Inexact Rounded -sqtx8470 squareroot 44734 -> 212 Inexact Rounded -sqtx8471 squareroot 44738 -> 212 Inexact Rounded -sqtx8472 squareroot 51307 -> 227 Inexact Rounded -sqtx8473 squareroot 62259 -> 250 Inexact Rounded -sqtx8474 squareroot 75901 -> 276 Inexact Rounded -sqtx8475 squareroot 76457 -> 277 Inexact Rounded -sqtx8476 squareroot 180287 -> 425 Inexact Rounded -sqtx8477 squareroot 202053 -> 450 Inexact Rounded -sqtx8478 squareroot 235747 -> 486 Inexact Rounded -sqtx8479 squareroot 256537 -> 506 Inexact Rounded -sqtx8480 squareroot 299772 -> 548 Inexact Rounded -sqtx8481 squareroot 415337 -> 644 Inexact Rounded -sqtx8482 squareroot 617067 -> 786 Inexact Rounded -sqtx8483 squareroot 628022 -> 792 Inexact Rounded -sqtx8484 squareroot 645629 -> 804 Inexact Rounded -sqtx8485 squareroot 785836 -> 886 Inexact Rounded -sqtx8486 squareroot 993066 -> 997 Inexact Rounded +-- sqtx8467 squareroot 11349 -> 107 Inexact Rounded +-- sqtx8468 squareroot 26738 -> 164 Inexact Rounded +-- sqtx8469 squareroot 31508 -> 178 Inexact Rounded +-- sqtx8470 squareroot 44734 -> 212 Inexact Rounded +-- sqtx8471 squareroot 44738 -> 212 Inexact Rounded +-- sqtx8472 squareroot 51307 -> 227 Inexact Rounded +-- sqtx8473 squareroot 62259 -> 250 Inexact Rounded +-- sqtx8474 squareroot 75901 -> 276 Inexact Rounded +-- sqtx8475 squareroot 76457 -> 277 Inexact Rounded +-- sqtx8476 squareroot 180287 -> 425 Inexact Rounded +-- sqtx8477 squareroot 202053 -> 450 Inexact Rounded +-- sqtx8478 squareroot 235747 -> 486 Inexact Rounded +-- sqtx8479 squareroot 256537 -> 506 Inexact Rounded +-- sqtx8480 squareroot 299772 -> 548 Inexact Rounded +-- sqtx8481 squareroot 415337 -> 644 Inexact Rounded +-- sqtx8482 squareroot 617067 -> 786 Inexact Rounded +-- sqtx8483 squareroot 628022 -> 792 Inexact Rounded +-- sqtx8484 squareroot 645629 -> 804 Inexact Rounded +-- sqtx8485 squareroot 785836 -> 886 Inexact Rounded +-- sqtx8486 squareroot 993066 -> 997 Inexact Rounded precision: 6 -sqtx8487 squareroot 14917781 -> 3862.35 Inexact Rounded -sqtx8488 squareroot 17237238 -> 4151.78 Inexact Rounded -sqtx8489 squareroot 18054463 -> 4249.05 Inexact Rounded -sqtx8490 squareroot 19990694 -> 4471.10 Inexact Rounded -sqtx8491 squareroot 29061855 -> 5390.90 Inexact Rounded -sqtx8492 squareroot 49166257 -> 7011.87 Inexact Rounded -sqtx8493 squareroot 53082086 -> 7285.75 Inexact Rounded -sqtx8494 squareroot 56787909 -> 7535.78 Inexact Rounded -sqtx8495 squareroot 81140019 -> 9007.78 Inexact Rounded -sqtx8496 squareroot 87977554 -> 9379.64 Inexact Rounded -sqtx8497 squareroot 93624683 -> 9675.98 Inexact Rounded -sqtx8498 squareroot 98732747 -> 9936.44 Inexact Rounded -sqtx8499 squareroot 99222813 -> 9961.06 Inexact Rounded -sqtx8500 squareroot 143883626 -> 11995.2 Inexact Rounded -sqtx8501 squareroot 180433301 -> 13432.5 Inexact Rounded -sqtx8502 squareroot 227034020 -> 15067.6 Inexact Rounded -sqtx8503 squareroot 283253992 -> 16830.2 Inexact Rounded -sqtx8504 squareroot 617047954 -> 24840.4 Inexact Rounded -sqtx8505 squareroot 736870094 -> 27145.4 Inexact Rounded -sqtx8506 squareroot 897322915 -> 29955.3 Inexact Rounded +-- sqtx8487 squareroot 14917781 -> 3862.35 Inexact Rounded +-- sqtx8488 squareroot 17237238 -> 4151.78 Inexact Rounded +-- sqtx8489 squareroot 18054463 -> 4249.05 Inexact Rounded +-- sqtx8490 squareroot 19990694 -> 4471.10 Inexact Rounded +-- sqtx8491 squareroot 29061855 -> 5390.90 Inexact Rounded +-- sqtx8492 squareroot 49166257 -> 7011.87 Inexact Rounded +-- sqtx8493 squareroot 53082086 -> 7285.75 Inexact Rounded +-- sqtx8494 squareroot 56787909 -> 7535.78 Inexact Rounded +-- sqtx8495 squareroot 81140019 -> 9007.78 Inexact Rounded +-- sqtx8496 squareroot 87977554 -> 9379.64 Inexact Rounded +-- sqtx8497 squareroot 93624683 -> 9675.98 Inexact Rounded +-- sqtx8498 squareroot 98732747 -> 9936.44 Inexact Rounded +-- sqtx8499 squareroot 99222813 -> 9961.06 Inexact Rounded +-- sqtx8500 squareroot 143883626 -> 11995.2 Inexact Rounded +-- sqtx8501 squareroot 180433301 -> 13432.5 Inexact Rounded +-- sqtx8502 squareroot 227034020 -> 15067.6 Inexact Rounded +-- sqtx8503 squareroot 283253992 -> 16830.2 Inexact Rounded +-- sqtx8504 squareroot 617047954 -> 24840.4 Inexact Rounded +-- sqtx8505 squareroot 736870094 -> 27145.4 Inexact Rounded +-- sqtx8506 squareroot 897322915 -> 29955.3 Inexact Rounded -- results close to minimum normal precision: 1 -sqtx8507 squareroot 1E-20 -> 0E-9 Underflow Subnormal Inexact Rounded Clamped -sqtx8508 squareroot 1E-19 -> 0E-9 Underflow Subnormal Inexact Rounded Clamped +-- sqtx8507 squareroot 1E-20 -> 0E-9 Underflow Subnormal Inexact Rounded Clamped +-- sqtx8508 squareroot 1E-19 -> 0E-9 Underflow Subnormal Inexact Rounded Clamped sqtx8509 squareroot 1E-18 -> 1E-9 precision: 2 sqtx8510 squareroot 8.1E-19 -> 9E-10 Subnormal sqtx8511 squareroot 8.10E-19 -> 9E-10 Subnormal Rounded -sqtx8512 squareroot 9.0E-19 -> 9E-10 Underflow Subnormal Inexact Rounded -sqtx8513 squareroot 9.02E-19 -> 9E-10 Underflow Subnormal Inexact Rounded -sqtx8514 squareroot 9.03E-19 -> 1.0E-9 Underflow Subnormal Inexact Rounded -sqtx8515 squareroot 9.1E-19 -> 1.0E-9 Underflow Subnormal Inexact Rounded -sqtx8516 squareroot 9.9E-19 -> 1.0E-9 Underflow Subnormal Inexact Rounded -sqtx8517 squareroot 9.91E-19 -> 1.0E-9 Underflow Subnormal Inexact Rounded -sqtx8518 squareroot 9.92E-19 -> 1.0E-9 Underflow Subnormal Inexact Rounded -sqtx8519 squareroot 9.95E-19 -> 1.0E-9 Underflow Subnormal Inexact Rounded -sqtx8520 squareroot 9.98E-19 -> 1.0E-9 Underflow Subnormal Inexact Rounded -sqtx8521 squareroot 9.99E-19 -> 1.0E-9 Underflow Subnormal Inexact Rounded +-- sqtx8512 squareroot 9.0E-19 -> 9E-10 Underflow Subnormal Inexact Rounded +-- sqtx8513 squareroot 9.02E-19 -> 9E-10 Underflow Subnormal Inexact Rounded +-- sqtx8514 squareroot 9.03E-19 -> 1.0E-9 Underflow Subnormal Inexact Rounded +-- sqtx8515 squareroot 9.1E-19 -> 1.0E-9 Underflow Subnormal Inexact Rounded +-- sqtx8516 squareroot 9.9E-19 -> 1.0E-9 Underflow Subnormal Inexact Rounded +-- sqtx8517 squareroot 9.91E-19 -> 1.0E-9 Underflow Subnormal Inexact Rounded +-- sqtx8518 squareroot 9.92E-19 -> 1.0E-9 Underflow Subnormal Inexact Rounded +-- sqtx8519 squareroot 9.95E-19 -> 1.0E-9 Underflow Subnormal Inexact Rounded +-- sqtx8520 squareroot 9.98E-19 -> 1.0E-9 Underflow Subnormal Inexact Rounded +-- sqtx8521 squareroot 9.99E-19 -> 1.0E-9 Underflow Subnormal Inexact Rounded sqtx8522 squareroot 1E-18 -> 1E-9 sqtx8523 squareroot 1.0E-18 -> 1.0E-9 sqtx8524 squareroot 1.00E-18 -> 1.0E-9 sqtx8525 squareroot 1.000E-18 -> 1.0E-9 Rounded sqtx8526 squareroot 1.0000E-18 -> 1.0E-9 Rounded -sqtx8527 squareroot 1.01E-18 -> 1.0E-9 Inexact Rounded -sqtx8528 squareroot 1.02E-18 -> 1.0E-9 Inexact Rounded -sqtx8529 squareroot 1.1E-18 -> 1.0E-9 Inexact Rounded +-- sqtx8527 squareroot 1.01E-18 -> 1.0E-9 Inexact Rounded +-- sqtx8528 squareroot 1.02E-18 -> 1.0E-9 Inexact Rounded +-- sqtx8529 squareroot 1.1E-18 -> 1.0E-9 Inexact Rounded precision: 3 sqtx8530 squareroot 8.1E-19 -> 9E-10 Subnormal sqtx8531 squareroot 8.10E-19 -> 9.0E-10 Subnormal sqtx8532 squareroot 8.100E-19 -> 9.0E-10 Subnormal sqtx8533 squareroot 8.1000E-19 -> 9.0E-10 Subnormal Rounded -sqtx8534 squareroot 9.9E-19 -> 9.9E-10 Underflow Subnormal Inexact Rounded -sqtx8535 squareroot 9.91E-19 -> 1.00E-9 Underflow Subnormal Inexact Rounded -sqtx8536 squareroot 9.99E-19 -> 1.00E-9 Underflow Subnormal Inexact Rounded -sqtx8537 squareroot 9.998E-19 -> 1.00E-9 Underflow Subnormal Inexact Rounded +-- sqtx8534 squareroot 9.9E-19 -> 9.9E-10 Underflow Subnormal Inexact Rounded +-- sqtx8535 squareroot 9.91E-19 -> 1.00E-9 Underflow Subnormal Inexact Rounded +-- sqtx8536 squareroot 9.99E-19 -> 1.00E-9 Underflow Subnormal Inexact Rounded +-- sqtx8537 squareroot 9.998E-19 -> 1.00E-9 Underflow Subnormal Inexact Rounded sqtx8538 squareroot 1E-18 -> 1E-9 sqtx8539 squareroot 1.0E-18 -> 1.0E-9 sqtx8540 squareroot 1.00E-18 -> 1.0E-9 @@ -3573,126 +3573,126 @@ sqtx8541 squareroot 1.000E-18 -> 1.00E-9 sqtx8542 squareroot 1.0000E-18 -> 1.00E-9 sqtx8543 squareroot 1.00000E-18 -> 1.00E-9 Rounded sqtx8544 squareroot 1.000000E-18 -> 1.00E-9 Rounded -sqtx8545 squareroot 1.01E-18 -> 1.00E-9 Inexact Rounded -sqtx8546 squareroot 1.02E-18 -> 1.01E-9 Inexact Rounded +-- sqtx8545 squareroot 1.01E-18 -> 1.00E-9 Inexact Rounded +-- sqtx8546 squareroot 1.02E-18 -> 1.01E-9 Inexact Rounded -- result exactly representable with precision p, but not necessarily -- exactly representable as a subnormal; check the correct flags are raised precision: 2 -sqtx8547 squareroot 1.21E-20 -> 1E-10 Underflow Subnormal Inexact Rounded -sqtx8548 squareroot 1.44E-20 -> 1E-10 Underflow Subnormal Inexact Rounded -sqtx8549 squareroot 9.61E-20 -> 3E-10 Underflow Subnormal Inexact Rounded -sqtx8550 squareroot 8.836E-19 -> 9E-10 Underflow Subnormal Inexact Rounded -sqtx8551 squareroot 9.216E-19 -> 1.0E-9 Underflow Subnormal Inexact Rounded +-- sqtx8547 squareroot 1.21E-20 -> 1E-10 Underflow Subnormal Inexact Rounded +-- sqtx8548 squareroot 1.44E-20 -> 1E-10 Underflow Subnormal Inexact Rounded +-- sqtx8549 squareroot 9.61E-20 -> 3E-10 Underflow Subnormal Inexact Rounded +-- sqtx8550 squareroot 8.836E-19 -> 9E-10 Underflow Subnormal Inexact Rounded +-- sqtx8551 squareroot 9.216E-19 -> 1.0E-9 Underflow Subnormal Inexact Rounded precision: 3 -sqtx8552 squareroot 1.21E-22 -> 1E-11 Underflow Subnormal Inexact Rounded +-- sqtx8552 squareroot 1.21E-22 -> 1E-11 Underflow Subnormal Inexact Rounded sqtx8553 squareroot 1.21E-20 -> 1.1E-10 Subnormal -sqtx8554 squareroot 1.96E-22 -> 1E-11 Underflow Subnormal Inexact Rounded +-- sqtx8554 squareroot 1.96E-22 -> 1E-11 Underflow Subnormal Inexact Rounded sqtx8555 squareroot 1.96E-20 -> 1.4E-10 Subnormal -sqtx8556 squareroot 2.56E-22 -> 2E-11 Underflow Subnormal Inexact Rounded +-- sqtx8556 squareroot 2.56E-22 -> 2E-11 Underflow Subnormal Inexact Rounded sqtx8557 squareroot 4.00E-22 -> 2E-11 Subnormal Rounded -sqtx8558 squareroot 7.84E-22 -> 3E-11 Underflow Subnormal Inexact Rounded -sqtx8559 squareroot 9.801E-21 -> 1.0E-10 Underflow Subnormal Inexact Rounded +-- sqtx8558 squareroot 7.84E-22 -> 3E-11 Underflow Subnormal Inexact Rounded +-- sqtx8559 squareroot 9.801E-21 -> 1.0E-10 Underflow Subnormal Inexact Rounded sqtx8560 squareroot 9.801E-19 -> 9.9E-10 Subnormal -sqtx8561 squareroot 1.0201E-20 -> 1.0E-10 Underflow Subnormal Inexact Rounded -sqtx8562 squareroot 1.1025E-20 -> 1.0E-10 Underflow Subnormal Inexact Rounded -sqtx8563 squareroot 1.1236E-20 -> 1.1E-10 Underflow Subnormal Inexact Rounded -sqtx8564 squareroot 1.2996E-20 -> 1.1E-10 Underflow Subnormal Inexact Rounded -sqtx8565 squareroot 1.3225E-20 -> 1.2E-10 Underflow Subnormal Inexact Rounded +-- sqtx8561 squareroot 1.0201E-20 -> 1.0E-10 Underflow Subnormal Inexact Rounded +-- sqtx8562 squareroot 1.1025E-20 -> 1.0E-10 Underflow Subnormal Inexact Rounded +-- sqtx8563 squareroot 1.1236E-20 -> 1.1E-10 Underflow Subnormal Inexact Rounded +-- sqtx8564 squareroot 1.2996E-20 -> 1.1E-10 Underflow Subnormal Inexact Rounded +-- sqtx8565 squareroot 1.3225E-20 -> 1.2E-10 Underflow Subnormal Inexact Rounded -- A selection of subnormal results prone to double rounding errors precision: 2 -sqtx8566 squareroot 2.3E-21 -> 0E-10 Underflow Subnormal Inexact Rounded Clamped -sqtx8567 squareroot 2.4E-21 -> 0E-10 Underflow Subnormal Inexact Rounded Clamped -sqtx8568 squareroot 2.5E-21 -> 0E-10 Underflow Subnormal Inexact Rounded Clamped -sqtx8569 squareroot 2.6E-21 -> 1E-10 Underflow Subnormal Inexact Rounded -sqtx8570 squareroot 2.7E-21 -> 1E-10 Underflow Subnormal Inexact Rounded -sqtx8571 squareroot 2.8E-21 -> 1E-10 Underflow Subnormal Inexact Rounded -sqtx8572 squareroot 2.2E-20 -> 1E-10 Underflow Subnormal Inexact Rounded -sqtx8573 squareroot 2.3E-20 -> 2E-10 Underflow Subnormal Inexact Rounded -sqtx8574 squareroot 2.4E-20 -> 2E-10 Underflow Subnormal Inexact Rounded -sqtx8575 squareroot 6.2E-20 -> 2E-10 Underflow Subnormal Inexact Rounded -sqtx8576 squareroot 6.3E-20 -> 3E-10 Underflow Subnormal Inexact Rounded -sqtx8577 squareroot 6.4E-20 -> 3E-10 Underflow Subnormal Inexact Rounded -sqtx8578 squareroot 6.5E-20 -> 3E-10 Underflow Subnormal Inexact Rounded -sqtx8579 squareroot 1.2E-19 -> 3E-10 Underflow Subnormal Inexact Rounded -sqtx8580 squareroot 2.0E-19 -> 4E-10 Underflow Subnormal Inexact Rounded -sqtx8581 squareroot 4.2E-19 -> 6E-10 Underflow Subnormal Inexact Rounded -sqtx8582 squareroot 5.6E-19 -> 7E-10 Underflow Subnormal Inexact Rounded -sqtx8583 squareroot 5.7E-19 -> 8E-10 Underflow Subnormal Inexact Rounded -sqtx8584 squareroot 9.0E-19 -> 9E-10 Underflow Subnormal Inexact Rounded -sqtx8585 squareroot 9.1E-19 -> 1.0E-9 Underflow Subnormal Inexact Rounded +-- sqtx8566 squareroot 2.3E-21 -> 0E-10 Underflow Subnormal Inexact Rounded Clamped +-- sqtx8567 squareroot 2.4E-21 -> 0E-10 Underflow Subnormal Inexact Rounded Clamped +-- sqtx8568 squareroot 2.5E-21 -> 0E-10 Underflow Subnormal Inexact Rounded Clamped +-- sqtx8569 squareroot 2.6E-21 -> 1E-10 Underflow Subnormal Inexact Rounded +-- sqtx8570 squareroot 2.7E-21 -> 1E-10 Underflow Subnormal Inexact Rounded +-- sqtx8571 squareroot 2.8E-21 -> 1E-10 Underflow Subnormal Inexact Rounded +-- sqtx8572 squareroot 2.2E-20 -> 1E-10 Underflow Subnormal Inexact Rounded +-- sqtx8573 squareroot 2.3E-20 -> 2E-10 Underflow Subnormal Inexact Rounded +-- sqtx8574 squareroot 2.4E-20 -> 2E-10 Underflow Subnormal Inexact Rounded +-- sqtx8575 squareroot 6.2E-20 -> 2E-10 Underflow Subnormal Inexact Rounded +-- sqtx8576 squareroot 6.3E-20 -> 3E-10 Underflow Subnormal Inexact Rounded +-- sqtx8577 squareroot 6.4E-20 -> 3E-10 Underflow Subnormal Inexact Rounded +-- sqtx8578 squareroot 6.5E-20 -> 3E-10 Underflow Subnormal Inexact Rounded +-- sqtx8579 squareroot 1.2E-19 -> 3E-10 Underflow Subnormal Inexact Rounded +-- sqtx8580 squareroot 2.0E-19 -> 4E-10 Underflow Subnormal Inexact Rounded +-- sqtx8581 squareroot 4.2E-19 -> 6E-10 Underflow Subnormal Inexact Rounded +-- sqtx8582 squareroot 5.6E-19 -> 7E-10 Underflow Subnormal Inexact Rounded +-- sqtx8583 squareroot 5.7E-19 -> 8E-10 Underflow Subnormal Inexact Rounded +-- sqtx8584 squareroot 9.0E-19 -> 9E-10 Underflow Subnormal Inexact Rounded +-- sqtx8585 squareroot 9.1E-19 -> 1.0E-9 Underflow Subnormal Inexact Rounded precision: 3 -sqtx8586 squareroot 2.6E-23 -> 1E-11 Underflow Subnormal Inexact Rounded -sqtx8587 squareroot 2.22E-22 -> 1E-11 Underflow Subnormal Inexact Rounded -sqtx8588 squareroot 6.07E-22 -> 2E-11 Underflow Subnormal Inexact Rounded -sqtx8589 squareroot 6.25E-22 -> 2E-11 Underflow Subnormal Inexact Rounded -sqtx8590 squareroot 6.45E-22 -> 3E-11 Underflow Subnormal Inexact Rounded -sqtx8591 squareroot 6.50E-22 -> 3E-11 Underflow Subnormal Inexact Rounded -sqtx8592 squareroot 1.22E-21 -> 3E-11 Underflow Subnormal Inexact Rounded -sqtx8593 squareroot 1.24E-21 -> 4E-11 Underflow Subnormal Inexact Rounded -sqtx8594 squareroot 4.18E-21 -> 6E-11 Underflow Subnormal Inexact Rounded -sqtx8595 squareroot 7.19E-21 -> 8E-11 Underflow Subnormal Inexact Rounded -sqtx8596 squareroot 8.94E-21 -> 9E-11 Underflow Subnormal Inexact Rounded -sqtx8597 squareroot 1.81E-20 -> 1.3E-10 Underflow Subnormal Inexact Rounded -sqtx8598 squareroot 4.64E-20 -> 2.2E-10 Underflow Subnormal Inexact Rounded -sqtx8599 squareroot 5.06E-20 -> 2.2E-10 Underflow Subnormal Inexact Rounded -sqtx8600 squareroot 5.08E-20 -> 2.3E-10 Underflow Subnormal Inexact Rounded -sqtx8601 squareroot 7.00E-20 -> 2.6E-10 Underflow Subnormal Inexact Rounded -sqtx8602 squareroot 1.81E-19 -> 4.3E-10 Underflow Subnormal Inexact Rounded -sqtx8603 squareroot 6.64E-19 -> 8.1E-10 Underflow Subnormal Inexact Rounded -sqtx8604 squareroot 7.48E-19 -> 8.6E-10 Underflow Subnormal Inexact Rounded -sqtx8605 squareroot 9.91E-19 -> 1.00E-9 Underflow Subnormal Inexact Rounded +-- sqtx8586 squareroot 2.6E-23 -> 1E-11 Underflow Subnormal Inexact Rounded +-- sqtx8587 squareroot 2.22E-22 -> 1E-11 Underflow Subnormal Inexact Rounded +-- sqtx8588 squareroot 6.07E-22 -> 2E-11 Underflow Subnormal Inexact Rounded +-- sqtx8589 squareroot 6.25E-22 -> 2E-11 Underflow Subnormal Inexact Rounded +-- sqtx8590 squareroot 6.45E-22 -> 3E-11 Underflow Subnormal Inexact Rounded +-- sqtx8591 squareroot 6.50E-22 -> 3E-11 Underflow Subnormal Inexact Rounded +-- sqtx8592 squareroot 1.22E-21 -> 3E-11 Underflow Subnormal Inexact Rounded +-- sqtx8593 squareroot 1.24E-21 -> 4E-11 Underflow Subnormal Inexact Rounded +-- sqtx8594 squareroot 4.18E-21 -> 6E-11 Underflow Subnormal Inexact Rounded +-- sqtx8595 squareroot 7.19E-21 -> 8E-11 Underflow Subnormal Inexact Rounded +-- sqtx8596 squareroot 8.94E-21 -> 9E-11 Underflow Subnormal Inexact Rounded +-- sqtx8597 squareroot 1.81E-20 -> 1.3E-10 Underflow Subnormal Inexact Rounded +-- sqtx8598 squareroot 4.64E-20 -> 2.2E-10 Underflow Subnormal Inexact Rounded +-- sqtx8599 squareroot 5.06E-20 -> 2.2E-10 Underflow Subnormal Inexact Rounded +-- sqtx8600 squareroot 5.08E-20 -> 2.3E-10 Underflow Subnormal Inexact Rounded +-- sqtx8601 squareroot 7.00E-20 -> 2.6E-10 Underflow Subnormal Inexact Rounded +-- sqtx8602 squareroot 1.81E-19 -> 4.3E-10 Underflow Subnormal Inexact Rounded +-- sqtx8603 squareroot 6.64E-19 -> 8.1E-10 Underflow Subnormal Inexact Rounded +-- sqtx8604 squareroot 7.48E-19 -> 8.6E-10 Underflow Subnormal Inexact Rounded +-- sqtx8605 squareroot 9.91E-19 -> 1.00E-9 Underflow Subnormal Inexact Rounded precision: 4 -sqtx8606 squareroot 6.24E-24 -> 2E-12 Underflow Subnormal Inexact Rounded -sqtx8607 squareroot 7.162E-23 -> 8E-12 Underflow Subnormal Inexact Rounded -sqtx8608 squareroot 7.243E-23 -> 9E-12 Underflow Subnormal Inexact Rounded -sqtx8609 squareroot 8.961E-23 -> 9E-12 Underflow Subnormal Inexact Rounded -sqtx8610 squareroot 9.029E-23 -> 1.0E-11 Underflow Subnormal Inexact Rounded -sqtx8611 squareroot 4.624E-22 -> 2.2E-11 Underflow Subnormal Inexact Rounded -sqtx8612 squareroot 5.980E-22 -> 2.4E-11 Underflow Subnormal Inexact Rounded -sqtx8613 squareroot 6.507E-22 -> 2.6E-11 Underflow Subnormal Inexact Rounded -sqtx8614 squareroot 1.483E-21 -> 3.9E-11 Underflow Subnormal Inexact Rounded -sqtx8615 squareroot 3.903E-21 -> 6.2E-11 Underflow Subnormal Inexact Rounded -sqtx8616 squareroot 8.733E-21 -> 9.3E-11 Underflow Subnormal Inexact Rounded -sqtx8617 squareroot 1.781E-20 -> 1.33E-10 Underflow Subnormal Inexact Rounded -sqtx8618 squareroot 6.426E-20 -> 2.53E-10 Underflow Subnormal Inexact Rounded -sqtx8619 squareroot 7.102E-20 -> 2.66E-10 Underflow Subnormal Inexact Rounded -sqtx8620 squareroot 7.535E-20 -> 2.74E-10 Underflow Subnormal Inexact Rounded -sqtx8621 squareroot 9.892E-20 -> 3.15E-10 Underflow Subnormal Inexact Rounded -sqtx8622 squareroot 1.612E-19 -> 4.01E-10 Underflow Subnormal Inexact Rounded -sqtx8623 squareroot 1.726E-19 -> 4.15E-10 Underflow Subnormal Inexact Rounded -sqtx8624 squareroot 1.853E-19 -> 4.30E-10 Underflow Subnormal Inexact Rounded -sqtx8625 squareroot 4.245E-19 -> 6.52E-10 Underflow Subnormal Inexact Rounded +-- sqtx8606 squareroot 6.24E-24 -> 2E-12 Underflow Subnormal Inexact Rounded +-- sqtx8607 squareroot 7.162E-23 -> 8E-12 Underflow Subnormal Inexact Rounded +-- sqtx8608 squareroot 7.243E-23 -> 9E-12 Underflow Subnormal Inexact Rounded +-- sqtx8609 squareroot 8.961E-23 -> 9E-12 Underflow Subnormal Inexact Rounded +-- sqtx8610 squareroot 9.029E-23 -> 1.0E-11 Underflow Subnormal Inexact Rounded +-- sqtx8611 squareroot 4.624E-22 -> 2.2E-11 Underflow Subnormal Inexact Rounded +-- sqtx8612 squareroot 5.980E-22 -> 2.4E-11 Underflow Subnormal Inexact Rounded +-- sqtx8613 squareroot 6.507E-22 -> 2.6E-11 Underflow Subnormal Inexact Rounded +-- sqtx8614 squareroot 1.483E-21 -> 3.9E-11 Underflow Subnormal Inexact Rounded +-- sqtx8615 squareroot 3.903E-21 -> 6.2E-11 Underflow Subnormal Inexact Rounded +-- sqtx8616 squareroot 8.733E-21 -> 9.3E-11 Underflow Subnormal Inexact Rounded +-- sqtx8617 squareroot 1.781E-20 -> 1.33E-10 Underflow Subnormal Inexact Rounded +-- sqtx8618 squareroot 6.426E-20 -> 2.53E-10 Underflow Subnormal Inexact Rounded +-- sqtx8619 squareroot 7.102E-20 -> 2.66E-10 Underflow Subnormal Inexact Rounded +-- sqtx8620 squareroot 7.535E-20 -> 2.74E-10 Underflow Subnormal Inexact Rounded +-- sqtx8621 squareroot 9.892E-20 -> 3.15E-10 Underflow Subnormal Inexact Rounded +-- sqtx8622 squareroot 1.612E-19 -> 4.01E-10 Underflow Subnormal Inexact Rounded +-- sqtx8623 squareroot 1.726E-19 -> 4.15E-10 Underflow Subnormal Inexact Rounded +-- sqtx8624 squareroot 1.853E-19 -> 4.30E-10 Underflow Subnormal Inexact Rounded +-- sqtx8625 squareroot 4.245E-19 -> 6.52E-10 Underflow Subnormal Inexact Rounded -- clamping and overflow for large exponents precision: 1 sqtx8626 squareroot 1E+18 -> 1E+9 -sqtx8627 squareroot 1E+19 -> 3E+9 Inexact Rounded +-- sqtx8627 squareroot 1E+19 -> 3E+9 Inexact Rounded -- in this next one, intermediate result is 9486832980.505137996... -- so rounds down to 9 (not up to 10 which would cause Infinity overflow) -sqtx8628 squareroot 9E+19 -> 9E+9 Inexact Rounded -sqtx8629 squareroot 9.1E+19 -> Infinity Overflow Inexact Rounded -sqtx8630 squareroot 1E+20 -> Infinity Overflow Inexact Rounded +-- sqtx8628 squareroot 9E+19 -> 9E+9 Inexact Rounded +-- sqtx8629 squareroot 9.1E+19 -> Infinity Overflow Inexact Rounded +-- sqtx8630 squareroot 1E+20 -> Infinity Overflow Inexact Rounded precision: 2 sqtx8631 squareroot 1E+18 -> 1E+9 sqtx8632 squareroot 1.0E+18 -> 1.0E+9 sqtx8633 squareroot 1.00E+18 -> 1.0E+9 sqtx8634 squareroot 1.000E+18 -> 1.0E+9 Rounded -sqtx8635 squareroot 1E+20 -> Infinity Overflow Inexact Rounded +-- sqtx8635 squareroot 1E+20 -> Infinity Overflow Inexact Rounded clamp: 1 sqtx8636 squareroot 1E+18 -> 1.0E+9 Clamped sqtx8637 squareroot 1.0E+18 -> 1.0E+9 -sqtx8638 squareroot 1E+20 -> Infinity Overflow Inexact Rounded +-- sqtx8638 squareroot 1E+20 -> Infinity Overflow Inexact Rounded clamp: 0 precision: 6 sqtx8639 squareroot 1E+18 -> 1E+9 sqtx8640 squareroot 1.0000000000E+18 -> 1.00000E+9 sqtx8641 squareroot 1.00000000000E+18 -> 1.00000E+9 Rounded -sqtx8642 squareroot 1E+20 -> Infinity Overflow Inexact Rounded +-- sqtx8642 squareroot 1E+20 -> Infinity Overflow Inexact Rounded clamp: 1 sqtx8643 squareroot 1E+8 -> 1E+4 sqtx8644 squareroot 1E+10 -> 1.0E+5 Clamped @@ -3704,7 +3704,7 @@ sqtx8649 squareroot 1.000E+12 -> 1.00E+6 sqtx8650 squareroot 1E+18 -> 1.00000E+9 Clamped sqtx8651 squareroot 1.00000000E+18 -> 1.00000E+9 Clamped sqtx8652 squareroot 1.000000000E+18 -> 1.00000E+9 -sqtx8653 squareroot 1E+20 -> Infinity Overflow Inexact Rounded +-- sqtx8653 squareroot 1E+20 -> Infinity Overflow Inexact Rounded clamp: 0 -- The following example causes a TypeError in Python 2.5.1 @@ -3718,36 +3718,36 @@ rounding: half_even precision: 5 maxexponent: 999 minexponent: -999 -sqtx8700 squareroot 2.8073E-2000 -> 1.675E-1000 Underflow Subnormal Inexact Rounded -sqtx8701 squareroot 2.8883E-2000 -> 1.699E-1000 Underflow Subnormal Inexact Rounded -sqtx8702 squareroot 3.1524E-2000 -> 1.775E-1000 Underflow Subnormal Inexact Rounded -sqtx8703 squareroot 3.2382E-2000 -> 1.799E-1000 Underflow Subnormal Inexact Rounded -sqtx8704 squareroot 3.5175E-2000 -> 1.875E-1000 Underflow Subnormal Inexact Rounded -sqtx8705 squareroot 3.6081E-2000 -> 1.899E-1000 Underflow Subnormal Inexact Rounded -sqtx8706 squareroot 3.9026E-2000 -> 1.975E-1000 Underflow Subnormal Inexact Rounded -sqtx8707 squareroot 3.9980E-2000 -> 1.999E-1000 Underflow Subnormal Inexact Rounded -sqtx8708 squareroot 4.3077E-2000 -> 2.075E-1000 Underflow Subnormal Inexact Rounded -sqtx8709 squareroot 4.4079E-2000 -> 2.099E-1000 Underflow Subnormal Inexact Rounded -sqtx8710 squareroot 4.7328E-2000 -> 2.175E-1000 Underflow Subnormal Inexact Rounded -sqtx8711 squareroot 4.8378E-2000 -> 2.199E-1000 Underflow Subnormal Inexact Rounded -sqtx8712 squareroot 5.1779E-2000 -> 2.275E-1000 Underflow Subnormal Inexact Rounded -sqtx8713 squareroot 5.2877E-2000 -> 2.299E-1000 Underflow Subnormal Inexact Rounded -sqtx8714 squareroot 5.6430E-2000 -> 2.375E-1000 Underflow Subnormal Inexact Rounded -sqtx8715 squareroot 5.7576E-2000 -> 2.399E-1000 Underflow Subnormal Inexact Rounded -sqtx8716 squareroot 6.1281E-2000 -> 2.475E-1000 Underflow Subnormal Inexact Rounded -sqtx8717 squareroot 6.2475E-2000 -> 2.499E-1000 Underflow Subnormal Inexact Rounded -sqtx8718 squareroot 6.6332E-2000 -> 2.575E-1000 Underflow Subnormal Inexact Rounded -sqtx8719 squareroot 6.7574E-2000 -> 2.599E-1000 Underflow Subnormal Inexact Rounded -sqtx8720 squareroot 7.1583E-2000 -> 2.675E-1000 Underflow Subnormal Inexact Rounded -sqtx8721 squareroot 7.2873E-2000 -> 2.699E-1000 Underflow Subnormal Inexact Rounded -sqtx8722 squareroot 7.7034E-2000 -> 2.775E-1000 Underflow Subnormal Inexact Rounded -sqtx8723 squareroot 7.8372E-2000 -> 2.799E-1000 Underflow Subnormal Inexact Rounded -sqtx8724 squareroot 8.2685E-2000 -> 2.875E-1000 Underflow Subnormal Inexact Rounded -sqtx8725 squareroot 8.4071E-2000 -> 2.899E-1000 Underflow Subnormal Inexact Rounded -sqtx8726 squareroot 8.8536E-2000 -> 2.975E-1000 Underflow Subnormal Inexact Rounded -sqtx8727 squareroot 8.9970E-2000 -> 2.999E-1000 Underflow Subnormal Inexact Rounded -sqtx8728 squareroot 9.4587E-2000 -> 3.075E-1000 Underflow Subnormal Inexact Rounded -sqtx8729 squareroot 9.6069E-2000 -> 3.099E-1000 Underflow Subnormal Inexact Rounded +-- sqtx8700 squareroot 2.8073E-2000 -> 1.675E-1000 Underflow Subnormal Inexact Rounded +-- sqtx8701 squareroot 2.8883E-2000 -> 1.699E-1000 Underflow Subnormal Inexact Rounded +-- sqtx8702 squareroot 3.1524E-2000 -> 1.775E-1000 Underflow Subnormal Inexact Rounded +-- sqtx8703 squareroot 3.2382E-2000 -> 1.799E-1000 Underflow Subnormal Inexact Rounded +-- sqtx8704 squareroot 3.5175E-2000 -> 1.875E-1000 Underflow Subnormal Inexact Rounded +-- sqtx8705 squareroot 3.6081E-2000 -> 1.899E-1000 Underflow Subnormal Inexact Rounded +-- sqtx8706 squareroot 3.9026E-2000 -> 1.975E-1000 Underflow Subnormal Inexact Rounded +-- sqtx8707 squareroot 3.9980E-2000 -> 1.999E-1000 Underflow Subnormal Inexact Rounded +-- sqtx8708 squareroot 4.3077E-2000 -> 2.075E-1000 Underflow Subnormal Inexact Rounded +-- sqtx8709 squareroot 4.4079E-2000 -> 2.099E-1000 Underflow Subnormal Inexact Rounded +-- sqtx8710 squareroot 4.7328E-2000 -> 2.175E-1000 Underflow Subnormal Inexact Rounded +-- sqtx8711 squareroot 4.8378E-2000 -> 2.199E-1000 Underflow Subnormal Inexact Rounded +-- sqtx8712 squareroot 5.1779E-2000 -> 2.275E-1000 Underflow Subnormal Inexact Rounded +-- sqtx8713 squareroot 5.2877E-2000 -> 2.299E-1000 Underflow Subnormal Inexact Rounded +-- sqtx8714 squareroot 5.6430E-2000 -> 2.375E-1000 Underflow Subnormal Inexact Rounded +-- sqtx8715 squareroot 5.7576E-2000 -> 2.399E-1000 Underflow Subnormal Inexact Rounded +-- sqtx8716 squareroot 6.1281E-2000 -> 2.475E-1000 Underflow Subnormal Inexact Rounded +-- sqtx8717 squareroot 6.2475E-2000 -> 2.499E-1000 Underflow Subnormal Inexact Rounded +-- sqtx8718 squareroot 6.6332E-2000 -> 2.575E-1000 Underflow Subnormal Inexact Rounded +-- sqtx8719 squareroot 6.7574E-2000 -> 2.599E-1000 Underflow Subnormal Inexact Rounded +-- sqtx8720 squareroot 7.1583E-2000 -> 2.675E-1000 Underflow Subnormal Inexact Rounded +-- sqtx8721 squareroot 7.2873E-2000 -> 2.699E-1000 Underflow Subnormal Inexact Rounded +-- sqtx8722 squareroot 7.7034E-2000 -> 2.775E-1000 Underflow Subnormal Inexact Rounded +-- sqtx8723 squareroot 7.8372E-2000 -> 2.799E-1000 Underflow Subnormal Inexact Rounded +-- sqtx8724 squareroot 8.2685E-2000 -> 2.875E-1000 Underflow Subnormal Inexact Rounded +-- sqtx8725 squareroot 8.4071E-2000 -> 2.899E-1000 Underflow Subnormal Inexact Rounded +-- sqtx8726 squareroot 8.8536E-2000 -> 2.975E-1000 Underflow Subnormal Inexact Rounded +-- sqtx8727 squareroot 8.9970E-2000 -> 2.999E-1000 Underflow Subnormal Inexact Rounded +-- sqtx8728 squareroot 9.4587E-2000 -> 3.075E-1000 Underflow Subnormal Inexact Rounded +-- sqtx8729 squareroot 9.6069E-2000 -> 3.099E-1000 Underflow Subnormal Inexact Rounded -- (End of Mark Dickinson's testcases.) @@ -3755,7 +3755,7 @@ sqtx8729 squareroot 9.6069E-2000 -> 3.099E-1000 Underflow Subnormal Inexact Roun maxexponent: 9 minexponent: -9 precision: 2 -sqtx9000 squareroot 9980.01 -> 1.0E+2 Inexact Rounded +-- sqtx9000 squareroot 9980.01 -> 1.0E+2 Inexact Rounded precision: 3 sqtx9001 squareroot 9980.01 -> 99.9 precision: 4 @@ -3767,9 +3767,9 @@ sqtx9003 squareroot 11025 -> 105 precision: 3 sqtx9004 squareroot 11025 -> 105 precision: 2 -sqtx9005 squareroot 11025 -> 1.0E+2 Inexact Rounded +-- sqtx9005 squareroot 11025 -> 1.0E+2 Inexact Rounded precision: 1 -sqtx9006 squareroot 11025 -> 1E+2 Inexact Rounded +-- sqtx9006 squareroot 11025 -> 1E+2 Inexact Rounded -- an interesting case precision: 7 @@ -3815,17 +3815,17 @@ sqtx9045 squareroot 1 -> 1.00000 Clamped maxexponent: 999 minexponent: -999 precision: 16 -sqtx9046 squareroot 10 -> 3.162277660168379 inexact rounded +-- sqtx9046 squareroot 10 -> 3.162277660168379 inexact rounded sqtx9047 squareroot 10E-1 -> 1.0 -sqtx9048 squareroot 10E-2 -> 0.3162277660168379 inexact rounded +-- sqtx9048 squareroot 10E-2 -> 0.3162277660168379 inexact rounded sqtx9049 squareroot 10E-3 -> 0.10 --- High-precision exact and inexact +-- -- High-precision exact and inexact maxexponent: 999 minexponent: -999 precision: 400 -sqtx9050 squareroot 2 -> 1.414213562373095048801688724209698078569671875376948073176679737990732478462107038850387534327641572735013846230912297024924836055850737212644121497099935831413222665927505592755799950501152782060571470109559971605970274534596862014728517418640889198609552329230484308714321450839762603627995251407989687253396546331808829640620615258352395054745750287759961729835575220337531857011354374603408498847 Inexact Rounded +-- sqtx9050 squareroot 2 -> 1.414213562373095048801688724209698078569671875376948073176679737990732478462107038850387534327641572735013846230912297024924836055850737212644121497099935831413222665927505592755799950501152782060571470109559971605970274534596862014728517418640889198609552329230484308714321450839762603627995251407989687253396546331808829640620615258352395054745750287759961729835575220337531857011354374603408498847 Inexact Rounded sqtx9051 squareroot 1089 -> 33 sqtx9052 squareroot 10.89 -> 3.3 diff --git a/uint128.go b/uint128.go index c50648a..6425465 100644 --- a/uint128.go +++ b/uint128.go @@ -121,34 +121,6 @@ func (a *uint128T) set(hi, lo uint64) *uint128T { return a } -// Assumes a < 1<<125 -func (a *uint128T) sqrt() uint64 { - if a.hi == 0 { - return sqrtu64(a.lo) - } - for x := uint64(1) << (a.bitLen()/2 + 1); ; { - var t uint128T - y := (t.div64(a, x).lo + x) >> 1 - if y >= x { - return x - } - x = y - } - // if a.hi == 0 { - // return uint64(u64sqrt(a.lo)) - // } - // shift := bits.LeadingZeros64(a.hi) / 2 - // n := a.hi<>uint64(64-(2*shift)) - // s := u64sqrt(n) - // var t uint128T - // y := (t.div64(a, x).lo + x) >> 1 - // if y >= x { - // return x - // } - // x = y - -} - func sqrtu64(n uint64) uint64 { const maxu32 = 1<<32 - 1 switch { @@ -159,8 +131,8 @@ func sqrtu64(n uint64) uint64 { } // Shift up as far as possible, but must be an even amount. - shift := bits.LeadingZeros64(n) / 2 - n <<= 2 * shift + halfshift := bits.LeadingZeros64(n) / 2 + n <<= 2 * halfshift s := sqrtu16(uint16(n >> (64 - 16))) x := uint64(s) << (32 - 16) @@ -168,7 +140,7 @@ func sqrtu64(n uint64) uint64 { // Two iterations suffice. x = (x + n/x) >> 1 // Undo shift in second iteration. Only need 1/2-shift because it's the √. - return (x + n/x) >> (1 + shift) + return (x + n/x) >> (1 + halfshift) } const ( diff --git a/uint128_test.go b/uint128_test.go index 4f0112d..2397a27 100644 --- a/uint128_test.go +++ b/uint128_test.go @@ -22,23 +22,6 @@ func TestUint128Shl(t *testing.T) { test(uint128T{0, 3}, uint128T{3, 42}, 64) } -func TestUint128Sqrt(t *testing.T) { - t.Parallel() - - test := func(expected uint64, original uint128T) { - t.Helper() - equal(t, expected, original.sqrt()) - } - test(0, uint128T{}) - test(1, uint128T{1, 0}) - test(1, uint128T{2, 0}) - test(2, uint128T{4, 0}) - test(2, uint128T{8, 0}) - test(3, uint128T{9, 0}) - test(uint64(1<<32), uint128T{0, 1}) - test(uint64(2<<32), uint128T{0, 4}) -} - func TestSqrtu64(t *testing.T) { t.Parallel() diff --git a/util_test.go b/util_test.go index 84217b7..581949f 100644 --- a/util_test.go +++ b/util_test.go @@ -59,7 +59,7 @@ func equal[T comparable](t *testing.T, a, b T) pass { func equalD64(t *testing.T, expected, actual Decimal64) pass { t.Helper() - return equal(t, expected.bits, actual.bits) + return equal(t, expected.String(), actual.String()) } func isnil(t *testing.T, a any) pass { From c75f466002f49cf9074f1755a8b6087ab2cbc532 Mon Sep 17 00:00:00 2001 From: Marcelo Cantos <13160581+anzdaddy@users.noreply.github.com> Date: Sat, 23 Nov 2024 14:26:53 +1100 Subject: [PATCH 38/68] wip --- decimal64.go | 65 ++++++++++++++++++++++++--------------- decimal64_test.go | 2 +- decimal64decParts.go | 21 +++++-------- decimal64decParts_test.go | 8 ++--- decimal64math.go | 59 ++++++++++++++++------------------- decimal64math_test.go | 6 ++-- uint128.go | 49 +++++++++++------------------ util_test.go | 4 +-- 8 files changed, 102 insertions(+), 112 deletions(-) diff --git a/decimal64.go b/decimal64.go index 8d5eeca..2335986 100644 --- a/decimal64.go +++ b/decimal64.go @@ -92,7 +92,7 @@ type Context64 struct { // Signal bool } -var tenToThe = [...]uint64{ +var tenToThe = [32]uint64{ // pad for efficient indexing 1, 10, 100, @@ -446,12 +446,10 @@ func (d Decimal64) Signbit() bool { } func (d Decimal64) ScaleB(e Decimal64) Decimal64 { - var dp decParts - dp.unpack(d) - var ep decParts - ep.unpack(e) - if r, nan := checkNan(&dp, &ep); nan { - return r + dp := decParts{original: d} + ep := decParts{original: e} + if nan := checkNanV3(&dp, &ep); nan != nil { + return nan.original } if !dp.fl.normal() || dp.isZero() { @@ -517,14 +515,14 @@ func scaleBInt(dp *decParts, i int) Decimal64 { func (d Decimal64) Class() string { var dp decParts dp.unpack(d) - if dp.isSNaN() { + if dp.fl == flSNaN { return "sNaN" - } else if dp.isNaN() { + } else if dp.fl.nan() { return "NaN" } switch { - case dp.isInf(): + case dp.fl == flInf: return "+Infinity-Infinity"[9*dp.sign : 9*(dp.sign+1)] case dp.isZero(): return "+Zero-Zero"[5*dp.sign : 5*(dp.sign+1)] @@ -534,14 +532,13 @@ func (d Decimal64) Class() string { return "+Normal-Normal"[7*dp.sign : 7*(dp.sign+1)] } -// numDecimalDigits returns the magnitude (number of digits) of a uint64. -func numDecimalDigits(n uint64) int { - numBits := 64 - bits.LeadingZeros64(n) - numDigits := numBits * 3 / 10 - if n < tenToThe[numDigits] { - return numDigits +// numDecimalDigitsU64 returns the magnitude (number of digits) of a uint64. +func numDecimalDigitsU64(n uint64) int { + numDigits := bits.Len64(n) * 77 / 256 // ~ 3/10 + if n >= tenToThe[uint(numDigits)%uint(len(tenToThe))] { + numDigits++ } - return numDigits + 1 + return numDigits } // checkNan returns the decimal NaN that is to be propogated and true else first decimal and false @@ -563,19 +560,37 @@ func checkNan(d, e *decParts) (Decimal64, bool) { // checkNan returns the decimal NaN that is to be propogated and true else first decimal and false func checkNanV2(fld, fle flavor, d, e Decimal64) (Decimal64, bool) { - if fld == flSNaN { - return d, true + if (fld|fle)&flNaN == 0 { + return d, false } - if fle == flSNaN { + switch { + case fld == flSNaN: + return d, true + case fle == flSNaN: return e, true - } - if fld == flQNaN { + case fld == flQNaN: return d, true - } - if fle == flQNaN { + default: return e, true } - return d, false +} + +func checkNanV3(dp, ep *decParts) *decParts { + dp.fl = dp.original.flavor() + ep.fl = ep.original.flavor() + switch { + case dp.fl == flSNaN: + return dp + case ep.fl == flSNaN: + return ep + case dp.fl == flQNaN: + return dp + case ep.fl == flQNaN: + return ep + } + dp.unpackV3() + ep.unpackV3() + return nil } // checkNan3 returns the decimal NaN that is to be propogated and true else first decimal and false diff --git a/decimal64_test.go b/decimal64_test.go index 19370e2..692d492 100644 --- a/decimal64_test.go +++ b/decimal64_test.go @@ -320,7 +320,7 @@ func TestNumDecimalDigits(t *testing.T) { for i, num := range tenToThe { for j := uint64(1); j < 10 && i < 19; j++ { - equal(t, i+1, numDecimalDigits(num*j)) + equal(t, i+1, numDecimalDigitsU64(num*j)) } } } diff --git a/decimal64decParts.go b/decimal64decParts.go index 8624105..619582e 100644 --- a/decimal64decParts.go +++ b/decimal64decParts.go @@ -69,18 +69,6 @@ func (dp *decParts) isZero() bool { return dp.significand == uint128T{} && dp.fl.normal() } -func (dp *decParts) isInf() bool { - return dp.fl == flInf -} - -func (dp *decParts) isNaN() bool { - return dp.fl&(flQNaN|flSNaN) != 0 -} - -func (dp *decParts) isSNaN() bool { - return dp.fl == flSNaN -} - func (dp *decParts) isSubnormal() bool { return (dp.significand != uint128T{}) && dp.significand.lo < decimal64Base && dp.fl.normal() } @@ -148,9 +136,14 @@ func (dp *decParts) unpack(d Decimal64) { func (dp *decParts) unpackV2(d Decimal64, fl flavor) { dp.original = d - dp.sign = int(d.bits >> 63) dp.fl = fl - switch fl { + dp.unpackV3() +} + +func (dp *decParts) unpackV3() { + d := dp.original + dp.sign = int(d.bits >> 63) + switch dp.fl { case flNormal53: // s EEeeeeeeee (0)ttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt // EE ∈ {00, 01, 10} diff --git a/decimal64decParts_test.go b/decimal64decParts_test.go index 9752532..46d42ae 100644 --- a/decimal64decParts_test.go +++ b/decimal64decParts_test.go @@ -7,10 +7,10 @@ func TestPartsInf(t *testing.T) { var a decParts a.unpack(Infinity64) - check(t, a.isInf()) + check(t, a.fl == flInf) a.unpack(NegInfinity64) - check(t, a.isInf()) + check(t, a.fl == flInf) } func TestIsNaN(t *testing.T) { @@ -18,10 +18,10 @@ func TestIsNaN(t *testing.T) { var a decParts a.unpack(Zero64) - check(t, !a.isNaN()) + check(t, !a.fl.nan()) a.unpack(SNaN64) - check(t, a.isSNaN()) + check(t, a.fl == flSNaN) } func TestPartsSubnormal(t *testing.T) { diff --git a/decimal64math.go b/decimal64math.go index f24e298..3cdf4e7 100644 --- a/decimal64math.go +++ b/decimal64math.go @@ -10,7 +10,7 @@ func (d Decimal64) Equal(e Decimal64) bool { // Abs computes ||d||. func (d Decimal64) Abs() Decimal64 { - if d.IsNaN() { + if d.flavor().nan() { return d } return new64(^neg64 & uint64(d.bits)) @@ -53,11 +53,9 @@ func (d Decimal64) Quo(e Decimal64) Decimal64 { // 0 if d == e (incl. -0 == 0, -Inf == -Inf, and +Inf == +Inf) // +1 if d > e func (d Decimal64) Cmp(e Decimal64) int { - var dp decParts - dp.unpack(d) - var ep decParts - ep.unpack(e) - if _, isNan := checkNan(&dp, &ep); isNan { + dp := decParts{original: d} + ep := decParts{original: e} + if checkNanV3(&dp, &ep) != nil { return -2 } return cmp(&dp, &ep) @@ -66,12 +64,10 @@ func (d Decimal64) Cmp(e Decimal64) int { // Cmp64 returns the same output as Cmp as a Decimal64, unless d or e is NaN, in // which case it returns a corresponding NaN result. func (d Decimal64) Cmp64(e Decimal64) Decimal64 { - var dp decParts - dp.unpack(d) - var ep decParts - ep.unpack(e) - if n, isNan := checkNan(&dp, &ep); isNan { - return n + dp := decParts{original: d} + ep := decParts{original: e} + if nan := checkNanV3(&dp, &ep); nan != nil { + return nan.original } switch cmp(&dp, &ep) { case -1: @@ -105,13 +101,12 @@ func (d Decimal64) Max(e Decimal64) Decimal64 { // Min returns the lower of d and e. func (d Decimal64) min(e Decimal64, sign int) Decimal64 { - var dp decParts + var dp, ep decParts dp.unpack(d) - var ep decParts ep.unpack(e) - dnan := dp.isNaN() - enan := ep.isNaN() + dnan := dp.fl.nan() + enan := ep.fl.nan() switch { case !dnan && !enan: // Fast path for non-NaNs. @@ -120,9 +115,9 @@ func (d Decimal64) min(e Decimal64, sign int) Decimal64 { } return e - case dp.isSNaN(): + case dp.fl == flSNaN: return d.quiet() - case ep.isSNaN(): + case ep.fl == flSNaN: return e.quiet() case !enan: @@ -149,8 +144,8 @@ func (d Decimal64) minMag(e Decimal64, sign int) Decimal64 { var ep decParts ep.unpack(e.Abs()) - dnan := dp.isNaN() - enan := ep.isNaN() + dnan := dp.fl.nan() + enan := ep.fl.nan() switch { case !dnan && !enan: // Fast path for non-NaNs. @@ -165,9 +160,9 @@ func (d Decimal64) minMag(e Decimal64, sign int) Decimal64 { } return e } - case dp.isSNaN(): + case dp.fl == flSNaN: return d.quiet() - case ep.isSNaN(): + case ep.fl == flSNaN: return e.quiet() case !enan: return e @@ -178,7 +173,7 @@ func (d Decimal64) minMag(e Decimal64, sign int) Decimal64 { // Neg computes -d. func (d Decimal64) Neg() Decimal64 { - if d.IsNaN() { + if d.flavor().nan() { return d } return new64(neg64 ^ d.bits) @@ -186,12 +181,13 @@ func (d Decimal64) Neg() Decimal64 { // Logb return the integral log10 of d. func (d Decimal64) Logb() Decimal64 { + fl := d.flavor() switch { - case d.IsNaN(): + case fl.nan(): return d case d.IsZero(): return NegInfinity64 - case d.IsInf(): + case fl == flInf: return Infinity64 default: var dp decParts @@ -315,13 +311,14 @@ func (d Decimal64) Sqrt() Decimal64 { // Add computes d + e func (ctx Context64) Add(d, e Decimal64) Decimal64 { - var dp decParts - dp.unpack(d) - var ep decParts - ep.unpack(e) - if nan, isNan := checkNan(&dp, &ep); isNan { + fld := d.flavor() + fle := e.flavor() + if nan, isNan := checkNanV2(fld, fle, d, e); isNan { return nan } + var dp, ep decParts + dp.unpackV2(d, fld) + ep.unpackV2(e, fle) if dp.fl == flInf || ep.fl == flInf { if dp.fl != flInf { return e @@ -336,8 +333,6 @@ func (ctx Context64) Add(d, e Decimal64) Decimal64 { } else if ep.significand.lo == 0 { return d } - ep.removeZeros() - dp.removeZeros() sep := dp.separation(&ep) if sep < 0 { diff --git a/decimal64math_test.go b/decimal64math_test.go index 366aa5b..42aaa26 100644 --- a/decimal64math_test.go +++ b/decimal64math_test.go @@ -275,10 +275,10 @@ func TestDecimal64QuoInf(t *testing.T) { func TestDecimal64MulPo10(t *testing.T) { t.Parallel() - for i, u := range tenToThe128 { - for j, v := range tenToThe128 { + for i, u := range tenToThe128[:39] { + for j, v := range tenToThe128[:39] { k := i + j - if !(k < len(tenToThe128)) { + if !(k < 39) { continue } w := tenToThe128[k] diff --git a/uint128.go b/uint128.go index 6425465..0f39f81 100644 --- a/uint128.go +++ b/uint128.go @@ -12,19 +12,19 @@ type uint128T struct { func (a *uint128T) numDecimalDigits() int { if a.hi == 0 { - return numDecimalDigits(a.lo) + return numDecimalDigitsU64(a.lo) } - bitSize := 129 - uint(bits.LeadingZeros64(a.hi)) - numDigitsEst := int(bitSize * 3 / 10) - if a.lt(&tenToThe128[numDigitsEst]) { - return numDigitsEst + bitSize := 65 + bits.Len64(a.hi) + numDigitsEst := bitSize * 77 / 256 + if !a.lt(&tenToThe128[uint(numDigitsEst)%uint(len(tenToThe128))]) { + numDigitsEst++ } - return numDigitsEst + 1 + return numDigitsEst } -var tenToThe128 = func() [39]uint128T { - var ans [39]uint128T - for i := range ans { +var tenToThe128 = func() [64]uint128T { + var ans [64]uint128T + for i := range ans[:39] { ans[i].umul64(tenToThe[i/2], tenToThe[(i+1)/2]) } return ans @@ -49,19 +49,14 @@ func (a *uint128T) sub(x, y *uint128T) *uint128T { return a } -func (a *uint128T) bitLen() uint { - return 128 - a.leadingZeros() -} - -func (a *uint128T) div64(x *uint128T, d uint64) *uint128T { - a.divrem64(x, d) - return a -} - func (a *uint128T) divrem64(x *uint128T, d uint64) uint64 { var r uint64 - a.hi, r = bits.Div64(0, x.hi, d) - a.lo, r = bits.Div64(r, x.lo, d) + if a.hi == 0 { + a.lo, r = x.lo/d, x.lo%d + } else { + a.hi, r = bits.Div64(0, x.hi, d) + a.lo, r = bits.Div64(r, x.lo, d) + } return r } @@ -71,19 +66,11 @@ func (a *uint128T) divbase(x *uint128T) *uint128T { return a.divc(x, 113, 0x901d // div10base divides a by 10*[decimal64Base]. func (a *uint128T) div10base(x *uint128T) *uint128T { return a.divc(x, 117, 0xe69594bec44de15b) } -// divc divides a by n, expressed as a power-of-two index and 1<>43 // (hi, lo) >> 43 q, _ := bits.Mul64(m, rdenom) - return a.set(0, q>>(index-(43+64))+1) -} - -func (a *uint128T) leadingZeros() uint { - if a.hi > 0 { - return uint(bits.LeadingZeros64(a.hi)) - } - return uint(64 + bits.LeadingZeros64(a.lo)) + return a.set(0, q>>(po2-(43+64))+1) } func (a *uint128T) lt(b *uint128T) bool { diff --git a/util_test.go b/util_test.go index 581949f..ac2feb5 100644 --- a/util_test.go +++ b/util_test.go @@ -118,9 +118,9 @@ func panics(t *testing.T, f func()) (b pass) { func TestUmul64_po10(t *testing.T) { t.Parallel() - for i, u := range tenToThe128 { + for i, u := range tenToThe128[:39] { if u.hi == 0 { - for j, v := range tenToThe128 { + for j, v := range tenToThe128[:39] { if v.hi == 0 { e := tenToThe128[i+j] var a uint128T From 5a64b1186396178b542d0e0c2e8d43941140534d Mon Sep 17 00:00:00 2001 From: Marcelo Cantos <13160581+anzdaddy@users.noreply.github.com> Date: Sat, 23 Nov 2024 14:40:30 +1100 Subject: [PATCH 39/68] wip --- decimal64.go | 52 ++++++++------------------------------------ decimal64decParts.go | 10 +++------ decimal64math.go | 47 ++++++++++++++++----------------------- 3 files changed, 31 insertions(+), 78 deletions(-) diff --git a/decimal64.go b/decimal64.go index 2335986..b5db4cb 100644 --- a/decimal64.go +++ b/decimal64.go @@ -448,8 +448,8 @@ func (d Decimal64) Signbit() bool { func (d Decimal64) ScaleB(e Decimal64) Decimal64 { dp := decParts{original: d} ep := decParts{original: e} - if nan := checkNanV3(&dp, &ep); nan != nil { - return nan.original + if nan := checkNan(&dp, &ep); nan != nil { + return *nan } if !dp.fl.normal() || dp.isZero() { @@ -541,55 +541,21 @@ func numDecimalDigitsU64(n uint64) int { return numDigits } -// checkNan returns the decimal NaN that is to be propogated and true else first decimal and false -func checkNan(d, e *decParts) (Decimal64, bool) { - if d.fl == flSNaN { - return d.original, true - } - if e.fl == flSNaN { - return e.original, true - } - if d.fl == flQNaN { - return d.original, true - } - if e.fl == flQNaN { - return e.original, true - } - return d.original, false -} - -// checkNan returns the decimal NaN that is to be propogated and true else first decimal and false -func checkNanV2(fld, fle flavor, d, e Decimal64) (Decimal64, bool) { - if (fld|fle)&flNaN == 0 { - return d, false - } - switch { - case fld == flSNaN: - return d, true - case fle == flSNaN: - return e, true - case fld == flQNaN: - return d, true - default: - return e, true - } -} - -func checkNanV3(dp, ep *decParts) *decParts { +func checkNan(dp, ep *decParts) *Decimal64 { dp.fl = dp.original.flavor() ep.fl = ep.original.flavor() switch { case dp.fl == flSNaN: - return dp + return &dp.original case ep.fl == flSNaN: - return ep + return &ep.original case dp.fl == flQNaN: - return dp + return &dp.original case ep.fl == flQNaN: - return ep + return &ep.original } - dp.unpackV3() - ep.unpackV3() + dp.unpackV2() + ep.unpackV2() return nil } diff --git a/decimal64decParts.go b/decimal64decParts.go index 619582e..51826e4 100644 --- a/decimal64decParts.go +++ b/decimal64decParts.go @@ -131,16 +131,12 @@ func (dp *decParts) rescale(targetExp int) (rndStatus discardedDigit) { } func (dp *decParts) unpack(d Decimal64) { - dp.unpackV2(d, d.flavor()) -} - -func (dp *decParts) unpackV2(d Decimal64, fl flavor) { dp.original = d - dp.fl = fl - dp.unpackV3() + dp.fl = d.flavor() + dp.unpackV2() } -func (dp *decParts) unpackV3() { +func (dp *decParts) unpackV2() { d := dp.original dp.sign = int(d.bits >> 63) switch dp.fl { diff --git a/decimal64math.go b/decimal64math.go index 3cdf4e7..849bfee 100644 --- a/decimal64math.go +++ b/decimal64math.go @@ -55,7 +55,7 @@ func (d Decimal64) Quo(e Decimal64) Decimal64 { func (d Decimal64) Cmp(e Decimal64) int { dp := decParts{original: d} ep := decParts{original: e} - if checkNanV3(&dp, &ep) != nil { + if checkNan(&dp, &ep) != nil { return -2 } return cmp(&dp, &ep) @@ -66,8 +66,8 @@ func (d Decimal64) Cmp(e Decimal64) int { func (d Decimal64) Cmp64(e Decimal64) Decimal64 { dp := decParts{original: d} ep := decParts{original: e} - if nan := checkNanV3(&dp, &ep); nan != nil { - return nan.original + if nan := checkNan(&dp, &ep); nan != nil { + return *nan } switch cmp(&dp, &ep) { case -1: @@ -211,12 +211,10 @@ func (d Decimal64) CopySign(e Decimal64) Decimal64 { // Quo computes d / e. // Rounding rules are applied as per the context. func (ctx Context64) Quo(d, e Decimal64) Decimal64 { - var dp decParts - dp.unpack(d) - var ep decParts - ep.unpack(e) - if nan, isNan := checkNan(&dp, &ep); isNan { - return nan + dp := decParts{original: d} + ep := decParts{original: e} + if nan := checkNan(&dp, &ep); nan != nil { + return *nan } var ans decParts ans.sign = dp.sign ^ ep.sign @@ -311,14 +309,11 @@ func (d Decimal64) Sqrt() Decimal64 { // Add computes d + e func (ctx Context64) Add(d, e Decimal64) Decimal64 { - fld := d.flavor() - fle := e.flavor() - if nan, isNan := checkNanV2(fld, fle, d, e); isNan { - return nan + dp := decParts{original: d} + ep := decParts{original: e} + if nan := checkNan(&dp, &ep); nan != nil { + return *nan } - var dp, ep decParts - dp.unpackV2(d, fld) - ep.unpackV2(e, fle) if dp.fl == flInf || ep.fl == flInf { if dp.fl != flInf { return e @@ -425,12 +420,10 @@ func (ctx Context64) FMA(d, e, f Decimal64) Decimal64 { func (ctx Context64) Mul(d, e Decimal64) Decimal64 { // fld := flav(d) // fle := flav(e) - var dp decParts - dp.unpack(d) - var ep decParts - ep.unpack(e) - if nan, isNan := checkNan(&dp, &ep); isNan { - return nan + dp := decParts{original: d} + ep := decParts{original: e} + if nan := checkNan(&dp, &ep); nan != nil { + return *nan } var ans decParts ans.sign = dp.sign ^ ep.sign @@ -547,10 +540,8 @@ func (ctx Context64) Round(d, e Decimal64) Decimal64 { } func (ctx Context64) roundRaw(d, e Decimal64) Decimal64 { - var dp decParts - dp.unpack(d) - var ep decParts - ep.unpack(e) + dp := decParts{original: d} + ep := decParts{original: e} return ctx.roundRefRaw(&dp, &ep) } @@ -560,8 +551,8 @@ var ( ) func (ctx Context64) roundRefRaw(dp, ep *decParts) Decimal64 { - if nan, is := checkNan(dp, ep); is { - return nan + if nan := checkNan(dp, ep); nan != nil { + return *nan } if dp.fl == flInf || ep.fl == flInf { if dp.fl == flInf && ep.fl == flInf { From a331c5192b29483edbba6cb2273874a14954d11b Mon Sep 17 00:00:00 2001 From: Marcelo Cantos <13160581+anzdaddy@users.noreply.github.com> Date: Sat, 23 Nov 2024 14:42:13 +1100 Subject: [PATCH 40/68] wip --- decimal64.go | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/decimal64.go b/decimal64.go index b5db4cb..e14651f 100644 --- a/decimal64.go +++ b/decimal64.go @@ -545,18 +545,19 @@ func checkNan(dp, ep *decParts) *Decimal64 { dp.fl = dp.original.flavor() ep.fl = ep.original.flavor() switch { + case !(dp.fl | ep.fl).nan(): + dp.unpackV2() + ep.unpackV2() + return nil case dp.fl == flSNaN: return &dp.original case ep.fl == flSNaN: return &ep.original case dp.fl == flQNaN: return &dp.original - case ep.fl == flQNaN: + default: // ep.fl == flQNaN: return &ep.original } - dp.unpackV2() - ep.unpackV2() - return nil } // checkNan3 returns the decimal NaN that is to be propogated and true else first decimal and false From 68eb7822d6215255bddb7c23f8f352089f92c37d Mon Sep 17 00:00:00 2001 From: Marcelo Cantos <13160581+anzdaddy@users.noreply.github.com> Date: Sat, 23 Nov 2024 14:52:36 +1100 Subject: [PATCH 41/68] wip --- decimal64.go | 37 +++++++++++++++++-------------------- decimal64math.go | 4 ++-- 2 files changed, 19 insertions(+), 22 deletions(-) diff --git a/decimal64.go b/decimal64.go index e14651f..cb6e9fc 100644 --- a/decimal64.go +++ b/decimal64.go @@ -555,30 +555,27 @@ func checkNan(dp, ep *decParts) *Decimal64 { return &ep.original case dp.fl == flQNaN: return &dp.original - default: // ep.fl == flQNaN: + default: // ep.fl == flQNaN return &ep.original } } // checkNan3 returns the decimal NaN that is to be propogated and true else first decimal and false -func checkNan3(d, e, f *decParts) (Decimal64, bool) { - if d.fl == flSNaN { - return d.original, true - } - if e.fl == flSNaN { - return e.original, true - } - if f.fl == flSNaN { - return f.original, true - } - if d.fl == flQNaN { - return d.original, true - } - if e.fl == flQNaN { - return e.original, true - } - if f.fl == flQNaN { - return f.original, true +func checkNan3(dp, ep, fp *decParts) *Decimal64 { + switch { + case !(dp.fl | ep.fl | fp.fl).nan(): + return nil + case dp.fl == flSNaN: + return &dp.original + case ep.fl == flSNaN: + return &ep.original + case fp.fl == flSNaN: + return &fp.original + case dp.fl == flQNaN: + return &dp.original + case ep.fl == flQNaN: + return &ep.original + default: // fp.fl == flQNaN + return &fp.original } - return d.original, false } diff --git a/decimal64math.go b/decimal64math.go index 849bfee..312d2ff 100644 --- a/decimal64math.go +++ b/decimal64math.go @@ -368,8 +368,8 @@ func (ctx Context64) FMA(d, e, f Decimal64) Decimal64 { ep.unpack(e) var fp decParts fp.unpack(f) - if nan, isNan := checkNan3(&dp, &ep, &fp); isNan { - return nan + if nan := checkNan3(&dp, &ep, &fp); nan != nil { + return *nan } var ans decParts ans.sign = dp.sign ^ ep.sign From d7c25ce8983e577ce07dcf53d353823821faf034 Mon Sep 17 00:00:00 2001 From: Marcelo Cantos <13160581+anzdaddy@users.noreply.github.com> Date: Sat, 23 Nov 2024 14:55:48 +1100 Subject: [PATCH 42/68] wip --- decimal64.go | 6 ++++++ decimal64math.go | 9 +++------ 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/decimal64.go b/decimal64.go index cb6e9fc..e6e6eee 100644 --- a/decimal64.go +++ b/decimal64.go @@ -562,8 +562,14 @@ func checkNan(dp, ep *decParts) *Decimal64 { // checkNan3 returns the decimal NaN that is to be propogated and true else first decimal and false func checkNan3(dp, ep, fp *decParts) *Decimal64 { + dp.fl = dp.original.flavor() + ep.fl = ep.original.flavor() + fp.fl = fp.original.flavor() switch { case !(dp.fl | ep.fl | fp.fl).nan(): + dp.unpackV2() + ep.unpackV2() + fp.unpackV2() return nil case dp.fl == flSNaN: return &dp.original diff --git a/decimal64math.go b/decimal64math.go index 312d2ff..9823d23 100644 --- a/decimal64math.go +++ b/decimal64math.go @@ -362,12 +362,9 @@ func (ctx Context64) Sub(d, e Decimal64) Decimal64 { // FMA computes d*e + f func (ctx Context64) FMA(d, e, f Decimal64) Decimal64 { - var dp decParts - dp.unpack(d) - var ep decParts - ep.unpack(e) - var fp decParts - fp.unpack(f) + dp := decParts{original: d} + ep := decParts{original: e} + fp := decParts{original: f} if nan := checkNan3(&dp, &ep, &fp); nan != nil { return *nan } From 2db17163846bd8e4097b1767d1a16083f6c57a5f Mon Sep 17 00:00:00 2001 From: Marcelo Cantos <13160581+anzdaddy@users.noreply.github.com> Date: Sat, 23 Nov 2024 15:18:51 +1100 Subject: [PATCH 43/68] wip --- decimal64.go | 22 +++++++++++----------- decimal64math.go | 1 - 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/decimal64.go b/decimal64.go index e6e6eee..55e2982 100644 --- a/decimal64.go +++ b/decimal64.go @@ -545,18 +545,18 @@ func checkNan(dp, ep *decParts) *Decimal64 { dp.fl = dp.original.flavor() ep.fl = ep.original.flavor() switch { - case !(dp.fl | ep.fl).nan(): - dp.unpackV2() - ep.unpackV2() - return nil case dp.fl == flSNaN: return &dp.original case ep.fl == flSNaN: return &ep.original case dp.fl == flQNaN: return &dp.original - default: // ep.fl == flQNaN + case ep.fl == flQNaN: return &ep.original + default: + dp.unpackV2() + ep.unpackV2() + return nil } } @@ -566,11 +566,6 @@ func checkNan3(dp, ep, fp *decParts) *Decimal64 { ep.fl = ep.original.flavor() fp.fl = fp.original.flavor() switch { - case !(dp.fl | ep.fl | fp.fl).nan(): - dp.unpackV2() - ep.unpackV2() - fp.unpackV2() - return nil case dp.fl == flSNaN: return &dp.original case ep.fl == flSNaN: @@ -581,7 +576,12 @@ func checkNan3(dp, ep, fp *decParts) *Decimal64 { return &dp.original case ep.fl == flQNaN: return &ep.original - default: // fp.fl == flQNaN + case fp.fl == flQNaN: return &fp.original + default: + dp.unpackV2() + ep.unpackV2() + fp.unpackV2() + return nil } } diff --git a/decimal64math.go b/decimal64math.go index 9823d23..83ffd11 100644 --- a/decimal64math.go +++ b/decimal64math.go @@ -338,7 +338,6 @@ func (ctx Context64) Add(d, e Decimal64) Decimal64 { return dp.original } var rndStatus discardedDigit - dp.matchScales128(&ep) var ans decParts ans.add128(&dp, &ep) rndStatus = ans.roundToLo() From 74929319bb6fde57d86eb61e2215fac92e1a0c67 Mon Sep 17 00:00:00 2001 From: Marcelo Cantos <13160581+anzdaddy@users.noreply.github.com> Date: Sat, 23 Nov 2024 16:09:08 +1100 Subject: [PATCH 44/68] wip --- decimal64.go | 96 +++++++++++++++++++++---------------------- decimal64_test.go | 2 +- decimal64decParts.go | 22 +++++----- decimal64fmt.go | 12 +++--- decimal64math.go | 30 +++++++------- decimal64math_test.go | 2 +- decimal64scan.go | 4 +- uint128.go | 4 +- 8 files changed, 83 insertions(+), 89 deletions(-) diff --git a/decimal64.go b/decimal64.go index 55e2982..381b264 100644 --- a/decimal64.go +++ b/decimal64.go @@ -20,7 +20,7 @@ type flavor int8 const ( flInf flavor = 0 - flNormal53 flavor = 1 << iota + flNormal53 flavor = 1 << (iota - 1) flNormal51 flQNaN flSNaN @@ -182,7 +182,7 @@ func New64FromInt64(i int64) Decimal64 { } func new64FromInt64(value int64) Decimal64 { - sign := 0 + sign := int8(0) if value < 0 { sign = 1 value = -value @@ -194,9 +194,8 @@ func new64FromInt64(value int64) Decimal64 { return newFromParts(sign, exp, significand) } -func renormalize(exp int, significand uint64) (int, uint64) { - numBits := bits.Len64(significand) - numDigits := numBits * 3 / 10 +func renormalize(exp int16, significand uint64) (int16, uint64) { + numDigits := int16(bits.Len64(significand) * 3 / 10) normExp := 15 - numDigits if normExp > 0 { if normExp > exp+expOffset { @@ -223,7 +222,7 @@ func renormalize(exp int, significand uint64) (int, uint64) { } // roundStatus gives info about the truncated part of the significand that can't be fully stored in 16 decimal digits. -func roundStatus(significand uint64, exp int, targetExp int) discardedDigit { +func roundStatus(significand uint64, exp int16, targetExp int16) discardedDigit { expDiff := targetExp - exp if expDiff > 19 && significand != 0 { return lt5 @@ -240,11 +239,11 @@ func roundStatus(significand uint64, exp int, targetExp int) discardedDigit { return gt5 } -func newFromParts(sign int, exp int, significand uint64) Decimal64 { +func newFromParts(sign int8, exp int16, significand uint64) Decimal64 { return new64(newFromPartsRaw(sign, exp, significand).bits) } -func newFromPartsRaw(sign int, exp int, significand uint64) Decimal64 { +func newFromPartsRaw(sign int8, exp int16, significand uint64) Decimal64 { s := uint64(sign) << 63 if significand < 0x8<<50 { @@ -258,8 +257,8 @@ func newFromPartsRaw(sign int, exp int, significand uint64) Decimal64 { return Decimal64{bits: s | uint64(0xc00|(exp+expOffset))<<(63-12) | significand} } -func (d Decimal64) parts() (fl flavor, sign int, exp int, significand uint64) { - sign = int(d.bits >> 63) +func (d Decimal64) parts() (fl flavor, sign int8, exp int16, significand uint64) { + sign = int8(d.bits >> 63) switch (d.bits >> (63 - 4)) & 0xf { case 15: switch (d.bits >> (63 - 6)) & 3 { @@ -278,13 +277,13 @@ func (d Decimal64) parts() (fl flavor, sign int, exp int, significand uint64) { // s 11EEeeeeeeee (100)t tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt // EE ∈ {00, 01, 10} fl = flNormal51 - exp = int((d.bits>>(63-12))&(1<<10-1)) - expOffset + exp = int16((d.bits>>(63-12))&(1<<10-1)) - expOffset significand = d.bits&(1<<51-1) | (1 << 53) default: // s EEeeeeeeee (0)ttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt // EE ∈ {00, 01, 10} fl = flNormal53 - exp = int((d.bits>>(63-10))&(1<<10-1)) - expOffset + exp = int16((d.bits>>(63-10))&(1<<10-1)) - expOffset significand = d.bits & (1<<53 - 1) if significand == 0 { exp = 0 @@ -293,7 +292,7 @@ func (d Decimal64) parts() (fl flavor, sign int, exp int, significand uint64) { return } -func expWholeFrac(exp int, significand uint64) (exp2 int, whole uint64, frac uint64) { +func expWholeFrac(exp int16, significand uint64) (exp2 int16, whole uint64, frac uint64) { if significand == 0 { return 0, 0, 0 } @@ -308,7 +307,7 @@ func expWholeFrac(exp int, significand uint64) (exp2 int, whole uint64, frac uin } else { // exp++ till it hits 0 or continuing would throw away digits. for step := 3; step >= 0; step-- { - expStep := 1 << uint(step) + expStep := int16(1) << step powerOf10 := tenToThe[expStep] for ; n.lo >= powerOf10 && exp <= -expStep; exp += expStep { quo := n.lo / powerOf10 @@ -341,9 +340,9 @@ func (d Decimal64) Float64() float64 { exp-- significand *= 10 } - return float64(1-2*sign) * float64(significand) * math.Pow10(exp) + return float64(1-2*sign) * float64(significand) * math.Pow10(int(exp)) case flInf: - return math.Inf(1 - 2*sign) + return math.Inf(1 - 2*int(sign)) case flQNaN: return math.NaN() } @@ -446,9 +445,8 @@ func (d Decimal64) Signbit() bool { } func (d Decimal64) ScaleB(e Decimal64) Decimal64 { - dp := decParts{original: d} - ep := decParts{original: e} - if nan := checkNan(&dp, &ep); nan != nil { + var dp, ep decParts + if nan := checkNan(d, e, &dp, &ep); nan != nil { return *nan } @@ -463,7 +461,7 @@ func (d Decimal64) ScaleB(e Decimal64) Decimal64 { if !exact { return QNaN64 } - return scaleBInt(&dp, int(i)) + return scaleBInt(d, &dp, int(i)) } func (d Decimal64) ScaleBInt(i int) Decimal64 { @@ -472,11 +470,11 @@ func (d Decimal64) ScaleBInt(i int) Decimal64 { if !dp.fl.normal() || dp.isZero() { return d } - return scaleBInt(&dp, i) + return scaleBInt(d, &dp, i) } -func scaleBInt(dp *decParts, i int) Decimal64 { - dp.exp += i +func scaleBInt(d Decimal64, dp *decParts, i int) Decimal64 { + dp.exp += int16(i) for dp.significand.lo < decimal64Base && dp.exp > -expOffset { dp.exp-- @@ -485,14 +483,14 @@ func scaleBInt(dp *decParts, i int) Decimal64 { switch { case dp.exp > expMax: - return Infinity64.CopySign(dp.original) + return Infinity64.CopySign(d) case dp.exp < -expOffset: for dp.exp < -expOffset { dp.exp++ dp.significand.lo /= 10 } if dp.significand.lo == 0 { - return Zero64.CopySign(dp.original) + return Zero64.CopySign(d) } } @@ -533,55 +531,55 @@ func (d Decimal64) Class() string { } // numDecimalDigitsU64 returns the magnitude (number of digits) of a uint64. -func numDecimalDigitsU64(n uint64) int { - numDigits := bits.Len64(n) * 77 / 256 // ~ 3/10 +func numDecimalDigitsU64(n uint64) int16 { + numDigits := int16(bits.Len64(n) * 77 / 256) // ~ 3/10 if n >= tenToThe[uint(numDigits)%uint(len(tenToThe))] { numDigits++ } return numDigits } -func checkNan(dp, ep *decParts) *Decimal64 { - dp.fl = dp.original.flavor() - ep.fl = ep.original.flavor() +func checkNan(d, e Decimal64, dp, ep *decParts) *Decimal64 { + dp.fl = d.flavor() + ep.fl = e.flavor() switch { case dp.fl == flSNaN: - return &dp.original + return &d case ep.fl == flSNaN: - return &ep.original + return &e case dp.fl == flQNaN: - return &dp.original + return &d case ep.fl == flQNaN: - return &ep.original + return &e default: - dp.unpackV2() - ep.unpackV2() + dp.unpackV2(d) + ep.unpackV2(e) return nil } } // checkNan3 returns the decimal NaN that is to be propogated and true else first decimal and false -func checkNan3(dp, ep, fp *decParts) *Decimal64 { - dp.fl = dp.original.flavor() - ep.fl = ep.original.flavor() - fp.fl = fp.original.flavor() +func checkNan3(d, e, f Decimal64, dp, ep, fp *decParts) *Decimal64 { + dp.fl = d.flavor() + ep.fl = e.flavor() + fp.fl = f.flavor() switch { case dp.fl == flSNaN: - return &dp.original + return &d case ep.fl == flSNaN: - return &ep.original + return &e case fp.fl == flSNaN: - return &fp.original + return &f case dp.fl == flQNaN: - return &dp.original + return &d case ep.fl == flQNaN: - return &ep.original + return &e case fp.fl == flQNaN: - return &fp.original + return &f default: - dp.unpackV2() - ep.unpackV2() - fp.unpackV2() + dp.unpackV2(d) + ep.unpackV2(e) + fp.unpackV2(f) return nil } } diff --git a/decimal64_test.go b/decimal64_test.go index 692d492..05efae2 100644 --- a/decimal64_test.go +++ b/decimal64_test.go @@ -320,7 +320,7 @@ func TestNumDecimalDigits(t *testing.T) { for i, num := range tenToThe { for j := uint64(1); j < 10 && i < 19; j++ { - equal(t, i+1, numDecimalDigitsU64(num*j)) + equal(t, i+1, int(numDecimalDigitsU64(num*j))) } } } diff --git a/decimal64decParts.go b/decimal64decParts.go index 51826e4..4e51abe 100644 --- a/decimal64decParts.go +++ b/decimal64decParts.go @@ -3,8 +3,8 @@ package decimal // decParts stores the constituting decParts of a decimal64. type decParts struct { fl flavor - sign int - exp int + sign int8 + exp int16 significand uint128T original Decimal64 } @@ -74,7 +74,7 @@ func (dp *decParts) isSubnormal() bool { } // separation gets the separation in decimal places of the MSD's of two decimal 64s -func (dp *decParts) separation(ep *decParts) int { +func (dp *decParts) separation(ep *decParts) int16 { return dp.significand.numDecimalDigits() + dp.exp - ep.significand.numDecimalDigits() - ep.exp } @@ -116,7 +116,7 @@ func (dp *decParts) isinf() bool { return dp.fl == flInf } -func (dp *decParts) rescale(targetExp int) (rndStatus discardedDigit) { +func (dp *decParts) rescale(targetExp int16) (rndStatus discardedDigit) { expDiff := targetExp - dp.exp mag := dp.significand.numDecimalDigits() rndStatus = roundStatus(dp.significand.lo, dp.exp, targetExp) @@ -131,19 +131,18 @@ func (dp *decParts) rescale(targetExp int) (rndStatus discardedDigit) { } func (dp *decParts) unpack(d Decimal64) { - dp.original = d dp.fl = d.flavor() - dp.unpackV2() + dp.unpackV2(d) } -func (dp *decParts) unpackV2() { - d := dp.original - dp.sign = int(d.bits >> 63) +func (dp *decParts) unpackV2(d Decimal64) { + dp.original = d + dp.sign = int8(d.bits >> 63) switch dp.fl { case flNormal53: // s EEeeeeeeee (0)ttt tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt // EE ∈ {00, 01, 10} - dp.exp = int((d.bits>>(63-10))&(1<<10-1)) - expOffset + dp.exp = int16((d.bits>>(63-10))&(1<<10-1)) - expOffset dp.significand.lo = d.bits & (1<<53 - 1) if dp.significand.lo == 0 { dp.exp = 0 @@ -151,12 +150,11 @@ func (dp *decParts) unpackV2() { case flNormal51: // s 11EEeeeeeeee (100)t tttttttttt tttttttttt tttttttttt tttttttttt tttttttttt // EE ∈ {00, 01, 10} - dp.exp = int((d.bits>>(63-12))&(1<<10-1)) - expOffset + dp.exp = int16((d.bits>>(63-12))&(1<<10-1)) - expOffset dp.significand.lo = d.bits&(1<<51-1) | (1 << 53) case flInf: default: // NaN dp.significand.lo = d.bits & (1<<51 - 1) // Payload - return } } diff --git a/decimal64fmt.go b/decimal64fmt.go index 253563e..b3b7b3e 100644 --- a/decimal64fmt.go +++ b/decimal64fmt.go @@ -96,7 +96,7 @@ func (d Decimal64) Append(buf []byte, format byte, prec int) []byte { } func precScale(prec int) Decimal64 { - return new64(newFromPartsRaw(0, -15-max(0, prec), decimal64Base).bits) + return new64(newFromPartsRaw(0, -15-max(0, int16(prec)), decimal64Base).bits) } // Append appends the text representation of d to buf. @@ -172,15 +172,15 @@ formatBlock: // pure integer if exp >= 0 { buf = a.uint64New(buf, significand) - buf = appendZeros(buf, exp) + buf = appendZeros(buf, int(exp)) return dotZeros(buf, a.prec) } // integer part - fracDigits := min(-exp, 16) + fracDigits := int(min(-exp, 16)) unit := tenToThe[fracDigits] buf = a.uint64New(buf, significand/unit) - buf = appendZeros(buf, exp) + buf = appendZeros(buf, int(exp)) // empty fractional part if significand%unit == 0 { @@ -190,7 +190,7 @@ formatBlock: buf = append(buf, '.') // fractional part - prefix := max(0, -exp-16) + prefix := int(max(0, -exp-16)) if a.prec < 0 { buf = appendZeros(buf, prefix) buf = appendFracF(buf, significand, fracDigits, 16) @@ -201,7 +201,7 @@ formatBlock: return appendFracF(buf, significand, fracDigits, a.prec-prefix) case 'g', 'G': if exp < -decimal64Digits-3 || - a.prec >= 0 && exp > a.prec || + a.prec >= 0 && int(exp) > a.prec || a.prec < 0 && exp > -decimal64Digits+6 { verb -= 'g' - 'e' } else { diff --git a/decimal64math.go b/decimal64math.go index 83ffd11..0fc8d1e 100644 --- a/decimal64math.go +++ b/decimal64math.go @@ -53,9 +53,8 @@ func (d Decimal64) Quo(e Decimal64) Decimal64 { // 0 if d == e (incl. -0 == 0, -Inf == -Inf, and +Inf == +Inf) // +1 if d > e func (d Decimal64) Cmp(e Decimal64) int { - dp := decParts{original: d} - ep := decParts{original: e} - if checkNan(&dp, &ep) != nil { + var dp, ep decParts + if checkNan(d, e, &dp, &ep) != nil { return -2 } return cmp(&dp, &ep) @@ -64,9 +63,8 @@ func (d Decimal64) Cmp(e Decimal64) int { // Cmp64 returns the same output as Cmp as a Decimal64, unless d or e is NaN, in // which case it returns a corresponding NaN result. func (d Decimal64) Cmp64(e Decimal64) Decimal64 { - dp := decParts{original: d} - ep := decParts{original: e} - if nan := checkNan(&dp, &ep); nan != nil { + var dp, ep decParts + if nan := checkNan(d, e, &dp, &ep); nan != nil { return *nan } switch cmp(&dp, &ep) { @@ -213,7 +211,7 @@ func (d Decimal64) CopySign(e Decimal64) Decimal64 { func (ctx Context64) Quo(d, e Decimal64) Decimal64 { dp := decParts{original: d} ep := decParts{original: e} - if nan := checkNan(&dp, &ep); nan != nil { + if nan := checkNan(d, e, &dp, &ep); nan != nil { return *nan } var ans decParts @@ -311,7 +309,7 @@ func (d Decimal64) Sqrt() Decimal64 { func (ctx Context64) Add(d, e Decimal64) Decimal64 { dp := decParts{original: d} ep := decParts{original: e} - if nan := checkNan(&dp, &ep); nan != nil { + if nan := checkNan(d, e, &dp, &ep); nan != nil { return *nan } if dp.fl == flInf || ep.fl == flInf { @@ -364,7 +362,7 @@ func (ctx Context64) FMA(d, e, f Decimal64) Decimal64 { dp := decParts{original: d} ep := decParts{original: e} fp := decParts{original: f} - if nan := checkNan3(&dp, &ep, &fp); nan != nil { + if nan := checkNan3(d, e, f, &dp, &ep, &fp); nan != nil { return *nan } var ans decParts @@ -418,7 +416,7 @@ func (ctx Context64) Mul(d, e Decimal64) Decimal64 { // fle := flav(e) dp := decParts{original: d} ep := decParts{original: e} - if nan := checkNan(&dp, &ep); nan != nil { + if nan := checkNan(d, e, &dp, &ep); nan != nil { return *nan } var ans decParts @@ -538,7 +536,7 @@ func (ctx Context64) Round(d, e Decimal64) Decimal64 { func (ctx Context64) roundRaw(d, e Decimal64) Decimal64 { dp := decParts{original: d} ep := decParts{original: e} - return ctx.roundRefRaw(&dp, &ep) + return ctx.roundRefRaw(d, e, &dp, &ep) } var ( @@ -546,8 +544,8 @@ var ( qNaN64Raw = new64nostr(0x7c << 56) ) -func (ctx Context64) roundRefRaw(dp, ep *decParts) Decimal64 { - if nan := checkNan(dp, ep); nan != nil { +func (ctx Context64) roundRefRaw(d, e Decimal64, dp, ep *decParts) Decimal64 { + if nan := checkNan(d, e, dp, ep); nan != nil { return *nan } if dp.fl == flInf || ep.fl == flInf { @@ -593,7 +591,7 @@ func (ctx Context64) ToIntegral(d Decimal64) Decimal64 { if !dp.fl.normal() || dp.exp >= 0 { return d } - return new64(ctx.roundRefRaw(&dp, &decPartsOne64).bits) + return new64(ctx.roundRefRaw(d, One64, &dp, &decPartsOne64).bits) } func (ctx Context64) round(s, p uint64) (uint64, bool) { @@ -618,7 +616,7 @@ func (ctx Context64) round(s, p uint64) (uint64, bool) { return s, false } -func unsubnormal(exp int, significand uint64) (int, uint64) { +func unsubnormal(exp int16, significand uint64) (int16, uint64) { if significand != 0 { for significand < decimal64Base { significand *= 10 @@ -628,7 +626,7 @@ func unsubnormal(exp int, significand uint64) (int, uint64) { return exp, significand } -func resubnormal(exp int, significand uint64) (int, uint64) { +func resubnormal(exp int16, significand uint64) (int16, uint64) { for exp < -expOffset || significand >= 10*decimal64Base { significand /= 10 exp++ diff --git a/decimal64math_test.go b/decimal64math_test.go index 42aaa26..6f6e25e 100644 --- a/decimal64math_test.go +++ b/decimal64math_test.go @@ -447,7 +447,7 @@ func benchmarkDecimal64Data() []Decimal64 { Pi64, E64, New64FromInt64(42), - MustParse64("2345678e100"), + MustParse64("9945678e100"), New64FromInt64(1234567), New64FromInt64(-42), MustParse64("3456789e-120"), diff --git a/decimal64scan.go b/decimal64scan.go index 151c467..f3e3583 100644 --- a/decimal64scan.go +++ b/decimal64scan.go @@ -166,8 +166,8 @@ func (ctx Context64) Scan(d *Decimal64, state fmt.ScanState, verb rune) error { } exponent += int64(sExp - len(frac)) - partExp, partSignificand := renormalize(int(exponent), uint64(significand)) - *d = newFromParts(sign, partExp, partSignificand) + partExp, partSignificand := renormalize(int16(exponent), uint64(significand)) + *d = newFromParts(int8(sign), partExp, partSignificand) return nil } diff --git a/uint128.go b/uint128.go index 0f39f81..1798641 100644 --- a/uint128.go +++ b/uint128.go @@ -10,12 +10,12 @@ type uint128T struct { lo, hi uint64 } -func (a *uint128T) numDecimalDigits() int { +func (a *uint128T) numDecimalDigits() int16 { if a.hi == 0 { return numDecimalDigitsU64(a.lo) } bitSize := 65 + bits.Len64(a.hi) - numDigitsEst := bitSize * 77 / 256 + numDigitsEst := int16(bitSize * 77 / 256) if !a.lt(&tenToThe128[uint(numDigitsEst)%uint(len(tenToThe128))]) { numDigitsEst++ } From 209044ee7394415ed31d5a9b8b43f0b256981d6c Mon Sep 17 00:00:00 2001 From: Marcelo Cantos <13160581+anzdaddy@users.noreply.github.com> Date: Sat, 23 Nov 2024 16:12:44 +1100 Subject: [PATCH 45/68] wip --- decimal64math.go | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/decimal64math.go b/decimal64math.go index 0fc8d1e..17473ea 100644 --- a/decimal64math.go +++ b/decimal64math.go @@ -209,8 +209,7 @@ func (d Decimal64) CopySign(e Decimal64) Decimal64 { // Quo computes d / e. // Rounding rules are applied as per the context. func (ctx Context64) Quo(d, e Decimal64) Decimal64 { - dp := decParts{original: d} - ep := decParts{original: e} + var dp, ep decParts if nan := checkNan(d, e, &dp, &ep); nan != nil { return *nan } @@ -307,8 +306,7 @@ func (d Decimal64) Sqrt() Decimal64 { // Add computes d + e func (ctx Context64) Add(d, e Decimal64) Decimal64 { - dp := decParts{original: d} - ep := decParts{original: e} + var dp, ep decParts if nan := checkNan(d, e, &dp, &ep); nan != nil { return *nan } @@ -359,8 +357,7 @@ func (ctx Context64) Sub(d, e Decimal64) Decimal64 { // FMA computes d*e + f func (ctx Context64) FMA(d, e, f Decimal64) Decimal64 { - dp := decParts{original: d} - ep := decParts{original: e} + var dp, ep decParts fp := decParts{original: f} if nan := checkNan3(d, e, f, &dp, &ep, &fp); nan != nil { return *nan @@ -414,8 +411,7 @@ func (ctx Context64) FMA(d, e, f Decimal64) Decimal64 { func (ctx Context64) Mul(d, e Decimal64) Decimal64 { // fld := flav(d) // fle := flav(e) - dp := decParts{original: d} - ep := decParts{original: e} + var dp, ep decParts if nan := checkNan(d, e, &dp, &ep); nan != nil { return *nan } @@ -534,8 +530,7 @@ func (ctx Context64) Round(d, e Decimal64) Decimal64 { } func (ctx Context64) roundRaw(d, e Decimal64) Decimal64 { - dp := decParts{original: d} - ep := decParts{original: e} + var dp, ep decParts return ctx.roundRefRaw(d, e, &dp, &ep) } From 9d917f4242697ed1cdd72e91675a8ee3556f29f9 Mon Sep 17 00:00:00 2001 From: Marcelo Cantos <13160581+anzdaddy@users.noreply.github.com> Date: Sat, 23 Nov 2024 16:12:58 +1100 Subject: [PATCH 46/68] wip --- decimal64math.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/decimal64math.go b/decimal64math.go index 17473ea..90b2486 100644 --- a/decimal64math.go +++ b/decimal64math.go @@ -545,7 +545,7 @@ func (ctx Context64) roundRefRaw(d, e Decimal64, dp, ep *decParts) Decimal64 { } if dp.fl == flInf || ep.fl == flInf { if dp.fl == flInf && ep.fl == flInf { - return dp.original + return d } return qNaN64Raw } From f21e3ca3059c2e0aaa09914a111c1429485907d0 Mon Sep 17 00:00:00 2001 From: Marcelo Cantos <13160581+anzdaddy@users.noreply.github.com> Date: Sat, 23 Nov 2024 16:13:08 +1100 Subject: [PATCH 47/68] wip --- decimal64math.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/decimal64math.go b/decimal64math.go index 90b2486..751943b 100644 --- a/decimal64math.go +++ b/decimal64math.go @@ -558,7 +558,7 @@ func (ctx Context64) roundRefRaw(d, e Decimal64, dp, ep *decParts) Decimal64 { return zero64Raw } if delta > 14 { - return dp.original + return d } p := tenToThe[14-delta] s, grew := ctx.round(dsignificand, p) From ac115eebca394ec26229b037e73f1bb26cdec924 Mon Sep 17 00:00:00 2001 From: Marcelo Cantos <13160581+anzdaddy@users.noreply.github.com> Date: Sat, 23 Nov 2024 16:13:41 +1100 Subject: [PATCH 48/68] wip --- decimal64math.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/decimal64math.go b/decimal64math.go index 751943b..2215703 100644 --- a/decimal64math.go +++ b/decimal64math.go @@ -357,8 +357,7 @@ func (ctx Context64) Sub(d, e Decimal64) Decimal64 { // FMA computes d*e + f func (ctx Context64) FMA(d, e, f Decimal64) Decimal64 { - var dp, ep decParts - fp := decParts{original: f} + var dp, ep, fp decParts if nan := checkNan3(d, e, f, &dp, &ep, &fp); nan != nil { return *nan } From 2c83d4e66bfdedd11dce207caf6f13d624bf1258 Mon Sep 17 00:00:00 2001 From: Marcelo Cantos <13160581+anzdaddy@users.noreply.github.com> Date: Sat, 23 Nov 2024 16:15:55 +1100 Subject: [PATCH 49/68] wip --- decimal64math.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/decimal64math.go b/decimal64math.go index 2215703..b793b08 100644 --- a/decimal64math.go +++ b/decimal64math.go @@ -57,7 +57,7 @@ func (d Decimal64) Cmp(e Decimal64) int { if checkNan(d, e, &dp, &ep) != nil { return -2 } - return cmp(&dp, &ep) + return cmp(d, e, &dp, &ep) } // Cmp64 returns the same output as Cmp as a Decimal64, unless d or e is NaN, in @@ -67,7 +67,7 @@ func (d Decimal64) Cmp64(e Decimal64) Decimal64 { if nan := checkNan(d, e, &dp, &ep); nan != nil { return *nan } - switch cmp(&dp, &ep) { + switch cmp(d, e, &dp, &ep) { case -1: return NegOne64 case 1: @@ -77,7 +77,7 @@ func (d Decimal64) Cmp64(e Decimal64) Decimal64 { } } -func cmp(dp, ep *decParts) int { +func cmp(_, _ Decimal64, dp, ep *decParts) int { switch { case dp.isZero() && ep.isZero(), dp.original == ep.original: return 0 @@ -108,7 +108,7 @@ func (d Decimal64) min(e Decimal64, sign int) Decimal64 { switch { case !dnan && !enan: // Fast path for non-NaNs. - if sign*cmp(&dp, &ep) < 0 { + if sign*cmp(d, e, &dp, &ep) < 0 { return d } return e @@ -147,7 +147,7 @@ func (d Decimal64) minMag(e Decimal64, sign int) Decimal64 { switch { case !dnan && !enan: // Fast path for non-NaNs. - switch sign * cmp(&dp, &ep) { + switch sign * cmp(d, e, &dp, &ep) { case -1: return d case 1: From 586da368427bd99cbca69a2d34bafb7df2073694 Mon Sep 17 00:00:00 2001 From: Marcelo Cantos <13160581+anzdaddy@users.noreply.github.com> Date: Sat, 23 Nov 2024 16:19:28 +1100 Subject: [PATCH 50/68] wip --- decimal64math.go | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/decimal64math.go b/decimal64math.go index b793b08..23dff6f 100644 --- a/decimal64math.go +++ b/decimal64math.go @@ -13,6 +13,10 @@ func (d Decimal64) Abs() Decimal64 { if d.flavor().nan() { return d } + return d.abs() +} + +func (d Decimal64) abs() Decimal64 { return new64(^neg64 & uint64(d.bits)) } @@ -77,12 +81,18 @@ func (d Decimal64) Cmp64(e Decimal64) Decimal64 { } } -func cmp(_, _ Decimal64, dp, ep *decParts) int { +func cmp(d, e Decimal64, dp, ep *decParts) int { + if d != dp.original { + panic("d != dp.original") + } + if e != ep.original { + panic("e != ep.original") + } switch { - case dp.isZero() && ep.isZero(), dp.original == ep.original: + case dp.isZero() && ep.isZero(), d == e: return 0 default: - diff := dp.original.Sub(ep.original) + diff := d.Sub(e) return 1 - 2*int(diff.bits>>63) } } @@ -137,17 +147,18 @@ func (d Decimal64) MaxMag(e Decimal64) Decimal64 { // MinMag returns the lower of d and e. func (d Decimal64) minMag(e Decimal64, sign int) Decimal64 { + da, ea := d.abs(), e.abs() var dp decParts - dp.unpack(d.Abs()) + dp.unpack(da) var ep decParts - ep.unpack(e.Abs()) + ep.unpack(ea) dnan := dp.fl.nan() enan := ep.fl.nan() switch { case !dnan && !enan: // Fast path for non-NaNs. - switch sign * cmp(d, e, &dp, &ep) { + switch sign * cmp(da, ea, &dp, &ep) { case -1: return d case 1: From f7a787c6cf40b10334675f8fc08c128355ed8e05 Mon Sep 17 00:00:00 2001 From: Marcelo Cantos <13160581+anzdaddy@users.noreply.github.com> Date: Sat, 23 Nov 2024 16:20:19 +1100 Subject: [PATCH 51/68] wip --- decimal64math.go | 6 ------ 1 file changed, 6 deletions(-) diff --git a/decimal64math.go b/decimal64math.go index 23dff6f..15cece8 100644 --- a/decimal64math.go +++ b/decimal64math.go @@ -82,12 +82,6 @@ func (d Decimal64) Cmp64(e Decimal64) Decimal64 { } func cmp(d, e Decimal64, dp, ep *decParts) int { - if d != dp.original { - panic("d != dp.original") - } - if e != ep.original { - panic("e != ep.original") - } switch { case dp.isZero() && ep.isZero(), d == e: return 0 From be008d90b7c168c600b2c9ba4286d27baee0bca9 Mon Sep 17 00:00:00 2001 From: Marcelo Cantos <13160581+anzdaddy@users.noreply.github.com> Date: Sat, 23 Nov 2024 16:21:11 +1100 Subject: [PATCH 52/68] wip --- decimal64math.go | 1 + 1 file changed, 1 insertion(+) diff --git a/decimal64math.go b/decimal64math.go index 15cece8..f09fb22 100644 --- a/decimal64math.go +++ b/decimal64math.go @@ -333,6 +333,7 @@ func (ctx Context64) Add(d, e Decimal64) Decimal64 { if sep < 0 { dp, ep = ep, dp + d, e = e, d sep = -sep } if sep > 17 { From a3104463eeac0a01c807f90e1b39b3a1100fb495 Mon Sep 17 00:00:00 2001 From: Marcelo Cantos <13160581+anzdaddy@users.noreply.github.com> Date: Sat, 23 Nov 2024 16:21:21 +1100 Subject: [PATCH 53/68] wip --- decimal64math.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/decimal64math.go b/decimal64math.go index f09fb22..eb2281f 100644 --- a/decimal64math.go +++ b/decimal64math.go @@ -337,7 +337,7 @@ func (ctx Context64) Add(d, e Decimal64) Decimal64 { sep = -sep } if sep > 17 { - return dp.original + return d } var rndStatus discardedDigit var ans decParts From 6b1ff613013dca19f7ab7b972c46e71cf01347d5 Mon Sep 17 00:00:00 2001 From: Marcelo Cantos <13160581+anzdaddy@users.noreply.github.com> Date: Sat, 23 Nov 2024 16:21:40 +1100 Subject: [PATCH 54/68] wip --- decimal64math.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/decimal64math.go b/decimal64math.go index eb2281f..8ade8ab 100644 --- a/decimal64math.go +++ b/decimal64math.go @@ -333,7 +333,7 @@ func (ctx Context64) Add(d, e Decimal64) Decimal64 { if sep < 0 { dp, ep = ep, dp - d, e = e, d + d = e sep = -sep } if sep > 17 { From be5e0a3029deab63f3d50ce6011784d49c425bab Mon Sep 17 00:00:00 2001 From: Marcelo Cantos <13160581+anzdaddy@users.noreply.github.com> Date: Sat, 23 Nov 2024 16:22:10 +1100 Subject: [PATCH 55/68] wip --- decimal64math.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/decimal64math.go b/decimal64math.go index 8ade8ab..46a93ce 100644 --- a/decimal64math.go +++ b/decimal64math.go @@ -331,9 +331,11 @@ func (ctx Context64) Add(d, e Decimal64) Decimal64 { } sep := dp.separation(&ep) + if sep < -17 { + return e + } if sep < 0 { dp, ep = ep, dp - d = e sep = -sep } if sep > 17 { From f5630370277c79105d702df1e4bebfb788c39b83 Mon Sep 17 00:00:00 2001 From: Marcelo Cantos <13160581+anzdaddy@users.noreply.github.com> Date: Sat, 23 Nov 2024 16:22:27 +1100 Subject: [PATCH 56/68] wip --- decimal64decParts.go | 1 - 1 file changed, 1 deletion(-) diff --git a/decimal64decParts.go b/decimal64decParts.go index 4e51abe..cf54192 100644 --- a/decimal64decParts.go +++ b/decimal64decParts.go @@ -136,7 +136,6 @@ func (dp *decParts) unpack(d Decimal64) { } func (dp *decParts) unpackV2(d Decimal64) { - dp.original = d dp.sign = int8(d.bits >> 63) switch dp.fl { case flNormal53: From ed0381dba558de7096e50bb1282018f4ea2f54b5 Mon Sep 17 00:00:00 2001 From: Marcelo Cantos <13160581+anzdaddy@users.noreply.github.com> Date: Sat, 23 Nov 2024 16:22:36 +1100 Subject: [PATCH 57/68] wip --- decimal64decParts.go | 1 - 1 file changed, 1 deletion(-) diff --git a/decimal64decParts.go b/decimal64decParts.go index cf54192..1fdecbf 100644 --- a/decimal64decParts.go +++ b/decimal64decParts.go @@ -6,7 +6,6 @@ type decParts struct { sign int8 exp int16 significand uint128T - original Decimal64 } func unpack(d Decimal64) decParts { From 40eb1daf3fdc62c8ca47ffa78c1be90b6d116b8f Mon Sep 17 00:00:00 2001 From: Marcelo Cantos <13160581+anzdaddy@users.noreply.github.com> Date: Sat, 23 Nov 2024 16:22:55 +1100 Subject: [PATCH 58/68] wip --- decimal64decParts.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/decimal64decParts.go b/decimal64decParts.go index 1fdecbf..e722972 100644 --- a/decimal64decParts.go +++ b/decimal64decParts.go @@ -2,10 +2,10 @@ package decimal // decParts stores the constituting decParts of a decimal64. type decParts struct { - fl flavor - sign int8 - exp int16 significand uint128T + exp int16 + sign int8 + fl flavor } func unpack(d Decimal64) decParts { From 7ff4cd8bbab0ce1773ad91a267df9c4fa2353f89 Mon Sep 17 00:00:00 2001 From: Marcelo Cantos <13160581+anzdaddy@users.noreply.github.com> Date: Sat, 23 Nov 2024 18:58:43 +1100 Subject: [PATCH 59/68] wip --- decimal64_debug.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/decimal64_debug.go b/decimal64_debug.go index 819531b..9825de5 100644 --- a/decimal64_debug.go +++ b/decimal64_debug.go @@ -11,8 +11,8 @@ import "fmt" type Decimal64 struct { s string fl flavor - sign int - exp int + sign int8 + exp int16 significand uint64 bits uint64 } From 6d3d9b0a01502efcfe0e5697461184cd7fdef75a Mon Sep 17 00:00:00 2001 From: Marcelo Cantos <13160581+anzdaddy@users.noreply.github.com> Date: Sat, 23 Nov 2024 19:01:29 +1100 Subject: [PATCH 60/68] wip --- Makefile | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/Makefile b/Makefile index b00ff20..6e9dc36 100644 --- a/Makefile +++ b/Makefile @@ -3,14 +3,11 @@ all: test-all build-linux lint .PHONY: test-all -test-all: test test-debug test-32 +test-all: test test-32 .PHONY: test test: go test $(GOTESTFLAGS) - -.PHONY: test-debug -test-debug: go test $(GOTESTFLAGS) -tags=decimal_debug .PHONY: test-32 @@ -46,7 +43,6 @@ DOCKERRUN = docker run --rm \ -v `go env GOCACHE`:/root/.cache/go-build \ -v `go env GOMODCACHE`:/go/pkg/mod - # Dependency on build-linux primes Go caches. .PHONY: lint lint: build-linux From 05f3308448b5a89df9e19485ea7418e85f685bfe Mon Sep 17 00:00:00 2001 From: Marcelo Cantos <13160581+anzdaddy@users.noreply.github.com> Date: Sat, 23 Nov 2024 19:15:28 +1100 Subject: [PATCH 61/68] wip --- decimal64math.go | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/decimal64math.go b/decimal64math.go index 46a93ce..220121e 100644 --- a/decimal64math.go +++ b/decimal64math.go @@ -324,12 +324,17 @@ func (ctx Context64) Add(d, e Decimal64) Decimal64 { } return QNaN64 } + return ctx.add(d, e, &dp, &ep) +} + +// Add computes d + e +func (ctx Context64) add(d, e Decimal64, dp, ep *decParts) Decimal64 { if dp.significand.lo == 0 { return e } else if ep.significand.lo == 0 { return d } - sep := dp.separation(&ep) + sep := dp.separation(ep) if sep < -17 { return e @@ -343,7 +348,7 @@ func (ctx Context64) Add(d, e Decimal64) Decimal64 { } var rndStatus discardedDigit var ans decParts - ans.add128(&dp, &ep) + ans.add128(dp, ep) rndStatus = ans.roundToLo() if ans.exp < -expOffset { rndStatus = ans.rescale(-expOffset) From 1d49b20eb8c286c18eb971accc95dd4a91f8386e Mon Sep 17 00:00:00 2001 From: Marcelo Cantos <13160581+anzdaddy@users.noreply.github.com> Date: Sat, 23 Nov 2024 19:16:48 +1100 Subject: [PATCH 62/68] wip --- decimal64math.go | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/decimal64math.go b/decimal64math.go index 220121e..cd1b899 100644 --- a/decimal64math.go +++ b/decimal64math.go @@ -419,10 +419,8 @@ func (ctx Context64) FMA(d, e, f Decimal64) Decimal64 { return ans.decimal64() } -// Mul computes d * e +// Mul computes d * e. func (ctx Context64) Mul(d, e Decimal64) Decimal64 { - // fld := flav(d) - // fle := flav(e) var dp, ep decParts if nan := checkNan(d, e, &dp, &ep); nan != nil { return *nan @@ -430,11 +428,15 @@ func (ctx Context64) Mul(d, e Decimal64) Decimal64 { var ans decParts ans.sign = dp.sign ^ ep.sign if dp.fl == flInf || ep.fl == flInf { - if ep.isZero() || dp.isZero() { + if dp.isZero() || ep.isZero() { return QNaN64 } return infinities64[ans.sign] } + return ctx.mul(&dp, &ep, &ans) +} + +func (ctx Context64) mul(dp, ep, ans *decParts) Decimal64 { if ep.significand.lo == 0 || dp.significand.lo == 0 { return zeroes64[ans.sign] } From cbabda2dc47f6bf048810eff653e796dc5bb1f79 Mon Sep 17 00:00:00 2001 From: Marcelo Cantos <13160581+anzdaddy@users.noreply.github.com> Date: Sat, 23 Nov 2024 19:21:37 +1100 Subject: [PATCH 63/68] wip --- decimal64math.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/decimal64math.go b/decimal64math.go index cd1b899..8057109 100644 --- a/decimal64math.go +++ b/decimal64math.go @@ -428,7 +428,7 @@ func (ctx Context64) Mul(d, e Decimal64) Decimal64 { var ans decParts ans.sign = dp.sign ^ ep.sign if dp.fl == flInf || ep.fl == flInf { - if dp.isZero() || ep.isZero() { + if dp.significand.lo == 0 && dp.fl != flInf || ep.significand.lo == 0 && ep.fl != flInf { return QNaN64 } return infinities64[ans.sign] From 5ea1c1b664673c2bee9dd1f4f370a2e393c90a5d Mon Sep 17 00:00:00 2001 From: Marcelo Cantos <13160581+anzdaddy@users.noreply.github.com> Date: Sat, 23 Nov 2024 19:23:40 +1100 Subject: [PATCH 64/68] wip --- decimal64math.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/decimal64math.go b/decimal64math.go index 8057109..cd1b899 100644 --- a/decimal64math.go +++ b/decimal64math.go @@ -428,7 +428,7 @@ func (ctx Context64) Mul(d, e Decimal64) Decimal64 { var ans decParts ans.sign = dp.sign ^ ep.sign if dp.fl == flInf || ep.fl == flInf { - if dp.significand.lo == 0 && dp.fl != flInf || ep.significand.lo == 0 && ep.fl != flInf { + if dp.isZero() || ep.isZero() { return QNaN64 } return infinities64[ans.sign] From e2d9a4d18c5c2d551c134c1c111edf6aacbab218 Mon Sep 17 00:00:00 2001 From: Marcelo Cantos <13160581+anzdaddy@users.noreply.github.com> Date: Tue, 26 Nov 2024 20:22:14 +1100 Subject: [PATCH 65/68] wip --- decimal64.go | 32 ++++++++++++++++---------------- decimal64math.go | 26 +++++++++++++------------- 2 files changed, 29 insertions(+), 29 deletions(-) diff --git a/decimal64.go b/decimal64.go index 381b264..3641b9e 100644 --- a/decimal64.go +++ b/decimal64.go @@ -446,8 +446,8 @@ func (d Decimal64) Signbit() bool { func (d Decimal64) ScaleB(e Decimal64) Decimal64 { var dp, ep decParts - if nan := checkNan(d, e, &dp, &ep); nan != nil { - return *nan + if nan, is := checkNan(d, e, &dp, &ep); is { + return nan } if !dp.fl.normal() || dp.isZero() { @@ -539,47 +539,47 @@ func numDecimalDigitsU64(n uint64) int16 { return numDigits } -func checkNan(d, e Decimal64, dp, ep *decParts) *Decimal64 { +func checkNan(d, e Decimal64, dp, ep *decParts) (Decimal64, bool) { dp.fl = d.flavor() ep.fl = e.flavor() switch { case dp.fl == flSNaN: - return &d + return d, true case ep.fl == flSNaN: - return &e + return e, true case dp.fl == flQNaN: - return &d + return d, true case ep.fl == flQNaN: - return &e + return e, true default: dp.unpackV2(d) ep.unpackV2(e) - return nil + return Decimal64{}, false } } // checkNan3 returns the decimal NaN that is to be propogated and true else first decimal and false -func checkNan3(d, e, f Decimal64, dp, ep, fp *decParts) *Decimal64 { +func checkNan3(d, e, f Decimal64, dp, ep, fp *decParts) (Decimal64, bool) { dp.fl = d.flavor() ep.fl = e.flavor() fp.fl = f.flavor() switch { case dp.fl == flSNaN: - return &d + return d, true case ep.fl == flSNaN: - return &e + return e, true case fp.fl == flSNaN: - return &f + return f, true case dp.fl == flQNaN: - return &d + return d, true case ep.fl == flQNaN: - return &e + return e, true case fp.fl == flQNaN: - return &f + return f, true default: dp.unpackV2(d) ep.unpackV2(e) fp.unpackV2(f) - return nil + return Decimal64{}, false } } diff --git a/decimal64math.go b/decimal64math.go index cd1b899..f00e516 100644 --- a/decimal64math.go +++ b/decimal64math.go @@ -58,7 +58,7 @@ func (d Decimal64) Quo(e Decimal64) Decimal64 { // +1 if d > e func (d Decimal64) Cmp(e Decimal64) int { var dp, ep decParts - if checkNan(d, e, &dp, &ep) != nil { + if _, nan := checkNan(d, e, &dp, &ep); nan { return -2 } return cmp(d, e, &dp, &ep) @@ -68,8 +68,8 @@ func (d Decimal64) Cmp(e Decimal64) int { // which case it returns a corresponding NaN result. func (d Decimal64) Cmp64(e Decimal64) Decimal64 { var dp, ep decParts - if nan := checkNan(d, e, &dp, &ep); nan != nil { - return *nan + if nan, is := checkNan(d, e, &dp, &ep); is { + return nan } switch cmp(d, e, &dp, &ep) { case -1: @@ -215,8 +215,8 @@ func (d Decimal64) CopySign(e Decimal64) Decimal64 { // Rounding rules are applied as per the context. func (ctx Context64) Quo(d, e Decimal64) Decimal64 { var dp, ep decParts - if nan := checkNan(d, e, &dp, &ep); nan != nil { - return *nan + if nan, is := checkNan(d, e, &dp, &ep); is { + return nan } var ans decParts ans.sign = dp.sign ^ ep.sign @@ -312,8 +312,8 @@ func (d Decimal64) Sqrt() Decimal64 { // Add computes d + e func (ctx Context64) Add(d, e Decimal64) Decimal64 { var dp, ep decParts - if nan := checkNan(d, e, &dp, &ep); nan != nil { - return *nan + if nan, is := checkNan(d, e, &dp, &ep); is { + return nan } if dp.fl == flInf || ep.fl == flInf { if dp.fl != flInf { @@ -371,8 +371,8 @@ func (ctx Context64) Sub(d, e Decimal64) Decimal64 { // FMA computes d*e + f func (ctx Context64) FMA(d, e, f Decimal64) Decimal64 { var dp, ep, fp decParts - if nan := checkNan3(d, e, f, &dp, &ep, &fp); nan != nil { - return *nan + if nan, is := checkNan3(d, e, f, &dp, &ep, &fp); is { + return nan } var ans decParts ans.sign = dp.sign ^ ep.sign @@ -422,8 +422,8 @@ func (ctx Context64) FMA(d, e, f Decimal64) Decimal64 { // Mul computes d * e. func (ctx Context64) Mul(d, e Decimal64) Decimal64 { var dp, ep decParts - if nan := checkNan(d, e, &dp, &ep); nan != nil { - return *nan + if nan, is := checkNan(d, e, &dp, &ep); is { + return nan } var ans decParts ans.sign = dp.sign ^ ep.sign @@ -554,8 +554,8 @@ var ( ) func (ctx Context64) roundRefRaw(d, e Decimal64, dp, ep *decParts) Decimal64 { - if nan := checkNan(d, e, dp, ep); nan != nil { - return *nan + if nan, is := checkNan(d, e, dp, ep); is { + return nan } if dp.fl == flInf || ep.fl == flInf { if dp.fl == flInf && ep.fl == flInf { From 823fe5852d74a20df75e938b29624e7ff018b187 Mon Sep 17 00:00:00 2001 From: Marcelo Cantos <13160581+anzdaddy@users.noreply.github.com> Date: Tue, 26 Nov 2024 20:24:18 +1100 Subject: [PATCH 66/68] wip --- decimal64fmt_test.go | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/decimal64fmt_test.go b/decimal64fmt_test.go index 00677e6..67ac704 100644 --- a/decimal64fmt_test.go +++ b/decimal64fmt_test.go @@ -97,10 +97,8 @@ func BenchmarkIODecimal64String2(b *testing.B) { QNaN64, Infinity64, } - j := 0 for i := 0; i <= b.N; i++ { - _ = dd[j%len(dd)].String() - j++ + _ = dd[i%len(dd)].String() } } From d1e8d1795a97e0da5763a935f7242f8b29cc327e Mon Sep 17 00:00:00 2001 From: Marcelo Cantos <13160581+anzdaddy@users.noreply.github.com> Date: Tue, 26 Nov 2024 21:17:50 +1100 Subject: [PATCH 67/68] wip --- .github/workflows/go.yml | 4 +++- Makefile | 33 +++++++++++++++++++++++++++++++-- 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index d079c30..a171dcb 100644 --- a/.github/workflows/go.yml +++ b/.github/workflows/go.yml @@ -25,7 +25,9 @@ jobs: fi - name: Test Basic - run: go test -v -race ./... + run: make ci + env: + GOTESTFLAGS: -race - name: Test 32 bit system run: GOARCH=386 go test ./... diff --git a/Makefile b/Makefile index 6e9dc36..9b310fa 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,8 @@ .PHONY: all all: test-all build-linux lint +.PHONY: ci +ci: test-all no-allocs .PHONY: test-all test-all: test test-32 @@ -12,7 +14,11 @@ test: .PHONY: test-32 test-32: - $(DOCKERRUN) -e GOARCH=arm golang:1.23.0 go test $(GOTESTFLAGS) + if [ "$(shell go env GOOS)" = "linux" ]; then \ + GOARCH=386 go test $(GOTESTFLAGS); \ + else \ + $(DOCKERRUN) -e GOARCH=arm golang:1.23.0 go test $(GOTESTFLAGS); \ + fi .PHONY: build-linux build-linux: @@ -67,4 +73,27 @@ bench.stat: bench.txt benchstat bench.old $< > $@ || (rm -f $@; false) bench.txt: test - go test -run=^$$ -bench=. -benchmem $(GOBENCHFLAGS) > $@ || (rm -f $@; false) + go test -run=^$$ -bench=. -benchmem $(GOBENCHFLAGS) | tee $@ || (rm -f $@; false) + +NOALLOC = \ + BenchmarkIODecimal64String2 \ + BenchmarkIODecimal64Append \ + BenchmarkDecimal64Abs \ + BenchmarkDecimal64Add \ + BenchmarkDecimal64Cmp \ + BenchmarkDecimal64Mul \ + BenchmarkFloat64Mul \ + BenchmarkDecimal64Quo \ + BenchmarkDecimal64Sqrt \ + BenchmarkDecimal64Sub + +no-allocs: + allocs=$$( \ + go test -run=^$$ -bench="^($$(echo $(NOALLOC) | sed 's/ /|/g'))$$" -benchmem $(GOBENCHFLAGS) | \ + awk '/^Benchmark/ {if ($$7 != "0") print}' \ + ); \ + if [ -n "$$allocs" ]; then \ + echo "** alloc regression **"; \ + echo "$$allocs"; \ + false; \ + fi From ddba88087745e43db207928af3c261bc4e25da99 Mon Sep 17 00:00:00 2001 From: Marcelo Cantos <13160581+anzdaddy@users.noreply.github.com> Date: Tue, 26 Nov 2024 21:21:14 +1100 Subject: [PATCH 68/68] wip --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 9b310fa..2df5399 100644 --- a/Makefile +++ b/Makefile @@ -15,7 +15,7 @@ test: .PHONY: test-32 test-32: if [ "$(shell go env GOOS)" = "linux" ]; then \ - GOARCH=386 go test $(GOTESTFLAGS); \ + GOARCH=386 go test $(subst -race,,$(GOTESTFLAGS)); \ else \ $(DOCKERRUN) -e GOARCH=arm golang:1.23.0 go test $(GOTESTFLAGS); \ fi