机器精度
我想知道是否有类似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
最大正值= std::numeric_limits
显然这也适用于其他类型。
请参见numeric_limits
不,最小正值的倒数不等于最大值。
只是寻找数字限制信息?
该链接显示了如何使用C ++标准库查找epsilon,非规范化min等。 C标准库中没有相应的内容。 你需要自己计算它们(关于“机器epsilon”的维基百科文章给出了一个例子)……
至于算法,无法帮助你,这不是你原来问题的一部分,对不起。