R 为什么当'a'和'b'都是整数时,'a^b'返回数字?

R 为什么当'a'和'b'都是整数时,'a^b'返回数字?,r,integer,exponent,R,Integer,Exponent,给定两个整数: a <- 1L b <- 1L 但将它们分开会得到一个数值: class(a / b) # [1] "numeric" 我想我能理解原因:因为其他整数组合(例如a这涵盖了指数为负的情况。将^视为一系列函数,f(a)(b)=a^b。对于a=2,此返回整数的域仅限于值[0,62](假设64位有符号整数)。这是有效输入的一个非常小的子集。域只会随着a的增加而变小。其简单的加、减和乘两个整数就得到整数。当除法或执行指数运算时,结果是带/不带小数的数字,这就是为什么显示的是

给定两个整数:

a <- 1L
b <- 1L
但将它们分开会得到一个数值:

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

我想我能理解原因:因为其他整数组合(例如
a这涵盖了指数为负的情况。

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

其简单的加、减和乘两个整数就得到整数。当除法或执行指数运算时,结果是带/不带小数的数字,这就是为什么显示的是数字而不是整数。

是否可能de>a^b
被实现为类似于
exp(b*log(a))

我想这是因为结果可能导致
Inf
成为.integer(Inf)
将导致
NA
.Ex:2L^10000l当我喜欢所选答案时,也许有人会问,让实际的求幂代码创建另一个“角落案例”是否有任何好处特别是如果
R
code或可以调用的
unix
pow
函数首先使用日志计算指数。有趣的是,我想我更喜欢Rob Lyndon的答案(“在
^
操作下整数[数学上]不是闭合的”),但你的答案是合理的(“整数在
^
操作下[计算]不是闭合的”——但这会变得很棘手,因为人们必须开始根据模糊的/实用的理由来决定……在没有证据的情况下,这种注释最好作为注释。够奇怪的是:-)这是我刚才的评论。我应该更积极主动地去看看基本的源代码。
class(a / b)
# [1] "numeric"
class(a ^ b)
# [1] "numeric"