我正在改變我的程序從浮點精度到雙精度。 不過,我通過從二進制文件中讀取浮點數來啓動此例程。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