如何检查一个大数是否是R中整数的平方?

How to check if a big number is a square of an integer in R?

我想检查 22x22 矩阵的行列式是否为整数的平方。

所以我有

> det(M)
[1] 1.849688e+29
> sqrt(det(M))
[1] 4.3008e+14

但是现在我看不到这个数字的小数位

所以,如果我 运行

> options(digits=22)
> sqrt(det(M)) 
[1] 430080000000001.1875000

我有这个结果,这意味着它不是整数的平方。

所以,当我使用下面的函数时

check.integer <- function(N){
    !length(grep("[^[:digit:]]", as.character(N)))
}

结果为整数

您的 check.integer 函数并没有真正检查某物是否为整数。它检查 R 的字符表示是否恰好包含非数字字符。这是一种非常糟糕的做事方式。您想知道某些东西是否真的 和整数,而不仅仅是它看起来像一个。

此外,R中已经有is.integer函数

但这对你的情况可能没有帮助。 R 只会准确表示某个点之前的整数,这是 .Machine 中存储的众多内容之一。特别是:

.Machine$integer.max

如果您想检查可能大于 .Machine$integer.max 的矩阵行列式是否是 R 中的正方形,您可以考虑使用任意精度。 Rmpfr 包应该能够为您完成所有这些工作。它允许您拥有任意精度矩阵,拥有自己的 determinant 函数,并且拥有自己的 is.whole 函数。