C complex number usage

Bruce Labitt bruce.labitt at verizon.net
Sun Jan 6 13:34:12 EST 2008


I was going to try casting next, but I didn't understand why the 
expression would automatically be of that type.  "I" is type double 
_Complex, I think.  So why isn't the expression on the RHS already 
double _Complex?  I'm not sure where to find out about complex number 
support in C (or C++).  Most of the pages I've googled so far haven't 
been too helpful.

Thanks


Chris Linstid wrote:
> The problem it's complaining about is that mymean and mystdev are
> variables of type "double" and gaussrand() returns a "double"... and
> you're trying to assign the result to g[ii] which is type "double
> _Complex".  You could try casting the result to "double _Complex" like
> this:
>
> g[ii] = (double _Complex) (mymean*(1+I) + mystdev*gaussrand() + I *
> mystdev * gaussrand());
>
> However, I'm not sure if that's exactly what you want because I don't
> know what will happen to the value when you cast it as I'm not too
> familiar with the complex number support in C.
>
> Hope that helps.
>
>      - Chris
>
> On Jan 6, 2008 12:25 PM, Bruce Labitt <bruce.labitt at verizon.net> wrote:
>   
>> Hopefully a simple question.  I'm trying to write a C program that uses
>> complex numbers.  (I'm a  "C" illiterate.  Just wrote my second
>> program...)  Reading the header file complex.h hasn't helped too much.
>> Can someone give me a hint on how to "fix" this?  Most of the references
>> on C are *ancient* (like me) and don't cover the C99 complex number
>> stuff.  Please ignore my awful coding style.
>>
>> #include <math.h>
>> #include <time.h>
>> #include <complex>
>> #include <fftw3.h>
>>
>> double gaussrand();
>> int N;   /* length of FFT */
>> int ii;  /* index */
>> N = 1024;
>> double _Complex g[N];
>> double mymean, mystdev;
>> double _Complex I;
>>
>> // assign mymean and mystdev here...
>>
>> // Create array of complex random numbers
>>    for (ii=0; ii<N; ii++)
>>    {
>>        g[ii] = mymean*(1+I) + mystdev*gaussrand() + I * mystdev *
>> gaussrand();
>>    }
>> // End complex random number generation
>>
>> The compiler barfs on the g[ii] assignment...
>> 41 C:\Dev-Cpp\myproj\main_tb_fftw.cpp cannot convert `double
>> __complex__[((unsigned int)((int)N))]' to `double (*)[2]' in assignment
>>
>> Hopefully someone can point me in the write direction.  TIA.
>> _______________________________________________
>> gnhlug-discuss mailing list
>> gnhlug-discuss at mail.gnhlug.org
>> http://mail.gnhlug.org/mailman/listinfo/gnhlug-discuss/
>>
>>     
>
>   



More information about the gnhlug-discuss mailing list