Dati due interi:Perché `a^b` restituisce un valore numerico quando sia` a` che `b` sono numeri interi?
a <- 1L
b <- 1L
come mi sarei aspettato, aggiungendo, sottraendo, o moltiplicando anche dà un numero intero:
class(a + b)
# [1] "integer"
class(a - b)
# [1] "integer"
class(a * b)
# [1] "integer"
Ma dividendo dà loro un numerica:
class(a/b)
# [1] "numeric"
Penso di poter capire perché: perché altre combinazioni di numeri interi (ad esempio a <- 2L
e b <- 3L
) restituiscono un valore numerico, è il più generale cosa fare per restituire sempre un valore numerico.
Ora sopra elevamento a potenza:
class(a^b)
# [1] "numeric"
questo è un po 'una sorpresa per me. Qualcuno può spiegare perché è stato progettato in questo modo?
Immagino sia perché il risultato può portare a 'Inf' ?? 'as.integer (Inf)' risulterebbe in 'NA'. Es: 2L^10000L – Arun
Mentre mi piace la risposta selezionata, forse si potrebbe chiedere se ci sia qualche vantaggio nell'avere il codice effettivo per l'esponenziazione che crea ancora un altro "caso d'angolo". Soprattutto se il codice 'R' o' unix' 'pow' che può essere chiamato usa i log per calcolare gli esponenti in primo luogo. –