Merge pull request #29 from martinlindhe/pow

add Pow() (fix #26)
This commit is contained in:
Victor Quinn 2017-02-03 18:13:37 -05:00 committed by GitHub
commit b8c85eb1cf
2 changed files with 25 additions and 0 deletions

View file

@ -364,6 +364,22 @@ func (d Decimal) Mod(d2 Decimal) Decimal {
return d.Sub(d2.Mul(quo)) return d.Sub(d2.Mul(quo))
} }
// Pow returns d to the power d2
func (d Decimal) Pow(d2 Decimal) Decimal {
var temp Decimal
if d2.IntPart() == 0 {
return NewFromFloat(1)
}
temp = d.Pow(d2.Div(NewFromFloat(2)))
if d2.IntPart()%2 == 0 {
return temp.Mul(temp)
}
if d2.IntPart() > 0 {
return temp.Mul(temp).Mul(d)
}
return temp.Mul(temp).Div(d)
}
// Cmp compares the numbers represented by d and d2 and returns: // Cmp compares the numbers represented by d and d2 and returns:
// //
// -1 if d < d2 // -1 if d < d2

View file

@ -1283,6 +1283,15 @@ func TestDecimal_Cmp2(t *testing.T) {
} }
} }
func TestPow(t *testing.T) {
a := New(4, 0)
b := New(2, 0)
x := a.Pow(b)
if x.String() != "16" {
t.Errorf("Error, saw %s", x.String())
}
}
func didPanic(f func()) bool { func didPanic(f func()) bool {
ret := false ret := false
func() { func() {