R中整数计算期间从整数到数字的自动转换?

时间:2017-01-21 16:03:30

标签: r types type-conversion

以下是两个片段:

a = 1:1000000; res = as.integer(0);
class(res)
system.time(for (e in a) res = res + e ^ 2)
class(res)

###########################
fn1 <- function (N) 
{
  for(i in 1:N) {
    y <- i*i
  }
}
print (fn1(1000000))

底部片段来自此帖子: For-loop vs while loop in R

底部片段按预期工作,存在整数溢出,因为平方时的大数超过整数的边界。

然而,顶部片段产生了这个结果:

> a = 1:1000000; res = as.integer(0);
> class(res)
[1] "integer"
> system.time(for (e in a) res = res + e^2)
   user  system elapsed 
  0.411   0.001   0.412 
> class(res)
[1] "numeric"
> print (res)
[1] 3.333338e+17

我的问题是:为什么res改变为&#34;整数&#34;到&#34;数字&#34;?

1 个答案:

答案 0 :(得分:2)

因为幂操作^以双精度返回浮点数。

typeof( (2L) ^ 2 )
#[1] "double"

typeof( (2L) ^ (2L) )
#[1] "double"

如果您确实想在整数溢出实验中使用它,请使用

res = res + as.integer(e ^ 2)

lmo为您提供了R文档?"^"(或?Arithmetic):

如果两个参数都是整数类型,则/^的结果类型是数字,而对于其他运算符,它是整数(溢出,发生在+/- (2^31 - 1) ,以NA_integer_作为警告返回。