我正在将程序从浮点精度更改为 double 。 尽管如此,我还是通过从二进制文件读取 float 来开始这个例程。
bufz = alloc1float(nz);
for (i=0; i<nx; i++) {
nu = efread(bufz,sizeof(float),nz,vel);
for (k=0; k<nz; k++)
vn2[k][i] = bufz[k];
}
我继续进行 double 的计算,并将计算值写入文件中:
matlabfile=fopen("matlabfile","a+");
fprintf(matlabfile,"%d;%15.7e;%15.7e\n",l,amxs,amxr);
fclose(matlabfile);
(amxs 和 amxr 的大小为 double,l 为 int,matlabfile 为文件指针)
我的问题:当使用 double 进行算术运算时,C 如何处理 float 类型的输入参数,以及如何对输出中的结果进行四舍五入? 是不是如图所示那么简单,还是我错过了一些重要的东西?
编辑: 文件*vel,*matlabfile;
int main(int argc, char *argv[])
{
int i, nx, nz, k, nu, l;
double amxs, amxr;
double *buf;
double **vn2;
vn2 = alloc2double(nx,nz);
buf = alloc1float(nz);
/* read input binary file */
for (i=0; i<nx; i++) {
nu = efread(buf,sizeof(float),nz,vel);
for (k=0; k<nz; k++) vn2[k][i] = bufz[k];
}
Arithmetics with double precision arrays, variables and vn2...
// save output
matlabfile=fopen("matlabfile","a+");
fprintf(matlabfile,"%d;%15.7e;%15.7e\n",l,amxs,amxr);
fclose(matlabfile);
最佳答案
事实并非如此。它(隐式)将 double 型转换为浮点型,并且您会失去精度。它本质上是砍掉最低有效位。
抱歉缺少具体示例,但类似 9.223372036854775808
的内容将变为 9.223372037
。
当您将floats
加载到doubles
时,会发生类似的情况。它将它们转换为不同的格式。 编辑...效果很好。
关于c - C 如何将 double 存储到已分配的 float 类型数组中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15624963/