机器精度

我想知道是否有类似eps的东西代表C ++中机器精度的价值? 我可以将它用作双重可以代表的最小正数吗? 是否可以使用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,我希望其对应的值[i]占优势。 如果有几个距离为0,我希望它们的值对结果的贡献相同。 知道如何实现它吗?

这完全取决于您希望从数字中获得的精度,双精度中的最大值非常大,但是会遇到巨大的舍入误差。 例如,如果你需要1e-3的精度,你需要浮点后至少10位,这意味着你不应该有任何指数大于尾数减去10的位数,如果是双精度,那就是52 – 10 = 42,最多约4e12,相应的最小值约为2.5e-13。

使用#include 你有

小正值= std::numeric_limits::denorm_min()

最大正值= std::numeric_limits::max()

显然这也适用于其他类型。

请参见numeric_limits

不,最小正值的倒数不等于最大值。

只是寻找数字限制信息?

该链接显示了如何使用C ++标准库查找epsilon,非规范化min等。 C标准库中没有相应的内容。 你需要自己计算它们(关于“机器epsilon”的维基百科文章给出了一个例子)……

至于算法,无法帮助你,这不是你原来问题的一部分,对不起。