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

C如何将double存储到分配的float类型数组中?,c,floating-point,precision,double-precision,C,Floating Point,Precision,Double Precision,我正在将程序从浮点精度更改为双精度。 尽管如此,我还是通过从二进制文件中读取浮点数来开始这个例程 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]; } (amxs和amxr的大小为两倍,l为int,matlabfile为文件指针) 我的问题是:

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

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];
}
(amxs和amxr的大小为两倍,l为int,matlabfile为文件指针)

我的问题是: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);
intmain(intargc,char*argv[])
{
int i、nx、nz、k、nu、l;
双amx,amxr;
双*buf;
双**vn2;
vn2=alloc2double(nx,新西兰);
buf=alloc1float(新西兰);
/*读取输入二进制文件*/
对于(i=0;i它不会。它(隐式地)将
double
转换为
float
,这样就失去了精度。它基本上切掉了最低有效位

很抱歉没有具体的例子,但是像
9.223372036854775808
这样的东西将变成
9.223372037


当你将你的
浮动
加载到
双精度
时,也会发生类似的事情。它会将它们转换成不同的格式。编辑…这很好。

你需要向我们展示你的变量声明,即所有内容都是什么类型。除了相关的代码之外,你已经向我们展示了所有内容!双精度的代码在哪里以单精度数据开始的sion计算?顾名思义,双精度数据类型的精度是浮点的2倍。因此,从浮点转换为双精度不会损失精度(额外的精度位置可以用0填充).截断发生在反向转换时。精度对于算术非常重要,因为我的算法可能会由于舍入错误而出现不稳定性。输出只是一个质量证明。“如果你将其作为浮点数进行转换,则不能保证与以前的数相同”-你确定吗?没有浮点数这样的东西C中的“隐式强制转换”。强制转换是一种显式转换。“它(隐式)转换…”更正确。低位是四舍五入的(在大多数实现中是默认模式),而不是切碎的。@iheanyi:您的术语是错误的(或至少与语言标准使用的术语不一致).
unsigned int x=5;int y=x;
--这是一个隐式转换。
int z=(int)x);
--这是一个强制转换,它是一个显式转换。强制转换是一个运算符,由括号中的类型名组成;它指定一个显式转换。强制转换发生在源代码中。转换发生在运行时(或者可能在编译时,如果编译器能够优化它)。@KeithThompson谢谢你的回答。我收回我的更正。
 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);