Thanks for the advice.

This is the piece of code where I use that function:
// compute hat(Du)
pf := float64(p)
for j := 0; j < N; j++ {
ikp := ImagPowN(p) * complex(math.Pow(K[j], pf), 0)
DuHat[j] = ikp * S[j] * A[j]
}

where p is an integer (unbounded), K[j] is a real number from -Inf to +Inf 
and S[j] and A[j] are complex (unbounded too)

By using the ImagPowN(p) function, the code is much faster now...

Cheers.
D



On Friday, August 4, 2017 at 10:54:14 AM UTC+10, Michael Jones wrote:
>
> 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...@gmail.com 
> <javascript:>> 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...@googlegroups.com <javascript:>.
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>
>
> -- 
> Michael T. Jones
> michae...@gmail.com <javascript:>
>

-- 
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.

Reply via email to