Подсказанный фрагментом более раннего кода, играющего в гольф, почему бы:
>NaN^0
[1] 1
Вполне логично, что NA^0
равно 1, потому что NA
отсутствуют данные, а любое число, увеличенное до 0, даст 1, включая -Inf
и Inf
. Однако предполагается, что NaN
представляет собой не-число, так почему же это так? Это еще больше сбивает с толку/беспокоит, когда на странице справки для ?NaN
указано:
В R практически все математические функции (включая основные
Arithmetic
) должны правильно работать с+/- Inf
иNaN
в качестве ввода или вывода.Основное правило должно заключаться в том, что вызовы и отношения с
Inf
s действительно являются операторами с надлежащим математическим пределом.Вычисления с участием
NaN
вернутNaN
или, возможно,NA
: какое из этих двух значений не гарантируется и может зависеть от платформы R (поскольку компиляторы могут изменять порядок вычислений).
Есть ли за этим философская причина, или это просто связано с тем, как R представляет эти константы?
^
- это функция, которая не просто вызывает функциюC
pow
, она проверяет случай, когда основание равно 1 или показатель степени равен 0, и если любой из них равенTRUE
, он возвращает1.
перед вызовомpow
:if((x1 = INTEGER(s1)[i1]) == 1 || (x2 = INTEGER(s2)[i2]) == 0); REAL(ans)[i] = 1.;
- person Simon O'Hanlon   schedule 26.07.2013NA^0 == 1
имеет смысл, потому чтоInf^0
— неопределенная форма. То есть, если рассматривать его как предел, мы не можем определить по одной только этой форме, каково было значение исходного предела. Например, когда n приближается к бесконечности,exp(n)^*(1/n)
приближается к e, аn^(1/n)
приближается к 1, хотя оба они выглядят какInf^0
. - person orizon   schedule 26.07.2013