可能重复:
如何对大量浮点数求和?
我有一个矩阵“x”,它是 10,000 个元素乘以 10,000 个元素。
在第一种情况下,我声明矩阵如下:
int n = 10000;
unsigned int size_M = n*n;
unsigned int mem_size_M = sizeof(int)*size_M;
int* x = (int*)malloc(mem_size_M);
步骤(1)初始化矩阵:
for(i=0;i<n;i++)
for(j=0;j<n;j++)
x[i*n+j] = 1;
步骤 (2) 对矩阵的元素求和并打印总和:
for(i=0i<n;i++)
for(j=0j<n;j++)
sum +=x[i*n+j];
printf("sum: %d \n", sum);
正如我所料,上面的代码会打印出“sum: 100000000”。
但是,如果我像这样声明矩阵:
int n = 10000;
float size_M = n * n;
float mem_size_M = sizeof(float) * size_M;
float* x = (float*)malloc(mem_size_M);
再次执行步骤 1 和 2,不会打印出正确答案,而是打印出“16777216”。为什么是这样?
答案:要获得适当的答案,请进行类型转换...
sum +=(int)x[i*n+j];