我最近在执行此表达式时遇到了一个错误:
Math.max(Number.MIN_VALUE, 0)
// returns 5e-324
我不太确定它是如何返回这个值的,所以我尝试反转表达式以查看会发生什么:
Math.min(Number.MAX_VALUE, 0)
// returns 0
但是,这工作正常..
我修复第一个表达式的方法是这样做:
Math.max(Number.MIN_SAFE_INTEGER, 0)
// returns 0
几个问题:
- 为什么取
Number.MIN_VALUE
和零的最大值等于 5e-324? - 如果我们有
Number.MIN_SAFE_INTEGER
我们应该始终使用它还是有用例Number.MIN_VALUE
? - 如果我只是使用 MIN/MAX 值作为初始状态(在第一次比较时肯定会被覆盖(,我应该改用
-Inifinity / Infinity
吗?
为什么取 Number.MIN_VALUE 和零的最大值等于 5e-324
因为Math.MIN_VALUE
不是最低的负值。其最小正值。所以所有的正值都大于0
这就是为什么它返回5e-324
而不是0
如果我们有Number.MIN_SAFE_INTEGER我们应该一直使用它还是有Number.MIN_VALUE用例?
我想不出任何Number.MIN_VALUE
用例,因为它不安全。它可能会在代码中创建错误的计算。
如果我只是使用 MIN/MAX 值作为初始状态(在第一次比较时肯定会被覆盖(,我应该使用 -Inifinity/Infinity 代替
这完全取决于代码的目的。