help-gsl
[Top][All Lists]

## Re: [Help-gsl] gsl precision question

 From: Rhys Ulerich Subject: Re: [Help-gsl] gsl precision question Date: Wed, 22 Feb 2012 11:51:17 -0600

```Hi Wally,

> For example: For Euler and complex stuff a series of i^n , n= 0,1,2,...
> is useful. Following code should do this but i guess during gsl internal
> calculation (log() ) the process loose precision and i get output as shown
> below.
>
> How can i tell gsl to use a certain precision and/or how to round ?

While this does not answer your question, perhaps it can sidestep it...

If you want to take i^n I recommend directly using the properties of
that operation rather than using gsl_complex_pow_real (which will
probably always exhibit some floating point loss).  In C99 I have used
code like the following to form alpha*i^n for integer n:

static inline
void scale_by_imaginary_power(const complex_double in,
complex_double * const out, int p)
{
// Modulo-four-like operation for 2's complement p
switch (p & 3) {
case 0: *out =  in           ; break; // I^0 = 1
case 1: *out =  in*_Complex_I; break; // I^1 = I = I^-3
case 2: *out = -in           ; break; // I^2 = -1 = I^-2
case 3: *out = -in*_Complex_I; break; // I^3 = -I = I^-1
}
}

That same idea should be translatable into GSL.  This type of logic
will give analytically exact results.

Hope that helps,
Rhys

```