如何使用 Math.hypot() 函数计算两点间距离避免溢出?
- 内容介绍
- 相关推荐
本文共计531个文字,预计阅读时间需要3分钟。
`Math.hypot(x, y)` 是 JavaScript 中专门用于计算欧几里得距离的函数,它能安全地处理大数值,避免因为使用 `x * x + y * y` 或 `y * y + x * x` 等中间平方运算导致的数值溢出问题(例如 `Infinity`)。
为什么普通平方和开方容易溢出
直接写 Math.sqrt(x*x + y*y) 时,若 x 或 y 很大(例如接近 1e200),x * x 就会超出 Number.MAX_VALUE(约 1.8e308),结果变成 Infinity,最终距离也变成 Infinity,即使真实结果仍在可表示范围内。
Math.hypot() 内部采用缩放算法:先找出最大绝对值项,再将所有参数按比例缩小后计算,最后还原结果,从而全程避开大数平方。
本文共计531个文字,预计阅读时间需要3分钟。
`Math.hypot(x, y)` 是 JavaScript 中专门用于计算欧几里得距离的函数,它能安全地处理大数值,避免因为使用 `x * x + y * y` 或 `y * y + x * x` 等中间平方运算导致的数值溢出问题(例如 `Infinity`)。
为什么普通平方和开方容易溢出
直接写 Math.sqrt(x*x + y*y) 时,若 x 或 y 很大(例如接近 1e200),x * x 就会超出 Number.MAX_VALUE(约 1.8e308),结果变成 Infinity,最终距离也变成 Infinity,即使真实结果仍在可表示范围内。
Math.hypot() 内部采用缩放算法:先找出最大绝对值项,再将所有参数按比例缩小后计算,最后还原结果,从而全程避开大数平方。

