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

标签 c floating-point precision double-precision

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

相关文章:

c - c语言的股票信息数据结构?

c++ - 电脑精度: when should I have to worry about it?

python - 如何用 tensorflow 准确地四舍五入

c++ - 对本周大师的理解 #67 : Double or Nothing

python - 如何检查浮点值是否为整数

c# - System.Convert.ToDouble(decimal) 给出两个不同的答案

python - 修复 *displaying* 在 python 中 float 时的精度问题

c - Notesearch 漏洞利用异常 (Hacking : Art of Exploitation)

java - 有没有办法在编译时为Java定义一个常量值

调用嵌入在 DLL 中的静态库函数