C の浮動小数点数の精度
C で浮動小数点数を扱う場合、その精度の制限を理解することが不可欠です。次のコードを考えてみましょう。
double a = 0.3;
std::cout.precision(20);
std::cout 結果は 0.3 ではなく 0.2999999999999999889 となり、精度の低下を示します。これに対処するために、C は std::numeric_limits::digits10 定数を提供します。ここで、T は浮動小数点数の型です。この定数は、正確に表現できる最大有効桁数を表します。
std::numeric_limits::digits10 を使用して精度を正しく設定する方法は次のとおりです。
#include
#include
int main()
{
double a = 0.3;
std::cout.precision(std::numeric_limits::digits10);
std::cout ::digits10);
std::cout このコードは、精度を double で正確に表現できる最大有効桁数に設定します。その結果、どちらの場合も出力は 0.3 になります。
ただし、このアプローチを使用した場合でも、ループが 50 回を大幅に超えて反復される場合、累積誤差が発生する可能性があることに注意することが重要です。これは、浮動小数点数は近似値であり、一連の操作で誤差が蓄積される可能性があるためです。このような状況に対処するには、Boost.Multiprecision.
などの任意精度の演算を提供するライブラリを使用することをお勧めします。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3