我正在使用.Machine$double.xmax
来获取最大的有限浮点数。if
语句检查变量n1
和n2
是否小于.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
大,而第二个测试用例更小,这也是事实。