0

我正在将我的程序从浮点精度更改为双精度。尽管如此,我还是通过从二进制文件中读取浮点数来启动这个例程。

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];
}

我继续进行双精度计算并将计算值写入文件:

matlabfile=fopen("matlabfile","a+");
fprintf(matlabfile,"%d;%15.7e;%15.7e\n",l,amxs,amxr);
fclose(matlabfile);

(amxs 和 amxr 的大小是 double,l 是 int,matlabfile 是文件指针)

我的问题:当算术以双精度完成时, C如何处理浮点类型的输入参数,以及它如何在输出中舍入结果?是这么简单,还是我错过了什么?

编辑: 文件*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);
4

1 回答 1

1

它没有。它(隐式)将 a 转换double为 afloat并且您会失去精度。它基本上切断了最低有效位。

对不起,没有具体的例子,但9.223372036854775808会变成9.223372037.

当您将您的文件加载floatsdoubles. 它将它们转换为不同的格式。编辑...效果很好。

于 2013-03-25T21:43:54.043 回答