帮忙看看程序哪里错了? 感激不尽先!
程序如下所示,不知道为什么,程序执行一次进入ran1函数后,就不出来了!
明明写了循环十次,希望COUT十个随机数出来,可是一个也没有啊!
望各位大虾赐教!感激不尽!
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<iostream.h>
int idum;
double ran1(int w);
double ran1(int w)
{
double r[97],nu;
int m1=259200,m2=134456,m3=243000,
ia1=7141,ia2=8121,ia3=4561,
ic1=54773,ic2=28411,ic3=51349;
double rm1=0.0000038580247,rm2=0.0000074373773;
static int iff;
static int ix1,ix2,ix3;
int j;
if(w<0 || iff==0 )
{
iff=1;
ix1=(ic1-idum)%m1;
ix1=(ia1*ix1+ic1)%m1;
ix2=ix1%m2;
ix1=(ia1*ix1+ic1)%m1;
ix3=ix1%m3;
for(j=1;j<=97;j++)
{
ix1=(ia1*ix1+ic1)%m1;
ix2=(ia2*ix2+ic2)%m2;
r[j]=(double(ix1)+double(ix2)*rm2)*rm1;
}
idum=1;
}
ix1=(ia1*ix1+ic1)%m1;
ix2=(ia2*ix2+ic2)%m2;
do
{
ix3=(ia3*ix3+ic3)%m3;
j=1+int((97*ix3)/m3);
}while(j>97 || j<1);
nu=r[j];
r[j]=(double(ix1)+double(ix2)*rm2)*rm1;
return(nu);
}
void main()
{ int idum=-13;
int i;
for(i=0;i<10;i++)
{
cout<<ran1(idum)<<endl;
}
}
问题点数:100、回复次数:7Top
1 楼carbon107(<软件开发思想.h>)回复于 2003-11-02 14:33:32 得分 0
int m1=259200,m2=134456,m3=243000,
//这几个数超过了整型数的范围 -32767----32768Top
2 楼carbon107(<软件开发思想.h>)回复于 2003-11-02 14:42:04 得分 0
double rm1=0.0000038580247,rm2=0.0000074373773;
这个在运算的时候也可能越界了Top
3 楼carbon107(<软件开发思想.h>)回复于 2003-11-02 14:44:03 得分 0
nu=r[j];
r[j]=(double(ix1)+double(ix2)*rm2)*rm1;
return(nu);
//这个地方nu的值也一定超过了double的界限Top
4 楼zlqian(zlqian)回复于 2003-11-02 14:49:03 得分 0
不要用16位turboc2,
用GCC一切都OK
This is the result:
bash-2.05b$ g++ test.cpp\
>
bash-2.05b$ g++ test.cpp\
>
bash-2.05b$ g++ test.cpp
bash-2.05b$ ./a
0.274272
0.865282
0.865282
0.865282
0.865282
0.865282
0.865282
0.865282
0.865282
0.865282
bash-2.05b$Top
5 楼huigll(会)回复于 2003-11-02 15:12:50 得分 90
double r[97],
for(j=1;j<=97;j++)
数组越界!
for(j=0;j<97;j++)Top
6 楼leyt(思维机器)回复于 2003-11-02 15:53:11 得分 10
同意Top
7 楼langzi8818(┤天道酬勤┝爱老婆┦┷我是来学习滴┷)回复于 2003-11-02 16:40:26 得分 0
UPTop




