Appearance
EPSILON
本节目标:理解“EPSILON”的核心思路,并能把它用于实际开发或面试表达。 在 JavaScript 中,EPSILON 这个常量名通常表示一个极小的正数(如 1e-9,即 0.000000001),主要用于处理浮点数精度问题。以下是它的核心意义和常见用途:
1. 解决浮点数比较问题 JavaScript 使用 IEEE 754 双精度浮点数,可能导致如下经典问题: console.log(0.1 + 0.2 === 0.3); // false(实际结果为 0.30000000000000004) 通过 EPSILON 可以安全比较浮点数: function floatEqual(a, b, epsilon = EPSILON) { return Math.abs(a - b) < epsilon;}console.log(floatEqual(0.1 + 0.2, 0.3)); // true
2. 避免除以零的错误 在数学计算中,用 EPSILON 防止分母为零: function safeDivide(a, b) { return a / (b + EPSILON); // 避免 b=0 时 Infinity}
3. 图形计算/游戏开发 在需要高精度计算的场景(如向量运算、碰撞检测)中,EPSILON 用于: // 判断点是否在直线上function isPointOnLine(point, line) { return Math.abs(distance(point, line)) < EPSILON;}
4. 与 JavaScript 原生 Number.EPSILON 的区别
- 你定义的 EPSILON = 1e-9 是自定义的阈值,适用于大多数业务场景。
- JS 原生的 Number.EPSILON(≈ 2.22e-16)表示最小可表示差值,通常用于更严格的数值计算。
5. 其他常见用途
- 动画/插值:判断动画是否到达目标位置。 if (Math.abs(currentPos - targetPos) < EPSILON) stopAnimation();
- 机器学习:梯度下降等算法中的收敛判断。
最佳实践
- 命名建议:如果用途明确,可命名更具体(如 POSITION_EPSILON、ANGLE_EPSILON)。
- 值的选择:1e-9 对大多数场景足够小,但物理仿真可能需要更小(如 1e-12)。
总之,EPSILON 是处理浮点数精度问题的“安全阀”,平衡了计算精度与性能。 > 来自 <https://yuanbao.tencent.com/chat/naQivTmsDa/daff0653-38c5-4fb1-aa6d-eda6e62a38d4>
