【发布时间】:2013-05-27 20:03:11
【问题描述】:
我想规范化一个数组,使每个值都在 [0-1) 中。即最大值永远不会是 1,但最小值可以是 0。这与返回相同范围内的数字的随机函数没有什么不同。
看着这个,我发现 .99999999999999999===1 是真的!同上 (1-Number.MIN_VALUE) === 1 但是 Math.ceil(Number.MIN_VALUE) 应该是 1。 其他一些:Math.floor(.999999999999) 为 0 而 Math.floor(.99999999999999999) 为 1
好的,所以 JS 中存在舍入问题。
有什么方法可以将一组数字归一化,使其位于 [0,1) 范围内?
【问题讨论】:
-
“标准化”是什么意思? 1的标准化值应该是多少? 1.5? 2?
-
也许:number/Number.MAX_VALUE
-
不存在“舍入问题”,但存在精度限制。 Javascript numbers 是双精度 64 位二进制格式 IEEE 754 值,因此在 15 位之后,您开始失去准确性,因为没有足够的位来准确表示所有数字。
-
您的范围的问题在于,对于您的最大数量应该转换的值是一种随意性。到 0.999?到 0.9999?你到底想达到什么目的?也许有更好的解决方案来解决您的问题。
-
谢谢大家......非常好的答案。稍后我将提交另一个更精确的问题。
标签: javascript math floor