プロットのためにMatlabまたはGNUPlotにインポートできるように、浮動小数点数を含む1次元配列であるz1という変数をテキストファイルに出力しています。バイナリ ファイル (.dat) は .txt ファイルより小さいと聞いたことがあります。.txt ファイルへの出力に現在使用している定義は次のとおりです。
void create_out_file(const char *file_name, const long double *z1, size_t z_size){
FILE *out;
size_t i;
if((out = _fsopen(file_name, "w+", _SH_DENYWR)) == NULL){
fprintf(stderr, "***> Open error on output file %s", file_name);
exit(-1);
}
for(i = 0; i < z_size; i++)
fprintf(out, "%.16Le\n", z1[i]);
fclose(out);
}
3 つの質問があります。
バイナリ ファイルはテキスト ファイルよりも本当にコンパクトですか?;
はいの場合、配列 z1 の値をバイナリ ファイルに出力できるように、上記のコードを変更する方法を知りたいです。fprintf を fwrite に置き換える必要があることを読みました。私の出力ファイルには、dodo.dat には配列 z1 の値が含まれ、1 行に 1 つの浮動小数点数が含まれている必要があると書かれています。
私のコードには %.16Le が含まれていますが、長い倍精度で 15 桁の精度があるため、%.15Le は正しいと思います。幅の位置にドット (.) を入れました。これにより、任意のフィールドに拡張して目的の数値を保持できると考えています。私は正しいですか?%.16Le の例として、1.0047914240730432e-002 のような出力を得ることができます。これにより、16 桁の精度が得られ、フィールドの幅は数値を正しく表示するのに適切な幅になります。幅の値ではなく、幅の位置にドット (.) を配置することをお勧めしますか?
どうもありがとう...
更新は次のように変更されています:
for(i = 0; i < z_size; i++)
fwrite(&z1, sizeof(long double), 1, out);
「wb+」への変更に加えて、よろしいですか?Matlab でバイナリ ファイルを読み取ることができません。