gpt4 book ai didi

c - C 如何将 double 存储到已分配的 float 类型数组中?

转载 作者:行者123 更新时间:2023-11-30 15:50:43 26 4
gpt4 key购买 nike

我正在将程序从浮点精度更改为 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com