Даны два целых числа:Почему `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 <- 2L
и b <- 3L
) возвращают числовые, это больше общий вещь, чтобы всегда возвращать числовые.
Сейчас на экспоненциации:
class(a^b)
# [1] "numeric"
Это один является несколько неожиданным для меня. Может ли кто-нибудь объяснить, почему он был разработан таким образом?
Я думаю, это потому, что результат может привести к 'Inf' ?? 'as.integer (Inf)' приведет к 'NA'. Пример: 2L^10000L – Arun
Хотя мне нравится выбранный ответ, возможно, можно спросить, есть ли какое-то преимущество в том, что фактический код для возведения в степень создает еще один «угловой случай». Особенно если код 'R' или функция' unix' 'pow', которая может быть вызвана, использует журналы для вычисления показателей в первую очередь. –