如何检查一个大数是否是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
函数。
我想检查 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
函数。