2016-10-26 5 views
0

(15の小数点以下の精度)ファイルからデータを読み取る -読み取りする必要が私のテキストファイルは、次の形式(DATA.DAT)にあるC

0.001505882352941
34.900000000000018
121.800000000000010

float型のバッファに以下の値を代入したいのですが、バッファのデータ型を変更できないという制約があります。

fprintf(file_ptr, "%f", &buffer); 

R法も

double val; 
fprintf(file_ptr,"%lf", &val); 
buffer = (float *) val; 

が、私は適切な値
私は

値、小数点の後にcygwinのウィンドウ上で、このプログラムを実行しています を取得していないですがある15ヶ所

+2

ちょっと混乱しています。これらの値は実際には20桁以上の精度ですか?以前の浮動小数点計算の34.9と121.8に小さなアーチファクトを加えたものです。 – Phylogenesis

+0

〜15桁 –

+0

あなたは実際にその精度が必要ですか? 15桁の有効数字は、太陽系の円周(〜1.43e13m)を最も近いセンチメートルに近づけるのに非常に近いことに注意してください。 – Phylogenesis

答えて

2

まで常に数が一定であります私はバッファのデータ型を変更することができないことです。

それから問題があります。小数点以下

値は15ヶ所

倍精度浮動小数点数を保持できる有効桁数についてです

までの数は常に一定です。 IEEE 754倍精度浮動小数点値には、仮数部に使用できる53ビットがあります。これにより、log10(2^53)= 15.95小数点精度(15までの丸め)が得られます。それが保持できるものです。

精度が必要な場合は、多値数学ライブラリを使用する場合と組み合わせて、別のデータ型を使用する必要があります。

+0

これは大丈夫ですが、15桁まで読むことができますが、ファイルに記載されている値は得られません。 –

+0

@RohanG:何か、何か丸め誤差...浮動小数点は絶対精度の有理数のサブセットのみを表すことができます。そのセット以外のものについては、おおよその価値しか得られません。これは、浮動小数点を使用するときに同意しなければならない取引です。 – datenwolf

関連する問題