【发布时间】:2017-07-09 06:09:54
【问题描述】:
我正在尝试确定 JavaScript 数字中可用于加法和减法的最小可能非负、非零值。如有必要,则每个给定值的加法和减法的最小可能数字(即,如果“最小值”在给定范围内的数字之间不同,我想找到给定数字或数字范围的最小值,或者下一个大于或小于给定数字的数字也可以。)
作为强调我为什么要查找此内容的示例,请参阅this fiddle 或下面的代码。它只是按区域缩放一个矩形,给定起始宽度/高度和结束宽度/高度,值应该是整数。对于给定的示例,它的工作原理如下所述,但是我相当确定0.000000000000002 的软糖因子不会扩展到任何可能的值集。我知道绝大多数可能值的浮点范围内的解决方案都不是整数,而且许多解决方案甚至可能超出 JavaScript 数字的精度级别,或者根本无法在其中表示,但是鉴于下面的检查大于或小于基于比率和/或面积我非常有信心,如果我能找到结果可以抵消的最小可能值,我至少可以达到给定输入计算上最准确的数字,这将是这里的目标。
console.clear();
var w = 3;
var h = 5;
var a = w * h;
var r = w / h;
console.log(w, h, a, r);
var t = 240;
var w2 = Math.sqrt(t);
var h2 = w2;
w2 = w2 * r / Math.sqrt(r);
h2 = h2 / r * Math.sqrt(r);
var r2 = w2 / h2;
var m = 10;
var a2 = w2 * h2;
console.log(w2, h2, a2, r2);
while ((r2 > r) && (m > 0)) {
h2 += 0.000000000000002;
r2 = w2 / h2;
m--;
}
m = 10;
while ((r2 < r) && (m > 0)) {
h2 -= 0.000000000000002;
r2 = w2 / h2;
m--;
}
var a2 = w2 * h2;
console.log(w2, h2, a2, r2);
输出:
Console was cleared
3 5 15 0.6
12 20.000000000000004 240.00000000000006 0.5999999999999999
12 20 240 0.6
【问题讨论】:
-
谢谢,由于依赖于另一个库,我避免使用该关键字,但关键字将我引导至gist.github.com/Yaffle/4654250,因此如果您想将其作为答案发布,我会接受。跨度>
标签: javascript floating-point numbers precision