一个程序,在windows下运行正常,在linux下运行不出结果,死循环
请大家帮忙看看:
- C/C++ code
#include <stdio.h>#include <stdlib.h>#include <math.h>#define NF 10 //total number of data./* function prototypes */double gaussian( void );intmain(){ int i; double *ave; srand(2050); if(! (ave = malloc( NF * sizeof(double))) ) printf("memory error \n"); for(i=0;i<NF;i++) ave[i]=gaussian(); for(i=0;i<NF;i++) printf("%e, ", ave[i]); free(ave);}doublegaussian( void ){ static int useold = 0; static double old; if ( useold ) { useold = 0; return old; } else { double x, y, r2, norm; int j; double RAND; do { j=rand(); RAND=j*1.0/32767; x = 2.0*RAND - 1.0; j=rand(); RAND=j*1.0/32767; y = 2.0*RAND - 1.0; r2 = x*x + y*y; } while ( r2 >= 1.0 || r2 == 0.0 ); norm = sqrt( -2.0*log( r2 )/r2 ); old = x*norm; useold = 1; return y*norm; }}[解决办法]
死循环唯一可能就是while出不来
打印每次rand的生成值,看看是不是每次过大导致计算出的r2大于1
[解决办法]
把 rand() 加一个你希望的最大值限制吧, rand() % MAX_RAND