誰かがC関数で浮動小数点数の精度を選択する方法を説明できますか?
例:
theFatFunction(0.666666666, 3)
は0.667を返します
theFatFunction(0.111111111, 3)
は0.111を返します
精度はデータタイプ(つまり、float
またはdouble
または_long double
_)によって決定されるため、これを行うことはできません。印刷のために丸めたい場合は、printf()
で適切なフォーマット指定子を使用できます。つまり、printf("%0.3f\n", 0.666666666)
です。
できません。精度は完全にデータ型に依存します。 float
とdouble
があり、それで終わりです。
フロートには、静的な固定精度があります。変更することはできません。時々できることは、数値を丸めることです。
このページ を参照し、10の累乗でスケーリングすることを検討してください。すべての数値が浮動小数点数として正確に表現できるわけでもないことに注意してください。
ほとんどのシステムは、いくつかの浮動小数点型を定義するIEEE-754浮動小数点標準に準拠しています。
これらのシステムでは、通常、float
はIEEE-754 binary32
単精度タイプであり、24ビットの精度を持っています。 double
はbinary64
倍精度型です。 53ビットの精度があります。ビット数の精度はIEEE-754標準で定義されており、変更できません。
fprintf
ファミリーの関数(printf
など)を使用して浮動小数点型の値を出力する場合、精度は有効桁の最大数として定義され、デフォルトでは6桁に設定されています。変換仕様の.
の後に10進数を続けると、デフォルトの精度を変更できます。例えば:
printf("%.10f\n", 4.0 * atan(1.0)); // prints 3.1415926536
一方
printf("%f\n", 4.0 * atan(1.0)); // prints 3.141593
精度は、データ型(つまり、floatまたはdoubleまたはlong double)によって決定されます。
印刷のために丸めたい場合は、printf()で適切なフォーマット指定子を使用できます。
printf("%0.3f\n", 0.666666666) //will print 0.667 in c
次に、計算のために丸めたい場合は、最初に浮動小数点を10の桁数で乗算してから、intに型キャストし、計算を実行してから、浮動小数点に型キャストして、同じ10の累乗で除算します。
float f=0.66666;
f *= 1000; // 666.660
int i = (int)f; // 666
i = 2*i; // 1332
f = i; // 1332
f /= 1000; // 1.332
printf("%f",f); //1.332000
おおよそ次の手順になる可能性があります。
ありがとうございました。