package strconv
func ( *decimalSlice, uint64, int, bool, int) {
if == 32 {
dboxFtoa32(, uint32(), , )
return
}
dboxFtoa64(, , , )
}
func ( *decimalSlice, uint64, int, bool) {
if == 1<<float64MantBits && ! {
:= -mulLog10_2MinusLog10_4Over3()
, := dboxPow64(, )
, := dboxRange64(, )
if != 2 && != 3 {
++
}
:= / 10
if <= *10 {
, := trimZeros()
dboxDigits(, , -+1+)
return
}
:= dboxRoundUp64(, )
if == -77 && %2 != 0 {
--
} else if < {
++
}
dboxDigits(, , -)
return
}
const (
= 2
= 100
= * 10
)
:= -mulLog10_2()
, := dboxPow64(+, )
, := dboxMulPow64(uint64(*2+1)<<, )
, := /, uint32(%)
:= dboxDelta64(, )
if < {
if != 0 || ! || %2 == 0 {
, := trimZeros()
dboxDigits(, , -+1+)
return
}
--
= * 10
} else if == {
, := dboxParity64(uint64(*2-1), , )
if || ( && %2 == 0) {
, := trimZeros()
dboxDigits(, , -+1+)
return
}
}
:= + /2 - /2
, := /, %
:= 10* + uint64()
if == 0 {
, := dboxParity64(*2, , )
if != ((-/2)%2 != 0) || && %2 != 0 {
--
}
}
dboxDigits(, , -)
}
func ( *decimalSlice, uint32, int, bool) {
if == 1<<float32MantBits && ! {
:= -mulLog10_2MinusLog10_4Over3()
, := dboxPow32(, )
, := dboxRange32(, )
if != 2 && != 3 {
++
}
:= / 10
if <= *10 {
, := trimZeros(uint64())
dboxDigits(, , -+1+)
return
}
:= dboxRoundUp32(, )
if == -77 && %2 != 0 {
--
} else if < {
++
}
dboxDigits(, uint64(), -)
return
}
const (
= 1
= 10
= * 10
)
:= -mulLog10_2()
, := dboxPow32(+, )
, := dboxMulPow32(uint32(*2+1)<<, )
, := /, uint32(%)
:= dboxDelta32(, )
if < {
if != 0 || ! || %2 == 0 {
, := trimZeros(uint64())
dboxDigits(, , -+1+)
return
}
--
= * 10
} else if == {
, := dboxParity32(uint32(*2-1), , )
if || ( && %2 == 0) {
, := trimZeros(uint64())
dboxDigits(, , -+1+)
return
}
}
:= + /2 - /2
, := /, %
:= 10* + uint32()
if == 0 {
, := dboxParity32(*2, , )
if != ((-/2)%2 != 0) || && %2 != 0 {
--
}
}
dboxDigits(, uint64(), -)
}
func ( *decimalSlice, uint64, int) {
:= formatBase10(.d, )
.d = .d[:]
.nd = len(.d)
.dp = .nd +
}
func ( uint128, uint64) uint128 {
:= uint64(.Lo + )
if < .Lo {
.Hi++
}
.Lo =
return
}
func (, uint32) uint64 {
return uint64() * uint64()
}
func ( uint32, uint64) uint64 {
:= uint32( >> 32)
:= uint32()
:= umul64(, )
:= umul64(, )
return + ( >> 32)
}
func ( uint32, uint64) uint64 {
return uint64(uint64() * )
}
func (, uint64) uint64 {
:= uint32( >> 32)
:= uint32()
:= uint32( >> 32)
:= uint32()
:= umul64(, )
:= umul64(, )
:= umul64(, )
:= umul64(, )
:= ( >> 32) + uint64(uint32()) + uint64(uint32())
return + ( >> 32) + ( >> 32) + ( >> 32)
}
func ( uint64, uint128) uint128 {
:= umul128(, .Hi)
:= umul128Upper64(, .Lo)
return uadd128(, )
}
func ( uint64, uint128) uint128 {
:= * .Hi
:= umul128(, .Lo)
return uint128{uint64( + .Hi), .Lo}
}
func ( uint64, uint128) ( uint64, bool) {
:= umul192Upper128(, )
= .Hi
= .Lo == 0
return
}
func ( uint32, uint64) ( uint32, bool) {
:= umul96Upper64(, )
= uint32( >> 32)
= uint32() == 0
return
}
func ( uint64, uint128, int) ( bool, bool) {
:= umul192Lower128(, )
= ((.Hi >> (64 - )) & 1) != 0
= ((uint64(.Hi << )) | (.Lo >> (64 - ))) == 0
return
}
func ( uint32, uint64, int) ( bool, bool) {
:= umul96Lower64(, )
= (( >> (64 - )) & 1) != 0
= uint32(>>(32-)) == 0
return
}
func ( uint128, int) uint32 {
return uint32(.Hi >> (64 - 1 - ))
}
func ( uint64, int) uint32 {
return uint32( >> (64 - 1 - ))
}
func ( int) int {
return (*631305 - 261663) >> 21
}
const (
floatMantBits64 = 52
floatMantBits32 = 23
)
func ( uint128, int) (, uint64) {
= (.Hi - (.Hi >> (float64MantBits + 2))) >> (64 - float64MantBits - 1 - )
= (.Hi + (.Hi >> (float64MantBits + 1))) >> (64 - float64MantBits - 1 - )
return ,
}
func ( uint64, int) (, uint32) {
= uint32(( - ( >> (floatMantBits32 + 2))) >> (64 - floatMantBits32 - 1 - ))
= uint32(( + ( >> (floatMantBits32 + 1))) >> (64 - floatMantBits32 - 1 - ))
return ,
}
func ( uint128, int) uint64 {
return (.Hi>>(128/2-floatMantBits64-2-) + 1) / 2
}
func ( uint64, int) uint32 {
return uint32(>>(64-floatMantBits32-2-)+1) / 2
}
func (, int) ( uint128, int) {
, , := pow10()
if < 0 || > 55 {
.Lo++
}
= + - 1
return ,
}
func (, int) ( uint64, int) {
, , := pow10()
if < 0 || > 27 {
.Hi++
}
= + - 1
return .Hi,
}