众所周知,当比较两个实数时,以较小的公差工作以避免数值问题总是更好。
我正在寻找一个示例,当我们比较具有x
小数位数的数字d
时,对于以下表达式,返回FALSE
:
round(x, d) == x
例如,如果x=0.1234
,则d=4
。但是,这不是一个好例子,因为当您评估round(x, d) == x
返回TRUE
时。我正在寻找x
的值,其中round(x, d) == x
变成FALSE
。
答案 0 :(得分:3)
不清楚如何定义d
。在这里,我假设它是基于精确的代数定义的。
for (i in 1:20) print(1/(8 * 10^i) == round(1/(8 * 10^i), 3 + i))
sprintf("%.50f", 1/8e20)
#[1] "0.00000000000000000000124999999999999993158684291616"