最近在一次采访中有人问我,使用浮点算术计算两点之间距离的最佳方法是什么?
我幼稚的答案是:
假设两个点是(a,b)和(c,d),答案是
dist = sqrt( (a-c)*(a-c) + (b-d)*(b-d))
但是,我现在意识到,如果这些点非常接近,则平方将首先导致下溢。有没有更准确的方法可以做到这一点?
答案 0 :(得分:3)
正如马克·迪金森(Mark Dickinson)在评论中提到的那样,数学库倾向于提供hypot函数。
维基百科文章实际上解决了上溢/下溢问题。
https://en.wikipedia.org/wiki/Hypot
摘自文章:
天真的实现的困难在于x 2 或y 2 可能溢出或下溢,除非以扩展的精度计算中间结果。一种常见的实现技术是在必要时交换值,以便| x |。 ≥| y |,然后使用等效形式:
y / x的计算不会溢出。如果y / x下溢,则最终结果等于| x |,这在计算精度内是正确的。平方根的值在1到2之间。最后,乘以| x |不能下溢,并且仅在结果太大而无法表示时才溢出。