algorithm - 计算机编程艺术中approximatelyEqual和essentiallyEqual的区别

标签 algorithm floating-point pseudocode approximation

我从其他地方得到这段代码片段。据站长介绍,代码摘自The art of computer programming by Knuth

因为我没有那本书的副本,我可以知道这两个功能有什么区别吗?

bool approximatelyEqual(float a, float b, float epsilon)
{
    return fabs(a - b) <= ( (fabs(a) < fabs(b) ? fabs(b) : fabs(a)) * epsilon);
}

bool essentiallyEqual(float a, float b, float epsilon)
{
    return fabs(a - b) <= ( (fabs(a) > fabs(b) ? fabs(b) : fabs(a)) * epsilon);
}

最佳答案

举个例子:

double a = 95.1, b = 100.0;
assert( approximatelyEqual( a, b, 0.05 ) );
assert( !essentiallyEqual( a, b, 0.05 ) );

也就是说,当 epsilon 为 5% 时,95.1 大约为 100,因为它落在 100 值(最大)的 5% 范围内。另一方面,95.1 本质上不是 100,因为 100 与 95.1(最小值)的差异不在 5% 以内。

关于algorithm - 计算机编程艺术中approximatelyEqual和essentiallyEqual的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3728783/

相关文章:

c++ - 找到具有 3 个变量的丢番图方程的一个特定解和解的数量的有效算法

perl - 为什么 Perl 的 sprintf 不能正确舍入 float ?

python - 获取维基数据上多个实体列表的记录

algorithm - 访问状态机的伪代码

将 0.125 转换为 7 位浮点格式

algorithm - 计算图的总度数

algorithm - 使用 "The longest increasing subsequence algorithm (nlgn)"增加子序列的数量

algorithm - 具有最大尾随零位数的区间中的整数

algorithm - 判断一个图是否是半连通的

c - 书上说 c 标准提供六位有效数字的浮点精度,但这不是真的吗?