Hi guys, I got 2 problems:

- I need to build an array that has a function similar to a triangle. My function goes from -40 to 40 with steps of 0.002. So it has to be a 40000 elements array, made like that:

var filler goes from -40 to 40 with step of 0.002

function is, for each element:

(40.0-fabs(filler))/40.0

so I expect my triangle starting from o (40-|-40|)/40=0/40=0, with an apex of (40-0)/40=1, and getting back to 0 at the end.

Here is how I implemented it:

Code:filler=-40.0; for(i=0;i<40000;i++){ VettoreIniziale[i].img=0.0; VettoreIniziale[i].real=(40.0-fabs(filler))/40.0; filler+=0.002; }

It starts from 0.0000 but it has an apex of about 0.998 and end with a negative number, like -0.004.. Why it happens? What did I do wrong?

- Second problem. I need to fill an array with random numbers in the range [-1,1] with mean = 0 and variance =1. I tried to use Box Muller transform, but it gives me strange results... Here the main and the method.

Box Muller

Code:#include <stdlib.h>double rand_normal(double mean, double stddev) { static double n2 = 0.0; static int n2_cached = 0; if (!n2_cached) { double x, y, r; do { x = 2.0*rand()/RAND_MAX - 1; y = 2.0*rand()/RAND_MAX - 1; r = x*x + y*y; } while (r == 0.0 || r > 1.0); { double d = sqrt(-2.0*log(r)/r); double n1 = x*d; n2 = y*d; double result = n1*stddev + mean; n2_cached = 1; return result; } } else { n2_cached = 0; return n2*stddev + mean; } }

This is the main code regarding it:

I tried not to use (float) to convert, but it happens the same.Code:#include <stdio.h> #include <stdlib.h> #include "MISC.h" #include <math.h> #include <time.h> ... srand(time(NULL)); ... for(i=0;i<LENGTH;i++){ GaussianWhiteNoise[i].real=(float)rand_normal(0.0,1.0); GaussianWhiteNoise[i].img=0.0; printf("%d %3.4f \n",i,GaussianWhiteNoise[i].real);

This is the output...

0 4.0000

1 2665544.0000

2 4.0000

3 2665544.0000

4 0.0000

5 2665544.0000

6 0.0000

7 2665544.0000

8 0.0000

9 2665544.0000

10 0.0000

11 2665544.0000

12 0.0000

13 2665544.0000

14 0.0000

15 2665544.0000

16 0.0000

etc etc