Подтвердить что ты не робот

Почему pow (-infinity, positive non-integer) + бесконечность?

Приложение C99 F (поддержка плавающих точек IEEE) говорит следующее:

pow(−∞, y) возвращает + ∞ при y > 0, а не нечетное целое число.

Но, скажем, (-∞) 0,5 фактически имеет мнимые значения ± ∞i, а не + ∞. C99s собственный sqrt(−∞) возвращает NaN и генерирует ошибку домена, как ожидалось. Почему тогда pow требуется вернуть + ∞?

(Большинство других языков используют библиотеку C напрямую или, подобно Python в этом случае, копируют поведение, требуемое от него стандартами, поэтому на практике это влияет не только на C99.)

4b9b3361

Ответ 1

Для нечетного целого y имеет смысл определить

pow(±0, y) = ±0

В конце концов, повышение до нечетной мощности всегда сохраняет знак. Если мы сможем сохранить знак нуля, мы могли бы это сделать. Для положительного нецелого y мы должны определить

pow(±0, y) = +0.

Знак undefined. Но мы не устанавливаем это для NaN для -0 по той же причине, что мы не устанавливаем sqrt(-0) равным NaN: это просто не имеет смысла. (FWIW, это также то, как это определено в разделе 9.2.1 стандарта IEEE-754-2008.)

Так как 1/± 0 = ± ∞ и математически

pow(x,y) = 1/pow(1/x,y)

тогда установка x=±∞ в приведенном выше примере приводит к:

pow(±∞,y) = 1/pow(±0,y) = 1/+0 = +∞

для y положительное нецелое число.