C の浮動小数点数の精度
C で浮動小数点数を扱う場合、その精度の制限を理解することが不可欠です。次のコードを考えてみましょう:
<code class="cpp">double a = 0.3; std::cout.precision(20); std::cout << a << std::endl;
結果は 0.3 ではなく 0.2999999999999999889 となり、精度の低下を示します。これに対処するために、C は std::numeric_limits std::numeric_limits このコードは、精度を double で正確に表現できる最大有効桁数に設定します。結果として、どちらの場合も出力は 0.3 になります。 ただし、このアプローチを使用した場合でも、ループが 50 回を大幅に超えて反復される場合、累積誤差が発生する可能性があることに注意することが重要です。これは、浮動小数点数は近似値であり、一連の操作で誤差が蓄積される可能性があるためです。このような状況に対処するには、Boost.Multiprecision などの任意精度の演算を提供するライブラリを使用することをお勧めします。 以上がC で正確な浮動小数点精度を確保するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。<code class="cpp">#include <iostream>
#include <limits>
int main()
{
double a = 0.3;
std::cout.precision(std::numeric_limits<double>::digits10);
std::cout << a << std::endl;
double b = 0;
for (char i = 1; i <= 50; i++) {
b = b + a;
};
std::cout.precision(std::numeric_limits<double>::digits10);
std::cout << b << std::endl;
}</code>