From 20ee4a190d248e956b2c62a703a7d9802d56be8c Mon Sep 17 00:00:00 2001 From: Quang Mai Date: Sun, 13 Oct 2024 20:26:33 +0700 Subject: [PATCH] chores: add examples to doc_test.go --- .github/workflows/ci.yaml | 67 ++ .github/workflows/codecov.yaml | 28 + Makefile | 9 +- README.md | 19 +- benchmarks/BENCHMARKS.md | 143 ++++ benchmarks/bench-ss.txt | 1392 ++++++++++++++++---------------- benchmarks/bench-udec.txt | 1376 +++++++++++++++---------------- benchmarks/benchmarks_test.go | 4 +- benchmarks/benchstat.txt | 297 +++---- bint.go | 40 +- codec.go | 55 +- codec_test.go | 22 +- decimal.go | 464 +++++------ decimal_test.go | 265 ++---- doc_test.go | 430 +++++++++- fuzz_test.go | 226 +++--- u128.go | 2 +- u256.go | 4 +- 18 files changed, 2721 insertions(+), 2122 deletions(-) create mode 100644 .github/workflows/ci.yaml create mode 100644 .github/workflows/codecov.yaml create mode 100644 benchmarks/BENCHMARKS.md diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml new file mode 100644 index 0000000..e36d109 --- /dev/null +++ b/.github/workflows/ci.yaml @@ -0,0 +1,67 @@ +name: CI + +on: + pull_request: + +jobs: + lint: + runs-on: ubuntu-latest + steps: + - name: Check out code into the Go module directory + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Setup Go + uses: actions/setup-go@v5 + with: + go-version-file: go.mod + + - name: Run lint check + uses: reviewdog/action-golangci-lint@v2 + with: + reporter: github-pr-review + go_version_file: go.mod + + test: + strategy: + matrix: + go-version: [oldstable, stable] + os: [ubuntu-latest, windows-latest, macos-latest] + runs-on: ${{ matrix.os }} + steps: + - name: Check out code into the Go module directory + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Setup Go + uses: actions/setup-go@v5 + with: + go-version-file: go.mod + + - name: Run tests + run: go test -tags='!fuzz' -v -race -failfast -coverprofile="coverage.txt" -covermode=atomic ./... + + - name: Codecov + if: matrix.os == 'ubuntu-latest' && matrix.go-version == 'stable' + uses: codecov/codecov-action@v4 + with: + token: ${{ secrets.CODECOV_TOKEN }} + + fuzz: + runs-on: ubuntu-latest + steps: + - name: Check out code into the Go module directory + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Setup Go + uses: actions/setup-go@v5 + with: + go-version-file: go.mod + + - name: Run fuzz tests + shell: bash + run: make fuzz-all diff --git a/.github/workflows/codecov.yaml b/.github/workflows/codecov.yaml new file mode 100644 index 0000000..d85cc4d --- /dev/null +++ b/.github/workflows/codecov.yaml @@ -0,0 +1,28 @@ +name: CodeCov + +on: + push: + branches: + - master + +jobs: + test: + runs-on: ubuntu-latest + steps: + - name: Check out code into the Go module directory + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Setup Go + uses: actions/setup-go@v5 + with: + go-version-file: go.mod + + - name: Run tests + run: go test -tags='!fuzz' -v -race -failfast -coverprofile="coverage.txt" -covermode=atomic ./... + + - name: Codecov + uses: codecov/codecov-action@v4 + with: + token: ${{ secrets.CODECOV_TOKEN }} diff --git a/Makefile b/Makefile index 3851361..dc57919 100644 --- a/Makefile +++ b/Makefile @@ -5,7 +5,7 @@ lint: test: # run all unit-tests, ignore fuzz tests - @go test -tags='!fuzz' -v -race -failfast -coverprofile=coverage.out -covermode=atomic ./... + @go test -tags='!fuzz' -v -race -failfast -coverprofile=coverage.txt -covermode=atomic ./... @go tool cover -html=coverage.out fuzz: @@ -13,10 +13,11 @@ fuzz: @go test -tags='fuzz' -v -run=Fuzz -fuzz=$(fuzzName) -fuzztime=30s -timeout=10m fuzz-all: - echo "Run all fuzz tests" - for fuzz_test in $(shell go test -list "^Fuzz" $$fuzz_pkg | grep "^Fuzz"); do \ + @echo "Run all fuzz tests" + $(eval fuzz_pkg := $(shell go test -list "^Fuzz" $$fuzz_pkg | grep "^Fuzz")) + for fuzz_test in $(fuzz_pkg); do \ echo "Fuzzing $$fuzz_test in $$fuzz_pkg ..."; \ - go test -tags='fuzz' -run=Fuzz -fuzz=$$fuzz_test -fuzztime=120s $$fuzz_pkg -timeout=10m || exit 1; \ + go test -tags='fuzz' -run=Fuzz -fuzz=$$fuzz_test -fuzztime=30s $$fuzz_pkg -timeout=10m || exit 1; \ done \ bench: diff --git a/README.md b/README.md index fa3c1ea..2876a76 100644 --- a/README.md +++ b/README.md @@ -14,8 +14,9 @@ go get github.com/quagmt/udecimal ## Features - **High Precision**: Supports up to 19 decimal places with no precision loss during arithmetic operations. -- **Optimized for Speed**: Designed for high performance with zero memory allocation in most cases (see [benchmarks](#benchmarks) and [How it works](#how-it-works)). +- **Optimized for Speed**: Designed for high performance with zero memory allocation in most cases (see [Benchmarks](benchmarks/BENCHMARKS.md) and [How it works](#how-it-works)). - **Panic-Free**: All errors are returned as values, ensuring no unexpected panics. +- **Immutable**: All arithmetic operations return a new `Decimal` value, preserving the original value and safe for concurrent use. - **Versatile Rounding Methods**: Includes HALF AWAY FROM ZERO, HALF TOWARD ZERO, and Banker's rounding.
@@ -23,7 +24,7 @@ go get github.com/quagmt/udecimal ## Documentation -- Checkout [documentation](#docs) and [FAQ](FAQ.md) for more information. +- Checkout [documentation](#docs) for more information. ## Usage @@ -70,9 +71,9 @@ func main() { ## Rounding Methods -Rounding can be challenging and often confusing, as there are [numerous ways](https://www.mathsisfun.com/numbers/rounding-methods.html) to round a number. Each method has specific use cases, and developers frequently make mistakes or incorrect assumptions about rounding. For instance, round(1.5) might result in either 1 or 2, depending on the chosen rounding method. +Rounding numbers can often be challenging and confusing due to the [variety of methods](https://www.mathsisfun.com/numbers/rounding-methods.html) available. Each method serves specific purposes, and it's common for developers to make mistakes or incorrect assumptions about how rounding should be performed. For example, the result of `round(1.45)` could be either 1.4 or 1.5, depending on the rounding method used. -This issue is particularly critical in financial applications, where even minor rounding mistakes can be accumulated and result in significant financial losses. To prevent such mistakes, this library avoids implicit rounding and requires developers to explicitly invoke the rounding method. The supported rounding methods are: +This issue is particularly critical in financial applications, where even minor rounding errors can accumulate and lead to significant financial losses. To mitigate such errors, this library intentionally avoids implicit rounding. If the result of an operation exceeds the maximum precision specified by developers beforehand, **extra digits are truncated**. Developers need to explicitly choose the rounding method they want to use. The supported rounding methods are: - [Banker's rounding](https://en.wikipedia.org/wiki/Rounding#Rounding_half_to_even) or round half to even - [Half away from zero](https://en.wikipedia.org/wiki/Rounding#Rounding_half_away_from_zero) (HAZ) @@ -104,22 +105,22 @@ func main() { As mentioned above, this library is not always memory allocation free. To understand why, let's take a look at how the `Decimal` type is implemented. -The `Decimal` type represents a fixed-point decimal number. It consists of three components: sign, coefficient, and scale. The number is represented as: +The `Decimal` type represents a fixed-point decimal number. It consists of three components: sign, coefficient, and prec. The number is represented as: ```go -// decimal value = (neg == true ? -1 : 1) * coef * 10^(-scale) +// decimal value = (neg == true ? -1 : 1) * coef * 10^(-prec) type Decimal struct { neg bool coef bint - scale uint8 // 0 <= scale <= 19 + prec uint8 // 0 <= prec <= 19 } // Example: // 123.456 = 123456 * 10^-3 -// -> neg = false, coef = 123456, scale = 3 +// -> neg = false, coef = 123456, prec = 3 // -123.456 = -123456 / 10^-3 -// -> neg = true, coef = 123456, scale = 3 +// -> neg = true, coef = 123456, prec = 3 ```
diff --git a/benchmarks/BENCHMARKS.md b/benchmarks/BENCHMARKS.md new file mode 100644 index 0000000..031471f --- /dev/null +++ b/benchmarks/BENCHMARKS.md @@ -0,0 +1,143 @@ +# Benchmarks + +This section provides benchmarks for the `udecimal` library in comparision with [shopspring/decimal](https://github.com/shopspring/decimal). The results are for references and can be varied depending on the hardware. + +For full benchmark details, checkout [benchmark-udec.txt](./bench-ss.txt) and [benchstat.txt](./benchstat.txt) + +### Environment + +``` +goos: linux +goarch: amd64 +pkg: github.com/quagmt/udecimal/benchmarks +cpu: Intel(R) Core(TM) i9-14900HX +``` + +### Results + +``` +# Arithmetic operations +BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1111.1789)-32 100000000 10.91 ns/op 0 B/op 0 allocs/op +BenchmarkAdd/548751.15465466546.Add(1542.456487)-32 100000000 11.44 ns/op 0 B/op 0 allocs/op +BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1111.1789)-32 96477370 13.21 ns/op 0 B/op 0 allocs/op +BenchmarkSub/123.456.Sub(0.123)-32 100000000 10.75 ns/op 0 B/op 0 allocs/op +BenchmarkMul/1234.1234567890123456879.Mul(1111.1789)-32 100000000 10.43 ns/op 0 B/op 0 allocs/op +BenchmarkMul/1234.1234567890123456879.Mul(1111.1234567890123456789)-32 100000000 10.49 ns/op 0 B/op 0 allocs/op +BenchmarkDiv/1234567890123456789.1234567890123456879.Div(1111.1789)-32 100000000 10.46 ns/op 0 B/op 0 allocs/op +BenchmarkDiv/12345.1234567890123456879.Div(1111.1234567890123456789)-32 50097552 25.23 ns/op 0 B/op 0 allocs/op +BenchmarkDiv/123.456.Div(0.123)-32 111231829 10.70 ns/op 0 B/op 0 allocs/op +BenchmarkDiv/548751.15465466546.Div(1542.456487)-32 100000000 10.30 ns/op 0 B/op 0 allocs/op +BenchmarkDivFallback/12345679012345679890123456789.1234567890123456789.Div(999999)-32 4187094 302.1 ns/op 264 B/op 7 allocs/op +BenchmarkDivFallback/1234.Div(12345679012345679890123456789.1234567890123456789)-32 3901846 306.7 ns/op 320 B/op 7 allocs/op +BenchmarkPow/1.01.Pow(10)-32 30365348 41.14 ns/op 0 B/op 0 allocs/op +BenchmarkPow/1.01.Pow(100)-32 994129 1137 ns/op 817 B/op 13 allocs/op + +# Codec +BenchmarkParse/1234567890123456789.1234567890123456879-32 15700467 78.16 ns/op 0 B/op 0 allocs/op +BenchmarkParse/1234567890-32 54752288 22.86 ns/op 0 B/op 0 allocs/op +BenchmarkParse/0.1234567890123456879-32 28947921 41.76 ns/op 0 B/op 0 allocs/op +BenchmarkParseFallBack/123456789123456789123456.1234567890123456-32 2805122 473.3 ns/op 192 B/op 6 allocs/op +BenchmarkParseFallBack/111222333444555666777888999.1234567890123456789-32 2442004 500.8 ns/op 216 B/op 6 allocs/op +BenchmarkString/1234567890123456789.1234567890123456879-32 12797790 98.69 ns/op 48 B/op 1 allocs/op +BenchmarkString/0.1234567890123456879-32 18784728 57.20 ns/op 24 B/op 1 allocs/op +BenchmarkStringFallBack/123456789123456789123456.1234567890123456-32 4147044 256.2 ns/op 208 B/op 4 allocs/op +BenchmarkStringFallBack/111222333444555666777888999.1234567890123456789-32 3808071 313.3 ns/op 208 B/op 4 allocs/op + +# Marshal/Unmarshal +BenchmarkMarshalJSON/1234567890123456789.1234567890123456879-32 15796016 96.75 ns/op 48 B/op 1 allocs/op +BenchmarkMarshalJSON/0.1234567890123456879-32 22017422 54.95 ns/op 24 B/op 1 allocs/op +BenchmarkMarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 3445560 291.6 ns/op 320 B/op 5 allocs/op +BenchmarkUnmarshalJSON/1234567890123456789.1234567890123456879-32 15943234 73.77 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalJSON/123456.123456-32 46983879 26.55 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 2267604 517.4 ns/op 264 B/op 6 allocs/op +BenchmarkMarshalBinary/1234567890123456789.1234567890123456879-32 50875198 25.97 ns/op 24 B/op 1 allocs/op +BenchmarkMarshalBinary/0.1234567890123456879-32 54470340 20.91 ns/op 16 B/op 1 allocs/op +BenchmarkMarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 21138375 48.85 ns/op 32 B/op 1 allocs/op +BenchmarkUnmarshalBinary/1234567890123456789.1234567890123456879-32 554818034 2.034 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalBinary/0.1234567890123456879-32 637610913 1.822 ns/op 0 B/op 0 allocs/op +``` + +### Comparision with shopspring/decimal + +``` +# sec/op + │ shopspring │ udecimal │ + │ sec/op │ sec/op vs base │ +Parse/1234567890123456789.1234567890123456879-32 384.35n ± 10% 75.55n ± 3% -80.34% (p=0.000 n=10) +Parse/0.1234567890123456879-32 262.30n ± 17% 40.64n ± 3% -84.51% (p=0.000 n=10) +ParseFallBack/123456789123456789123456.1234567890123456-32 373.2n ± 13% 418.3n ± 7% +12.08% (p=0.000 n=10) +ParseFallBack/111222333444555666777888999.1234567890123456789-32 418.5n ± 5% 453.4n ± 9% +8.33% (p=0.003 n=10) +String/1234567890123456789.1234567890123456879-32 284.45n ± 26% 97.61n ± 11% -65.68% (p=0.000 n=10) +String/0.1234567890123456879-32 173.80n ± 15% 58.94n ± 15% -66.09% (p=0.000 n=10) +StringFallBack/123456789123456789123456.1234567890123456-32 394.1n ± 15% 268.4n ± 22% -31.90% (p=0.000 n=10) +StringFallBack/111222333444555666777888999.1234567890123456789-32 353.4n ± 26% 307.3n ± 6% -13.04% (p=0.004 n=10) +Add/1234567890123456789.1234567890123456879.Add(1111.1789)-32 384.65n ± 10% 10.87n ± 3% -97.18% (p=0.000 n=10) +Add/123456.123456.Add(456781244.1324897546)-32 326.95n ± 13% 11.27n ± 2% -96.55% (p=0.000 n=10) +Add/548751.15465466546.Add(1542.456487)-32 346.55n ± 10% 11.46n ± 3% -96.69% (p=0.000 n=10) +Sub/123.456.Sub(0.123)-32 64.67n ± 14% 10.79n ± 5% -83.32% (p=0.000 n=10) +Sub/123456.123456.Sub(456781244.1324897546)-32 312.40n ± 16% 12.96n ± 4% -95.85% (p=0.000 n=10) +Sub/548751.15465466546.Sub(1542.456487)-32 378.95n ± 7% 12.62n ± 4% -96.67% (p=0.000 n=10) +Mul/1234.1234567890123456879.Mul(1111.1789)-32 111.80n ± 5% 10.44n ± 3% -90.66% (p=0.000 n=10) +Mul/1234.1234567890123456879.Mul(1111.1234567890123456789)-32 121.45n ± 11% 10.55n ± 4% -91.31% (p=0.000 n=10) +Mul/123456.123456.Mul(456781244.1324897546)-32 100.300n ± 8% 9.964n ± 1% -90.07% (p=0.000 n=10) +Mul/548751.15465466546.Mul(1542.456487)-32 103.200n ± 6% 9.943n ± 1% -90.37% (p=0.000 n=10) +Div/1234567890123456789.1234567890123456879.Div(1111.1789)-32 531.55n ± 9% 10.38n ± 3% -98.05% (p=0.000 n=10) +Div/1234567890123456789.1234567890123456879.Div(9876543210987654321.1234567890123456789)-32 489.35n ± 22% 16.85n ± 4% -96.56% (p=0.000 n=10) +Div/548751.15465466546.Div(1542.456487)-32 586.90n ± 12% 10.34n ± 3% -98.24% (p=0.000 n=10) +DivFallback/12345679012345679890123456789.1234567890123456789.Div(999999)-32 762.1n ± 7% 302.9n ± 7% -60.26% (p=0.000 n=10) +DivFallback/1234.Div(12345679012345679890123456789.1234567890123456789)-32 242.1n ± 87% 292.9n ± 4% ~ (p=0.481 n=10) +Pow/1.01.Pow(10)-32 724.70n ± 31% 40.83n ± 3% -94.37% (p=0.000 n=10) +Pow/1.01.Pow(100)-32 1.367µ ± 8% 1.062µ ± 7% -22.28% (p=0.000 n=10) +MarshalJSON/1234567890123456789.1234567890123456879-32 451.65n ± 6% 96.56n ± 7% -78.62% (p=0.000 n=10) +MarshalJSON/0.1234567890123456879-32 204.70n ± 7% 54.62n ± 8% -73.32% (p=0.000 n=10) +MarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 523.6n ± 15% 358.4n ± 7% -31.55% (p=0.000 n=10) +UnmarshalJSON/1234567890123456789.1234567890123456879-32 488.90n ± 10% 73.75n ± 1% -84.92% (p=0.000 n=10) +UnmarshalJSON/0.1234567890123456879-32 449.70n ± 9% 40.97n ± 1% -90.89% (p=0.000 n=10) +UnmarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 662.6n ± 9% 498.7n ± 8% -24.75% (p=0.000 n=10) +MarshalBinary/1234567890123456789.1234567890123456879-32 48.72n ± 21% 27.32n ± 5% -43.92% (p=0.000 n=10) +MarshalBinary/0.1234567890123456879-32 46.45n ± 10% 20.70n ± 5% -55.42% (p=0.000 n=10) +MarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 64.40n ± 33% 46.68n ± 5% ~ (p=0.109 n=10) +UnmarshalBinary/1234567890123456789.1234567890123456879-32 59.150n ± 31% 2.101n ± 2% -96.45% (p=0.000 n=10) +UnmarshalBinary/0.1234567890123456879-32 45.120n ± 18% 1.891n ± 5% -95.81% (p=0.000 n=10) +UnmarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 72.44n ± 11% 77.96n ± 4% ~ (p=0.210 n=10) + + +# B/op + │ shopspring │ udecimal │ + │ B/op │ B/op vs base │ +Parse/1234567890123456789.1234567890123456879-32 168.0 ± 0% 0.0 ± 0% -100.00% (p=0.000 n=10) +Parse/0.1234567890123456879-32 144.0 ± 0% 0.0 ± 0% -100.00% (p=0.000 n=10) +ParseFallBack/123456789123456789123456.1234567890123456-32 168.0 ± 0% 192.0 ± 0% +14.29% (p=0.000 n=10) +ParseFallBack/111222333444555666777888999.1234567890123456789-32 168.0 ± 0% 216.0 ± 0% +28.57% (p=0.000 n=10) +String/1234567890123456789.1234567890123456879-32 240.00 ± 0% 48.00 ± 0% -80.00% (p=0.000 n=10) +String/0.1234567890123456879-32 80.00 ± 0% 24.00 ± 0% -70.00% (p=0.000 n=10) +StringFallBack/123456789123456789123456.1234567890123456-32 272.0 ± 0% 208.0 ± 0% -23.53% (p=0.000 n=10) +StringFallBack/111222333444555666777888999.1234567890123456789-32 272.0 ± 0% 208.0 ± 0% -23.53% (p=0.000 n=10) +Add/1234567890123456789.1234567890123456879.Add(1111.1789)-32 288.0 ± 0% 0.0 ± 0% -100.00% (p=0.000 n=10) +Add/1234567890123456789.1234567890123456879.Add(1234567890123456789.1234567890123456789)-32 96.00 ± 0% 0.00 ± 0% -100.00% (p=0.000 n=10) +Add/548751.15465466546.Add(1542.456487)-32 272.0 ± 0% 0.0 ± 0% -100.00% (p=0.000 n=10) +Sub/123.456.Sub(0.123)-32 40.00 ± 0% 0.00 ± 0% -100.00% (p=0.000 n=10) +Sub/123456.123456.Sub(456781244.1324897546)-32 232.0 ± 0% 0.0 ± 0% -100.00% (p=0.000 n=10) +Sub/548751.15465466546.Sub(1542.456487)-32 232.0 ± 0% 0.0 ± 0% -100.00% (p=0.000 n=10) +Mul/1234.1234567890123456879.Mul(1111.1789)-32 96.00 ± 0% 0.00 ± 0% -100.00% (p=0.000 n=10) +Mul/1234.1234567890123456879.Mul(1111.1234567890123456789)-32 96.00 ± 0% 0.00 ± 0% -100.00% (p=0.000 n=10) +Mul/548751.15465466546.Mul(1542.456487)-32 80.00 ± 0% 0.00 ± 0% -100.00% (p=0.000 n=10) +Div/1234567890123456789.1234567890123456879.Div(1111.1789)-32 352.0 ± 0% 0.0 ± 0% -100.00% (p=0.000 n=10) +Div/1234567890123456789.1234567890123456879.Div(9876543210987654321.1234567890123456789)-32 336.0 ± 0% 0.0 ± 0% -100.00% (p=0.000 n=10) +Div/548751.15465466546.Div(1542.456487)-32 368.0 ± 0% 0.0 ± 0% -100.00% (p=0.000 n=10) +DivFallback/12345679012345679890123456789.1234567890123456789.Div(999999)-32 496.0 ± 0% 264.0 ± 0% -46.77% (p=0.000 n=10) +DivFallback/1234.Div(12345679012345679890123456789.1234567890123456789)-32 272.0 ± 0% 320.0 ± 0% +17.65% (p=0.000 n=10) +Pow/1.01.Pow(10)-32 576.0 ± 0% 0.0 ± 0% -100.00% (p=0.000 n=10) +Pow/1.01.Pow(100)-32 1072.0 ± 0% 817.0 ± 0% -23.79% (p=0.000 n=10) +MarshalJSON/1234567890123456789.1234567890123456879-32 336.00 ± 0% 48.00 ± 0% -85.71% (p=0.000 n=10) +MarshalJSON/0.1234567890123456879-32 104.00 ± 0% 24.00 ± 0% -76.92% (p=0.000 n=10) +MarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 448.0 ± 0% 320.0 ± 0% -28.57% (p=0.000 n=10) +UnmarshalJSON/1234567890123456789.1234567890123456879-32 240.0 ± 0% 0.0 ± 0% -100.00% (p=0.000 n=10) +UnmarshalJSON/123456.123456-32 96.00 ± 0% 0.00 ± 0% -100.00% (p=0.000 n=10) +UnmarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 272.0 ± 0% 264.0 ± 0% -2.94% (p=0.000 n=10) +MarshalBinary/1234567890123456789.1234567890123456879-32 48.00 ± 0% 24.00 ± 0% -50.00% (p=0.000 n=10) +MarshalBinary/0.1234567890123456879-32 32.00 ± 0% 16.00 ± 0% -50.00% (p=0.000 n=10) +UnmarshalBinary/1234567890123456789.1234567890123456879-32 80.00 ± 0% 0.00 ± 0% -100.00% (p=0.000 n=10) +UnmarshalBinary/0.1234567890123456879-32 40.00 ± 0% 0.00 ± 0% -100.00% (p=0.000 n=10) +UnmarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 96.00 ± 0% 96.00 ± 0% ~ (p=1.000 n=10) ¹ +``` diff --git a/benchmarks/bench-ss.txt b/benchmarks/bench-ss.txt index 3d81898..94e8b13 100644 --- a/benchmarks/bench-ss.txt +++ b/benchmarks/bench-ss.txt @@ -2,695 +2,705 @@ goos: linux goarch: amd64 pkg: github.com/quagmt/udecimal/benchmarks cpu: Intel(R) Core(TM) i9-14900HX -BenchmarkParse/1234567890123456789.1234567890123456879-32 3199232 376.6 ns/op 168 B/op 5 allocs/op -BenchmarkParse/1234567890123456789.1234567890123456879-32 3261692 331.3 ns/op 168 B/op 5 allocs/op -BenchmarkParse/1234567890123456789.1234567890123456879-32 3179546 398.1 ns/op 168 B/op 5 allocs/op -BenchmarkParse/1234567890123456789.1234567890123456879-32 3290259 336.0 ns/op 168 B/op 5 allocs/op -BenchmarkParse/1234567890123456789.1234567890123456879-32 3306807 368.4 ns/op 168 B/op 5 allocs/op -BenchmarkParse/1234567890123456789.1234567890123456879-32 3339904 346.3 ns/op 168 B/op 5 allocs/op -BenchmarkParse/1234567890123456789.1234567890123456879-32 2797591 436.3 ns/op 168 B/op 5 allocs/op -BenchmarkParse/1234567890123456789.1234567890123456879-32 3816718 308.5 ns/op 168 B/op 5 allocs/op -BenchmarkParse/1234567890123456789.1234567890123456879-32 2515520 400.0 ns/op 168 B/op 5 allocs/op -BenchmarkParse/1234567890123456789.1234567890123456879-32 3215374 377.3 ns/op 168 B/op 5 allocs/op -BenchmarkParse/123-32 20755017 76.99 ns/op 40 B/op 2 allocs/op -BenchmarkParse/123-32 17420380 81.02 ns/op 40 B/op 2 allocs/op -BenchmarkParse/123-32 15984333 75.78 ns/op 40 B/op 2 allocs/op -BenchmarkParse/123-32 17030114 72.18 ns/op 40 B/op 2 allocs/op -BenchmarkParse/123-32 24991179 69.06 ns/op 40 B/op 2 allocs/op -BenchmarkParse/123-32 16357174 77.37 ns/op 40 B/op 2 allocs/op -BenchmarkParse/123-32 27470822 69.09 ns/op 40 B/op 2 allocs/op -BenchmarkParse/123-32 14157742 75.28 ns/op 40 B/op 2 allocs/op -BenchmarkParse/123-32 25410450 59.94 ns/op 40 B/op 2 allocs/op -BenchmarkParse/123-32 26425275 69.21 ns/op 40 B/op 2 allocs/op -BenchmarkParse/123456.123456-32 11537316 127.2 ns/op 56 B/op 3 allocs/op -BenchmarkParse/123456.123456-32 10702610 112.9 ns/op 56 B/op 3 allocs/op -BenchmarkParse/123456.123456-32 8693282 121.7 ns/op 56 B/op 3 allocs/op -BenchmarkParse/123456.123456-32 9763092 110.6 ns/op 56 B/op 3 allocs/op -BenchmarkParse/123456.123456-32 10799931 115.7 ns/op 56 B/op 3 allocs/op -BenchmarkParse/123456.123456-32 14951643 97.74 ns/op 56 B/op 3 allocs/op -BenchmarkParse/123456.123456-32 14181944 105.3 ns/op 56 B/op 3 allocs/op -BenchmarkParse/123456.123456-32 10651357 106.4 ns/op 56 B/op 3 allocs/op -BenchmarkParse/123456.123456-32 14908690 113.0 ns/op 56 B/op 3 allocs/op -BenchmarkParse/123456.123456-32 10057467 116.3 ns/op 56 B/op 3 allocs/op -BenchmarkParse/1234567890-32 17343841 72.18 ns/op 40 B/op 2 allocs/op -BenchmarkParse/1234567890-32 20204780 64.89 ns/op 40 B/op 2 allocs/op -BenchmarkParse/1234567890-32 25060065 73.40 ns/op 40 B/op 2 allocs/op -BenchmarkParse/1234567890-32 21154540 73.48 ns/op 40 B/op 2 allocs/op -BenchmarkParse/1234567890-32 17453686 71.42 ns/op 40 B/op 2 allocs/op -BenchmarkParse/1234567890-32 20124480 71.62 ns/op 40 B/op 2 allocs/op -BenchmarkParse/1234567890-32 17101478 69.14 ns/op 40 B/op 2 allocs/op -BenchmarkParse/1234567890-32 14051356 75.03 ns/op 40 B/op 2 allocs/op -BenchmarkParse/1234567890-32 14275670 76.59 ns/op 40 B/op 2 allocs/op -BenchmarkParse/1234567890-32 18770084 70.23 ns/op 40 B/op 2 allocs/op -BenchmarkParse/0.1234567890123456879-32 4046400 267.6 ns/op 144 B/op 5 allocs/op -BenchmarkParse/0.1234567890123456879-32 4377144 289.3 ns/op 144 B/op 5 allocs/op -BenchmarkParse/0.1234567890123456879-32 5945733 264.5 ns/op 144 B/op 5 allocs/op -BenchmarkParse/0.1234567890123456879-32 4400296 283.6 ns/op 144 B/op 5 allocs/op -BenchmarkParse/0.1234567890123456879-32 5156121 237.8 ns/op 144 B/op 5 allocs/op -BenchmarkParse/0.1234567890123456879-32 5326714 258.8 ns/op 144 B/op 5 allocs/op -BenchmarkParse/0.1234567890123456879-32 4890754 243.2 ns/op 144 B/op 5 allocs/op -BenchmarkParse/0.1234567890123456879-32 5028973 287.3 ns/op 144 B/op 5 allocs/op -BenchmarkParse/0.1234567890123456879-32 4559511 245.7 ns/op 144 B/op 5 allocs/op -BenchmarkParse/0.1234567890123456879-32 4517314 267.4 ns/op 144 B/op 5 allocs/op -BenchmarkParseFallBack/123456789123456789123456.1234567890123456-32 3693334 347.3 ns/op 168 B/op 5 allocs/op -BenchmarkParseFallBack/123456789123456789123456.1234567890123456-32 3041985 372.2 ns/op 168 B/op 5 allocs/op -BenchmarkParseFallBack/123456789123456789123456.1234567890123456-32 3450841 365.3 ns/op 168 B/op 5 allocs/op -BenchmarkParseFallBack/123456789123456789123456.1234567890123456-32 3016870 382.5 ns/op 168 B/op 5 allocs/op -BenchmarkParseFallBack/123456789123456789123456.1234567890123456-32 4268628 371.1 ns/op 168 B/op 5 allocs/op -BenchmarkParseFallBack/123456789123456789123456.1234567890123456-32 3063380 326.8 ns/op 168 B/op 5 allocs/op -BenchmarkParseFallBack/123456789123456789123456.1234567890123456-32 3462181 345.1 ns/op 168 B/op 5 allocs/op -BenchmarkParseFallBack/123456789123456789123456.1234567890123456-32 3591902 381.5 ns/op 168 B/op 5 allocs/op -BenchmarkParseFallBack/123456789123456789123456.1234567890123456-32 3294019 342.7 ns/op 168 B/op 5 allocs/op -BenchmarkParseFallBack/123456789123456789123456.1234567890123456-32 3527811 342.0 ns/op 168 B/op 5 allocs/op -BenchmarkParseFallBack/111222333444555666777888999.1234567890123456789-32 3112117 364.8 ns/op 168 B/op 5 allocs/op -BenchmarkParseFallBack/111222333444555666777888999.1234567890123456789-32 2827292 382.4 ns/op 168 B/op 5 allocs/op -BenchmarkParseFallBack/111222333444555666777888999.1234567890123456789-32 3294252 406.6 ns/op 168 B/op 5 allocs/op -BenchmarkParseFallBack/111222333444555666777888999.1234567890123456789-32 3368461 385.6 ns/op 168 B/op 5 allocs/op -BenchmarkParseFallBack/111222333444555666777888999.1234567890123456789-32 2828840 376.3 ns/op 168 B/op 5 allocs/op -BenchmarkParseFallBack/111222333444555666777888999.1234567890123456789-32 3232101 330.9 ns/op 168 B/op 5 allocs/op -BenchmarkParseFallBack/111222333444555666777888999.1234567890123456789-32 3380047 368.0 ns/op 168 B/op 5 allocs/op -BenchmarkParseFallBack/111222333444555666777888999.1234567890123456789-32 3300162 367.1 ns/op 168 B/op 5 allocs/op -BenchmarkParseFallBack/111222333444555666777888999.1234567890123456789-32 3492784 338.0 ns/op 168 B/op 5 allocs/op -BenchmarkParseFallBack/111222333444555666777888999.1234567890123456789-32 3264657 367.3 ns/op 168 B/op 5 allocs/op -BenchmarkString/1234567890123456789.1234567890123456879-32 4222033 256.4 ns/op 240 B/op 5 allocs/op -BenchmarkString/1234567890123456789.1234567890123456879-32 4224567 276.1 ns/op 240 B/op 5 allocs/op -BenchmarkString/1234567890123456789.1234567890123456879-32 4806778 276.0 ns/op 240 B/op 5 allocs/op -BenchmarkString/1234567890123456789.1234567890123456879-32 4491465 257.9 ns/op 240 B/op 5 allocs/op -BenchmarkString/1234567890123456789.1234567890123456879-32 4100113 276.5 ns/op 240 B/op 5 allocs/op -BenchmarkString/1234567890123456789.1234567890123456879-32 4898936 266.7 ns/op 240 B/op 5 allocs/op -BenchmarkString/1234567890123456789.1234567890123456879-32 4563916 274.3 ns/op 240 B/op 5 allocs/op -BenchmarkString/1234567890123456789.1234567890123456879-32 4250610 279.6 ns/op 240 B/op 5 allocs/op -BenchmarkString/1234567890123456789.1234567890123456879-32 4396952 273.4 ns/op 240 B/op 5 allocs/op -BenchmarkString/1234567890123456789.1234567890123456879-32 3926886 276.6 ns/op 240 B/op 5 allocs/op -BenchmarkString/123-32 11520243 93.58 ns/op 48 B/op 4 allocs/op -BenchmarkString/123-32 13167669 96.08 ns/op 48 B/op 4 allocs/op -BenchmarkString/123-32 10569822 101.4 ns/op 48 B/op 4 allocs/op -BenchmarkString/123-32 13869265 96.81 ns/op 48 B/op 4 allocs/op -BenchmarkString/123-32 12450325 100.5 ns/op 48 B/op 4 allocs/op -BenchmarkString/123-32 13831152 91.91 ns/op 48 B/op 4 allocs/op -BenchmarkString/123-32 14215594 101.2 ns/op 48 B/op 4 allocs/op -BenchmarkString/123-32 13253346 99.44 ns/op 48 B/op 4 allocs/op -BenchmarkString/123-32 14300624 88.51 ns/op 48 B/op 4 allocs/op -BenchmarkString/123-32 13344433 91.08 ns/op 48 B/op 4 allocs/op -BenchmarkString/123456.123456-32 10421683 124.9 ns/op 56 B/op 4 allocs/op -BenchmarkString/123456.123456-32 9145635 120.1 ns/op 56 B/op 4 allocs/op -BenchmarkString/123456.123456-32 8815580 122.8 ns/op 56 B/op 4 allocs/op -BenchmarkString/123456.123456-32 10653115 104.5 ns/op 56 B/op 4 allocs/op -BenchmarkString/123456.123456-32 8936880 120.5 ns/op 56 B/op 4 allocs/op -BenchmarkString/123456.123456-32 10027922 114.0 ns/op 56 B/op 4 allocs/op -BenchmarkString/123456.123456-32 9645556 111.7 ns/op 56 B/op 4 allocs/op -BenchmarkString/123456.123456-32 9720620 114.0 ns/op 56 B/op 4 allocs/op -BenchmarkString/123456.123456-32 11439937 103.5 ns/op 56 B/op 4 allocs/op -BenchmarkString/123456.123456-32 13394108 122.8 ns/op 56 B/op 4 allocs/op -BenchmarkString/1234567890-32 10553679 121.1 ns/op 72 B/op 4 allocs/op -BenchmarkString/1234567890-32 9870268 120.0 ns/op 72 B/op 4 allocs/op -BenchmarkString/1234567890-32 9517816 125.1 ns/op 72 B/op 4 allocs/op -BenchmarkString/1234567890-32 9660757 115.4 ns/op 72 B/op 4 allocs/op -BenchmarkString/1234567890-32 9249828 120.6 ns/op 72 B/op 4 allocs/op -BenchmarkString/1234567890-32 9182287 116.9 ns/op 72 B/op 4 allocs/op -BenchmarkString/1234567890-32 9507538 112.9 ns/op 72 B/op 4 allocs/op -BenchmarkString/1234567890-32 10707056 121.9 ns/op 72 B/op 4 allocs/op -BenchmarkString/1234567890-32 9614439 115.5 ns/op 72 B/op 4 allocs/op -BenchmarkString/1234567890-32 12131650 112.5 ns/op 72 B/op 4 allocs/op -BenchmarkString/0.1234567890123456879-32 7847252 148.0 ns/op 80 B/op 4 allocs/op -BenchmarkString/0.1234567890123456879-32 9177559 137.3 ns/op 80 B/op 4 allocs/op -BenchmarkString/0.1234567890123456879-32 7858824 152.5 ns/op 80 B/op 4 allocs/op -BenchmarkString/0.1234567890123456879-32 8588530 155.2 ns/op 80 B/op 4 allocs/op -BenchmarkString/0.1234567890123456879-32 9143456 141.7 ns/op 80 B/op 4 allocs/op -BenchmarkString/0.1234567890123456879-32 8222192 145.0 ns/op 80 B/op 4 allocs/op -BenchmarkString/0.1234567890123456879-32 7184566 139.8 ns/op 80 B/op 4 allocs/op -BenchmarkString/0.1234567890123456879-32 8776924 152.3 ns/op 80 B/op 4 allocs/op -BenchmarkString/0.1234567890123456879-32 8806288 137.4 ns/op 80 B/op 4 allocs/op -BenchmarkString/0.1234567890123456879-32 9261889 151.2 ns/op 80 B/op 4 allocs/op -BenchmarkStringFallBack/123456789123456789123456.1234567890123456-32 3647805 292.7 ns/op 272 B/op 5 allocs/op -BenchmarkStringFallBack/123456789123456789123456.1234567890123456-32 4021248 329.2 ns/op 272 B/op 5 allocs/op -BenchmarkStringFallBack/123456789123456789123456.1234567890123456-32 3634644 336.5 ns/op 272 B/op 5 allocs/op -BenchmarkStringFallBack/123456789123456789123456.1234567890123456-32 3632472 319.4 ns/op 272 B/op 5 allocs/op -BenchmarkStringFallBack/123456789123456789123456.1234567890123456-32 3584527 315.4 ns/op 272 B/op 5 allocs/op -BenchmarkStringFallBack/123456789123456789123456.1234567890123456-32 3846399 309.1 ns/op 272 B/op 5 allocs/op -BenchmarkStringFallBack/123456789123456789123456.1234567890123456-32 4094881 312.2 ns/op 272 B/op 5 allocs/op -BenchmarkStringFallBack/123456789123456789123456.1234567890123456-32 3651536 294.5 ns/op 272 B/op 5 allocs/op -BenchmarkStringFallBack/123456789123456789123456.1234567890123456-32 4734160 295.1 ns/op 272 B/op 5 allocs/op -BenchmarkStringFallBack/123456789123456789123456.1234567890123456-32 3944752 313.8 ns/op 272 B/op 5 allocs/op -BenchmarkStringFallBack/111222333444555666777888999.1234567890123456789-32 3767110 317.2 ns/op 272 B/op 5 allocs/op -BenchmarkStringFallBack/111222333444555666777888999.1234567890123456789-32 3817796 316.1 ns/op 272 B/op 5 allocs/op -BenchmarkStringFallBack/111222333444555666777888999.1234567890123456789-32 3846063 334.7 ns/op 272 B/op 5 allocs/op -BenchmarkStringFallBack/111222333444555666777888999.1234567890123456789-32 3786054 289.2 ns/op 272 B/op 5 allocs/op -BenchmarkStringFallBack/111222333444555666777888999.1234567890123456789-32 4002206 311.4 ns/op 272 B/op 5 allocs/op -BenchmarkStringFallBack/111222333444555666777888999.1234567890123456789-32 4020463 298.5 ns/op 272 B/op 5 allocs/op -BenchmarkStringFallBack/111222333444555666777888999.1234567890123456789-32 3854002 309.2 ns/op 272 B/op 5 allocs/op -BenchmarkStringFallBack/111222333444555666777888999.1234567890123456789-32 3600140 316.0 ns/op 272 B/op 5 allocs/op -BenchmarkStringFallBack/111222333444555666777888999.1234567890123456789-32 4174429 312.7 ns/op 272 B/op 5 allocs/op -BenchmarkStringFallBack/111222333444555666777888999.1234567890123456789-32 4039568 298.9 ns/op 272 B/op 5 allocs/op -BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1111.1789)-32 4141340 280.5 ns/op 288 B/op 8 allocs/op -BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1111.1789)-32 4284885 301.4 ns/op 288 B/op 8 allocs/op -BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1111.1789)-32 4139473 303.0 ns/op 288 B/op 8 allocs/op -BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1111.1789)-32 4277126 295.9 ns/op 288 B/op 8 allocs/op -BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1111.1789)-32 3729444 297.9 ns/op 288 B/op 8 allocs/op -BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1111.1789)-32 3973137 303.3 ns/op 288 B/op 8 allocs/op -BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1111.1789)-32 3950568 278.5 ns/op 288 B/op 8 allocs/op -BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1111.1789)-32 4137343 267.4 ns/op 288 B/op 8 allocs/op -BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1111.1789)-32 4014682 305.9 ns/op 288 B/op 8 allocs/op -BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1111.1789)-32 4014680 301.0 ns/op 288 B/op 8 allocs/op -BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1234567890123456789.1234567890123456789)-32 18909044 76.22 ns/op 96 B/op 2 allocs/op -BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1234567890123456789.1234567890123456789)-32 14818928 76.82 ns/op 96 B/op 2 allocs/op -BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1234567890123456789.1234567890123456789)-32 15848569 76.98 ns/op 96 B/op 2 allocs/op -BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1234567890123456789.1234567890123456789)-32 14999306 76.94 ns/op 96 B/op 2 allocs/op -BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1234567890123456789.1234567890123456789)-32 14642804 79.23 ns/op 96 B/op 2 allocs/op -BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1234567890123456789.1234567890123456789)-32 15911977 76.52 ns/op 96 B/op 2 allocs/op -BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1234567890123456789.1234567890123456789)-32 14807286 76.52 ns/op 96 B/op 2 allocs/op -BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1234567890123456789.1234567890123456789)-32 14357623 75.28 ns/op 96 B/op 2 allocs/op -BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1234567890123456789.1234567890123456789)-32 14485465 78.11 ns/op 96 B/op 2 allocs/op -BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1234567890123456789.1234567890123456789)-32 18891524 77.97 ns/op 96 B/op 2 allocs/op -BenchmarkAdd/123.456.Add(0.123)-32 15879019 72.28 ns/op 80 B/op 2 allocs/op -BenchmarkAdd/123.456.Add(0.123)-32 17603804 73.52 ns/op 80 B/op 2 allocs/op -BenchmarkAdd/123.456.Add(0.123)-32 16584162 71.89 ns/op 80 B/op 2 allocs/op -BenchmarkAdd/123.456.Add(0.123)-32 16438911 73.67 ns/op 80 B/op 2 allocs/op -BenchmarkAdd/123.456.Add(0.123)-32 16577376 69.92 ns/op 80 B/op 2 allocs/op -BenchmarkAdd/123.456.Add(0.123)-32 15247527 70.19 ns/op 80 B/op 2 allocs/op -BenchmarkAdd/123.456.Add(0.123)-32 14926285 71.81 ns/op 80 B/op 2 allocs/op -BenchmarkAdd/123.456.Add(0.123)-32 15985507 66.84 ns/op 80 B/op 2 allocs/op -BenchmarkAdd/123.456.Add(0.123)-32 15220746 71.23 ns/op 80 B/op 2 allocs/op -BenchmarkAdd/123.456.Add(0.123)-32 15044700 71.99 ns/op 80 B/op 2 allocs/op -BenchmarkAdd/3.Add(7)-32 15410571 72.71 ns/op 80 B/op 2 allocs/op -BenchmarkAdd/3.Add(7)-32 16185734 74.19 ns/op 80 B/op 2 allocs/op -BenchmarkAdd/3.Add(7)-32 16887945 70.10 ns/op 80 B/op 2 allocs/op -BenchmarkAdd/3.Add(7)-32 17410719 70.99 ns/op 80 B/op 2 allocs/op -BenchmarkAdd/3.Add(7)-32 16236045 71.42 ns/op 80 B/op 2 allocs/op -BenchmarkAdd/3.Add(7)-32 17401923 70.54 ns/op 80 B/op 2 allocs/op -BenchmarkAdd/3.Add(7)-32 15227036 73.95 ns/op 80 B/op 2 allocs/op -BenchmarkAdd/3.Add(7)-32 16382314 70.54 ns/op 80 B/op 2 allocs/op -BenchmarkAdd/3.Add(7)-32 16424275 72.37 ns/op 80 B/op 2 allocs/op -BenchmarkAdd/3.Add(7)-32 16330783 71.98 ns/op 80 B/op 2 allocs/op -BenchmarkAdd/123456.123456.Add(999999)-32 4333383 267.6 ns/op 272 B/op 8 allocs/op -BenchmarkAdd/123456.123456.Add(999999)-32 4439653 275.3 ns/op 272 B/op 8 allocs/op -BenchmarkAdd/123456.123456.Add(999999)-32 4254625 239.0 ns/op 272 B/op 8 allocs/op -BenchmarkAdd/123456.123456.Add(999999)-32 4911463 281.8 ns/op 272 B/op 8 allocs/op -BenchmarkAdd/123456.123456.Add(999999)-32 4753250 248.9 ns/op 272 B/op 8 allocs/op -BenchmarkAdd/123456.123456.Add(999999)-32 4546800 267.1 ns/op 272 B/op 8 allocs/op -BenchmarkAdd/123456.123456.Add(999999)-32 4147534 286.2 ns/op 272 B/op 8 allocs/op -BenchmarkAdd/123456.123456.Add(999999)-32 4367682 273.6 ns/op 272 B/op 8 allocs/op -BenchmarkAdd/123456.123456.Add(999999)-32 4011961 267.2 ns/op 272 B/op 8 allocs/op -BenchmarkAdd/123456.123456.Add(999999)-32 4345132 281.4 ns/op 272 B/op 8 allocs/op -BenchmarkAdd/123456.123456.Add(456781244.1324897546)-32 4605632 262.1 ns/op 272 B/op 8 allocs/op -BenchmarkAdd/123456.123456.Add(456781244.1324897546)-32 4367725 248.4 ns/op 272 B/op 8 allocs/op -BenchmarkAdd/123456.123456.Add(456781244.1324897546)-32 4248259 257.4 ns/op 272 B/op 8 allocs/op -BenchmarkAdd/123456.123456.Add(456781244.1324897546)-32 4509432 258.1 ns/op 272 B/op 8 allocs/op -BenchmarkAdd/123456.123456.Add(456781244.1324897546)-32 4341776 260.0 ns/op 272 B/op 8 allocs/op -BenchmarkAdd/123456.123456.Add(456781244.1324897546)-32 4532086 266.0 ns/op 272 B/op 8 allocs/op -BenchmarkAdd/123456.123456.Add(456781244.1324897546)-32 4772166 249.0 ns/op 272 B/op 8 allocs/op -BenchmarkAdd/123456.123456.Add(456781244.1324897546)-32 4405160 268.3 ns/op 272 B/op 8 allocs/op -BenchmarkAdd/123456.123456.Add(456781244.1324897546)-32 4433599 262.4 ns/op 272 B/op 8 allocs/op -BenchmarkAdd/123456.123456.Add(456781244.1324897546)-32 4512488 268.7 ns/op 272 B/op 8 allocs/op -BenchmarkAdd/548751.15465466546.Add(1542.456487)-32 4166202 282.6 ns/op 272 B/op 8 allocs/op -BenchmarkAdd/548751.15465466546.Add(1542.456487)-32 4226432 280.2 ns/op 272 B/op 8 allocs/op -BenchmarkAdd/548751.15465466546.Add(1542.456487)-32 4598520 254.8 ns/op 272 B/op 8 allocs/op -BenchmarkAdd/548751.15465466546.Add(1542.456487)-32 7469167 263.7 ns/op 272 B/op 8 allocs/op -BenchmarkAdd/548751.15465466546.Add(1542.456487)-32 4183867 270.4 ns/op 272 B/op 8 allocs/op -BenchmarkAdd/548751.15465466546.Add(1542.456487)-32 4374823 289.7 ns/op 272 B/op 8 allocs/op -BenchmarkAdd/548751.15465466546.Add(1542.456487)-32 4208055 258.3 ns/op 272 B/op 8 allocs/op -BenchmarkAdd/548751.15465466546.Add(1542.456487)-32 4581808 270.3 ns/op 272 B/op 8 allocs/op -BenchmarkAdd/548751.15465466546.Add(1542.456487)-32 4514930 274.0 ns/op 272 B/op 8 allocs/op -BenchmarkAdd/548751.15465466546.Add(1542.456487)-32 4088490 266.0 ns/op 272 B/op 8 allocs/op -BenchmarkSub/3.Sub(7)-32 25039221 54.59 ns/op 40 B/op 2 allocs/op -BenchmarkSub/3.Sub(7)-32 22716433 55.23 ns/op 40 B/op 2 allocs/op -BenchmarkSub/3.Sub(7)-32 20761345 51.27 ns/op 40 B/op 2 allocs/op -BenchmarkSub/3.Sub(7)-32 21234402 54.51 ns/op 40 B/op 2 allocs/op -BenchmarkSub/3.Sub(7)-32 22242219 50.98 ns/op 40 B/op 2 allocs/op -BenchmarkSub/3.Sub(7)-32 19376798 51.92 ns/op 40 B/op 2 allocs/op -BenchmarkSub/3.Sub(7)-32 21921183 48.83 ns/op 40 B/op 2 allocs/op -BenchmarkSub/3.Sub(7)-32 22715703 54.86 ns/op 40 B/op 2 allocs/op -BenchmarkSub/3.Sub(7)-32 37468888 54.43 ns/op 40 B/op 2 allocs/op -BenchmarkSub/3.Sub(7)-32 18568735 54.41 ns/op 40 B/op 2 allocs/op -BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1111.1789)-32 4024284 301.7 ns/op 272 B/op 8 allocs/op -BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1111.1789)-32 3831291 288.8 ns/op 272 B/op 8 allocs/op -BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1111.1789)-32 4200229 294.5 ns/op 272 B/op 8 allocs/op -BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1111.1789)-32 3947991 301.1 ns/op 272 B/op 8 allocs/op -BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1111.1789)-32 4155092 292.7 ns/op 272 B/op 8 allocs/op -BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1111.1789)-32 4057719 293.4 ns/op 272 B/op 8 allocs/op -BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1111.1789)-32 3988562 291.0 ns/op 272 B/op 8 allocs/op -BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1111.1789)-32 4034698 264.5 ns/op 272 B/op 8 allocs/op -BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1111.1789)-32 3874606 302.4 ns/op 272 B/op 8 allocs/op -BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1111.1789)-32 3856712 275.7 ns/op 272 B/op 8 allocs/op -BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1234567890123456789.1234567890123456789)-32 16902196 76.34 ns/op 80 B/op 2 allocs/op -BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1234567890123456789.1234567890123456789)-32 19068022 76.17 ns/op 80 B/op 2 allocs/op -BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1234567890123456789.1234567890123456789)-32 14532492 75.41 ns/op 80 B/op 2 allocs/op -BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1234567890123456789.1234567890123456789)-32 14629282 77.18 ns/op 80 B/op 2 allocs/op -BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1234567890123456789.1234567890123456789)-32 16094166 73.60 ns/op 80 B/op 2 allocs/op -BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1234567890123456789.1234567890123456789)-32 15408852 74.25 ns/op 80 B/op 2 allocs/op -BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1234567890123456789.1234567890123456789)-32 15457788 72.05 ns/op 80 B/op 2 allocs/op -BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1234567890123456789.1234567890123456789)-32 15966285 74.17 ns/op 80 B/op 2 allocs/op -BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1234567890123456789.1234567890123456789)-32 20654164 76.09 ns/op 80 B/op 2 allocs/op -BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1234567890123456789.1234567890123456789)-32 16609846 76.78 ns/op 80 B/op 2 allocs/op -BenchmarkSub/123.456.Sub(0.123)-32 20944794 51.81 ns/op 40 B/op 2 allocs/op -BenchmarkSub/123.456.Sub(0.123)-32 38392584 48.82 ns/op 40 B/op 2 allocs/op -BenchmarkSub/123.456.Sub(0.123)-32 23707412 53.86 ns/op 40 B/op 2 allocs/op -BenchmarkSub/123.456.Sub(0.123)-32 18684829 53.89 ns/op 40 B/op 2 allocs/op -BenchmarkSub/123.456.Sub(0.123)-32 25432513 50.19 ns/op 40 B/op 2 allocs/op -BenchmarkSub/123.456.Sub(0.123)-32 29250306 52.92 ns/op 40 B/op 2 allocs/op -BenchmarkSub/123.456.Sub(0.123)-32 22315246 55.42 ns/op 40 B/op 2 allocs/op -BenchmarkSub/123.456.Sub(0.123)-32 22885232 54.03 ns/op 40 B/op 2 allocs/op -BenchmarkSub/123.456.Sub(0.123)-32 19768962 54.66 ns/op 40 B/op 2 allocs/op -BenchmarkSub/123.456.Sub(0.123)-32 19926601 54.62 ns/op 40 B/op 2 allocs/op -BenchmarkSub/123456.123456.Sub(456781244.1324897546)-32 4702910 256.4 ns/op 232 B/op 8 allocs/op -BenchmarkSub/123456.123456.Sub(456781244.1324897546)-32 4549408 263.6 ns/op 232 B/op 8 allocs/op -BenchmarkSub/123456.123456.Sub(456781244.1324897546)-32 4555176 257.6 ns/op 232 B/op 8 allocs/op -BenchmarkSub/123456.123456.Sub(456781244.1324897546)-32 5549554 256.8 ns/op 232 B/op 8 allocs/op -BenchmarkSub/123456.123456.Sub(456781244.1324897546)-32 4733947 260.1 ns/op 232 B/op 8 allocs/op -BenchmarkSub/123456.123456.Sub(456781244.1324897546)-32 4470510 265.3 ns/op 232 B/op 8 allocs/op -BenchmarkSub/123456.123456.Sub(456781244.1324897546)-32 5270406 257.9 ns/op 232 B/op 8 allocs/op -BenchmarkSub/123456.123456.Sub(456781244.1324897546)-32 5335995 239.3 ns/op 232 B/op 8 allocs/op -BenchmarkSub/123456.123456.Sub(456781244.1324897546)-32 4669669 252.0 ns/op 232 B/op 8 allocs/op -BenchmarkSub/123456.123456.Sub(456781244.1324897546)-32 4478042 246.5 ns/op 232 B/op 8 allocs/op -BenchmarkSub/548751.15465466546.Sub(1542.456487)-32 4569884 267.4 ns/op 232 B/op 8 allocs/op -BenchmarkSub/548751.15465466546.Sub(1542.456487)-32 4312736 269.2 ns/op 232 B/op 8 allocs/op -BenchmarkSub/548751.15465466546.Sub(1542.456487)-32 4264032 263.8 ns/op 232 B/op 8 allocs/op -BenchmarkSub/548751.15465466546.Sub(1542.456487)-32 4517584 252.6 ns/op 232 B/op 8 allocs/op -BenchmarkSub/548751.15465466546.Sub(1542.456487)-32 4720797 262.5 ns/op 232 B/op 8 allocs/op -BenchmarkSub/548751.15465466546.Sub(1542.456487)-32 4242315 269.0 ns/op 232 B/op 8 allocs/op -BenchmarkSub/548751.15465466546.Sub(1542.456487)-32 4924635 268.4 ns/op 232 B/op 8 allocs/op -BenchmarkSub/548751.15465466546.Sub(1542.456487)-32 4445025 265.7 ns/op 232 B/op 8 allocs/op -BenchmarkSub/548751.15465466546.Sub(1542.456487)-32 4832050 266.4 ns/op 232 B/op 8 allocs/op -BenchmarkSub/548751.15465466546.Sub(1542.456487)-32 4479932 268.0 ns/op 232 B/op 8 allocs/op -BenchmarkMul/1234.1234567890123456879.Mul(1111.1789)-32 15202113 79.09 ns/op 96 B/op 2 allocs/op -BenchmarkMul/1234.1234567890123456879.Mul(1111.1789)-32 16319980 77.02 ns/op 96 B/op 2 allocs/op -BenchmarkMul/1234.1234567890123456879.Mul(1111.1789)-32 18393751 76.08 ns/op 96 B/op 2 allocs/op -BenchmarkMul/1234.1234567890123456879.Mul(1111.1789)-32 12930721 78.17 ns/op 96 B/op 2 allocs/op -BenchmarkMul/1234.1234567890123456879.Mul(1111.1789)-32 15081740 77.23 ns/op 96 B/op 2 allocs/op -BenchmarkMul/1234.1234567890123456879.Mul(1111.1789)-32 16689993 74.68 ns/op 96 B/op 2 allocs/op -BenchmarkMul/1234.1234567890123456879.Mul(1111.1789)-32 14781304 78.01 ns/op 96 B/op 2 allocs/op -BenchmarkMul/1234.1234567890123456879.Mul(1111.1789)-32 14558678 76.60 ns/op 96 B/op 2 allocs/op -BenchmarkMul/1234.1234567890123456879.Mul(1111.1789)-32 16331526 76.77 ns/op 96 B/op 2 allocs/op -BenchmarkMul/1234.1234567890123456879.Mul(1111.1789)-32 14348950 77.60 ns/op 96 B/op 2 allocs/op -BenchmarkMul/1234.1234567890123456879.Mul(1111.1234567890123456789)-32 13080951 86.94 ns/op 96 B/op 2 allocs/op -BenchmarkMul/1234.1234567890123456879.Mul(1111.1234567890123456789)-32 12550477 87.99 ns/op 96 B/op 2 allocs/op -BenchmarkMul/1234.1234567890123456879.Mul(1111.1234567890123456789)-32 12218923 85.35 ns/op 96 B/op 2 allocs/op -BenchmarkMul/1234.1234567890123456879.Mul(1111.1234567890123456789)-32 18724356 87.40 ns/op 96 B/op 2 allocs/op -BenchmarkMul/1234.1234567890123456879.Mul(1111.1234567890123456789)-32 14892434 90.37 ns/op 96 B/op 2 allocs/op -BenchmarkMul/1234.1234567890123456879.Mul(1111.1234567890123456789)-32 13287516 87.17 ns/op 96 B/op 2 allocs/op -BenchmarkMul/1234.1234567890123456879.Mul(1111.1234567890123456789)-32 12999646 89.05 ns/op 96 B/op 2 allocs/op -BenchmarkMul/1234.1234567890123456879.Mul(1111.1234567890123456789)-32 16624738 89.34 ns/op 96 B/op 2 allocs/op -BenchmarkMul/1234.1234567890123456879.Mul(1111.1234567890123456789)-32 12476278 89.05 ns/op 96 B/op 2 allocs/op -BenchmarkMul/1234.1234567890123456879.Mul(1111.1234567890123456789)-32 12530788 87.73 ns/op 96 B/op 2 allocs/op -BenchmarkMul/123.456.Mul(0.123)-32 15473952 74.16 ns/op 80 B/op 2 allocs/op -BenchmarkMul/123.456.Mul(0.123)-32 15894392 72.27 ns/op 80 B/op 2 allocs/op -BenchmarkMul/123.456.Mul(0.123)-32 16843294 71.30 ns/op 80 B/op 2 allocs/op -BenchmarkMul/123.456.Mul(0.123)-32 15066846 68.35 ns/op 80 B/op 2 allocs/op -BenchmarkMul/123.456.Mul(0.123)-32 14736523 70.95 ns/op 80 B/op 2 allocs/op -BenchmarkMul/123.456.Mul(0.123)-32 16285071 69.10 ns/op 80 B/op 2 allocs/op -BenchmarkMul/123.456.Mul(0.123)-32 15457087 69.95 ns/op 80 B/op 2 allocs/op -BenchmarkMul/123.456.Mul(0.123)-32 22007349 70.48 ns/op 80 B/op 2 allocs/op -BenchmarkMul/123.456.Mul(0.123)-32 15362572 72.10 ns/op 80 B/op 2 allocs/op -BenchmarkMul/123.456.Mul(0.123)-32 17691632 68.61 ns/op 80 B/op 2 allocs/op -BenchmarkMul/3.Mul(7)-32 16709379 68.79 ns/op 80 B/op 2 allocs/op -BenchmarkMul/3.Mul(7)-32 16393172 70.82 ns/op 80 B/op 2 allocs/op -BenchmarkMul/3.Mul(7)-32 16009064 72.46 ns/op 80 B/op 2 allocs/op -BenchmarkMul/3.Mul(7)-32 14077916 74.29 ns/op 80 B/op 2 allocs/op -BenchmarkMul/3.Mul(7)-32 16404564 70.80 ns/op 80 B/op 2 allocs/op -BenchmarkMul/3.Mul(7)-32 15794113 72.37 ns/op 80 B/op 2 allocs/op -BenchmarkMul/3.Mul(7)-32 16114165 74.10 ns/op 80 B/op 2 allocs/op -BenchmarkMul/3.Mul(7)-32 15428896 72.18 ns/op 80 B/op 2 allocs/op -BenchmarkMul/3.Mul(7)-32 15612975 72.85 ns/op 80 B/op 2 allocs/op -BenchmarkMul/3.Mul(7)-32 15224266 75.37 ns/op 80 B/op 2 allocs/op -BenchmarkMul/123456.123456.Mul(999999)-32 16789566 73.78 ns/op 80 B/op 2 allocs/op -BenchmarkMul/123456.123456.Mul(999999)-32 15513826 69.85 ns/op 80 B/op 2 allocs/op -BenchmarkMul/123456.123456.Mul(999999)-32 16132098 71.93 ns/op 80 B/op 2 allocs/op -BenchmarkMul/123456.123456.Mul(999999)-32 19045384 73.42 ns/op 80 B/op 2 allocs/op -BenchmarkMul/123456.123456.Mul(999999)-32 15334780 72.14 ns/op 80 B/op 2 allocs/op -BenchmarkMul/123456.123456.Mul(999999)-32 15610454 71.39 ns/op 80 B/op 2 allocs/op -BenchmarkMul/123456.123456.Mul(999999)-32 15591957 70.08 ns/op 80 B/op 2 allocs/op -BenchmarkMul/123456.123456.Mul(999999)-32 15406921 72.97 ns/op 80 B/op 2 allocs/op -BenchmarkMul/123456.123456.Mul(999999)-32 15346998 67.93 ns/op 80 B/op 2 allocs/op -BenchmarkMul/123456.123456.Mul(999999)-32 15919479 67.11 ns/op 80 B/op 2 allocs/op -BenchmarkMul/123456.123456.Mul(456781244.1324897546)-32 16739858 69.01 ns/op 80 B/op 2 allocs/op -BenchmarkMul/123456.123456.Mul(456781244.1324897546)-32 15889642 72.31 ns/op 80 B/op 2 allocs/op -BenchmarkMul/123456.123456.Mul(456781244.1324897546)-32 16211490 71.49 ns/op 80 B/op 2 allocs/op -BenchmarkMul/123456.123456.Mul(456781244.1324897546)-32 15564301 71.65 ns/op 80 B/op 2 allocs/op -BenchmarkMul/123456.123456.Mul(456781244.1324897546)-32 15263959 72.93 ns/op 80 B/op 2 allocs/op -BenchmarkMul/123456.123456.Mul(456781244.1324897546)-32 16501226 67.58 ns/op 80 B/op 2 allocs/op -BenchmarkMul/123456.123456.Mul(456781244.1324897546)-32 18224520 71.95 ns/op 80 B/op 2 allocs/op -BenchmarkMul/123456.123456.Mul(456781244.1324897546)-32 15178126 74.65 ns/op 80 B/op 2 allocs/op -BenchmarkMul/123456.123456.Mul(456781244.1324897546)-32 15382106 71.42 ns/op 80 B/op 2 allocs/op -BenchmarkMul/123456.123456.Mul(456781244.1324897546)-32 24501426 69.76 ns/op 80 B/op 2 allocs/op -BenchmarkMul/548751.15465466546.Mul(1542.456487)-32 16609972 69.03 ns/op 80 B/op 2 allocs/op -BenchmarkMul/548751.15465466546.Mul(1542.456487)-32 18690074 70.88 ns/op 80 B/op 2 allocs/op -BenchmarkMul/548751.15465466546.Mul(1542.456487)-32 16429220 71.31 ns/op 80 B/op 2 allocs/op -BenchmarkMul/548751.15465466546.Mul(1542.456487)-32 21545716 69.56 ns/op 80 B/op 2 allocs/op -BenchmarkMul/548751.15465466546.Mul(1542.456487)-32 17055946 73.50 ns/op 80 B/op 2 allocs/op -BenchmarkMul/548751.15465466546.Mul(1542.456487)-32 15650613 69.06 ns/op 80 B/op 2 allocs/op -BenchmarkMul/548751.15465466546.Mul(1542.456487)-32 20478613 72.08 ns/op 80 B/op 2 allocs/op -BenchmarkMul/548751.15465466546.Mul(1542.456487)-32 17253582 66.77 ns/op 80 B/op 2 allocs/op -BenchmarkMul/548751.15465466546.Mul(1542.456487)-32 16611508 67.91 ns/op 80 B/op 2 allocs/op -BenchmarkMul/548751.15465466546.Mul(1542.456487)-32 16524975 70.62 ns/op 80 B/op 2 allocs/op -BenchmarkDiv/1234567890123456789.1234567890123456879.Div(1111.1789)-32 3137931 394.7 ns/op 352 B/op 11 allocs/op -BenchmarkDiv/1234567890123456789.1234567890123456879.Div(1111.1789)-32 3429309 385.6 ns/op 352 B/op 11 allocs/op -BenchmarkDiv/1234567890123456789.1234567890123456879.Div(1111.1789)-32 3169648 384.9 ns/op 352 B/op 11 allocs/op -BenchmarkDiv/1234567890123456789.1234567890123456879.Div(1111.1789)-32 2973316 376.9 ns/op 352 B/op 11 allocs/op -BenchmarkDiv/1234567890123456789.1234567890123456879.Div(1111.1789)-32 3453938 403.1 ns/op 352 B/op 11 allocs/op -BenchmarkDiv/1234567890123456789.1234567890123456879.Div(1111.1789)-32 3045600 381.0 ns/op 352 B/op 11 allocs/op -BenchmarkDiv/1234567890123456789.1234567890123456879.Div(1111.1789)-32 3133077 387.2 ns/op 352 B/op 11 allocs/op -BenchmarkDiv/1234567890123456789.1234567890123456879.Div(1111.1789)-32 3171842 387.7 ns/op 352 B/op 11 allocs/op -BenchmarkDiv/1234567890123456789.1234567890123456879.Div(1111.1789)-32 3072694 398.0 ns/op 352 B/op 11 allocs/op -BenchmarkDiv/1234567890123456789.1234567890123456879.Div(1111.1789)-32 3151782 390.0 ns/op 352 B/op 11 allocs/op -BenchmarkDiv/12345.1234567890123456879.Div(1111.1234567890123456789)-32 2623239 469.3 ns/op 336 B/op 9 allocs/op -BenchmarkDiv/12345.1234567890123456879.Div(1111.1234567890123456789)-32 2576436 472.8 ns/op 336 B/op 9 allocs/op -BenchmarkDiv/12345.1234567890123456879.Div(1111.1234567890123456789)-32 2620910 448.2 ns/op 336 B/op 9 allocs/op -BenchmarkDiv/12345.1234567890123456879.Div(1111.1234567890123456789)-32 2473731 470.7 ns/op 336 B/op 9 allocs/op -BenchmarkDiv/12345.1234567890123456879.Div(1111.1234567890123456789)-32 2780533 449.4 ns/op 336 B/op 9 allocs/op -BenchmarkDiv/12345.1234567890123456879.Div(1111.1234567890123456789)-32 2644875 474.8 ns/op 336 B/op 9 allocs/op -BenchmarkDiv/12345.1234567890123456879.Div(1111.1234567890123456789)-32 2514274 449.3 ns/op 336 B/op 9 allocs/op -BenchmarkDiv/12345.1234567890123456879.Div(1111.1234567890123456789)-32 2702306 475.8 ns/op 336 B/op 9 allocs/op -BenchmarkDiv/12345.1234567890123456879.Div(1111.1234567890123456789)-32 2548975 460.4 ns/op 336 B/op 9 allocs/op -BenchmarkDiv/12345.1234567890123456879.Div(1111.1234567890123456789)-32 2441332 450.2 ns/op 336 B/op 9 allocs/op -BenchmarkDiv/123.456.Div(0.123)-32 3352251 331.0 ns/op 288 B/op 10 allocs/op -BenchmarkDiv/123.456.Div(0.123)-32 3561450 362.0 ns/op 288 B/op 10 allocs/op -BenchmarkDiv/123.456.Div(0.123)-32 4557441 333.5 ns/op 288 B/op 10 allocs/op -BenchmarkDiv/123.456.Div(0.123)-32 3609415 327.1 ns/op 288 B/op 10 allocs/op -BenchmarkDiv/123.456.Div(0.123)-32 3525199 351.1 ns/op 288 B/op 10 allocs/op -BenchmarkDiv/123.456.Div(0.123)-32 3523197 317.5 ns/op 288 B/op 10 allocs/op -BenchmarkDiv/123.456.Div(0.123)-32 3476248 342.2 ns/op 288 B/op 10 allocs/op -BenchmarkDiv/123.456.Div(0.123)-32 4290052 343.7 ns/op 288 B/op 10 allocs/op -BenchmarkDiv/123.456.Div(0.123)-32 3612841 332.5 ns/op 288 B/op 10 allocs/op -BenchmarkDiv/123.456.Div(0.123)-32 3494942 342.0 ns/op 288 B/op 10 allocs/op -BenchmarkDiv/3.Div(7)-32 2905021 359.3 ns/op 328 B/op 12 allocs/op -BenchmarkDiv/3.Div(7)-32 3515008 355.7 ns/op 328 B/op 12 allocs/op -BenchmarkDiv/3.Div(7)-32 2779527 401.1 ns/op 328 B/op 12 allocs/op -BenchmarkDiv/3.Div(7)-32 2865992 426.4 ns/op 328 B/op 12 allocs/op -BenchmarkDiv/3.Div(7)-32 2951054 423.5 ns/op 328 B/op 12 allocs/op -BenchmarkDiv/3.Div(7)-32 2692065 409.7 ns/op 328 B/op 12 allocs/op -BenchmarkDiv/3.Div(7)-32 2821201 389.6 ns/op 328 B/op 12 allocs/op -BenchmarkDiv/3.Div(7)-32 2731443 432.5 ns/op 328 B/op 12 allocs/op -BenchmarkDiv/3.Div(7)-32 2983645 401.5 ns/op 328 B/op 12 allocs/op -BenchmarkDiv/3.Div(7)-32 3031087 428.9 ns/op 328 B/op 12 allocs/op -BenchmarkDiv/123456.123456.Div(999999)-32 3464529 343.9 ns/op 288 B/op 10 allocs/op -BenchmarkDiv/123456.123456.Div(999999)-32 3464356 336.9 ns/op 288 B/op 10 allocs/op -BenchmarkDiv/123456.123456.Div(999999)-32 3618600 351.2 ns/op 288 B/op 10 allocs/op -BenchmarkDiv/123456.123456.Div(999999)-32 3299596 370.8 ns/op 288 B/op 10 allocs/op -BenchmarkDiv/123456.123456.Div(999999)-32 3411072 353.1 ns/op 288 B/op 10 allocs/op -BenchmarkDiv/123456.123456.Div(999999)-32 3287988 356.8 ns/op 288 B/op 10 allocs/op -BenchmarkDiv/123456.123456.Div(999999)-32 3230797 325.0 ns/op 288 B/op 10 allocs/op -BenchmarkDiv/123456.123456.Div(999999)-32 3762838 321.8 ns/op 288 B/op 10 allocs/op -BenchmarkDiv/123456.123456.Div(999999)-32 3485020 334.2 ns/op 288 B/op 10 allocs/op -BenchmarkDiv/123456.123456.Div(999999)-32 3288488 352.9 ns/op 288 B/op 10 allocs/op -BenchmarkDiv/123456.123456.Div(456781244.1324897546)-32 2963986 438.9 ns/op 368 B/op 12 allocs/op -BenchmarkDiv/123456.123456.Div(456781244.1324897546)-32 2820450 407.4 ns/op 368 B/op 12 allocs/op -BenchmarkDiv/123456.123456.Div(456781244.1324897546)-32 2534456 431.8 ns/op 368 B/op 12 allocs/op -BenchmarkDiv/123456.123456.Div(456781244.1324897546)-32 2698570 453.1 ns/op 368 B/op 12 allocs/op -BenchmarkDiv/123456.123456.Div(456781244.1324897546)-32 2620207 422.8 ns/op 368 B/op 12 allocs/op -BenchmarkDiv/123456.123456.Div(456781244.1324897546)-32 2935908 453.7 ns/op 368 B/op 12 allocs/op -BenchmarkDiv/123456.123456.Div(456781244.1324897546)-32 2672461 470.8 ns/op 368 B/op 12 allocs/op -BenchmarkDiv/123456.123456.Div(456781244.1324897546)-32 2686663 456.5 ns/op 368 B/op 12 allocs/op -BenchmarkDiv/123456.123456.Div(456781244.1324897546)-32 2772620 437.6 ns/op 368 B/op 12 allocs/op -BenchmarkDiv/123456.123456.Div(456781244.1324897546)-32 2419842 433.0 ns/op 368 B/op 12 allocs/op -BenchmarkDiv/548751.15465466546.Div(1542.456487)-32 2682060 444.7 ns/op 368 B/op 12 allocs/op -BenchmarkDiv/548751.15465466546.Div(1542.456487)-32 2644312 435.3 ns/op 368 B/op 12 allocs/op -BenchmarkDiv/548751.15465466546.Div(1542.456487)-32 2542122 451.2 ns/op 368 B/op 12 allocs/op -BenchmarkDiv/548751.15465466546.Div(1542.456487)-32 2523468 448.6 ns/op 368 B/op 12 allocs/op -BenchmarkDiv/548751.15465466546.Div(1542.456487)-32 2537968 452.9 ns/op 368 B/op 12 allocs/op -BenchmarkDiv/548751.15465466546.Div(1542.456487)-32 2640154 452.2 ns/op 368 B/op 12 allocs/op -BenchmarkDiv/548751.15465466546.Div(1542.456487)-32 2712855 452.8 ns/op 368 B/op 12 allocs/op -BenchmarkDiv/548751.15465466546.Div(1542.456487)-32 2781735 449.9 ns/op 368 B/op 12 allocs/op -BenchmarkDiv/548751.15465466546.Div(1542.456487)-32 3185989 369.5 ns/op 368 B/op 12 allocs/op -BenchmarkDiv/548751.15465466546.Div(1542.456487)-32 2512264 411.0 ns/op 368 B/op 12 allocs/op -BenchmarkDivFallback/12345679012345679890.1234567890123456789.Div(999999)-32 1842294 621.3 ns/op 576 B/op 18 allocs/op -BenchmarkDivFallback/12345679012345679890.1234567890123456789.Div(999999)-32 1857129 661.9 ns/op 576 B/op 18 allocs/op -BenchmarkDivFallback/12345679012345679890.1234567890123456789.Div(999999)-32 2050453 641.6 ns/op 576 B/op 18 allocs/op -BenchmarkDivFallback/12345679012345679890.1234567890123456789.Div(999999)-32 1896506 628.8 ns/op 576 B/op 18 allocs/op -BenchmarkDivFallback/12345679012345679890.1234567890123456789.Div(999999)-32 1754272 666.1 ns/op 576 B/op 18 allocs/op -BenchmarkDivFallback/12345679012345679890.1234567890123456789.Div(999999)-32 1922625 614.4 ns/op 576 B/op 18 allocs/op -BenchmarkDivFallback/12345679012345679890.1234567890123456789.Div(999999)-32 1861239 646.5 ns/op 576 B/op 18 allocs/op -BenchmarkDivFallback/12345679012345679890.1234567890123456789.Div(999999)-32 1825926 667.0 ns/op 576 B/op 18 allocs/op -BenchmarkDivFallback/12345679012345679890.1234567890123456789.Div(999999)-32 1784220 675.6 ns/op 576 B/op 18 allocs/op -BenchmarkDivFallback/12345679012345679890.1234567890123456789.Div(999999)-32 1883098 636.2 ns/op 576 B/op 18 allocs/op -BenchmarkDivFallback/1234.Div(12345679012345679890.1234567890123456789)-32 3074176 409.5 ns/op 312 B/op 10 allocs/op -BenchmarkDivFallback/1234.Div(12345679012345679890.1234567890123456789)-32 3165075 417.2 ns/op 312 B/op 10 allocs/op -BenchmarkDivFallback/1234.Div(12345679012345679890.1234567890123456789)-32 2920964 392.3 ns/op 312 B/op 10 allocs/op -BenchmarkDivFallback/1234.Div(12345679012345679890.1234567890123456789)-32 3264560 372.4 ns/op 312 B/op 10 allocs/op -BenchmarkDivFallback/1234.Div(12345679012345679890.1234567890123456789)-32 3077976 356.1 ns/op 312 B/op 10 allocs/op -BenchmarkDivFallback/1234.Div(12345679012345679890.1234567890123456789)-32 3568544 372.8 ns/op 312 B/op 10 allocs/op -BenchmarkDivFallback/1234.Div(12345679012345679890.1234567890123456789)-32 3211838 391.4 ns/op 312 B/op 10 allocs/op -BenchmarkDivFallback/1234.Div(12345679012345679890.1234567890123456789)-32 2990374 399.3 ns/op 312 B/op 10 allocs/op -BenchmarkDivFallback/1234.Div(12345679012345679890.1234567890123456789)-32 3014030 402.3 ns/op 312 B/op 10 allocs/op -BenchmarkDivFallback/1234.Div(12345679012345679890.1234567890123456789)-32 3795466 408.3 ns/op 312 B/op 10 allocs/op -BenchmarkPow/1.01.Pow(10)-32 1790846 664.4 ns/op 576 B/op 18 allocs/op -BenchmarkPow/1.01.Pow(10)-32 1804885 651.3 ns/op 576 B/op 18 allocs/op -BenchmarkPow/1.01.Pow(10)-32 1748032 694.8 ns/op 576 B/op 18 allocs/op -BenchmarkPow/1.01.Pow(10)-32 1804255 673.6 ns/op 576 B/op 18 allocs/op -BenchmarkPow/1.01.Pow(10)-32 1913274 705.2 ns/op 576 B/op 18 allocs/op -BenchmarkPow/1.01.Pow(10)-32 1731534 691.7 ns/op 576 B/op 18 allocs/op -BenchmarkPow/1.01.Pow(10)-32 1727810 646.0 ns/op 576 B/op 18 allocs/op -BenchmarkPow/1.01.Pow(10)-32 1821130 681.9 ns/op 576 B/op 18 allocs/op -BenchmarkPow/1.01.Pow(10)-32 1842339 668.5 ns/op 576 B/op 18 allocs/op -BenchmarkPow/1.01.Pow(10)-32 2644340 601.1 ns/op 576 B/op 18 allocs/op -BenchmarkPow/1.01.Pow(100)-32 1000000 1138 ns/op 1072 B/op 26 allocs/op -BenchmarkPow/1.01.Pow(100)-32 1144117 1204 ns/op 1072 B/op 26 allocs/op -BenchmarkPow/1.01.Pow(100)-32 869086 1151 ns/op 1072 B/op 26 allocs/op -BenchmarkPow/1.01.Pow(100)-32 878260 1180 ns/op 1072 B/op 26 allocs/op -BenchmarkPow/1.01.Pow(100)-32 1345862 1128 ns/op 1072 B/op 26 allocs/op -BenchmarkPow/1.01.Pow(100)-32 1033419 1173 ns/op 1072 B/op 26 allocs/op -BenchmarkPow/1.01.Pow(100)-32 1047177 1157 ns/op 1072 B/op 26 allocs/op -BenchmarkPow/1.01.Pow(100)-32 933664 1160 ns/op 1072 B/op 26 allocs/op -BenchmarkPow/1.01.Pow(100)-32 998760 1149 ns/op 1072 B/op 26 allocs/op -BenchmarkPow/1.01.Pow(100)-32 1087852 1120 ns/op 1072 B/op 26 allocs/op -BenchmarkMarshalJSON/1234567890123456789.1234567890123456879-32 3528535 358.7 ns/op 336 B/op 7 allocs/op -BenchmarkMarshalJSON/1234567890123456789.1234567890123456879-32 3142004 343.2 ns/op 336 B/op 7 allocs/op -BenchmarkMarshalJSON/1234567890123456789.1234567890123456879-32 3224040 370.8 ns/op 336 B/op 7 allocs/op -BenchmarkMarshalJSON/1234567890123456789.1234567890123456879-32 3214864 377.6 ns/op 336 B/op 7 allocs/op -BenchmarkMarshalJSON/1234567890123456789.1234567890123456879-32 3268144 365.5 ns/op 336 B/op 7 allocs/op -BenchmarkMarshalJSON/1234567890123456789.1234567890123456879-32 3478572 395.9 ns/op 336 B/op 7 allocs/op -BenchmarkMarshalJSON/1234567890123456789.1234567890123456879-32 3290826 348.1 ns/op 336 B/op 7 allocs/op -BenchmarkMarshalJSON/1234567890123456789.1234567890123456879-32 3195378 361.8 ns/op 336 B/op 7 allocs/op -BenchmarkMarshalJSON/1234567890123456789.1234567890123456879-32 3213412 330.7 ns/op 336 B/op 7 allocs/op -BenchmarkMarshalJSON/1234567890123456789.1234567890123456879-32 3159433 373.7 ns/op 336 B/op 7 allocs/op -BenchmarkMarshalJSON/123-32 10503364 106.2 ns/op 56 B/op 5 allocs/op -BenchmarkMarshalJSON/123-32 9622635 119.3 ns/op 56 B/op 5 allocs/op -BenchmarkMarshalJSON/123-32 11706819 119.0 ns/op 56 B/op 5 allocs/op -BenchmarkMarshalJSON/123-32 10698962 111.6 ns/op 56 B/op 5 allocs/op -BenchmarkMarshalJSON/123-32 11302725 119.5 ns/op 56 B/op 5 allocs/op -BenchmarkMarshalJSON/123-32 10859452 121.1 ns/op 56 B/op 5 allocs/op -BenchmarkMarshalJSON/123-32 10405341 115.7 ns/op 56 B/op 5 allocs/op -BenchmarkMarshalJSON/123-32 12177576 121.1 ns/op 56 B/op 5 allocs/op -BenchmarkMarshalJSON/123-32 10771659 112.3 ns/op 56 B/op 5 allocs/op -BenchmarkMarshalJSON/123-32 9873924 114.5 ns/op 56 B/op 5 allocs/op -BenchmarkMarshalJSON/123456.123456-32 7901848 146.0 ns/op 72 B/op 5 allocs/op -BenchmarkMarshalJSON/123456.123456-32 8140983 154.8 ns/op 72 B/op 5 allocs/op -BenchmarkMarshalJSON/123456.123456-32 7621210 146.3 ns/op 72 B/op 5 allocs/op -BenchmarkMarshalJSON/123456.123456-32 7125669 145.6 ns/op 72 B/op 5 allocs/op -BenchmarkMarshalJSON/123456.123456-32 7999035 145.7 ns/op 72 B/op 5 allocs/op -BenchmarkMarshalJSON/123456.123456-32 8431065 149.9 ns/op 72 B/op 5 allocs/op -BenchmarkMarshalJSON/123456.123456-32 8477811 152.0 ns/op 72 B/op 5 allocs/op -BenchmarkMarshalJSON/123456.123456-32 7052347 145.2 ns/op 72 B/op 5 allocs/op -BenchmarkMarshalJSON/123456.123456-32 8732942 143.6 ns/op 72 B/op 5 allocs/op -BenchmarkMarshalJSON/123456.123456-32 8078986 154.0 ns/op 72 B/op 5 allocs/op -BenchmarkMarshalJSON/1234567890-32 8051425 176.0 ns/op 88 B/op 5 allocs/op -BenchmarkMarshalJSON/1234567890-32 6565861 174.2 ns/op 88 B/op 5 allocs/op -BenchmarkMarshalJSON/1234567890-32 6245455 168.2 ns/op 88 B/op 5 allocs/op -BenchmarkMarshalJSON/1234567890-32 7722829 161.8 ns/op 88 B/op 5 allocs/op -BenchmarkMarshalJSON/1234567890-32 8582744 165.4 ns/op 88 B/op 5 allocs/op -BenchmarkMarshalJSON/1234567890-32 7508815 149.5 ns/op 88 B/op 5 allocs/op -BenchmarkMarshalJSON/1234567890-32 7851114 160.8 ns/op 88 B/op 5 allocs/op -BenchmarkMarshalJSON/1234567890-32 9747700 161.9 ns/op 88 B/op 5 allocs/op -BenchmarkMarshalJSON/1234567890-32 8124547 156.1 ns/op 88 B/op 5 allocs/op -BenchmarkMarshalJSON/1234567890-32 8108080 167.1 ns/op 88 B/op 5 allocs/op -BenchmarkMarshalJSON/0.1234567890123456879-32 6932338 180.1 ns/op 104 B/op 5 allocs/op -BenchmarkMarshalJSON/0.1234567890123456879-32 6453918 171.7 ns/op 104 B/op 5 allocs/op -BenchmarkMarshalJSON/0.1234567890123456879-32 7129380 171.1 ns/op 104 B/op 5 allocs/op -BenchmarkMarshalJSON/0.1234567890123456879-32 6697160 183.3 ns/op 104 B/op 5 allocs/op -BenchmarkMarshalJSON/0.1234567890123456879-32 7518522 170.3 ns/op 104 B/op 5 allocs/op -BenchmarkMarshalJSON/0.1234567890123456879-32 5963226 206.3 ns/op 104 B/op 5 allocs/op -BenchmarkMarshalJSON/0.1234567890123456879-32 6599962 181.6 ns/op 104 B/op 5 allocs/op -BenchmarkMarshalJSON/0.1234567890123456879-32 5275561 192.5 ns/op 104 B/op 5 allocs/op -BenchmarkMarshalJSON/0.1234567890123456879-32 5943566 196.8 ns/op 104 B/op 5 allocs/op -BenchmarkMarshalJSON/0.1234567890123456879-32 6700616 180.4 ns/op 104 B/op 5 allocs/op -BenchmarkMarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 2730878 433.0 ns/op 448 B/op 7 allocs/op -BenchmarkMarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 2567138 442.2 ns/op 448 B/op 7 allocs/op -BenchmarkMarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 2762781 478.5 ns/op 448 B/op 7 allocs/op -BenchmarkMarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 2782407 417.8 ns/op 448 B/op 7 allocs/op -BenchmarkMarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 2707388 435.1 ns/op 448 B/op 7 allocs/op -BenchmarkMarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 2788642 457.4 ns/op 448 B/op 7 allocs/op -BenchmarkMarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 2696386 447.0 ns/op 448 B/op 7 allocs/op -BenchmarkMarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 2525672 460.0 ns/op 448 B/op 7 allocs/op -BenchmarkMarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 2656810 455.9 ns/op 448 B/op 7 allocs/op -BenchmarkMarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 2698587 443.8 ns/op 448 B/op 7 allocs/op -BenchmarkUnmarshalJSON/1234567890123456789.1234567890123456879-32 2413946 431.7 ns/op 240 B/op 7 allocs/op -BenchmarkUnmarshalJSON/1234567890123456789.1234567890123456879-32 2823799 425.0 ns/op 240 B/op 7 allocs/op -BenchmarkUnmarshalJSON/1234567890123456789.1234567890123456879-32 2428735 417.9 ns/op 240 B/op 7 allocs/op -BenchmarkUnmarshalJSON/1234567890123456789.1234567890123456879-32 2421270 429.6 ns/op 240 B/op 7 allocs/op -BenchmarkUnmarshalJSON/1234567890123456789.1234567890123456879-32 2807362 419.6 ns/op 240 B/op 7 allocs/op -BenchmarkUnmarshalJSON/1234567890123456789.1234567890123456879-32 3189256 398.9 ns/op 240 B/op 7 allocs/op -BenchmarkUnmarshalJSON/1234567890123456789.1234567890123456879-32 2806704 439.6 ns/op 240 B/op 7 allocs/op -BenchmarkUnmarshalJSON/1234567890123456789.1234567890123456879-32 2677273 373.8 ns/op 240 B/op 7 allocs/op -BenchmarkUnmarshalJSON/1234567890123456789.1234567890123456879-32 3138175 450.3 ns/op 240 B/op 7 allocs/op -BenchmarkUnmarshalJSON/1234567890123456789.1234567890123456879-32 2847996 405.2 ns/op 240 B/op 7 allocs/op -BenchmarkUnmarshalJSON/123-32 9160881 113.3 ns/op 72 B/op 4 allocs/op -BenchmarkUnmarshalJSON/123-32 13262482 117.1 ns/op 72 B/op 4 allocs/op -BenchmarkUnmarshalJSON/123-32 9846610 117.2 ns/op 72 B/op 4 allocs/op -BenchmarkUnmarshalJSON/123-32 11496301 109.7 ns/op 72 B/op 4 allocs/op -BenchmarkUnmarshalJSON/123-32 10674565 106.9 ns/op 72 B/op 4 allocs/op -BenchmarkUnmarshalJSON/123-32 12978370 105.7 ns/op 72 B/op 4 allocs/op -BenchmarkUnmarshalJSON/123-32 11294407 111.9 ns/op 72 B/op 4 allocs/op -BenchmarkUnmarshalJSON/123-32 14505471 113.1 ns/op 72 B/op 4 allocs/op -BenchmarkUnmarshalJSON/123-32 12831494 110.4 ns/op 72 B/op 4 allocs/op -BenchmarkUnmarshalJSON/123-32 9729820 118.0 ns/op 72 B/op 4 allocs/op -BenchmarkUnmarshalJSON/123456.123456-32 7037821 167.8 ns/op 96 B/op 5 allocs/op -BenchmarkUnmarshalJSON/123456.123456-32 8891673 154.7 ns/op 96 B/op 5 allocs/op -BenchmarkUnmarshalJSON/123456.123456-32 8306164 159.7 ns/op 96 B/op 5 allocs/op -BenchmarkUnmarshalJSON/123456.123456-32 6789402 157.7 ns/op 96 B/op 5 allocs/op -BenchmarkUnmarshalJSON/123456.123456-32 8545740 160.6 ns/op 96 B/op 5 allocs/op -BenchmarkUnmarshalJSON/123456.123456-32 7212379 160.9 ns/op 96 B/op 5 allocs/op -BenchmarkUnmarshalJSON/123456.123456-32 7072593 158.1 ns/op 96 B/op 5 allocs/op -BenchmarkUnmarshalJSON/123456.123456-32 6937660 154.5 ns/op 96 B/op 5 allocs/op -BenchmarkUnmarshalJSON/123456.123456-32 7731634 165.2 ns/op 96 B/op 5 allocs/op -BenchmarkUnmarshalJSON/123456.123456-32 8310849 152.5 ns/op 96 B/op 5 allocs/op -BenchmarkUnmarshalJSON/1234567890-32 11157043 112.1 ns/op 80 B/op 4 allocs/op -BenchmarkUnmarshalJSON/1234567890-32 10171490 121.9 ns/op 80 B/op 4 allocs/op -BenchmarkUnmarshalJSON/1234567890-32 8771911 123.2 ns/op 80 B/op 4 allocs/op -BenchmarkUnmarshalJSON/1234567890-32 10580608 120.0 ns/op 80 B/op 4 allocs/op -BenchmarkUnmarshalJSON/1234567890-32 10274332 122.8 ns/op 80 B/op 4 allocs/op -BenchmarkUnmarshalJSON/1234567890-32 8250423 134.5 ns/op 80 B/op 4 allocs/op -BenchmarkUnmarshalJSON/1234567890-32 9713355 127.5 ns/op 80 B/op 4 allocs/op -BenchmarkUnmarshalJSON/1234567890-32 9832124 124.2 ns/op 80 B/op 4 allocs/op -BenchmarkUnmarshalJSON/1234567890-32 9408474 120.6 ns/op 80 B/op 4 allocs/op -BenchmarkUnmarshalJSON/1234567890-32 9379384 131.1 ns/op 80 B/op 4 allocs/op -BenchmarkUnmarshalJSON/0.1234567890123456879-32 3351570 324.7 ns/op 192 B/op 7 allocs/op -BenchmarkUnmarshalJSON/0.1234567890123456879-32 3401019 328.3 ns/op 192 B/op 7 allocs/op -BenchmarkUnmarshalJSON/0.1234567890123456879-32 3418860 355.4 ns/op 192 B/op 7 allocs/op -BenchmarkUnmarshalJSON/0.1234567890123456879-32 3416895 350.9 ns/op 192 B/op 7 allocs/op -BenchmarkUnmarshalJSON/0.1234567890123456879-32 3402577 340.2 ns/op 192 B/op 7 allocs/op -BenchmarkUnmarshalJSON/0.1234567890123456879-32 3777313 316.3 ns/op 192 B/op 7 allocs/op -BenchmarkUnmarshalJSON/0.1234567890123456879-32 4072484 332.2 ns/op 192 B/op 7 allocs/op -BenchmarkUnmarshalJSON/0.1234567890123456879-32 4963508 327.4 ns/op 192 B/op 7 allocs/op -BenchmarkUnmarshalJSON/0.1234567890123456879-32 3561736 340.1 ns/op 192 B/op 7 allocs/op -BenchmarkUnmarshalJSON/0.1234567890123456879-32 4270048 337.2 ns/op 192 B/op 7 allocs/op -BenchmarkUnmarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 2487710 450.1 ns/op 272 B/op 7 allocs/op -BenchmarkUnmarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 2355399 575.3 ns/op 272 B/op 7 allocs/op -BenchmarkUnmarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 2581363 539.5 ns/op 272 B/op 7 allocs/op -BenchmarkUnmarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 2065401 545.4 ns/op 272 B/op 7 allocs/op -BenchmarkUnmarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 2265084 540.0 ns/op 272 B/op 7 allocs/op -BenchmarkUnmarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 2259795 501.7 ns/op 272 B/op 7 allocs/op -BenchmarkUnmarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 2372409 533.9 ns/op 272 B/op 7 allocs/op -BenchmarkUnmarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 2186368 528.2 ns/op 272 B/op 7 allocs/op -BenchmarkUnmarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 2149996 543.4 ns/op 272 B/op 7 allocs/op -BenchmarkUnmarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 2644330 510.5 ns/op 272 B/op 7 allocs/op -BenchmarkMarshalBinary/1234567890123456789.1234567890123456879-32 18861951 56.35 ns/op 48 B/op 2 allocs/op -BenchmarkMarshalBinary/1234567890123456789.1234567890123456879-32 17066799 59.06 ns/op 48 B/op 2 allocs/op -BenchmarkMarshalBinary/1234567890123456789.1234567890123456879-32 23145838 58.48 ns/op 48 B/op 2 allocs/op -BenchmarkMarshalBinary/1234567890123456789.1234567890123456879-32 20125719 59.60 ns/op 48 B/op 2 allocs/op -BenchmarkMarshalBinary/1234567890123456789.1234567890123456879-32 18739875 57.75 ns/op 48 B/op 2 allocs/op -BenchmarkMarshalBinary/1234567890123456789.1234567890123456879-32 21346281 58.20 ns/op 48 B/op 2 allocs/op -BenchmarkMarshalBinary/1234567890123456789.1234567890123456879-32 22130532 63.37 ns/op 48 B/op 2 allocs/op -BenchmarkMarshalBinary/1234567890123456789.1234567890123456879-32 19540365 60.54 ns/op 48 B/op 2 allocs/op -BenchmarkMarshalBinary/1234567890123456789.1234567890123456879-32 24184670 53.53 ns/op 48 B/op 2 allocs/op -BenchmarkMarshalBinary/1234567890123456789.1234567890123456879-32 20429209 65.92 ns/op 48 B/op 2 allocs/op -BenchmarkMarshalBinary/123-32 40662699 28.99 ns/op 16 B/op 2 allocs/op -BenchmarkMarshalBinary/123-32 39917286 33.04 ns/op 16 B/op 2 allocs/op -BenchmarkMarshalBinary/123-32 35301182 33.04 ns/op 16 B/op 2 allocs/op -BenchmarkMarshalBinary/123-32 37707661 32.31 ns/op 16 B/op 2 allocs/op -BenchmarkMarshalBinary/123-32 35817758 29.42 ns/op 16 B/op 2 allocs/op -BenchmarkMarshalBinary/123-32 46422982 32.10 ns/op 16 B/op 2 allocs/op -BenchmarkMarshalBinary/123-32 42106566 30.20 ns/op 16 B/op 2 allocs/op -BenchmarkMarshalBinary/123-32 34638483 31.05 ns/op 16 B/op 2 allocs/op -BenchmarkMarshalBinary/123-32 35407813 30.65 ns/op 16 B/op 2 allocs/op -BenchmarkMarshalBinary/123-32 38794362 32.43 ns/op 16 B/op 2 allocs/op -BenchmarkMarshalBinary/123456.123456-32 43594957 46.70 ns/op 32 B/op 2 allocs/op -BenchmarkMarshalBinary/123456.123456-32 25154275 43.82 ns/op 32 B/op 2 allocs/op -BenchmarkMarshalBinary/123456.123456-32 27634316 45.92 ns/op 32 B/op 2 allocs/op -BenchmarkMarshalBinary/123456.123456-32 24514263 44.92 ns/op 32 B/op 2 allocs/op -BenchmarkMarshalBinary/123456.123456-32 35726932 44.17 ns/op 32 B/op 2 allocs/op -BenchmarkMarshalBinary/123456.123456-32 25060252 45.78 ns/op 32 B/op 2 allocs/op -BenchmarkMarshalBinary/123456.123456-32 23337002 44.81 ns/op 32 B/op 2 allocs/op -BenchmarkMarshalBinary/123456.123456-32 27204138 43.07 ns/op 32 B/op 2 allocs/op -BenchmarkMarshalBinary/123456.123456-32 26207632 44.43 ns/op 32 B/op 2 allocs/op -BenchmarkMarshalBinary/123456.123456-32 42492742 47.54 ns/op 32 B/op 2 allocs/op -BenchmarkMarshalBinary/1234567890-32 31456240 45.28 ns/op 32 B/op 2 allocs/op -BenchmarkMarshalBinary/1234567890-32 29410261 45.73 ns/op 32 B/op 2 allocs/op -BenchmarkMarshalBinary/1234567890-32 29313248 42.27 ns/op 32 B/op 2 allocs/op -BenchmarkMarshalBinary/1234567890-32 25529948 46.78 ns/op 32 B/op 2 allocs/op -BenchmarkMarshalBinary/1234567890-32 23966071 47.08 ns/op 32 B/op 2 allocs/op -BenchmarkMarshalBinary/1234567890-32 27981306 46.34 ns/op 32 B/op 2 allocs/op -BenchmarkMarshalBinary/1234567890-32 29430651 46.09 ns/op 32 B/op 2 allocs/op -BenchmarkMarshalBinary/1234567890-32 28482019 45.45 ns/op 32 B/op 2 allocs/op -BenchmarkMarshalBinary/1234567890-32 24886447 45.20 ns/op 32 B/op 2 allocs/op -BenchmarkMarshalBinary/1234567890-32 35494302 49.34 ns/op 32 B/op 2 allocs/op -BenchmarkMarshalBinary/0.1234567890123456879-32 32185044 43.24 ns/op 32 B/op 2 allocs/op -BenchmarkMarshalBinary/0.1234567890123456879-32 29289181 43.93 ns/op 32 B/op 2 allocs/op -BenchmarkMarshalBinary/0.1234567890123456879-32 32172241 42.26 ns/op 32 B/op 2 allocs/op -BenchmarkMarshalBinary/0.1234567890123456879-32 45890944 43.00 ns/op 32 B/op 2 allocs/op -BenchmarkMarshalBinary/0.1234567890123456879-32 32348678 42.39 ns/op 32 B/op 2 allocs/op -BenchmarkMarshalBinary/0.1234567890123456879-32 27674800 45.05 ns/op 32 B/op 2 allocs/op -BenchmarkMarshalBinary/0.1234567890123456879-32 33143835 40.32 ns/op 32 B/op 2 allocs/op -BenchmarkMarshalBinary/0.1234567890123456879-32 23305156 43.90 ns/op 32 B/op 2 allocs/op -BenchmarkMarshalBinary/0.1234567890123456879-32 22314050 47.44 ns/op 32 B/op 2 allocs/op -BenchmarkMarshalBinary/0.1234567890123456879-32 22976312 45.07 ns/op 32 B/op 2 allocs/op -BenchmarkMarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 15616688 69.88 ns/op 64 B/op 2 allocs/op -BenchmarkMarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 14920359 73.49 ns/op 64 B/op 2 allocs/op -BenchmarkMarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 20848520 68.32 ns/op 64 B/op 2 allocs/op -BenchmarkMarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 18318291 74.59 ns/op 64 B/op 2 allocs/op -BenchmarkMarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 14693959 76.93 ns/op 64 B/op 2 allocs/op -BenchmarkMarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 14030281 74.55 ns/op 64 B/op 2 allocs/op -BenchmarkMarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 15296751 73.87 ns/op 64 B/op 2 allocs/op -BenchmarkMarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 15107138 75.85 ns/op 64 B/op 2 allocs/op -BenchmarkMarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 19833240 72.99 ns/op 64 B/op 2 allocs/op -BenchmarkMarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 17418386 68.84 ns/op 64 B/op 2 allocs/op -BenchmarkUnmarshalBinary/1234567890123456789.1234567890123456879-32 16513976 66.91 ns/op 80 B/op 2 allocs/op -BenchmarkUnmarshalBinary/1234567890123456789.1234567890123456879-32 16554193 67.53 ns/op 80 B/op 2 allocs/op -BenchmarkUnmarshalBinary/1234567890123456789.1234567890123456879-32 17002248 72.31 ns/op 80 B/op 2 allocs/op -BenchmarkUnmarshalBinary/1234567890123456789.1234567890123456879-32 17287046 67.36 ns/op 80 B/op 2 allocs/op -BenchmarkUnmarshalBinary/1234567890123456789.1234567890123456879-32 16516237 67.91 ns/op 80 B/op 2 allocs/op -BenchmarkUnmarshalBinary/1234567890123456789.1234567890123456879-32 21611475 67.13 ns/op 80 B/op 2 allocs/op -BenchmarkUnmarshalBinary/1234567890123456789.1234567890123456879-32 17086098 69.81 ns/op 80 B/op 2 allocs/op -BenchmarkUnmarshalBinary/1234567890123456789.1234567890123456879-32 16406118 69.18 ns/op 80 B/op 2 allocs/op -BenchmarkUnmarshalBinary/1234567890123456789.1234567890123456879-32 16017063 70.11 ns/op 80 B/op 2 allocs/op -BenchmarkUnmarshalBinary/1234567890123456789.1234567890123456879-32 16921130 68.64 ns/op 80 B/op 2 allocs/op -BenchmarkUnmarshalBinary/123-32 22215945 47.87 ns/op 40 B/op 2 allocs/op -BenchmarkUnmarshalBinary/123-32 24742548 49.84 ns/op 40 B/op 2 allocs/op -BenchmarkUnmarshalBinary/123-32 26079627 50.52 ns/op 40 B/op 2 allocs/op -BenchmarkUnmarshalBinary/123-32 20540715 49.03 ns/op 40 B/op 2 allocs/op -BenchmarkUnmarshalBinary/123-32 20757438 51.44 ns/op 40 B/op 2 allocs/op -BenchmarkUnmarshalBinary/123-32 23488129 48.12 ns/op 40 B/op 2 allocs/op -BenchmarkUnmarshalBinary/123-32 22457340 48.44 ns/op 40 B/op 2 allocs/op -BenchmarkUnmarshalBinary/123-32 26328372 51.11 ns/op 40 B/op 2 allocs/op -BenchmarkUnmarshalBinary/123-32 21884347 50.50 ns/op 40 B/op 2 allocs/op -BenchmarkUnmarshalBinary/123-32 25614988 49.06 ns/op 40 B/op 2 allocs/op -BenchmarkUnmarshalBinary/123456.123456-32 19943635 52.52 ns/op 40 B/op 2 allocs/op -BenchmarkUnmarshalBinary/123456.123456-32 20196810 49.63 ns/op 40 B/op 2 allocs/op -BenchmarkUnmarshalBinary/123456.123456-32 26517014 49.50 ns/op 40 B/op 2 allocs/op -BenchmarkUnmarshalBinary/123456.123456-32 23977387 50.87 ns/op 40 B/op 2 allocs/op -BenchmarkUnmarshalBinary/123456.123456-32 20467161 52.42 ns/op 40 B/op 2 allocs/op -BenchmarkUnmarshalBinary/123456.123456-32 25810406 48.81 ns/op 40 B/op 2 allocs/op -BenchmarkUnmarshalBinary/123456.123456-32 23781613 54.62 ns/op 40 B/op 2 allocs/op -BenchmarkUnmarshalBinary/123456.123456-32 23560999 53.67 ns/op 40 B/op 2 allocs/op -BenchmarkUnmarshalBinary/123456.123456-32 30013018 51.70 ns/op 40 B/op 2 allocs/op -BenchmarkUnmarshalBinary/123456.123456-32 24538678 48.29 ns/op 40 B/op 2 allocs/op -BenchmarkUnmarshalBinary/1234567890-32 21838411 50.61 ns/op 40 B/op 2 allocs/op -BenchmarkUnmarshalBinary/1234567890-32 20392652 51.22 ns/op 40 B/op 2 allocs/op -BenchmarkUnmarshalBinary/1234567890-32 24377302 48.82 ns/op 40 B/op 2 allocs/op -BenchmarkUnmarshalBinary/1234567890-32 21753991 49.88 ns/op 40 B/op 2 allocs/op -BenchmarkUnmarshalBinary/1234567890-32 28289929 50.94 ns/op 40 B/op 2 allocs/op -BenchmarkUnmarshalBinary/1234567890-32 19131217 55.01 ns/op 40 B/op 2 allocs/op -BenchmarkUnmarshalBinary/1234567890-32 26632929 49.30 ns/op 40 B/op 2 allocs/op -BenchmarkUnmarshalBinary/1234567890-32 22583295 48.68 ns/op 40 B/op 2 allocs/op -BenchmarkUnmarshalBinary/1234567890-32 29826589 47.50 ns/op 40 B/op 2 allocs/op -BenchmarkUnmarshalBinary/1234567890-32 22318545 51.21 ns/op 40 B/op 2 allocs/op -BenchmarkUnmarshalBinary/0.1234567890123456879-32 22227584 48.94 ns/op 40 B/op 2 allocs/op -BenchmarkUnmarshalBinary/0.1234567890123456879-32 22800645 47.19 ns/op 40 B/op 2 allocs/op -BenchmarkUnmarshalBinary/0.1234567890123456879-32 25943350 47.20 ns/op 40 B/op 2 allocs/op -BenchmarkUnmarshalBinary/0.1234567890123456879-32 34616012 47.49 ns/op 40 B/op 2 allocs/op -BenchmarkUnmarshalBinary/0.1234567890123456879-32 21050680 50.00 ns/op 40 B/op 2 allocs/op -BenchmarkUnmarshalBinary/0.1234567890123456879-32 28472878 47.49 ns/op 40 B/op 2 allocs/op -BenchmarkUnmarshalBinary/0.1234567890123456879-32 27596535 46.98 ns/op 40 B/op 2 allocs/op -BenchmarkUnmarshalBinary/0.1234567890123456879-32 38477721 44.89 ns/op 40 B/op 2 allocs/op -BenchmarkUnmarshalBinary/0.1234567890123456879-32 32262842 49.97 ns/op 40 B/op 2 allocs/op -BenchmarkUnmarshalBinary/0.1234567890123456879-32 23677087 50.92 ns/op 40 B/op 2 allocs/op -BenchmarkUnmarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 16380690 70.91 ns/op 96 B/op 2 allocs/op -BenchmarkUnmarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 16273868 68.33 ns/op 96 B/op 2 allocs/op -BenchmarkUnmarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 17709607 71.68 ns/op 96 B/op 2 allocs/op -BenchmarkUnmarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 16701264 71.83 ns/op 96 B/op 2 allocs/op -BenchmarkUnmarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 15467305 69.76 ns/op 96 B/op 2 allocs/op -BenchmarkUnmarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 14637403 69.61 ns/op 96 B/op 2 allocs/op -BenchmarkUnmarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 16035015 71.70 ns/op 96 B/op 2 allocs/op -BenchmarkUnmarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 15498152 74.34 ns/op 96 B/op 2 allocs/op -BenchmarkUnmarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 15212418 74.69 ns/op 96 B/op 2 allocs/op -BenchmarkUnmarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 15821412 75.74 ns/op 96 B/op 2 allocs/op +BenchmarkParse/1234567890123456789.1234567890123456879-32 2606356 424.6 ns/op 168 B/op 5 allocs/op +BenchmarkParse/1234567890123456789.1234567890123456879-32 3071191 345.5 ns/op 168 B/op 5 allocs/op +BenchmarkParse/1234567890123456789.1234567890123456879-32 3186524 381.4 ns/op 168 B/op 5 allocs/op +BenchmarkParse/1234567890123456789.1234567890123456879-32 2656480 387.3 ns/op 168 B/op 5 allocs/op +BenchmarkParse/1234567890123456789.1234567890123456879-32 3484497 351.7 ns/op 168 B/op 5 allocs/op +BenchmarkParse/1234567890123456789.1234567890123456879-32 4067156 357.5 ns/op 168 B/op 5 allocs/op +BenchmarkParse/1234567890123456789.1234567890123456879-32 3809964 392.7 ns/op 168 B/op 5 allocs/op +BenchmarkParse/1234567890123456789.1234567890123456879-32 2369418 463.9 ns/op 168 B/op 5 allocs/op +BenchmarkParse/1234567890123456789.1234567890123456879-32 2958819 340.3 ns/op 168 B/op 5 allocs/op +BenchmarkParse/1234567890123456789.1234567890123456879-32 3152612 394.9 ns/op 168 B/op 5 allocs/op +BenchmarkParse/123-32 19299666 82.48 ns/op 40 B/op 2 allocs/op +BenchmarkParse/123-32 15619641 73.65 ns/op 40 B/op 2 allocs/op +BenchmarkParse/123-32 11188464 91.06 ns/op 40 B/op 2 allocs/op +BenchmarkParse/123-32 14689489 87.61 ns/op 40 B/op 2 allocs/op +BenchmarkParse/123-32 12632496 85.75 ns/op 40 B/op 2 allocs/op +BenchmarkParse/123-32 14870881 77.58 ns/op 40 B/op 2 allocs/op +BenchmarkParse/123-32 14299392 71.86 ns/op 40 B/op 2 allocs/op +BenchmarkParse/123-32 21598324 62.02 ns/op 40 B/op 2 allocs/op +BenchmarkParse/123-32 15192069 77.37 ns/op 40 B/op 2 allocs/op +BenchmarkParse/123-32 22094260 68.83 ns/op 40 B/op 2 allocs/op +BenchmarkParse/123456.123456-32 10358026 134.2 ns/op 56 B/op 3 allocs/op +BenchmarkParse/123456.123456-32 8846422 126.6 ns/op 56 B/op 3 allocs/op +BenchmarkParse/123456.123456-32 10729092 133.1 ns/op 56 B/op 3 allocs/op +BenchmarkParse/123456.123456-32 9501026 125.9 ns/op 56 B/op 3 allocs/op +BenchmarkParse/123456.123456-32 11011004 116.5 ns/op 56 B/op 3 allocs/op +BenchmarkParse/123456.123456-32 8447065 127.3 ns/op 56 B/op 3 allocs/op +BenchmarkParse/123456.123456-32 9393532 140.2 ns/op 56 B/op 3 allocs/op +BenchmarkParse/123456.123456-32 9238803 130.2 ns/op 56 B/op 3 allocs/op +BenchmarkParse/123456.123456-32 12586658 126.2 ns/op 56 B/op 3 allocs/op +BenchmarkParse/123456.123456-32 9386173 129.4 ns/op 56 B/op 3 allocs/op +BenchmarkParse/1234567890-32 14105725 83.42 ns/op 40 B/op 2 allocs/op +BenchmarkParse/1234567890-32 16733198 76.86 ns/op 40 B/op 2 allocs/op +BenchmarkParse/1234567890-32 15318158 84.34 ns/op 40 B/op 2 allocs/op +BenchmarkParse/1234567890-32 14738336 80.35 ns/op 40 B/op 2 allocs/op +BenchmarkParse/1234567890-32 15223918 85.80 ns/op 40 B/op 2 allocs/op +BenchmarkParse/1234567890-32 19471160 100.2 ns/op 40 B/op 2 allocs/op +BenchmarkParse/1234567890-32 16012039 83.18 ns/op 40 B/op 2 allocs/op +BenchmarkParse/1234567890-32 15198808 68.97 ns/op 40 B/op 2 allocs/op +BenchmarkParse/1234567890-32 13114130 81.77 ns/op 40 B/op 2 allocs/op +BenchmarkParse/1234567890-32 14462755 78.30 ns/op 40 B/op 2 allocs/op +BenchmarkParse/0.1234567890123456879-32 4226702 307.3 ns/op 144 B/op 5 allocs/op +BenchmarkParse/0.1234567890123456879-32 5228605 283.0 ns/op 144 B/op 5 allocs/op +BenchmarkParse/0.1234567890123456879-32 4118829 281.2 ns/op 144 B/op 5 allocs/op +BenchmarkParse/0.1234567890123456879-32 4199596 238.5 ns/op 144 B/op 5 allocs/op +BenchmarkParse/0.1234567890123456879-32 4508635 290.2 ns/op 144 B/op 5 allocs/op +BenchmarkParse/0.1234567890123456879-32 3935336 344.5 ns/op 144 B/op 5 allocs/op +BenchmarkParse/0.1234567890123456879-32 4524166 230.2 ns/op 144 B/op 5 allocs/op +BenchmarkParse/0.1234567890123456879-32 4930246 243.4 ns/op 144 B/op 5 allocs/op +BenchmarkParse/0.1234567890123456879-32 4491036 241.7 ns/op 144 B/op 5 allocs/op +BenchmarkParse/0.1234567890123456879-32 4911284 219.5 ns/op 144 B/op 5 allocs/op +BenchmarkParseFallBack/123456789123456789123456.1234567890123456-32 3580087 325.3 ns/op 168 B/op 5 allocs/op +BenchmarkParseFallBack/123456789123456789123456.1234567890123456-32 3728620 309.6 ns/op 168 B/op 5 allocs/op +BenchmarkParseFallBack/123456789123456789123456.1234567890123456-32 3925362 328.2 ns/op 168 B/op 5 allocs/op +BenchmarkParseFallBack/123456789123456789123456.1234567890123456-32 3372204 382.9 ns/op 168 B/op 5 allocs/op +BenchmarkParseFallBack/123456789123456789123456.1234567890123456-32 3093684 347.7 ns/op 168 B/op 5 allocs/op +BenchmarkParseFallBack/123456789123456789123456.1234567890123456-32 2724852 388.9 ns/op 168 B/op 5 allocs/op +BenchmarkParseFallBack/123456789123456789123456.1234567890123456-32 3899350 402.7 ns/op 168 B/op 5 allocs/op +BenchmarkParseFallBack/123456789123456789123456.1234567890123456-32 2948475 363.5 ns/op 168 B/op 5 allocs/op +BenchmarkParseFallBack/123456789123456789123456.1234567890123456-32 3402291 386.3 ns/op 168 B/op 5 allocs/op +BenchmarkParseFallBack/123456789123456789123456.1234567890123456-32 3066457 409.5 ns/op 168 B/op 5 allocs/op +BenchmarkParseFallBack/111222333444555666777888999.1234567890123456789-32 2965614 406.4 ns/op 168 B/op 5 allocs/op +BenchmarkParseFallBack/111222333444555666777888999.1234567890123456789-32 2849426 418.0 ns/op 168 B/op 5 allocs/op +BenchmarkParseFallBack/111222333444555666777888999.1234567890123456789-32 3023637 398.0 ns/op 168 B/op 5 allocs/op +BenchmarkParseFallBack/111222333444555666777888999.1234567890123456789-32 2683694 419.1 ns/op 168 B/op 5 allocs/op +BenchmarkParseFallBack/111222333444555666777888999.1234567890123456789-32 3025004 428.0 ns/op 168 B/op 5 allocs/op +BenchmarkParseFallBack/111222333444555666777888999.1234567890123456789-32 2807184 357.8 ns/op 168 B/op 5 allocs/op +BenchmarkParseFallBack/111222333444555666777888999.1234567890123456789-32 3511340 419.8 ns/op 168 B/op 5 allocs/op +BenchmarkParseFallBack/111222333444555666777888999.1234567890123456789-32 2960382 446.9 ns/op 168 B/op 5 allocs/op +BenchmarkParseFallBack/111222333444555666777888999.1234567890123456789-32 2880789 425.2 ns/op 168 B/op 5 allocs/op +BenchmarkParseFallBack/111222333444555666777888999.1234567890123456789-32 2885978 416.6 ns/op 168 B/op 5 allocs/op +BenchmarkString/1234567890123456789.1234567890123456879-32 5033197 250.6 ns/op 240 B/op 5 allocs/op +BenchmarkString/1234567890123456789.1234567890123456879-32 3086724 357.2 ns/op 240 B/op 5 allocs/op +BenchmarkString/1234567890123456789.1234567890123456879-32 4615150 262.7 ns/op 240 B/op 5 allocs/op +BenchmarkString/1234567890123456789.1234567890123456879-32 3344834 351.4 ns/op 240 B/op 5 allocs/op +BenchmarkString/1234567890123456789.1234567890123456879-32 5070862 360.0 ns/op 240 B/op 5 allocs/op +BenchmarkString/1234567890123456789.1234567890123456879-32 4740679 250.4 ns/op 240 B/op 5 allocs/op +BenchmarkString/1234567890123456789.1234567890123456879-32 4928235 244.2 ns/op 240 B/op 5 allocs/op +BenchmarkString/1234567890123456789.1234567890123456879-32 4396413 319.8 ns/op 240 B/op 5 allocs/op +BenchmarkString/1234567890123456789.1234567890123456879-32 4202720 277.6 ns/op 240 B/op 5 allocs/op +BenchmarkString/1234567890123456789.1234567890123456879-32 4128046 291.3 ns/op 240 B/op 5 allocs/op +BenchmarkString/123-32 10562820 115.1 ns/op 48 B/op 4 allocs/op +BenchmarkString/123-32 13724784 108.6 ns/op 48 B/op 4 allocs/op +BenchmarkString/123-32 8528638 119.6 ns/op 48 B/op 4 allocs/op +BenchmarkString/123-32 10632160 106.8 ns/op 48 B/op 4 allocs/op +BenchmarkString/123-32 17654884 103.1 ns/op 48 B/op 4 allocs/op +BenchmarkString/123-32 15120157 113.3 ns/op 48 B/op 4 allocs/op +BenchmarkString/123-32 12142378 109.9 ns/op 48 B/op 4 allocs/op +BenchmarkString/123-32 10627924 103.2 ns/op 48 B/op 4 allocs/op +BenchmarkString/123-32 10248948 111.5 ns/op 48 B/op 4 allocs/op +BenchmarkString/123-32 11233630 111.2 ns/op 48 B/op 4 allocs/op +BenchmarkString/123456.123456-32 11408148 138.3 ns/op 56 B/op 4 allocs/op +BenchmarkString/123456.123456-32 9923082 136.2 ns/op 56 B/op 4 allocs/op +BenchmarkString/123456.123456-32 9173317 126.9 ns/op 56 B/op 4 allocs/op +BenchmarkString/123456.123456-32 10552866 119.7 ns/op 56 B/op 4 allocs/op +BenchmarkString/123456.123456-32 10110184 134.6 ns/op 56 B/op 4 allocs/op +BenchmarkString/123456.123456-32 9269209 115.9 ns/op 56 B/op 4 allocs/op +BenchmarkString/123456.123456-32 10162630 133.5 ns/op 56 B/op 4 allocs/op +BenchmarkString/123456.123456-32 10908157 132.7 ns/op 56 B/op 4 allocs/op +BenchmarkString/123456.123456-32 8766796 126.8 ns/op 56 B/op 4 allocs/op +BenchmarkString/123456.123456-32 8843241 133.3 ns/op 56 B/op 4 allocs/op +BenchmarkString/1234567890-32 7369108 153.2 ns/op 72 B/op 4 allocs/op +BenchmarkString/1234567890-32 8044971 141.7 ns/op 72 B/op 4 allocs/op +BenchmarkString/1234567890-32 8533270 140.8 ns/op 72 B/op 4 allocs/op +BenchmarkString/1234567890-32 7576951 147.7 ns/op 72 B/op 4 allocs/op +BenchmarkString/1234567890-32 8308950 146.3 ns/op 72 B/op 4 allocs/op +BenchmarkString/1234567890-32 8513604 147.4 ns/op 72 B/op 4 allocs/op +BenchmarkString/1234567890-32 8948756 149.4 ns/op 72 B/op 4 allocs/op +BenchmarkString/1234567890-32 10141221 117.9 ns/op 72 B/op 4 allocs/op +BenchmarkString/1234567890-32 10968298 144.6 ns/op 72 B/op 4 allocs/op +BenchmarkString/1234567890-32 8885629 119.3 ns/op 72 B/op 4 allocs/op +BenchmarkString/0.1234567890123456879-32 8294817 186.0 ns/op 80 B/op 4 allocs/op +BenchmarkString/0.1234567890123456879-32 6309132 183.9 ns/op 80 B/op 4 allocs/op +BenchmarkString/0.1234567890123456879-32 7776912 185.0 ns/op 80 B/op 4 allocs/op +BenchmarkString/0.1234567890123456879-32 7340710 147.7 ns/op 80 B/op 4 allocs/op +BenchmarkString/0.1234567890123456879-32 5823046 172.5 ns/op 80 B/op 4 allocs/op +BenchmarkString/0.1234567890123456879-32 6226539 175.1 ns/op 80 B/op 4 allocs/op +BenchmarkString/0.1234567890123456879-32 6493614 159.2 ns/op 80 B/op 4 allocs/op +BenchmarkString/0.1234567890123456879-32 6106804 182.6 ns/op 80 B/op 4 allocs/op +BenchmarkString/0.1234567890123456879-32 8340056 170.9 ns/op 80 B/op 4 allocs/op +BenchmarkString/0.1234567890123456879-32 7816422 144.5 ns/op 80 B/op 4 allocs/op +BenchmarkStringFallBack/123456789123456789123456.1234567890123456-32 3008487 382.0 ns/op 272 B/op 5 allocs/op +BenchmarkStringFallBack/123456789123456789123456.1234567890123456-32 4295414 329.6 ns/op 272 B/op 5 allocs/op +BenchmarkStringFallBack/123456789123456789123456.1234567890123456-32 3388437 372.2 ns/op 272 B/op 5 allocs/op +BenchmarkStringFallBack/123456789123456789123456.1234567890123456-32 4423608 380.2 ns/op 272 B/op 5 allocs/op +BenchmarkStringFallBack/123456789123456789123456.1234567890123456-32 2483200 429.7 ns/op 272 B/op 5 allocs/op +BenchmarkStringFallBack/123456789123456789123456.1234567890123456-32 3463756 399.9 ns/op 272 B/op 5 allocs/op +BenchmarkStringFallBack/123456789123456789123456.1234567890123456-32 5069702 390.4 ns/op 272 B/op 5 allocs/op +BenchmarkStringFallBack/123456789123456789123456.1234567890123456-32 2986437 456.3 ns/op 272 B/op 5 allocs/op +BenchmarkStringFallBack/123456789123456789123456.1234567890123456-32 3615057 451.6 ns/op 272 B/op 5 allocs/op +BenchmarkStringFallBack/123456789123456789123456.1234567890123456-32 3659152 397.7 ns/op 272 B/op 5 allocs/op +BenchmarkStringFallBack/111222333444555666777888999.1234567890123456789-32 3921700 354.7 ns/op 272 B/op 5 allocs/op +BenchmarkStringFallBack/111222333444555666777888999.1234567890123456789-32 3790069 320.4 ns/op 272 B/op 5 allocs/op +BenchmarkStringFallBack/111222333444555666777888999.1234567890123456789-32 5102731 270.6 ns/op 272 B/op 5 allocs/op +BenchmarkStringFallBack/111222333444555666777888999.1234567890123456789-32 3934731 415.1 ns/op 272 B/op 5 allocs/op +BenchmarkStringFallBack/111222333444555666777888999.1234567890123456789-32 4067815 444.6 ns/op 272 B/op 5 allocs/op +BenchmarkStringFallBack/111222333444555666777888999.1234567890123456789-32 3809902 324.3 ns/op 272 B/op 5 allocs/op +BenchmarkStringFallBack/111222333444555666777888999.1234567890123456789-32 4165887 347.0 ns/op 272 B/op 5 allocs/op +BenchmarkStringFallBack/111222333444555666777888999.1234567890123456789-32 3825890 352.1 ns/op 272 B/op 5 allocs/op +BenchmarkStringFallBack/111222333444555666777888999.1234567890123456789-32 2659524 453.7 ns/op 272 B/op 5 allocs/op +BenchmarkStringFallBack/111222333444555666777888999.1234567890123456789-32 3374701 380.6 ns/op 272 B/op 5 allocs/op +BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1111.1789)-32 2837712 379.5 ns/op 288 B/op 8 allocs/op +BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1111.1789)-32 4081634 429.7 ns/op 288 B/op 8 allocs/op +BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1111.1789)-32 3340276 409.9 ns/op 288 B/op 8 allocs/op +BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1111.1789)-32 3233276 358.6 ns/op 288 B/op 8 allocs/op +BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1111.1789)-32 3296102 389.8 ns/op 288 B/op 8 allocs/op +BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1111.1789)-32 2996846 423.4 ns/op 288 B/op 8 allocs/op +BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1111.1789)-32 3496557 291.3 ns/op 288 B/op 8 allocs/op +BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1111.1789)-32 4315886 392.9 ns/op 288 B/op 8 allocs/op +BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1111.1789)-32 2998171 374.2 ns/op 288 B/op 8 allocs/op +BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1111.1789)-32 3860900 347.2 ns/op 288 B/op 8 allocs/op +BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1234567890123456789.1234567890123456789)-32 13524853 99.68 ns/op 96 B/op 2 allocs/op +BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1234567890123456789.1234567890123456789)-32 14777648 103.5 ns/op 96 B/op 2 allocs/op +BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1234567890123456789.1234567890123456789)-32 12862915 102.4 ns/op 96 B/op 2 allocs/op +BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1234567890123456789.1234567890123456789)-32 11763130 106.5 ns/op 96 B/op 2 allocs/op +BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1234567890123456789.1234567890123456789)-32 11181394 92.14 ns/op 96 B/op 2 allocs/op +BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1234567890123456789.1234567890123456789)-32 10876234 112.8 ns/op 96 B/op 2 allocs/op +BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1234567890123456789.1234567890123456789)-32 13638408 92.85 ns/op 96 B/op 2 allocs/op +BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1234567890123456789.1234567890123456789)-32 10225429 102.7 ns/op 96 B/op 2 allocs/op +BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1234567890123456789.1234567890123456789)-32 12798496 116.5 ns/op 96 B/op 2 allocs/op +BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1234567890123456789.1234567890123456789)-32 11940729 95.81 ns/op 96 B/op 2 allocs/op +BenchmarkAdd/123.456.Add(0.123)-32 9796958 104.7 ns/op 80 B/op 2 allocs/op +BenchmarkAdd/123.456.Add(0.123)-32 11463894 97.95 ns/op 80 B/op 2 allocs/op +BenchmarkAdd/123.456.Add(0.123)-32 14230198 80.21 ns/op 80 B/op 2 allocs/op +BenchmarkAdd/123.456.Add(0.123)-32 11159866 96.49 ns/op 80 B/op 2 allocs/op +BenchmarkAdd/123.456.Add(0.123)-32 11677359 95.62 ns/op 80 B/op 2 allocs/op +BenchmarkAdd/123.456.Add(0.123)-32 13048444 100.7 ns/op 80 B/op 2 allocs/op +BenchmarkAdd/123.456.Add(0.123)-32 12166058 106.7 ns/op 80 B/op 2 allocs/op +BenchmarkAdd/123.456.Add(0.123)-32 11634774 99.35 ns/op 80 B/op 2 allocs/op +BenchmarkAdd/123.456.Add(0.123)-32 14679066 94.00 ns/op 80 B/op 2 allocs/op +BenchmarkAdd/123.456.Add(0.123)-32 14973294 89.97 ns/op 80 B/op 2 allocs/op +BenchmarkAdd/3.Add(7)-32 13714334 87.70 ns/op 80 B/op 2 allocs/op +BenchmarkAdd/3.Add(7)-32 10899668 108.5 ns/op 80 B/op 2 allocs/op +BenchmarkAdd/3.Add(7)-32 11687539 95.14 ns/op 80 B/op 2 allocs/op +BenchmarkAdd/3.Add(7)-32 13858401 101.5 ns/op 80 B/op 2 allocs/op +BenchmarkAdd/3.Add(7)-32 19222594 91.99 ns/op 80 B/op 2 allocs/op +BenchmarkAdd/3.Add(7)-32 10054303 100.8 ns/op 80 B/op 2 allocs/op +BenchmarkAdd/3.Add(7)-32 13373212 82.55 ns/op 80 B/op 2 allocs/op +BenchmarkAdd/3.Add(7)-32 10652157 99.81 ns/op 80 B/op 2 allocs/op +BenchmarkAdd/3.Add(7)-32 12440821 90.46 ns/op 80 B/op 2 allocs/op +BenchmarkAdd/3.Add(7)-32 11653358 91.86 ns/op 80 B/op 2 allocs/op +BenchmarkAdd/123456.123456.Add(999999)-32 3584617 286.6 ns/op 272 B/op 8 allocs/op +BenchmarkAdd/123456.123456.Add(999999)-32 3582062 406.7 ns/op 272 B/op 8 allocs/op +BenchmarkAdd/123456.123456.Add(999999)-32 3311589 381.4 ns/op 272 B/op 8 allocs/op +BenchmarkAdd/123456.123456.Add(999999)-32 3679716 360.9 ns/op 272 B/op 8 allocs/op +BenchmarkAdd/123456.123456.Add(999999)-32 2925018 380.7 ns/op 272 B/op 8 allocs/op +BenchmarkAdd/123456.123456.Add(999999)-32 3487879 324.8 ns/op 272 B/op 8 allocs/op +BenchmarkAdd/123456.123456.Add(999999)-32 3114739 376.0 ns/op 272 B/op 8 allocs/op +BenchmarkAdd/123456.123456.Add(999999)-32 3335492 351.0 ns/op 272 B/op 8 allocs/op +BenchmarkAdd/123456.123456.Add(999999)-32 3471624 352.2 ns/op 272 B/op 8 allocs/op +BenchmarkAdd/123456.123456.Add(999999)-32 3765792 376.2 ns/op 272 B/op 8 allocs/op +BenchmarkAdd/123456.123456.Add(456781244.1324897546)-32 3650000 351.6 ns/op 272 B/op 8 allocs/op +BenchmarkAdd/123456.123456.Add(456781244.1324897546)-32 3967624 367.9 ns/op 272 B/op 8 allocs/op +BenchmarkAdd/123456.123456.Add(456781244.1324897546)-32 3240022 317.5 ns/op 272 B/op 8 allocs/op +BenchmarkAdd/123456.123456.Add(456781244.1324897546)-32 3474416 317.0 ns/op 272 B/op 8 allocs/op +BenchmarkAdd/123456.123456.Add(456781244.1324897546)-32 4160972 390.6 ns/op 272 B/op 8 allocs/op +BenchmarkAdd/123456.123456.Add(456781244.1324897546)-32 3276909 336.4 ns/op 272 B/op 8 allocs/op +BenchmarkAdd/123456.123456.Add(456781244.1324897546)-32 4138164 297.1 ns/op 272 B/op 8 allocs/op +BenchmarkAdd/123456.123456.Add(456781244.1324897546)-32 3396999 309.4 ns/op 272 B/op 8 allocs/op +BenchmarkAdd/123456.123456.Add(456781244.1324897546)-32 3663154 303.0 ns/op 272 B/op 8 allocs/op +BenchmarkAdd/123456.123456.Add(456781244.1324897546)-32 4198225 346.2 ns/op 272 B/op 8 allocs/op +BenchmarkAdd/548751.15465466546.Add(1542.456487)-32 4106204 349.4 ns/op 272 B/op 8 allocs/op +BenchmarkAdd/548751.15465466546.Add(1542.456487)-32 3101643 389.5 ns/op 272 B/op 8 allocs/op +BenchmarkAdd/548751.15465466546.Add(1542.456487)-32 3003110 343.7 ns/op 272 B/op 8 allocs/op +BenchmarkAdd/548751.15465466546.Add(1542.456487)-32 3360816 380.1 ns/op 272 B/op 8 allocs/op +BenchmarkAdd/548751.15465466546.Add(1542.456487)-32 3257330 357.3 ns/op 272 B/op 8 allocs/op +BenchmarkAdd/548751.15465466546.Add(1542.456487)-32 3480338 332.3 ns/op 272 B/op 8 allocs/op +BenchmarkAdd/548751.15465466546.Add(1542.456487)-32 3367029 319.5 ns/op 272 B/op 8 allocs/op +BenchmarkAdd/548751.15465466546.Add(1542.456487)-32 3992415 327.3 ns/op 272 B/op 8 allocs/op +BenchmarkAdd/548751.15465466546.Add(1542.456487)-32 3840067 360.4 ns/op 272 B/op 8 allocs/op +BenchmarkAdd/548751.15465466546.Add(1542.456487)-32 3239017 329.6 ns/op 272 B/op 8 allocs/op +BenchmarkSub/3.Sub(7)-32 27280555 61.85 ns/op 40 B/op 2 allocs/op +BenchmarkSub/3.Sub(7)-32 33637461 59.46 ns/op 40 B/op 2 allocs/op +BenchmarkSub/3.Sub(7)-32 16906629 67.00 ns/op 40 B/op 2 allocs/op +BenchmarkSub/3.Sub(7)-32 19462831 67.39 ns/op 40 B/op 2 allocs/op +BenchmarkSub/3.Sub(7)-32 17971309 67.66 ns/op 40 B/op 2 allocs/op +BenchmarkSub/3.Sub(7)-32 18665084 71.00 ns/op 40 B/op 2 allocs/op +BenchmarkSub/3.Sub(7)-32 20805823 68.54 ns/op 40 B/op 2 allocs/op +BenchmarkSub/3.Sub(7)-32 22313353 68.71 ns/op 40 B/op 2 allocs/op +BenchmarkSub/3.Sub(7)-32 21196476 67.87 ns/op 40 B/op 2 allocs/op +BenchmarkSub/3.Sub(7)-32 18648932 68.59 ns/op 40 B/op 2 allocs/op +BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1111.1789)-32 4436550 378.6 ns/op 272 B/op 8 allocs/op +BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1111.1789)-32 4130998 360.3 ns/op 272 B/op 8 allocs/op +BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1111.1789)-32 3915247 405.0 ns/op 272 B/op 8 allocs/op +BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1111.1789)-32 3564663 373.7 ns/op 272 B/op 8 allocs/op +BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1111.1789)-32 3483492 346.8 ns/op 272 B/op 8 allocs/op +BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1111.1789)-32 3122836 346.5 ns/op 272 B/op 8 allocs/op +BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1111.1789)-32 4212498 347.7 ns/op 272 B/op 8 allocs/op +BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1111.1789)-32 3028995 415.3 ns/op 272 B/op 8 allocs/op +BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1111.1789)-32 3529896 403.3 ns/op 272 B/op 8 allocs/op +BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1111.1789)-32 2872446 430.4 ns/op 272 B/op 8 allocs/op +BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1234567890123456789.1234567890123456789)-32 20380990 98.66 ns/op 80 B/op 2 allocs/op +BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1234567890123456789.1234567890123456789)-32 17403165 96.67 ns/op 80 B/op 2 allocs/op +BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1234567890123456789.1234567890123456789)-32 10772107 114.8 ns/op 80 B/op 2 allocs/op +BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1234567890123456789.1234567890123456789)-32 12315062 102.4 ns/op 80 B/op 2 allocs/op +BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1234567890123456789.1234567890123456789)-32 17575044 92.89 ns/op 80 B/op 2 allocs/op +BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1234567890123456789.1234567890123456789)-32 9797596 108.0 ns/op 80 B/op 2 allocs/op +BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1234567890123456789.1234567890123456789)-32 12988096 106.9 ns/op 80 B/op 2 allocs/op +BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1234567890123456789.1234567890123456789)-32 12049854 110.2 ns/op 80 B/op 2 allocs/op +BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1234567890123456789.1234567890123456789)-32 18864724 113.6 ns/op 80 B/op 2 allocs/op +BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1234567890123456789.1234567890123456789)-32 11827021 100.9 ns/op 80 B/op 2 allocs/op +BenchmarkSub/123.456.Sub(0.123)-32 16567338 63.95 ns/op 40 B/op 2 allocs/op +BenchmarkSub/123.456.Sub(0.123)-32 17724117 60.52 ns/op 40 B/op 2 allocs/op +BenchmarkSub/123.456.Sub(0.123)-32 23700088 61.89 ns/op 40 B/op 2 allocs/op +BenchmarkSub/123.456.Sub(0.123)-32 18292482 70.31 ns/op 40 B/op 2 allocs/op +BenchmarkSub/123.456.Sub(0.123)-32 16509426 64.17 ns/op 40 B/op 2 allocs/op +BenchmarkSub/123.456.Sub(0.123)-32 15469018 76.52 ns/op 40 B/op 2 allocs/op +BenchmarkSub/123.456.Sub(0.123)-32 18827560 64.40 ns/op 40 B/op 2 allocs/op +BenchmarkSub/123.456.Sub(0.123)-32 25708518 64.94 ns/op 40 B/op 2 allocs/op +BenchmarkSub/123.456.Sub(0.123)-32 23352103 73.63 ns/op 40 B/op 2 allocs/op +BenchmarkSub/123.456.Sub(0.123)-32 16940041 72.01 ns/op 40 B/op 2 allocs/op +BenchmarkSub/123456.123456.Sub(456781244.1324897546)-32 3411644 316.2 ns/op 232 B/op 8 allocs/op +BenchmarkSub/123456.123456.Sub(456781244.1324897546)-32 4517016 302.9 ns/op 232 B/op 8 allocs/op +BenchmarkSub/123456.123456.Sub(456781244.1324897546)-32 3487654 362.1 ns/op 232 B/op 8 allocs/op +BenchmarkSub/123456.123456.Sub(456781244.1324897546)-32 5427115 308.6 ns/op 232 B/op 8 allocs/op +BenchmarkSub/123456.123456.Sub(456781244.1324897546)-32 5328093 253.9 ns/op 232 B/op 8 allocs/op +BenchmarkSub/123456.123456.Sub(456781244.1324897546)-32 6817857 263.2 ns/op 232 B/op 8 allocs/op +BenchmarkSub/123456.123456.Sub(456781244.1324897546)-32 4844233 282.6 ns/op 232 B/op 8 allocs/op +BenchmarkSub/123456.123456.Sub(456781244.1324897546)-32 4385118 370.4 ns/op 232 B/op 8 allocs/op +BenchmarkSub/123456.123456.Sub(456781244.1324897546)-32 3408403 349.2 ns/op 232 B/op 8 allocs/op +BenchmarkSub/123456.123456.Sub(456781244.1324897546)-32 4571829 357.0 ns/op 232 B/op 8 allocs/op +BenchmarkSub/548751.15465466546.Sub(1542.456487)-32 3512821 395.5 ns/op 232 B/op 8 allocs/op +BenchmarkSub/548751.15465466546.Sub(1542.456487)-32 3130776 389.2 ns/op 232 B/op 8 allocs/op +BenchmarkSub/548751.15465466546.Sub(1542.456487)-32 3465976 315.2 ns/op 232 B/op 8 allocs/op +BenchmarkSub/548751.15465466546.Sub(1542.456487)-32 3284904 381.9 ns/op 232 B/op 8 allocs/op +BenchmarkSub/548751.15465466546.Sub(1542.456487)-32 3055546 360.5 ns/op 232 B/op 8 allocs/op +BenchmarkSub/548751.15465466546.Sub(1542.456487)-32 3483939 364.3 ns/op 232 B/op 8 allocs/op +BenchmarkSub/548751.15465466546.Sub(1542.456487)-32 3887828 386.7 ns/op 232 B/op 8 allocs/op +BenchmarkSub/548751.15465466546.Sub(1542.456487)-32 3424467 400.5 ns/op 232 B/op 8 allocs/op +BenchmarkSub/548751.15465466546.Sub(1542.456487)-32 3678056 351.9 ns/op 232 B/op 8 allocs/op +BenchmarkSub/548751.15465466546.Sub(1542.456487)-32 3314668 376.0 ns/op 232 B/op 8 allocs/op +BenchmarkMul/1234.1234567890123456879.Mul(1111.1789)-32 11176239 117.4 ns/op 96 B/op 2 allocs/op +BenchmarkMul/1234.1234567890123456879.Mul(1111.1789)-32 13282573 111.5 ns/op 96 B/op 2 allocs/op +BenchmarkMul/1234.1234567890123456879.Mul(1111.1789)-32 10697778 119.4 ns/op 96 B/op 2 allocs/op +BenchmarkMul/1234.1234567890123456879.Mul(1111.1789)-32 10516868 116.5 ns/op 96 B/op 2 allocs/op +BenchmarkMul/1234.1234567890123456879.Mul(1111.1789)-32 9705654 114.5 ns/op 96 B/op 2 allocs/op +BenchmarkMul/1234.1234567890123456879.Mul(1111.1789)-32 9293202 111.6 ns/op 96 B/op 2 allocs/op +BenchmarkMul/1234.1234567890123456879.Mul(1111.1789)-32 9336532 112.0 ns/op 96 B/op 2 allocs/op +BenchmarkMul/1234.1234567890123456879.Mul(1111.1789)-32 9510609 110.3 ns/op 96 B/op 2 allocs/op +BenchmarkMul/1234.1234567890123456879.Mul(1111.1789)-32 11228634 111.6 ns/op 96 B/op 2 allocs/op +BenchmarkMul/1234.1234567890123456879.Mul(1111.1789)-32 10480497 104.5 ns/op 96 B/op 2 allocs/op +BenchmarkMul/1234.1234567890123456879.Mul(1111.1234567890123456789)-32 8247298 134.6 ns/op 96 B/op 2 allocs/op +BenchmarkMul/1234.1234567890123456879.Mul(1111.1234567890123456789)-32 15454410 114.3 ns/op 96 B/op 2 allocs/op +BenchmarkMul/1234.1234567890123456879.Mul(1111.1234567890123456789)-32 10596572 103.4 ns/op 96 B/op 2 allocs/op +BenchmarkMul/1234.1234567890123456879.Mul(1111.1234567890123456789)-32 21086342 120.1 ns/op 96 B/op 2 allocs/op +BenchmarkMul/1234.1234567890123456879.Mul(1111.1234567890123456789)-32 8569809 122.7 ns/op 96 B/op 2 allocs/op +BenchmarkMul/1234.1234567890123456879.Mul(1111.1234567890123456789)-32 9460166 125.2 ns/op 96 B/op 2 allocs/op +BenchmarkMul/1234.1234567890123456879.Mul(1111.1234567890123456789)-32 10225442 117.8 ns/op 96 B/op 2 allocs/op +BenchmarkMul/1234.1234567890123456879.Mul(1111.1234567890123456789)-32 9597770 120.2 ns/op 96 B/op 2 allocs/op +BenchmarkMul/1234.1234567890123456879.Mul(1111.1234567890123456789)-32 11055124 128.0 ns/op 96 B/op 2 allocs/op +BenchmarkMul/1234.1234567890123456879.Mul(1111.1234567890123456789)-32 9322190 135.3 ns/op 96 B/op 2 allocs/op +BenchmarkMul/123.456.Mul(0.123)-32 11113102 98.33 ns/op 80 B/op 2 allocs/op +BenchmarkMul/123.456.Mul(0.123)-32 10461649 98.54 ns/op 80 B/op 2 allocs/op +BenchmarkMul/123.456.Mul(0.123)-32 12389024 112.8 ns/op 80 B/op 2 allocs/op +BenchmarkMul/123.456.Mul(0.123)-32 12125636 96.06 ns/op 80 B/op 2 allocs/op +BenchmarkMul/123.456.Mul(0.123)-32 15324445 111.2 ns/op 80 B/op 2 allocs/op +BenchmarkMul/123.456.Mul(0.123)-32 17154842 101.8 ns/op 80 B/op 2 allocs/op +BenchmarkMul/123.456.Mul(0.123)-32 14252462 112.9 ns/op 80 B/op 2 allocs/op +BenchmarkMul/123.456.Mul(0.123)-32 13074771 90.13 ns/op 80 B/op 2 allocs/op +BenchmarkMul/123.456.Mul(0.123)-32 13271634 102.0 ns/op 80 B/op 2 allocs/op +BenchmarkMul/123.456.Mul(0.123)-32 11872034 105.6 ns/op 80 B/op 2 allocs/op +BenchmarkMul/3.Mul(7)-32 12309538 107.1 ns/op 80 B/op 2 allocs/op +BenchmarkMul/3.Mul(7)-32 12080856 104.9 ns/op 80 B/op 2 allocs/op +BenchmarkMul/3.Mul(7)-32 11866990 101.5 ns/op 80 B/op 2 allocs/op +BenchmarkMul/3.Mul(7)-32 10208863 107.6 ns/op 80 B/op 2 allocs/op +BenchmarkMul/3.Mul(7)-32 24070178 106.8 ns/op 80 B/op 2 allocs/op +BenchmarkMul/3.Mul(7)-32 15869578 98.93 ns/op 80 B/op 2 allocs/op +BenchmarkMul/3.Mul(7)-32 13005136 104.3 ns/op 80 B/op 2 allocs/op +BenchmarkMul/3.Mul(7)-32 12518310 97.79 ns/op 80 B/op 2 allocs/op +BenchmarkMul/3.Mul(7)-32 11656922 99.79 ns/op 80 B/op 2 allocs/op +BenchmarkMul/3.Mul(7)-32 11994699 105.6 ns/op 80 B/op 2 allocs/op +BenchmarkMul/123456.123456.Mul(999999)-32 12199520 113.3 ns/op 80 B/op 2 allocs/op +BenchmarkMul/123456.123456.Mul(999999)-32 11141660 103.3 ns/op 80 B/op 2 allocs/op +BenchmarkMul/123456.123456.Mul(999999)-32 13345045 92.26 ns/op 80 B/op 2 allocs/op +BenchmarkMul/123456.123456.Mul(999999)-32 13136008 102.2 ns/op 80 B/op 2 allocs/op +BenchmarkMul/123456.123456.Mul(999999)-32 12107742 100.9 ns/op 80 B/op 2 allocs/op +BenchmarkMul/123456.123456.Mul(999999)-32 15330442 102.2 ns/op 80 B/op 2 allocs/op +BenchmarkMul/123456.123456.Mul(999999)-32 10798564 100.9 ns/op 80 B/op 2 allocs/op +BenchmarkMul/123456.123456.Mul(999999)-32 10220205 102.5 ns/op 80 B/op 2 allocs/op +BenchmarkMul/123456.123456.Mul(999999)-32 10593745 107.4 ns/op 80 B/op 2 allocs/op +BenchmarkMul/123456.123456.Mul(999999)-32 11529962 111.6 ns/op 80 B/op 2 allocs/op +BenchmarkMul/123456.123456.Mul(456781244.1324897546)-32 10415270 104.7 ns/op 80 B/op 2 allocs/op +BenchmarkMul/123456.123456.Mul(456781244.1324897546)-32 16106264 96.29 ns/op 80 B/op 2 allocs/op +BenchmarkMul/123456.123456.Mul(456781244.1324897546)-32 11713924 104.3 ns/op 80 B/op 2 allocs/op +BenchmarkMul/123456.123456.Mul(456781244.1324897546)-32 12475316 100.4 ns/op 80 B/op 2 allocs/op +BenchmarkMul/123456.123456.Mul(456781244.1324897546)-32 11070392 98.96 ns/op 80 B/op 2 allocs/op +BenchmarkMul/123456.123456.Mul(456781244.1324897546)-32 12965628 104.2 ns/op 80 B/op 2 allocs/op +BenchmarkMul/123456.123456.Mul(456781244.1324897546)-32 10371168 100.2 ns/op 80 B/op 2 allocs/op +BenchmarkMul/123456.123456.Mul(456781244.1324897546)-32 11366175 90.72 ns/op 80 B/op 2 allocs/op +BenchmarkMul/123456.123456.Mul(456781244.1324897546)-32 11643106 103.9 ns/op 80 B/op 2 allocs/op +BenchmarkMul/123456.123456.Mul(456781244.1324897546)-32 10968490 92.36 ns/op 80 B/op 2 allocs/op +BenchmarkMul/548751.15465466546.Mul(1542.456487)-32 14266996 105.1 ns/op 80 B/op 2 allocs/op +BenchmarkMul/548751.15465466546.Mul(1542.456487)-32 11221248 102.5 ns/op 80 B/op 2 allocs/op +BenchmarkMul/548751.15465466546.Mul(1542.456487)-32 10202355 111.0 ns/op 80 B/op 2 allocs/op +BenchmarkMul/548751.15465466546.Mul(1542.456487)-32 11715774 94.22 ns/op 80 B/op 2 allocs/op +BenchmarkMul/548751.15465466546.Mul(1542.456487)-32 9942739 104.3 ns/op 80 B/op 2 allocs/op +BenchmarkMul/548751.15465466546.Mul(1542.456487)-32 12588708 97.03 ns/op 80 B/op 2 allocs/op +BenchmarkMul/548751.15465466546.Mul(1542.456487)-32 12850366 102.0 ns/op 80 B/op 2 allocs/op +BenchmarkMul/548751.15465466546.Mul(1542.456487)-32 14766976 103.6 ns/op 80 B/op 2 allocs/op +BenchmarkMul/548751.15465466546.Mul(1542.456487)-32 12577491 106.2 ns/op 80 B/op 2 allocs/op +BenchmarkMul/548751.15465466546.Mul(1542.456487)-32 10616454 102.8 ns/op 80 B/op 2 allocs/op +BenchmarkDiv/1234567890123456789.1234567890123456879.Div(1111.1789)-32 2001427 558.9 ns/op 352 B/op 11 allocs/op +BenchmarkDiv/1234567890123456789.1234567890123456879.Div(1111.1789)-32 1999024 535.4 ns/op 352 B/op 11 allocs/op +BenchmarkDiv/1234567890123456789.1234567890123456879.Div(1111.1789)-32 2252511 522.0 ns/op 352 B/op 11 allocs/op +BenchmarkDiv/1234567890123456789.1234567890123456879.Div(1111.1789)-32 2361565 546.4 ns/op 352 B/op 11 allocs/op +BenchmarkDiv/1234567890123456789.1234567890123456879.Div(1111.1789)-32 2019435 527.7 ns/op 352 B/op 11 allocs/op +BenchmarkDiv/1234567890123456789.1234567890123456879.Div(1111.1789)-32 2363082 484.3 ns/op 352 B/op 11 allocs/op +BenchmarkDiv/1234567890123456789.1234567890123456879.Div(1111.1789)-32 2259567 536.6 ns/op 352 B/op 11 allocs/op +BenchmarkDiv/1234567890123456789.1234567890123456879.Div(1111.1789)-32 2878698 565.0 ns/op 352 B/op 11 allocs/op +BenchmarkDiv/1234567890123456789.1234567890123456879.Div(1111.1789)-32 2226279 505.6 ns/op 352 B/op 11 allocs/op +BenchmarkDiv/1234567890123456789.1234567890123456879.Div(1111.1789)-32 2243221 479.1 ns/op 352 B/op 11 allocs/op +BenchmarkDiv/12345.1234567890123456879.Div(1111.1234567890123456789)-32 1803873 650.3 ns/op 336 B/op 9 allocs/op +BenchmarkDiv/12345.1234567890123456879.Div(1111.1234567890123456789)-32 1901464 653.9 ns/op 336 B/op 9 allocs/op +BenchmarkDiv/12345.1234567890123456879.Div(1111.1234567890123456789)-32 1799982 581.2 ns/op 336 B/op 9 allocs/op +BenchmarkDiv/12345.1234567890123456879.Div(1111.1234567890123456789)-32 1961334 666.6 ns/op 336 B/op 9 allocs/op +BenchmarkDiv/12345.1234567890123456879.Div(1111.1234567890123456789)-32 2204139 617.4 ns/op 336 B/op 9 allocs/op +BenchmarkDiv/12345.1234567890123456879.Div(1111.1234567890123456789)-32 1785332 648.8 ns/op 336 B/op 9 allocs/op +BenchmarkDiv/12345.1234567890123456879.Div(1111.1234567890123456789)-32 3167824 387.6 ns/op 336 B/op 9 allocs/op +BenchmarkDiv/12345.1234567890123456879.Div(1111.1234567890123456789)-32 2972823 376.9 ns/op 336 B/op 9 allocs/op +BenchmarkDiv/12345.1234567890123456879.Div(1111.1234567890123456789)-32 3897938 547.4 ns/op 336 B/op 9 allocs/op +BenchmarkDiv/12345.1234567890123456879.Div(1111.1234567890123456789)-32 2583777 445.5 ns/op 336 B/op 9 allocs/op +BenchmarkDiv/1234567890123456789.1234567890123456879.Div(9876543210987654321.1234567890123456789)-32 2783401 446.3 ns/op 336 B/op 9 allocs/op +BenchmarkDiv/1234567890123456789.1234567890123456879.Div(9876543210987654321.1234567890123456789)-32 2728230 402.9 ns/op 336 B/op 9 allocs/op +BenchmarkDiv/1234567890123456789.1234567890123456879.Div(9876543210987654321.1234567890123456789)-32 2907870 596.3 ns/op 336 B/op 9 allocs/op +BenchmarkDiv/1234567890123456789.1234567890123456879.Div(9876543210987654321.1234567890123456789)-32 2333786 449.0 ns/op 336 B/op 9 allocs/op +BenchmarkDiv/1234567890123456789.1234567890123456879.Div(9876543210987654321.1234567890123456789)-32 3167222 585.9 ns/op 336 B/op 9 allocs/op +BenchmarkDiv/1234567890123456789.1234567890123456879.Div(9876543210987654321.1234567890123456789)-32 3221036 475.6 ns/op 336 B/op 9 allocs/op +BenchmarkDiv/1234567890123456789.1234567890123456879.Div(9876543210987654321.1234567890123456789)-32 3124442 382.3 ns/op 336 B/op 9 allocs/op +BenchmarkDiv/1234567890123456789.1234567890123456879.Div(9876543210987654321.1234567890123456789)-32 2228572 516.6 ns/op 336 B/op 9 allocs/op +BenchmarkDiv/1234567890123456789.1234567890123456879.Div(9876543210987654321.1234567890123456789)-32 2412388 609.3 ns/op 336 B/op 9 allocs/op +BenchmarkDiv/1234567890123456789.1234567890123456879.Div(9876543210987654321.1234567890123456789)-32 2420545 503.1 ns/op 336 B/op 9 allocs/op +BenchmarkDiv/123.456.Div(0.123)-32 3072528 410.4 ns/op 288 B/op 10 allocs/op +BenchmarkDiv/123.456.Div(0.123)-32 2895246 449.6 ns/op 288 B/op 10 allocs/op +BenchmarkDiv/123.456.Div(0.123)-32 2685127 437.6 ns/op 288 B/op 10 allocs/op +BenchmarkDiv/123.456.Div(0.123)-32 3225652 443.3 ns/op 288 B/op 10 allocs/op +BenchmarkDiv/123.456.Div(0.123)-32 2590617 419.7 ns/op 288 B/op 10 allocs/op +BenchmarkDiv/123.456.Div(0.123)-32 3212510 492.7 ns/op 288 B/op 10 allocs/op +BenchmarkDiv/123.456.Div(0.123)-32 2724086 464.5 ns/op 288 B/op 10 allocs/op +BenchmarkDiv/123.456.Div(0.123)-32 2982030 404.2 ns/op 288 B/op 10 allocs/op +BenchmarkDiv/123.456.Div(0.123)-32 2586787 447.7 ns/op 288 B/op 10 allocs/op +BenchmarkDiv/123.456.Div(0.123)-32 2402697 450.6 ns/op 288 B/op 10 allocs/op +BenchmarkDiv/3.Div(7)-32 2614386 533.5 ns/op 328 B/op 12 allocs/op +BenchmarkDiv/3.Div(7)-32 2541856 521.1 ns/op 328 B/op 12 allocs/op +BenchmarkDiv/3.Div(7)-32 2237886 511.6 ns/op 328 B/op 12 allocs/op +BenchmarkDiv/3.Div(7)-32 2586518 554.6 ns/op 328 B/op 12 allocs/op +BenchmarkDiv/3.Div(7)-32 2312083 559.3 ns/op 328 B/op 12 allocs/op +BenchmarkDiv/3.Div(7)-32 2242868 525.0 ns/op 328 B/op 12 allocs/op +BenchmarkDiv/3.Div(7)-32 2439654 454.8 ns/op 328 B/op 12 allocs/op +BenchmarkDiv/3.Div(7)-32 2206954 532.9 ns/op 328 B/op 12 allocs/op +BenchmarkDiv/3.Div(7)-32 2241189 469.7 ns/op 328 B/op 12 allocs/op +BenchmarkDiv/3.Div(7)-32 2363046 466.4 ns/op 328 B/op 12 allocs/op +BenchmarkDiv/123456.123456.Div(999999)-32 2764886 400.3 ns/op 288 B/op 10 allocs/op +BenchmarkDiv/123456.123456.Div(999999)-32 2729370 446.8 ns/op 288 B/op 10 allocs/op +BenchmarkDiv/123456.123456.Div(999999)-32 2604680 481.9 ns/op 288 B/op 10 allocs/op +BenchmarkDiv/123456.123456.Div(999999)-32 2586762 445.8 ns/op 288 B/op 10 allocs/op +BenchmarkDiv/123456.123456.Div(999999)-32 2889513 474.3 ns/op 288 B/op 10 allocs/op +BenchmarkDiv/123456.123456.Div(999999)-32 3017598 438.5 ns/op 288 B/op 10 allocs/op +BenchmarkDiv/123456.123456.Div(999999)-32 3401457 439.5 ns/op 288 B/op 10 allocs/op +BenchmarkDiv/123456.123456.Div(999999)-32 3038935 428.8 ns/op 288 B/op 10 allocs/op +BenchmarkDiv/123456.123456.Div(999999)-32 2563717 443.8 ns/op 288 B/op 10 allocs/op +BenchmarkDiv/123456.123456.Div(999999)-32 3520320 476.3 ns/op 288 B/op 10 allocs/op +BenchmarkDiv/123456.123456.Div(456781244.1324897546)-32 2140495 577.0 ns/op 368 B/op 12 allocs/op +BenchmarkDiv/123456.123456.Div(456781244.1324897546)-32 2493212 613.6 ns/op 368 B/op 12 allocs/op +BenchmarkDiv/123456.123456.Div(456781244.1324897546)-32 2053581 576.4 ns/op 368 B/op 12 allocs/op +BenchmarkDiv/123456.123456.Div(456781244.1324897546)-32 2249961 578.1 ns/op 368 B/op 12 allocs/op +BenchmarkDiv/123456.123456.Div(456781244.1324897546)-32 2454177 450.6 ns/op 368 B/op 12 allocs/op +BenchmarkDiv/123456.123456.Div(456781244.1324897546)-32 2231642 506.6 ns/op 368 B/op 12 allocs/op +BenchmarkDiv/123456.123456.Div(456781244.1324897546)-32 2607952 550.3 ns/op 368 B/op 12 allocs/op +BenchmarkDiv/123456.123456.Div(456781244.1324897546)-32 2230626 563.8 ns/op 368 B/op 12 allocs/op +BenchmarkDiv/123456.123456.Div(456781244.1324897546)-32 2729355 534.7 ns/op 368 B/op 12 allocs/op +BenchmarkDiv/123456.123456.Div(456781244.1324897546)-32 1916490 527.7 ns/op 368 B/op 12 allocs/op +BenchmarkDiv/548751.15465466546.Div(1542.456487)-32 1991365 580.5 ns/op 368 B/op 12 allocs/op +BenchmarkDiv/548751.15465466546.Div(1542.456487)-32 2060182 566.5 ns/op 368 B/op 12 allocs/op +BenchmarkDiv/548751.15465466546.Div(1542.456487)-32 1999614 578.3 ns/op 368 B/op 12 allocs/op +BenchmarkDiv/548751.15465466546.Div(1542.456487)-32 2286982 499.4 ns/op 368 B/op 12 allocs/op +BenchmarkDiv/548751.15465466546.Div(1542.456487)-32 2131124 602.1 ns/op 368 B/op 12 allocs/op +BenchmarkDiv/548751.15465466546.Div(1542.456487)-32 2268651 654.8 ns/op 368 B/op 12 allocs/op +BenchmarkDiv/548751.15465466546.Div(1542.456487)-32 1953102 532.7 ns/op 368 B/op 12 allocs/op +BenchmarkDiv/548751.15465466546.Div(1542.456487)-32 2025718 593.3 ns/op 368 B/op 12 allocs/op +BenchmarkDiv/548751.15465466546.Div(1542.456487)-32 2089290 594.6 ns/op 368 B/op 12 allocs/op +BenchmarkDiv/548751.15465466546.Div(1542.456487)-32 2093712 654.9 ns/op 368 B/op 12 allocs/op +BenchmarkDivFallback/12345679012345679890123456789.1234567890123456789.Div(999999)-32 1713140 810.4 ns/op 496 B/op 16 allocs/op +BenchmarkDivFallback/12345679012345679890123456789.1234567890123456789.Div(999999)-32 1493336 689.4 ns/op 496 B/op 16 allocs/op +BenchmarkDivFallback/12345679012345679890123456789.1234567890123456789.Div(999999)-32 1790822 768.6 ns/op 496 B/op 16 allocs/op +BenchmarkDivFallback/12345679012345679890123456789.1234567890123456789.Div(999999)-32 1876161 724.5 ns/op 496 B/op 16 allocs/op +BenchmarkDivFallback/12345679012345679890123456789.1234567890123456789.Div(999999)-32 1932831 722.4 ns/op 496 B/op 16 allocs/op +BenchmarkDivFallback/12345679012345679890123456789.1234567890123456789.Div(999999)-32 1608186 803.6 ns/op 496 B/op 16 allocs/op +BenchmarkDivFallback/12345679012345679890123456789.1234567890123456789.Div(999999)-32 1551177 762.2 ns/op 496 B/op 16 allocs/op +BenchmarkDivFallback/12345679012345679890123456789.1234567890123456789.Div(999999)-32 1541035 706.1 ns/op 496 B/op 16 allocs/op +BenchmarkDivFallback/12345679012345679890123456789.1234567890123456789.Div(999999)-32 1595172 768.3 ns/op 496 B/op 16 allocs/op +BenchmarkDivFallback/12345679012345679890123456789.1234567890123456789.Div(999999)-32 1765929 761.9 ns/op 496 B/op 16 allocs/op +BenchmarkDivFallback/1234.Div(12345679012345679890123456789.1234567890123456789)-32 2725264 469.4 ns/op 272 B/op 8 allocs/op +BenchmarkDivFallback/1234.Div(12345679012345679890123456789.1234567890123456789)-32 3896064 453.3 ns/op 272 B/op 8 allocs/op +BenchmarkDivFallback/1234.Div(12345679012345679890123456789.1234567890123456789)-32 4005453 382.3 ns/op 272 B/op 8 allocs/op +BenchmarkDivFallback/1234.Div(12345679012345679890123456789.1234567890123456789)-32 5729745 230.5 ns/op 272 B/op 8 allocs/op +BenchmarkDivFallback/1234.Div(12345679012345679890123456789.1234567890123456789)-32 5665995 221.8 ns/op 272 B/op 8 allocs/op +BenchmarkDivFallback/1234.Div(12345679012345679890123456789.1234567890123456789)-32 4628492 216.7 ns/op 272 B/op 8 allocs/op +BenchmarkDivFallback/1234.Div(12345679012345679890123456789.1234567890123456789)-32 5314364 217.4 ns/op 272 B/op 8 allocs/op +BenchmarkDivFallback/1234.Div(12345679012345679890123456789.1234567890123456789)-32 5830532 214.9 ns/op 272 B/op 8 allocs/op +BenchmarkDivFallback/1234.Div(12345679012345679890123456789.1234567890123456789)-32 5413780 253.8 ns/op 272 B/op 8 allocs/op +BenchmarkDivFallback/1234.Div(12345679012345679890123456789.1234567890123456789)-32 3258164 383.9 ns/op 272 B/op 8 allocs/op +BenchmarkPow/1.01.Pow(10)-32 2681287 610.7 ns/op 576 B/op 18 allocs/op +BenchmarkPow/1.01.Pow(10)-32 2707764 807.1 ns/op 576 B/op 18 allocs/op +BenchmarkPow/1.01.Pow(10)-32 2231109 499.0 ns/op 576 B/op 18 allocs/op +BenchmarkPow/1.01.Pow(10)-32 2371832 445.5 ns/op 576 B/op 18 allocs/op +BenchmarkPow/1.01.Pow(10)-32 2597344 782.4 ns/op 576 B/op 18 allocs/op +BenchmarkPow/1.01.Pow(10)-32 2290392 678.5 ns/op 576 B/op 18 allocs/op +BenchmarkPow/1.01.Pow(10)-32 2304861 865.8 ns/op 576 B/op 18 allocs/op +BenchmarkPow/1.01.Pow(10)-32 1413735 860.2 ns/op 576 B/op 18 allocs/op +BenchmarkPow/1.01.Pow(10)-32 1883965 770.9 ns/op 576 B/op 18 allocs/op +BenchmarkPow/1.01.Pow(10)-32 2692868 584.0 ns/op 576 B/op 18 allocs/op +BenchmarkPow/1.01.Pow(100)-32 1279167 1254 ns/op 1072 B/op 26 allocs/op +BenchmarkPow/1.01.Pow(100)-32 1000000 1355 ns/op 1072 B/op 26 allocs/op +BenchmarkPow/1.01.Pow(100)-32 861182 1459 ns/op 1072 B/op 26 allocs/op +BenchmarkPow/1.01.Pow(100)-32 865479 1248 ns/op 1072 B/op 26 allocs/op +BenchmarkPow/1.01.Pow(100)-32 943574 1251 ns/op 1072 B/op 26 allocs/op +BenchmarkPow/1.01.Pow(100)-32 884641 1386 ns/op 1072 B/op 26 allocs/op +BenchmarkPow/1.01.Pow(100)-32 832597 1518 ns/op 1072 B/op 26 allocs/op +BenchmarkPow/1.01.Pow(100)-32 952039 1371 ns/op 1072 B/op 26 allocs/op +BenchmarkPow/1.01.Pow(100)-32 1000000 1363 ns/op 1072 B/op 26 allocs/op +BenchmarkPow/1.01.Pow(100)-32 1000000 1442 ns/op 1072 B/op 26 allocs/op +BenchmarkMarshalJSON/1234567890123456789.1234567890123456879-32 2966026 394.2 ns/op 336 B/op 7 allocs/op +BenchmarkMarshalJSON/1234567890123456789.1234567890123456879-32 3119754 448.5 ns/op 336 B/op 7 allocs/op +BenchmarkMarshalJSON/1234567890123456789.1234567890123456879-32 2550610 475.3 ns/op 336 B/op 7 allocs/op +BenchmarkMarshalJSON/1234567890123456789.1234567890123456879-32 2348850 458.1 ns/op 336 B/op 7 allocs/op +BenchmarkMarshalJSON/1234567890123456789.1234567890123456879-32 3580753 454.8 ns/op 336 B/op 7 allocs/op +BenchmarkMarshalJSON/1234567890123456789.1234567890123456879-32 2486205 448.0 ns/op 336 B/op 7 allocs/op +BenchmarkMarshalJSON/1234567890123456789.1234567890123456879-32 2526907 437.6 ns/op 336 B/op 7 allocs/op +BenchmarkMarshalJSON/1234567890123456789.1234567890123456879-32 2726217 445.0 ns/op 336 B/op 7 allocs/op +BenchmarkMarshalJSON/1234567890123456789.1234567890123456879-32 2671586 494.1 ns/op 336 B/op 7 allocs/op +BenchmarkMarshalJSON/1234567890123456789.1234567890123456879-32 2938870 477.7 ns/op 336 B/op 7 allocs/op +BenchmarkMarshalJSON/123-32 7922960 132.8 ns/op 56 B/op 5 allocs/op +BenchmarkMarshalJSON/123-32 7742029 144.6 ns/op 56 B/op 5 allocs/op +BenchmarkMarshalJSON/123-32 8797341 131.6 ns/op 56 B/op 5 allocs/op +BenchmarkMarshalJSON/123-32 7500687 142.7 ns/op 56 B/op 5 allocs/op +BenchmarkMarshalJSON/123-32 7856791 137.2 ns/op 56 B/op 5 allocs/op +BenchmarkMarshalJSON/123-32 8524464 146.1 ns/op 56 B/op 5 allocs/op +BenchmarkMarshalJSON/123-32 7621996 141.7 ns/op 56 B/op 5 allocs/op +BenchmarkMarshalJSON/123-32 9219026 137.2 ns/op 56 B/op 5 allocs/op +BenchmarkMarshalJSON/123-32 8744030 120.8 ns/op 56 B/op 5 allocs/op +BenchmarkMarshalJSON/123-32 9632276 120.3 ns/op 56 B/op 5 allocs/op +BenchmarkMarshalJSON/123456.123456-32 6492632 167.7 ns/op 72 B/op 5 allocs/op +BenchmarkMarshalJSON/123456.123456-32 6332774 173.5 ns/op 72 B/op 5 allocs/op +BenchmarkMarshalJSON/123456.123456-32 7333653 153.8 ns/op 72 B/op 5 allocs/op +BenchmarkMarshalJSON/123456.123456-32 9052239 175.0 ns/op 72 B/op 5 allocs/op +BenchmarkMarshalJSON/123456.123456-32 7161652 171.3 ns/op 72 B/op 5 allocs/op +BenchmarkMarshalJSON/123456.123456-32 8580253 167.7 ns/op 72 B/op 5 allocs/op +BenchmarkMarshalJSON/123456.123456-32 7758744 169.7 ns/op 72 B/op 5 allocs/op +BenchmarkMarshalJSON/123456.123456-32 6214922 175.8 ns/op 72 B/op 5 allocs/op +BenchmarkMarshalJSON/123456.123456-32 7108336 150.7 ns/op 72 B/op 5 allocs/op +BenchmarkMarshalJSON/123456.123456-32 9148627 189.7 ns/op 72 B/op 5 allocs/op +BenchmarkMarshalJSON/1234567890-32 7480232 197.2 ns/op 88 B/op 5 allocs/op +BenchmarkMarshalJSON/1234567890-32 6629322 190.0 ns/op 88 B/op 5 allocs/op +BenchmarkMarshalJSON/1234567890-32 6555597 188.5 ns/op 88 B/op 5 allocs/op +BenchmarkMarshalJSON/1234567890-32 6090922 182.7 ns/op 88 B/op 5 allocs/op +BenchmarkMarshalJSON/1234567890-32 5916217 184.0 ns/op 88 B/op 5 allocs/op +BenchmarkMarshalJSON/1234567890-32 6955563 195.0 ns/op 88 B/op 5 allocs/op +BenchmarkMarshalJSON/1234567890-32 7203432 182.2 ns/op 88 B/op 5 allocs/op +BenchmarkMarshalJSON/1234567890-32 6618098 194.2 ns/op 88 B/op 5 allocs/op +BenchmarkMarshalJSON/1234567890-32 6575089 200.6 ns/op 88 B/op 5 allocs/op +BenchmarkMarshalJSON/1234567890-32 7857163 186.7 ns/op 88 B/op 5 allocs/op +BenchmarkMarshalJSON/0.1234567890123456879-32 6339790 182.3 ns/op 104 B/op 5 allocs/op +BenchmarkMarshalJSON/0.1234567890123456879-32 4998592 218.1 ns/op 104 B/op 5 allocs/op +BenchmarkMarshalJSON/0.1234567890123456879-32 5980041 207.6 ns/op 104 B/op 5 allocs/op +BenchmarkMarshalJSON/0.1234567890123456879-32 5739046 203.1 ns/op 104 B/op 5 allocs/op +BenchmarkMarshalJSON/0.1234567890123456879-32 6698677 200.6 ns/op 104 B/op 5 allocs/op +BenchmarkMarshalJSON/0.1234567890123456879-32 5317203 202.1 ns/op 104 B/op 5 allocs/op +BenchmarkMarshalJSON/0.1234567890123456879-32 5623825 225.4 ns/op 104 B/op 5 allocs/op +BenchmarkMarshalJSON/0.1234567890123456879-32 6042908 201.9 ns/op 104 B/op 5 allocs/op +BenchmarkMarshalJSON/0.1234567890123456879-32 6168211 206.3 ns/op 104 B/op 5 allocs/op +BenchmarkMarshalJSON/0.1234567890123456879-32 5594259 217.0 ns/op 104 B/op 5 allocs/op +BenchmarkMarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 2424090 540.5 ns/op 448 B/op 7 allocs/op +BenchmarkMarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 2208523 454.0 ns/op 448 B/op 7 allocs/op +BenchmarkMarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 2374341 554.8 ns/op 448 B/op 7 allocs/op +BenchmarkMarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 2778554 530.0 ns/op 448 B/op 7 allocs/op +BenchmarkMarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 2401249 470.4 ns/op 448 B/op 7 allocs/op +BenchmarkMarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 2826847 434.7 ns/op 448 B/op 7 allocs/op +BenchmarkMarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 2508506 446.0 ns/op 448 B/op 7 allocs/op +BenchmarkMarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 2687557 517.1 ns/op 448 B/op 7 allocs/op +BenchmarkMarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 2199876 561.0 ns/op 448 B/op 7 allocs/op +BenchmarkMarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 2007783 577.9 ns/op 448 B/op 7 allocs/op +BenchmarkUnmarshalJSON/1234567890123456789.1234567890123456879-32 2812885 456.0 ns/op 240 B/op 7 allocs/op +BenchmarkUnmarshalJSON/1234567890123456789.1234567890123456879-32 2355758 473.3 ns/op 240 B/op 7 allocs/op +BenchmarkUnmarshalJSON/1234567890123456789.1234567890123456879-32 2385496 500.9 ns/op 240 B/op 7 allocs/op +BenchmarkUnmarshalJSON/1234567890123456789.1234567890123456879-32 2813376 465.2 ns/op 240 B/op 7 allocs/op +BenchmarkUnmarshalJSON/1234567890123456789.1234567890123456879-32 2536120 514.4 ns/op 240 B/op 7 allocs/op +BenchmarkUnmarshalJSON/1234567890123456789.1234567890123456879-32 2287749 457.0 ns/op 240 B/op 7 allocs/op +BenchmarkUnmarshalJSON/1234567890123456789.1234567890123456879-32 2329538 538.4 ns/op 240 B/op 7 allocs/op +BenchmarkUnmarshalJSON/1234567890123456789.1234567890123456879-32 2657328 476.9 ns/op 240 B/op 7 allocs/op +BenchmarkUnmarshalJSON/1234567890123456789.1234567890123456879-32 2063280 514.0 ns/op 240 B/op 7 allocs/op +BenchmarkUnmarshalJSON/1234567890123456789.1234567890123456879-32 2049895 536.5 ns/op 240 B/op 7 allocs/op +BenchmarkUnmarshalJSON/123-32 10952518 131.8 ns/op 72 B/op 4 allocs/op +BenchmarkUnmarshalJSON/123-32 8670066 137.9 ns/op 72 B/op 4 allocs/op +BenchmarkUnmarshalJSON/123-32 12015946 138.4 ns/op 72 B/op 4 allocs/op +BenchmarkUnmarshalJSON/123-32 9355963 116.3 ns/op 72 B/op 4 allocs/op +BenchmarkUnmarshalJSON/123-32 10949293 134.7 ns/op 72 B/op 4 allocs/op +BenchmarkUnmarshalJSON/123-32 7191394 143.4 ns/op 72 B/op 4 allocs/op +BenchmarkUnmarshalJSON/123-32 8167040 130.7 ns/op 72 B/op 4 allocs/op +BenchmarkUnmarshalJSON/123-32 8008306 139.7 ns/op 72 B/op 4 allocs/op +BenchmarkUnmarshalJSON/123-32 11076382 125.4 ns/op 72 B/op 4 allocs/op +BenchmarkUnmarshalJSON/123-32 10993004 121.9 ns/op 72 B/op 4 allocs/op +BenchmarkUnmarshalJSON/123456.123456-32 7369378 148.0 ns/op 96 B/op 5 allocs/op +BenchmarkUnmarshalJSON/123456.123456-32 7937514 185.2 ns/op 96 B/op 5 allocs/op +BenchmarkUnmarshalJSON/123456.123456-32 6143870 200.4 ns/op 96 B/op 5 allocs/op +BenchmarkUnmarshalJSON/123456.123456-32 6551374 175.2 ns/op 96 B/op 5 allocs/op +BenchmarkUnmarshalJSON/123456.123456-32 6522912 178.3 ns/op 96 B/op 5 allocs/op +BenchmarkUnmarshalJSON/123456.123456-32 6382014 180.0 ns/op 96 B/op 5 allocs/op +BenchmarkUnmarshalJSON/123456.123456-32 7513476 195.0 ns/op 96 B/op 5 allocs/op +BenchmarkUnmarshalJSON/123456.123456-32 6704356 168.3 ns/op 96 B/op 5 allocs/op +BenchmarkUnmarshalJSON/123456.123456-32 6548124 181.2 ns/op 96 B/op 5 allocs/op +BenchmarkUnmarshalJSON/123456.123456-32 6023688 222.9 ns/op 96 B/op 5 allocs/op +BenchmarkUnmarshalJSON/1234567890-32 9805033 130.7 ns/op 80 B/op 4 allocs/op +BenchmarkUnmarshalJSON/1234567890-32 11375472 129.5 ns/op 80 B/op 4 allocs/op +BenchmarkUnmarshalJSON/1234567890-32 7365478 138.5 ns/op 80 B/op 4 allocs/op +BenchmarkUnmarshalJSON/1234567890-32 10976593 140.5 ns/op 80 B/op 4 allocs/op +BenchmarkUnmarshalJSON/1234567890-32 6849982 146.8 ns/op 80 B/op 4 allocs/op +BenchmarkUnmarshalJSON/1234567890-32 8681024 158.6 ns/op 80 B/op 4 allocs/op +BenchmarkUnmarshalJSON/1234567890-32 7484164 149.1 ns/op 80 B/op 4 allocs/op +BenchmarkUnmarshalJSON/1234567890-32 8122051 125.9 ns/op 80 B/op 4 allocs/op +BenchmarkUnmarshalJSON/1234567890-32 9923080 146.1 ns/op 80 B/op 4 allocs/op +BenchmarkUnmarshalJSON/1234567890-32 11874344 98.83 ns/op 80 B/op 4 allocs/op +BenchmarkUnmarshalJSON/0.1234567890123456879-32 4424302 268.1 ns/op 192 B/op 7 allocs/op +BenchmarkUnmarshalJSON/0.1234567890123456879-32 3128276 445.9 ns/op 192 B/op 7 allocs/op +BenchmarkUnmarshalJSON/0.1234567890123456879-32 2819575 449.7 ns/op 192 B/op 7 allocs/op +BenchmarkUnmarshalJSON/0.1234567890123456879-32 2486823 464.4 ns/op 192 B/op 7 allocs/op +BenchmarkUnmarshalJSON/0.1234567890123456879-32 3426488 449.7 ns/op 192 B/op 7 allocs/op +BenchmarkUnmarshalJSON/0.1234567890123456879-32 3273147 456.0 ns/op 192 B/op 7 allocs/op +BenchmarkUnmarshalJSON/0.1234567890123456879-32 2786726 474.5 ns/op 192 B/op 7 allocs/op +BenchmarkUnmarshalJSON/0.1234567890123456879-32 3473910 408.2 ns/op 192 B/op 7 allocs/op +BenchmarkUnmarshalJSON/0.1234567890123456879-32 2784686 464.2 ns/op 192 B/op 7 allocs/op +BenchmarkUnmarshalJSON/0.1234567890123456879-32 2541660 410.7 ns/op 192 B/op 7 allocs/op +BenchmarkUnmarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 1816731 683.6 ns/op 272 B/op 7 allocs/op +BenchmarkUnmarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 1955179 642.5 ns/op 272 B/op 7 allocs/op +BenchmarkUnmarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 1854756 650.3 ns/op 272 B/op 7 allocs/op +BenchmarkUnmarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 2059476 706.1 ns/op 272 B/op 7 allocs/op +BenchmarkUnmarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 1630069 744.7 ns/op 272 B/op 7 allocs/op +BenchmarkUnmarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 2159852 623.1 ns/op 272 B/op 7 allocs/op +BenchmarkUnmarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 2835831 603.6 ns/op 272 B/op 7 allocs/op +BenchmarkUnmarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 2410664 675.0 ns/op 272 B/op 7 allocs/op +BenchmarkUnmarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 1886200 688.3 ns/op 272 B/op 7 allocs/op +BenchmarkUnmarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 1829323 580.6 ns/op 272 B/op 7 allocs/op +BenchmarkMarshalBinary/1234567890123456789.1234567890123456879-32 26884932 45.29 ns/op 48 B/op 2 allocs/op +BenchmarkMarshalBinary/1234567890123456789.1234567890123456879-32 30810934 45.36 ns/op 48 B/op 2 allocs/op +BenchmarkMarshalBinary/1234567890123456789.1234567890123456879-32 26051209 43.92 ns/op 48 B/op 2 allocs/op +BenchmarkMarshalBinary/1234567890123456789.1234567890123456879-32 27040698 55.50 ns/op 48 B/op 2 allocs/op +BenchmarkMarshalBinary/1234567890123456789.1234567890123456879-32 30291133 49.44 ns/op 48 B/op 2 allocs/op +BenchmarkMarshalBinary/1234567890123456789.1234567890123456879-32 22235540 54.19 ns/op 48 B/op 2 allocs/op +BenchmarkMarshalBinary/1234567890123456789.1234567890123456879-32 24690340 60.99 ns/op 48 B/op 2 allocs/op +BenchmarkMarshalBinary/1234567890123456789.1234567890123456879-32 32265717 40.63 ns/op 48 B/op 2 allocs/op +BenchmarkMarshalBinary/1234567890123456789.1234567890123456879-32 29528444 47.99 ns/op 48 B/op 2 allocs/op +BenchmarkMarshalBinary/1234567890123456789.1234567890123456879-32 30367892 58.86 ns/op 48 B/op 2 allocs/op +BenchmarkMarshalBinary/123-32 31607997 34.27 ns/op 16 B/op 2 allocs/op +BenchmarkMarshalBinary/123-32 36600651 37.66 ns/op 16 B/op 2 allocs/op +BenchmarkMarshalBinary/123-32 33656366 32.29 ns/op 16 B/op 2 allocs/op +BenchmarkMarshalBinary/123-32 45523723 39.28 ns/op 16 B/op 2 allocs/op +BenchmarkMarshalBinary/123-32 34909258 35.34 ns/op 16 B/op 2 allocs/op +BenchmarkMarshalBinary/123-32 42670402 32.68 ns/op 16 B/op 2 allocs/op +BenchmarkMarshalBinary/123-32 31782447 34.11 ns/op 16 B/op 2 allocs/op +BenchmarkMarshalBinary/123-32 28727744 37.35 ns/op 16 B/op 2 allocs/op +BenchmarkMarshalBinary/123-32 31233966 34.77 ns/op 16 B/op 2 allocs/op +BenchmarkMarshalBinary/123-32 38648282 31.67 ns/op 16 B/op 2 allocs/op +BenchmarkMarshalBinary/123456.123456-32 25374440 50.40 ns/op 32 B/op 2 allocs/op +BenchmarkMarshalBinary/123456.123456-32 19886647 54.33 ns/op 32 B/op 2 allocs/op +BenchmarkMarshalBinary/123456.123456-32 23469498 48.85 ns/op 32 B/op 2 allocs/op +BenchmarkMarshalBinary/123456.123456-32 26319127 43.48 ns/op 32 B/op 2 allocs/op +BenchmarkMarshalBinary/123456.123456-32 25880612 41.97 ns/op 32 B/op 2 allocs/op +BenchmarkMarshalBinary/123456.123456-32 27637508 41.00 ns/op 32 B/op 2 allocs/op +BenchmarkMarshalBinary/123456.123456-32 21691800 46.92 ns/op 32 B/op 2 allocs/op +BenchmarkMarshalBinary/123456.123456-32 26444310 51.51 ns/op 32 B/op 2 allocs/op +BenchmarkMarshalBinary/123456.123456-32 26080825 55.08 ns/op 32 B/op 2 allocs/op +BenchmarkMarshalBinary/123456.123456-32 32280480 48.49 ns/op 32 B/op 2 allocs/op +BenchmarkMarshalBinary/1234567890-32 26510481 47.66 ns/op 32 B/op 2 allocs/op +BenchmarkMarshalBinary/1234567890-32 27440391 54.90 ns/op 32 B/op 2 allocs/op +BenchmarkMarshalBinary/1234567890-32 35984839 30.07 ns/op 32 B/op 2 allocs/op +BenchmarkMarshalBinary/1234567890-32 41654344 36.53 ns/op 32 B/op 2 allocs/op +BenchmarkMarshalBinary/1234567890-32 24519454 51.78 ns/op 32 B/op 2 allocs/op +BenchmarkMarshalBinary/1234567890-32 28846734 47.87 ns/op 32 B/op 2 allocs/op +BenchmarkMarshalBinary/1234567890-32 25921023 49.05 ns/op 32 B/op 2 allocs/op +BenchmarkMarshalBinary/1234567890-32 23830234 48.70 ns/op 32 B/op 2 allocs/op +BenchmarkMarshalBinary/1234567890-32 24357584 45.90 ns/op 32 B/op 2 allocs/op +BenchmarkMarshalBinary/1234567890-32 25809762 47.92 ns/op 32 B/op 2 allocs/op +BenchmarkMarshalBinary/0.1234567890123456879-32 26027775 43.09 ns/op 32 B/op 2 allocs/op +BenchmarkMarshalBinary/0.1234567890123456879-32 25689033 41.99 ns/op 32 B/op 2 allocs/op +BenchmarkMarshalBinary/0.1234567890123456879-32 38787558 47.22 ns/op 32 B/op 2 allocs/op +BenchmarkMarshalBinary/0.1234567890123456879-32 22960106 46.86 ns/op 32 B/op 2 allocs/op +BenchmarkMarshalBinary/0.1234567890123456879-32 37652842 46.03 ns/op 32 B/op 2 allocs/op +BenchmarkMarshalBinary/0.1234567890123456879-32 20595049 50.82 ns/op 32 B/op 2 allocs/op +BenchmarkMarshalBinary/0.1234567890123456879-32 24168538 41.69 ns/op 32 B/op 2 allocs/op +BenchmarkMarshalBinary/0.1234567890123456879-32 41011750 51.69 ns/op 32 B/op 2 allocs/op +BenchmarkMarshalBinary/0.1234567890123456879-32 23306152 45.69 ns/op 32 B/op 2 allocs/op +BenchmarkMarshalBinary/0.1234567890123456879-32 28926579 50.94 ns/op 32 B/op 2 allocs/op +BenchmarkMarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 22999785 81.19 ns/op 64 B/op 2 allocs/op +BenchmarkMarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 14741799 68.40 ns/op 64 B/op 2 allocs/op +BenchmarkMarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 19355392 65.69 ns/op 64 B/op 2 allocs/op +BenchmarkMarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 23768253 42.48 ns/op 64 B/op 2 allocs/op +BenchmarkMarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 27033180 44.11 ns/op 64 B/op 2 allocs/op +BenchmarkMarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 25755768 43.32 ns/op 64 B/op 2 allocs/op +BenchmarkMarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 29345257 75.62 ns/op 64 B/op 2 allocs/op +BenchmarkMarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 17428336 60.90 ns/op 64 B/op 2 allocs/op +BenchmarkMarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 20957150 77.80 ns/op 64 B/op 2 allocs/op +BenchmarkMarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 16100454 63.11 ns/op 64 B/op 2 allocs/op +BenchmarkUnmarshalBinary/1234567890123456789.1234567890123456879-32 27513165 77.22 ns/op 80 B/op 2 allocs/op +BenchmarkUnmarshalBinary/1234567890123456789.1234567890123456879-32 18587682 61.24 ns/op 80 B/op 2 allocs/op +BenchmarkUnmarshalBinary/1234567890123456789.1234567890123456879-32 19020337 57.06 ns/op 80 B/op 2 allocs/op +BenchmarkUnmarshalBinary/1234567890123456789.1234567890123456879-32 23499873 47.48 ns/op 80 B/op 2 allocs/op +BenchmarkUnmarshalBinary/1234567890123456789.1234567890123456879-32 28606208 37.87 ns/op 80 B/op 2 allocs/op +BenchmarkUnmarshalBinary/1234567890123456789.1234567890123456879-32 31940964 41.06 ns/op 80 B/op 2 allocs/op +BenchmarkUnmarshalBinary/1234567890123456789.1234567890123456879-32 29825222 41.03 ns/op 80 B/op 2 allocs/op +BenchmarkUnmarshalBinary/1234567890123456789.1234567890123456879-32 25112541 67.27 ns/op 80 B/op 2 allocs/op +BenchmarkUnmarshalBinary/1234567890123456789.1234567890123456879-32 17965389 67.54 ns/op 80 B/op 2 allocs/op +BenchmarkUnmarshalBinary/1234567890123456789.1234567890123456879-32 21015738 69.60 ns/op 80 B/op 2 allocs/op +BenchmarkUnmarshalBinary/123-32 30436254 49.49 ns/op 40 B/op 2 allocs/op +BenchmarkUnmarshalBinary/123-32 41404606 40.24 ns/op 40 B/op 2 allocs/op +BenchmarkUnmarshalBinary/123-32 31014081 42.65 ns/op 40 B/op 2 allocs/op +BenchmarkUnmarshalBinary/123-32 39984386 38.85 ns/op 40 B/op 2 allocs/op +BenchmarkUnmarshalBinary/123-32 33212126 38.01 ns/op 40 B/op 2 allocs/op +BenchmarkUnmarshalBinary/123-32 41822398 40.31 ns/op 40 B/op 2 allocs/op +BenchmarkUnmarshalBinary/123-32 30020476 49.11 ns/op 40 B/op 2 allocs/op +BenchmarkUnmarshalBinary/123-32 29982733 53.89 ns/op 40 B/op 2 allocs/op +BenchmarkUnmarshalBinary/123-32 22969975 49.86 ns/op 40 B/op 2 allocs/op +BenchmarkUnmarshalBinary/123-32 22024784 49.38 ns/op 40 B/op 2 allocs/op +BenchmarkUnmarshalBinary/123456.123456-32 30822764 51.25 ns/op 40 B/op 2 allocs/op +BenchmarkUnmarshalBinary/123456.123456-32 22075827 49.66 ns/op 40 B/op 2 allocs/op +BenchmarkUnmarshalBinary/123456.123456-32 25133382 46.47 ns/op 40 B/op 2 allocs/op +BenchmarkUnmarshalBinary/123456.123456-32 31960488 41.95 ns/op 40 B/op 2 allocs/op +BenchmarkUnmarshalBinary/123456.123456-32 29305838 37.65 ns/op 40 B/op 2 allocs/op +BenchmarkUnmarshalBinary/123456.123456-32 35333318 36.16 ns/op 40 B/op 2 allocs/op +BenchmarkUnmarshalBinary/123456.123456-32 23244327 55.34 ns/op 40 B/op 2 allocs/op +BenchmarkUnmarshalBinary/123456.123456-32 18336637 54.89 ns/op 40 B/op 2 allocs/op +BenchmarkUnmarshalBinary/123456.123456-32 22890612 59.41 ns/op 40 B/op 2 allocs/op +BenchmarkUnmarshalBinary/123456.123456-32 31856004 51.24 ns/op 40 B/op 2 allocs/op +BenchmarkUnmarshalBinary/1234567890-32 14770386 69.06 ns/op 40 B/op 2 allocs/op +BenchmarkUnmarshalBinary/1234567890-32 17094514 70.46 ns/op 40 B/op 2 allocs/op +BenchmarkUnmarshalBinary/1234567890-32 15150774 68.48 ns/op 40 B/op 2 allocs/op +BenchmarkUnmarshalBinary/1234567890-32 16324580 64.78 ns/op 40 B/op 2 allocs/op +BenchmarkUnmarshalBinary/1234567890-32 15408330 69.81 ns/op 40 B/op 2 allocs/op +BenchmarkUnmarshalBinary/1234567890-32 23382112 55.21 ns/op 40 B/op 2 allocs/op +BenchmarkUnmarshalBinary/1234567890-32 15836464 65.50 ns/op 40 B/op 2 allocs/op +BenchmarkUnmarshalBinary/1234567890-32 32844650 40.61 ns/op 40 B/op 2 allocs/op +BenchmarkUnmarshalBinary/1234567890-32 22573365 50.47 ns/op 40 B/op 2 allocs/op +BenchmarkUnmarshalBinary/1234567890-32 34194457 37.29 ns/op 40 B/op 2 allocs/op +BenchmarkUnmarshalBinary/0.1234567890123456879-32 42986556 35.68 ns/op 40 B/op 2 allocs/op +BenchmarkUnmarshalBinary/0.1234567890123456879-32 26876085 45.62 ns/op 40 B/op 2 allocs/op +BenchmarkUnmarshalBinary/0.1234567890123456879-32 36435547 37.12 ns/op 40 B/op 2 allocs/op +BenchmarkUnmarshalBinary/0.1234567890123456879-32 29100855 40.56 ns/op 40 B/op 2 allocs/op +BenchmarkUnmarshalBinary/0.1234567890123456879-32 32848701 44.62 ns/op 40 B/op 2 allocs/op +BenchmarkUnmarshalBinary/0.1234567890123456879-32 44236886 39.78 ns/op 40 B/op 2 allocs/op +BenchmarkUnmarshalBinary/0.1234567890123456879-32 32676630 51.39 ns/op 40 B/op 2 allocs/op +BenchmarkUnmarshalBinary/0.1234567890123456879-32 26734551 48.43 ns/op 40 B/op 2 allocs/op +BenchmarkUnmarshalBinary/0.1234567890123456879-32 37995439 48.43 ns/op 40 B/op 2 allocs/op +BenchmarkUnmarshalBinary/0.1234567890123456879-32 21706714 47.29 ns/op 40 B/op 2 allocs/op +BenchmarkUnmarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 15218083 78.13 ns/op 96 B/op 2 allocs/op +BenchmarkUnmarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 18060535 68.47 ns/op 96 B/op 2 allocs/op +BenchmarkUnmarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 15367816 83.46 ns/op 96 B/op 2 allocs/op +BenchmarkUnmarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 13866793 78.50 ns/op 96 B/op 2 allocs/op +BenchmarkUnmarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 15825934 80.49 ns/op 96 B/op 2 allocs/op +BenchmarkUnmarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 23198713 68.86 ns/op 96 B/op 2 allocs/op +BenchmarkUnmarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 15639409 65.81 ns/op 96 B/op 2 allocs/op +BenchmarkUnmarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 18602898 76.02 ns/op 96 B/op 2 allocs/op +BenchmarkUnmarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 24465308 64.64 ns/op 96 B/op 2 allocs/op +BenchmarkUnmarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 19237683 55.75 ns/op 96 B/op 2 allocs/op PASS -ok github.com/quagmt/udecimal/benchmarks 1044.696s +ok github.com/quagmt/udecimal/benchmarks 1192.374s diff --git a/benchmarks/bench-udec.txt b/benchmarks/bench-udec.txt index 9a75423..8c9e632 100644 --- a/benchmarks/bench-udec.txt +++ b/benchmarks/bench-udec.txt @@ -2,695 +2,705 @@ goos: linux goarch: amd64 pkg: github.com/quagmt/udecimal/benchmarks cpu: Intel(R) Core(TM) i9-14900HX -BenchmarkParse/1234567890123456789.1234567890123456879-32 16812400 70.02 ns/op 0 B/op 0 allocs/op -BenchmarkParse/1234567890123456789.1234567890123456879-32 17098047 69.93 ns/op 0 B/op 0 allocs/op -BenchmarkParse/1234567890123456789.1234567890123456879-32 16887878 70.30 ns/op 0 B/op 0 allocs/op -BenchmarkParse/1234567890123456789.1234567890123456879-32 16816290 70.15 ns/op 0 B/op 0 allocs/op -BenchmarkParse/1234567890123456789.1234567890123456879-32 16607001 70.10 ns/op 0 B/op 0 allocs/op -BenchmarkParse/1234567890123456789.1234567890123456879-32 17021491 70.84 ns/op 0 B/op 0 allocs/op -BenchmarkParse/1234567890123456789.1234567890123456879-32 16928054 69.94 ns/op 0 B/op 0 allocs/op -BenchmarkParse/1234567890123456789.1234567890123456879-32 16982496 70.00 ns/op 0 B/op 0 allocs/op -BenchmarkParse/1234567890123456789.1234567890123456879-32 16854812 70.16 ns/op 0 B/op 0 allocs/op -BenchmarkParse/1234567890123456789.1234567890123456879-32 16930414 70.20 ns/op 0 B/op 0 allocs/op -BenchmarkParse/123-32 100000000 10.07 ns/op 0 B/op 0 allocs/op -BenchmarkParse/123-32 100000000 10.07 ns/op 0 B/op 0 allocs/op -BenchmarkParse/123-32 100000000 10.29 ns/op 0 B/op 0 allocs/op -BenchmarkParse/123-32 100000000 10.25 ns/op 0 B/op 0 allocs/op -BenchmarkParse/123-32 100000000 10.08 ns/op 0 B/op 0 allocs/op -BenchmarkParse/123-32 100000000 10.06 ns/op 0 B/op 0 allocs/op -BenchmarkParse/123-32 100000000 10.07 ns/op 0 B/op 0 allocs/op -BenchmarkParse/123-32 100000000 10.09 ns/op 0 B/op 0 allocs/op -BenchmarkParse/123-32 100000000 10.09 ns/op 0 B/op 0 allocs/op -BenchmarkParse/123-32 100000000 10.08 ns/op 0 B/op 0 allocs/op -BenchmarkParse/123456.123456-32 54623784 21.96 ns/op 0 B/op 0 allocs/op -BenchmarkParse/123456.123456-32 51811952 21.90 ns/op 0 B/op 0 allocs/op -BenchmarkParse/123456.123456-32 55483785 22.24 ns/op 0 B/op 0 allocs/op -BenchmarkParse/123456.123456-32 53944386 22.10 ns/op 0 B/op 0 allocs/op -BenchmarkParse/123456.123456-32 55649522 22.24 ns/op 0 B/op 0 allocs/op -BenchmarkParse/123456.123456-32 55106149 21.89 ns/op 0 B/op 0 allocs/op -BenchmarkParse/123456.123456-32 53455196 21.91 ns/op 0 B/op 0 allocs/op -BenchmarkParse/123456.123456-32 53105566 22.03 ns/op 0 B/op 0 allocs/op -BenchmarkParse/123456.123456-32 54825690 22.47 ns/op 0 B/op 0 allocs/op -BenchmarkParse/123456.123456-32 54717900 22.00 ns/op 0 B/op 0 allocs/op -BenchmarkParse/1234567890-32 61665714 20.36 ns/op 0 B/op 0 allocs/op -BenchmarkParse/1234567890-32 60316183 20.53 ns/op 0 B/op 0 allocs/op -BenchmarkParse/1234567890-32 57476340 21.04 ns/op 0 B/op 0 allocs/op -BenchmarkParse/1234567890-32 55895716 20.64 ns/op 0 B/op 0 allocs/op -BenchmarkParse/1234567890-32 57042656 21.00 ns/op 0 B/op 0 allocs/op -BenchmarkParse/1234567890-32 58489612 20.97 ns/op 0 B/op 0 allocs/op -BenchmarkParse/1234567890-32 56223987 21.23 ns/op 0 B/op 0 allocs/op -BenchmarkParse/1234567890-32 59582794 20.20 ns/op 0 B/op 0 allocs/op -BenchmarkParse/1234567890-32 57346699 21.01 ns/op 0 B/op 0 allocs/op -BenchmarkParse/1234567890-32 55623392 21.03 ns/op 0 B/op 0 allocs/op -BenchmarkParse/0.1234567890123456879-32 30641589 38.20 ns/op 0 B/op 0 allocs/op -BenchmarkParse/0.1234567890123456879-32 30601844 39.21 ns/op 0 B/op 0 allocs/op -BenchmarkParse/0.1234567890123456879-32 31414128 39.64 ns/op 0 B/op 0 allocs/op -BenchmarkParse/0.1234567890123456879-32 30780076 39.32 ns/op 0 B/op 0 allocs/op -BenchmarkParse/0.1234567890123456879-32 30610693 39.36 ns/op 0 B/op 0 allocs/op -BenchmarkParse/0.1234567890123456879-32 31264173 39.03 ns/op 0 B/op 0 allocs/op -BenchmarkParse/0.1234567890123456879-32 30265264 38.91 ns/op 0 B/op 0 allocs/op -BenchmarkParse/0.1234567890123456879-32 30750208 39.13 ns/op 0 B/op 0 allocs/op -BenchmarkParse/0.1234567890123456879-32 30760946 39.02 ns/op 0 B/op 0 allocs/op -BenchmarkParse/0.1234567890123456879-32 31734958 39.14 ns/op 0 B/op 0 allocs/op -BenchmarkParseFallBack/123456789123456789123456.1234567890123456-32 2789457 391.1 ns/op 192 B/op 6 allocs/op -BenchmarkParseFallBack/123456789123456789123456.1234567890123456-32 2928036 385.1 ns/op 192 B/op 6 allocs/op -BenchmarkParseFallBack/123456789123456789123456.1234567890123456-32 3203924 386.2 ns/op 192 B/op 6 allocs/op -BenchmarkParseFallBack/123456789123456789123456.1234567890123456-32 3154364 358.1 ns/op 192 B/op 6 allocs/op -BenchmarkParseFallBack/123456789123456789123456.1234567890123456-32 3136826 364.7 ns/op 192 B/op 6 allocs/op -BenchmarkParseFallBack/123456789123456789123456.1234567890123456-32 3376290 339.8 ns/op 192 B/op 6 allocs/op -BenchmarkParseFallBack/123456789123456789123456.1234567890123456-32 4065190 340.9 ns/op 192 B/op 6 allocs/op -BenchmarkParseFallBack/123456789123456789123456.1234567890123456-32 3183718 349.5 ns/op 192 B/op 6 allocs/op -BenchmarkParseFallBack/123456789123456789123456.1234567890123456-32 3043488 362.9 ns/op 192 B/op 6 allocs/op -BenchmarkParseFallBack/123456789123456789123456.1234567890123456-32 2921163 436.5 ns/op 192 B/op 6 allocs/op -BenchmarkParseFallBack/111222333444555666777888999.1234567890123456789-32 3128354 378.6 ns/op 216 B/op 6 allocs/op -BenchmarkParseFallBack/111222333444555666777888999.1234567890123456789-32 3012510 421.7 ns/op 216 B/op 6 allocs/op -BenchmarkParseFallBack/111222333444555666777888999.1234567890123456789-32 2654922 425.1 ns/op 216 B/op 6 allocs/op -BenchmarkParseFallBack/111222333444555666777888999.1234567890123456789-32 3227124 384.6 ns/op 216 B/op 6 allocs/op -BenchmarkParseFallBack/111222333444555666777888999.1234567890123456789-32 3500229 416.6 ns/op 216 B/op 6 allocs/op -BenchmarkParseFallBack/111222333444555666777888999.1234567890123456789-32 2566827 418.4 ns/op 216 B/op 6 allocs/op -BenchmarkParseFallBack/111222333444555666777888999.1234567890123456789-32 3738994 451.2 ns/op 216 B/op 6 allocs/op -BenchmarkParseFallBack/111222333444555666777888999.1234567890123456789-32 2696847 430.0 ns/op 216 B/op 6 allocs/op -BenchmarkParseFallBack/111222333444555666777888999.1234567890123456789-32 2578966 449.2 ns/op 216 B/op 6 allocs/op -BenchmarkParseFallBack/111222333444555666777888999.1234567890123456789-32 2876516 379.4 ns/op 216 B/op 6 allocs/op -BenchmarkString/1234567890123456789.1234567890123456879-32 12212154 93.81 ns/op 48 B/op 1 allocs/op -BenchmarkString/1234567890123456789.1234567890123456879-32 13804474 89.38 ns/op 48 B/op 1 allocs/op -BenchmarkString/1234567890123456789.1234567890123456879-32 17279862 90.06 ns/op 48 B/op 1 allocs/op -BenchmarkString/1234567890123456789.1234567890123456879-32 15591661 90.91 ns/op 48 B/op 1 allocs/op -BenchmarkString/1234567890123456789.1234567890123456879-32 13140690 91.48 ns/op 48 B/op 1 allocs/op -BenchmarkString/1234567890123456789.1234567890123456879-32 13671392 76.71 ns/op 48 B/op 1 allocs/op -BenchmarkString/1234567890123456789.1234567890123456879-32 16831267 80.55 ns/op 48 B/op 1 allocs/op -BenchmarkString/1234567890123456789.1234567890123456879-32 15141376 85.04 ns/op 48 B/op 1 allocs/op -BenchmarkString/1234567890123456789.1234567890123456879-32 14057803 97.88 ns/op 48 B/op 1 allocs/op -BenchmarkString/1234567890123456789.1234567890123456879-32 17136783 89.87 ns/op 48 B/op 1 allocs/op -BenchmarkString/123-32 64008643 17.94 ns/op 5 B/op 1 allocs/op -BenchmarkString/123-32 68789694 17.21 ns/op 5 B/op 1 allocs/op -BenchmarkString/123-32 65371448 18.24 ns/op 5 B/op 1 allocs/op -BenchmarkString/123-32 69038404 17.59 ns/op 5 B/op 1 allocs/op -BenchmarkString/123-32 55756674 19.86 ns/op 5 B/op 1 allocs/op -BenchmarkString/123-32 67281182 17.10 ns/op 5 B/op 1 allocs/op -BenchmarkString/123-32 69888486 18.35 ns/op 5 B/op 1 allocs/op -BenchmarkString/123-32 66000823 18.66 ns/op 5 B/op 1 allocs/op -BenchmarkString/123-32 57579156 18.69 ns/op 5 B/op 1 allocs/op -BenchmarkString/123-32 63765410 17.36 ns/op 5 B/op 1 allocs/op -BenchmarkString/123456.123456-32 28920230 43.28 ns/op 16 B/op 1 allocs/op -BenchmarkString/123456.123456-32 28716769 41.41 ns/op 16 B/op 1 allocs/op -BenchmarkString/123456.123456-32 27505369 39.74 ns/op 16 B/op 1 allocs/op -BenchmarkString/123456.123456-32 29710256 40.39 ns/op 16 B/op 1 allocs/op -BenchmarkString/123456.123456-32 27460186 42.48 ns/op 16 B/op 1 allocs/op -BenchmarkString/123456.123456-32 29213840 41.08 ns/op 16 B/op 1 allocs/op -BenchmarkString/123456.123456-32 30247960 40.74 ns/op 16 B/op 1 allocs/op -BenchmarkString/123456.123456-32 28776534 41.95 ns/op 16 B/op 1 allocs/op -BenchmarkString/123456.123456-32 30246361 40.07 ns/op 16 B/op 1 allocs/op -BenchmarkString/123456.123456-32 32421224 39.63 ns/op 16 B/op 1 allocs/op -BenchmarkString/1234567890-32 33950040 31.76 ns/op 16 B/op 1 allocs/op -BenchmarkString/1234567890-32 41139122 33.19 ns/op 16 B/op 1 allocs/op -BenchmarkString/1234567890-32 35733262 33.42 ns/op 16 B/op 1 allocs/op -BenchmarkString/1234567890-32 38489430 33.12 ns/op 16 B/op 1 allocs/op -BenchmarkString/1234567890-32 28637728 35.86 ns/op 16 B/op 1 allocs/op -BenchmarkString/1234567890-32 36933133 36.06 ns/op 16 B/op 1 allocs/op -BenchmarkString/1234567890-32 39512001 32.89 ns/op 16 B/op 1 allocs/op -BenchmarkString/1234567890-32 46922067 31.46 ns/op 16 B/op 1 allocs/op -BenchmarkString/1234567890-32 45735692 31.14 ns/op 16 B/op 1 allocs/op -BenchmarkString/1234567890-32 34432537 29.58 ns/op 16 B/op 1 allocs/op -BenchmarkString/0.1234567890123456879-32 17347417 62.97 ns/op 24 B/op 1 allocs/op -BenchmarkString/0.1234567890123456879-32 18115909 56.24 ns/op 24 B/op 1 allocs/op -BenchmarkString/0.1234567890123456879-32 17402461 61.08 ns/op 24 B/op 1 allocs/op -BenchmarkString/0.1234567890123456879-32 19897768 60.42 ns/op 24 B/op 1 allocs/op -BenchmarkString/0.1234567890123456879-32 26434809 54.06 ns/op 24 B/op 1 allocs/op -BenchmarkString/0.1234567890123456879-32 22921599 56.80 ns/op 24 B/op 1 allocs/op -BenchmarkString/0.1234567890123456879-32 20004865 58.48 ns/op 24 B/op 1 allocs/op -BenchmarkString/0.1234567890123456879-32 20073342 55.06 ns/op 24 B/op 1 allocs/op -BenchmarkString/0.1234567890123456879-32 24300963 55.86 ns/op 24 B/op 1 allocs/op -BenchmarkString/0.1234567890123456879-32 23517982 56.16 ns/op 24 B/op 1 allocs/op -BenchmarkStringFallBack/123456789123456789123456.1234567890123456-32 5002327 279.9 ns/op 208 B/op 4 allocs/op -BenchmarkStringFallBack/123456789123456789123456.1234567890123456-32 4368979 261.5 ns/op 208 B/op 4 allocs/op -BenchmarkStringFallBack/123456789123456789123456.1234567890123456-32 4047783 256.7 ns/op 208 B/op 4 allocs/op -BenchmarkStringFallBack/123456789123456789123456.1234567890123456-32 3926994 268.4 ns/op 208 B/op 4 allocs/op -BenchmarkStringFallBack/123456789123456789123456.1234567890123456-32 4217650 267.7 ns/op 208 B/op 4 allocs/op -BenchmarkStringFallBack/123456789123456789123456.1234567890123456-32 4427504 251.7 ns/op 208 B/op 4 allocs/op -BenchmarkStringFallBack/123456789123456789123456.1234567890123456-32 6370770 273.8 ns/op 208 B/op 4 allocs/op -BenchmarkStringFallBack/123456789123456789123456.1234567890123456-32 4282987 273.7 ns/op 208 B/op 4 allocs/op -BenchmarkStringFallBack/123456789123456789123456.1234567890123456-32 4144104 272.6 ns/op 208 B/op 4 allocs/op -BenchmarkStringFallBack/123456789123456789123456.1234567890123456-32 4328058 282.6 ns/op 208 B/op 4 allocs/op -BenchmarkStringFallBack/111222333444555666777888999.1234567890123456789-32 4273102 268.2 ns/op 208 B/op 4 allocs/op -BenchmarkStringFallBack/111222333444555666777888999.1234567890123456789-32 4313395 270.6 ns/op 208 B/op 4 allocs/op -BenchmarkStringFallBack/111222333444555666777888999.1234567890123456789-32 4345081 277.5 ns/op 208 B/op 4 allocs/op -BenchmarkStringFallBack/111222333444555666777888999.1234567890123456789-32 3906184 269.2 ns/op 208 B/op 4 allocs/op -BenchmarkStringFallBack/111222333444555666777888999.1234567890123456789-32 4435872 281.2 ns/op 208 B/op 4 allocs/op -BenchmarkStringFallBack/111222333444555666777888999.1234567890123456789-32 4251669 260.7 ns/op 208 B/op 4 allocs/op -BenchmarkStringFallBack/111222333444555666777888999.1234567890123456789-32 4174408 279.7 ns/op 208 B/op 4 allocs/op -BenchmarkStringFallBack/111222333444555666777888999.1234567890123456789-32 4117306 252.3 ns/op 208 B/op 4 allocs/op -BenchmarkStringFallBack/111222333444555666777888999.1234567890123456789-32 4331832 261.6 ns/op 208 B/op 4 allocs/op -BenchmarkStringFallBack/111222333444555666777888999.1234567890123456789-32 3833271 276.0 ns/op 208 B/op 4 allocs/op -BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1111.1789)-32 112790845 10.62 ns/op 0 B/op 0 allocs/op -BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1111.1789)-32 100000000 10.61 ns/op 0 B/op 0 allocs/op -BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1111.1789)-32 100000000 10.59 ns/op 0 B/op 0 allocs/op -BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1111.1789)-32 100000000 10.63 ns/op 0 B/op 0 allocs/op -BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1111.1789)-32 100000000 10.61 ns/op 0 B/op 0 allocs/op -BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1111.1789)-32 100000000 10.61 ns/op 0 B/op 0 allocs/op -BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1111.1789)-32 100000000 10.59 ns/op 0 B/op 0 allocs/op -BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1111.1789)-32 100000000 10.61 ns/op 0 B/op 0 allocs/op -BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1111.1789)-32 112749231 10.61 ns/op 0 B/op 0 allocs/op -BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1111.1789)-32 100000000 10.60 ns/op 0 B/op 0 allocs/op -BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1234567890123456789.1234567890123456789)-32 140156972 8.389 ns/op 0 B/op 0 allocs/op -BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1234567890123456789.1234567890123456789)-32 140130348 8.398 ns/op 0 B/op 0 allocs/op -BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1234567890123456789.1234567890123456789)-32 142727439 8.405 ns/op 0 B/op 0 allocs/op -BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1234567890123456789.1234567890123456789)-32 138958920 8.520 ns/op 0 B/op 0 allocs/op -BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1234567890123456789.1234567890123456789)-32 142797727 8.407 ns/op 0 B/op 0 allocs/op -BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1234567890123456789.1234567890123456789)-32 140153833 8.391 ns/op 0 B/op 0 allocs/op -BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1234567890123456789.1234567890123456789)-32 139922835 8.711 ns/op 0 B/op 0 allocs/op -BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1234567890123456789.1234567890123456789)-32 142737559 8.379 ns/op 0 B/op 0 allocs/op -BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1234567890123456789.1234567890123456789)-32 140075340 8.570 ns/op 0 B/op 0 allocs/op -BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1234567890123456789.1234567890123456789)-32 139892624 8.422 ns/op 0 B/op 0 allocs/op -BenchmarkAdd/123.456.Add(0.123)-32 143675977 8.558 ns/op 0 B/op 0 allocs/op -BenchmarkAdd/123.456.Add(0.123)-32 140146174 8.580 ns/op 0 B/op 0 allocs/op -BenchmarkAdd/123.456.Add(0.123)-32 140223548 8.319 ns/op 0 B/op 0 allocs/op -BenchmarkAdd/123.456.Add(0.123)-32 140928186 8.565 ns/op 0 B/op 0 allocs/op -BenchmarkAdd/123.456.Add(0.123)-32 144496436 8.348 ns/op 0 B/op 0 allocs/op -BenchmarkAdd/123.456.Add(0.123)-32 143881425 8.554 ns/op 0 B/op 0 allocs/op -BenchmarkAdd/123.456.Add(0.123)-32 144068251 8.315 ns/op 0 B/op 0 allocs/op -BenchmarkAdd/123.456.Add(0.123)-32 144464053 8.561 ns/op 0 B/op 0 allocs/op -BenchmarkAdd/123.456.Add(0.123)-32 140141366 8.316 ns/op 0 B/op 0 allocs/op -BenchmarkAdd/123.456.Add(0.123)-32 144050354 8.292 ns/op 0 B/op 0 allocs/op -BenchmarkAdd/3.Add(7)-32 140301703 8.571 ns/op 0 B/op 0 allocs/op -BenchmarkAdd/3.Add(7)-32 143042212 8.316 ns/op 0 B/op 0 allocs/op -BenchmarkAdd/3.Add(7)-32 140378836 8.286 ns/op 0 B/op 0 allocs/op -BenchmarkAdd/3.Add(7)-32 144704049 8.573 ns/op 0 B/op 0 allocs/op -BenchmarkAdd/3.Add(7)-32 140203092 8.291 ns/op 0 B/op 0 allocs/op -BenchmarkAdd/3.Add(7)-32 143235854 8.563 ns/op 0 B/op 0 allocs/op -BenchmarkAdd/3.Add(7)-32 142610947 8.288 ns/op 0 B/op 0 allocs/op -BenchmarkAdd/3.Add(7)-32 144423373 8.292 ns/op 0 B/op 0 allocs/op -BenchmarkAdd/3.Add(7)-32 137812120 8.302 ns/op 0 B/op 0 allocs/op -BenchmarkAdd/3.Add(7)-32 145066808 8.291 ns/op 0 B/op 0 allocs/op -BenchmarkAdd/123456.123456.Add(999999)-32 100000000 10.68 ns/op 0 B/op 0 allocs/op -BenchmarkAdd/123456.123456.Add(999999)-32 100000000 10.61 ns/op 0 B/op 0 allocs/op -BenchmarkAdd/123456.123456.Add(999999)-32 113022400 10.83 ns/op 0 B/op 0 allocs/op -BenchmarkAdd/123456.123456.Add(999999)-32 113396584 10.59 ns/op 0 B/op 0 allocs/op -BenchmarkAdd/123456.123456.Add(999999)-32 100000000 10.68 ns/op 0 B/op 0 allocs/op -BenchmarkAdd/123456.123456.Add(999999)-32 100000000 10.60 ns/op 0 B/op 0 allocs/op -BenchmarkAdd/123456.123456.Add(999999)-32 100000000 10.74 ns/op 0 B/op 0 allocs/op -BenchmarkAdd/123456.123456.Add(999999)-32 100000000 10.62 ns/op 0 B/op 0 allocs/op -BenchmarkAdd/123456.123456.Add(999999)-32 100000000 10.58 ns/op 0 B/op 0 allocs/op -BenchmarkAdd/123456.123456.Add(999999)-32 100000000 10.60 ns/op 0 B/op 0 allocs/op -BenchmarkAdd/123456.123456.Add(456781244.1324897546)-32 100000000 10.58 ns/op 0 B/op 0 allocs/op -BenchmarkAdd/123456.123456.Add(456781244.1324897546)-32 100000000 10.62 ns/op 0 B/op 0 allocs/op -BenchmarkAdd/123456.123456.Add(456781244.1324897546)-32 100000000 10.62 ns/op 0 B/op 0 allocs/op -BenchmarkAdd/123456.123456.Add(456781244.1324897546)-32 100000000 10.62 ns/op 0 B/op 0 allocs/op -BenchmarkAdd/123456.123456.Add(456781244.1324897546)-32 100000000 10.56 ns/op 0 B/op 0 allocs/op -BenchmarkAdd/123456.123456.Add(456781244.1324897546)-32 100000000 10.61 ns/op 0 B/op 0 allocs/op -BenchmarkAdd/123456.123456.Add(456781244.1324897546)-32 100000000 10.61 ns/op 0 B/op 0 allocs/op -BenchmarkAdd/123456.123456.Add(456781244.1324897546)-32 100000000 10.61 ns/op 0 B/op 0 allocs/op -BenchmarkAdd/123456.123456.Add(456781244.1324897546)-32 100000000 10.60 ns/op 0 B/op 0 allocs/op -BenchmarkAdd/123456.123456.Add(456781244.1324897546)-32 100000000 10.62 ns/op 0 B/op 0 allocs/op -BenchmarkAdd/548751.15465466546.Add(1542.456487)-32 100000000 10.57 ns/op 0 B/op 0 allocs/op -BenchmarkAdd/548751.15465466546.Add(1542.456487)-32 100000000 10.60 ns/op 0 B/op 0 allocs/op -BenchmarkAdd/548751.15465466546.Add(1542.456487)-32 100000000 10.60 ns/op 0 B/op 0 allocs/op -BenchmarkAdd/548751.15465466546.Add(1542.456487)-32 100000000 10.61 ns/op 0 B/op 0 allocs/op -BenchmarkAdd/548751.15465466546.Add(1542.456487)-32 100000000 10.57 ns/op 0 B/op 0 allocs/op -BenchmarkAdd/548751.15465466546.Add(1542.456487)-32 100000000 10.61 ns/op 0 B/op 0 allocs/op -BenchmarkAdd/548751.15465466546.Add(1542.456487)-32 100000000 10.61 ns/op 0 B/op 0 allocs/op -BenchmarkAdd/548751.15465466546.Add(1542.456487)-32 100000000 10.59 ns/op 0 B/op 0 allocs/op -BenchmarkAdd/548751.15465466546.Add(1542.456487)-32 100000000 10.60 ns/op 0 B/op 0 allocs/op -BenchmarkAdd/548751.15465466546.Add(1542.456487)-32 100000000 10.61 ns/op 0 B/op 0 allocs/op -BenchmarkSub/3.Sub(7)-32 122863816 9.709 ns/op 0 B/op 0 allocs/op -BenchmarkSub/3.Sub(7)-32 121923032 9.785 ns/op 0 B/op 0 allocs/op -BenchmarkSub/3.Sub(7)-32 120981061 9.892 ns/op 0 B/op 0 allocs/op -BenchmarkSub/3.Sub(7)-32 122783412 9.875 ns/op 0 B/op 0 allocs/op -BenchmarkSub/3.Sub(7)-32 122961217 9.873 ns/op 0 B/op 0 allocs/op -BenchmarkSub/3.Sub(7)-32 121470736 9.887 ns/op 0 B/op 0 allocs/op -BenchmarkSub/3.Sub(7)-32 122885830 9.784 ns/op 0 B/op 0 allocs/op -BenchmarkSub/3.Sub(7)-32 122641424 9.776 ns/op 0 B/op 0 allocs/op -BenchmarkSub/3.Sub(7)-32 121494848 9.745 ns/op 0 B/op 0 allocs/op -BenchmarkSub/3.Sub(7)-32 123008701 9.886 ns/op 0 B/op 0 allocs/op -BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1111.1789)-32 99282666 12.09 ns/op 0 B/op 0 allocs/op -BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1111.1789)-32 99602246 12.08 ns/op 0 B/op 0 allocs/op -BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1111.1789)-32 99816345 12.22 ns/op 0 B/op 0 allocs/op -BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1111.1789)-32 100000000 12.10 ns/op 0 B/op 0 allocs/op -BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1111.1789)-32 98903367 12.14 ns/op 0 B/op 0 allocs/op -BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1111.1789)-32 100000000 12.18 ns/op 0 B/op 0 allocs/op -BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1111.1789)-32 100000000 12.09 ns/op 0 B/op 0 allocs/op -BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1111.1789)-32 100000000 12.15 ns/op 0 B/op 0 allocs/op -BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1111.1789)-32 99260833 12.16 ns/op 0 B/op 0 allocs/op -BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1111.1789)-32 100000000 12.07 ns/op 0 B/op 0 allocs/op -BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1234567890123456789.1234567890123456789)-32 120674500 9.781 ns/op 0 B/op 0 allocs/op -BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1234567890123456789.1234567890123456789)-32 121419614 9.922 ns/op 0 B/op 0 allocs/op -BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1234567890123456789.1234567890123456789)-32 122962576 9.740 ns/op 0 B/op 0 allocs/op -BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1234567890123456789.1234567890123456789)-32 122912920 9.851 ns/op 0 B/op 0 allocs/op -BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1234567890123456789.1234567890123456789)-32 122612446 9.793 ns/op 0 B/op 0 allocs/op -BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1234567890123456789.1234567890123456789)-32 121456678 9.773 ns/op 0 B/op 0 allocs/op -BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1234567890123456789.1234567890123456789)-32 122590777 9.877 ns/op 0 B/op 0 allocs/op -BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1234567890123456789.1234567890123456789)-32 121493828 9.746 ns/op 0 B/op 0 allocs/op -BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1234567890123456789.1234567890123456789)-32 122665063 9.880 ns/op 0 B/op 0 allocs/op -BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1234567890123456789.1234567890123456789)-32 122874786 9.781 ns/op 0 B/op 0 allocs/op -BenchmarkSub/123.456.Sub(0.123)-32 121003550 9.875 ns/op 0 B/op 0 allocs/op -BenchmarkSub/123.456.Sub(0.123)-32 123141794 9.881 ns/op 0 B/op 0 allocs/op -BenchmarkSub/123.456.Sub(0.123)-32 121472120 9.800 ns/op 0 B/op 0 allocs/op -BenchmarkSub/123.456.Sub(0.123)-32 122603842 9.870 ns/op 0 B/op 0 allocs/op -BenchmarkSub/123.456.Sub(0.123)-32 122702935 9.773 ns/op 0 B/op 0 allocs/op -BenchmarkSub/123.456.Sub(0.123)-32 121454468 9.737 ns/op 0 B/op 0 allocs/op -BenchmarkSub/123.456.Sub(0.123)-32 121447330 9.745 ns/op 0 B/op 0 allocs/op -BenchmarkSub/123.456.Sub(0.123)-32 121690076 9.876 ns/op 0 B/op 0 allocs/op -BenchmarkSub/123.456.Sub(0.123)-32 121489630 9.779 ns/op 0 B/op 0 allocs/op -BenchmarkSub/123.456.Sub(0.123)-32 122741944 9.886 ns/op 0 B/op 0 allocs/op -BenchmarkSub/123456.123456.Sub(456781244.1324897546)-32 99585412 12.09 ns/op 0 B/op 0 allocs/op -BenchmarkSub/123456.123456.Sub(456781244.1324897546)-32 100000000 12.08 ns/op 0 B/op 0 allocs/op -BenchmarkSub/123456.123456.Sub(456781244.1324897546)-32 99398464 12.06 ns/op 0 B/op 0 allocs/op -BenchmarkSub/123456.123456.Sub(456781244.1324897546)-32 100000000 12.08 ns/op 0 B/op 0 allocs/op -BenchmarkSub/123456.123456.Sub(456781244.1324897546)-32 99500234 12.06 ns/op 0 B/op 0 allocs/op -BenchmarkSub/123456.123456.Sub(456781244.1324897546)-32 85133685 12.07 ns/op 0 B/op 0 allocs/op -BenchmarkSub/123456.123456.Sub(456781244.1324897546)-32 96341658 12.08 ns/op 0 B/op 0 allocs/op -BenchmarkSub/123456.123456.Sub(456781244.1324897546)-32 98517516 12.08 ns/op 0 B/op 0 allocs/op -BenchmarkSub/123456.123456.Sub(456781244.1324897546)-32 100000000 12.06 ns/op 0 B/op 0 allocs/op -BenchmarkSub/123456.123456.Sub(456781244.1324897546)-32 100000000 12.07 ns/op 0 B/op 0 allocs/op -BenchmarkSub/548751.15465466546.Sub(1542.456487)-32 99358803 12.07 ns/op 0 B/op 0 allocs/op -BenchmarkSub/548751.15465466546.Sub(1542.456487)-32 100000000 12.22 ns/op 0 B/op 0 allocs/op -BenchmarkSub/548751.15465466546.Sub(1542.456487)-32 99218119 12.09 ns/op 0 B/op 0 allocs/op -BenchmarkSub/548751.15465466546.Sub(1542.456487)-32 100000000 12.18 ns/op 0 B/op 0 allocs/op -BenchmarkSub/548751.15465466546.Sub(1542.456487)-32 98530062 12.08 ns/op 0 B/op 0 allocs/op -BenchmarkSub/548751.15465466546.Sub(1542.456487)-32 99434334 12.07 ns/op 0 B/op 0 allocs/op -BenchmarkSub/548751.15465466546.Sub(1542.456487)-32 100000000 12.08 ns/op 0 B/op 0 allocs/op -BenchmarkSub/548751.15465466546.Sub(1542.456487)-32 96236703 12.10 ns/op 0 B/op 0 allocs/op -BenchmarkSub/548751.15465466546.Sub(1542.456487)-32 100000000 12.20 ns/op 0 B/op 0 allocs/op -BenchmarkSub/548751.15465466546.Sub(1542.456487)-32 100000000 12.08 ns/op 0 B/op 0 allocs/op -BenchmarkMul/1234.1234567890123456879.Mul(1111.1789)-32 100000000 10.30 ns/op 0 B/op 0 allocs/op +BenchmarkParse/1234567890123456789.1234567890123456879-32 15561319 76.64 ns/op 0 B/op 0 allocs/op +BenchmarkParse/1234567890123456789.1234567890123456879-32 15700467 78.16 ns/op 0 B/op 0 allocs/op +BenchmarkParse/1234567890123456789.1234567890123456879-32 16477700 74.21 ns/op 0 B/op 0 allocs/op +BenchmarkParse/1234567890123456789.1234567890123456879-32 14096296 77.22 ns/op 0 B/op 0 allocs/op +BenchmarkParse/1234567890123456789.1234567890123456879-32 16179276 78.13 ns/op 0 B/op 0 allocs/op +BenchmarkParse/1234567890123456789.1234567890123456879-32 15682556 74.47 ns/op 0 B/op 0 allocs/op +BenchmarkParse/1234567890123456789.1234567890123456879-32 15505378 78.95 ns/op 0 B/op 0 allocs/op +BenchmarkParse/1234567890123456789.1234567890123456879-32 15302486 73.93 ns/op 0 B/op 0 allocs/op +BenchmarkParse/1234567890123456789.1234567890123456879-32 16339920 73.81 ns/op 0 B/op 0 allocs/op +BenchmarkParse/1234567890123456789.1234567890123456879-32 15958833 72.90 ns/op 0 B/op 0 allocs/op +BenchmarkParse/123-32 100000000 10.91 ns/op 0 B/op 0 allocs/op +BenchmarkParse/123-32 100000000 10.88 ns/op 0 B/op 0 allocs/op +BenchmarkParse/123-32 100000000 10.79 ns/op 0 B/op 0 allocs/op +BenchmarkParse/123-32 100000000 10.69 ns/op 0 B/op 0 allocs/op +BenchmarkParse/123-32 100000000 10.62 ns/op 0 B/op 0 allocs/op +BenchmarkParse/123-32 100000000 11.12 ns/op 0 B/op 0 allocs/op +BenchmarkParse/123-32 100000000 10.45 ns/op 0 B/op 0 allocs/op +BenchmarkParse/123-32 100000000 11.01 ns/op 0 B/op 0 allocs/op +BenchmarkParse/123-32 100000000 10.53 ns/op 0 B/op 0 allocs/op +BenchmarkParse/123-32 100000000 10.62 ns/op 0 B/op 0 allocs/op +BenchmarkParse/123456.123456-32 51891198 24.63 ns/op 0 B/op 0 allocs/op +BenchmarkParse/123456.123456-32 51541015 24.30 ns/op 0 B/op 0 allocs/op +BenchmarkParse/123456.123456-32 52512220 23.46 ns/op 0 B/op 0 allocs/op +BenchmarkParse/123456.123456-32 52877505 24.56 ns/op 0 B/op 0 allocs/op +BenchmarkParse/123456.123456-32 47886265 24.57 ns/op 0 B/op 0 allocs/op +BenchmarkParse/123456.123456-32 51555333 24.40 ns/op 0 B/op 0 allocs/op +BenchmarkParse/123456.123456-32 53501379 23.34 ns/op 0 B/op 0 allocs/op +BenchmarkParse/123456.123456-32 52467672 23.31 ns/op 0 B/op 0 allocs/op +BenchmarkParse/123456.123456-32 54348118 23.29 ns/op 0 B/op 0 allocs/op +BenchmarkParse/123456.123456-32 52678508 24.10 ns/op 0 B/op 0 allocs/op +BenchmarkParse/1234567890-32 53807486 22.85 ns/op 0 B/op 0 allocs/op +BenchmarkParse/1234567890-32 54027626 22.90 ns/op 0 B/op 0 allocs/op +BenchmarkParse/1234567890-32 52059273 22.51 ns/op 0 B/op 0 allocs/op +BenchmarkParse/1234567890-32 52231587 22.11 ns/op 0 B/op 0 allocs/op +BenchmarkParse/1234567890-32 55779572 22.33 ns/op 0 B/op 0 allocs/op +BenchmarkParse/1234567890-32 55197048 21.61 ns/op 0 B/op 0 allocs/op +BenchmarkParse/1234567890-32 49683790 23.05 ns/op 0 B/op 0 allocs/op +BenchmarkParse/1234567890-32 46628036 22.21 ns/op 0 B/op 0 allocs/op +BenchmarkParse/1234567890-32 52707292 22.96 ns/op 0 B/op 0 allocs/op +BenchmarkParse/1234567890-32 54752288 22.86 ns/op 0 B/op 0 allocs/op +BenchmarkParse/0.1234567890123456879-32 28947921 41.76 ns/op 0 B/op 0 allocs/op +BenchmarkParse/0.1234567890123456879-32 28125925 39.75 ns/op 0 B/op 0 allocs/op +BenchmarkParse/0.1234567890123456879-32 29195576 40.79 ns/op 0 B/op 0 allocs/op +BenchmarkParse/0.1234567890123456879-32 26031288 41.87 ns/op 0 B/op 0 allocs/op +BenchmarkParse/0.1234567890123456879-32 26187907 40.38 ns/op 0 B/op 0 allocs/op +BenchmarkParse/0.1234567890123456879-32 28998597 42.62 ns/op 0 B/op 0 allocs/op +BenchmarkParse/0.1234567890123456879-32 30050362 40.64 ns/op 0 B/op 0 allocs/op +BenchmarkParse/0.1234567890123456879-32 29252790 40.34 ns/op 0 B/op 0 allocs/op +BenchmarkParse/0.1234567890123456879-32 28673786 40.64 ns/op 0 B/op 0 allocs/op +BenchmarkParse/0.1234567890123456879-32 29783854 39.91 ns/op 0 B/op 0 allocs/op +BenchmarkParseFallBack/123456789123456789123456.1234567890123456-32 3274933 395.0 ns/op 192 B/op 6 allocs/op +BenchmarkParseFallBack/123456789123456789123456.1234567890123456-32 2493134 448.1 ns/op 192 B/op 6 allocs/op +BenchmarkParseFallBack/123456789123456789123456.1234567890123456-32 2809156 416.6 ns/op 192 B/op 6 allocs/op +BenchmarkParseFallBack/123456789123456789123456.1234567890123456-32 2630193 418.5 ns/op 192 B/op 6 allocs/op +BenchmarkParseFallBack/123456789123456789123456.1234567890123456-32 3131875 424.0 ns/op 192 B/op 6 allocs/op +BenchmarkParseFallBack/123456789123456789123456.1234567890123456-32 2681823 418.1 ns/op 192 B/op 6 allocs/op +BenchmarkParseFallBack/123456789123456789123456.1234567890123456-32 2505271 408.7 ns/op 192 B/op 6 allocs/op +BenchmarkParseFallBack/123456789123456789123456.1234567890123456-32 2709202 401.2 ns/op 192 B/op 6 allocs/op +BenchmarkParseFallBack/123456789123456789123456.1234567890123456-32 2491629 432.8 ns/op 192 B/op 6 allocs/op +BenchmarkParseFallBack/123456789123456789123456.1234567890123456-32 2805122 473.3 ns/op 192 B/op 6 allocs/op +BenchmarkParseFallBack/111222333444555666777888999.1234567890123456789-32 2442004 500.8 ns/op 216 B/op 6 allocs/op +BenchmarkParseFallBack/111222333444555666777888999.1234567890123456789-32 2527959 492.2 ns/op 216 B/op 6 allocs/op +BenchmarkParseFallBack/111222333444555666777888999.1234567890123456789-32 2602639 413.5 ns/op 216 B/op 6 allocs/op +BenchmarkParseFallBack/111222333444555666777888999.1234567890123456789-32 2789718 437.9 ns/op 216 B/op 6 allocs/op +BenchmarkParseFallBack/111222333444555666777888999.1234567890123456789-32 3903250 452.6 ns/op 216 B/op 6 allocs/op +BenchmarkParseFallBack/111222333444555666777888999.1234567890123456789-32 2925530 479.7 ns/op 216 B/op 6 allocs/op +BenchmarkParseFallBack/111222333444555666777888999.1234567890123456789-32 2797160 464.5 ns/op 216 B/op 6 allocs/op +BenchmarkParseFallBack/111222333444555666777888999.1234567890123456789-32 3923319 420.4 ns/op 216 B/op 6 allocs/op +BenchmarkParseFallBack/111222333444555666777888999.1234567890123456789-32 2939563 454.2 ns/op 216 B/op 6 allocs/op +BenchmarkParseFallBack/111222333444555666777888999.1234567890123456789-32 2672593 445.7 ns/op 216 B/op 6 allocs/op +BenchmarkString/1234567890123456789.1234567890123456879-32 12552528 94.96 ns/op 48 B/op 1 allocs/op +BenchmarkString/1234567890123456789.1234567890123456879-32 12465140 94.50 ns/op 48 B/op 1 allocs/op +BenchmarkString/1234567890123456789.1234567890123456879-32 12190023 94.39 ns/op 48 B/op 1 allocs/op +BenchmarkString/1234567890123456789.1234567890123456879-32 14053154 86.35 ns/op 48 B/op 1 allocs/op +BenchmarkString/1234567890123456789.1234567890123456879-32 12745934 105.1 ns/op 48 B/op 1 allocs/op +BenchmarkString/1234567890123456789.1234567890123456879-32 10609932 105.6 ns/op 48 B/op 1 allocs/op +BenchmarkString/1234567890123456789.1234567890123456879-32 13856370 108.2 ns/op 48 B/op 1 allocs/op +BenchmarkString/1234567890123456789.1234567890123456879-32 10843592 96.53 ns/op 48 B/op 1 allocs/op +BenchmarkString/1234567890123456789.1234567890123456879-32 11726074 116.5 ns/op 48 B/op 1 allocs/op +BenchmarkString/1234567890123456789.1234567890123456879-32 12797790 98.69 ns/op 48 B/op 1 allocs/op +BenchmarkString/123-32 62580060 20.34 ns/op 5 B/op 1 allocs/op +BenchmarkString/123-32 65056584 19.25 ns/op 5 B/op 1 allocs/op +BenchmarkString/123-32 62043063 19.91 ns/op 5 B/op 1 allocs/op +BenchmarkString/123-32 60449529 18.44 ns/op 5 B/op 1 allocs/op +BenchmarkString/123-32 56471863 20.37 ns/op 5 B/op 1 allocs/op +BenchmarkString/123-32 54290852 19.72 ns/op 5 B/op 1 allocs/op +BenchmarkString/123-32 68992792 19.29 ns/op 5 B/op 1 allocs/op +BenchmarkString/123-32 67174249 19.58 ns/op 5 B/op 1 allocs/op +BenchmarkString/123-32 67764028 19.74 ns/op 5 B/op 1 allocs/op +BenchmarkString/123-32 60541100 20.12 ns/op 5 B/op 1 allocs/op +BenchmarkString/123456.123456-32 26842911 45.22 ns/op 16 B/op 1 allocs/op +BenchmarkString/123456.123456-32 29508824 45.30 ns/op 16 B/op 1 allocs/op +BenchmarkString/123456.123456-32 27930442 42.61 ns/op 16 B/op 1 allocs/op +BenchmarkString/123456.123456-32 25532580 48.15 ns/op 16 B/op 1 allocs/op +BenchmarkString/123456.123456-32 31376271 49.58 ns/op 16 B/op 1 allocs/op +BenchmarkString/123456.123456-32 26536112 47.03 ns/op 16 B/op 1 allocs/op +BenchmarkString/123456.123456-32 25889634 47.39 ns/op 16 B/op 1 allocs/op +BenchmarkString/123456.123456-32 26176977 45.23 ns/op 16 B/op 1 allocs/op +BenchmarkString/123456.123456-32 27134533 46.13 ns/op 16 B/op 1 allocs/op +BenchmarkString/123456.123456-32 27643584 38.23 ns/op 16 B/op 1 allocs/op +BenchmarkString/1234567890-32 29442105 38.92 ns/op 16 B/op 1 allocs/op +BenchmarkString/1234567890-32 35301012 35.16 ns/op 16 B/op 1 allocs/op +BenchmarkString/1234567890-32 29683576 38.26 ns/op 16 B/op 1 allocs/op +BenchmarkString/1234567890-32 33471895 35.59 ns/op 16 B/op 1 allocs/op +BenchmarkString/1234567890-32 34021183 35.39 ns/op 16 B/op 1 allocs/op +BenchmarkString/1234567890-32 31977952 37.03 ns/op 16 B/op 1 allocs/op +BenchmarkString/1234567890-32 31397775 37.71 ns/op 16 B/op 1 allocs/op +BenchmarkString/1234567890-32 33513164 35.36 ns/op 16 B/op 1 allocs/op +BenchmarkString/1234567890-32 31794782 36.90 ns/op 16 B/op 1 allocs/op +BenchmarkString/1234567890-32 46546339 38.67 ns/op 16 B/op 1 allocs/op +BenchmarkString/0.1234567890123456879-32 22128831 61.07 ns/op 24 B/op 1 allocs/op +BenchmarkString/0.1234567890123456879-32 21217663 66.43 ns/op 24 B/op 1 allocs/op +BenchmarkString/0.1234567890123456879-32 18902191 72.13 ns/op 24 B/op 1 allocs/op +BenchmarkString/0.1234567890123456879-32 20203051 59.65 ns/op 24 B/op 1 allocs/op +BenchmarkString/0.1234567890123456879-32 21037422 55.16 ns/op 24 B/op 1 allocs/op +BenchmarkString/0.1234567890123456879-32 20691126 67.72 ns/op 24 B/op 1 allocs/op +BenchmarkString/0.1234567890123456879-32 25420676 58.23 ns/op 24 B/op 1 allocs/op +BenchmarkString/0.1234567890123456879-32 22125147 56.50 ns/op 24 B/op 1 allocs/op +BenchmarkString/0.1234567890123456879-32 20214018 54.39 ns/op 24 B/op 1 allocs/op +BenchmarkString/0.1234567890123456879-32 18784728 57.20 ns/op 24 B/op 1 allocs/op +BenchmarkStringFallBack/123456789123456789123456.1234567890123456-32 4147044 256.2 ns/op 208 B/op 4 allocs/op +BenchmarkStringFallBack/123456789123456789123456.1234567890123456-32 7396953 155.4 ns/op 208 B/op 4 allocs/op +BenchmarkStringFallBack/123456789123456789123456.1234567890123456-32 7687327 208.4 ns/op 208 B/op 4 allocs/op +BenchmarkStringFallBack/123456789123456789123456.1234567890123456-32 4260550 291.3 ns/op 208 B/op 4 allocs/op +BenchmarkStringFallBack/123456789123456789123456.1234567890123456-32 3947394 300.6 ns/op 208 B/op 4 allocs/op +BenchmarkStringFallBack/123456789123456789123456.1234567890123456-32 3888854 285.2 ns/op 208 B/op 4 allocs/op +BenchmarkStringFallBack/123456789123456789123456.1234567890123456-32 5839972 213.9 ns/op 208 B/op 4 allocs/op +BenchmarkStringFallBack/123456789123456789123456.1234567890123456-32 4945984 280.5 ns/op 208 B/op 4 allocs/op +BenchmarkStringFallBack/123456789123456789123456.1234567890123456-32 4764612 299.3 ns/op 208 B/op 4 allocs/op +BenchmarkStringFallBack/123456789123456789123456.1234567890123456-32 4684754 254.9 ns/op 208 B/op 4 allocs/op +BenchmarkStringFallBack/111222333444555666777888999.1234567890123456789-32 4375872 260.7 ns/op 208 B/op 4 allocs/op +BenchmarkStringFallBack/111222333444555666777888999.1234567890123456789-32 3500150 288.2 ns/op 208 B/op 4 allocs/op +BenchmarkStringFallBack/111222333444555666777888999.1234567890123456789-32 4112253 314.1 ns/op 208 B/op 4 allocs/op +BenchmarkStringFallBack/111222333444555666777888999.1234567890123456789-32 4053070 323.1 ns/op 208 B/op 4 allocs/op +BenchmarkStringFallBack/111222333444555666777888999.1234567890123456789-32 3488655 299.2 ns/op 208 B/op 4 allocs/op +BenchmarkStringFallBack/111222333444555666777888999.1234567890123456789-32 4114371 295.7 ns/op 208 B/op 4 allocs/op +BenchmarkStringFallBack/111222333444555666777888999.1234567890123456789-32 4090605 301.3 ns/op 208 B/op 4 allocs/op +BenchmarkStringFallBack/111222333444555666777888999.1234567890123456789-32 3904669 321.1 ns/op 208 B/op 4 allocs/op +BenchmarkStringFallBack/111222333444555666777888999.1234567890123456789-32 4109169 333.8 ns/op 208 B/op 4 allocs/op +BenchmarkStringFallBack/111222333444555666777888999.1234567890123456789-32 3808071 313.3 ns/op 208 B/op 4 allocs/op +BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1111.1789)-32 100000000 10.91 ns/op 0 B/op 0 allocs/op +BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1111.1789)-32 100000000 10.83 ns/op 0 B/op 0 allocs/op +BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1111.1789)-32 100000000 11.14 ns/op 0 B/op 0 allocs/op +BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1111.1789)-32 100000000 11.00 ns/op 0 B/op 0 allocs/op +BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1111.1789)-32 100000000 10.90 ns/op 0 B/op 0 allocs/op +BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1111.1789)-32 100000000 10.74 ns/op 0 B/op 0 allocs/op +BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1111.1789)-32 100000000 10.79 ns/op 0 B/op 0 allocs/op +BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1111.1789)-32 100000000 10.80 ns/op 0 B/op 0 allocs/op +BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1111.1789)-32 100000000 11.17 ns/op 0 B/op 0 allocs/op +BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1111.1789)-32 100000000 10.79 ns/op 0 B/op 0 allocs/op +BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1234567890123456789.1234567890123456789)-32 135903712 8.732 ns/op 0 B/op 0 allocs/op +BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1234567890123456789.1234567890123456789)-32 135574796 8.705 ns/op 0 B/op 0 allocs/op +BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1234567890123456789.1234567890123456789)-32 138889184 8.704 ns/op 0 B/op 0 allocs/op +BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1234567890123456789.1234567890123456789)-32 137630952 8.599 ns/op 0 B/op 0 allocs/op +BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1234567890123456789.1234567890123456789)-32 138476973 8.719 ns/op 0 B/op 0 allocs/op +BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1234567890123456789.1234567890123456789)-32 138758470 8.652 ns/op 0 B/op 0 allocs/op +BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1234567890123456789.1234567890123456789)-32 138540202 8.652 ns/op 0 B/op 0 allocs/op +BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1234567890123456789.1234567890123456789)-32 138249390 8.702 ns/op 0 B/op 0 allocs/op +BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1234567890123456789.1234567890123456789)-32 137836946 8.608 ns/op 0 B/op 0 allocs/op +BenchmarkAdd/1234567890123456789.1234567890123456879.Add(1234567890123456789.1234567890123456789)-32 139017577 8.716 ns/op 0 B/op 0 allocs/op +BenchmarkAdd/123.456.Add(0.123)-32 136532290 8.592 ns/op 0 B/op 0 allocs/op +BenchmarkAdd/123.456.Add(0.123)-32 139351780 8.664 ns/op 0 B/op 0 allocs/op +BenchmarkAdd/123.456.Add(0.123)-32 138144318 8.673 ns/op 0 B/op 0 allocs/op +BenchmarkAdd/123.456.Add(0.123)-32 138624357 8.603 ns/op 0 B/op 0 allocs/op +BenchmarkAdd/123.456.Add(0.123)-32 139439343 8.787 ns/op 0 B/op 0 allocs/op +BenchmarkAdd/123.456.Add(0.123)-32 135311191 8.776 ns/op 0 B/op 0 allocs/op +BenchmarkAdd/123.456.Add(0.123)-32 138468211 8.756 ns/op 0 B/op 0 allocs/op +BenchmarkAdd/123.456.Add(0.123)-32 136830343 8.672 ns/op 0 B/op 0 allocs/op +BenchmarkAdd/123.456.Add(0.123)-32 138614616 8.618 ns/op 0 B/op 0 allocs/op +BenchmarkAdd/123.456.Add(0.123)-32 137243199 9.033 ns/op 0 B/op 0 allocs/op +BenchmarkAdd/3.Add(7)-32 134213244 8.872 ns/op 0 B/op 0 allocs/op +BenchmarkAdd/3.Add(7)-32 135995937 8.729 ns/op 0 B/op 0 allocs/op +BenchmarkAdd/3.Add(7)-32 138312498 8.639 ns/op 0 B/op 0 allocs/op +BenchmarkAdd/3.Add(7)-32 137298613 8.756 ns/op 0 B/op 0 allocs/op +BenchmarkAdd/3.Add(7)-32 136967152 8.634 ns/op 0 B/op 0 allocs/op +BenchmarkAdd/3.Add(7)-32 137274271 8.717 ns/op 0 B/op 0 allocs/op +BenchmarkAdd/3.Add(7)-32 136711080 8.690 ns/op 0 B/op 0 allocs/op +BenchmarkAdd/3.Add(7)-32 136406413 8.772 ns/op 0 B/op 0 allocs/op +BenchmarkAdd/3.Add(7)-32 136018695 8.757 ns/op 0 B/op 0 allocs/op +BenchmarkAdd/3.Add(7)-32 136730248 8.709 ns/op 0 B/op 0 allocs/op +BenchmarkAdd/123456.123456.Add(999999)-32 100000000 10.85 ns/op 0 B/op 0 allocs/op +BenchmarkAdd/123456.123456.Add(999999)-32 96268164 10.76 ns/op 0 B/op 0 allocs/op +BenchmarkAdd/123456.123456.Add(999999)-32 100000000 10.78 ns/op 0 B/op 0 allocs/op +BenchmarkAdd/123456.123456.Add(999999)-32 100000000 10.78 ns/op 0 B/op 0 allocs/op +BenchmarkAdd/123456.123456.Add(999999)-32 100000000 10.87 ns/op 0 B/op 0 allocs/op +BenchmarkAdd/123456.123456.Add(999999)-32 100000000 10.99 ns/op 0 B/op 0 allocs/op +BenchmarkAdd/123456.123456.Add(999999)-32 100000000 10.83 ns/op 0 B/op 0 allocs/op +BenchmarkAdd/123456.123456.Add(999999)-32 100000000 10.94 ns/op 0 B/op 0 allocs/op +BenchmarkAdd/123456.123456.Add(999999)-32 100000000 10.96 ns/op 0 B/op 0 allocs/op +BenchmarkAdd/123456.123456.Add(999999)-32 100000000 11.12 ns/op 0 B/op 0 allocs/op +BenchmarkAdd/123456.123456.Add(456781244.1324897546)-32 100000000 11.16 ns/op 0 B/op 0 allocs/op +BenchmarkAdd/123456.123456.Add(456781244.1324897546)-32 100000000 11.24 ns/op 0 B/op 0 allocs/op +BenchmarkAdd/123456.123456.Add(456781244.1324897546)-32 100000000 11.52 ns/op 0 B/op 0 allocs/op +BenchmarkAdd/123456.123456.Add(456781244.1324897546)-32 100000000 10.90 ns/op 0 B/op 0 allocs/op +BenchmarkAdd/123456.123456.Add(456781244.1324897546)-32 100000000 11.27 ns/op 0 B/op 0 allocs/op +BenchmarkAdd/123456.123456.Add(456781244.1324897546)-32 93581786 11.34 ns/op 0 B/op 0 allocs/op +BenchmarkAdd/123456.123456.Add(456781244.1324897546)-32 100000000 11.27 ns/op 0 B/op 0 allocs/op +BenchmarkAdd/123456.123456.Add(456781244.1324897546)-32 100000000 11.01 ns/op 0 B/op 0 allocs/op +BenchmarkAdd/123456.123456.Add(456781244.1324897546)-32 95042850 11.34 ns/op 0 B/op 0 allocs/op +BenchmarkAdd/123456.123456.Add(456781244.1324897546)-32 100000000 12.09 ns/op 0 B/op 0 allocs/op +BenchmarkAdd/548751.15465466546.Add(1542.456487)-32 100000000 11.44 ns/op 0 B/op 0 allocs/op +BenchmarkAdd/548751.15465466546.Add(1542.456487)-32 104657646 11.57 ns/op 0 B/op 0 allocs/op +BenchmarkAdd/548751.15465466546.Add(1542.456487)-32 100000000 11.56 ns/op 0 B/op 0 allocs/op +BenchmarkAdd/548751.15465466546.Add(1542.456487)-32 97167808 11.76 ns/op 0 B/op 0 allocs/op +BenchmarkAdd/548751.15465466546.Add(1542.456487)-32 100000000 11.15 ns/op 0 B/op 0 allocs/op +BenchmarkAdd/548751.15465466546.Add(1542.456487)-32 100000000 11.47 ns/op 0 B/op 0 allocs/op +BenchmarkAdd/548751.15465466546.Add(1542.456487)-32 100000000 11.57 ns/op 0 B/op 0 allocs/op +BenchmarkAdd/548751.15465466546.Add(1542.456487)-32 100000000 11.07 ns/op 0 B/op 0 allocs/op +BenchmarkAdd/548751.15465466546.Add(1542.456487)-32 100000000 10.91 ns/op 0 B/op 0 allocs/op +BenchmarkAdd/548751.15465466546.Add(1542.456487)-32 100000000 11.15 ns/op 0 B/op 0 allocs/op +BenchmarkSub/3.Sub(7)-32 100000000 10.74 ns/op 0 B/op 0 allocs/op +BenchmarkSub/3.Sub(7)-32 100000000 10.80 ns/op 0 B/op 0 allocs/op +BenchmarkSub/3.Sub(7)-32 100000000 10.18 ns/op 0 B/op 0 allocs/op +BenchmarkSub/3.Sub(7)-32 100000000 10.20 ns/op 0 B/op 0 allocs/op +BenchmarkSub/3.Sub(7)-32 100000000 10.30 ns/op 0 B/op 0 allocs/op +BenchmarkSub/3.Sub(7)-32 100000000 10.26 ns/op 0 B/op 0 allocs/op +BenchmarkSub/3.Sub(7)-32 100000000 10.72 ns/op 0 B/op 0 allocs/op +BenchmarkSub/3.Sub(7)-32 100000000 10.03 ns/op 0 B/op 0 allocs/op +BenchmarkSub/3.Sub(7)-32 100000000 10.48 ns/op 0 B/op 0 allocs/op +BenchmarkSub/3.Sub(7)-32 100000000 10.43 ns/op 0 B/op 0 allocs/op +BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1111.1789)-32 96477370 13.21 ns/op 0 B/op 0 allocs/op +BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1111.1789)-32 86086893 13.23 ns/op 0 B/op 0 allocs/op +BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1111.1789)-32 83517134 12.60 ns/op 0 B/op 0 allocs/op +BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1111.1789)-32 94707469 12.69 ns/op 0 B/op 0 allocs/op +BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1111.1789)-32 85502185 12.87 ns/op 0 B/op 0 allocs/op +BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1111.1789)-32 91074742 12.76 ns/op 0 B/op 0 allocs/op +BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1111.1789)-32 96480798 13.16 ns/op 0 B/op 0 allocs/op +BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1111.1789)-32 92902294 13.09 ns/op 0 B/op 0 allocs/op +BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1111.1789)-32 92901590 12.61 ns/op 0 B/op 0 allocs/op +BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1111.1789)-32 95768875 12.85 ns/op 0 B/op 0 allocs/op +BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1234567890123456789.1234567890123456789)-32 100000000 10.11 ns/op 0 B/op 0 allocs/op +BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1234567890123456789.1234567890123456789)-32 100000000 11.01 ns/op 0 B/op 0 allocs/op +BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1234567890123456789.1234567890123456789)-32 111193425 10.96 ns/op 0 B/op 0 allocs/op +BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1234567890123456789.1234567890123456789)-32 100000000 10.98 ns/op 0 B/op 0 allocs/op +BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1234567890123456789.1234567890123456789)-32 109020147 10.59 ns/op 0 B/op 0 allocs/op +BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1234567890123456789.1234567890123456789)-32 111529014 10.40 ns/op 0 B/op 0 allocs/op +BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1234567890123456789.1234567890123456789)-32 100000000 10.27 ns/op 0 B/op 0 allocs/op +BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1234567890123456789.1234567890123456789)-32 100000000 10.64 ns/op 0 B/op 0 allocs/op +BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1234567890123456789.1234567890123456789)-32 100000000 10.37 ns/op 0 B/op 0 allocs/op +BenchmarkSub/1234567890123456789.1234567890123456879.Sub(1234567890123456789.1234567890123456789)-32 100000000 10.57 ns/op 0 B/op 0 allocs/op +BenchmarkSub/123.456.Sub(0.123)-32 100000000 10.75 ns/op 0 B/op 0 allocs/op +BenchmarkSub/123.456.Sub(0.123)-32 100000000 10.73 ns/op 0 B/op 0 allocs/op +BenchmarkSub/123.456.Sub(0.123)-32 100000000 11.03 ns/op 0 B/op 0 allocs/op +BenchmarkSub/123.456.Sub(0.123)-32 100000000 11.13 ns/op 0 B/op 0 allocs/op +BenchmarkSub/123.456.Sub(0.123)-32 100000000 10.95 ns/op 0 B/op 0 allocs/op +BenchmarkSub/123.456.Sub(0.123)-32 111838807 10.20 ns/op 0 B/op 0 allocs/op +BenchmarkSub/123.456.Sub(0.123)-32 100000000 10.67 ns/op 0 B/op 0 allocs/op +BenchmarkSub/123.456.Sub(0.123)-32 100000000 10.83 ns/op 0 B/op 0 allocs/op +BenchmarkSub/123.456.Sub(0.123)-32 100000000 10.17 ns/op 0 B/op 0 allocs/op +BenchmarkSub/123.456.Sub(0.123)-32 100000000 10.91 ns/op 0 B/op 0 allocs/op +BenchmarkSub/123456.123456.Sub(456781244.1324897546)-32 95236802 13.50 ns/op 0 B/op 0 allocs/op +BenchmarkSub/123456.123456.Sub(456781244.1324897546)-32 92732312 13.26 ns/op 0 B/op 0 allocs/op +BenchmarkSub/123456.123456.Sub(456781244.1324897546)-32 90615502 13.54 ns/op 0 B/op 0 allocs/op +BenchmarkSub/123456.123456.Sub(456781244.1324897546)-32 82461423 13.05 ns/op 0 B/op 0 allocs/op +BenchmarkSub/123456.123456.Sub(456781244.1324897546)-32 92596642 13.07 ns/op 0 B/op 0 allocs/op +BenchmarkSub/123456.123456.Sub(456781244.1324897546)-32 98359849 12.74 ns/op 0 B/op 0 allocs/op +BenchmarkSub/123456.123456.Sub(456781244.1324897546)-32 98934769 12.86 ns/op 0 B/op 0 allocs/op +BenchmarkSub/123456.123456.Sub(456781244.1324897546)-32 95268928 12.81 ns/op 0 B/op 0 allocs/op +BenchmarkSub/123456.123456.Sub(456781244.1324897546)-32 98679170 12.80 ns/op 0 B/op 0 allocs/op +BenchmarkSub/123456.123456.Sub(456781244.1324897546)-32 95258174 12.14 ns/op 0 B/op 0 allocs/op +BenchmarkSub/548751.15465466546.Sub(1542.456487)-32 98409666 12.81 ns/op 0 B/op 0 allocs/op +BenchmarkSub/548751.15465466546.Sub(1542.456487)-32 94467226 12.23 ns/op 0 B/op 0 allocs/op +BenchmarkSub/548751.15465466546.Sub(1542.456487)-32 89245500 12.82 ns/op 0 B/op 0 allocs/op +BenchmarkSub/548751.15465466546.Sub(1542.456487)-32 94615495 12.17 ns/op 0 B/op 0 allocs/op +BenchmarkSub/548751.15465466546.Sub(1542.456487)-32 97725248 12.60 ns/op 0 B/op 0 allocs/op +BenchmarkSub/548751.15465466546.Sub(1542.456487)-32 94906494 12.65 ns/op 0 B/op 0 allocs/op +BenchmarkSub/548751.15465466546.Sub(1542.456487)-32 97120183 12.76 ns/op 0 B/op 0 allocs/op +BenchmarkSub/548751.15465466546.Sub(1542.456487)-32 99054049 12.72 ns/op 0 B/op 0 allocs/op +BenchmarkSub/548751.15465466546.Sub(1542.456487)-32 95054307 12.11 ns/op 0 B/op 0 allocs/op +BenchmarkSub/548751.15465466546.Sub(1542.456487)-32 99188414 12.12 ns/op 0 B/op 0 allocs/op +BenchmarkMul/1234.1234567890123456879.Mul(1111.1789)-32 100000000 10.47 ns/op 0 B/op 0 allocs/op +BenchmarkMul/1234.1234567890123456879.Mul(1111.1789)-32 100000000 10.44 ns/op 0 B/op 0 allocs/op +BenchmarkMul/1234.1234567890123456879.Mul(1111.1789)-32 100000000 10.44 ns/op 0 B/op 0 allocs/op +BenchmarkMul/1234.1234567890123456879.Mul(1111.1789)-32 100000000 11.11 ns/op 0 B/op 0 allocs/op +BenchmarkMul/1234.1234567890123456879.Mul(1111.1789)-32 110046766 10.42 ns/op 0 B/op 0 allocs/op +BenchmarkMul/1234.1234567890123456879.Mul(1111.1789)-32 114110856 10.40 ns/op 0 B/op 0 allocs/op +BenchmarkMul/1234.1234567890123456879.Mul(1111.1789)-32 100000000 10.44 ns/op 0 B/op 0 allocs/op +BenchmarkMul/1234.1234567890123456879.Mul(1111.1789)-32 100000000 10.79 ns/op 0 B/op 0 allocs/op BenchmarkMul/1234.1234567890123456879.Mul(1111.1789)-32 100000000 10.51 ns/op 0 B/op 0 allocs/op -BenchmarkMul/1234.1234567890123456879.Mul(1111.1789)-32 100000000 10.50 ns/op 0 B/op 0 allocs/op -BenchmarkMul/1234.1234567890123456879.Mul(1111.1789)-32 114306248 10.39 ns/op 0 B/op 0 allocs/op -BenchmarkMul/1234.1234567890123456879.Mul(1111.1789)-32 100000000 10.37 ns/op 0 B/op 0 allocs/op -BenchmarkMul/1234.1234567890123456879.Mul(1111.1789)-32 115745727 10.25 ns/op 0 B/op 0 allocs/op -BenchmarkMul/1234.1234567890123456879.Mul(1111.1789)-32 100000000 10.25 ns/op 0 B/op 0 allocs/op -BenchmarkMul/1234.1234567890123456879.Mul(1111.1789)-32 100000000 10.25 ns/op 0 B/op 0 allocs/op -BenchmarkMul/1234.1234567890123456879.Mul(1111.1789)-32 115335492 10.25 ns/op 0 B/op 0 allocs/op -BenchmarkMul/1234.1234567890123456879.Mul(1111.1789)-32 100000000 10.24 ns/op 0 B/op 0 allocs/op +BenchmarkMul/1234.1234567890123456879.Mul(1111.1789)-32 100000000 10.43 ns/op 0 B/op 0 allocs/op +BenchmarkMul/1234.1234567890123456879.Mul(1111.1234567890123456789)-32 100000000 10.49 ns/op 0 B/op 0 allocs/op +BenchmarkMul/1234.1234567890123456879.Mul(1111.1234567890123456789)-32 100000000 10.96 ns/op 0 B/op 0 allocs/op BenchmarkMul/1234.1234567890123456879.Mul(1111.1234567890123456789)-32 100000000 10.44 ns/op 0 B/op 0 allocs/op -BenchmarkMul/1234.1234567890123456879.Mul(1111.1234567890123456789)-32 117032365 10.38 ns/op 0 B/op 0 allocs/op -BenchmarkMul/1234.1234567890123456879.Mul(1111.1234567890123456789)-32 100000000 10.45 ns/op 0 B/op 0 allocs/op -BenchmarkMul/1234.1234567890123456879.Mul(1111.1234567890123456789)-32 100000000 10.27 ns/op 0 B/op 0 allocs/op -BenchmarkMul/1234.1234567890123456879.Mul(1111.1234567890123456789)-32 100000000 10.25 ns/op 0 B/op 0 allocs/op -BenchmarkMul/1234.1234567890123456879.Mul(1111.1234567890123456789)-32 100000000 10.42 ns/op 0 B/op 0 allocs/op -BenchmarkMul/1234.1234567890123456879.Mul(1111.1234567890123456789)-32 100000000 10.57 ns/op 0 B/op 0 allocs/op -BenchmarkMul/1234.1234567890123456879.Mul(1111.1234567890123456789)-32 100000000 10.44 ns/op 0 B/op 0 allocs/op -BenchmarkMul/1234.1234567890123456879.Mul(1111.1234567890123456789)-32 115137724 10.48 ns/op 0 B/op 0 allocs/op -BenchmarkMul/1234.1234567890123456879.Mul(1111.1234567890123456789)-32 100000000 10.26 ns/op 0 B/op 0 allocs/op -BenchmarkMul/123.456.Mul(0.123)-32 121243284 9.874 ns/op 0 B/op 0 allocs/op -BenchmarkMul/123.456.Mul(0.123)-32 121457388 9.841 ns/op 0 B/op 0 allocs/op -BenchmarkMul/123.456.Mul(0.123)-32 121186957 9.839 ns/op 0 B/op 0 allocs/op -BenchmarkMul/123.456.Mul(0.123)-32 121748046 9.895 ns/op 0 B/op 0 allocs/op -BenchmarkMul/123.456.Mul(0.123)-32 121472601 9.878 ns/op 0 B/op 0 allocs/op -BenchmarkMul/123.456.Mul(0.123)-32 121456255 9.847 ns/op 0 B/op 0 allocs/op -BenchmarkMul/123.456.Mul(0.123)-32 121503350 9.893 ns/op 0 B/op 0 allocs/op -BenchmarkMul/123.456.Mul(0.123)-32 121359126 9.883 ns/op 0 B/op 0 allocs/op -BenchmarkMul/123.456.Mul(0.123)-32 120323257 9.818 ns/op 0 B/op 0 allocs/op -BenchmarkMul/123.456.Mul(0.123)-32 121867374 9.885 ns/op 0 B/op 0 allocs/op -BenchmarkMul/3.Mul(7)-32 121228772 9.839 ns/op 0 B/op 0 allocs/op -BenchmarkMul/3.Mul(7)-32 120191821 9.856 ns/op 0 B/op 0 allocs/op -BenchmarkMul/3.Mul(7)-32 121840536 9.859 ns/op 0 B/op 0 allocs/op -BenchmarkMul/3.Mul(7)-32 122127184 9.840 ns/op 0 B/op 0 allocs/op -BenchmarkMul/3.Mul(7)-32 121171123 9.846 ns/op 0 B/op 0 allocs/op -BenchmarkMul/3.Mul(7)-32 122099764 9.873 ns/op 0 B/op 0 allocs/op -BenchmarkMul/3.Mul(7)-32 121539464 9.906 ns/op 0 B/op 0 allocs/op -BenchmarkMul/3.Mul(7)-32 121501407 9.882 ns/op 0 B/op 0 allocs/op -BenchmarkMul/3.Mul(7)-32 122117958 9.840 ns/op 0 B/op 0 allocs/op -BenchmarkMul/3.Mul(7)-32 121812340 9.877 ns/op 0 B/op 0 allocs/op -BenchmarkMul/123456.123456.Mul(999999)-32 120002790 9.861 ns/op 0 B/op 0 allocs/op -BenchmarkMul/123456.123456.Mul(999999)-32 120768140 9.847 ns/op 0 B/op 0 allocs/op -BenchmarkMul/123456.123456.Mul(999999)-32 121871944 9.854 ns/op 0 B/op 0 allocs/op -BenchmarkMul/123456.123456.Mul(999999)-32 121778416 9.878 ns/op 0 B/op 0 allocs/op -BenchmarkMul/123456.123456.Mul(999999)-32 121637901 9.840 ns/op 0 B/op 0 allocs/op -BenchmarkMul/123456.123456.Mul(999999)-32 120441110 9.858 ns/op 0 B/op 0 allocs/op -BenchmarkMul/123456.123456.Mul(999999)-32 121778318 9.873 ns/op 0 B/op 0 allocs/op -BenchmarkMul/123456.123456.Mul(999999)-32 121495240 9.852 ns/op 0 B/op 0 allocs/op -BenchmarkMul/123456.123456.Mul(999999)-32 121875664 9.853 ns/op 0 B/op 0 allocs/op -BenchmarkMul/123456.123456.Mul(999999)-32 121787899 9.834 ns/op 0 B/op 0 allocs/op -BenchmarkMul/123456.123456.Mul(456781244.1324897546)-32 121807368 9.844 ns/op 0 B/op 0 allocs/op -BenchmarkMul/123456.123456.Mul(456781244.1324897546)-32 121528832 9.880 ns/op 0 B/op 0 allocs/op -BenchmarkMul/123456.123456.Mul(456781244.1324897546)-32 121889965 9.865 ns/op 0 B/op 0 allocs/op -BenchmarkMul/123456.123456.Mul(456781244.1324897546)-32 121692117 9.838 ns/op 0 B/op 0 allocs/op -BenchmarkMul/123456.123456.Mul(456781244.1324897546)-32 121487892 9.840 ns/op 0 B/op 0 allocs/op -BenchmarkMul/123456.123456.Mul(456781244.1324897546)-32 121943371 9.868 ns/op 0 B/op 0 allocs/op -BenchmarkMul/123456.123456.Mul(456781244.1324897546)-32 121400509 9.830 ns/op 0 B/op 0 allocs/op -BenchmarkMul/123456.123456.Mul(456781244.1324897546)-32 121704168 9.933 ns/op 0 B/op 0 allocs/op -BenchmarkMul/123456.123456.Mul(456781244.1324897546)-32 121457960 9.847 ns/op 0 B/op 0 allocs/op -BenchmarkMul/123456.123456.Mul(456781244.1324897546)-32 120862012 9.879 ns/op 0 B/op 0 allocs/op -BenchmarkMul/548751.15465466546.Mul(1542.456487)-32 122173642 9.875 ns/op 0 B/op 0 allocs/op -BenchmarkMul/548751.15465466546.Mul(1542.456487)-32 122256078 9.884 ns/op 0 B/op 0 allocs/op -BenchmarkMul/548751.15465466546.Mul(1542.456487)-32 122117494 9.886 ns/op 0 B/op 0 allocs/op -BenchmarkMul/548751.15465466546.Mul(1542.456487)-32 121334481 9.816 ns/op 0 B/op 0 allocs/op -BenchmarkMul/548751.15465466546.Mul(1542.456487)-32 121037674 9.861 ns/op 0 B/op 0 allocs/op -BenchmarkMul/548751.15465466546.Mul(1542.456487)-32 120718052 9.885 ns/op 0 B/op 0 allocs/op -BenchmarkMul/548751.15465466546.Mul(1542.456487)-32 122034648 9.905 ns/op 0 B/op 0 allocs/op -BenchmarkMul/548751.15465466546.Mul(1542.456487)-32 120102330 9.844 ns/op 0 B/op 0 allocs/op -BenchmarkMul/548751.15465466546.Mul(1542.456487)-32 121394394 9.873 ns/op 0 B/op 0 allocs/op -BenchmarkMul/548751.15465466546.Mul(1542.456487)-32 122017057 9.883 ns/op 0 B/op 0 allocs/op -BenchmarkDiv/1234567890123456789.1234567890123456879.Div(1111.1789)-32 100000000 10.27 ns/op 0 B/op 0 allocs/op -BenchmarkDiv/1234567890123456789.1234567890123456879.Div(1111.1789)-32 100000000 10.39 ns/op 0 B/op 0 allocs/op -BenchmarkDiv/1234567890123456789.1234567890123456879.Div(1111.1789)-32 115629367 10.27 ns/op 0 B/op 0 allocs/op -BenchmarkDiv/1234567890123456789.1234567890123456879.Div(1111.1789)-32 100000000 10.44 ns/op 0 B/op 0 allocs/op -BenchmarkDiv/1234567890123456789.1234567890123456879.Div(1111.1789)-32 100000000 10.37 ns/op 0 B/op 0 allocs/op -BenchmarkDiv/1234567890123456789.1234567890123456879.Div(1111.1789)-32 100000000 10.26 ns/op 0 B/op 0 allocs/op -BenchmarkDiv/1234567890123456789.1234567890123456879.Div(1111.1789)-32 100000000 10.37 ns/op 0 B/op 0 allocs/op -BenchmarkDiv/1234567890123456789.1234567890123456879.Div(1111.1789)-32 100000000 10.42 ns/op 0 B/op 0 allocs/op -BenchmarkDiv/1234567890123456789.1234567890123456879.Div(1111.1789)-32 117042853 10.27 ns/op 0 B/op 0 allocs/op -BenchmarkDiv/1234567890123456789.1234567890123456879.Div(1111.1789)-32 100000000 10.26 ns/op 0 B/op 0 allocs/op -BenchmarkDiv/12345.1234567890123456879.Div(1111.1234567890123456789)-32 50684397 24.85 ns/op 0 B/op 0 allocs/op -BenchmarkDiv/12345.1234567890123456879.Div(1111.1234567890123456789)-32 49815625 23.82 ns/op 0 B/op 0 allocs/op -BenchmarkDiv/12345.1234567890123456879.Div(1111.1234567890123456789)-32 49638571 23.83 ns/op 0 B/op 0 allocs/op -BenchmarkDiv/12345.1234567890123456879.Div(1111.1234567890123456789)-32 50527347 23.84 ns/op 0 B/op 0 allocs/op -BenchmarkDiv/12345.1234567890123456879.Div(1111.1234567890123456789)-32 50383876 24.24 ns/op 0 B/op 0 allocs/op -BenchmarkDiv/12345.1234567890123456879.Div(1111.1234567890123456789)-32 50282784 24.30 ns/op 0 B/op 0 allocs/op -BenchmarkDiv/12345.1234567890123456879.Div(1111.1234567890123456789)-32 49752501 24.28 ns/op 0 B/op 0 allocs/op -BenchmarkDiv/12345.1234567890123456879.Div(1111.1234567890123456789)-32 50386332 23.82 ns/op 0 B/op 0 allocs/op -BenchmarkDiv/12345.1234567890123456879.Div(1111.1234567890123456789)-32 50458932 23.83 ns/op 0 B/op 0 allocs/op -BenchmarkDiv/12345.1234567890123456879.Div(1111.1234567890123456789)-32 50674759 24.17 ns/op 0 B/op 0 allocs/op +BenchmarkMul/1234.1234567890123456879.Mul(1111.1234567890123456789)-32 109261894 10.42 ns/op 0 B/op 0 allocs/op +BenchmarkMul/1234.1234567890123456879.Mul(1111.1234567890123456789)-32 100000000 10.60 ns/op 0 B/op 0 allocs/op +BenchmarkMul/1234.1234567890123456879.Mul(1111.1234567890123456789)-32 100000000 10.51 ns/op 0 B/op 0 allocs/op +BenchmarkMul/1234.1234567890123456879.Mul(1111.1234567890123456789)-32 100000000 10.47 ns/op 0 B/op 0 allocs/op +BenchmarkMul/1234.1234567890123456879.Mul(1111.1234567890123456789)-32 100000000 10.96 ns/op 0 B/op 0 allocs/op +BenchmarkMul/1234.1234567890123456879.Mul(1111.1234567890123456789)-32 100000000 10.95 ns/op 0 B/op 0 allocs/op +BenchmarkMul/1234.1234567890123456879.Mul(1111.1234567890123456789)-32 100000000 11.07 ns/op 0 B/op 0 allocs/op +BenchmarkMul/123.456.Mul(0.123)-32 120837226 10.09 ns/op 0 B/op 0 allocs/op +BenchmarkMul/123.456.Mul(0.123)-32 120384586 10.08 ns/op 0 B/op 0 allocs/op +BenchmarkMul/123.456.Mul(0.123)-32 120786927 9.994 ns/op 0 B/op 0 allocs/op +BenchmarkMul/123.456.Mul(0.123)-32 100000000 10.11 ns/op 0 B/op 0 allocs/op +BenchmarkMul/123.456.Mul(0.123)-32 120917606 9.904 ns/op 0 B/op 0 allocs/op +BenchmarkMul/123.456.Mul(0.123)-32 119428400 9.924 ns/op 0 B/op 0 allocs/op +BenchmarkMul/123.456.Mul(0.123)-32 100000000 10.11 ns/op 0 B/op 0 allocs/op +BenchmarkMul/123.456.Mul(0.123)-32 120835309 10.02 ns/op 0 B/op 0 allocs/op +BenchmarkMul/123.456.Mul(0.123)-32 100000000 10.10 ns/op 0 B/op 0 allocs/op +BenchmarkMul/123.456.Mul(0.123)-32 100000000 10.26 ns/op 0 B/op 0 allocs/op +BenchmarkMul/3.Mul(7)-32 119861250 9.928 ns/op 0 B/op 0 allocs/op +BenchmarkMul/3.Mul(7)-32 100000000 10.05 ns/op 0 B/op 0 allocs/op +BenchmarkMul/3.Mul(7)-32 120734767 9.925 ns/op 0 B/op 0 allocs/op +BenchmarkMul/3.Mul(7)-32 100000000 10.13 ns/op 0 B/op 0 allocs/op +BenchmarkMul/3.Mul(7)-32 120722575 9.889 ns/op 0 B/op 0 allocs/op +BenchmarkMul/3.Mul(7)-32 120993511 10.03 ns/op 0 B/op 0 allocs/op +BenchmarkMul/3.Mul(7)-32 120868543 9.916 ns/op 0 B/op 0 allocs/op +BenchmarkMul/3.Mul(7)-32 120082662 9.905 ns/op 0 B/op 0 allocs/op +BenchmarkMul/3.Mul(7)-32 120604208 9.996 ns/op 0 B/op 0 allocs/op +BenchmarkMul/3.Mul(7)-32 100000000 10.03 ns/op 0 B/op 0 allocs/op +BenchmarkMul/123456.123456.Mul(999999)-32 100000000 10.03 ns/op 0 B/op 0 allocs/op +BenchmarkMul/123456.123456.Mul(999999)-32 100000000 10.02 ns/op 0 B/op 0 allocs/op +BenchmarkMul/123456.123456.Mul(999999)-32 100000000 10.03 ns/op 0 B/op 0 allocs/op +BenchmarkMul/123456.123456.Mul(999999)-32 100000000 10.14 ns/op 0 B/op 0 allocs/op +BenchmarkMul/123456.123456.Mul(999999)-32 120593768 9.987 ns/op 0 B/op 0 allocs/op +BenchmarkMul/123456.123456.Mul(999999)-32 100000000 10.13 ns/op 0 B/op 0 allocs/op +BenchmarkMul/123456.123456.Mul(999999)-32 100000000 10.08 ns/op 0 B/op 0 allocs/op +BenchmarkMul/123456.123456.Mul(999999)-32 100000000 10.10 ns/op 0 B/op 0 allocs/op +BenchmarkMul/123456.123456.Mul(999999)-32 120834086 9.916 ns/op 0 B/op 0 allocs/op +BenchmarkMul/123456.123456.Mul(999999)-32 100000000 10.00 ns/op 0 B/op 0 allocs/op +BenchmarkMul/123456.123456.Mul(456781244.1324897546)-32 121067292 9.896 ns/op 0 B/op 0 allocs/op +BenchmarkMul/123456.123456.Mul(456781244.1324897546)-32 100000000 10.01 ns/op 0 B/op 0 allocs/op +BenchmarkMul/123456.123456.Mul(456781244.1324897546)-32 119333619 9.906 ns/op 0 B/op 0 allocs/op +BenchmarkMul/123456.123456.Mul(456781244.1324897546)-32 100000000 10.04 ns/op 0 B/op 0 allocs/op +BenchmarkMul/123456.123456.Mul(456781244.1324897546)-32 118847034 10.04 ns/op 0 B/op 0 allocs/op +BenchmarkMul/123456.123456.Mul(456781244.1324897546)-32 100000000 10.09 ns/op 0 B/op 0 allocs/op +BenchmarkMul/123456.123456.Mul(456781244.1324897546)-32 100000000 10.07 ns/op 0 B/op 0 allocs/op +BenchmarkMul/123456.123456.Mul(456781244.1324897546)-32 120800401 9.899 ns/op 0 B/op 0 allocs/op +BenchmarkMul/123456.123456.Mul(456781244.1324897546)-32 120025298 9.918 ns/op 0 B/op 0 allocs/op +BenchmarkMul/123456.123456.Mul(456781244.1324897546)-32 120917727 9.908 ns/op 0 B/op 0 allocs/op +BenchmarkMul/548751.15465466546.Mul(1542.456487)-32 120085242 9.911 ns/op 0 B/op 0 allocs/op +BenchmarkMul/548751.15465466546.Mul(1542.456487)-32 120503007 9.914 ns/op 0 B/op 0 allocs/op +BenchmarkMul/548751.15465466546.Mul(1542.456487)-32 120052771 9.905 ns/op 0 B/op 0 allocs/op +BenchmarkMul/548751.15465466546.Mul(1542.456487)-32 120890313 9.916 ns/op 0 B/op 0 allocs/op +BenchmarkMul/548751.15465466546.Mul(1542.456487)-32 120858998 9.906 ns/op 0 B/op 0 allocs/op +BenchmarkMul/548751.15465466546.Mul(1542.456487)-32 120787778 9.970 ns/op 0 B/op 0 allocs/op +BenchmarkMul/548751.15465466546.Mul(1542.456487)-32 100000000 10.07 ns/op 0 B/op 0 allocs/op +BenchmarkMul/548751.15465466546.Mul(1542.456487)-32 120073312 9.978 ns/op 0 B/op 0 allocs/op +BenchmarkMul/548751.15465466546.Mul(1542.456487)-32 100000000 10.04 ns/op 0 B/op 0 allocs/op +BenchmarkMul/548751.15465466546.Mul(1542.456487)-32 100000000 10.05 ns/op 0 B/op 0 allocs/op +BenchmarkDiv/1234567890123456789.1234567890123456879.Div(1111.1789)-32 100000000 10.46 ns/op 0 B/op 0 allocs/op +BenchmarkDiv/1234567890123456789.1234567890123456879.Div(1111.1789)-32 100000000 10.75 ns/op 0 B/op 0 allocs/op +BenchmarkDiv/1234567890123456789.1234567890123456879.Div(1111.1789)-32 112505985 10.28 ns/op 0 B/op 0 allocs/op +BenchmarkDiv/1234567890123456789.1234567890123456879.Div(1111.1789)-32 100000000 10.29 ns/op 0 B/op 0 allocs/op +BenchmarkDiv/1234567890123456789.1234567890123456879.Div(1111.1789)-32 100000000 10.58 ns/op 0 B/op 0 allocs/op +BenchmarkDiv/1234567890123456789.1234567890123456879.Div(1111.1789)-32 100000000 10.47 ns/op 0 B/op 0 allocs/op +BenchmarkDiv/1234567890123456789.1234567890123456879.Div(1111.1789)-32 100000000 10.30 ns/op 0 B/op 0 allocs/op +BenchmarkDiv/1234567890123456789.1234567890123456879.Div(1111.1789)-32 100000000 10.31 ns/op 0 B/op 0 allocs/op +BenchmarkDiv/1234567890123456789.1234567890123456879.Div(1111.1789)-32 100000000 10.69 ns/op 0 B/op 0 allocs/op +BenchmarkDiv/1234567890123456789.1234567890123456879.Div(1111.1789)-32 116548210 10.28 ns/op 0 B/op 0 allocs/op +BenchmarkDiv/12345.1234567890123456879.Div(1111.1234567890123456789)-32 50348194 23.87 ns/op 0 B/op 0 allocs/op +BenchmarkDiv/12345.1234567890123456879.Div(1111.1234567890123456789)-32 42419839 25.07 ns/op 0 B/op 0 allocs/op +BenchmarkDiv/12345.1234567890123456879.Div(1111.1234567890123456789)-32 47885707 25.19 ns/op 0 B/op 0 allocs/op +BenchmarkDiv/12345.1234567890123456879.Div(1111.1234567890123456789)-32 50038483 25.01 ns/op 0 B/op 0 allocs/op +BenchmarkDiv/12345.1234567890123456879.Div(1111.1234567890123456789)-32 50497294 23.83 ns/op 0 B/op 0 allocs/op +BenchmarkDiv/12345.1234567890123456879.Div(1111.1234567890123456789)-32 50472860 23.87 ns/op 0 B/op 0 allocs/op +BenchmarkDiv/12345.1234567890123456879.Div(1111.1234567890123456789)-32 50610570 24.17 ns/op 0 B/op 0 allocs/op +BenchmarkDiv/12345.1234567890123456879.Div(1111.1234567890123456789)-32 46113205 25.00 ns/op 0 B/op 0 allocs/op +BenchmarkDiv/12345.1234567890123456879.Div(1111.1234567890123456789)-32 48112866 23.91 ns/op 0 B/op 0 allocs/op +BenchmarkDiv/12345.1234567890123456879.Div(1111.1234567890123456789)-32 50097552 25.23 ns/op 0 B/op 0 allocs/op +BenchmarkDiv/1234567890123456789.1234567890123456879.Div(9876543210987654321.1234567890123456789)-32 71081355 16.81 ns/op 0 B/op 0 allocs/op +BenchmarkDiv/1234567890123456789.1234567890123456879.Div(9876543210987654321.1234567890123456789)-32 68065828 16.81 ns/op 0 B/op 0 allocs/op +BenchmarkDiv/1234567890123456789.1234567890123456879.Div(9876543210987654321.1234567890123456789)-32 71621193 16.82 ns/op 0 B/op 0 allocs/op +BenchmarkDiv/1234567890123456789.1234567890123456879.Div(9876543210987654321.1234567890123456789)-32 71898565 17.09 ns/op 0 B/op 0 allocs/op +BenchmarkDiv/1234567890123456789.1234567890123456879.Div(9876543210987654321.1234567890123456789)-32 71731118 17.64 ns/op 0 B/op 0 allocs/op +BenchmarkDiv/1234567890123456789.1234567890123456879.Div(9876543210987654321.1234567890123456789)-32 72178080 16.88 ns/op 0 B/op 0 allocs/op +BenchmarkDiv/1234567890123456789.1234567890123456879.Div(9876543210987654321.1234567890123456789)-32 61184785 17.58 ns/op 0 B/op 0 allocs/op +BenchmarkDiv/1234567890123456789.1234567890123456879.Div(9876543210987654321.1234567890123456789)-32 72999942 16.90 ns/op 0 B/op 0 allocs/op +BenchmarkDiv/1234567890123456789.1234567890123456879.Div(9876543210987654321.1234567890123456789)-32 71840030 16.79 ns/op 0 B/op 0 allocs/op +BenchmarkDiv/1234567890123456789.1234567890123456879.Div(9876543210987654321.1234567890123456789)-32 72081037 16.81 ns/op 0 B/op 0 allocs/op +BenchmarkDiv/123.456.Div(0.123)-32 112614492 10.71 ns/op 0 B/op 0 allocs/op +BenchmarkDiv/123.456.Div(0.123)-32 100000000 10.71 ns/op 0 B/op 0 allocs/op +BenchmarkDiv/123.456.Div(0.123)-32 100000000 10.57 ns/op 0 B/op 0 allocs/op BenchmarkDiv/123.456.Div(0.123)-32 100000000 10.33 ns/op 0 B/op 0 allocs/op -BenchmarkDiv/123.456.Div(0.123)-32 100000000 10.25 ns/op 0 B/op 0 allocs/op -BenchmarkDiv/123.456.Div(0.123)-32 100000000 10.25 ns/op 0 B/op 0 allocs/op -BenchmarkDiv/123.456.Div(0.123)-32 100000000 10.29 ns/op 0 B/op 0 allocs/op -BenchmarkDiv/123.456.Div(0.123)-32 100000000 10.26 ns/op 0 B/op 0 allocs/op BenchmarkDiv/123.456.Div(0.123)-32 100000000 10.31 ns/op 0 B/op 0 allocs/op -BenchmarkDiv/123.456.Div(0.123)-32 100000000 10.28 ns/op 0 B/op 0 allocs/op -BenchmarkDiv/123.456.Div(0.123)-32 100000000 10.26 ns/op 0 B/op 0 allocs/op -BenchmarkDiv/123.456.Div(0.123)-32 116790800 10.25 ns/op 0 B/op 0 allocs/op -BenchmarkDiv/123.456.Div(0.123)-32 100000000 10.50 ns/op 0 B/op 0 allocs/op -BenchmarkDiv/3.Div(7)-32 100000000 10.26 ns/op 0 B/op 0 allocs/op -BenchmarkDiv/3.Div(7)-32 100000000 10.25 ns/op 0 B/op 0 allocs/op -BenchmarkDiv/3.Div(7)-32 100000000 10.30 ns/op 0 B/op 0 allocs/op -BenchmarkDiv/3.Div(7)-32 100000000 10.34 ns/op 0 B/op 0 allocs/op -BenchmarkDiv/3.Div(7)-32 100000000 10.25 ns/op 0 B/op 0 allocs/op -BenchmarkDiv/3.Div(7)-32 100000000 10.32 ns/op 0 B/op 0 allocs/op -BenchmarkDiv/3.Div(7)-32 100000000 10.27 ns/op 0 B/op 0 allocs/op +BenchmarkDiv/123.456.Div(0.123)-32 100000000 10.30 ns/op 0 B/op 0 allocs/op +BenchmarkDiv/123.456.Div(0.123)-32 100000000 10.29 ns/op 0 B/op 0 allocs/op +BenchmarkDiv/123.456.Div(0.123)-32 113070070 10.31 ns/op 0 B/op 0 allocs/op +BenchmarkDiv/123.456.Div(0.123)-32 100000000 10.44 ns/op 0 B/op 0 allocs/op +BenchmarkDiv/123.456.Div(0.123)-32 111231829 10.70 ns/op 0 B/op 0 allocs/op BenchmarkDiv/3.Div(7)-32 100000000 10.36 ns/op 0 B/op 0 allocs/op -BenchmarkDiv/3.Div(7)-32 100000000 10.38 ns/op 0 B/op 0 allocs/op -BenchmarkDiv/3.Div(7)-32 100000000 10.44 ns/op 0 B/op 0 allocs/op +BenchmarkDiv/3.Div(7)-32 100000000 10.32 ns/op 0 B/op 0 allocs/op +BenchmarkDiv/3.Div(7)-32 100000000 10.82 ns/op 0 B/op 0 allocs/op +BenchmarkDiv/3.Div(7)-32 100000000 10.42 ns/op 0 B/op 0 allocs/op +BenchmarkDiv/3.Div(7)-32 100000000 10.77 ns/op 0 B/op 0 allocs/op +BenchmarkDiv/3.Div(7)-32 100000000 10.56 ns/op 0 B/op 0 allocs/op +BenchmarkDiv/3.Div(7)-32 100000000 10.35 ns/op 0 B/op 0 allocs/op +BenchmarkDiv/3.Div(7)-32 100000000 10.33 ns/op 0 B/op 0 allocs/op +BenchmarkDiv/3.Div(7)-32 100000000 10.31 ns/op 0 B/op 0 allocs/op +BenchmarkDiv/3.Div(7)-32 116521934 10.64 ns/op 0 B/op 0 allocs/op +BenchmarkDiv/123456.123456.Div(999999)-32 111666984 10.32 ns/op 0 B/op 0 allocs/op +BenchmarkDiv/123456.123456.Div(999999)-32 100000000 10.81 ns/op 0 B/op 0 allocs/op +BenchmarkDiv/123456.123456.Div(999999)-32 112171263 10.78 ns/op 0 B/op 0 allocs/op +BenchmarkDiv/123456.123456.Div(999999)-32 115969861 10.49 ns/op 0 B/op 0 allocs/op BenchmarkDiv/123456.123456.Div(999999)-32 100000000 10.31 ns/op 0 B/op 0 allocs/op -BenchmarkDiv/123456.123456.Div(999999)-32 100000000 10.26 ns/op 0 B/op 0 allocs/op -BenchmarkDiv/123456.123456.Div(999999)-32 116931043 10.54 ns/op 0 B/op 0 allocs/op -BenchmarkDiv/123456.123456.Div(999999)-32 100000000 10.26 ns/op 0 B/op 0 allocs/op -BenchmarkDiv/123456.123456.Div(999999)-32 100000000 10.25 ns/op 0 B/op 0 allocs/op -BenchmarkDiv/123456.123456.Div(999999)-32 100000000 10.37 ns/op 0 B/op 0 allocs/op -BenchmarkDiv/123456.123456.Div(999999)-32 100000000 10.30 ns/op 0 B/op 0 allocs/op -BenchmarkDiv/123456.123456.Div(999999)-32 100000000 10.26 ns/op 0 B/op 0 allocs/op -BenchmarkDiv/123456.123456.Div(999999)-32 100000000 10.25 ns/op 0 B/op 0 allocs/op -BenchmarkDiv/123456.123456.Div(999999)-32 100000000 10.32 ns/op 0 B/op 0 allocs/op -BenchmarkDiv/123456.123456.Div(456781244.1324897546)-32 100000000 10.34 ns/op 0 B/op 0 allocs/op -BenchmarkDiv/123456.123456.Div(456781244.1324897546)-32 100000000 10.38 ns/op 0 B/op 0 allocs/op -BenchmarkDiv/123456.123456.Div(456781244.1324897546)-32 100000000 10.38 ns/op 0 B/op 0 allocs/op -BenchmarkDiv/123456.123456.Div(456781244.1324897546)-32 100000000 10.37 ns/op 0 B/op 0 allocs/op -BenchmarkDiv/123456.123456.Div(456781244.1324897546)-32 100000000 10.25 ns/op 0 B/op 0 allocs/op -BenchmarkDiv/123456.123456.Div(456781244.1324897546)-32 100000000 10.37 ns/op 0 B/op 0 allocs/op -BenchmarkDiv/123456.123456.Div(456781244.1324897546)-32 100000000 10.26 ns/op 0 B/op 0 allocs/op -BenchmarkDiv/123456.123456.Div(456781244.1324897546)-32 100000000 10.47 ns/op 0 B/op 0 allocs/op +BenchmarkDiv/123456.123456.Div(999999)-32 100000000 10.40 ns/op 0 B/op 0 allocs/op +BenchmarkDiv/123456.123456.Div(999999)-32 100000000 10.45 ns/op 0 B/op 0 allocs/op +BenchmarkDiv/123456.123456.Div(999999)-32 100000000 10.73 ns/op 0 B/op 0 allocs/op +BenchmarkDiv/123456.123456.Div(999999)-32 100000000 10.29 ns/op 0 B/op 0 allocs/op +BenchmarkDiv/123456.123456.Div(999999)-32 100000000 10.27 ns/op 0 B/op 0 allocs/op +BenchmarkDiv/123456.123456.Div(456781244.1324897546)-32 100000000 10.32 ns/op 0 B/op 0 allocs/op +BenchmarkDiv/123456.123456.Div(456781244.1324897546)-32 100000000 10.63 ns/op 0 B/op 0 allocs/op +BenchmarkDiv/123456.123456.Div(456781244.1324897546)-32 100000000 10.32 ns/op 0 B/op 0 allocs/op +BenchmarkDiv/123456.123456.Div(456781244.1324897546)-32 100000000 10.32 ns/op 0 B/op 0 allocs/op +BenchmarkDiv/123456.123456.Div(456781244.1324897546)-32 100000000 10.66 ns/op 0 B/op 0 allocs/op +BenchmarkDiv/123456.123456.Div(456781244.1324897546)-32 100000000 10.68 ns/op 0 B/op 0 allocs/op +BenchmarkDiv/123456.123456.Div(456781244.1324897546)-32 100000000 10.43 ns/op 0 B/op 0 allocs/op +BenchmarkDiv/123456.123456.Div(456781244.1324897546)-32 110008604 10.30 ns/op 0 B/op 0 allocs/op BenchmarkDiv/123456.123456.Div(456781244.1324897546)-32 100000000 10.29 ns/op 0 B/op 0 allocs/op -BenchmarkDiv/123456.123456.Div(456781244.1324897546)-32 115989972 10.36 ns/op 0 B/op 0 allocs/op -BenchmarkDiv/548751.15465466546.Div(1542.456487)-32 100000000 10.38 ns/op 0 B/op 0 allocs/op -BenchmarkDiv/548751.15465466546.Div(1542.456487)-32 100000000 10.38 ns/op 0 B/op 0 allocs/op -BenchmarkDiv/548751.15465466546.Div(1542.456487)-32 100000000 10.31 ns/op 0 B/op 0 allocs/op +BenchmarkDiv/123456.123456.Div(456781244.1324897546)-32 100000000 10.64 ns/op 0 B/op 0 allocs/op +BenchmarkDiv/548751.15465466546.Div(1542.456487)-32 100000000 10.49 ns/op 0 B/op 0 allocs/op +BenchmarkDiv/548751.15465466546.Div(1542.456487)-32 100000000 10.34 ns/op 0 B/op 0 allocs/op +BenchmarkDiv/548751.15465466546.Div(1542.456487)-32 100000000 10.65 ns/op 0 B/op 0 allocs/op BenchmarkDiv/548751.15465466546.Div(1542.456487)-32 100000000 10.35 ns/op 0 B/op 0 allocs/op -BenchmarkDiv/548751.15465466546.Div(1542.456487)-32 100000000 10.39 ns/op 0 B/op 0 allocs/op -BenchmarkDiv/548751.15465466546.Div(1542.456487)-32 100000000 10.39 ns/op 0 B/op 0 allocs/op -BenchmarkDiv/548751.15465466546.Div(1542.456487)-32 100000000 10.39 ns/op 0 B/op 0 allocs/op -BenchmarkDiv/548751.15465466546.Div(1542.456487)-32 100000000 10.39 ns/op 0 B/op 0 allocs/op -BenchmarkDiv/548751.15465466546.Div(1542.456487)-32 100000000 10.25 ns/op 0 B/op 0 allocs/op -BenchmarkDiv/548751.15465466546.Div(1542.456487)-32 100000000 10.26 ns/op 0 B/op 0 allocs/op -BenchmarkDivFallback/12345679012345679890.1234567890123456789.Div(999999)-32 100000000 10.28 ns/op 0 B/op 0 allocs/op -BenchmarkDivFallback/12345679012345679890.1234567890123456789.Div(999999)-32 100000000 10.28 ns/op 0 B/op 0 allocs/op -BenchmarkDivFallback/12345679012345679890.1234567890123456789.Div(999999)-32 100000000 10.26 ns/op 0 B/op 0 allocs/op -BenchmarkDivFallback/12345679012345679890.1234567890123456789.Div(999999)-32 100000000 10.35 ns/op 0 B/op 0 allocs/op -BenchmarkDivFallback/12345679012345679890.1234567890123456789.Div(999999)-32 100000000 10.36 ns/op 0 B/op 0 allocs/op -BenchmarkDivFallback/12345679012345679890.1234567890123456789.Div(999999)-32 100000000 10.25 ns/op 0 B/op 0 allocs/op -BenchmarkDivFallback/12345679012345679890.1234567890123456789.Div(999999)-32 100000000 10.25 ns/op 0 B/op 0 allocs/op -BenchmarkDivFallback/12345679012345679890.1234567890123456789.Div(999999)-32 100000000 10.25 ns/op 0 B/op 0 allocs/op -BenchmarkDivFallback/12345679012345679890.1234567890123456789.Div(999999)-32 100000000 10.25 ns/op 0 B/op 0 allocs/op -BenchmarkDivFallback/12345679012345679890.1234567890123456789.Div(999999)-32 100000000 10.26 ns/op 0 B/op 0 allocs/op -BenchmarkDivFallback/1234.Div(12345679012345679890.1234567890123456789)-32 72809017 17.14 ns/op 0 B/op 0 allocs/op -BenchmarkDivFallback/1234.Div(12345679012345679890.1234567890123456789)-32 71424553 17.13 ns/op 0 B/op 0 allocs/op -BenchmarkDivFallback/1234.Div(12345679012345679890.1234567890123456789)-32 71052193 16.54 ns/op 0 B/op 0 allocs/op -BenchmarkDivFallback/1234.Div(12345679012345679890.1234567890123456789)-32 72204526 16.64 ns/op 0 B/op 0 allocs/op -BenchmarkDivFallback/1234.Div(12345679012345679890.1234567890123456789)-32 70771566 16.60 ns/op 0 B/op 0 allocs/op -BenchmarkDivFallback/1234.Div(12345679012345679890.1234567890123456789)-32 72834656 16.55 ns/op 0 B/op 0 allocs/op -BenchmarkDivFallback/1234.Div(12345679012345679890.1234567890123456789)-32 72840015 17.05 ns/op 0 B/op 0 allocs/op -BenchmarkDivFallback/1234.Div(12345679012345679890.1234567890123456789)-32 70284469 17.10 ns/op 0 B/op 0 allocs/op -BenchmarkDivFallback/1234.Div(12345679012345679890.1234567890123456789)-32 70980175 17.12 ns/op 0 B/op 0 allocs/op -BenchmarkDivFallback/1234.Div(12345679012345679890.1234567890123456789)-32 73411659 17.13 ns/op 0 B/op 0 allocs/op -BenchmarkPow/1.01.Pow(10)-32 30405859 39.55 ns/op 0 B/op 0 allocs/op -BenchmarkPow/1.01.Pow(10)-32 30490516 40.47 ns/op 0 B/op 0 allocs/op -BenchmarkPow/1.01.Pow(10)-32 29302735 39.47 ns/op 0 B/op 0 allocs/op -BenchmarkPow/1.01.Pow(10)-32 30536349 39.47 ns/op 0 B/op 0 allocs/op -BenchmarkPow/1.01.Pow(10)-32 30281086 39.54 ns/op 0 B/op 0 allocs/op -BenchmarkPow/1.01.Pow(10)-32 30468993 39.48 ns/op 0 B/op 0 allocs/op -BenchmarkPow/1.01.Pow(10)-32 30355591 40.40 ns/op 0 B/op 0 allocs/op -BenchmarkPow/1.01.Pow(10)-32 30379286 40.61 ns/op 0 B/op 0 allocs/op -BenchmarkPow/1.01.Pow(10)-32 25555431 39.52 ns/op 0 B/op 0 allocs/op -BenchmarkPow/1.01.Pow(10)-32 30375039 40.54 ns/op 0 B/op 0 allocs/op -BenchmarkPow/1.01.Pow(100)-32 1726615 908.8 ns/op 817 B/op 13 allocs/op -BenchmarkPow/1.01.Pow(100)-32 1257393 962.4 ns/op 817 B/op 13 allocs/op -BenchmarkPow/1.01.Pow(100)-32 1244241 1042 ns/op 817 B/op 13 allocs/op -BenchmarkPow/1.01.Pow(100)-32 997968 1012 ns/op 817 B/op 13 allocs/op -BenchmarkPow/1.01.Pow(100)-32 1242741 993.4 ns/op 817 B/op 13 allocs/op -BenchmarkPow/1.01.Pow(100)-32 1280188 1022 ns/op 817 B/op 13 allocs/op -BenchmarkPow/1.01.Pow(100)-32 1000000 1003 ns/op 817 B/op 13 allocs/op -BenchmarkPow/1.01.Pow(100)-32 1179835 975.1 ns/op 817 B/op 13 allocs/op -BenchmarkPow/1.01.Pow(100)-32 1243388 1028 ns/op 817 B/op 13 allocs/op -BenchmarkPow/1.01.Pow(100)-32 1000000 1092 ns/op 817 B/op 13 allocs/op -BenchmarkMarshalJSON/1234567890123456789.1234567890123456879-32 11978120 85.49 ns/op 48 B/op 1 allocs/op -BenchmarkMarshalJSON/1234567890123456789.1234567890123456879-32 13872829 80.81 ns/op 48 B/op 1 allocs/op -BenchmarkMarshalJSON/1234567890123456789.1234567890123456879-32 13052998 97.93 ns/op 48 B/op 1 allocs/op -BenchmarkMarshalJSON/1234567890123456789.1234567890123456879-32 10880738 97.68 ns/op 48 B/op 1 allocs/op -BenchmarkMarshalJSON/1234567890123456789.1234567890123456879-32 13641222 88.71 ns/op 48 B/op 1 allocs/op -BenchmarkMarshalJSON/1234567890123456789.1234567890123456879-32 12479406 84.34 ns/op 48 B/op 1 allocs/op -BenchmarkMarshalJSON/1234567890123456789.1234567890123456879-32 11981960 85.51 ns/op 48 B/op 1 allocs/op -BenchmarkMarshalJSON/1234567890123456789.1234567890123456879-32 16969004 90.46 ns/op 48 B/op 1 allocs/op -BenchmarkMarshalJSON/1234567890123456789.1234567890123456879-32 12623766 80.28 ns/op 48 B/op 1 allocs/op -BenchmarkMarshalJSON/1234567890123456789.1234567890123456879-32 12351778 82.37 ns/op 48 B/op 1 allocs/op -BenchmarkMarshalJSON/123-32 93783224 14.66 ns/op 5 B/op 1 allocs/op -BenchmarkMarshalJSON/123-32 100000000 13.94 ns/op 5 B/op 1 allocs/op -BenchmarkMarshalJSON/123-32 83535112 13.24 ns/op 5 B/op 1 allocs/op -BenchmarkMarshalJSON/123-32 92118614 14.51 ns/op 5 B/op 1 allocs/op -BenchmarkMarshalJSON/123-32 94464195 13.30 ns/op 5 B/op 1 allocs/op -BenchmarkMarshalJSON/123-32 100000000 12.76 ns/op 5 B/op 1 allocs/op -BenchmarkMarshalJSON/123-32 87971737 12.94 ns/op 5 B/op 1 allocs/op -BenchmarkMarshalJSON/123-32 68417944 15.05 ns/op 5 B/op 1 allocs/op -BenchmarkMarshalJSON/123-32 100000000 13.25 ns/op 5 B/op 1 allocs/op -BenchmarkMarshalJSON/123-32 91036376 13.73 ns/op 5 B/op 1 allocs/op -BenchmarkMarshalJSON/123456.123456-32 32511769 34.48 ns/op 16 B/op 1 allocs/op -BenchmarkMarshalJSON/123456.123456-32 34164967 35.66 ns/op 16 B/op 1 allocs/op -BenchmarkMarshalJSON/123456.123456-32 33902448 36.17 ns/op 16 B/op 1 allocs/op -BenchmarkMarshalJSON/123456.123456-32 30302593 36.66 ns/op 16 B/op 1 allocs/op -BenchmarkMarshalJSON/123456.123456-32 32705102 36.85 ns/op 16 B/op 1 allocs/op -BenchmarkMarshalJSON/123456.123456-32 38271709 34.93 ns/op 16 B/op 1 allocs/op -BenchmarkMarshalJSON/123456.123456-32 34528770 36.67 ns/op 16 B/op 1 allocs/op -BenchmarkMarshalJSON/123456.123456-32 35128274 36.83 ns/op 16 B/op 1 allocs/op -BenchmarkMarshalJSON/123456.123456-32 31605056 36.54 ns/op 16 B/op 1 allocs/op -BenchmarkMarshalJSON/123456.123456-32 31283499 33.45 ns/op 16 B/op 1 allocs/op -BenchmarkMarshalJSON/1234567890-32 31329519 32.61 ns/op 16 B/op 1 allocs/op -BenchmarkMarshalJSON/1234567890-32 41437858 29.54 ns/op 16 B/op 1 allocs/op -BenchmarkMarshalJSON/1234567890-32 37755616 30.48 ns/op 16 B/op 1 allocs/op -BenchmarkMarshalJSON/1234567890-32 33619670 31.67 ns/op 16 B/op 1 allocs/op -BenchmarkMarshalJSON/1234567890-32 39074094 27.63 ns/op 16 B/op 1 allocs/op -BenchmarkMarshalJSON/1234567890-32 45704614 31.77 ns/op 16 B/op 1 allocs/op -BenchmarkMarshalJSON/1234567890-32 34323915 29.31 ns/op 16 B/op 1 allocs/op -BenchmarkMarshalJSON/1234567890-32 57049472 29.62 ns/op 16 B/op 1 allocs/op -BenchmarkMarshalJSON/1234567890-32 38031752 31.58 ns/op 16 B/op 1 allocs/op -BenchmarkMarshalJSON/1234567890-32 54578218 28.81 ns/op 16 B/op 1 allocs/op -BenchmarkMarshalJSON/0.1234567890123456879-32 23486318 50.47 ns/op 24 B/op 1 allocs/op -BenchmarkMarshalJSON/0.1234567890123456879-32 20649664 50.02 ns/op 24 B/op 1 allocs/op -BenchmarkMarshalJSON/0.1234567890123456879-32 27662214 49.77 ns/op 24 B/op 1 allocs/op -BenchmarkMarshalJSON/0.1234567890123456879-32 27394435 53.58 ns/op 24 B/op 1 allocs/op -BenchmarkMarshalJSON/0.1234567890123456879-32 28025224 46.35 ns/op 24 B/op 1 allocs/op -BenchmarkMarshalJSON/0.1234567890123456879-32 22346198 45.16 ns/op 24 B/op 1 allocs/op -BenchmarkMarshalJSON/0.1234567890123456879-32 21011779 52.15 ns/op 24 B/op 1 allocs/op -BenchmarkMarshalJSON/0.1234567890123456879-32 25677033 54.58 ns/op 24 B/op 1 allocs/op -BenchmarkMarshalJSON/0.1234567890123456879-32 22975388 49.59 ns/op 24 B/op 1 allocs/op -BenchmarkMarshalJSON/0.1234567890123456879-32 31391322 47.28 ns/op 24 B/op 1 allocs/op -BenchmarkMarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 3473155 346.8 ns/op 320 B/op 5 allocs/op -BenchmarkMarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 5445675 328.7 ns/op 320 B/op 5 allocs/op -BenchmarkMarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 3332034 370.1 ns/op 320 B/op 5 allocs/op -BenchmarkMarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 3347077 312.7 ns/op 320 B/op 5 allocs/op -BenchmarkMarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 3699630 333.2 ns/op 320 B/op 5 allocs/op -BenchmarkMarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 3290113 361.7 ns/op 320 B/op 5 allocs/op -BenchmarkMarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 3261042 348.0 ns/op 320 B/op 5 allocs/op -BenchmarkMarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 3521001 360.5 ns/op 320 B/op 5 allocs/op -BenchmarkMarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 3236962 337.1 ns/op 320 B/op 5 allocs/op -BenchmarkMarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 3362496 344.6 ns/op 320 B/op 5 allocs/op -BenchmarkUnmarshalJSON/1234567890123456789.1234567890123456879-32 15482590 72.56 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalJSON/1234567890123456789.1234567890123456879-32 15170229 71.35 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalJSON/1234567890123456789.1234567890123456879-32 16273509 72.00 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalJSON/1234567890123456789.1234567890123456879-32 16554398 71.44 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalJSON/1234567890123456789.1234567890123456879-32 14447541 71.46 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalJSON/1234567890123456789.1234567890123456879-32 16742170 71.91 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalJSON/1234567890123456789.1234567890123456879-32 16799803 71.61 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalJSON/1234567890123456789.1234567890123456879-32 16018096 71.99 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalJSON/1234567890123456789.1234567890123456879-32 16647591 71.68 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalJSON/1234567890123456789.1234567890123456879-32 16886590 71.90 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalJSON/123-32 78608662 15.23 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalJSON/123-32 68920036 15.28 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalJSON/123-32 78989497 15.27 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalJSON/123-32 79594845 15.28 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalJSON/123-32 80893566 15.22 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalJSON/123-32 79006098 15.25 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalJSON/123-32 79623972 15.26 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalJSON/123-32 79484805 15.32 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalJSON/123-32 80107519 15.18 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalJSON/123-32 80720353 15.26 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalJSON/123456.123456-32 46755360 25.57 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalJSON/123456.123456-32 47356059 25.57 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalJSON/123456.123456-32 46790433 25.79 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalJSON/123456.123456-32 47262156 26.03 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalJSON/123456.123456-32 46735120 25.62 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalJSON/123456.123456-32 46942063 25.74 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalJSON/123456.123456-32 43977570 25.88 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalJSON/123456.123456-32 47265932 25.57 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalJSON/123456.123456-32 46883954 25.57 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalJSON/123456.123456-32 46808680 25.56 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalJSON/1234567890-32 50769019 24.01 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalJSON/1234567890-32 50816542 24.01 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalJSON/1234567890-32 51399958 24.00 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalJSON/1234567890-32 50532382 24.01 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalJSON/1234567890-32 51889766 23.55 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalJSON/1234567890-32 51321654 24.23 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalJSON/1234567890-32 49827708 23.77 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalJSON/1234567890-32 51687816 23.74 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalJSON/1234567890-32 52012258 24.00 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalJSON/1234567890-32 51203923 23.94 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalJSON/0.1234567890123456879-32 29359693 40.60 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalJSON/0.1234567890123456879-32 29807504 40.56 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalJSON/0.1234567890123456879-32 29697925 40.70 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalJSON/0.1234567890123456879-32 29058333 40.54 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalJSON/0.1234567890123456879-32 25726897 40.39 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalJSON/0.1234567890123456879-32 29710760 40.63 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalJSON/0.1234567890123456879-32 29364098 40.99 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalJSON/0.1234567890123456879-32 29775633 40.51 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalJSON/0.1234567890123456879-32 29447660 40.40 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalJSON/0.1234567890123456879-32 29211510 40.45 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 2566564 499.6 ns/op 264 B/op 6 allocs/op -BenchmarkUnmarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 2528677 466.7 ns/op 264 B/op 6 allocs/op -BenchmarkUnmarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 2312930 499.3 ns/op 264 B/op 6 allocs/op -BenchmarkUnmarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 2565848 503.7 ns/op 264 B/op 6 allocs/op -BenchmarkUnmarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 2408175 448.4 ns/op 264 B/op 6 allocs/op -BenchmarkUnmarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 2410396 482.4 ns/op 264 B/op 6 allocs/op -BenchmarkUnmarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 2759155 458.0 ns/op 264 B/op 6 allocs/op -BenchmarkUnmarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 2763136 529.1 ns/op 264 B/op 6 allocs/op -BenchmarkUnmarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 2354497 525.6 ns/op 264 B/op 6 allocs/op -BenchmarkUnmarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 2522390 452.7 ns/op 264 B/op 6 allocs/op -BenchmarkMarshalBinary/1234567890123456789.1234567890123456879-32 49340761 27.01 ns/op 24 B/op 1 allocs/op -BenchmarkMarshalBinary/1234567890123456789.1234567890123456879-32 47321506 26.03 ns/op 24 B/op 1 allocs/op -BenchmarkMarshalBinary/1234567890123456789.1234567890123456879-32 41123367 26.75 ns/op 24 B/op 1 allocs/op -BenchmarkMarshalBinary/1234567890123456789.1234567890123456879-32 49654770 25.32 ns/op 24 B/op 1 allocs/op -BenchmarkMarshalBinary/1234567890123456789.1234567890123456879-32 44244194 25.08 ns/op 24 B/op 1 allocs/op -BenchmarkMarshalBinary/1234567890123456789.1234567890123456879-32 40385659 26.24 ns/op 24 B/op 1 allocs/op -BenchmarkMarshalBinary/1234567890123456789.1234567890123456879-32 41225865 26.29 ns/op 24 B/op 1 allocs/op -BenchmarkMarshalBinary/1234567890123456789.1234567890123456879-32 45625612 26.67 ns/op 24 B/op 1 allocs/op -BenchmarkMarshalBinary/1234567890123456789.1234567890123456879-32 38740372 27.30 ns/op 24 B/op 1 allocs/op -BenchmarkMarshalBinary/1234567890123456789.1234567890123456879-32 42215036 26.95 ns/op 24 B/op 1 allocs/op -BenchmarkMarshalBinary/123-32 57186244 20.87 ns/op 16 B/op 1 allocs/op -BenchmarkMarshalBinary/123-32 58856906 20.57 ns/op 16 B/op 1 allocs/op -BenchmarkMarshalBinary/123-32 49222180 20.83 ns/op 16 B/op 1 allocs/op -BenchmarkMarshalBinary/123-32 49364544 20.35 ns/op 16 B/op 1 allocs/op -BenchmarkMarshalBinary/123-32 62243167 19.60 ns/op 16 B/op 1 allocs/op -BenchmarkMarshalBinary/123-32 58234042 20.12 ns/op 16 B/op 1 allocs/op -BenchmarkMarshalBinary/123-32 74021145 20.04 ns/op 16 B/op 1 allocs/op -BenchmarkMarshalBinary/123-32 75779007 20.91 ns/op 16 B/op 1 allocs/op -BenchmarkMarshalBinary/123-32 61801112 19.51 ns/op 16 B/op 1 allocs/op -BenchmarkMarshalBinary/123-32 59744730 21.42 ns/op 16 B/op 1 allocs/op -BenchmarkMarshalBinary/123456.123456-32 52212366 20.76 ns/op 16 B/op 1 allocs/op -BenchmarkMarshalBinary/123456.123456-32 52561614 20.87 ns/op 16 B/op 1 allocs/op -BenchmarkMarshalBinary/123456.123456-32 60249193 20.03 ns/op 16 B/op 1 allocs/op -BenchmarkMarshalBinary/123456.123456-32 65768427 19.69 ns/op 16 B/op 1 allocs/op -BenchmarkMarshalBinary/123456.123456-32 52251946 19.98 ns/op 16 B/op 1 allocs/op -BenchmarkMarshalBinary/123456.123456-32 55020817 20.24 ns/op 16 B/op 1 allocs/op -BenchmarkMarshalBinary/123456.123456-32 58840078 19.28 ns/op 16 B/op 1 allocs/op -BenchmarkMarshalBinary/123456.123456-32 49666239 21.35 ns/op 16 B/op 1 allocs/op -BenchmarkMarshalBinary/123456.123456-32 63892830 19.37 ns/op 16 B/op 1 allocs/op -BenchmarkMarshalBinary/123456.123456-32 58417866 19.45 ns/op 16 B/op 1 allocs/op -BenchmarkMarshalBinary/1234567890-32 63148252 19.15 ns/op 16 B/op 1 allocs/op -BenchmarkMarshalBinary/1234567890-32 61450165 20.41 ns/op 16 B/op 1 allocs/op -BenchmarkMarshalBinary/1234567890-32 62839615 20.11 ns/op 16 B/op 1 allocs/op -BenchmarkMarshalBinary/1234567890-32 59885031 21.13 ns/op 16 B/op 1 allocs/op -BenchmarkMarshalBinary/1234567890-32 62597151 19.95 ns/op 16 B/op 1 allocs/op -BenchmarkMarshalBinary/1234567890-32 95223742 19.61 ns/op 16 B/op 1 allocs/op -BenchmarkMarshalBinary/1234567890-32 52454757 21.13 ns/op 16 B/op 1 allocs/op -BenchmarkMarshalBinary/1234567890-32 51004159 21.12 ns/op 16 B/op 1 allocs/op -BenchmarkMarshalBinary/1234567890-32 62658315 19.73 ns/op 16 B/op 1 allocs/op -BenchmarkMarshalBinary/1234567890-32 51975204 19.83 ns/op 16 B/op 1 allocs/op -BenchmarkMarshalBinary/0.1234567890123456879-32 58172151 20.59 ns/op 16 B/op 1 allocs/op -BenchmarkMarshalBinary/0.1234567890123456879-32 62443491 21.09 ns/op 16 B/op 1 allocs/op -BenchmarkMarshalBinary/0.1234567890123456879-32 60901938 21.13 ns/op 16 B/op 1 allocs/op -BenchmarkMarshalBinary/0.1234567890123456879-32 55817737 20.66 ns/op 16 B/op 1 allocs/op -BenchmarkMarshalBinary/0.1234567890123456879-32 68218779 19.45 ns/op 16 B/op 1 allocs/op -BenchmarkMarshalBinary/0.1234567890123456879-32 62435174 19.76 ns/op 16 B/op 1 allocs/op -BenchmarkMarshalBinary/0.1234567890123456879-32 51691249 20.22 ns/op 16 B/op 1 allocs/op -BenchmarkMarshalBinary/0.1234567890123456879-32 57353557 18.65 ns/op 16 B/op 1 allocs/op -BenchmarkMarshalBinary/0.1234567890123456879-32 49172822 21.57 ns/op 16 B/op 1 allocs/op -BenchmarkMarshalBinary/0.1234567890123456879-32 56408032 19.63 ns/op 16 B/op 1 allocs/op -BenchmarkMarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 32375126 44.86 ns/op 32 B/op 1 allocs/op -BenchmarkMarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 24752052 47.16 ns/op 32 B/op 1 allocs/op -BenchmarkMarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 22329710 47.29 ns/op 32 B/op 1 allocs/op -BenchmarkMarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 28788297 44.48 ns/op 32 B/op 1 allocs/op -BenchmarkMarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 43044262 43.62 ns/op 32 B/op 1 allocs/op -BenchmarkMarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 31022050 44.57 ns/op 32 B/op 1 allocs/op -BenchmarkMarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 27456003 47.27 ns/op 32 B/op 1 allocs/op -BenchmarkMarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 27090187 43.88 ns/op 32 B/op 1 allocs/op -BenchmarkMarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 41695646 43.51 ns/op 32 B/op 1 allocs/op -BenchmarkMarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 24562848 41.42 ns/op 32 B/op 1 allocs/op -BenchmarkUnmarshalBinary/1234567890123456789.1234567890123456879-32 572971191 2.039 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalBinary/1234567890123456789.1234567890123456879-32 554680452 2.067 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalBinary/1234567890123456789.1234567890123456879-32 578259211 2.033 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalBinary/1234567890123456789.1234567890123456879-32 592325109 2.029 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalBinary/1234567890123456789.1234567890123456879-32 577650543 2.034 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalBinary/1234567890123456789.1234567890123456879-32 581544340 2.088 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalBinary/1234567890123456789.1234567890123456879-32 588525118 2.088 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalBinary/1234567890123456789.1234567890123456879-32 571276897 2.029 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalBinary/1234567890123456789.1234567890123456879-32 580242459 2.044 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalBinary/1234567890123456789.1234567890123456879-32 578451060 2.100 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalBinary/123-32 639388096 1.880 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalBinary/123-32 646909245 1.881 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalBinary/123-32 651093048 1.831 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalBinary/123-32 621805728 1.833 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalBinary/123-32 606542770 1.833 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalBinary/123-32 654292344 1.829 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalBinary/123-32 655033572 1.830 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalBinary/123-32 581306034 1.829 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalBinary/123-32 644794170 1.829 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalBinary/123-32 607368195 1.829 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalBinary/123456.123456-32 646714659 1.831 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalBinary/123456.123456-32 655550883 1.844 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalBinary/123456.123456-32 646133161 1.829 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalBinary/123456.123456-32 655556935 1.881 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalBinary/123456.123456-32 623983806 1.876 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalBinary/123456.123456-32 653183749 1.882 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalBinary/123456.123456-32 654813826 1.875 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalBinary/123456.123456-32 647071068 1.830 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalBinary/123456.123456-32 646751342 1.830 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalBinary/123456.123456-32 649488999 1.842 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalBinary/1234567890-32 646810653 1.832 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalBinary/1234567890-32 641198794 1.900 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalBinary/1234567890-32 642681871 1.830 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalBinary/1234567890-32 646947033 1.880 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalBinary/1234567890-32 655966833 1.844 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalBinary/1234567890-32 647635477 1.852 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalBinary/1234567890-32 654856704 1.832 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalBinary/1234567890-32 654149828 1.877 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalBinary/1234567890-32 653708727 1.890 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalBinary/1234567890-32 626135274 1.886 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalBinary/0.1234567890123456879-32 637874068 1.839 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalBinary/0.1234567890123456879-32 652480233 1.839 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalBinary/0.1234567890123456879-32 593728724 1.885 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalBinary/0.1234567890123456879-32 655314224 1.886 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalBinary/0.1234567890123456879-32 655023298 1.882 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalBinary/0.1234567890123456879-32 656502518 1.828 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalBinary/0.1234567890123456879-32 650932771 1.830 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalBinary/0.1234567890123456879-32 656776020 1.875 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalBinary/0.1234567890123456879-32 655982856 1.855 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalBinary/0.1234567890123456879-32 653081892 1.873 ns/op 0 B/op 0 allocs/op -BenchmarkUnmarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 21059928 72.94 ns/op 96 B/op 2 allocs/op -BenchmarkUnmarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 15477602 73.45 ns/op 96 B/op 2 allocs/op -BenchmarkUnmarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 16133295 70.96 ns/op 96 B/op 2 allocs/op -BenchmarkUnmarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 15453494 73.85 ns/op 96 B/op 2 allocs/op -BenchmarkUnmarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 15194335 74.16 ns/op 96 B/op 2 allocs/op -BenchmarkUnmarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 15372651 72.02 ns/op 96 B/op 2 allocs/op -BenchmarkUnmarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 16972082 73.74 ns/op 96 B/op 2 allocs/op -BenchmarkUnmarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 15702733 74.13 ns/op 96 B/op 2 allocs/op -BenchmarkUnmarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 15150925 74.77 ns/op 96 B/op 2 allocs/op -BenchmarkUnmarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 15294960 74.71 ns/op 96 B/op 2 allocs/op +BenchmarkDiv/548751.15465466546.Div(1542.456487)-32 100000000 10.30 ns/op 0 B/op 0 allocs/op +BenchmarkDiv/548751.15465466546.Div(1542.456487)-32 100000000 10.33 ns/op 0 B/op 0 allocs/op +BenchmarkDiv/548751.15465466546.Div(1542.456487)-32 100000000 10.34 ns/op 0 B/op 0 allocs/op +BenchmarkDiv/548751.15465466546.Div(1542.456487)-32 100000000 10.65 ns/op 0 B/op 0 allocs/op +BenchmarkDiv/548751.15465466546.Div(1542.456487)-32 112255964 10.28 ns/op 0 B/op 0 allocs/op +BenchmarkDiv/548751.15465466546.Div(1542.456487)-32 100000000 10.30 ns/op 0 B/op 0 allocs/op +BenchmarkDivFallback/12345679012345679890123456789.1234567890123456789.Div(999999)-32 4187094 302.1 ns/op 264 B/op 7 allocs/op +BenchmarkDivFallback/12345679012345679890123456789.1234567890123456789.Div(999999)-32 4252190 289.1 ns/op 264 B/op 7 allocs/op +BenchmarkDivFallback/12345679012345679890123456789.1234567890123456789.Div(999999)-32 5040426 280.9 ns/op 264 B/op 7 allocs/op +BenchmarkDivFallback/12345679012345679890123456789.1234567890123456789.Div(999999)-32 3800797 306.8 ns/op 264 B/op 7 allocs/op +BenchmarkDivFallback/12345679012345679890123456789.1234567890123456789.Div(999999)-32 3959794 310.3 ns/op 264 B/op 7 allocs/op +BenchmarkDivFallback/12345679012345679890123456789.1234567890123456789.Div(999999)-32 3827551 303.6 ns/op 264 B/op 7 allocs/op +BenchmarkDivFallback/12345679012345679890123456789.1234567890123456789.Div(999999)-32 3866250 303.6 ns/op 264 B/op 7 allocs/op +BenchmarkDivFallback/12345679012345679890123456789.1234567890123456789.Div(999999)-32 3820567 289.9 ns/op 264 B/op 7 allocs/op +BenchmarkDivFallback/12345679012345679890123456789.1234567890123456789.Div(999999)-32 4264028 305.0 ns/op 264 B/op 7 allocs/op +BenchmarkDivFallback/12345679012345679890123456789.1234567890123456789.Div(999999)-32 3822381 278.8 ns/op 264 B/op 7 allocs/op +BenchmarkDivFallback/1234.Div(12345679012345679890123456789.1234567890123456789)-32 5352712 276.3 ns/op 320 B/op 7 allocs/op +BenchmarkDivFallback/1234.Div(12345679012345679890123456789.1234567890123456789)-32 4015070 291.7 ns/op 320 B/op 7 allocs/op +BenchmarkDivFallback/1234.Div(12345679012345679890123456789.1234567890123456789)-32 4681326 305.9 ns/op 320 B/op 7 allocs/op +BenchmarkDivFallback/1234.Div(12345679012345679890123456789.1234567890123456789)-32 3925240 293.5 ns/op 320 B/op 7 allocs/op +BenchmarkDivFallback/1234.Div(12345679012345679890123456789.1234567890123456789)-32 3943147 289.0 ns/op 320 B/op 7 allocs/op +BenchmarkDivFallback/1234.Div(12345679012345679890123456789.1234567890123456789)-32 3991890 292.3 ns/op 320 B/op 7 allocs/op +BenchmarkDivFallback/1234.Div(12345679012345679890123456789.1234567890123456789)-32 4309236 294.4 ns/op 320 B/op 7 allocs/op +BenchmarkDivFallback/1234.Div(12345679012345679890123456789.1234567890123456789)-32 3938474 289.1 ns/op 320 B/op 7 allocs/op +BenchmarkDivFallback/1234.Div(12345679012345679890123456789.1234567890123456789)-32 3803458 303.4 ns/op 320 B/op 7 allocs/op +BenchmarkDivFallback/1234.Div(12345679012345679890123456789.1234567890123456789)-32 3901846 306.7 ns/op 320 B/op 7 allocs/op +BenchmarkPow/1.01.Pow(10)-32 30365348 41.14 ns/op 0 B/op 0 allocs/op +BenchmarkPow/1.01.Pow(10)-32 29136284 39.54 ns/op 0 B/op 0 allocs/op +BenchmarkPow/1.01.Pow(10)-32 30469603 39.61 ns/op 0 B/op 0 allocs/op +BenchmarkPow/1.01.Pow(10)-32 30272029 39.70 ns/op 0 B/op 0 allocs/op +BenchmarkPow/1.01.Pow(10)-32 30152894 41.52 ns/op 0 B/op 0 allocs/op +BenchmarkPow/1.01.Pow(10)-32 30308767 40.52 ns/op 0 B/op 0 allocs/op +BenchmarkPow/1.01.Pow(10)-32 25704982 39.78 ns/op 0 B/op 0 allocs/op +BenchmarkPow/1.01.Pow(10)-32 30256135 41.68 ns/op 0 B/op 0 allocs/op +BenchmarkPow/1.01.Pow(10)-32 28895874 41.83 ns/op 0 B/op 0 allocs/op +BenchmarkPow/1.01.Pow(10)-32 29782114 41.80 ns/op 0 B/op 0 allocs/op +BenchmarkPow/1.01.Pow(100)-32 1000000 1018 ns/op 817 B/op 13 allocs/op +BenchmarkPow/1.01.Pow(100)-32 1056234 1061 ns/op 817 B/op 13 allocs/op +BenchmarkPow/1.01.Pow(100)-32 1103626 1019 ns/op 817 B/op 13 allocs/op +BenchmarkPow/1.01.Pow(100)-32 976812 1099 ns/op 817 B/op 13 allocs/op +BenchmarkPow/1.01.Pow(100)-32 1125450 1064 ns/op 817 B/op 13 allocs/op +BenchmarkPow/1.01.Pow(100)-32 1000000 1044 ns/op 817 B/op 13 allocs/op +BenchmarkPow/1.01.Pow(100)-32 1000000 1136 ns/op 817 B/op 13 allocs/op +BenchmarkPow/1.01.Pow(100)-32 1000000 1124 ns/op 817 B/op 13 allocs/op +BenchmarkPow/1.01.Pow(100)-32 1142454 1035 ns/op 817 B/op 13 allocs/op +BenchmarkPow/1.01.Pow(100)-32 994129 1137 ns/op 817 B/op 13 allocs/op +BenchmarkMarshalJSON/1234567890123456789.1234567890123456879-32 15796016 96.75 ns/op 48 B/op 1 allocs/op +BenchmarkMarshalJSON/1234567890123456789.1234567890123456879-32 13368140 97.04 ns/op 48 B/op 1 allocs/op +BenchmarkMarshalJSON/1234567890123456789.1234567890123456879-32 13614456 89.54 ns/op 48 B/op 1 allocs/op +BenchmarkMarshalJSON/1234567890123456789.1234567890123456879-32 11627569 94.16 ns/op 48 B/op 1 allocs/op +BenchmarkMarshalJSON/1234567890123456789.1234567890123456879-32 12865142 86.71 ns/op 48 B/op 1 allocs/op +BenchmarkMarshalJSON/1234567890123456789.1234567890123456879-32 13108584 96.37 ns/op 48 B/op 1 allocs/op +BenchmarkMarshalJSON/1234567890123456789.1234567890123456879-32 13207072 100.1 ns/op 48 B/op 1 allocs/op +BenchmarkMarshalJSON/1234567890123456789.1234567890123456879-32 11146850 98.02 ns/op 48 B/op 1 allocs/op +BenchmarkMarshalJSON/1234567890123456789.1234567890123456879-32 11034408 109.5 ns/op 48 B/op 1 allocs/op +BenchmarkMarshalJSON/1234567890123456789.1234567890123456879-32 12389556 96.03 ns/op 48 B/op 1 allocs/op +BenchmarkMarshalJSON/123-32 85381485 14.45 ns/op 5 B/op 1 allocs/op +BenchmarkMarshalJSON/123-32 96265878 15.37 ns/op 5 B/op 1 allocs/op +BenchmarkMarshalJSON/123-32 76978542 13.37 ns/op 5 B/op 1 allocs/op +BenchmarkMarshalJSON/123-32 97837760 14.56 ns/op 5 B/op 1 allocs/op +BenchmarkMarshalJSON/123-32 77849970 14.51 ns/op 5 B/op 1 allocs/op +BenchmarkMarshalJSON/123-32 82778641 14.15 ns/op 5 B/op 1 allocs/op +BenchmarkMarshalJSON/123-32 91994073 14.49 ns/op 5 B/op 1 allocs/op +BenchmarkMarshalJSON/123-32 87145582 14.08 ns/op 5 B/op 1 allocs/op +BenchmarkMarshalJSON/123-32 66409156 15.36 ns/op 5 B/op 1 allocs/op +BenchmarkMarshalJSON/123-32 81536454 15.98 ns/op 5 B/op 1 allocs/op +BenchmarkMarshalJSON/123456.123456-32 37822461 38.34 ns/op 16 B/op 1 allocs/op +BenchmarkMarshalJSON/123456.123456-32 35010925 33.47 ns/op 16 B/op 1 allocs/op +BenchmarkMarshalJSON/123456.123456-32 35110009 35.14 ns/op 16 B/op 1 allocs/op +BenchmarkMarshalJSON/123456.123456-32 30028090 34.48 ns/op 16 B/op 1 allocs/op +BenchmarkMarshalJSON/123456.123456-32 28816768 36.44 ns/op 16 B/op 1 allocs/op +BenchmarkMarshalJSON/123456.123456-32 35324623 38.40 ns/op 16 B/op 1 allocs/op +BenchmarkMarshalJSON/123456.123456-32 37915729 39.84 ns/op 16 B/op 1 allocs/op +BenchmarkMarshalJSON/123456.123456-32 28074570 35.77 ns/op 16 B/op 1 allocs/op +BenchmarkMarshalJSON/123456.123456-32 35011099 35.52 ns/op 16 B/op 1 allocs/op +BenchmarkMarshalJSON/123456.123456-32 27641582 36.99 ns/op 16 B/op 1 allocs/op +BenchmarkMarshalJSON/1234567890-32 38550793 32.12 ns/op 16 B/op 1 allocs/op +BenchmarkMarshalJSON/1234567890-32 57627860 30.65 ns/op 16 B/op 1 allocs/op +BenchmarkMarshalJSON/1234567890-32 40230358 30.38 ns/op 16 B/op 1 allocs/op +BenchmarkMarshalJSON/1234567890-32 40816730 33.50 ns/op 16 B/op 1 allocs/op +BenchmarkMarshalJSON/1234567890-32 33474534 35.97 ns/op 16 B/op 1 allocs/op +BenchmarkMarshalJSON/1234567890-32 48330999 28.96 ns/op 16 B/op 1 allocs/op +BenchmarkMarshalJSON/1234567890-32 29437220 35.06 ns/op 16 B/op 1 allocs/op +BenchmarkMarshalJSON/1234567890-32 31600791 32.06 ns/op 16 B/op 1 allocs/op +BenchmarkMarshalJSON/1234567890-32 36557200 29.97 ns/op 16 B/op 1 allocs/op +BenchmarkMarshalJSON/1234567890-32 39256744 30.25 ns/op 16 B/op 1 allocs/op +BenchmarkMarshalJSON/0.1234567890123456879-32 22017422 54.95 ns/op 24 B/op 1 allocs/op +BenchmarkMarshalJSON/0.1234567890123456879-32 26650893 49.90 ns/op 24 B/op 1 allocs/op +BenchmarkMarshalJSON/0.1234567890123456879-32 23043273 52.11 ns/op 24 B/op 1 allocs/op +BenchmarkMarshalJSON/0.1234567890123456879-32 24873150 54.80 ns/op 24 B/op 1 allocs/op +BenchmarkMarshalJSON/0.1234567890123456879-32 20829693 50.25 ns/op 24 B/op 1 allocs/op +BenchmarkMarshalJSON/0.1234567890123456879-32 22462014 55.25 ns/op 24 B/op 1 allocs/op +BenchmarkMarshalJSON/0.1234567890123456879-32 21243877 54.43 ns/op 24 B/op 1 allocs/op +BenchmarkMarshalJSON/0.1234567890123456879-32 19677284 55.05 ns/op 24 B/op 1 allocs/op +BenchmarkMarshalJSON/0.1234567890123456879-32 24430339 55.17 ns/op 24 B/op 1 allocs/op +BenchmarkMarshalJSON/0.1234567890123456879-32 22453323 50.08 ns/op 24 B/op 1 allocs/op +BenchmarkMarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 3014886 376.9 ns/op 320 B/op 5 allocs/op +BenchmarkMarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 3644383 355.0 ns/op 320 B/op 5 allocs/op +BenchmarkMarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 3157597 353.7 ns/op 320 B/op 5 allocs/op +BenchmarkMarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 3228546 375.6 ns/op 320 B/op 5 allocs/op +BenchmarkMarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 3573410 333.6 ns/op 320 B/op 5 allocs/op +BenchmarkMarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 2895278 376.1 ns/op 320 B/op 5 allocs/op +BenchmarkMarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 4010266 352.2 ns/op 320 B/op 5 allocs/op +BenchmarkMarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 3536298 361.7 ns/op 320 B/op 5 allocs/op +BenchmarkMarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 3209154 369.3 ns/op 320 B/op 5 allocs/op +BenchmarkMarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 3445560 291.6 ns/op 320 B/op 5 allocs/op +BenchmarkUnmarshalJSON/1234567890123456789.1234567890123456879-32 15943234 73.77 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalJSON/1234567890123456789.1234567890123456879-32 16464036 73.18 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalJSON/1234567890123456789.1234567890123456879-32 15429177 73.80 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalJSON/1234567890123456789.1234567890123456879-32 16540219 73.67 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalJSON/1234567890123456789.1234567890123456879-32 16579908 73.72 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalJSON/1234567890123456789.1234567890123456879-32 16336714 73.90 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalJSON/1234567890123456789.1234567890123456879-32 16699605 73.97 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalJSON/1234567890123456789.1234567890123456879-32 16079866 72.80 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalJSON/1234567890123456789.1234567890123456879-32 15400612 72.61 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalJSON/1234567890123456789.1234567890123456879-32 16513846 74.78 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalJSON/123-32 77291110 15.37 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalJSON/123-32 78346833 15.52 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalJSON/123-32 79230397 15.62 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalJSON/123-32 76411233 15.67 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalJSON/123-32 78634320 15.37 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalJSON/123-32 78707392 15.52 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalJSON/123-32 78012684 15.33 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalJSON/123-32 77347321 15.34 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalJSON/123-32 78645838 15.44 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalJSON/123-32 78134104 15.35 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalJSON/123456.123456-32 46983879 26.55 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalJSON/123456.123456-32 46938079 26.37 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalJSON/123456.123456-32 45286251 25.73 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalJSON/123456.123456-32 46604178 26.15 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalJSON/123456.123456-32 47036145 26.75 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalJSON/123456.123456-32 46725774 26.66 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalJSON/123456.123456-32 42924969 25.63 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalJSON/123456.123456-32 46549818 26.47 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalJSON/123456.123456-32 45414912 26.54 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalJSON/123456.123456-32 44880405 25.83 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalJSON/1234567890-32 50544013 23.74 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalJSON/1234567890-32 50862832 24.48 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalJSON/1234567890-32 51709177 23.66 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalJSON/1234567890-32 51602857 23.63 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalJSON/1234567890-32 51540818 24.35 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalJSON/1234567890-32 50391016 23.62 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalJSON/1234567890-32 52027924 23.55 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalJSON/1234567890-32 52106481 24.22 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalJSON/1234567890-32 50361214 24.17 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalJSON/1234567890-32 51587792 23.41 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalJSON/0.1234567890123456879-32 30509956 40.48 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalJSON/0.1234567890123456879-32 29991302 40.41 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalJSON/0.1234567890123456879-32 25874643 41.51 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalJSON/0.1234567890123456879-32 29475510 41.26 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalJSON/0.1234567890123456879-32 29761837 40.59 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalJSON/0.1234567890123456879-32 30076282 41.02 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalJSON/0.1234567890123456879-32 29840610 41.43 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalJSON/0.1234567890123456879-32 29855788 40.92 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalJSON/0.1234567890123456879-32 30179384 41.35 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalJSON/0.1234567890123456879-32 29594928 40.58 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 2626387 459.6 ns/op 264 B/op 6 allocs/op +BenchmarkUnmarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 2352326 464.6 ns/op 264 B/op 6 allocs/op +BenchmarkUnmarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 2725612 505.6 ns/op 264 B/op 6 allocs/op +BenchmarkUnmarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 2451012 509.7 ns/op 264 B/op 6 allocs/op +BenchmarkUnmarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 2381635 493.5 ns/op 264 B/op 6 allocs/op +BenchmarkUnmarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 2443569 477.3 ns/op 264 B/op 6 allocs/op +BenchmarkUnmarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 2448685 520.1 ns/op 264 B/op 6 allocs/op +BenchmarkUnmarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 2375947 503.8 ns/op 264 B/op 6 allocs/op +BenchmarkUnmarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 2431579 421.2 ns/op 264 B/op 6 allocs/op +BenchmarkUnmarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 2267604 517.4 ns/op 264 B/op 6 allocs/op +BenchmarkMarshalBinary/1234567890123456789.1234567890123456879-32 50875198 25.97 ns/op 24 B/op 1 allocs/op +BenchmarkMarshalBinary/1234567890123456789.1234567890123456879-32 36413690 28.34 ns/op 24 B/op 1 allocs/op +BenchmarkMarshalBinary/1234567890123456789.1234567890123456879-32 42575146 27.15 ns/op 24 B/op 1 allocs/op +BenchmarkMarshalBinary/1234567890123456789.1234567890123456879-32 43773075 29.14 ns/op 24 B/op 1 allocs/op +BenchmarkMarshalBinary/1234567890123456789.1234567890123456879-32 53026681 28.61 ns/op 24 B/op 1 allocs/op +BenchmarkMarshalBinary/1234567890123456789.1234567890123456879-32 39747363 28.00 ns/op 24 B/op 1 allocs/op +BenchmarkMarshalBinary/1234567890123456789.1234567890123456879-32 84016179 25.84 ns/op 24 B/op 1 allocs/op +BenchmarkMarshalBinary/1234567890123456789.1234567890123456879-32 40890165 27.08 ns/op 24 B/op 1 allocs/op +BenchmarkMarshalBinary/1234567890123456789.1234567890123456879-32 46469392 26.71 ns/op 24 B/op 1 allocs/op +BenchmarkMarshalBinary/1234567890123456789.1234567890123456879-32 40401445 27.49 ns/op 24 B/op 1 allocs/op +BenchmarkMarshalBinary/123-32 76829492 20.83 ns/op 16 B/op 1 allocs/op +BenchmarkMarshalBinary/123-32 54511818 19.55 ns/op 16 B/op 1 allocs/op +BenchmarkMarshalBinary/123-32 85104505 19.77 ns/op 16 B/op 1 allocs/op +BenchmarkMarshalBinary/123-32 48572166 20.96 ns/op 16 B/op 1 allocs/op +BenchmarkMarshalBinary/123-32 55939870 21.37 ns/op 16 B/op 1 allocs/op +BenchmarkMarshalBinary/123-32 56078950 21.02 ns/op 16 B/op 1 allocs/op +BenchmarkMarshalBinary/123-32 61053190 19.62 ns/op 16 B/op 1 allocs/op +BenchmarkMarshalBinary/123-32 58758997 21.78 ns/op 16 B/op 1 allocs/op +BenchmarkMarshalBinary/123-32 74675097 20.58 ns/op 16 B/op 1 allocs/op +BenchmarkMarshalBinary/123-32 62927776 22.06 ns/op 16 B/op 1 allocs/op +BenchmarkMarshalBinary/123456.123456-32 59539680 20.42 ns/op 16 B/op 1 allocs/op +BenchmarkMarshalBinary/123456.123456-32 47695022 22.17 ns/op 16 B/op 1 allocs/op +BenchmarkMarshalBinary/123456.123456-32 55431406 21.12 ns/op 16 B/op 1 allocs/op +BenchmarkMarshalBinary/123456.123456-32 62414007 22.41 ns/op 16 B/op 1 allocs/op +BenchmarkMarshalBinary/123456.123456-32 55847294 22.17 ns/op 16 B/op 1 allocs/op +BenchmarkMarshalBinary/123456.123456-32 61225345 17.80 ns/op 16 B/op 1 allocs/op +BenchmarkMarshalBinary/123456.123456-32 57424556 20.41 ns/op 16 B/op 1 allocs/op +BenchmarkMarshalBinary/123456.123456-32 58563766 20.09 ns/op 16 B/op 1 allocs/op +BenchmarkMarshalBinary/123456.123456-32 62648905 22.11 ns/op 16 B/op 1 allocs/op +BenchmarkMarshalBinary/123456.123456-32 47832757 21.37 ns/op 16 B/op 1 allocs/op +BenchmarkMarshalBinary/1234567890-32 61026157 19.37 ns/op 16 B/op 1 allocs/op +BenchmarkMarshalBinary/1234567890-32 52143372 20.39 ns/op 16 B/op 1 allocs/op +BenchmarkMarshalBinary/1234567890-32 60592380 21.19 ns/op 16 B/op 1 allocs/op +BenchmarkMarshalBinary/1234567890-32 63079518 20.53 ns/op 16 B/op 1 allocs/op +BenchmarkMarshalBinary/1234567890-32 54089650 22.53 ns/op 16 B/op 1 allocs/op +BenchmarkMarshalBinary/1234567890-32 59090547 20.24 ns/op 16 B/op 1 allocs/op +BenchmarkMarshalBinary/1234567890-32 48357550 21.81 ns/op 16 B/op 1 allocs/op +BenchmarkMarshalBinary/1234567890-32 64792699 20.86 ns/op 16 B/op 1 allocs/op +BenchmarkMarshalBinary/1234567890-32 49115188 20.67 ns/op 16 B/op 1 allocs/op +BenchmarkMarshalBinary/1234567890-32 49702107 23.18 ns/op 16 B/op 1 allocs/op +BenchmarkMarshalBinary/0.1234567890123456879-32 54470340 20.91 ns/op 16 B/op 1 allocs/op +BenchmarkMarshalBinary/0.1234567890123456879-32 53711233 21.65 ns/op 16 B/op 1 allocs/op +BenchmarkMarshalBinary/0.1234567890123456879-32 53135943 20.35 ns/op 16 B/op 1 allocs/op +BenchmarkMarshalBinary/0.1234567890123456879-32 57425638 21.03 ns/op 16 B/op 1 allocs/op +BenchmarkMarshalBinary/0.1234567890123456879-32 56726028 19.94 ns/op 16 B/op 1 allocs/op +BenchmarkMarshalBinary/0.1234567890123456879-32 94043650 19.67 ns/op 16 B/op 1 allocs/op +BenchmarkMarshalBinary/0.1234567890123456879-32 100000000 19.76 ns/op 16 B/op 1 allocs/op +BenchmarkMarshalBinary/0.1234567890123456879-32 54417049 20.66 ns/op 16 B/op 1 allocs/op +BenchmarkMarshalBinary/0.1234567890123456879-32 61945080 20.75 ns/op 16 B/op 1 allocs/op +BenchmarkMarshalBinary/0.1234567890123456879-32 48537322 20.80 ns/op 16 B/op 1 allocs/op +BenchmarkMarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 23432856 48.07 ns/op 32 B/op 1 allocs/op +BenchmarkMarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 26127478 49.15 ns/op 32 B/op 1 allocs/op +BenchmarkMarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 21364832 48.36 ns/op 32 B/op 1 allocs/op +BenchmarkMarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 32110473 48.06 ns/op 32 B/op 1 allocs/op +BenchmarkMarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 29698626 44.98 ns/op 32 B/op 1 allocs/op +BenchmarkMarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 34854736 44.11 ns/op 32 B/op 1 allocs/op +BenchmarkMarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 26497562 43.92 ns/op 32 B/op 1 allocs/op +BenchmarkMarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 26833431 44.83 ns/op 32 B/op 1 allocs/op +BenchmarkMarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 26250255 45.29 ns/op 32 B/op 1 allocs/op +BenchmarkMarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 21138375 48.85 ns/op 32 B/op 1 allocs/op +BenchmarkUnmarshalBinary/1234567890123456789.1234567890123456879-32 554818034 2.034 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalBinary/1234567890123456789.1234567890123456879-32 584765350 2.140 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalBinary/1234567890123456789.1234567890123456879-32 569482014 2.135 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalBinary/1234567890123456789.1234567890123456879-32 578468362 2.129 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalBinary/1234567890123456789.1234567890123456879-32 589725544 2.141 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalBinary/1234567890123456789.1234567890123456879-32 561728091 2.053 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalBinary/1234567890123456789.1234567890123456879-32 569245598 2.073 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalBinary/1234567890123456789.1234567890123456879-32 578528833 2.139 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalBinary/1234567890123456789.1234567890123456879-32 582953880 2.069 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalBinary/1234567890123456789.1234567890123456879-32 559070518 2.064 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalBinary/123-32 657709755 1.910 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalBinary/123-32 629447772 1.884 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalBinary/123-32 631460182 1.896 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalBinary/123-32 649469078 1.891 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalBinary/123-32 630029389 1.806 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalBinary/123-32 636724248 1.878 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalBinary/123-32 667784749 1.799 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalBinary/123-32 662406998 1.812 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalBinary/123-32 641649784 1.798 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalBinary/123-32 661013170 1.885 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalBinary/123456.123456-32 667132261 1.818 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalBinary/123456.123456-32 613261528 1.885 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalBinary/123456.123456-32 631703106 1.894 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalBinary/123456.123456-32 672437822 1.895 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalBinary/123456.123456-32 671798114 1.804 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalBinary/123456.123456-32 661705704 1.809 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalBinary/123456.123456-32 636577588 1.812 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalBinary/123456.123456-32 658412481 1.807 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalBinary/123456.123456-32 658005212 1.811 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalBinary/123456.123456-32 658832835 1.891 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalBinary/1234567890-32 663165619 1.839 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalBinary/1234567890-32 631821060 1.928 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalBinary/1234567890-32 624274446 1.908 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalBinary/1234567890-32 663509408 1.961 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalBinary/1234567890-32 592187676 2.006 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalBinary/1234567890-32 653525221 1.938 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalBinary/1234567890-32 588411369 1.915 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalBinary/1234567890-32 621275716 1.932 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalBinary/1234567890-32 602744245 1.919 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalBinary/1234567890-32 624055034 1.834 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalBinary/0.1234567890123456879-32 637610913 1.822 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalBinary/0.1234567890123456879-32 629218262 1.941 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalBinary/0.1234567890123456879-32 625711968 1.911 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalBinary/0.1234567890123456879-32 604366267 1.829 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalBinary/0.1234567890123456879-32 624634610 1.897 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalBinary/0.1234567890123456879-32 672060681 1.895 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalBinary/0.1234567890123456879-32 666600531 1.888 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalBinary/0.1234567890123456879-32 654403611 1.800 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalBinary/0.1234567890123456879-32 645768222 1.898 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalBinary/0.1234567890123456879-32 666038332 1.806 ns/op 0 B/op 0 allocs/op +BenchmarkUnmarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 20722119 75.63 ns/op 96 B/op 2 allocs/op +BenchmarkUnmarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 15638485 75.67 ns/op 96 B/op 2 allocs/op +BenchmarkUnmarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 21984147 78.22 ns/op 96 B/op 2 allocs/op +BenchmarkUnmarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 14048582 81.83 ns/op 96 B/op 2 allocs/op +BenchmarkUnmarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 15702310 76.51 ns/op 96 B/op 2 allocs/op +BenchmarkUnmarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 13744906 81.18 ns/op 96 B/op 2 allocs/op +BenchmarkUnmarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 15469081 77.69 ns/op 96 B/op 2 allocs/op +BenchmarkUnmarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 15534558 78.22 ns/op 96 B/op 2 allocs/op +BenchmarkUnmarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 14854256 75.27 ns/op 96 B/op 2 allocs/op +BenchmarkUnmarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 14430813 78.58 ns/op 96 B/op 2 allocs/op PASS -ok github.com/quagmt/udecimal/benchmarks 1037.009s +ok github.com/quagmt/udecimal/benchmarks 1012.482s diff --git a/benchmarks/benchmarks_test.go b/benchmarks/benchmarks_test.go index 09bbacc..c555fb5 100644 --- a/benchmarks/benchmarks_test.go +++ b/benchmarks/benchmarks_test.go @@ -304,8 +304,8 @@ func BenchmarkDivFallback(b *testing.B) { testcases := []struct { a, b string }{ - {"12345679012345679890.1234567890123456789", "999999"}, - {"1234", "12345679012345679890.1234567890123456789"}, + {"12345679012345679890123456789.1234567890123456789", "999999"}, + {"1234", "12345679012345679890123456789.1234567890123456789"}, } for _, tc := range testcases { diff --git a/benchmarks/benchstat.txt b/benchmarks/benchstat.txt index 47448b3..a825a13 100644 --- a/benchmarks/benchstat.txt +++ b/benchmarks/benchstat.txt @@ -2,78 +2,79 @@ goos: linux goarch: amd64 pkg: github.com/quagmt/udecimal/benchmarks cpu: Intel(R) Core(TM) i9-14900HX - │ shopspring │ udecimal │ - │ sec/op │ sec/op vs base │ -Parse/1234567890123456789.1234567890123456879-32 372.50n ± 11% 70.12n ± 0% -81.17% (p=0.000 n=10) -Parse/123-32 73.73n ± 6% 10.08n ± 2% -86.33% (p=0.000 n=10) -Parse/123456.123456-32 112.95n ± 8% 22.02n ± 1% -80.51% (p=0.000 n=10) -Parse/1234567890-32 71.90n ± 4% 20.98n ± 3% -70.81% (p=0.000 n=10) -Parse/0.1234567890123456879-32 265.95n ± 9% 39.14n ± 1% -85.28% (p=0.000 n=10) -ParseFallBack/123456789123456789123456.1234567890123456-32 356.3n ± 7% 363.8n ± 8% ~ (p=0.393 n=10) -ParseFallBack/111222333444555666777888999.1234567890123456789-32 367.6n ± 8% 420.0n ± 10% +14.25% (p=0.001 n=10) -String/1234567890123456789.1234567890123456879-32 275.15n ± 6% 89.97n ± 10% -67.30% (p=0.000 n=10) -String/123-32 96.45n ± 6% 18.09n ± 5% -81.24% (p=0.000 n=10) -String/123456.123456-32 117.05n ± 11% 40.91n ± 4% -65.05% (p=0.000 n=10) -String/1234567890-32 118.45n ± 5% 33.01n ± 9% -72.14% (p=0.000 n=10) -String/0.1234567890123456879-32 146.50n ± 6% 56.52n ± 8% -61.42% (p=0.000 n=10) -StringFallBack/123456789123456789123456.1234567890123456-32 313.0n ± 6% 270.5n ± 5% -13.58% (p=0.000 n=10) -StringFallBack/111222333444555666777888999.1234567890123456789-32 312.0n ± 4% 269.9n ± 4% -13.51% (p=0.000 n=10) -Add/1234567890123456789.1234567890123456879.Add(1111.1789)-32 299.45n ± 7% 10.61n ± 0% -96.46% (p=0.000 n=10) -Add/1234567890123456789.1234567890123456879.Add(1234567890123456789.1234567890123456789)-32 76.880n ± 2% 8.406n ± 2% -89.07% (p=0.000 n=10) -Add/123.456.Add(0.123)-32 71.850n ± 3% 8.451n ± 2% -88.24% (p=0.000 n=10) -Add/3.Add(7)-32 71.700n ± 3% 8.297n ± 3% -88.43% (p=0.000 n=10) -Add/123456.123456.Add(999999)-32 270.60n ± 8% 10.61n ± 1% -96.08% (p=0.000 n=10) -Add/123456.123456.Add(456781244.1324897546)-32 261.05n ± 5% 10.61n ± 0% -95.94% (p=0.000 n=10) -Add/548751.15465466546.Add(1542.456487)-32 270.35n ± 5% 10.60n ± 0% -96.08% (p=0.000 n=10) -Sub/3.Sub(7)-32 54.420n ± 6% 9.829n ± 1% -81.94% (p=0.000 n=10) -Sub/1234567890123456789.1234567890123456879.Sub(1111.1789)-32 293.05n ± 6% 12.12n ± 0% -95.86% (p=0.000 n=10) -Sub/1234567890123456789.1234567890123456879.Sub(1234567890123456789.1234567890123456789)-32 75.750n ± 3% 9.787n ± 1% -87.08% (p=0.000 n=10) -Sub/123.456.Sub(0.123)-32 53.875n ± 7% 9.835n ± 1% -81.74% (p=0.000 n=10) -Sub/123456.123456.Sub(456781244.1324897546)-32 257.20n ± 4% 12.07n ± 0% -95.31% (p=0.000 n=10) -Sub/548751.15465466546.Sub(1542.456487)-32 266.90n ± 2% 12.09n ± 1% -95.47% (p=0.000 n=10) -Mul/1234.1234567890123456879.Mul(1111.1789)-32 77.12n ± 1% 10.28n ± 2% -86.68% (p=0.000 n=10) -Mul/1234.1234567890123456879.Mul(1111.1234567890123456789)-32 87.86n ± 2% 10.43n ± 2% -88.13% (p=0.000 n=10) -Mul/123.456.Mul(0.123)-32 70.715n ± 3% 9.876n ± 0% -86.03% (p=0.000 n=10) -Mul/3.Mul(7)-32 72.415n ± 3% 9.857n ± 0% -86.39% (p=0.000 n=10) -Mul/123456.123456.Mul(999999)-32 71.660n ± 5% 9.853n ± 0% -86.25% (p=0.000 n=10) -Mul/123456.123456.Mul(456781244.1324897546)-32 71.570n ± 4% 9.856n ± 0% -86.23% (p=0.000 n=10) -Mul/548751.15465466546.Mul(1542.456487)-32 70.090n ± 3% 9.879n ± 0% -85.91% (p=0.000 n=10) -Div/1234567890123456789.1234567890123456879.Div(1111.1789)-32 387.45n ± 3% 10.32n ± 1% -97.34% (p=0.000 n=10) -Div/12345.1234567890123456879.Div(1111.1234567890123456789)-32 464.85n ± 3% 24.00n ± 1% -94.84% (p=0.000 n=10) -Div/123.456.Div(0.123)-32 337.75n ± 4% 10.27n ± 1% -96.96% (p=0.000 n=10) -Div/3.Div(7)-32 405.60n ± 11% 10.31n ± 1% -97.46% (p=0.000 n=10) -Div/123456.123456.Div(999999)-32 347.55n ± 6% 10.28n ± 1% -97.04% (p=0.000 n=10) -Div/123456.123456.Div(456781244.1324897546)-32 438.25n ± 4% 10.37n ± 1% -97.63% (p=0.000 n=10) -Div/548751.15465466546.Div(1542.456487)-32 449.25n ± 9% 10.38n ± 1% -97.69% (p=0.000 n=10) -DivFallback/12345679012345679890.1234567890123456789.Div(999999)-32 644.05n ± 4% 10.26n ± 1% -98.41% (p=0.000 n=10) -DivFallback/1234.Div(12345679012345679890.1234567890123456789)-32 395.80n ± 6% 17.07n ± 3% -95.69% (p=0.000 n=10) -Pow/1.01.Pow(10)-32 671.05n ± 4% 39.55n ± 3% -94.11% (p=0.000 n=10) -Pow/1.01.Pow(100)-32 1.154µ ± 2% 1.008µ ± 4% -12.69% (p=0.000 n=10) -MarshalJSON/1234567890123456789.1234567890123456879-32 363.65n ± 6% 85.50n ± 14% -76.49% (p=0.000 n=10) -MarshalJSON/123-32 117.35n ± 5% 13.52n ± 8% -88.48% (p=0.000 n=10) -MarshalJSON/123456.123456-32 146.15n ± 5% 36.36n ± 5% -75.12% (p=0.000 n=10) -MarshalJSON/1234567890-32 163.65n ± 6% 30.05n ± 6% -81.64% (p=0.000 n=10) -MarshalJSON/0.1234567890123456879-32 181.00n ± 9% 49.90n ± 7% -72.43% (p=0.000 n=10) -MarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 445.4n ± 3% 345.7n ± 5% -22.38% (p=0.000 n=10) -UnmarshalJSON/1234567890123456789.1234567890123456879-32 422.30n ± 6% 71.79n ± 0% -83.00% (p=0.000 n=10) -UnmarshalJSON/123-32 112.50n ± 5% 15.26n ± 0% -86.44% (p=0.000 n=10) -UnmarshalJSON/123456.123456-32 158.90n ± 4% 25.60n ± 1% -83.89% (p=0.000 n=10) -UnmarshalJSON/1234567890-32 123.00n ± 7% 24.00n ± 1% -80.49% (p=0.000 n=10) -UnmarshalJSON/0.1234567890123456879-32 334.70n ± 5% 40.55n ± 0% -87.88% (p=0.000 n=10) -UnmarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 536.7n ± 7% 490.9n ± 8% -8.54% (p=0.007 n=10) -MarshalBinary/1234567890123456789.1234567890123456879-32 58.77n ± 8% 26.48n ± 4% -54.94% (p=0.000 n=10) -MarshalBinary/123-32 31.58n ± 7% 20.46n ± 4% -35.20% (p=0.000 n=10) -MarshalBinary/123456.123456-32 44.86n ± 4% 20.00n ± 4% -55.41% (p=0.000 n=10) -MarshalBinary/1234567890-32 45.91n ± 3% 20.03n ± 5% -56.37% (p=0.000 n=10) -MarshalBinary/0.1234567890123456879-32 43.57n ± 3% 20.41n ± 5% -53.17% (p=0.000 n=10) -MarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 73.68n ± 7% 44.52n ± 6% -39.57% (p=0.000 n=10) -UnmarshalBinary/1234567890123456789.1234567890123456879-32 68.275n ± 3% 2.042n ± 2% -97.01% (p=0.000 n=10) -UnmarshalBinary/123-32 49.450n ± 3% 1.831n ± 3% -96.30% (p=0.000 n=10) -UnmarshalBinary/123456.123456-32 51.285n ± 5% 1.843n ± 2% -96.41% (p=0.000 n=10) -UnmarshalBinary/1234567890-32 50.245n ± 3% 1.864n ± 2% -96.29% (p=0.000 n=10) -UnmarshalBinary/0.1234567890123456879-32 47.490n ± 5% 1.864n ± 2% -96.07% (p=0.000 n=10) -UnmarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 71.69n ± 4% 73.80n ± 2% ~ (p=0.123 n=10) -geomean 154.0n 21.30n -86.17% + │ shopspring │ udecimal │ + │ sec/op │ sec/op vs base │ +Parse/1234567890123456789.1234567890123456879-32 384.35n ± 10% 75.55n ± 3% -80.34% (p=0.000 n=10) +Parse/123-32 77.47n ± 13% 10.74n ± 3% -86.14% (p=0.000 n=10) +Parse/123456.123456-32 128.35n ± 5% 24.20n ± 4% -81.15% (p=0.000 n=10) +Parse/1234567890-32 82.47n ± 7% 22.68n ± 3% -72.50% (p=0.000 n=10) +Parse/0.1234567890123456879-32 262.30n ± 17% 40.64n ± 3% -84.51% (p=0.000 n=10) +ParseFallBack/123456789123456789123456.1234567890123456-32 373.2n ± 13% 418.3n ± 7% +12.08% (p=0.000 n=10) +ParseFallBack/111222333444555666777888999.1234567890123456789-32 418.5n ± 5% 453.4n ± 9% +8.33% (p=0.003 n=10) +String/1234567890123456789.1234567890123456879-32 284.45n ± 26% 97.61n ± 11% -65.68% (p=0.000 n=10) +String/123-32 110.55n ± 7% 19.73n ± 3% -82.15% (p=0.000 n=10) +String/123456.123456-32 133.00n ± 10% 45.72n ± 7% -65.63% (p=0.000 n=10) +String/1234567890-32 145.45n ± 18% 36.96n ± 5% -74.59% (p=0.000 n=10) +String/0.1234567890123456879-32 173.80n ± 15% 58.94n ± 15% -66.09% (p=0.000 n=10) +StringFallBack/123456789123456789123456.1234567890123456-32 394.1n ± 15% 268.4n ± 22% -31.90% (p=0.000 n=10) +StringFallBack/111222333444555666777888999.1234567890123456789-32 353.4n ± 26% 307.3n ± 6% -13.04% (p=0.004 n=10) +Add/1234567890123456789.1234567890123456879.Add(1111.1789)-32 384.65n ± 10% 10.87n ± 3% -97.18% (p=0.000 n=10) +Add/1234567890123456789.1234567890123456879.Add(1234567890123456789.1234567890123456789)-32 102.550n ± 10% 8.703n ± 1% -91.51% (p=0.000 n=10) +Add/123.456.Add(0.123)-32 97.220n ± 8% 8.672n ± 1% -91.08% (p=0.000 n=10) +Add/3.Add(7)-32 93.565n ± 8% 8.723n ± 1% -90.68% (p=0.000 n=10) +Add/123456.123456.Add(999999)-32 368.45n ± 12% 10.86n ± 1% -97.05% (p=0.000 n=10) +Add/123456.123456.Add(456781244.1324897546)-32 326.95n ± 13% 11.27n ± 2% -96.55% (p=0.000 n=10) +Add/548751.15465466546.Add(1542.456487)-32 346.55n ± 10% 11.46n ± 3% -96.69% (p=0.000 n=10) +Sub/3.Sub(7)-32 67.77n ± 9% 10.37n ± 4% -84.70% (p=0.000 n=10) +Sub/1234567890123456789.1234567890123456879.Sub(1111.1789)-32 376.15n ± 10% 12.86n ± 3% -96.58% (p=0.000 n=10) +Sub/1234567890123456789.1234567890123456879.Sub(1234567890123456789.1234567890123456789)-32 104.65n ± 9% 10.58n ± 4% -89.89% (p=0.000 n=10) +Sub/123.456.Sub(0.123)-32 64.67n ± 14% 10.79n ± 5% -83.32% (p=0.000 n=10) +Sub/123456.123456.Sub(456781244.1324897546)-32 312.40n ± 16% 12.96n ± 4% -95.85% (p=0.000 n=10) +Sub/548751.15465466546.Sub(1542.456487)-32 378.95n ± 7% 12.62n ± 4% -96.67% (p=0.000 n=10) +Mul/1234.1234567890123456879.Mul(1111.1789)-32 111.80n ± 5% 10.44n ± 3% -90.66% (p=0.000 n=10) +Mul/1234.1234567890123456879.Mul(1111.1234567890123456789)-32 121.45n ± 11% 10.55n ± 4% -91.31% (p=0.000 n=10) +Mul/123.456.Mul(0.123)-32 101.90n ± 11% 10.09n ± 2% -90.10% (p=0.000 n=10) +Mul/3.Mul(7)-32 104.600n ± 5% 9.962n ± 1% -90.48% (p=0.000 n=10) +Mul/123456.123456.Mul(999999)-32 102.35n ± 9% 10.03n ± 1% -90.20% (p=0.000 n=10) +Mul/123456.123456.Mul(456781244.1324897546)-32 100.300n ± 8% 9.964n ± 1% -90.07% (p=0.000 n=10) +Mul/548751.15465466546.Mul(1542.456487)-32 103.200n ± 6% 9.943n ± 1% -90.37% (p=0.000 n=10) +Div/1234567890123456789.1234567890123456879.Div(1111.1789)-32 531.55n ± 9% 10.38n ± 3% -98.05% (p=0.000 n=10) +Div/12345.1234567890123456879.Div(1111.1234567890123456789)-32 599.30n ± 35% 24.59n ± 3% -95.90% (p=0.000 n=10) +Div/1234567890123456789.1234567890123456879.Div(9876543210987654321.1234567890123456789)-32 489.35n ± 22% 16.85n ± 4% -96.56% (p=0.000 n=10) +Div/123.456.Div(0.123)-32 445.50n ± 8% 10.38n ± 3% -97.67% (p=0.000 n=10) +Div/3.Div(7)-32 523.05n ± 11% 10.39n ± 4% -98.01% (p=0.000 n=10) +Div/123456.123456.Div(999999)-32 444.80n ± 7% 10.42n ± 3% -97.66% (p=0.000 n=10) +Div/123456.123456.Div(456781244.1324897546)-32 557.05n ± 9% 10.38n ± 3% -98.14% (p=0.000 n=10) +Div/548751.15465466546.Div(1542.456487)-32 586.90n ± 12% 10.34n ± 3% -98.24% (p=0.000 n=10) +DivFallback/12345679012345679890123456789.1234567890123456789.Div(999999)-32 762.1n ± 7% 302.9n ± 7% -60.26% (p=0.000 n=10) +DivFallback/1234.Div(12345679012345679890123456789.1234567890123456789)-32 242.1n ± 87% 292.9n ± 4% ~ (p=0.481 n=10) +Pow/1.01.Pow(10)-32 724.70n ± 31% 40.83n ± 3% -94.37% (p=0.000 n=10) +Pow/1.01.Pow(100)-32 1.367µ ± 8% 1.062µ ± 7% -22.28% (p=0.000 n=10) +MarshalJSON/1234567890123456789.1234567890123456879-32 451.65n ± 6% 96.56n ± 7% -78.62% (p=0.000 n=10) +MarshalJSON/123-32 137.20n ± 12% 14.50n ± 6% -89.43% (p=0.000 n=10) +MarshalJSON/123456.123456-32 170.50n ± 10% 36.11n ± 6% -78.82% (p=0.000 n=10) +MarshalJSON/1234567890-32 189.25n ± 4% 31.36n ± 12% -83.43% (p=0.000 n=10) +MarshalJSON/0.1234567890123456879-32 204.70n ± 7% 54.62n ± 8% -73.32% (p=0.000 n=10) +MarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 523.6n ± 15% 358.4n ± 7% -31.55% (p=0.000 n=10) +UnmarshalJSON/1234567890123456789.1234567890123456879-32 488.90n ± 10% 73.75n ± 1% -84.92% (p=0.000 n=10) +UnmarshalJSON/123-32 133.25n ± 9% 15.41n ± 1% -88.44% (p=0.000 n=10) +UnmarshalJSON/123456.123456-32 180.60n ± 11% 26.42n ± 3% -85.37% (p=0.000 n=10) +UnmarshalJSON/1234567890-32 139.50n ± 10% 23.70n ± 3% -83.01% (p=0.000 n=10) +UnmarshalJSON/0.1234567890123456879-32 449.70n ± 9% 40.97n ± 1% -90.89% (p=0.000 n=10) +UnmarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 662.6n ± 9% 498.7n ± 8% -24.75% (p=0.000 n=10) +MarshalBinary/1234567890123456789.1234567890123456879-32 48.72n ± 21% 27.32n ± 5% -43.92% (p=0.000 n=10) +MarshalBinary/123-32 34.52n ± 9% 20.90n ± 6% -39.47% (p=0.000 n=10) +MarshalBinary/123456.123456-32 48.67n ± 14% 21.25n ± 5% -56.35% (p=0.000 n=10) +MarshalBinary/1234567890-32 47.89n ± 24% 20.77n ± 8% -56.64% (p=0.000 n=10) +MarshalBinary/0.1234567890123456879-32 46.45n ± 10% 20.70n ± 5% -55.42% (p=0.000 n=10) +MarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 64.40n ± 33% 46.68n ± 5% ~ (p=0.109 n=10) +UnmarshalBinary/1234567890123456789.1234567890123456879-32 59.150n ± 31% 2.101n ± 2% -96.45% (p=0.000 n=10) +UnmarshalBinary/123-32 45.880n ± 15% 1.881n ± 4% -95.90% (p=0.000 n=10) +UnmarshalBinary/123456.123456-32 50.450n ± 25% 1.815n ± 4% -96.40% (p=0.000 n=10) +UnmarshalBinary/1234567890-32 65.140n ± 38% 1.923n ± 4% -97.05% (p=0.000 n=10) +UnmarshalBinary/0.1234567890123456879-32 45.120n ± 18% 1.891n ± 5% -95.81% (p=0.000 n=10) +UnmarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 72.44n ± 11% 77.96n ± 4% ~ (p=0.210 n=10) +geomean 183.7n 24.16n -86.85% │ shopspring │ udecimal │ │ B/op │ B/op vs base │ @@ -113,13 +114,14 @@ Mul/123456.123456.Mul(456781244.1324897546)-32 Mul/548751.15465466546.Mul(1542.456487)-32 80.00 ± 0% 0.00 ± 0% -100.00% (p=0.000 n=10) Div/1234567890123456789.1234567890123456879.Div(1111.1789)-32 352.0 ± 0% 0.0 ± 0% -100.00% (p=0.000 n=10) Div/12345.1234567890123456879.Div(1111.1234567890123456789)-32 336.0 ± 0% 0.0 ± 0% -100.00% (p=0.000 n=10) +Div/1234567890123456789.1234567890123456879.Div(9876543210987654321.1234567890123456789)-32 336.0 ± 0% 0.0 ± 0% -100.00% (p=0.000 n=10) Div/123.456.Div(0.123)-32 288.0 ± 0% 0.0 ± 0% -100.00% (p=0.000 n=10) Div/3.Div(7)-32 328.0 ± 0% 0.0 ± 0% -100.00% (p=0.000 n=10) Div/123456.123456.Div(999999)-32 288.0 ± 0% 0.0 ± 0% -100.00% (p=0.000 n=10) Div/123456.123456.Div(456781244.1324897546)-32 368.0 ± 0% 0.0 ± 0% -100.00% (p=0.000 n=10) Div/548751.15465466546.Div(1542.456487)-32 368.0 ± 0% 0.0 ± 0% -100.00% (p=0.000 n=10) -DivFallback/12345679012345679890.1234567890123456789.Div(999999)-32 576.0 ± 0% 0.0 ± 0% -100.00% (p=0.000 n=10) -DivFallback/1234.Div(12345679012345679890.1234567890123456789)-32 312.0 ± 0% 0.0 ± 0% -100.00% (p=0.000 n=10) +DivFallback/12345679012345679890123456789.1234567890123456789.Div(999999)-32 496.0 ± 0% 264.0 ± 0% -46.77% (p=0.000 n=10) +DivFallback/1234.Div(12345679012345679890123456789.1234567890123456789)-32 272.0 ± 0% 320.0 ± 0% +17.65% (p=0.000 n=10) Pow/1.01.Pow(10)-32 576.0 ± 0% 0.0 ± 0% -100.00% (p=0.000 n=10) Pow/1.01.Pow(100)-32 1072.0 ± 0% 817.0 ± 0% -23.79% (p=0.000 n=10) MarshalJSON/1234567890123456789.1234567890123456879-32 336.00 ± 0% 48.00 ± 0% -85.71% (p=0.000 n=10) @@ -146,83 +148,84 @@ UnmarshalBinary/123456.123456-32 UnmarshalBinary/1234567890-32 40.00 ± 0% 0.00 ± 0% -100.00% (p=0.000 n=10) UnmarshalBinary/0.1234567890123456879-32 40.00 ± 0% 0.00 ± 0% -100.00% (p=0.000 n=10) UnmarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 96.00 ± 0% 96.00 ± 0% ~ (p=1.000 n=10) ¹ -geomean 119.3 ? ² ³ +geomean 120.6 ? ² ³ ¹ all samples are equal ² summaries must be >0 to compute geomean ³ ratios must be >0 to compute geomean - │ shopspring │ udecimal │ - │ allocs/op │ allocs/op vs base │ -Parse/1234567890123456789.1234567890123456879-32 5.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) -Parse/123-32 2.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) -Parse/123456.123456-32 3.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) -Parse/1234567890-32 2.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) -Parse/0.1234567890123456879-32 5.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) -ParseFallBack/123456789123456789123456.1234567890123456-32 5.000 ± 0% 6.000 ± 0% +20.00% (p=0.000 n=10) -ParseFallBack/111222333444555666777888999.1234567890123456789-32 5.000 ± 0% 6.000 ± 0% +20.00% (p=0.000 n=10) -String/1234567890123456789.1234567890123456879-32 5.000 ± 0% 1.000 ± 0% -80.00% (p=0.000 n=10) -String/123-32 4.000 ± 0% 1.000 ± 0% -75.00% (p=0.000 n=10) -String/123456.123456-32 4.000 ± 0% 1.000 ± 0% -75.00% (p=0.000 n=10) -String/1234567890-32 4.000 ± 0% 1.000 ± 0% -75.00% (p=0.000 n=10) -String/0.1234567890123456879-32 4.000 ± 0% 1.000 ± 0% -75.00% (p=0.000 n=10) -StringFallBack/123456789123456789123456.1234567890123456-32 5.000 ± 0% 4.000 ± 0% -20.00% (p=0.000 n=10) -StringFallBack/111222333444555666777888999.1234567890123456789-32 5.000 ± 0% 4.000 ± 0% -20.00% (p=0.000 n=10) -Add/1234567890123456789.1234567890123456879.Add(1111.1789)-32 8.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) -Add/1234567890123456789.1234567890123456879.Add(1234567890123456789.1234567890123456789)-32 2.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) -Add/123.456.Add(0.123)-32 2.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) -Add/3.Add(7)-32 2.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) -Add/123456.123456.Add(999999)-32 8.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) -Add/123456.123456.Add(456781244.1324897546)-32 8.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) -Add/548751.15465466546.Add(1542.456487)-32 8.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) -Sub/3.Sub(7)-32 2.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) -Sub/1234567890123456789.1234567890123456879.Sub(1111.1789)-32 8.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) -Sub/1234567890123456789.1234567890123456879.Sub(1234567890123456789.1234567890123456789)-32 2.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) -Sub/123.456.Sub(0.123)-32 2.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) -Sub/123456.123456.Sub(456781244.1324897546)-32 8.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) -Sub/548751.15465466546.Sub(1542.456487)-32 8.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) -Mul/1234.1234567890123456879.Mul(1111.1789)-32 2.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) -Mul/1234.1234567890123456879.Mul(1111.1234567890123456789)-32 2.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) -Mul/123.456.Mul(0.123)-32 2.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) -Mul/3.Mul(7)-32 2.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) -Mul/123456.123456.Mul(999999)-32 2.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) -Mul/123456.123456.Mul(456781244.1324897546)-32 2.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) -Mul/548751.15465466546.Mul(1542.456487)-32 2.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) -Div/1234567890123456789.1234567890123456879.Div(1111.1789)-32 11.00 ± 0% 0.00 ± 0% -100.00% (p=0.000 n=10) -Div/12345.1234567890123456879.Div(1111.1234567890123456789)-32 9.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) -Div/123.456.Div(0.123)-32 10.00 ± 0% 0.00 ± 0% -100.00% (p=0.000 n=10) -Div/3.Div(7)-32 12.00 ± 0% 0.00 ± 0% -100.00% (p=0.000 n=10) -Div/123456.123456.Div(999999)-32 10.00 ± 0% 0.00 ± 0% -100.00% (p=0.000 n=10) -Div/123456.123456.Div(456781244.1324897546)-32 12.00 ± 0% 0.00 ± 0% -100.00% (p=0.000 n=10) -Div/548751.15465466546.Div(1542.456487)-32 12.00 ± 0% 0.00 ± 0% -100.00% (p=0.000 n=10) -DivFallback/12345679012345679890.1234567890123456789.Div(999999)-32 18.00 ± 0% 0.00 ± 0% -100.00% (p=0.000 n=10) -DivFallback/1234.Div(12345679012345679890.1234567890123456789)-32 10.00 ± 0% 0.00 ± 0% -100.00% (p=0.000 n=10) -Pow/1.01.Pow(10)-32 18.00 ± 0% 0.00 ± 0% -100.00% (p=0.000 n=10) -Pow/1.01.Pow(100)-32 26.00 ± 0% 13.00 ± 0% -50.00% (p=0.000 n=10) -MarshalJSON/1234567890123456789.1234567890123456879-32 7.000 ± 0% 1.000 ± 0% -85.71% (p=0.000 n=10) -MarshalJSON/123-32 5.000 ± 0% 1.000 ± 0% -80.00% (p=0.000 n=10) -MarshalJSON/123456.123456-32 5.000 ± 0% 1.000 ± 0% -80.00% (p=0.000 n=10) -MarshalJSON/1234567890-32 5.000 ± 0% 1.000 ± 0% -80.00% (p=0.000 n=10) -MarshalJSON/0.1234567890123456879-32 5.000 ± 0% 1.000 ± 0% -80.00% (p=0.000 n=10) -MarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 7.000 ± 0% 5.000 ± 0% -28.57% (p=0.000 n=10) -UnmarshalJSON/1234567890123456789.1234567890123456879-32 7.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) -UnmarshalJSON/123-32 4.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) -UnmarshalJSON/123456.123456-32 5.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) -UnmarshalJSON/1234567890-32 4.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) -UnmarshalJSON/0.1234567890123456879-32 7.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) -UnmarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 7.000 ± 0% 6.000 ± 0% -14.29% (p=0.000 n=10) -MarshalBinary/1234567890123456789.1234567890123456879-32 2.000 ± 0% 1.000 ± 0% -50.00% (p=0.000 n=10) -MarshalBinary/123-32 2.000 ± 0% 1.000 ± 0% -50.00% (p=0.000 n=10) -MarshalBinary/123456.123456-32 2.000 ± 0% 1.000 ± 0% -50.00% (p=0.000 n=10) -MarshalBinary/1234567890-32 2.000 ± 0% 1.000 ± 0% -50.00% (p=0.000 n=10) -MarshalBinary/0.1234567890123456879-32 2.000 ± 0% 1.000 ± 0% -50.00% (p=0.000 n=10) -MarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 2.000 ± 0% 1.000 ± 0% -50.00% (p=0.000 n=10) -UnmarshalBinary/1234567890123456789.1234567890123456879-32 2.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) -UnmarshalBinary/123-32 2.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) -UnmarshalBinary/123456.123456-32 2.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) -UnmarshalBinary/1234567890-32 2.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) -UnmarshalBinary/0.1234567890123456879-32 2.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) -UnmarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 2.000 ± 0% 2.000 ± 0% ~ (p=1.000 n=10) ¹ -geomean 4.243 ? ² ³ + │ shopspring │ udecimal │ + │ allocs/op │ allocs/op vs base │ +Parse/1234567890123456789.1234567890123456879-32 5.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) +Parse/123-32 2.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) +Parse/123456.123456-32 3.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) +Parse/1234567890-32 2.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) +Parse/0.1234567890123456879-32 5.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) +ParseFallBack/123456789123456789123456.1234567890123456-32 5.000 ± 0% 6.000 ± 0% +20.00% (p=0.000 n=10) +ParseFallBack/111222333444555666777888999.1234567890123456789-32 5.000 ± 0% 6.000 ± 0% +20.00% (p=0.000 n=10) +String/1234567890123456789.1234567890123456879-32 5.000 ± 0% 1.000 ± 0% -80.00% (p=0.000 n=10) +String/123-32 4.000 ± 0% 1.000 ± 0% -75.00% (p=0.000 n=10) +String/123456.123456-32 4.000 ± 0% 1.000 ± 0% -75.00% (p=0.000 n=10) +String/1234567890-32 4.000 ± 0% 1.000 ± 0% -75.00% (p=0.000 n=10) +String/0.1234567890123456879-32 4.000 ± 0% 1.000 ± 0% -75.00% (p=0.000 n=10) +StringFallBack/123456789123456789123456.1234567890123456-32 5.000 ± 0% 4.000 ± 0% -20.00% (p=0.000 n=10) +StringFallBack/111222333444555666777888999.1234567890123456789-32 5.000 ± 0% 4.000 ± 0% -20.00% (p=0.000 n=10) +Add/1234567890123456789.1234567890123456879.Add(1111.1789)-32 8.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) +Add/1234567890123456789.1234567890123456879.Add(1234567890123456789.1234567890123456789)-32 2.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) +Add/123.456.Add(0.123)-32 2.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) +Add/3.Add(7)-32 2.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) +Add/123456.123456.Add(999999)-32 8.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) +Add/123456.123456.Add(456781244.1324897546)-32 8.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) +Add/548751.15465466546.Add(1542.456487)-32 8.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) +Sub/3.Sub(7)-32 2.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) +Sub/1234567890123456789.1234567890123456879.Sub(1111.1789)-32 8.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) +Sub/1234567890123456789.1234567890123456879.Sub(1234567890123456789.1234567890123456789)-32 2.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) +Sub/123.456.Sub(0.123)-32 2.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) +Sub/123456.123456.Sub(456781244.1324897546)-32 8.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) +Sub/548751.15465466546.Sub(1542.456487)-32 8.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) +Mul/1234.1234567890123456879.Mul(1111.1789)-32 2.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) +Mul/1234.1234567890123456879.Mul(1111.1234567890123456789)-32 2.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) +Mul/123.456.Mul(0.123)-32 2.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) +Mul/3.Mul(7)-32 2.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) +Mul/123456.123456.Mul(999999)-32 2.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) +Mul/123456.123456.Mul(456781244.1324897546)-32 2.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) +Mul/548751.15465466546.Mul(1542.456487)-32 2.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) +Div/1234567890123456789.1234567890123456879.Div(1111.1789)-32 11.00 ± 0% 0.00 ± 0% -100.00% (p=0.000 n=10) +Div/12345.1234567890123456879.Div(1111.1234567890123456789)-32 9.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) +Div/1234567890123456789.1234567890123456879.Div(9876543210987654321.1234567890123456789)-32 9.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) +Div/123.456.Div(0.123)-32 10.00 ± 0% 0.00 ± 0% -100.00% (p=0.000 n=10) +Div/3.Div(7)-32 12.00 ± 0% 0.00 ± 0% -100.00% (p=0.000 n=10) +Div/123456.123456.Div(999999)-32 10.00 ± 0% 0.00 ± 0% -100.00% (p=0.000 n=10) +Div/123456.123456.Div(456781244.1324897546)-32 12.00 ± 0% 0.00 ± 0% -100.00% (p=0.000 n=10) +Div/548751.15465466546.Div(1542.456487)-32 12.00 ± 0% 0.00 ± 0% -100.00% (p=0.000 n=10) +DivFallback/12345679012345679890123456789.1234567890123456789.Div(999999)-32 16.000 ± 0% 7.000 ± 0% -56.25% (p=0.000 n=10) +DivFallback/1234.Div(12345679012345679890123456789.1234567890123456789)-32 8.000 ± 0% 7.000 ± 0% -12.50% (p=0.000 n=10) +Pow/1.01.Pow(10)-32 18.00 ± 0% 0.00 ± 0% -100.00% (p=0.000 n=10) +Pow/1.01.Pow(100)-32 26.00 ± 0% 13.00 ± 0% -50.00% (p=0.000 n=10) +MarshalJSON/1234567890123456789.1234567890123456879-32 7.000 ± 0% 1.000 ± 0% -85.71% (p=0.000 n=10) +MarshalJSON/123-32 5.000 ± 0% 1.000 ± 0% -80.00% (p=0.000 n=10) +MarshalJSON/123456.123456-32 5.000 ± 0% 1.000 ± 0% -80.00% (p=0.000 n=10) +MarshalJSON/1234567890-32 5.000 ± 0% 1.000 ± 0% -80.00% (p=0.000 n=10) +MarshalJSON/0.1234567890123456879-32 5.000 ± 0% 1.000 ± 0% -80.00% (p=0.000 n=10) +MarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 7.000 ± 0% 5.000 ± 0% -28.57% (p=0.000 n=10) +UnmarshalJSON/1234567890123456789.1234567890123456879-32 7.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) +UnmarshalJSON/123-32 4.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) +UnmarshalJSON/123456.123456-32 5.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) +UnmarshalJSON/1234567890-32 4.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) +UnmarshalJSON/0.1234567890123456879-32 7.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) +UnmarshalJSON/12345678901234567891234567890123456789.1234567890123456879-32 7.000 ± 0% 6.000 ± 0% -14.29% (p=0.000 n=10) +MarshalBinary/1234567890123456789.1234567890123456879-32 2.000 ± 0% 1.000 ± 0% -50.00% (p=0.000 n=10) +MarshalBinary/123-32 2.000 ± 0% 1.000 ± 0% -50.00% (p=0.000 n=10) +MarshalBinary/123456.123456-32 2.000 ± 0% 1.000 ± 0% -50.00% (p=0.000 n=10) +MarshalBinary/1234567890-32 2.000 ± 0% 1.000 ± 0% -50.00% (p=0.000 n=10) +MarshalBinary/0.1234567890123456879-32 2.000 ± 0% 1.000 ± 0% -50.00% (p=0.000 n=10) +MarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 2.000 ± 0% 1.000 ± 0% -50.00% (p=0.000 n=10) +UnmarshalBinary/1234567890123456789.1234567890123456879-32 2.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) +UnmarshalBinary/123-32 2.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) +UnmarshalBinary/123456.123456-32 2.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) +UnmarshalBinary/1234567890-32 2.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) +UnmarshalBinary/0.1234567890123456879-32 2.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10) +UnmarshalBinary/12345678901234567891234567890123456789.1234567890123456879-32 2.000 ± 0% 2.000 ± 0% ~ (p=1.000 n=10) ¹ +geomean 4.268 ? ² ³ ¹ all samples are equal ² summaries must be >0 to compute geomean ³ ratios must be >0 to compute geomean diff --git a/bint.go b/bint.go index 77cc1bb..17e0b27 100644 --- a/bint.go +++ b/bint.go @@ -74,9 +74,9 @@ func parseBint(s []byte) (bool, bint, uint8, error) { // if s has less than 40 characters, it can fit into u128 if len(s) <= 40 { - neg, bint, scale, err := parseBintFromU128(s) + neg, bint, prec, err := parseBintFromU128(s) if err == nil || err != errOverflow { - return neg, bint, scale, err + return neg, bint, prec, err } // overflow, try to parse into big.Int @@ -84,11 +84,11 @@ func parseBint(s []byte) (bool, bint, uint8, error) { // parse into big.Int var ( - width = len(s) - intString string - scale, pos int - neg bool - value = s + width = len(s) + intString string + prec, pos int + neg bool + value = s ) switch s[0] { @@ -147,11 +147,11 @@ func parseBint(s []byte) (bool, bint, uint8, error) { // intString = value[:pIndex] + value[pIndex+1:] intString = b.String() - scale = len(value[pIndex+1:]) + prec = len(value[pIndex+1:]) } - if scale > int(defaultScale) { - return false, bint{}, 0, ErrScaleOutOfRange + if prec > int(defaultPrec) { + return false, bint{}, 0, ErrPrecOutOfRange } dValue := new(big.Int) @@ -166,7 +166,7 @@ func parseBint(s []byte) (bool, bint, uint8, error) { } // nolint: gosec - return neg, bintFromBigInt(dValue), uint8(scale), nil + return neg, bintFromBigInt(dValue), uint8(prec), nil } func parseBintFromU128(s []byte) (bool, bint, uint8, error) { @@ -200,27 +200,27 @@ func parseBintFromU128(s []byte) (bool, bint, uint8, error) { } var ( - err error - coef u128 - scale uint8 + err error + coef u128 + prec uint8 ) for ; pos < width; pos++ { if s[pos] == '.' { // return err if we encounter the '.' more than once - if scale != 0 { + if prec != 0 { return false, bint{}, 0, errInvalidFormat(s) } // nolint: gosec - scale = uint8(width - pos - 1) + prec = uint8(width - pos - 1) // prevent "123." or "-123." - if scale == 0 { + if prec == 0 { return false, bint{}, 0, errInvalidFormat(s) } - if scale > defaultScale { - return false, bint{}, 0, ErrScaleOutOfRange + if prec > defaultPrec { + return false, bint{}, 0, ErrPrecOutOfRange } continue @@ -245,7 +245,7 @@ func parseBintFromU128(s []byte) (bool, bint, uint8, error) { return false, bint{}, 0, nil } - return neg, bint{u128: coef}, scale, nil + return neg, bint{u128: coef}, prec, nil } // GT returns true if u > v diff --git a/codec.go b/codec.go index 09eed39..e769a61 100644 --- a/codec.go +++ b/codec.go @@ -25,11 +25,12 @@ func (d Decimal) String() string { return d.stringBigInt(true) } -// StringFixed returns the string representation of the decimal with fixed scale. +// StringFixed returns the string representation of the decimal with fixed prec. // Trailing zeros will not be removed. -// Special case: if the decimal is zero, it will return "0" regardless of the scale. -func (d Decimal) StringFixed(scale uint8) string { - d1 := d.rescale(scale) +// +// Special case: if the decimal is zero, it will return "0" regardless of the prec. +func (d Decimal) StringFixed(prec uint8) string { + d1 := d.rescale(prec) if !d1.coef.overflow { return d1.stringU128(false) @@ -40,7 +41,7 @@ func (d Decimal) StringFixed(scale uint8) string { func (d Decimal) stringBigInt(trimTrailingZeros bool) string { str := d.coef.bigInt.String() - dExpInt := int(d.scale) + dExpInt := int(d.prec) if dExpInt > len(str) { // pad with zeros l := len(str) @@ -109,10 +110,10 @@ func (d Decimal) bytesU128(trimTrailingZeros bool) []byte { byteLen := maxByteMap[d.coef.u128.bitLen()] var buf []byte if trimTrailingZeros { - // if d.scale > byteLen, that means we need to allocate upto d.scale to cover all the zeros of the fraction part - // e.g. 0.00000123, scale = 8, byteLen = 3 --> we need to allocate 8 bytes for the fraction part - if byteLen <= d.scale { - byteLen = d.scale + 1 // 1 for zero in the whole part + // if d.prec > byteLen, that means we need to allocate upto d.prec to cover all the zeros of the fraction part + // e.g. 0.00000123, prec = 8, byteLen = 3 --> we need to allocate 8 bytes for the fraction part + if byteLen <= d.prec { + byteLen = d.prec + 1 // 1 for zero in the whole part } buf = make([]byte, byteLen+2) // 1 sign + 1 dot @@ -122,18 +123,18 @@ func (d Decimal) bytesU128(trimTrailingZeros bool) []byte { buf = []byte("0000000000000000000000000000000000000000") } - quo, rem := d.coef.u128.QuoRem64(pow10[d.scale].lo) // max scale is 19, so we can safely use QuoRem64 + quo, rem := d.coef.u128.QuoRem64(pow10[d.prec].lo) // max prec is 19, so we can safely use QuoRem64 l := len(buf) n := 0 - scale := d.scale + prec := d.prec if rem != 0 { if trimTrailingZeros { // remove trailing zeros, e.g. 1.2300 -> 1.23 - // both scale and rem will be adjusted + // both prec and rem will be adjusted zeros := getTrailingZeros64(rem) rem /= pow10[zeros].lo - scale -= zeros + prec -= zeros } for ; rem != 0; rem /= 10 { @@ -142,12 +143,12 @@ func (d Decimal) bytesU128(trimTrailingZeros bool) []byte { } // fill remaining zeros - for i := n + 1; i <= int(scale); i++ { + for i := n + 1; i <= int(prec); i++ { buf[l-i] = '0' } - buf[l-1-int(scale)] = '.' - n = int(scale + 1) + buf[l-1-int(prec)] = '.' + n = int(prec + 1) } if quo.IsZero() { @@ -209,17 +210,17 @@ func (d *Decimal) UnmarshalJSON(data []byte) error { // MarshalBinary implements encoding.BinaryMarshaler interface with custom binary format. // -// Binary format: [overflow + neg] [scale] [total bytes] [coef] +// Binary format: [overflow + neg] [prec] [total bytes] [coef] // // example 1: -1.2345 // 1st byte: 0b0001_0000 (overflow = true, neg = false) -// 2nd byte: 0b0000_0100 (scale = 4) +// 2nd byte: 0b0000_0100 (prec = 4) // 3rd byte: 0b0000_1101 (total bytes = 11) // 4th-11th bytes: 0x0000_0000_0000_3039 (coef = 12345, only stores the coef.lo part) // // example 2: 1234567890123456789.1234567890123456789 // 1st byte: 0b0000_0000 (overflow = false, neg = false) -// 2nd byte: 0b0001_0011 (scale = 19) +// 2nd byte: 0b0001_0011 (prec = 19) // 3rd byte: 0b0001_0011 (total bytes = 19) // 4th-11th bytes: 0x0949_b0f6_f002_3313 (coef.hi) // 12th-19th bytes: 0xd3b5_05f9_b5f1_8115 (coef.lo) @@ -247,7 +248,7 @@ func (d Decimal) marshalBinaryU128() ([]byte, error) { // overflow + neg with overflow = false (always 0) buf[0] = byte(neg) - buf[1] = byte(d.scale) + buf[1] = byte(d.prec) buf[2] = byte(totalBytes) if coef.hi != 0 { @@ -276,7 +277,7 @@ func (d *Decimal) UnmarshalBinary(data []byte) error { func (d *Decimal) unmarshalBinaryU128(data []byte) error { d.neg = data[0]&1 == 1 - d.scale = data[1] + d.prec = data[1] d.coef.overflow = false totalBytes := data[2] @@ -314,7 +315,7 @@ func (d Decimal) marshalBinaryBigInt() ([]byte, error) { // overflow + neg with overflow = true (always 1) buf[0] = byte(1<<4 | neg) - buf[1] = byte(d.scale) + buf[1] = byte(d.prec) buf[2] = byte(totalBytes) d.coef.bigInt.FillBytes(buf[3:]) @@ -324,7 +325,7 @@ func (d Decimal) marshalBinaryBigInt() ([]byte, error) { func (d *Decimal) unmarshalBinaryBigInt(data []byte) error { d.neg = data[0]&1 == 1 d.coef.overflow = true - d.scale = data[1] + d.prec = data[1] totalBytes := data[2] @@ -374,7 +375,9 @@ type NullDecimal struct { Valid bool } -// Scan implements sql.Scanner interface. +// Scan implements [sql.Scanner] interface. +// +// [sql.Scanner]: https://pkg.go.dev/database/sql#Scanner func (d *NullDecimal) Scan(src any) error { if src == nil { d.Decimal, d.Valid = Decimal{}, false @@ -405,7 +408,9 @@ func (d *NullDecimal) Scan(src any) error { return err } -// Value implements driver.Valuer interface. +// Value implements the [driver.Valuer] interface. +// +// [driver.Valuer]: https://pkg.go.dev/database/sql/driver#Valuer func (d NullDecimal) Value() (driver.Value, error) { if !d.Valid { return nil, nil diff --git a/codec_test.go b/codec_test.go index 46b3563..955eab9 100644 --- a/codec_test.go +++ b/codec_test.go @@ -15,9 +15,9 @@ import ( func TestStringFixed(t *testing.T) { testcases := []struct { - in string - scale uint8 - want string + in string + prec uint8 + want string }{ {"0", 1, "0"}, {"0", 0, "0"}, @@ -30,6 +30,18 @@ func TestStringFixed(t *testing.T) { {"123.123", 4, "123.1230"}, {"-123.123", 4, "-123.1230"}, {"-123.123", 5, "-123.12300"}, + {"123.123000000", 1, "123.123"}, + {"123.123000000", 2, "123.123"}, + {"123.123000000", 3, "123.123"}, + {"123.123000000", 4, "123.1230"}, + {"123.123000000", 5, "123.12300"}, + {"123.123000000", 6, "123.123000"}, + {"-123.123000000", 1, "-123.123"}, + {"-123.123000000", 2, "-123.123"}, + {"-123.123000000", 3, "-123.123"}, + {"-123.123000000", 4, "-123.1230"}, + {"-123.123000000", 5, "-123.12300"}, + {"-123.123000000", 6, "-123.123000"}, {"123456789012345678901234567890123.123456789", 15, "123456789012345678901234567890123.123456789000000"}, {"-123456789012345678901234567890123.123456789", 15, "-123456789012345678901234567890123.123456789000000"}, {"-123456789012345678901234567890123.123456789", 20, "-123456789012345678901234567890123.1234567890000000000"}, @@ -38,7 +50,7 @@ func TestStringFixed(t *testing.T) { for _, tc := range testcases { t.Run(tc.in, func(t *testing.T) { d := MustParse(tc.in) - require.Equal(t, tc.want, d.StringFixed(tc.scale)) + require.Equal(t, tc.want, d.StringFixed(tc.prec)) }) } } @@ -90,7 +102,7 @@ func TestUnmarshalNumber(t *testing.T) { wantErr error }{ {"1234567890123.1234567890123", nil}, - {"1234567890123.12345678901234567899", fmt.Errorf("scale out of range. Only support maximum 19 digits after the decimal point")}, + {"1234567890123.12345678901234567899", fmt.Errorf("precision out of range. Only support maximum 19 digits after the decimal point")}, {`"1234567890123.1234567890123"`, nil}, } diff --git a/decimal.go b/decimal.go index 2160030..d729d9e 100644 --- a/decimal.go +++ b/decimal.go @@ -8,12 +8,12 @@ import ( ) var ( - // defaultScale is the default number of digits after the decimal point + // defaultPrec is the default number of digits after the decimal point // if not specified - defaultScale uint8 = 19 + defaultPrec uint8 = 19 - // maxScale is the maximum number of digits after the decimal point - maxScale uint8 = 19 + // maxPrec is the maximum number of digits after the decimal point + maxPrec uint8 = 19 // maxStrLen is the maximum length of string input when using Parse/MustParse // set it to 200 so string length value can fit in 1 byte (for MarshalBinary). @@ -91,9 +91,9 @@ var pow10Big = [20]*big.Int{ var ( errOverflow = fmt.Errorf("overflow") - // ErrScaleOutOfRange is returned when the scale is greater than the default scale - // default scale can be configured using SetDefaultScale, and its value is up to 19 - ErrScaleOutOfRange = fmt.Errorf("scale out of range. Only support maximum %d digits after the decimal point", defaultScale) + // ErrPrecOutOfRange is returned when the decimal precision is greater than the default precision + // default precision can be configured using SetDefaultPrecision, and its value is up to 19 + ErrPrecOutOfRange = fmt.Errorf("precision out of range. Only support maximum %d digits after the decimal point", defaultPrec) // ErrEmptyString is returned when the input string is empty ErrEmptyString = fmt.Errorf("parse empty string") @@ -125,13 +125,17 @@ var ( ) // Decimal represents a fixed-point decimal number. -// The number is represented as a coefficient and a scale. +// The number is represented as a struct with three fields: coef, neg, and prec. // -// Number = coef / 10^(scale) +// - coef: the coefficient of the decimal number +// - neg: true if the number is negative +// - prec: the number of digits after the decimal point (0 to 19) +// +// Decimal numbers are immutable and can be used in arithmetic operations such as addition, subtraction, multiplication, and division. type Decimal struct { - coef bint - neg bool // true if number is negative - scale uint8 + coef bint + neg bool // true if number is negative + prec uint8 } // SetDefaultPrecision changes the default precision for decimal numbers in the package. @@ -140,46 +144,47 @@ type Decimal struct { // This function is particularly useful when you want to have your precision of the deicmal smaller than 19 // across the whole application. It should be called only once at the beginning of your application // -// Panics if the new scale is greater than 19 (maxScale) or new scale is 0 +// Panics if the new precision is greater than 19 (maxPrec) or new precision is 0 func SetDefaultPrecision(prec uint8) { - if prec > maxScale { - panic(fmt.Sprintf("scale out of range. Only allow maximum %d digits after the decimal points", maxScale)) + if prec > maxPrec { + panic(fmt.Sprintf("precision out of range. Only allow maximum %d digits after the decimal points", maxPrec)) } if prec == 0 { - panic("scale must be greater than 0") + panic("prec must be greater than 0") } - defaultScale = prec + defaultPrec = prec } -func NewFromHiLo(neg bool, hi uint64, lo uint64, scale uint8) (Decimal, error) { - if scale > defaultScale { - return Decimal{}, ErrScaleOutOfRange +// NewFromHiLo returns Decimal from 128-bit unsigned integer (hi,lo) +func NewFromHiLo(neg bool, hi uint64, lo uint64, prec uint8) (Decimal, error) { + if prec > defaultPrec { + return Decimal{}, ErrPrecOutOfRange } coef := u128{hi: hi, lo: lo} - return newDecimal(neg, bintFromU128(coef), scale), nil + return newDecimal(neg, bintFromU128(coef), prec), nil } // newDecimal return the decimal -func newDecimal(neg bool, coef bint, scale uint8) Decimal { - return Decimal{neg: neg, coef: coef, scale: scale} +func newDecimal(neg bool, coef bint, prec uint8) Decimal { + return Decimal{neg: neg, coef: coef, prec: prec} } -// NewFromUint64 returns a decimal which equals to coef / 10^scale and coef is an uint64 -// Trailing zeros wll be removed and the scale will also be adjusted -func NewFromUint64(coef uint64, scale uint8) (Decimal, error) { - if scale > defaultScale { - return Decimal{}, ErrScaleOutOfRange +// NewFromUint64 returns a decimal which equals to coef / 10^prec and coef is an uint64 +// Trailing zeros wll be removed and the prec will also be adjusted +func NewFromUint64(coef uint64, prec uint8) (Decimal, error) { + if prec > defaultPrec { + return Decimal{}, ErrPrecOutOfRange } - return newDecimal(false, bintFromU64(coef), scale), nil + return newDecimal(false, bintFromU64(coef), prec), nil } // MustFromUint64 similars to NewFromUint64, but panics instead of returning error -func MustFromUint64(coef uint64, scale uint8) Decimal { - d, err := NewFromUint64(coef, scale) +func MustFromUint64(coef uint64, prec uint8) Decimal { + d, err := NewFromUint64(coef, prec) if err != nil { panic(err) } @@ -187,26 +192,26 @@ func MustFromUint64(coef uint64, scale uint8) Decimal { return d } -// NewFromInt64 returns a decimal which equals to coef / 10^scale and coef is an int64. -// Trailing zeros wll be removed and the scale will also be adjusted -func NewFromInt64(coef int64, scale uint8) (Decimal, error) { +// NewFromInt64 returns a decimal which equals to coef / 10^prec and coef is an int64. +// Trailing zeros wll be removed and the prec will also be adjusted +func NewFromInt64(coef int64, prec uint8) (Decimal, error) { var neg bool if coef < 0 { neg = true coef = -coef } - if scale > defaultScale { - return Decimal{}, ErrScaleOutOfRange + if prec > defaultPrec { + return Decimal{}, ErrPrecOutOfRange } // nolint: gosec - return newDecimal(neg, bintFromU64(uint64(coef)), scale), nil + return newDecimal(neg, bintFromU64(uint64(coef)), prec), nil } // MustFromInt64 similars to NewFromInt64, but panics instead of returning error -func MustFromInt64(coef int64, scale uint8) Decimal { - d, err := NewFromInt64(coef, scale) +func MustFromInt64(coef int64, prec uint8) Decimal { + d, err := NewFromInt64(coef, prec) if err != nil { panic(err) } @@ -215,11 +220,13 @@ func MustFromInt64(coef int64, scale uint8) Decimal { } // NewFromFloat64 returns decimal from float64. -// !!!NOTE: you'll expect to lose some precision for this method due to FormatFloat. See: https://stackoverflow.com/questions/21895756/why-are-floating-point-numbers-inaccurate -// This method is suitable for small numbers with small precision. e.g. 1.0001, 0.0001, -123.456, -1000000.123456 -// If you don't want to lose any precision, use Parse with string input instead // -// Returns error if: +// **NOTE**: you'll expect to lose some precision for this method due to FormatFloat. See: https://github.com/golang/go/issues/29491 +// +// This method is only suitable for small numbers with low precision. e.g. 1.0001, 0.0001, -123.456, -1000000.123456. +// You should avoid using this method if your input number has high precision. +// +// Returns error when: // 1. f is NaN or Inf // 2. error when parsing float to string and then to decimal func NewFromFloat64(f float64) (Decimal, error) { @@ -260,8 +267,6 @@ func (d Decimal) InexactFloat64() float64 { // Parse parses a number in string to Decimal. // The string must be in the format of: [+-]d{1,19}[.d{1,19}] // -// Examples: "123", "-123", "123.456", "-123.456", "+123.456", "0.123". -// // Returns error if: // 1. empty/invalid string // 2. the number has more than 19 digits after the decimal point @@ -279,17 +284,16 @@ func parseBytes(b []byte) (Decimal, error) { b = b[1 : len(b)-1] } - neg, bint, scale, err := parseBint(b) + neg, bint, prec, err := parseBint(b) if err != nil { return Decimal{}, err } - return newDecimal(neg, bint, scale), nil + return newDecimal(neg, bint, prec), nil } -// MustParse parses a number in string to Decimal. -// Panic on error +// MustParse similars to Parse, but pacnis instead of returning error. func MustParse(s string) Decimal { d, err := Parse(s) if err != nil { @@ -304,22 +308,22 @@ func (d Decimal) Add(e Decimal) Decimal { dcoef, ecoef := d.coef, e.coef var ( - scale uint8 + prec uint8 ) switch { - case d.scale == e.scale: - scale = d.scale - case d.scale > e.scale: - scale = d.scale - ecoef = ecoef.Mul(bintFromU128(pow10[d.scale-e.scale])) - case d.scale < e.scale: - scale = e.scale - dcoef = dcoef.Mul(bintFromU128(pow10[e.scale-d.scale])) + case d.prec == e.prec: + prec = d.prec + case d.prec > e.prec: + prec = d.prec + ecoef = ecoef.Mul(bintFromU128(pow10[d.prec-e.prec])) + case d.prec < e.prec: + prec = e.prec + dcoef = dcoef.Mul(bintFromU128(pow10[e.prec-d.prec])) } if d.neg == e.neg { - return newDecimal(d.neg, dcoef.Add(ecoef), scale) + return newDecimal(d.neg, dcoef.Add(ecoef), prec) } // different sign @@ -327,17 +331,17 @@ func (d Decimal) Add(e Decimal) Decimal { case 1: // dcoef > ecoef, subtract can't overflow coef, _ := dcoef.Sub(ecoef) - return newDecimal(d.neg, coef, scale) + return newDecimal(d.neg, coef, prec) default: // dcoef <= ecoef coef, _ := ecoef.Sub(dcoef) - return newDecimal(e.neg, coef, scale) + return newDecimal(e.neg, coef, prec) } } // Add64 returns d + e where e is a uint64 func (d Decimal) Add64(e uint64) Decimal { - ecoef := bintFromU64(e).Mul(bintFromU128(pow10[d.scale])) + ecoef := bintFromU64(e).Mul(bintFromU128(pow10[d.prec])) if d.neg { var ( @@ -354,11 +358,11 @@ func (d Decimal) Add64(e uint64) Decimal { neg = false } - return newDecimal(neg, dcoef, d.scale) + return newDecimal(neg, dcoef, d.prec) } dcoef := d.coef.Add(ecoef) - return newDecimal(false, dcoef, d.scale) + return newDecimal(false, dcoef, d.prec) } // Sub returns d - e @@ -366,24 +370,24 @@ func (d Decimal) Sub(e Decimal) Decimal { dcoef, ecoef := d.coef, e.coef var ( - scale uint8 + prec uint8 ) switch { - case d.scale == e.scale: - scale = d.scale - case d.scale > e.scale: - scale = d.scale - ecoef = ecoef.Mul(bintFromU128(pow10[d.scale-e.scale])) - case d.scale < e.scale: - scale = e.scale - dcoef = dcoef.Mul(bintFromU128(pow10[e.scale-d.scale])) + case d.prec == e.prec: + prec = d.prec + case d.prec > e.prec: + prec = d.prec + ecoef = ecoef.Mul(bintFromU128(pow10[d.prec-e.prec])) + case d.prec < e.prec: + prec = e.prec + dcoef = dcoef.Mul(bintFromU128(pow10[e.prec-d.prec])) } if d.neg != e.neg { // different sign coef := dcoef.Add(ecoef) - return newDecimal(d.neg, coef, scale) + return newDecimal(d.neg, coef, prec) } // same sign @@ -391,17 +395,17 @@ func (d Decimal) Sub(e Decimal) Decimal { case 1: // dcoef > ecoef, subtract can't overflow coef, _ := dcoef.Sub(ecoef) - return newDecimal(d.neg, coef, scale) + return newDecimal(d.neg, coef, prec) default: // dcoef <= ecoef coef, _ := ecoef.Sub(dcoef) - return newDecimal(!d.neg, coef, scale) + return newDecimal(!d.neg, coef, prec) } } // Sub64 returns d - e where e is a uint64 func (d Decimal) Sub64(e uint64) Decimal { - ecoef := bintFromU64(e).Mul(bintFromU128(pow10[d.scale])) + ecoef := bintFromU64(e).Mul(bintFromU128(pow10[d.prec])) if !d.neg { var ( @@ -418,23 +422,23 @@ func (d Decimal) Sub64(e uint64) Decimal { neg = true } - return newDecimal(neg, dcoef, d.scale) + return newDecimal(neg, dcoef, d.prec) } - return newDecimal(true, d.coef.Add(ecoef), d.scale) + return newDecimal(true, d.coef.Add(ecoef), d.prec) } // Mul returns d * e. -// The result will have at most defaultScale digits after the decimal point. +// The result will have at most defaultPrec digits after the decimal point. func (d Decimal) Mul(e Decimal) Decimal { if e.coef.IsZero() { return Decimal{} } - scale := d.scale + e.scale + prec := d.prec + e.prec neg := d.neg != e.neg - v, err := tryMulU128(d, e, neg, scale) + v, err := tryMulU128(d, e, neg, prec) if err == nil { return v } @@ -444,40 +448,40 @@ func (d Decimal) Mul(e Decimal) Decimal { eBig := e.coef.GetBig() dBig.Mul(dBig, eBig) - if scale <= defaultScale { - return newDecimal(neg, bintFromBigInt(dBig), scale) + if prec <= defaultPrec { + return newDecimal(neg, bintFromBigInt(dBig), prec) } - q, _ := new(big.Int).QuoRem(dBig, pow10[scale-defaultScale].ToBigInt(), new(big.Int)) - return newDecimal(neg, bintFromBigInt(q), defaultScale) + q, _ := new(big.Int).QuoRem(dBig, pow10[prec-defaultPrec].ToBigInt(), new(big.Int)) + return newDecimal(neg, bintFromBigInt(q), defaultPrec) } -func tryMulU128(d, e Decimal, neg bool, scale uint8) (Decimal, error) { +func tryMulU128(d, e Decimal, neg bool, prec uint8) (Decimal, error) { if d.coef.overflow || e.coef.overflow { return Decimal{}, errOverflow } rcoef := d.coef.u128.MulToU256(e.coef.u128) - if scale <= defaultScale { + if prec <= defaultPrec { if !rcoef.carry.IsZero() { return Decimal{}, errOverflow } coef := u128{hi: rcoef.hi, lo: rcoef.lo} - return newDecimal(neg, bintFromU128(coef), scale), nil + return newDecimal(neg, bintFromU128(coef), prec), nil } - q, err := rcoef.fastQuo(pow10[scale-defaultScale]) + q, err := rcoef.fastQuo(pow10[prec-defaultPrec]) if err != nil { return Decimal{}, err } - return newDecimal(neg, bintFromU128(q), defaultScale), nil + return newDecimal(neg, bintFromU128(q), defaultPrec), nil } // Mul64 returns d * e where e is a uint64. -// The result will have at most defaultScale digits after the decimal point. +// The result will have at most defaultPrec digits after the decimal point. func (d Decimal) Mul64(v uint64) Decimal { if v == 0 { return Decimal{} @@ -490,7 +494,7 @@ func (d Decimal) Mul64(v uint64) Decimal { if !d.coef.overflow { coef, err := d.coef.u128.Mul64(v) if err == nil { - return newDecimal(d.neg, bintFromU128(coef), d.scale) + return newDecimal(d.neg, bintFromU128(coef), d.prec) } } @@ -498,11 +502,12 @@ func (d Decimal) Mul64(v uint64) Decimal { dBig := d.coef.GetBig() dBig.Mul(dBig, new(big.Int).SetUint64(v)) - return newDecimal(d.neg, bintFromBigInt(dBig), d.scale) + return newDecimal(d.neg, bintFromBigInt(dBig), d.prec) } -// Div returns d / e +// Div returns d / e. // If the result has more than 19 fraction digits, it will be truncated to 19 digits. +// // Returns divide by zero error when e is zero func (d Decimal) Div(e Decimal) (Decimal, error) { if e.coef.IsZero() { @@ -517,8 +522,8 @@ func (d Decimal) Div(e Decimal) (Decimal, error) { } // Need to multiply divident with factor - // to make sure the total decimal number after the decimal point is defaultScale - factor := defaultScale - (d.scale - e.scale) + // to make sure the total decimal number after the decimal point is defaultPrec + factor := defaultPrec - (d.prec - e.prec) // overflow, try with *big.Int dBig := d.coef.GetBig() @@ -526,17 +531,7 @@ func (d Decimal) Div(e Decimal) (Decimal, error) { dBig.Mul(dBig, pow10[factor].ToBigInt()) dBig.Div(dBig, eBig) - return newDecimal(neg, bintFromBigInt(dBig), defaultScale), nil -} - -// DivExact returns d / e with exact scale. The result will be truncated to the specified scale. No rounding is performed. -func (d Decimal) DivExact(e Decimal, scale uint8) (Decimal, error) { - q, err := d.Div(e) - if err != nil { - return Decimal{}, err - } - - return q.Trunc(scale), nil + return newDecimal(neg, bintFromBigInt(dBig), defaultPrec), nil } func tryDivU128(d, e Decimal, neg bool) (Decimal, error) { @@ -545,8 +540,8 @@ func tryDivU128(d, e Decimal, neg bool) (Decimal, error) { } // Need to multiply divident with factor - // to make sure the total decimal number after the decimal point is defaultScale - factor := defaultScale - (d.scale - e.scale) + // to make sure the total decimal number after the decimal point is defaultPrec + factor := defaultPrec - (d.prec - e.prec) d256 := d.coef.u128.MulToU256(pow10[factor]) quo, err := d256.fastQuo(e.coef.u128) @@ -554,11 +549,12 @@ func tryDivU128(d, e Decimal, neg bool) (Decimal, error) { return Decimal{}, err } - return newDecimal(neg, bintFromU128(quo), defaultScale), nil + return newDecimal(neg, bintFromU128(quo), defaultPrec), nil } -// Div64 returns d / e where e is a uint64 +// Div64 returns d / e where e is a uint64. // If the result has more than 19 fraction digits, it will be truncated to 19 digits. +// // Returns divide by zero error when e is zero func (d Decimal) Div64(v uint64) (Decimal, error) { if v == 0 { @@ -570,27 +566,27 @@ func (d Decimal) Div64(v uint64) (Decimal, error) { } if !d.coef.overflow { - d256 := d.coef.u128.MulToU256(pow10[defaultScale-d.scale]) + d256 := d.coef.u128.MulToU256(pow10[defaultPrec-d.prec]) quo, _, err := d256.quoRem64Tou128(v) if err == nil { - return newDecimal(d.neg, bintFromU128(quo), defaultScale), nil + return newDecimal(d.neg, bintFromU128(quo), defaultPrec), nil } } // overflow, try with *big.Int dBig := d.coef.GetBig() - dBig.Mul(dBig, pow10[defaultScale-d.scale].ToBigInt()) + dBig.Mul(dBig, pow10[defaultPrec-d.prec].ToBigInt()) dBig.Div(dBig, new(big.Int).SetUint64(v)) - return newDecimal(d.neg, bintFromBigInt(dBig), defaultScale), nil + return newDecimal(d.neg, bintFromBigInt(dBig), defaultPrec), nil } -// Scale returns decimal scale -func (d Decimal) Scale() int { - return int(d.scale) +// Prec returns decimal precision +func (d Decimal) Prec() int { + return int(d.prec) } -// cmp compares two decimals d,e and returns: +// Cmp compares two decimals d,e and returns: // // -1 if d < e // 0 if d == e @@ -623,14 +619,14 @@ func (d Decimal) cmpDecSameSign(e Decimal) int { dBig := d.coef.GetBig() eBig := e.coef.GetBig() - if d.scale == e.scale { + if d.prec == e.prec { return dBig.Cmp(eBig) } - if d.scale < e.scale { - dBig.Mul(dBig, pow10[e.scale-d.scale].ToBigInt()) + if d.prec < e.prec { + dBig.Mul(dBig, pow10[e.prec-d.prec].ToBigInt()) } else { - eBig.Mul(eBig, pow10[d.scale-e.scale].ToBigInt()) + eBig.Mul(eBig, pow10[d.prec-e.prec].ToBigInt()) } return dBig.Cmp(eBig) @@ -641,56 +637,58 @@ func tryCmpU128(d, e Decimal) (int, error) { return 0, errOverflow } - if d.scale == e.scale { + if d.prec == e.prec { return d.coef.u128.Cmp(e.coef.u128), nil } - // scale is different + // prec is different // e has more fraction digits - if d.scale < e.scale { + if d.prec < e.prec { // d has more fraction digits - d256 := d.coef.u128.MulToU256(pow10[e.scale-d.scale]) + d256 := d.coef.u128.MulToU256(pow10[e.prec-d.prec]) return d256.cmp128(e.coef.u128), nil } // d has more fraction digits - // we need to compare d with e * 10^(d.scale - e.scale) - e256 := e.coef.u128.MulToU256(pow10[d.scale-e.scale]) + // we need to compare d with e * 10^(d.prec - e.prec) + e256 := e.coef.u128.MulToU256(pow10[d.prec-e.prec]) // remember to reverse the result because e256.cmp128(d.coef) returns the opposite return -e256.cmp128(d.coef.u128), nil } -// Rescale returns the decimal with the new scale only if the new scale is greater than the current scale. -// Useful when you want to increase the scale of the decimal for display purposes. +// Rescale returns the decimal with the new prec only if the new prec is greater than the current prec. +// Useful when you want to increase the prec of the decimal for display purposes. // // Example: // -// d := MustParse("123.456") // 123.456, scale = 3 -// d.rescale(5) // 123.45600, scale = 5 -func (d Decimal) rescale(scale uint8) Decimal { - if scale > maxScale { - scale = maxScale +// d := MustParse("123.456") // 123.456, prec = 3 +// d.rescale(5) // 123.45600, prec = 5 +func (d Decimal) rescale(prec uint8) Decimal { + dTrim := d.trimTrailingZeros() + + if prec > maxPrec { + prec = maxPrec } - if scale <= d.scale { - return d + if prec <= dTrim.prec { + return dTrim } - diff := scale - d.scale - coef := d.coef.Mul(bintFromU128(pow10[diff])) + diff := prec - dTrim.prec + coef := dTrim.coef.Mul(bintFromU128(pow10[diff])) - return newDecimal(d.neg, coef, scale) + return newDecimal(dTrim.neg, coef, prec) } // Neg returns -d func (d Decimal) Neg() Decimal { - return Decimal{neg: !d.neg, coef: d.coef, scale: d.scale} + return Decimal{neg: !d.neg, coef: d.coef, prec: d.prec} } // Abs returns |d| func (d Decimal) Abs() Decimal { - return Decimal{neg: false, coef: d.coef, scale: d.scale} + return Decimal{neg: false, coef: d.coef, prec: d.prec} } // Sign returns: @@ -736,20 +734,20 @@ func (d Decimal) IsPos() bool { return !d.neg && !d.coef.IsZero() } -// RoundBank uses half up to even (banker's rounding) to round the decimal to the specified scale. +// RoundBank uses half up to even (banker's rounding) to round the decimal to the specified prec. // // Examples: // -// Round(1.12345, 4) = 1.1234 -// Round(1.12335, 4) = 1.1234 -// Round(1.5, 0) = 2 -// Roung(-1.5, 0) = -2 -func (d Decimal) RoundBank(scale uint8) Decimal { - if scale >= d.scale { +// RoundBank(1.12345, 4) = 1.1234 +// RoundBank(1.12335, 4) = 1.1234 +// RoundBank(1.5, 0) = 2 +// RoundBank(-1.5, 0) = -2 +func (d Decimal) RoundBank(prec uint8) Decimal { + if prec >= d.prec { return d } - factor := pow10[d.scale-scale] + factor := pow10[d.prec-prec] lo := factor.lo / 2 if !d.coef.overflow { @@ -761,7 +759,7 @@ func (d Decimal) RoundBank(scale uint8) Decimal { // no overflow, return the result if err == nil { - return newDecimal(d.neg, bintFromU128(q), scale) + return newDecimal(d.neg, bintFromU128(q), prec) } } @@ -774,10 +772,10 @@ func (d Decimal) RoundBank(scale uint8) Decimal { q.Add(q, bigOne) } - return newDecimal(d.neg, bintFromBigInt(q), scale) + return newDecimal(d.neg, bintFromBigInt(q), prec) } -// RoundHAZ rounds the decimal to the specified scale using HALF AWAY FROM ZERO method (https://en.wikipedia.org/wiki/Rounding#Rounding_half_away_from_zero). +// RoundHAZ rounds the decimal to the specified prec using HALF AWAY FROM ZERO method (https://en.wikipedia.org/wiki/Rounding#Rounding_half_away_from_zero). // // Examples: // @@ -785,12 +783,12 @@ func (d Decimal) RoundBank(scale uint8) Decimal { // Round(1.12335, 4) = 1.1234 // Round(1.5, 0) = 2 // Round(-1.5, 0) = -2 -func (d Decimal) RoundHAZ(scale uint8) Decimal { - if scale >= d.scale { +func (d Decimal) RoundHAZ(prec uint8) Decimal { + if prec >= d.prec { return d } - factor := pow10[d.scale-scale] + factor := pow10[d.prec-prec] lo, _ := factor.QuoRem64(2) if !d.coef.overflow { @@ -801,7 +799,7 @@ func (d Decimal) RoundHAZ(scale uint8) Decimal { } if err == nil { - return newDecimal(d.neg, bintFromU128(q), scale) + return newDecimal(d.neg, bintFromU128(q), prec) } } @@ -814,10 +812,10 @@ func (d Decimal) RoundHAZ(scale uint8) Decimal { q.Add(q, bigOne) } - return newDecimal(d.neg, bintFromBigInt(q), scale) + return newDecimal(d.neg, bintFromBigInt(q), prec) } -// RoundHTZ rounds the decimal to the specified scale using HALF TOWARD ZERO method (https://en.wikipedia.org/wiki/Rounding#Rounding_half_toward_zero). +// RoundHTZ rounds the decimal to the specified prec using HALF TOWARD ZERO method (https://en.wikipedia.org/wiki/Rounding#Rounding_half_toward_zero). // // Examples: // @@ -825,12 +823,12 @@ func (d Decimal) RoundHAZ(scale uint8) Decimal { // Round(1.12335, 4) = 1.1233 // Round(1.5, 0) = 1 // Round(-1.5, 0) = -1 -func (d Decimal) RoundHTZ(scale uint8) Decimal { - if scale >= d.scale { +func (d Decimal) RoundHTZ(prec uint8) Decimal { + if prec >= d.prec { return d } - factor := pow10[d.scale-scale] + factor := pow10[d.prec-prec] lo, _ := factor.QuoRem64(2) if !d.coef.overflow { @@ -841,7 +839,7 @@ func (d Decimal) RoundHTZ(scale uint8) Decimal { } if err == nil { - return newDecimal(d.neg, bintFromU128(q), scale) + return newDecimal(d.neg, bintFromU128(q), prec) } } @@ -854,25 +852,18 @@ func (d Decimal) RoundHTZ(scale uint8) Decimal { q.Add(q, bigOne) } - return newDecimal(d.neg, bintFromBigInt(q), scale) + return newDecimal(d.neg, bintFromBigInt(q), prec) } // Floor returns the largest integer value less than or equal to d. -// -// Examples: -// -// Floor(1.12345) = 1 -// Floor(1.12335) = 1 -// Floor(1.5, 0) = 1 -// Floor(-1.5, 0) = -2 func (d Decimal) Floor() Decimal { - if d.scale == 0 { + if d.prec == 0 { return d } if !d.coef.overflow { var err error - q, r := d.coef.u128.QuoRem64(pow10[d.scale].lo) + q, r := d.coef.u128.QuoRem64(pow10[d.prec].lo) // add 1 if it's negative and there's a remainder, e.g. -1.5 -> -2 if d.neg && r != 0 { @@ -886,7 +877,7 @@ func (d Decimal) Floor() Decimal { // overflow, fallback to big.Int dBig := d.coef.GetBig() - q, r := new(big.Int).QuoRem(dBig, pow10[d.scale].ToBigInt(), new(big.Int)) + q, r := new(big.Int).QuoRem(dBig, pow10[d.prec].ToBigInt(), new(big.Int)) // add 1 if it's negative and there's a remainder, e.g. -1.5 -> -2 if d.neg && r.Cmp(bigZero) != 0 { @@ -897,21 +888,14 @@ func (d Decimal) Floor() Decimal { } // Ceil returns the smallest integer value greater than or equal to d. -// -// Examples: -// -// Ceil(1.12345, 4) = 1.1235 -// Ceil(1.12335, 4) = 1.1234 -// Ceil(1.5, 0) = 2 -// Ceil(-1.5, 0) = -1 func (d Decimal) Ceil() Decimal { - if d.scale == 0 { + if d.prec == 0 { return d } if !d.coef.overflow { var err error - q, r := d.coef.u128.QuoRem64(pow10[d.scale].lo) + q, r := d.coef.u128.QuoRem64(pow10[d.prec].lo) // add 1 if it's positive and there's a remainder, e.g. 1.5 -> 2 if !d.neg && r != 0 { @@ -925,7 +909,7 @@ func (d Decimal) Ceil() Decimal { // overflow, fallback to big.Int dBig := d.coef.GetBig() - q, r := new(big.Int).QuoRem(dBig, pow10[d.scale].ToBigInt(), new(big.Int)) + q, r := new(big.Int).QuoRem(dBig, pow10[d.prec].ToBigInt(), new(big.Int)) // add 1 if it's positive and there's a remainder, e.g. 1.5 -> 2 if !d.neg && r.Cmp(bigZero) != 0 { @@ -935,28 +919,28 @@ func (d Decimal) Ceil() Decimal { return newDecimal(d.neg, bintFromBigInt(q), 0) } -// Trunc returns d after truncating the decimal to the specified scale. +// Trunc returns d after truncating the decimal to the specified prec. // // Examples: // // Trunc(1.12345, 4) = 1.1234 // Trunc(1.12335, 4) = 1.1233 -func (d Decimal) Trunc(scale uint8) Decimal { - if scale >= d.scale { +func (d Decimal) Trunc(prec uint8) Decimal { + if prec >= d.prec { return d } - factor := pow10[d.scale-scale] + factor := pow10[d.prec-prec] if !d.coef.overflow { q, _ := d.coef.u128.QuoRem64(factor.lo) - return newDecimal(d.neg, bintFromU128(q), scale) + return newDecimal(d.neg, bintFromU128(q), prec) } // overflow, fallback to big.Int dBig := d.coef.GetBig() q := new(big.Int).Quo(dBig, factor.ToBigInt()) - return newDecimal(d.neg, bintFromBigInt(q), scale) + return newDecimal(d.neg, bintFromBigInt(q), prec) } func (d Decimal) trimTrailingZeros() Decimal { @@ -964,45 +948,45 @@ func (d Decimal) trimTrailingZeros() Decimal { zeros := trailingZerosBigInt(d.coef.bigInt) var ( - dBig = d.coef.GetBig() - scale uint8 + dBig = d.coef.GetBig() + prec uint8 ) if zeros == 0 { - return newDecimal(d.neg, bintFromBigInt(dBig), d.scale) + return newDecimal(d.neg, bintFromBigInt(dBig), d.prec) } - if zeros >= d.scale { - dBig.Div(dBig, pow10[d.scale].ToBigInt()) - scale = 0 + if zeros >= d.prec { + dBig.Div(dBig, pow10[d.prec].ToBigInt()) + prec = 0 } else { - scale = d.scale - uint8(zeros) + prec = d.prec - uint8(zeros) dBig.Div(dBig, pow10[zeros].ToBigInt()) } - return newDecimal(d.neg, bintFromBigInt(dBig), scale) + return newDecimal(d.neg, bintFromBigInt(dBig), prec) } zeros := trailingZerosU128(d.coef.u128) if zeros == 0 { - return newDecimal(d.neg, bintFromU128(d.coef.u128), d.scale) + return newDecimal(d.neg, bintFromU128(d.coef.u128), d.prec) } var ( - coef u128 - scale uint8 + coef u128 + prec uint8 ) - if zeros >= d.scale { - coef, _, _ = d.coef.u128.QuoRem(pow10[d.scale]) - scale = 0 + if zeros >= d.prec { + coef, _, _ = d.coef.u128.QuoRem(pow10[d.prec]) + prec = 0 } else { - scale = d.scale - zeros + prec = d.prec - zeros coef, _, _ = d.coef.u128.QuoRem(pow10[zeros]) } d.coef = bintFromU128(coef) - d.scale = scale + d.prec = prec return d } @@ -1016,7 +1000,7 @@ func trailingZerosBigInt(n *big.Int) uint8 { if m.Cmp(bigZero) == 0 { zeros += 16 - // shortcut because maxScale = 19 + // shortcut because maxPrec = 19 _, m = z.QuoRem(n, pow10Big[zeros+2], m) if m.Cmp(bigZero) == 0 { zeros += 2 @@ -1132,10 +1116,10 @@ func (d Decimal) PowInt(e int) Decimal { // overflow, fallback to big.Int dBig := dTrim.coef.GetBig() factor := 0 - powScale := int(dTrim.scale) * e - if powScale >= int(defaultScale) { - factor = powScale - int(defaultScale) - powScale = int(defaultScale) + powPrecision := int(dTrim.prec) * e + if powPrecision >= int(defaultPrec) { + factor = powPrecision - int(defaultPrec) + powPrecision = int(defaultPrec) } m := new(big.Int).Exp(bigTen, big.NewInt(int64(factor)), nil) @@ -1148,7 +1132,7 @@ func (d Decimal) PowInt(e int) Decimal { } // nolint: gosec - return newDecimal(neg, bintFromBigInt(qBig), uint8(powScale)) + return newDecimal(neg, bintFromBigInt(qBig), uint8(powPrecision)) } // powIntInverse returns d^(-e), with e > 0 @@ -1160,10 +1144,10 @@ func (d Decimal) powIntInverse(e int) Decimal { // overflow, fallback to big.Int dBig := d.coef.GetBig() - powScale := int(d.scale) * e + powPrecision := int(d.prec) * e - // d^(-e) = 10^(defaultScale + e) / d^e (with defaultScale digits after the decimal point) - m := new(big.Int).Exp(bigTen, big.NewInt(int64(powScale+int(defaultScale))), nil) + // d^(-e) = 10^(defaultPrec + e) / d^e (with defaultPrec digits after the decimal point) + m := new(big.Int).Exp(bigTen, big.NewInt(int64(powPrecision+int(defaultPrec))), nil) dBig = new(big.Int).Exp(dBig, big.NewInt(int64(e)), nil) qBig := dBig.Quo(m, dBig) @@ -1172,7 +1156,7 @@ func (d Decimal) powIntInverse(e int) Decimal { neg = false } - return newDecimal(neg, bintFromBigInt(qBig), defaultScale) + return newDecimal(neg, bintFromBigInt(qBig), defaultPrec) } func (d Decimal) tryPowIntU128(e int) (Decimal, error) { @@ -1191,15 +1175,15 @@ func (d Decimal) tryPowIntU128(e int) (Decimal, error) { neg = false } - powScale := int(d.scale) * e - if powScale > int(defaultScale)+38 { + powPrecision := int(d.prec) * e + if powPrecision > int(defaultPrec)+38 { return Decimal{}, errOverflow } factor := 0 - if powScale > int(defaultScale) { - factor = powScale - int(defaultScale) - powScale = int(defaultScale) + if powPrecision > int(defaultPrec) { + factor = powPrecision - int(defaultPrec) + powPrecision = int(defaultPrec) } d256 := u256{lo: d.coef.u128.lo, hi: d.coef.u128.hi} @@ -1214,7 +1198,7 @@ func (d Decimal) tryPowIntU128(e int) (Decimal, error) { } // nolint: gosec - return newDecimal(neg, bintFromU128(u128{hi: result.hi, lo: result.lo}), uint8(powScale)), nil + return newDecimal(neg, bintFromU128(u128{hi: result.hi, lo: result.lo}), uint8(powPrecision)), nil } if result.carry.hi != 0 { @@ -1226,7 +1210,7 @@ func (d Decimal) tryPowIntU128(e int) (Decimal, error) { return Decimal{}, err } - return newDecimal(neg, bintFromU128(q), defaultScale), nil + return newDecimal(neg, bintFromU128(q), defaultPrec), nil } func (d Decimal) tryInversePowIntU128(e int) (Decimal, error) { @@ -1245,15 +1229,15 @@ func (d Decimal) tryInversePowIntU128(e int) (Decimal, error) { neg = false } - powScale := int(d.scale) * e - if powScale > int(defaultScale)+38 { + powPrecision := int(d.prec) * e + if powPrecision > int(defaultPrec)+38 { return Decimal{}, errOverflow } factor := 0 - if powScale > int(defaultScale) { - factor = powScale - int(defaultScale) - powScale = int(defaultScale) + if powPrecision > int(defaultPrec) { + factor = powPrecision - int(defaultPrec) + powPrecision = int(defaultPrec) } d256 := u256{lo: d.coef.u128.lo, hi: d.coef.u128.hi} @@ -1268,14 +1252,14 @@ func (d Decimal) tryInversePowIntU128(e int) (Decimal, error) { } // nolint: gosec - a256 := one128.MulToU256(pow10[defaultScale+uint8(powScale)]) + a256 := one128.MulToU256(pow10[defaultPrec+uint8(powPrecision)]) q, err := a256.fastQuo(u128{hi: result.hi, lo: result.lo}) if err != nil { return Decimal{}, err } - return newDecimal(neg, bintFromU128(q), defaultScale), nil + return newDecimal(neg, bintFromU128(q), defaultPrec), nil } // if result is not u128, one solution is adjusting it to u128 by dividing it with 10^factor @@ -1285,19 +1269,19 @@ func (d Decimal) tryInversePowIntU128(e int) (Decimal, error) { return Decimal{}, errOverflow } - // a256 = 10^(powScale + factor + defaultScale) + // a256 = 10^(powPrecision + factor + defaultPrec) // nolint: gosec - a256 := pow10[factor].MulToU256(pow10[defaultScale+uint8(powScale)]) + a256 := pow10[factor].MulToU256(pow10[defaultPrec+uint8(powPrecision)]) q, err := a256.fastQuo(u128{hi: result.hi, lo: result.lo}) if err != nil { return Decimal{}, err } - return newDecimal(neg, bintFromU128(q), defaultScale), nil + return newDecimal(neg, bintFromU128(q), defaultPrec), nil } // Sqrt returns the square root of d using Newton-Raphson method. -// The result will have at most defaultScale digits after the decimal point. +// The result will have at most defaultPrec digits after the decimal point. // Returns error if d < 0 // // Examples: @@ -1326,13 +1310,13 @@ func (d Decimal) Sqrt() (Decimal, error) { // overflow, fallback to big.Int dBig := d.coef.GetBig() - factor := 2*defaultScale - d.scale + factor := 2*defaultPrec - d.prec coef := dBig.Mul(dBig, pow10[factor].ToBigInt()) - return newDecimal(false, bintFromBigInt(coef.Sqrt(coef)), defaultScale), nil + return newDecimal(false, bintFromBigInt(coef.Sqrt(coef)), defaultPrec), nil } func (d Decimal) sqrtU128() (Decimal, error) { - factor := 2*defaultScale - d.scale + factor := 2*defaultPrec - d.prec coef := d.coef.u128.MulToU256(pow10[factor]) if coef.carry.hi != 0 { @@ -1366,5 +1350,5 @@ func (d Decimal) sqrtU128() (Decimal, error) { x = x1 } - return newDecimal(false, bintFromU128(x), defaultScale), nil + return newDecimal(false, bintFromU128(x), defaultPrec), nil } diff --git a/decimal_test.go b/decimal_test.go index 5ad38da..c000ff1 100644 --- a/decimal_test.go +++ b/decimal_test.go @@ -10,24 +10,24 @@ import ( "github.com/stretchr/testify/require" ) -func TestSetDefaultScale(t *testing.T) { - // NOTE: must be careful with tests that change the default scale +func TestSetDefaultPrecision(t *testing.T) { + // NOTE: must be careful with tests that change the default prec // it can affect other tests, especially tests in different packages which can run in parallel - defer SetDefaultPrecision(maxScale) + defer SetDefaultPrecision(maxPrec) - require.Equal(t, uint8(19), defaultScale) + require.Equal(t, uint8(19), defaultPrec) SetDefaultPrecision(10) - require.Equal(t, uint8(10), defaultScale) + require.Equal(t, uint8(10), defaultPrec) - // expect panic if scale is 0 - require.PanicsWithValue(t, "scale must be greater than 0", func() { + // expect panic if prec is 0 + require.PanicsWithValue(t, "prec must be greater than 0", func() { SetDefaultPrecision(0) }) - // expect panic if scale is > maxScale - require.PanicsWithValue(t, fmt.Sprintf("scale out of range. Only allow maximum %d digits after the decimal points", maxScale), func() { - SetDefaultPrecision(maxScale + 1) + // expect panic if prec is > maxPrec + require.PanicsWithValue(t, fmt.Sprintf("precision out of range. Only allow maximum %d digits after the decimal points", maxPrec), func() { + SetDefaultPrecision(maxPrec + 1) }) } @@ -35,7 +35,7 @@ func TestNewFromHiLo(t *testing.T) { testcases := []struct { neg bool hi, lo uint64 - scale uint8 + prec uint8 want string wantErr error }{ @@ -51,12 +51,12 @@ func TestNewFromHiLo(t *testing.T) { {false, 1234567890123456789, 1234567890123456789, 10, "2277375791072698140349073869.1264577813", nil}, {false, math.MaxUint64, math.MaxUint64, 19, "34028236692093846346.3374607431768211455", nil}, {true, 1234567890123456789, 1234567890123456789, 0, "-22773757910726981403490738691264577813", nil}, - {false, math.MaxUint64, math.MaxUint64, 20, "", ErrScaleOutOfRange}, + {false, math.MaxUint64, math.MaxUint64, 20, "", ErrPrecOutOfRange}, } for _, tc := range testcases { t.Run(fmt.Sprintf("%d %d", tc.hi, tc.lo), func(t *testing.T) { - d, err := NewFromHiLo(tc.neg, tc.hi, tc.lo, tc.scale) + d, err := NewFromHiLo(tc.neg, tc.hi, tc.lo, tc.prec) if tc.wantErr != nil { require.Equal(t, tc.wantErr, err) return @@ -122,8 +122,8 @@ func TestParse(t *testing.T) { {"-.1234567890123456789012345678901234567890123456", "", fmt.Errorf("%w: can't parse '-.1234567890123456789012345678901234567890123456' to Decimal", ErrInvalidFormat)}, {"1.12345678901234567890123.45678901234567890123456", "", fmt.Errorf("%w: can't parse '1.12345678901234567890123.45678901234567890123456' to Decimal", ErrInvalidFormat)}, {"340282366920938463463374607431768211459.123+--", "", fmt.Errorf("%w: can't parse '340282366920938463463374607431768211459.123+--' to Decimal", ErrInvalidFormat)}, - {"1.234567890123456789012348901", "", ErrScaleOutOfRange}, - {"1.123456789012345678912345678901234567890123456", "", ErrScaleOutOfRange}, + {"1.234567890123456789012348901", "", ErrPrecOutOfRange}, + {"1.123456789012345678912345678901234567890123456", "", ErrPrecOutOfRange}, {"", "", ErrEmptyString}, {".", "", fmt.Errorf("%w: can't parse '.' to Decimal", ErrInvalidFormat)}, {"123.", "", fmt.Errorf("%w: can't parse '123.' to Decimal", ErrInvalidFormat)}, @@ -186,7 +186,7 @@ func TestMustParse(t *testing.T) { {"12345678901234567890.123456789", nil}, {"1234567890123456789123456789012345678901", nil}, {"340282366920938463463374607431768211459", nil}, - {"1.234567890123456789012348901", ErrScaleOutOfRange}, + {"1.234567890123456789012348901", ErrPrecOutOfRange}, {"", ErrEmptyString}, {".", fmt.Errorf("%w: can't parse '.' to Decimal", ErrInvalidFormat)}, {"123.", fmt.Errorf("%w: can't parse '123.' to Decimal", ErrInvalidFormat)}, @@ -225,7 +225,7 @@ func TestMustParse(t *testing.T) { func TestNewFromInt64(t *testing.T) { testcases := []struct { input int64 - scale uint8 // scale of decimal + prec uint8 // prec of decimal s string wantErr error }{ @@ -236,8 +236,8 @@ func TestNewFromInt64(t *testing.T) { {10000, 4, "1", nil}, {10000, 5, "0.1", nil}, {123456000, 6, "123.456", nil}, - {0, 20, "0", ErrScaleOutOfRange}, - {0, 41, "0", ErrScaleOutOfRange}, + {0, 20, "0", ErrPrecOutOfRange}, + {0, 41, "0", ErrPrecOutOfRange}, {1, 0, "1", nil}, {-1, 0, "-1", nil}, {1, 5, "0.00001", nil}, @@ -252,7 +252,7 @@ func TestNewFromInt64(t *testing.T) { for _, tc := range testcases { t.Run(strconv.FormatInt(tc.input, 10), func(t *testing.T) { - d, err := NewFromInt64(tc.input, tc.scale) + d, err := NewFromInt64(tc.input, tc.prec) if tc.wantErr != nil { require.Equal(t, tc.wantErr, err) return @@ -267,7 +267,7 @@ func TestNewFromInt64(t *testing.T) { func TestMustFromInt64(t *testing.T) { testcases := []struct { input int64 - scale uint8 // scale of decimal + prec uint8 // prec of decimal s string wantErr error }{ @@ -278,8 +278,8 @@ func TestMustFromInt64(t *testing.T) { {10000, 4, "1", nil}, {10000, 5, "0.1", nil}, {123456000, 6, "123.456", nil}, - {0, 20, "0", ErrScaleOutOfRange}, - {0, 41, "0", ErrScaleOutOfRange}, + {0, 20, "0", ErrPrecOutOfRange}, + {0, 41, "0", ErrPrecOutOfRange}, {1, 0, "1", nil}, {-1, 0, "-1", nil}, {1, 5, "0.00001", nil}, @@ -296,12 +296,12 @@ func TestMustFromInt64(t *testing.T) { t.Run(strconv.FormatInt(tc.input, 10), func(t *testing.T) { if tc.wantErr != nil { require.PanicsWithError(t, tc.wantErr.Error(), func() { - _ = MustFromInt64(tc.input, tc.scale) + _ = MustFromInt64(tc.input, tc.prec) }) return } - d := MustFromInt64(tc.input, tc.scale) + d := MustFromInt64(tc.input, tc.prec) require.Equal(t, tc.s, d.String()) }) } @@ -310,7 +310,7 @@ func TestMustFromInt64(t *testing.T) { func TestNewFromUint64(t *testing.T) { testcases := []struct { input uint64 - scale uint8 // scale of decimal + prec uint8 // prec of decimal s string wantErr error }{ @@ -321,8 +321,8 @@ func TestNewFromUint64(t *testing.T) { {10000, 4, "1", nil}, {10000, 5, "0.1", nil}, {123456000, 6, "123.456", nil}, - {0, 20, "0", ErrScaleOutOfRange}, - {0, 41, "0", ErrScaleOutOfRange}, + {0, 20, "0", ErrPrecOutOfRange}, + {0, 41, "0", ErrPrecOutOfRange}, {1, 0, "1", nil}, {1, 5, "0.00001", nil}, {1, 19, "0.0000000000000000001", nil}, @@ -332,7 +332,7 @@ func TestNewFromUint64(t *testing.T) { for _, tc := range testcases { t.Run(strconv.FormatUint(tc.input, 10), func(t *testing.T) { - d, err := NewFromUint64(tc.input, tc.scale) + d, err := NewFromUint64(tc.input, tc.prec) if tc.wantErr != nil { require.Equal(t, tc.wantErr, err) return @@ -347,7 +347,7 @@ func TestNewFromUint64(t *testing.T) { func TestMustFromUint64(t *testing.T) { testcases := []struct { input uint64 - scale uint8 // scale of decimal + prec uint8 // prec of decimal s string wantErr error }{ @@ -358,8 +358,8 @@ func TestMustFromUint64(t *testing.T) { {10000, 4, "1", nil}, {10000, 5, "0.1", nil}, {123456000, 6, "123.456", nil}, - {0, 20, "0", ErrScaleOutOfRange}, - {0, 41, "0", ErrScaleOutOfRange}, + {0, 20, "0", ErrPrecOutOfRange}, + {0, 41, "0", ErrPrecOutOfRange}, {1, 0, "1", nil}, {1, 5, "0.00001", nil}, {1, 19, "0.0000000000000000001", nil}, @@ -371,12 +371,12 @@ func TestMustFromUint64(t *testing.T) { t.Run(strconv.FormatUint(tc.input, 10), func(t *testing.T) { if tc.wantErr != nil { require.PanicsWithError(t, tc.wantErr.Error(), func() { - _ = MustFromUint64(tc.input, tc.scale) + _ = MustFromUint64(tc.input, tc.prec) }) return } - d := MustFromUint64(tc.input, tc.scale) + d := MustFromUint64(tc.input, tc.prec) require.Equal(t, tc.s, d.String()) }) } @@ -549,7 +549,7 @@ func TestAdd(t *testing.T) { bb := decimal.RequireFromString(tc.b) // nolint: gosec - prec := int32(c.Scale()) + prec := int32(c.Prec()) cc := aa.Add(bb).Truncate(prec) require.Equal(t, cc.String(), c.String()) @@ -596,7 +596,7 @@ func TestAdd64(t *testing.T) { aa := decimal.RequireFromString(tc.a) bb := decimal.NewFromUint64(tc.b) - prec := int32(c.Scale()) + prec := int32(c.Prec()) cc := aa.Add(bb).Truncate(prec) require.Equal(t, cc.String(), c.String()) @@ -672,7 +672,7 @@ func TestSub(t *testing.T) { aa := decimal.RequireFromString(tc.a) bb := decimal.RequireFromString(tc.b) - prec := int32(c.Scale()) + prec := int32(c.Prec()) cc := aa.Sub(bb).Truncate(prec) require.Equal(t, cc.String(), c.String()) @@ -720,7 +720,7 @@ func TestSub64(t *testing.T) { aa := decimal.RequireFromString(tc.a) bb := decimal.NewFromUint64(tc.b) - prec := int32(c.Scale()) + prec := int32(c.Prec()) cc := aa.Sub(bb).Truncate(prec) require.Equal(t, cc.String(), c.String()) @@ -794,7 +794,7 @@ func TestMul(t *testing.T) { aa := decimal.RequireFromString(tc.a) bb := decimal.RequireFromString(tc.b) - prec := int32(c.Scale()) + prec := int32(c.Prec()) cc := aa.Mul(bb).Truncate(prec) require.Equal(t, cc.String(), c.String()) @@ -845,7 +845,7 @@ func TestMul64(t *testing.T) { aa := decimal.RequireFromString(tc.a) bb := decimal.NewFromUint64(tc.b) - prec := int32(c.Scale()) + prec := int32(c.Prec()) cc := aa.Mul(bb).Truncate(prec) require.Equal(t, cc.String(), c.String()) @@ -927,7 +927,7 @@ func TestDiv(t *testing.T) { aa := decimal.RequireFromString(tc.a) bb := decimal.RequireFromString(tc.b) - prec := int32(c.Scale()) + prec := int32(c.Prec()) cc := aa.DivRound(bb, 28).Truncate(prec) // sometimes shopspring/decimal does rounding differently @@ -943,96 +943,9 @@ func TestDiv(t *testing.T) { } } -func TestDivExact(t *testing.T) { - testcases := []struct { - a, b string - scale uint8 - overflow bool - wantErr error - }{ - {"123456.1234567890123456789", "234567.1234567890123456789", 3, false, nil}, - {"123456.1234567890123456789", "1", 2, false, nil}, - {"-123456.1234567890123456789", "234567.1234567890123456789", 8, false, nil}, - {"123456.1234567890123456789", "-234567.1234567890123456789", 9, false, nil}, - {"-123456.1234567890123456789", "-234567.1234567890123456789", 1, false, nil}, - {"9999999999999999999", "1.0001", 12, false, nil}, - {"-9999999999999999999.9999999999999999999", "9999999999999999999", 16, false, nil}, - {"1234567890123456789", "1", 17, false, nil}, - {"1234567890123456789", "2", 9, false, nil}, - {"123456789012345678.9", "0.1", 8, false, nil}, - {"1111111111111", "1111.123456789123456789", 7, false, nil}, - {"123456789", "1.1234567890123456789", 10, false, nil}, - {"2345678901234567899", "1234567890123456789.1234567890123456789", 4, false, nil}, - {"0.1234567890123456789", "0.04586201546101", 5, false, nil}, - {"1", "1111.123456789123456789", 6, false, nil}, - {"1", "1.123456789123456789", 6, false, nil}, - {"1", "2", 6, false, nil}, - {"1", "3", 6, false, nil}, - {"1", "4", 6, false, nil}, - {"1", "5", 6, false, nil}, - {"1234567890123456789.1234567890123456879", "1111.1789", 11, false, nil}, - {"123456789123456789.123456789", "3.123456789", 11, false, nil}, - {"123456789123456789.123456789", "3", 11, false, nil}, - {"9999999999999999999", "1234567890123456789.1234567890123456879", 11, false, nil}, - {"9999999999999999999.999999999999999999", "1000000000000000000.1234567890123456789", 11, false, nil}, - {"999999999999999999", "0.100000000000001", 11, false, nil}, - {"123456789123456789.123456789", "0", 11, false, ErrDivideByZero}, - {"1000000000000", "0.0000001", 11, false, nil}, - {"1234567890123456789.1234567890123456789", "0.0000000000000000002", 12, true, nil}, - {"1234567890123456789.1234567890123456789", "0.000000001", 12, true, nil}, - {"1000000000000000000000000.1234567890123456789", "-100000000000000000000", 12, true, nil}, - {"1234567890123456789012345678901234567890.1234567890123456789", "1234567890123456789012345678901234567890.1234567890123456789", 12, true, nil}, - {"1234567890123456789012345678901234567890.1234567890123456789", "-1234567890123456789012345678901234567890.1234567890123456789", 12, true, nil}, - {"-1234567890123456789012345678901234567890.1234567890123456789", "1234567890123456789012345678901234567890.1234567890123456789", 12, true, nil}, - {"-1234567890123456789012345678901234567890.1234567890123456789", "-1234567890123456789012345678901234567890.1234567890123456789", 12, true, nil}, - } - - for _, tc := range testcases { - t.Run(tc.a+"/"+tc.b, func(t *testing.T) { - a, err := Parse(tc.a) - require.NoError(t, err) - - b, err := Parse(tc.b) - require.NoError(t, err) - - aStr := a.String() - bStr := b.String() - - c, err := a.DivExact(b, tc.scale) - if tc.wantErr != nil { - require.Equal(t, tc.wantErr, err) - return - } - - require.NoError(t, err) - - assertOverflow(t, c, tc.overflow) - - // make sure a and b are immutable - require.Equal(t, aStr, a.String()) - require.Equal(t, bStr, b.String()) - - // compare with shopspring/decimal - aa := decimal.RequireFromString(tc.a) - bb := decimal.RequireFromString(tc.b) - - cc := aa.DivRound(bb, 28).Truncate(int32(tc.scale)) - // sometimes shopspring/decimal does rounding differently - // e.g. 0.099999999999999 -> 0.1 - // so to check the result, we can check the difference - // between our result and shopspring/decimal result - // valid result should be less than or equal to 1e-19, which is our smallest unit - d := MustParse(cc.String()) - e := c.Sub(d) - - require.LessOrEqual(t, e.Abs().Cmp(oneUnit), 0, "expected %s, got %s", cc.String(), c.String()) - }) - } -} - -func TestDivWithCustomScale(t *testing.T) { +func TestDivWithCustomPrecision(t *testing.T) { SetDefaultPrecision(14) - defer SetDefaultPrecision(maxScale) + defer SetDefaultPrecision(maxPrec) testcases := []struct { a, b string @@ -1040,11 +953,11 @@ func TestDivWithCustomScale(t *testing.T) { wantErr error parseErr error }{ - {"123456.1234567890123456789", "1", false, nil, ErrScaleOutOfRange}, - {"123456.1234567890123456789", "234567.1234567890123456789", false, nil, ErrScaleOutOfRange}, - {"-123456.1234567890123456789", "234567.1234567890123456789", false, nil, ErrScaleOutOfRange}, - {"123456.1234567890123456789", "-234567.1234567890123456789", false, nil, ErrScaleOutOfRange}, - {"-123456.1234567890123456789", "-234567.1234567890123456789", false, nil, ErrScaleOutOfRange}, + {"123456.1234567890123456789", "1", false, nil, ErrPrecOutOfRange}, + {"123456.1234567890123456789", "234567.1234567890123456789", false, nil, ErrPrecOutOfRange}, + {"-123456.1234567890123456789", "234567.1234567890123456789", false, nil, ErrPrecOutOfRange}, + {"123456.1234567890123456789", "-234567.1234567890123456789", false, nil, ErrPrecOutOfRange}, + {"-123456.1234567890123456789", "-234567.1234567890123456789", false, nil, ErrPrecOutOfRange}, {"9999999999999999999", "1.0001", false, nil, nil}, {"-9999999999999999999.99999999999999", "9999999999999999999", false, nil, nil}, {"1234567890123456789", "1", false, nil, nil}, @@ -1111,7 +1024,7 @@ func TestDivWithCustomScale(t *testing.T) { aa := decimal.RequireFromString(tc.a) bb := decimal.RequireFromString(tc.b) - prec := int32(c.Scale()) + prec := int32(c.Prec()) cc := aa.DivRound(bb, 28).Truncate(prec) // sometimes shopspring/decimal does rounding differently @@ -1178,7 +1091,7 @@ func TestDiv64(t *testing.T) { aa := decimal.RequireFromString(tc.a) bb := decimal.NewFromUint64(tc.b) - prec := int32(c.Scale()) + prec := int32(c.Prec()) cc := aa.DivRound(bb, 24).Truncate(prec) // sometimes shopspring/decimal does rounding differently @@ -1247,7 +1160,7 @@ func TestCmp(t *testing.T) { } } -func TestCmpWithDifferentScale(t *testing.T) { +func TestCmpWithDifferentPrecision(t *testing.T) { testcases := []struct { a1, a2, b string want int @@ -1338,7 +1251,7 @@ func TestSign(t *testing.T) { func TestRoundBank(t *testing.T) { testcases := []struct { a string - scale uint8 + prec uint8 want string overflow bool }{ @@ -1423,13 +1336,13 @@ func TestRoundBank(t *testing.T) { } for _, tc := range testcases { - t.Run(fmt.Sprintf("%s.round(%d)", tc.a, tc.scale), func(t *testing.T) { + t.Run(fmt.Sprintf("%s.round(%d)", tc.a, tc.prec), func(t *testing.T) { a, err := Parse(tc.a) require.NoError(t, err) aStr := a.String() - b := a.RoundBank(tc.scale) + b := a.RoundBank(tc.prec) assertOverflow(t, b, tc.overflow) // make sure a is immutable @@ -1439,7 +1352,7 @@ func TestRoundBank(t *testing.T) { // cross check with shopspring/decimal aa := decimal.RequireFromString(tc.a) - aa = aa.RoundBank(int32(tc.scale)) + aa = aa.RoundBank(int32(tc.prec)) require.Equal(t, aa.String(), b.String()) }) @@ -1449,7 +1362,7 @@ func TestRoundBank(t *testing.T) { func TestRoundHalfAwayFromZero(t *testing.T) { testcases := []struct { a string - scale uint8 + prec uint8 want string overflow bool }{ @@ -1534,13 +1447,13 @@ func TestRoundHalfAwayFromZero(t *testing.T) { } for _, tc := range testcases { - t.Run(fmt.Sprintf("%s.roundHAZ(%d)", tc.a, tc.scale), func(t *testing.T) { + t.Run(fmt.Sprintf("%s.roundHAZ(%d)", tc.a, tc.prec), func(t *testing.T) { a, err := Parse(tc.a) require.NoError(t, err) aStr := a.String() - b := a.RoundHAZ(tc.scale) + b := a.RoundHAZ(tc.prec) assertOverflow(t, a, tc.overflow) require.Equal(t, tc.want, b.String()) @@ -1551,7 +1464,7 @@ func TestRoundHalfAwayFromZero(t *testing.T) { // NOTE: shopspring/decimal roundup somehow similars to ceil, not round half up away from zero // Waiting this one to be merged: https://github.com/shopspring/decimal/pull/378 // aa := decimal.RequireFromString(tc.a) - // aa = aa.RoundUp(int32(tc.scale)) + // aa = aa.RoundUp(int32(tc.prec)) // require.Equal(t, aa.String(), a.String()) }) @@ -1561,7 +1474,7 @@ func TestRoundHalfAwayFromZero(t *testing.T) { func TestRoundHalfTowardZero(t *testing.T) { testcases := []struct { a string - scale uint8 + prec uint8 want string overflow bool }{ @@ -1648,13 +1561,13 @@ func TestRoundHalfTowardZero(t *testing.T) { } for _, tc := range testcases { - t.Run(fmt.Sprintf("%s.round(%d)", tc.a, tc.scale), func(t *testing.T) { + t.Run(fmt.Sprintf("%s.round(%d)", tc.a, tc.prec), func(t *testing.T) { a, err := Parse(tc.a) require.NoError(t, err) aStr := a.String() - b := a.RoundHTZ(tc.scale) + b := a.RoundHTZ(tc.prec) assertOverflow(t, a, tc.overflow) require.Equal(t, tc.want, b.String()) @@ -1666,7 +1579,7 @@ func TestRoundHalfTowardZero(t *testing.T) { // NOTE: shopspring/decimal roundup somehow similars to ceil, not round half up away from zero // Waiting this one to be merged: https://github.com/shopspring/decimal/pull/378 // aa := decimal.RequireFromString(tc.a) - // aa = aa.RoundUp(int32(tc.scale)) + // aa = aa.RoundUp(int32(tc.prec)) // require.Equal(t, aa.String(), a.String()) }) @@ -1819,9 +1732,9 @@ func TestCeil(t *testing.T) { func TestTrunc(t *testing.T) { testcases := []struct { - a string - scale uint8 - want string + a string + prec uint8 + want string }{ {"123456789012345678901234567890123456789.9999999999999999999", 0, "123456789012345678901234567890123456789"}, {"-123456789012345678901234567890123456789.9999999999999999999", 0, "-123456789012345678901234567890123456789"}, @@ -1911,13 +1824,13 @@ func TestTrunc(t *testing.T) { } for _, tc := range testcases { - t.Run(fmt.Sprintf("%s.trunc(%d)", tc.a, tc.scale), func(t *testing.T) { + t.Run(fmt.Sprintf("%s.trunc(%d)", tc.a, tc.prec), func(t *testing.T) { a, err := Parse(tc.a) require.NoError(t, err) aStr := a.String() - b := a.Trunc(tc.scale) + b := a.Trunc(tc.prec) require.Equal(t, tc.want, b.String()) // make sure a is immutable @@ -1925,7 +1838,7 @@ func TestTrunc(t *testing.T) { // cross check with shopspring/decimal aa := decimal.RequireFromString(tc.a) - aa = aa.Truncate(int32(tc.scale)) + aa = aa.Truncate(int32(tc.prec)) require.Equal(t, aa.String(), b.String()) }) @@ -1934,11 +1847,11 @@ func TestTrunc(t *testing.T) { func TestTrimTrailingZeros(t *testing.T) { testcases := []struct { - neg bool - coef bint - scale uint8 - want string - wantScale uint8 + neg bool + coef bint + prec uint8 + want string + wantPrecision uint8 }{ {false, bintFromU128(pow10[25]), 19, "1000000", 0}, {false, bintFromU128(pow10[24]), 19, "100000", 0}, @@ -2026,18 +1939,18 @@ func TestTrimTrailingZeros(t *testing.T) { for i, tc := range testcases { t.Run(fmt.Sprintf("%d", i), func(t *testing.T) { - // d := newDecimal{neg: tc.neg, coef: tc.coef, scale: tc.scale} - d := newDecimal(tc.neg, tc.coef, tc.scale) - d1 := newDecimal(tc.neg, tc.coef, tc.scale) + // d := newDecimal{neg: tc.neg, coef: tc.coef, prec: tc.prec} + d := newDecimal(tc.neg, tc.coef, tc.prec) + d1 := newDecimal(tc.neg, tc.coef, tc.prec) dTrim := d.trimTrailingZeros() require.Equal(t, tc.want, dTrim.String()) - require.Equal(t, tc.wantScale, dTrim.scale) + require.Equal(t, tc.wantPrecision, dTrim.prec) // d and d1 should be the same require.Equal(t, d1.String(), d.String()) - require.Equal(t, d1.scale, d.scale) + require.Equal(t, d1.prec, d.prec) }) } } @@ -2085,10 +1998,10 @@ func TestPowInt(t *testing.T) { // cross check with shopspring/decimal aa := decimal.RequireFromString(tc.a) - aa, err = aa.PowWithPrecision(decimal.New(int64(tc.b), 0), int32(b.scale)+4) + aa, err = aa.PowWithPrecision(decimal.New(int64(tc.b), 0), int32(b.prec)+4) require.NoError(t, err) - aa = aa.Truncate(int32(b.scale)) + aa = aa.Truncate(int32(b.prec)) require.Equal(t, aa.String(), b.String()) }) @@ -2120,10 +2033,10 @@ func TestRandomPow(t *testing.T) { b := a.PowInt(i) aa := decimal.RequireFromString(input) - aa, err := aa.PowWithPrecision(decimal.New(int64(i), 0), int32(b.scale)+4) + aa, err := aa.PowWithPrecision(decimal.New(int64(i), 0), int32(b.prec)+4) require.NoError(t, err) - aa = aa.Truncate(int32(b.scale)) + aa = aa.Truncate(int32(b.prec)) require.Equal(t, aa.String(), b.String(), "%s.pow(%d)", input, i) } @@ -2138,10 +2051,10 @@ func TestRandomPow(t *testing.T) { b := a.PowInt(i) aa := decimal.RequireFromString(input) - aa, err := aa.PowWithPrecision(decimal.New(int64(i), 0), int32(b.scale)+4) + aa, err := aa.PowWithPrecision(decimal.New(int64(i), 0), int32(b.prec)+4) require.NoError(t, err) - aa = aa.Truncate(int32(b.scale)) + aa = aa.Truncate(int32(b.prec)) require.Equal(t, aa.String(), b.String(), "%s.pow(%d)", input, i) } @@ -2189,10 +2102,10 @@ func TestSqrt(t *testing.T) { // cross check with shopspring/decimal aa := decimal.RequireFromString(tc.a) - aa, err = aa.PowWithPrecision(decimal.RequireFromString("0.5"), int32(b.scale)+4) + aa, err = aa.PowWithPrecision(decimal.RequireFromString("0.5"), int32(b.prec)+4) require.NoError(t, err) - a1 := decimal.RequireFromString(b.String()).Sub(aa).Truncate(int32(b.scale)) + a1 := decimal.RequireFromString(b.String()).Sub(aa).Truncate(int32(b.prec)) require.True(t, a1.IsZero()) }) } @@ -2211,10 +2124,10 @@ func TestRandomSqrt(t *testing.T) { // cross check with shopspring/decimal aa := decimal.RequireFromString(input) - aa, err = aa.PowWithPrecision(decimal.RequireFromString("0.5"), int32(a.scale)+4) + aa, err = aa.PowWithPrecision(decimal.RequireFromString("0.5"), int32(a.prec)+4) require.NoError(t, err) - a1 := decimal.RequireFromString(a.String()).Sub(aa).Truncate(int32(a.scale)) + a1 := decimal.RequireFromString(a.String()).Sub(aa).Truncate(int32(a.prec)) require.True(t, a1.IsZero()) } } diff --git a/doc_test.go b/doc_test.go index 3655d68..59df7d2 100644 --- a/doc_test.go +++ b/doc_test.go @@ -1,16 +1,438 @@ package udecimal -import "fmt" +import ( + "fmt" + + "github.com/aws/aws-sdk-go-v2/service/dynamodb/types" +) func ExampleSetDefaultPrecision() { + SetDefaultPrecision(10) + defer SetDefaultPrecision(19) + a := MustParse("1.23") b := MustParse("4.12475") - c, _ := a.Div(b) - SetDefaultPrecision(10) + fmt.Println(c) + // Output: + // 0.2981998909 +} + +func ExampleMustFromFloat64() { + fmt.Println(MustFromFloat64(1.234)) + + // cautious: result will lose some precision when converting to decimal + fmt.Println(MustFromFloat64(123456789.1234567890123456789)) + // Output: + // 1.234 + // 123456789.12345679 +} + +func ExampleNewFromFloat64() { + fmt.Println(NewFromFloat64(1.234)) + + // cautious: result will lose some precision when converting to decimal + fmt.Println(NewFromFloat64(123456789.1234567890123456789)) + // Output: + // 1.234 + // 123456789.12345679 +} + +func ExampleMustFromInt64() { + fmt.Println(MustFromInt64(123, 3)) + fmt.Println(MustFromInt64(-12345, 2)) + // Output: + // 0.123 + // -123.45 +} + +func ExampleNewFromInt64() { + fmt.Println(NewFromInt64(123, 3)) + fmt.Println(NewFromInt64(12345, 20)) + // Output: + // 0.123 + // 0 precision out of range. Only support maximum 19 digits after the decimal point +} + +func ExampleMustFromUint64() { + fmt.Println(MustFromUint64(123, 3)) + fmt.Println(MustFromUint64(12345, 2)) + // Output: + // 0.123 + // 123.45 +} + +func ExampleNewFromUint64() { + fmt.Println(NewFromUint64(123, 3)) + fmt.Println(NewFromUint64(12345, 2)) + fmt.Println(NewFromUint64(12345, 20)) + // Output: + // 0.123 + // 123.45 + // 0 precision out of range. Only support maximum 19 digits after the decimal point +} + +func ExampleMustParse() { + fmt.Println(MustParse("1234567890123456789.1234567890123456789")) + fmt.Println(MustParse("-1234567890123456789.1234567890123456789")) + fmt.Println(MustParse("-0.00007890123456789")) + // Output: + // 1234567890123456789.1234567890123456789 + // -1234567890123456789.1234567890123456789 + // -0.00007890123456789 +} + +func ExampleParse() { + fmt.Println(Parse("1234567890123456789.1234567890123456789")) + fmt.Println(Parse("-1234567890123456789.1234567890123456789")) + fmt.Println(Parse("-0.00007890123456789")) + + // error cases + fmt.Println(Parse("0.12345678901234567890123")) + fmt.Println(Parse("")) + fmt.Println(Parse("1.123.123")) + + // Output: + // 1234567890123456789.1234567890123456789 + // -1234567890123456789.1234567890123456789 + // -0.00007890123456789 + // 0 precision out of range. Only support maximum 19 digits after the decimal point + // 0 parse empty string + // 0 invalid format: can't parse '1.123.123' to Decimal +} + +func ExampleNewFromHiLo() { + fmt.Println(NewFromHiLo(false, 1, 1, 10)) + fmt.Println(NewFromHiLo(true, 0, 123456, 4)) + // Output: + // 1844674407.3709551617 + // -12.3456 +} + +func ExampleDecimal_Abs() { + fmt.Println(MustParse("-123.45").Abs()) + // Output: + // 123.45 +} +func ExampleDecimal_Add() { + a := MustParse("1.23") + b := MustParse("4.12475") + c := a.Add(b) fmt.Println(c) + // Output: + // 5.35475 +} +func ExampleDecimal_Add64() { + a := MustParse("1.23") + c := a.Add64(4) + fmt.Println(c) // Output: - // 0.2981998909 + // 5.23 +} + +func ExampleDecimal_Ceil() { + fmt.Println(MustParse("1.23").Ceil()) + // Output: + // 2 +} + +func ExampleDecimal_Cmp() { + fmt.Println(MustParse("1.23").Cmp(MustParse("4.12475"))) + fmt.Println(MustParse("1.23").Cmp(MustParse("1.23"))) + fmt.Println(MustParse("1.23").Cmp(MustParse("0.12475"))) + // Output: + // -1 + // 0 + // 1 +} + +func ExampleDecimal_Div() { + fmt.Println(MustParse("1.23").Div(MustParse("4.12475"))) + fmt.Println(MustParse("1.23").Div(MustParse("0"))) + // Output: + // 0.2981998909024789381 + // 0 can't divide by zero +} + +func ExampleDecimal_Div64() { + fmt.Println(MustParse("1.23").Div64(4)) + fmt.Println(MustParse("1.23").Div64(0)) + // Output: + // 0.3075 + // 0 can't divide by zero +} + +func ExampleDecimal_Sub() { + a := MustParse("1.23") + b := MustParse("4.12475") + c := a.Sub(b) + fmt.Println(c) + // Output: + // -2.89475 +} + +func ExampleDecimal_Sub64() { + a := MustParse("1.23") + c := a.Sub64(4) + fmt.Println(c) + // Output: + // -2.77 +} + +func ExampleDecimal_Mul() { + a := MustParse("1.23") + b := MustParse("4.12475") + c := a.Mul(b) + fmt.Println(c) + // Output: + // 5.0734425 +} + +func ExampleDecimal_Mul64() { + a := MustParse("1.23") + c := a.Mul64(4) + fmt.Println(c) + // Output: + // 4.92 +} + +func ExampleDecimal_Floor() { + fmt.Println(MustParse("1.23").Floor()) + fmt.Println(MustParse("-1.23").Floor()) + // Output: + // 1 + // -2 +} + +func ExampleDecimal_InexactFloat64() { + fmt.Println(MustParse("1.23").InexactFloat64()) + fmt.Println(MustParse("123456789.123456789").InexactFloat64()) + // Output: + // 1.23 + // 1.2345678912345679e+08 +} + +func ExampleDecimal_IsNeg() { + fmt.Println(MustParse("1.23").IsNeg()) + fmt.Println(MustParse("-1.23").IsNeg()) + fmt.Println(MustParse("0").IsNeg()) + // Output: + // false + // true + // false +} + +func ExampleDecimal_IsPos() { + fmt.Println(MustParse("1.23").IsPos()) + fmt.Println(MustParse("-1.23").IsPos()) + fmt.Println(MustParse("0").IsPos()) + // Output: + // true + // false + // false +} + +func ExampleDecimal_IsZero() { + fmt.Println(MustParse("1.23").IsZero()) + fmt.Println(MustParse("0").IsZero()) + // Output: + // false + // true +} + +func ExampleDecimal_MarshalBinary() { + fmt.Println(MustParse("1.23").MarshalBinary()) + fmt.Println(MustParse("-1.2345").MarshalBinary()) + fmt.Println(MustParse("1234567890123456789.1234567890123456789").MarshalBinary()) + // Output: + // [0 2 11 0 0 0 0 0 0 0 123] + // [1 4 11 0 0 0 0 0 0 48 57] + // [0 19 19 9 73 176 246 240 2 51 19 211 181 5 249 181 241 129 21] +} + +func ExampleDecimal_MarshalDynamoDBAttributeValue() { + fmt.Println(MustParse("1.23").MarshalDynamoDBAttributeValue()) + fmt.Println(MustParse("-1.2345").MarshalDynamoDBAttributeValue()) + fmt.Println(MustParse("1234567890123456789.1234567890123456789").MarshalDynamoDBAttributeValue()) + // Output: + // &{1.23 {}} + // &{-1.2345 {}} + // &{1234567890123456789.1234567890123456789 {}} +} + +func ExampleDecimal_MarshalJSON() { + a, _ := MustParse("1.23").MarshalJSON() + b, _ := MustParse("-1.2345").MarshalJSON() + c, _ := MustParse("1234567890123456789.1234567890123456789").MarshalJSON() + fmt.Println(string(a)) + fmt.Println(string(b)) + fmt.Println(string(c)) + // Output: + // 1.23 + // -1.2345 + // 1234567890123456789.1234567890123456789 +} + +func ExampleDecimal_Neg() { + fmt.Println(MustParse("1.23").Neg()) + fmt.Println(MustParse("-1.23").Neg()) + // Output: + // -1.23 + // 1.23 +} + +func ExampleDecimal_PowInt() { + fmt.Println(MustParse("1.23").PowInt(2)) + fmt.Println(MustParse("1.23").PowInt(0)) + fmt.Println(MustParse("1.23").PowInt(-2)) + // Output: + // 1.5129 + // 1 + // 0.6609822195782933439 +} + +func ExampleDecimal_Prec() { + fmt.Println(MustParse("1.23").Prec()) + // Output: + // 2 +} + +func ExampleDecimal_RoundBank() { + fmt.Println(MustParse("1.12345").RoundBank(4)) + fmt.Println(MustParse("1.12335").RoundBank(4)) + fmt.Println(MustParse("1.5").RoundBank(0)) + fmt.Println(MustParse("-1.5").RoundBank(0)) + // Output: + // 1.1234 + // 1.1234 + // 2 + // -2 +} + +func ExampleDecimal_RoundHAZ() { + fmt.Println(MustParse("1.12345").RoundHAZ(4)) + fmt.Println(MustParse("1.12335").RoundHAZ(4)) + fmt.Println(MustParse("1.5").RoundHAZ(0)) + fmt.Println(MustParse("-1.5").RoundHAZ(0)) + // Output: + // 1.1235 + // 1.1234 + // 2 + // -2 +} + +func ExampleDecimal_RoundHTZ() { + fmt.Println(MustParse("1.12345").RoundHTZ(4)) + fmt.Println(MustParse("1.12335").RoundHTZ(4)) + fmt.Println(MustParse("1.5").RoundHTZ(0)) + fmt.Println(MustParse("-1.5").RoundHTZ(0)) + // Output: + // 1.1234 + // 1.1233 + // 1 + // -1 +} + +func ExampleDecimal_Scan() { + var a Decimal + _ = a.Scan("1.23") + fmt.Println(a) + // Output: + // 1.23 +} + +func ExampleDecimal_Sign() { + fmt.Println(MustParse("1.23").Sign()) + fmt.Println(MustParse("-1.23").Sign()) + fmt.Println(MustParse("0").Sign()) + // Output: + // 1 + // -1 + // 0 +} + +func ExampleDecimal_Sqrt() { + fmt.Println(MustParse("1.21").Sqrt()) + fmt.Println(MustParse("0").Sqrt()) + fmt.Println(MustParse("-1.21").Sqrt()) + // Output: + // 1.1 + // 0 + // 0 can't calculate square root of negative number +} + +func ExampleDecimal_String() { + fmt.Println(MustParse("1.23").String()) + fmt.Println(MustParse("-1.230000").String()) + // Output: + // 1.23 + // -1.23 +} + +func ExampleDecimal_StringFixed() { + fmt.Println(MustParse("1.23").StringFixed(4)) + fmt.Println(MustParse("-1.230000").StringFixed(5)) + // Output: + // 1.2300 + // -1.23000 +} + +func ExampleDecimal_Trunc() { + fmt.Println(MustParse("1.23").Trunc(1)) + fmt.Println(MustParse("-1.23").Trunc(5)) + // Output: + // 1.2 + // -1.23 +} + +func ExampleDecimal_UnmarshalBinary() { + var a Decimal + _ = a.UnmarshalBinary([]byte{0, 2, 11, 0, 0, 0, 0, 0, 0, 0, 123}) + fmt.Println(a) + // Output: + // 1.23 +} + +func ExampleDecimal_UnmarshalDynamoDBAttributeValue() { + var a Decimal + _ = a.UnmarshalDynamoDBAttributeValue(&types.AttributeValueMemberN{Value: "1.23"}) + fmt.Println(a) + // Output: + // 1.23 +} + +func ExampleDecimal_UnmarshalJSON() { + var a Decimal + _ = a.UnmarshalJSON([]byte("1.23")) + fmt.Println(a) + // Output: + // 1.23 +} + +func ExampleDecimal_Value() { + fmt.Println(MustParse("1.2345").Value()) + // Output: + // 1.2345 +} + +func ExampleNullDecimal_Scan() { + var a, b NullDecimal + _ = a.Scan("1.23") + _ = b.Scan(nil) + + fmt.Println(a) + fmt.Println(b) + // Output: + // {1.23 true} + // {0 false} +} + +func ExampleNullDecimal_Value() { + fmt.Println(NullDecimal{Decimal: MustParse("1.2345"), Valid: true}.Value()) + fmt.Println(NullDecimal{}.Value()) + // Output: + // 1.2345 + // } diff --git a/fuzz_test.go b/fuzz_test.go index 9880248..700dc66 100644 --- a/fuzz_test.go +++ b/fuzz_test.go @@ -14,10 +14,10 @@ import ( ) var corpus = []struct { - neg bool - hi uint64 - lo uint64 - scale uint8 + neg bool + hi uint64 + lo uint64 + prec uint8 }{ {false, 0, 0, 0}, {false, 1, 0, 0}, @@ -39,7 +39,7 @@ var corpus = []struct { {true, math.MaxUint64, math.MaxUint64, 10}, } -func ssDecimal(neg bool, hi, lo uint64, scale uint8) ss.Decimal { +func ssDecimal(neg bool, hi, lo uint64, prec uint8) ss.Decimal { bytes := make([]byte, 16) binary.BigEndian.PutUint64(bytes, hi) binary.BigEndian.PutUint64(bytes[8:], lo) @@ -50,27 +50,27 @@ func ssDecimal(neg bool, hi, lo uint64, scale uint8) ss.Decimal { bint = bint.Neg(bint) } - d := ss.NewFromBigInt(bint, -int32(scale)) + d := ss.NewFromBigInt(bint, -int32(prec)) return d } func FuzzParse(f *testing.F) { for _, c := range corpus { for _, d := range corpus { - f.Add(c.neg, c.hi, c.lo, c.scale, d.neg, d.hi, d.lo, d.scale) + f.Add(c.neg, c.hi, c.lo, c.prec, d.neg, d.hi, d.lo, d.prec) } } - f.Fuzz(func(t *testing.T, aneg bool, ahi uint64, alo uint64, ascale uint8, bneg bool, bhi uint64, blo uint64, bscale uint8) { - a, err := NewFromHiLo(aneg, ahi, alo, ascale) - if err == ErrScaleOutOfRange { + f.Fuzz(func(t *testing.T, aneg bool, ahi uint64, alo uint64, aprec uint8, bneg bool, bhi uint64, blo uint64, bprec uint8) { + a, err := NewFromHiLo(aneg, ahi, alo, aprec) + if err == ErrPrecOutOfRange { t.Skip() } else { require.NoError(t, err) } - b, err := NewFromHiLo(bneg, bhi, blo, bscale) - if err == ErrScaleOutOfRange { + b, err := NewFromHiLo(bneg, bhi, blo, bprec) + if err == ErrPrecOutOfRange { t.Skip() } else { require.NoError(t, err) @@ -94,20 +94,20 @@ func FuzzParse(f *testing.F) { func FuzzAddDec(f *testing.F) { for _, c := range corpus { for _, d := range corpus { - f.Add(c.neg, c.hi, c.lo, c.scale, d.neg, d.hi, d.lo, d.scale) + f.Add(c.neg, c.hi, c.lo, c.prec, d.neg, d.hi, d.lo, d.prec) } } - f.Fuzz(func(t *testing.T, aneg bool, ahi uint64, alo uint64, ascale uint8, bneg bool, bhi uint64, blo uint64, bscale uint8) { - a, err := NewFromHiLo(aneg, ahi, alo, ascale) - if err == ErrScaleOutOfRange { + f.Fuzz(func(t *testing.T, aneg bool, ahi uint64, alo uint64, aprec uint8, bneg bool, bhi uint64, blo uint64, bprec uint8) { + a, err := NewFromHiLo(aneg, ahi, alo, aprec) + if err == ErrPrecOutOfRange { t.Skip() } else { require.NoError(t, err) } - b, err := NewFromHiLo(bneg, bhi, blo, bscale) - if err == ErrScaleOutOfRange { + b, err := NewFromHiLo(bneg, bhi, blo, bprec) + if err == ErrPrecOutOfRange { t.Skip() } else { require.NoError(t, err) @@ -122,8 +122,8 @@ func FuzzAddDec(f *testing.F) { } // compare with shopspring/decimal - aa := ssDecimal(aneg, ahi, alo, ascale) - bb := ssDecimal(bneg, bhi, blo, bscale) + aa := ssDecimal(aneg, ahi, alo, aprec) + bb := ssDecimal(bneg, bhi, blo, bprec) cc := aa.Add(bb) require.Equal(t, cc.String(), c.String(), "add %s %s", a, b) @@ -133,13 +133,13 @@ func FuzzAddDec(f *testing.F) { func FuzzAdd64(f *testing.F) { for _, c := range corpus { for _, d := range corpus { - f.Add(c.neg, c.hi, c.lo, c.scale, d.lo) + f.Add(c.neg, c.hi, c.lo, c.prec, d.lo) } } - f.Fuzz(func(t *testing.T, aneg bool, ahi uint64, alo uint64, ascale uint8, blo uint64) { - a, err := NewFromHiLo(aneg, ahi, alo, ascale) - if err == ErrScaleOutOfRange { + f.Fuzz(func(t *testing.T, aneg bool, ahi uint64, alo uint64, aprec uint8, blo uint64) { + a, err := NewFromHiLo(aneg, ahi, alo, aprec) + if err == ErrPrecOutOfRange { t.Skip() } else { require.NoError(t, err) @@ -154,7 +154,7 @@ func FuzzAdd64(f *testing.F) { } // compare with shopspring/decimal - aa := ssDecimal(aneg, ahi, alo, ascale) + aa := ssDecimal(aneg, ahi, alo, aprec) bb := ssDecimal(false, 0, blo, 0) cc := aa.Add(bb) @@ -165,20 +165,20 @@ func FuzzAdd64(f *testing.F) { func FuzzSubDec(f *testing.F) { for _, c := range corpus { for _, d := range corpus { - f.Add(c.neg, c.hi, c.lo, c.scale, d.neg, d.hi, d.lo, d.scale) + f.Add(c.neg, c.hi, c.lo, c.prec, d.neg, d.hi, d.lo, d.prec) } } - f.Fuzz(func(t *testing.T, aneg bool, ahi uint64, alo uint64, ascale uint8, bneg bool, bhi uint64, blo uint64, bscale uint8) { - a, err := NewFromHiLo(aneg, ahi, alo, ascale) - if err == ErrScaleOutOfRange { + f.Fuzz(func(t *testing.T, aneg bool, ahi uint64, alo uint64, aprec uint8, bneg bool, bhi uint64, blo uint64, bprec uint8) { + a, err := NewFromHiLo(aneg, ahi, alo, aprec) + if err == ErrPrecOutOfRange { t.Skip() } else { require.NoError(t, err) } - b, err := NewFromHiLo(bneg, bhi, blo, bscale) - if err == ErrScaleOutOfRange { + b, err := NewFromHiLo(bneg, bhi, blo, bprec) + if err == ErrPrecOutOfRange { t.Skip() } else { require.NoError(t, err) @@ -193,8 +193,8 @@ func FuzzSubDec(f *testing.F) { } // compare with shopspring/decimal - aa := ssDecimal(aneg, ahi, alo, ascale) - bb := ssDecimal(bneg, bhi, blo, bscale) + aa := ssDecimal(aneg, ahi, alo, aprec) + bb := ssDecimal(bneg, bhi, blo, bprec) cc := aa.Sub(bb) require.Equal(t, cc.String(), c.String(), "sub %s %s", a, b) @@ -204,13 +204,13 @@ func FuzzSubDec(f *testing.F) { func FuzzSub64(f *testing.F) { for _, c := range corpus { for _, d := range corpus { - f.Add(c.neg, c.hi, c.lo, c.scale, d.lo) + f.Add(c.neg, c.hi, c.lo, c.prec, d.lo) } } - f.Fuzz(func(t *testing.T, aneg bool, ahi uint64, alo uint64, ascale uint8, blo uint64) { - a, err := NewFromHiLo(aneg, ahi, alo, ascale) - if err == ErrScaleOutOfRange { + f.Fuzz(func(t *testing.T, aneg bool, ahi uint64, alo uint64, aprec uint8, blo uint64) { + a, err := NewFromHiLo(aneg, ahi, alo, aprec) + if err == ErrPrecOutOfRange { t.Skip() } else { require.NoError(t, err) @@ -225,7 +225,7 @@ func FuzzSub64(f *testing.F) { } // compare with shopspring/decimal - aa := ssDecimal(aneg, ahi, alo, ascale) + aa := ssDecimal(aneg, ahi, alo, aprec) bb := ssDecimal(false, 0, blo, 0) cc := aa.Sub(bb) @@ -236,20 +236,20 @@ func FuzzSub64(f *testing.F) { func FuzzMulDec(f *testing.F) { for _, c := range corpus { for _, d := range corpus { - f.Add(c.neg, c.hi, c.lo, c.scale, d.neg, d.hi, d.lo, d.scale) + f.Add(c.neg, c.hi, c.lo, c.prec, d.neg, d.hi, d.lo, d.prec) } } - f.Fuzz(func(t *testing.T, aneg bool, ahi uint64, alo uint64, ascale uint8, bneg bool, bhi uint64, blo uint64, bscale uint8) { - a, err := NewFromHiLo(aneg, ahi, alo, ascale) - if err == ErrScaleOutOfRange { + f.Fuzz(func(t *testing.T, aneg bool, ahi uint64, alo uint64, aprec uint8, bneg bool, bhi uint64, blo uint64, bprec uint8) { + a, err := NewFromHiLo(aneg, ahi, alo, aprec) + if err == ErrPrecOutOfRange { t.Skip() } else { require.NoError(t, err) } - b, err := NewFromHiLo(bneg, bhi, blo, bscale) - if err == ErrScaleOutOfRange { + b, err := NewFromHiLo(bneg, bhi, blo, bprec) + if err == ErrPrecOutOfRange { t.Skip() } else { require.NoError(t, err) @@ -264,10 +264,10 @@ func FuzzMulDec(f *testing.F) { } // compare with shopspring/decimal - aa := ssDecimal(aneg, ahi, alo, ascale) - bb := ssDecimal(bneg, bhi, blo, bscale) + aa := ssDecimal(aneg, ahi, alo, aprec) + bb := ssDecimal(bneg, bhi, blo, bprec) - prec := int32(c.Scale()) + prec := int32(c.Prec()) cc := aa.Mul(bb).Truncate(prec) require.Equal(t, cc.String(), c.String(), "mul %s %s", a, b) @@ -277,13 +277,13 @@ func FuzzMulDec(f *testing.F) { func FuzzMul64(f *testing.F) { for _, c := range corpus { for _, d := range corpus { - f.Add(c.neg, c.hi, c.lo, c.scale, d.lo) + f.Add(c.neg, c.hi, c.lo, c.prec, d.lo) } } - f.Fuzz(func(t *testing.T, aneg bool, ahi uint64, alo uint64, ascale uint8, blo uint64) { - a, err := NewFromHiLo(aneg, ahi, alo, ascale) - if err == ErrScaleOutOfRange { + f.Fuzz(func(t *testing.T, aneg bool, ahi uint64, alo uint64, aprec uint8, blo uint64) { + a, err := NewFromHiLo(aneg, ahi, alo, aprec) + if err == ErrPrecOutOfRange { t.Skip() } else { require.NoError(t, err) @@ -298,10 +298,10 @@ func FuzzMul64(f *testing.F) { } // compare with shopspring/decimal - aa := ssDecimal(aneg, ahi, alo, ascale) + aa := ssDecimal(aneg, ahi, alo, aprec) bb := ssDecimal(false, 0, blo, 0) - prec := int32(c.Scale()) + prec := int32(c.Prec()) cc := aa.Mul(bb).Truncate(prec) require.Equal(t, cc.String(), c.String(), "mul64 %s %d", a, blo) @@ -311,20 +311,20 @@ func FuzzMul64(f *testing.F) { func FuzzDivDec(f *testing.F) { for _, c := range corpus { for _, d := range corpus { - f.Add(c.neg, c.hi, c.lo, c.scale, d.neg, d.hi, d.lo, d.scale) + f.Add(c.neg, c.hi, c.lo, c.prec, d.neg, d.hi, d.lo, d.prec) } } - f.Fuzz(func(t *testing.T, aneg bool, ahi uint64, alo uint64, ascale uint8, bneg bool, bhi uint64, blo uint64, bscale uint8) { - a, err := NewFromHiLo(aneg, ahi, alo, ascale) - if err == ErrScaleOutOfRange { + f.Fuzz(func(t *testing.T, aneg bool, ahi uint64, alo uint64, aprec uint8, bneg bool, bhi uint64, blo uint64, bprec uint8) { + a, err := NewFromHiLo(aneg, ahi, alo, aprec) + if err == ErrPrecOutOfRange { t.Skip() } else { require.NoError(t, err) } - b, err := NewFromHiLo(bneg, bhi, blo, bscale) - if err == ErrScaleOutOfRange { + b, err := NewFromHiLo(bneg, bhi, blo, bprec) + if err == ErrPrecOutOfRange { t.Skip() } else { require.NoError(t, err) @@ -346,10 +346,10 @@ func FuzzDivDec(f *testing.F) { require.NoError(t, err) // compare with shopspring/decimal - aa := ssDecimal(aneg, ahi, alo, ascale) - bb := ssDecimal(bneg, bhi, blo, bscale) + aa := ssDecimal(aneg, ahi, alo, aprec) + bb := ssDecimal(bneg, bhi, blo, bprec) - prec := int32(c.Scale()) + prec := int32(c.Prec()) cc := aa.DivRound(bb, 28).Truncate(prec) // sometimes shopspring/decimal does rounding differently @@ -367,13 +367,13 @@ func FuzzDivDec(f *testing.F) { func FuzzDiv64(f *testing.F) { for _, c := range corpus { for _, d := range corpus { - f.Add(c.neg, c.hi, c.lo, c.scale, d.lo) + f.Add(c.neg, c.hi, c.lo, c.prec, d.lo) } } - f.Fuzz(func(t *testing.T, aneg bool, ahi uint64, alo uint64, ascale uint8, blo uint64) { - a, err := NewFromHiLo(aneg, ahi, alo, ascale) - if err == ErrScaleOutOfRange { + f.Fuzz(func(t *testing.T, aneg bool, ahi uint64, alo uint64, aprec uint8, blo uint64) { + a, err := NewFromHiLo(aneg, ahi, alo, aprec) + if err == ErrPrecOutOfRange { t.Skip() } else { require.NoError(t, err) @@ -395,10 +395,10 @@ func FuzzDiv64(f *testing.F) { } // compare with shopspring/decimal - aa := ssDecimal(aneg, ahi, alo, ascale) + aa := ssDecimal(aneg, ahi, alo, aprec) bb := ssDecimal(false, 0, blo, 0) - prec := int32(c.Scale()) + prec := int32(c.Prec()) cc := aa.DivRound(bb, 24).Truncate(prec) // sometimes shopspring/decimal does rounding differently @@ -415,21 +415,21 @@ func FuzzDiv64(f *testing.F) { func FuzzRoundBank(f *testing.F) { for _, c := range corpus { for _, d := range corpus { - roundScale := uint8(rand.N(20)) - f.Add(c.neg, c.hi, c.lo, c.scale, d.neg, d.hi, d.lo, d.scale, roundScale) + roundPrecision := uint8(rand.N(20)) + f.Add(c.neg, c.hi, c.lo, c.prec, d.neg, d.hi, d.lo, d.prec, roundPrecision) } } - f.Fuzz(func(t *testing.T, aneg bool, ahi uint64, alo uint64, ascale uint8, bneg bool, bhi uint64, blo uint64, bscale uint8, roundScale uint8) { - a, err := NewFromHiLo(aneg, ahi, alo, ascale) - if err == ErrScaleOutOfRange { + f.Fuzz(func(t *testing.T, aneg bool, ahi uint64, alo uint64, aprec uint8, bneg bool, bhi uint64, blo uint64, bprec uint8, roundPrecision uint8) { + a, err := NewFromHiLo(aneg, ahi, alo, aprec) + if err == ErrPrecOutOfRange { t.Skip() } else { require.NoError(t, err) } - b, err := NewFromHiLo(bneg, bhi, blo, bscale) - if err == ErrScaleOutOfRange { + b, err := NewFromHiLo(bneg, bhi, blo, bprec) + if err == ErrPrecOutOfRange { t.Skip() } else { require.NoError(t, err) @@ -445,34 +445,34 @@ func FuzzRoundBank(f *testing.F) { cstr := c.String() - u8Round := uint8(roundScale) + u8Round := uint8(roundPrecision) cround := c.RoundBank(u8Round) // compare with shopspring/decimal - i32Round := int32(roundScale) + i32Round := int32(roundPrecision) cc := ss.RequireFromString(cstr).RoundBank(i32Round) - require.Equal(t, cc.String(), cround.String(), "round %s %d", c, roundScale) + require.Equal(t, cc.String(), cround.String(), "round %s %d", c, roundPrecision) }) } func FuzzFloor(f *testing.F) { for _, c := range corpus { for _, d := range corpus { - f.Add(c.neg, c.hi, c.lo, c.scale, d.neg, d.hi, d.lo, d.scale) + f.Add(c.neg, c.hi, c.lo, c.prec, d.neg, d.hi, d.lo, d.prec) } } - f.Fuzz(func(t *testing.T, aneg bool, ahi uint64, alo uint64, ascale uint8, bneg bool, bhi uint64, blo uint64, bscale uint8) { - a, err := NewFromHiLo(aneg, ahi, alo, ascale) - if err == ErrScaleOutOfRange { + f.Fuzz(func(t *testing.T, aneg bool, ahi uint64, alo uint64, aprec uint8, bneg bool, bhi uint64, blo uint64, bprec uint8) { + a, err := NewFromHiLo(aneg, ahi, alo, aprec) + if err == ErrPrecOutOfRange { t.Skip() } else { require.NoError(t, err) } - b, err := NewFromHiLo(bneg, bhi, blo, bscale) - if err == ErrScaleOutOfRange { + b, err := NewFromHiLo(bneg, bhi, blo, bprec) + if err == ErrPrecOutOfRange { t.Skip() } else { require.NoError(t, err) @@ -500,20 +500,20 @@ func FuzzFloor(f *testing.F) { func FuzzCeil(f *testing.F) { for _, c := range corpus { for _, d := range corpus { - f.Add(c.neg, c.hi, c.lo, c.scale, d.neg, d.hi, d.lo, d.scale) + f.Add(c.neg, c.hi, c.lo, c.prec, d.neg, d.hi, d.lo, d.prec) } } - f.Fuzz(func(t *testing.T, aneg bool, ahi uint64, alo uint64, ascale uint8, bneg bool, bhi uint64, blo uint64, bscale uint8) { - a, err := NewFromHiLo(aneg, ahi, alo, ascale) - if err == ErrScaleOutOfRange { + f.Fuzz(func(t *testing.T, aneg bool, ahi uint64, alo uint64, aprec uint8, bneg bool, bhi uint64, blo uint64, bprec uint8) { + a, err := NewFromHiLo(aneg, ahi, alo, aprec) + if err == ErrPrecOutOfRange { t.Skip() } else { require.NoError(t, err) } - b, err := NewFromHiLo(bneg, bhi, blo, bscale) - if err == ErrScaleOutOfRange { + b, err := NewFromHiLo(bneg, bhi, blo, bprec) + if err == ErrPrecOutOfRange { t.Skip() } else { require.NoError(t, err) @@ -541,21 +541,21 @@ func FuzzCeil(f *testing.F) { func FuzzTrunc(f *testing.F) { for _, c := range corpus { for _, d := range corpus { - roundScale := uint8(rand.N(20)) - f.Add(c.neg, c.hi, c.lo, c.scale, d.neg, d.hi, d.lo, d.scale, roundScale) + roundPrecision := uint8(rand.N(20)) + f.Add(c.neg, c.hi, c.lo, c.prec, d.neg, d.hi, d.lo, d.prec, roundPrecision) } } - f.Fuzz(func(t *testing.T, aneg bool, ahi uint64, alo uint64, ascale uint8, bneg bool, bhi uint64, blo uint64, bscale uint8, roundScale uint8) { - a, err := NewFromHiLo(aneg, ahi, alo, ascale) - if err == ErrScaleOutOfRange { + f.Fuzz(func(t *testing.T, aneg bool, ahi uint64, alo uint64, aprec uint8, bneg bool, bhi uint64, blo uint64, bprec uint8, roundPrecision uint8) { + a, err := NewFromHiLo(aneg, ahi, alo, aprec) + if err == ErrPrecOutOfRange { t.Skip() } else { require.NoError(t, err) } - b, err := NewFromHiLo(bneg, bhi, blo, bscale) - if err == ErrScaleOutOfRange { + b, err := NewFromHiLo(bneg, bhi, blo, bprec) + if err == ErrPrecOutOfRange { t.Skip() } else { require.NoError(t, err) @@ -571,25 +571,25 @@ func FuzzTrunc(f *testing.F) { cstr := c.String() - u8Round := uint8(roundScale) + u8Round := uint8(roundPrecision) cround := c.Trunc(u8Round) // compare with shopspring/decimal - i32Round := int32(roundScale) + i32Round := int32(roundPrecision) cc := ss.RequireFromString(cstr).Truncate(i32Round) - require.Equal(t, cc.String(), cround.String(), "trunc %s %d", c, roundScale) + require.Equal(t, cc.String(), cround.String(), "trunc %s %d", c, roundPrecision) }) } func FuzzPowInt(f *testing.F) { for _, c := range corpus { - f.Add(c.neg, c.hi, c.lo, c.scale, rand.Int()) + f.Add(c.neg, c.hi, c.lo, c.prec, rand.Int()) } - f.Fuzz(func(t *testing.T, aneg bool, ahi uint64, alo uint64, ascale uint8, pow int) { - a, err := NewFromHiLo(aneg, ahi, alo, ascale) - if err == ErrScaleOutOfRange { + f.Fuzz(func(t *testing.T, aneg bool, ahi uint64, alo uint64, aprec uint8, pow int) { + a, err := NewFromHiLo(aneg, ahi, alo, aprec) + if err == ErrPrecOutOfRange { t.Skip() } else { require.NoError(t, err) @@ -607,9 +607,9 @@ func FuzzPowInt(f *testing.F) { } // compare with shopspring/decimal - aa := ssDecimal(aneg, ahi, alo, ascale) + aa := ssDecimal(aneg, ahi, alo, aprec) - prec := int32(c.Scale()) + prec := int32(c.Prec()) aa = aa.Pow(ss.NewFromInt(int64(p))).Truncate(prec) require.Equal(t, aa.String(), c.String(), "powInt %s %d", a, p) @@ -618,12 +618,12 @@ func FuzzPowInt(f *testing.F) { func FuzzPowNegative(f *testing.F) { for _, c := range corpus { - f.Add(c.neg, c.hi, c.lo, c.scale, rand.Int64()) + f.Add(c.neg, c.hi, c.lo, c.prec, rand.Int64()) } - f.Fuzz(func(t *testing.T, aneg bool, ahi uint64, alo uint64, ascale uint8, pow int64) { - a, err := NewFromHiLo(aneg, ahi, alo, ascale) - if err == ErrScaleOutOfRange { + f.Fuzz(func(t *testing.T, aneg bool, ahi uint64, alo uint64, aprec uint8, pow int64) { + a, err := NewFromHiLo(aneg, ahi, alo, aprec) + if err == ErrPrecOutOfRange { t.Skip() } else { require.NoError(t, err) @@ -646,13 +646,13 @@ func FuzzPowNegative(f *testing.F) { } // compare with shopspring/decimal - aa := ssDecimal(aneg, ahi, alo, ascale) + aa := ssDecimal(aneg, ahi, alo, aprec) ssPow := ss.NewFromInt(p) - aa, err = aa.PowWithPrecision(ssPow, int32(c.scale)+8) + aa, err = aa.PowWithPrecision(ssPow, int32(c.prec)+8) require.NoError(t, err) - prec := int32(c.Scale()) + prec := int32(c.Prec()) aa = aa.Truncate(prec) require.Equal(t, aa.String(), c.String(), "powIntNegative %s %d, %s", a, p, ssPow) diff --git a/u128.go b/u128.go index e9f111d..dbcc536 100644 --- a/u128.go +++ b/u128.go @@ -281,7 +281,7 @@ func (u u128) ToBigInt() *big.Int { } // getTrailingZeros64 returns the number of trailing zeros in u -// NOTE: this only works when maxScale is 19 +// NOTE: this only works when maxPrec is 19 func getTrailingZeros64(u uint64) uint8 { var z uint8 if u%1e16 == 0 { diff --git a/u256.go b/u256.go index 4bfafdb..81687f3 100644 --- a/u256.go +++ b/u256.go @@ -176,10 +176,10 @@ func (u u256) rsh(n uint) (v u256) { // Quo only returns quotient of u/v // Fast divsion for U192 divided by U128 using Hacker's Delight multiword division algorithm -// with some constraints regarding max coef and scale value, including: +// with some constraints regarding max coef and prec value, including: // // max(coef) = 2^128-1 -// max(scale) = 19 +// max(prec) = 19 // max(u) = 2^192-1 func (u u256) fastQuo(v u128) (u128, error) { // if u >= 2^192, the quotient might won't fit in 128-bits number (overflow).