【发布时间】:2013-03-26 06:09:13
【问题描述】:
我正在将我的程序从浮点精度更改为双精度。 尽管如此,我还是通过从二进制文件中读取浮点数来开始这个例程。
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);
【问题讨论】:
-
您需要向我们展示您的变量声明,即所有内容的类型。
-
除了相关代码之外,您已经向我们展示了所有内容!以单精度数据开头的双精度计算代码在哪里?
-
顾名思义,双精度数据类型的精度是浮点数的 2 倍。因此,从浮点数转换为双精度数不会损失精度(额外精度的位置可以用 0 填充)。截断发生在反向转换中。
-
精度对算术很重要,因为我的算法可能会由于舍入误差而出现不稳定。输出只是质量证明。
标签: c floating-point precision double-precision