作者gw119 (我想出去玩啦)
看板C_and_CPP
标题[问题] 阵列大小有上限吗
时间Tue May 5 23:22:50 2009
#include<iostream>
#include <iomanip>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
#include <string.h>
#include <fstream>
#include <math.h>
using std::cout;
using std::endl;
using namespace std;
double unif(double &seed);
double norm(double mean, double var);
int main(void)
{
double mean = 0;
double SNR =10.0;
double var =1/pow(10 , SNR/10);
double w[1000][100]={0};
double err = 0;
double total = 10000000;
int t[1000][100] = {0};
double r[1000][100] = {0};
for(int j=0 ; j<100 ;j++)
{
for(int i=0 ; i<1000; i++)
{
t[i][j] = -1;
w[i][j] = norm(mean,var);
r[i][j] = t[i][j]+w[i][j];
if(r[i][j]>=0)
{
err+=1;
}
}
}
ofstream fop("re.txt");
fop<<(err/total);
cout<<"解码结束"<<endl;
fop.close();
system("pause");
}//////end
double unif(double &seed)
{
double a1=3972.0,a2=4094.0;
double m=2147483647.0;
double seed1,seed2;
seed1 = a1 * seed ;
seed2 = a2 * seed ;
/* control seed < 10^10 */
seed1 = seed1 - (long)(seed1/m) * m ;
seed2 = seed2 - (long)(seed2/m) * m ;
seed = seed1 * 100000.0 + seed2;
seed = seed - (long)(seed/m)*m;
if((seed/m)<0){
return(-1*seed/m);}
else
return(seed/m);
}
double norm(double mean, double var)
{
double sz=0.0,v1,v2,sigma,ans;
double seed1,seed2;
sigma=sqrt(var);
seed1=rand()+clock()*123;
v1=unif(seed1);
seed2=fabs(clock()*1236*var+rand()-seed1);
v2=unif(seed2);
sz=cos(2.*3.14*v1)*sqrt(-2.*log(v2));
ans=sz*sigma+mean;
return(ans);
}
我想请教的问题是当我把w[1000][100]里面的1000改成10000然後其它像
t[][]还有r[][]跟i都改成对应的10000後,程式就出现overflow的讯息
这是因为我设定超过阵列的上限吗,因为像1000就可以执行但改成
10000就不能,请问板上的高手这是甚麽问题呢,感谢^^
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.113.122.235
1F:推 BSpowerx:你的RAM不够大吧 05/05 23:25
2F:推 VictorTom:RAM够大也一样, 开发环境允许你要的memory空间也会有限 05/05 23:37
3F:→ VictorTom:制, stack(区域变数等)/heap(动态配置等)的size会受限. 05/05 23:38
4F:→ gw119:那请问V大如果我需要做到10000次的话 05/05 23:56
5F:→ gw119:那我可以用甚麽方法去做到 05/05 23:56
6F:→ gw119:如果用动态记忆体的方式可以吗 05/05 23:57
7F:→ maplefog:宣告大矩阵可能要用到allocator,可以参考TCL 05/06 00:06
8F:→ gw119:TCL?? 05/06 00:09
9F:→ gw119:有相关的资料可以参考吗^^ m大 05/06 00:10
10F:推 LiloHuang:用 64bit OS + memory mapped file 吧 :) 可以很大很大 05/06 00:17
11F:→ gw119:那如果我用三维阵列呢 这样会有用吗 05/06 00:19
12F:→ iamivers0n:直接allocate在stack上的话就会受到stack大小限制 05/06 00:35
13F:→ iamivers0n:你可以试试看动态配置,heap空间应该大很多 05/06 00:35
14F:→ gw119:ok我试看看 感谢 05/06 00:40
15F:推 tstanly:array都有预设的大小 某个地方有定义 好像可改的样子 05/06 01:27
16F:推 liangjr:stack size的问题 用动态配置或把w放在global就可以了 05/06 03:27