2

C ++のマシン精度の値を表すepsのようなものがあるのだろうか?ダブルが表すことができる最小の正の数としてそれを使用できますか?doubleが表すことができる最大の正の数として1.0/epsを使用することは可能ですか?C ++とCの両方の標準ライブラリのepsはどこにありますか?

ありがとう、よろしく!


アップデート:

私の目的では、逆距離加重補間( http://en.wikipedia.org/wiki/Inverse_distance_weighting )のようなものについて、距離の逆数として重みを計算したいと思います。

double wgt = 0, wgt_tmp, result = 0;
for (int i = 0; i < num; i++)
{
   wgt_tmp = 1.0/dist[i];
   wgt += wgt_tmp;
   result += wgt_tmp * values[i];
}
results /= wgt;

ただし、距離は0にすることができ、重みを計算に適したものにする必要があります。距離dist[i]が0の距離が1つしかない場合は、対応する値values[i]を支配的にしたいと思います。複数の距離が0である場合、それらの値が結果に等しく寄与するようにしたいです。それを実装する方法はありますか?

4

3 に答える 3

4

#include <limits>あなたが持っているを使用して

小さな正の値 =std::numeric_limits<float>::denorm_min()

正の最大値 =std::numeric_limits<float>::max()

もちろん、これは他のタイプにも当てはまります。

数値制限を参照してください

いいえ、正の最小値の逆数は最大値と等しくありません。

于 2010-02-02T15:54:45.163 に答える
3

数値制限情報をお探しですか?

このリンクは、C++ 標準ライブラリを使用してイプシロン、非正規化最小値などを見つける方法を示しています。C 標準ライブラリには、これらに相当するものはありません。それらを自分で計算する必要があります(「マシンイプシロン」に関するウィキペディアの記事に例があります)...

アルゴリズムに関しては、あなたを助けることはできません.これはあなたの最初の質問の一部ではありませんでした.

于 2010-02-02T15:48:23.950 に答える
2

これは、数値に求める精度に完全に依存します。double の最大値は非常に大きくなりますが、丸め誤差が大きくなります。たとえば、1e-3 の精度が必要な場合は、浮動小数点数の後に少なくとも 10 ビットが必要です。 52 - 10 = 42 となり、最大値は約 4e12 になり、対応する最小値は約 2.5e-13 になります。

于 2010-02-02T18:09:15.263 に答える