gpt4 book ai didi

c - float数组的最大索引范围?

转载 作者:行者123 更新时间:2023-11-30 20:56:04 25 4
gpt4 key购买 nike

我想模拟单位质量的 10^10 个粒子的质量分布代码。

但是此代码仅在粒子数为 10^8 时才有效。

long par = 85000000;
float p[85000000][2];

如果大小变为 10^9 或 10^10,则会显示错误

  • “重新定位已被截断以适合”

那就是

long par = 85000000;
float p[85000000][2];

如何找到 float 组的最大可能索引范围?

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <sys/time.h>

long double net[4096][4096];
int max = 4000;
long par = 85000000;
float p[85000000][2];

int main(int argc, char *argv[]) {
int i;
for( i = 0; i < par/1000; i++) {
p[i][0]= ((long double)rand()/(long double)(RAND_MAX) * (long double)max);
p[i][1]= ((long double)rand()/(long double)(RAND_MAX) * (long double)max);
}

clock_t begin = clock();

for ( i = 0; i < par/1000; i++) {
double x = p[i][0];
double y = p[i][1];

int left = (int)floor(x);
int right = left + 1;

if ( left >= 4095)
printf("out of bound left is %d/n", left);

int bottom = (int)floor(y);
int top = bottom +1;

double fL = x - left;
double fR = 1 - fL;

double fB = y - bottom;
double fT = 1 - fB;

net[left][bottom] = net[left][bottom] +( fT * fR ) ;
net[right][bottom] = net[right][bottom] +( fT * fL ) ;
net[left][top] = net[left][top] +( fB * fR ) ;
net[right][top] = net[right][top] +( fB * fL ) ;
}

clock_t close = clock();

FILE *f = fopen("file.txt", "a");
if (!f) {
printf("Error opening file!\n");
exit(1);
}

fprintf (f,"Computation time for grid size %d X %d and %ld particle is "
"%4.6lf ,\n",max, max,par,(double)(close-begin) );

fclose(f);
}

最佳答案

您的分配达到了堆栈限制,您应该使用malloc,它在堆(也称为动态)内存上进行分配。然后,您可以使用操作系统允许的尽可能多的内存。

您可以通过以下语法使用它:

float p[];
p = malloc(85000000 * sizeof(float));

甚至还有一个 Wikipedia article关于malloc和类似的函数。

旁注:这种类型的错误是 namesake这个网站的:)

关于c - float数组的最大索引范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28322939/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com