【发布时间】:2018-01-18 21:18:21
【问题描述】:
在 javascipt 中,我有一个像这样的 av 浮点“a”:
var a = 5.;
现在我想要一个比“a”略大的新数字“b”。我可以这样做:
var b = a + 1.e-10;
但是如果“a”是一个非常小的数字呢?
var a = 5.e-20;
var b = a + 1.e-10;
现在“b”比“a”大许多数量级。
此外,如果我将“a”和“b”之间的差异过小,则较大的“a”可能会导致差异被四舍五入。
如何使数字“b”大于任何数字“a”,但比任何其他大于“a”的数字更接近“a”,或者如何使数字“b”等于小于 "a" 但比任何其他小于 "a" 的数字更接近 "a"。
编辑:
太具体了:我正在寻找一个函数“makeLarger(a)”,它接受一个数字“a”并返回一个数字“b”,其中“b>a”将始终计算为真,“c>a && c对于任何数字 "c",
【问题讨论】:
-
这看起来很像 XY Problem - 你到底想完成什么?
-
这是一个很酷的问题。相关话题:en.wikipedia.org/wiki/Machine_epsilon
-
@Adrian 我需要帮助的 X 问题是最后一段中的问题。如何使“b”大于/小于“a”,但比所有其他较大/较小的数字更接近 a。我在上一段中提供的解决方案不起作用,因为如果“a”很小,我不希望“b”比“a”大很多数量级。此外,如果“a”很大,“b”将等于“a”。示例:1.e7 + 1.e-10 == 1.e7 计算结果为真,因此如果 a 为 1.e7,我的方法将不起作用。
-
@Adrian 我正在寻找一个函数“makeLarger(a)”,它接受一个数字“a”并返回一个数字“b”,其中“b>a”将始终计算为真并且“对于任何数字“c”,c>a && c
-
好的,但是您实际上想要完成什么?或者这纯粹是学术性的?
标签: javascript floating-point precision rounding-error