@@ -60,7 +60,7 @@ func (a *uint128T) sub(x, y *uint128T) *uint128T {
60
60
61
61
func (a * uint128T ) divrem64 (x * uint128T , d uint64 ) uint64 {
62
62
var r uint64
63
- if a .hi == 0 {
63
+ if x .hi == 0 {
64
64
a .lo , r = x .lo / d , x .lo % d
65
65
} else {
66
66
a .hi , r = bits .Div64 (0 , x .hi , d )
@@ -70,16 +70,15 @@ func (a *uint128T) divrem64(x *uint128T, d uint64) uint64 {
70
70
}
71
71
72
72
// divbase divides a by [decimalBase].
73
- func (a * uint128T ) divbase (x * uint128T ) * uint128T { return a .divc (x , 113 , 0x901d7cf73ab0acd9 ) }
73
+ func (a * uint128T ) divbase (x * uint128T ) * uint128T {
74
+ a .divrem64 (x , decimalBase )
75
+ return a
76
+ }
74
77
75
78
// div10base divides a by 10*[decimalBase].
76
- func (a * uint128T ) div10base (x * uint128T ) * uint128T { return a .divc (x , 117 , 0xe69594bec44de15b ) }
77
-
78
- // divc divides a by n where 1<<po2/rdenom ~ n and po2 is chosen such that rdenom is the largest possible value < 1<<64.
79
- func (a * uint128T ) divc (x * uint128T , po2 int , rdenom uint64 ) * uint128T {
80
- m := x .hi << (64 - 43 ) + x .lo >> 43 // (hi, lo) >> 43
81
- q , _ := bits .Mul64 (m , rdenom )
82
- return a .set (0 , q >> (po2 - (43 + 64 ))+ 1 )
79
+ func (a * uint128T ) div10base (x * uint128T ) * uint128T {
80
+ a .divrem64 (x , 10 * decimalBase )
81
+ return a
83
82
}
84
83
85
84
func (a * uint128T ) lt (b * uint128T ) bool {
0 commit comments