2013-06-02 1 views
14

을 감안할 때 두 개의 정수 :`a^b`는 'a`와`b`가 정수일 때 왜 숫자를 반환합니까?

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" 

이 사람은 나에게 조금은 놀람이다. 왜 이런 방식으로 설계되었는지 설명 할 수 있습니까?

+2

결과가 'Inf'로 이어질 수 있기 때문이죠? 'as.integer (Inf)'는 'NA'가됩니다. 예 : 2L^10000L – Arun

+1

내가 선택한 답변을 좋아하지만 아마도 실제 지수를 지수로 사용하는 데 또 다른 "코너 사례"를 만들 수 있다는 장점이 있는지 물을 수 있습니다. 특히 호출 할 수있는'R' 코드 또는'unix'' pow' 함수가 로그를 사용하여 처음에 지수를 계산하는 경우. –

답변

17

지수가 음수 인 경우에 적용됩니다.

6

^을 기능 집합으로, f(a)(b) = a^b으로 간주하십시오. a=2의 경우 정수가 반환되는 도메인은 [0,62] 값으로 제한됩니다 (64 비트 부호있는 정수라고 가정). 이것은 유효한 입력의 아주 작은 부분 집합입니다. 도메인은 a이 증가함에 따라 더 작아집니다.

+0

흥미 롭습니다. 나는 Rob Lyndon의 답을 더 좋아한다 ("정수는'^'연산 아래에서 [수학적으로 닫히지 않는다]). 그러나 당신의 것이 합리적이다 ("정수는'^'연산 하에서 닫히지 않는다.) - - 그러나 이것은 다소 흐릿 해집니다. 왜냐하면 부드러운/실용적인 근거를 결정해야하기 때문입니다 ... –

0

두 개의 정수를 더하고 빼고 곱하면 정수가됩니다. 지수화를 나누거나 수행하는 것은 십진법의 유무에 따른 결과로 정수 대신 숫자를 표시합니다.

+0

그리고 그것이 수용된 대답이 이미 말한 것입니다 ... – flodel

0

a^bexp(b * log(a))과 같이 구현 되었습니까?

+1

증거가 없으면 이런 종류의 발언은 코멘트로 남겨 두는 것이 가장 좋습니다. –

+0

이상하게도 충분히 :-) 그건 내 의견이 오래 전이었습니다. 좀 더 능동적이어야하고 기본 소스 코드를 엿볼 수 있어야합니다. –

관련 문제