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