0

プログラムを浮動小数点精度から倍精度に変更しています。それにもかかわらず、私はバイナリファイルから浮動小数点数を読み取ることからこのルーチンを開始します。

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のサイズはdouble、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);
4

1 に答える 1

1

そうではありません。それは(暗黙的に)をに変換し、double精度floatを失います。基本的に最下位ビットを切り落とします。

具体的な例がないので申し訳ありませんが、のようなもの9.223372036854775808になり9.223372037ます。

floatsにをロードすると、同様のことが起こりますdoubles。それらを別の形式に変換します。編集...うまくいきます。

于 2013-03-25T21:43:54.043 に答える