Skip to content

Commit e8f120a

Browse files
committed
lsh rsh fallbacj
1 parent 2c4ed00 commit e8f120a

File tree

2 files changed

+17
-4
lines changed

2 files changed

+17
-4
lines changed

.DS_Store

6 KB
Binary file not shown.

decimal.go

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -898,20 +898,33 @@ func (d Decimal) Lsh(bits uint) Decimal {
898898

899899
if d.coef.bigInt != nil {
900900
d.coef.bigInt = d.coef.bigInt.Lsh(d.coef.bigInt, bits)
901-
} else {
902-
d.coef.u128 = d.coef.u128.Lsh(bits)
901+
return d
902+
}
903+
904+
if bits >= 128 || (d.coef.u128.hi > 0 && bits >= 64) ||
905+
(d.coef.u128.hi > 0 && (d.coef.u128.hi<<bits)>>bits != d.coef.u128.hi) {
906+
bigInt := d.coef.GetBig()
907+
bigInt = bigInt.Lsh(bigInt, bits)
908+
return newDecimal(d.neg, bintFromBigInt(bigInt), d.prec)
903909
}
904910

911+
d.coef.u128 = d.coef.u128.Lsh(bits)
912+
905913
return d
906914
}
907915

908916
func (d Decimal) Rsh(bits uint) Decimal {
917+
if bits == 0 {
918+
return d
919+
}
920+
909921
if d.coef.bigInt != nil {
910922
d.coef.bigInt = d.coef.bigInt.Rsh(d.coef.bigInt, bits)
911-
} else {
912-
d.coef.u128 = d.coef.u128.Rsh(bits)
923+
return d
913924
}
914925

926+
d.coef.u128 = d.coef.u128.Rsh(bits)
927+
915928
return d
916929
}
917930

0 commit comments

Comments
 (0)