Date: Mon, 19 Apr 1999 16:06:23 +0200 From: Hans-Bernhard Broeker Message-Id: <199904191406.QAA06845@acp3bf.physik.rwth-aachen.de> To: sydow AT uni-bremen DOT de Cc: djgpp AT delorie DOT com Subject: Re: How to optimize that code? Newsgroups: comp.os.msdos.djgpp Organization: RWTH Aachen, III. physikalisches Institut B X-Newsreader: TIN [version 1.2 PL2] Reply-To: djgpp AT delorie DOT com In article <371B172C DOT 4771 AT uni-bremen DOT de> you wrote: > I wrote a piece of code that iterates an harmonic function. > If I increase MAX to lets say 50000 I obtain runtime errors. > (compiled with DJGPP gcc 2.8.0 under w95) You don't show us the runtime errors, but even so, it's clear what happened. Actually, it's a FAQ, and answered in faq*b.zip. In a nutshell, your automatic array variable 'x' is too large. It overflows the (fixed) stack size. > I think there are more elegant ways of writing this code, but, > for instance, I am not very familiar with pointers (if they were > needed...). You'll definitely have to become familiar with pointers if you're willing to get anywhere with C or C++. See changes to the source, below (un-quoted lines...) > /* starts here */ > #include > #define MAX 10000 > int main(void) > { > long double x[MAX+3] = {0.0,1.0}; make that line long double *x = malloc((MAX+3)*sizeof(*x)); > long double c = 0.01; > long int t; and move the initialization here: x[0]=0.0; x[1]=1.0; > for (t = 0; t <= MAX; t++) { > x[t + 2] = (2*x[t + 1] - x[t] - c*x[t + 1]); > printf("%.10Lf\n", x[t]); > } > return(0); > } > /* end */ -- Hans-Bernhard Broeker (broeker AT physik DOT rwth-aachen DOT de) Even if all the snow were burnt, ashes would remain.