14

给定两个整数:

a <- 1L
b <- 1L

正如我所料,加、减或乘它们也会得到一个整数:

class(a + b)
# [1] "integer"
class(a - b)
# [1] "integer"
class(a * b)
# [1] "integer"

但是将它们分开会给出一个数字:

class(a / b)
# [1] "numeric"

我想我可以理解为什么:因为整数的其他组合(例如a <- 2Lb <- 3L)会返回一个数字,所以更一般的做法是始终返回一个数字。

现在到幂:

class(a ^ b)
# [1] "numeric"

这对我来说有点意外。谁能解释为什么它是这样设计的?

4

4 回答 4

17

这涵盖了指数为负的情况。

于 2013-06-02T22:07:54.447 回答
6

考虑^作为一个函数族,f(a)(b) = a^b。对于a=2,它返回整数的域被限制为值 [0,62](假设 64 位有符号整数)。这是有效输入的一个非常小的子集。域只会随着a增加而变小。

于 2013-06-02T22:12:33.673 回答
0

它对两个整数的简单加、减和相乘得到整数。在除法或执行幂运算时会产生带/不带小数的数字,这就是为什么显示数字而不是整数的原因。

于 2013-06-03T04:32:30.083 回答
0

是否有可能a^b被实施为类似的东西exp(b * log(a))

于 2013-06-03T05:50:52.933 回答