C の浮動小数点数の精度
C では、浮動小数点数は特定の小数点以下の桁数まで正確です。ただし、この精度には制限があり、予期しない結果が生じる可能性があります。
問題ステートメント
次のコード スニペットを検討してください:
double a = 0.3;
std::cout.precision(20);
std::cout 図に示すように、a は 0.3 よりわずかに小さいですが、50 倍すると、b は 15.0 よりわずかに大きくなります。予想される結果からのこの逸脱は、浮動小数点精度の制限に起因する可能性があります。
ソリューション
正しい結果を得るには、数値型で使用可能な精度よりも高い精度。次の改訂されたコード スニペットは、このアプローチを示しています:
#include
#include
int main() {
double a = 0.3;
std::cout.precision(std::numeric_limits::digits10);
std::cout ::digits10);
std::cout このアプローチでは、精度が double データ型で利用可能な最大値に設定されることが保証されます。ループの反復回数が 50 回ではなく 5000 回など、非常に多い回数で実行される場合、精度の設定に関係なく、累積誤差が最終的に顕著になることに注意することが重要です。これは浮動小数点演算に固有の制限です。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3