如何检查 R 中双精度变量的最大允许值?



我正在使用.Machine$double.xmax来获取最大的有限浮点数。if语句检查变量n1n2是否小于.Machine$double.xmax,但是在情况 1 中执行n1 %% 2后我得到的输出错误。

我的测试代码如下:

# Case 1
n1 <- as.double(9999999999999999)                   #16 digits
if(n1 < .Machine$double.xmax)
{
a <- n1 %% 2
print(a)
}
# Output: 0
# Case 2
n2 <- as.double(999999999999999)                    #15 digits
if(n2 < .Machine$double.xmax)
{
t <- n2 %% 2
print(t)
}
# Output: 1

如何正确检查变量的最大double值并防止情况 1。

你的两个测试用例都比.Machine$double.xmax得多,后者打印为1.797693e+308。 我认为你想要最大的整数表示为numeric,我相信这是with(.Machine, double.base^double.digits),即9.007199e+15在我的机器上。 这里有一个测试可能会说服你:

largest <- with(.Machine, double.base^double.digits)
largest - 1 < largest
#> [1] TRUE
largest + 1 > largest
#> [1] FALSE

创建于 2020-05-12 由 reprex 软件包 (v0.3.0(

你的第一个测试用例比largest大,而第二个测试用例更小,这也是事实。

最新更新