我正在改变我的程序从浮点精度到双精度。 不过,我通过从二进制文件中读取浮点数来启动此例程。C如何将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];
}
我继续进行的计算方法,应为双精度和所计算的值写入到一个文件:
matlabfile=fopen("matlabfile","a+");
fprintf(matlabfile,"%d;%15.7e;%15.7e\n",l,amxs,amxr);
fclose(matlabfile);
(AMXS和amxr是大小双重的,l为int和matlabfile是一个文件指针)
我的问题:C如何处理浮点类型的输入参数,当以双精度完成算术,以及它如何舍入输出结果? 难道这样容易吗?或者我错过了什么?
编辑: 文件* vel,* matlab文件;
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);
你需要告诉我们你的变量声明,即什么类型的一切。 – 2013-03-25 21:22:24
您向我们展示了除相关代码以外的所有内容!以单精度数据开始的双精度计算代码在哪里? – 2013-03-25 21:33:15
顾名思义,与浮点数相比,double数据类型具有2x精度。因此,对于从浮点型转换为双精度型,没有精度损失(额外的精度位置可以用0填充)。截断发生在逆向转换上。 – CuriousSid 2013-03-25 21:49:02