gpt4 book ai didi

java - 哦,不,不再 - 比较两碗矮牵牛 - 对不起 - 漂浮,为了平等

转载 作者:行者123 更新时间:2023-11-30 05:54:19 29 4
gpt4 key购买 nike

Due to rounding errors, most floating-point numbers end up being slightly imprecise.

https://www.floating-point-gui.de/errors/comparison/

public static boolean nearlyEqual(float a, float b, float epsilon) {
final float absA = Math.abs(a);
final float absB = Math.abs(b);
final float diff = Math.abs(a - b);

if (a == b) { // shortcut, handles infinities
return true;
} else if (a == 0 || b == 0 || diff < Float.MIN_NORMAL) {
// a or b is zero or both are extremely close to it
// relative error is less meaningful here
return diff < (epsilon * Float.MIN_NORMAL);
} else { // use relative error
return diff / Math.min((absA + absB), Float.MAX_VALUE) < epsilon;
}
}

epsilon 的通用标准值是什么?例如,如果我想将其硬编码为任何人都可以用来比较任何值的 API?

最佳答案

epsilon 没有通用标准,因为它很大程度上取决于您要比较的内容和目的。每次测试两个 float 是否接近相等时,您需要考虑两件事:

  • 这些数字的绝对值
  • 它们代表的数量类型

例如,众所周知,PI 为“3.14 左右”,这对于大多数工程应用来说已经足够好了,但在数学或光谱分析(天文学)中,您需要更高的精度。

即使在同一域中,您比较的数字的绝对值也会影响您对 epsilon 的选择。比较以公里为单位的地球周长与 40_000.00 与以米为单位的月球距离与 384_400_000.00 的误差容忍度完全不同。

关于java - 哦,不,不再 - 比较两碗矮牵牛 - 对不起 - 漂浮,为了平等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53449095/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com