[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
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