]> Cypherpunks repositories - gostls13.git/commitdiff
strconv: reduce buffer size for multi-precision decimals.
authorRémy Oudompheng <oudomphe@phare.normalesup.org>
Mon, 19 Dec 2011 20:03:53 +0000 (15:03 -0500)
committerRuss Cox <rsc@golang.org>
Mon, 19 Dec 2011 20:03:53 +0000 (15:03 -0500)
The longest numbers we have to represent are the smallest denormals.
Their decimal mantissa is not longer than 5^1100. Taking into
account some extra size for in-place operations, 800 digits are
enough. This saves time used for zero intiialization of extra
bytes.

                                        old ns/op  new ns/op    delta
strconv_test.BenchmarkAtof64Decimal           521        334   -35.9%
strconv_test.BenchmarkAtof64Float             572        391   -31.6%
strconv_test.BenchmarkAtof64FloatExp        10242      10036    -2.0%
strconv_test.BenchmarkAtof64Big              4229       4029    -4.7%
strconv_test.BenchmarkFormatFloatDecimal     1396        934   -33.1%
strconv_test.BenchmarkFormatFloat            4295       3341   -22.2%
strconv_test.BenchmarkFormatFloatExp        12035      11181    -7.1%
strconv_test.BenchmarkFormatFloatBig         4213       3229   -23.4%
strconv_test.BenchmarkAppendFloatDecimal     1031        600   -41.8%
strconv_test.BenchmarkAppendFloat            3971       3044   -23.3%
strconv_test.BenchmarkAppendFloatExp        11699      11003    -5.9%
strconv_test.BenchmarkAppendFloatBig         3836       2915   -24.0%

R=golang-dev, bradfitz, rsc
CC=golang-dev, remy
https://golang.org/cl/5491064

src/pkg/strconv/decimal.go

index 541553097bbb3a2e9fcb1449bc2cc34710693277..cc5591a8d8f19a3d629cdbee9097af526c916d59 100644 (file)
@@ -14,9 +14,9 @@ package strconv
 type decimal struct {
        // TODO(rsc): Can make d[] a bit smaller and add
        // truncated bool;
-       d   [2000]byte // digits
-       nd  int        // number of digits used
-       dp  int        // decimal point
+       d   [800]byte // digits
+       nd  int       // number of digits used
+       dp  int       // decimal point
        neg bool
 }