读书人

一个程序在windows下运行正常在li

发布时间: 2012-03-25 20:55:17 作者: rapoo

一个程序,在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

读书人网 >C语言

热点推荐