the complex power function is a difficult (time consuming) general computation.
are you saying that you actually have a program that uses boolean gaussian integers and needs to do lots of power operations? if so, i highly recommend that you special case this for your own use. if this is common then the power code could stop and check for Re(x) in {-1,0,1} and Im(x) in {-1,0,1} before undertaking the general computation. On Thu, Aug 3, 2017 at 5:43 PM, Dorival Pedroso <dorival.pedr...@gmail.com> wrote: > Hi, > > This is an interesting benchmark: > > Given this function: > // ImagPowN computes iⁿ = (√-1)ⁿ > // > // i¹ = i i² = -1 i³ = -i i⁴ = 1 > // i⁵ = i i⁶ = -1 i⁷ = -i i⁸ = 1 > // i⁹ = i i¹⁰ = -1 i¹¹ = -i i¹² = 1 > // > func ImagPowN(n int) complex128 { > if n == 0 { > return 1 > } > switch n % 4 { > case 1: > return 1i > case 2: > return -1 > case 3: > return -1i > } > return 1 > } > > And this benchmark test: > var ( > imagpownRes complex128 > ) > > func BenchmarkImagPowN(b *testing.B) { > var res complex128 > for i := 0; i < b.N; i++ { > for n := 0; n < 200; n++ { > res = ImagPowN(n) > } > } > imagpownRes = res > } > > func BenchmarkImagPowNcmplx(b *testing.B) { > var res complex128 > for i := 0; i < b.N; i++ { > for n := 0; n < 200; n++ { > res = cmplx.Pow(1i, complex(float64(n), 0)) > } > } > imagpownRes = res > } > > We get this output ( go test -run=XXX -bench=. ): > BenchmarkImagPowN-32 3000000 470 ns/op > BenchmarkImagPowNcmplx-32 200000 10050 ns/op > > A 20x speed up... > > Cheers. > Dorival > > -- > You received this message because you are subscribed to the Google Groups > "golang-nuts" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to golang-nuts+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/d/optout. > -- Michael T. Jones michael.jo...@gmail.com -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.