podawano dwie liczby całkowite:Dlaczego `a^b` zwraca wartość numeryczną, gdy" a "i" b "są liczbami całkowitymi?
a <- 1L
b <- 1L
Jak można się spodziewać, dodawanie, odejmowanie lub mnożenie je również daje liczbę całkowitą:
class(a + b)
# [1] "integer"
class(a - b)
# [1] "integer"
class(a * b)
# [1] "integer"
Ale im podzielenie daje liczbowy:
class(a/b)
# [1] "numeric"
Myślę, że rozumiem dlaczego: ponieważ inne kombinacje liczb całkowitych (np. a <- 2L
i b <- 3L
) zwrócą liczbę, jest to bardziej ważne, aby zawsze zwracać wartość liczbową.
Teraz na potęgowanie:
class(a^b)
# [1] "numeric"
Ten jest trochę dla mnie zaskoczeniem. Czy ktoś może wyjaśnić, dlaczego został zaprojektowany w ten sposób?
Myślę, że to dlatego, że wynik może prowadzić do 'Inf' ?? 'as.integer (Inf)' spowodowałoby 'NA'. Np .: 2L^10000L – Arun
Podczas gdy podoba mi się wybrana odpowiedź, być może należałoby zapytać, czy jest jakaś korzyść z posiadania faktycznego kodu potęgowania, aby utworzyć kolejną "skrzynkę narożną". Zwłaszcza jeśli kod 'R' lub' unix' 'pow', które można nazwać, używa logów do obliczenia wykładników w pierwszej kolejności. –