Почему 0 ^ 0 в калькуляторе macOS и iOS дает разные результаты в разных версиях?

17

Я проверил результат 0 ^ 0 в калькуляторе на разных версиях:

  • iOS 10.3 => 1
  • iOS 11.4 => Ошибка
  • macOS 10.12.6 => 1
  • macOS 10.13.5 => не число

В чем причина разницы?

mspanc
источник
22
Тогда мне придется придерживаться Высшей Сьерры, потому что я люблю хлеб NaN ;-))
Tetsujin
также news.ycombinator.com/item?id=8502968 <(яблоко прекратило публиковать свою версию библиотеки математических библиотек libm)
надень светлую
3
Вы спрашиваете, чтобы вы могли понять математику, или вы спрашиваете, почему Apple несколько раз меняла свою интерпретацию 0 ^ 0? Если это первое, приемлемый ответ опубликован; если последнее, то это не обязательно может быть ответственно.
zr00
В версии 10.11.6 результат 1
Роберт Ковал

Ответы:

20

Хотя 0⁰ обычно не определено, некоторые разделы математики явно определяют его как 1, потому что, как вы можете видеть , это значение, к которому сходится функция y (x) = xˣ при n = 0.

Менее формально, обратите внимание, что 0,5 0,5 = 0,707 ...; 0,2 0,2 = 0,725…; 0,1 0,1 = 0,794… и 0,01 0,01 = 0,955…. По мере приближения к 0 результат будет приближаться к 1, что делает его вполне логичным и удобным для определения 0 ^ 0 как 1 в некоторых случаях .

Таким образом, ни один из этих 3-х результатов неверен сам по себе, и вместо этого все они отражают различные соглашения о значении этого неопределенного выражения.

Есть хорошая статья Википедии, объясняющая проблему. Смотрите также От нуля до нулевой степени - это 0⁰ = 1? ,

Undercat поддерживает Monica
источник
4
Вы имеете в виду при х = 0, а не п = 0.
Руслан
2
Я никогда прежде не сталкивался с этим конкретным обоснованием для установки 0 ^ 0 = 1. В конце концов, x ^ y не имеет ограничений при (x, y) → (0,0). Однако , если вы напишите общий многочлен в форме ∑ c_n x ^ n, где n в сумме находится в диапазоне от 0 до n (степень многочлена), становится необходимым иметь 0 ^ 0 = 1, иначе постоянный термин не так уж и постоянен. Смотрите также здесь.
Харальд Ханче-Олсен
@ HaraldHanche-Olsen Это очень проницательный момент, пожалуйста, подумайте над тем, чтобы написать ответ, или смело редактируйте мой. Моя интуиция проистекала из того факта, что большинство функций в форме e ^ {αx ^ β * ln ^ {ξx ^ γ + μ}} будут сходиться к 1 (за исключением β = 0 и, возможно, некоторых других краевых случаев), и этот класс часто встречается в инженерных приложениях, то есть для тех вещей, для которых люди, вероятно, будут использовать приложение калькулятор, но я понимаю, что это немного надумано.
Undercat поддерживает Монику
3
Хотя этот ответ дает хорошее объяснение того, что 0 ^ 0 можно / можно определить, он не объясняет, почему Apple несколько раз меняла их интерпретацию.
zr00
1
@DawoodibnKareem Мой комментарий выше и, более конкретно, упомянутый вопрос на math.se должен объяснить, почему может быть полезно иметь 0 ^ 0 равным 1. Конечно, такое соглашение имеет свою цену: выражение x ^ у разрывается в (0,0).
Харальд Ханче-Олсен
13

Большинство реализаций арифметики с плавающей запятой следуют стандарту IEEE 754-2008, в котором указано, что pow (0,0) возвращает 1 (см. §9.2.1).

Но он также определяет две другие функции: pown (0,0) = 1 и powr (0,0) = NaN.

Википедия резюмирует это следующим образом :

Стандарт IEEE 754-2008 с плавающей точкой используется при разработке большинства библиотек с плавающей точкой. Он рекомендует ряд операций для вычисления мощности: [20]

pow рассматривает 0 0 как 1. Если power является точным целым числом, результат такой же, как для pown, в противном случае результат такой же, как и для powr (за исключением некоторых исключительных случаев).

pown рассматривает 0 0 как 1. Степень должна быть точным целым числом. Значение определяется для отрицательных оснований; например, pown (-3,5) равно -243. powr рассматривает 0 0 как NaN (Not-a-Number - undefined). Значение также равно NaN для случаев, подобных powr (-3,2), где основание меньше нуля. Значение определяется как epower × log (base).

Вариант pow вдохновлен функцией pow из C99, в основном для совместимости. [21] Это полезно в основном для языков с одной степенной функцией. Варианты pown и powr были введены из-за противоречивого использования степенных функций и разных точек зрения (как указано выше). [22]

Конечно, это не имеет никакого отношения к правильному математическому результату: как отметили другие, существует более одного возможного ответа, и IEEE пришлось принять произвольное решение.

Майкл Кей
источник
5

Кто-то из Apple понял, что 0 ^ 0 - недопустимая операция, и исправил ее.

Nohillside
источник
5

Ноль в ноль является противоречием

  • 0 раз любое число равно 0
  • любое число в степени 0 равно 1

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

Аллан
источник
9
(Очень ржавый любитель) математик хотел бы утверждать , что предел 0 ^ х 0 при х стремится к 0 , а предел х ^ х 1 при х стремится к 0 , следовательно , у вас есть разрыв , который является само определение неопределенных и согревает мое услышанное, чтобы увидеть NaN на одной истинной ОС
bmike
1
согревает мое услышанное - изображения жарких овец, делающих проблемы с конкрементом, со своим Шеппардом, @bmike :-D
Аллан
2
@MrLister «определяется некоторыми авторами и не определяется другими авторами» - именно так работает математика. Почти во всех контекстах 0 ^ 0 = 1 является правильным определением (например, это число функций от пустого набора до пустого набора). Тот факт, что x ^ y не может непрерывно расширяться в начало координат, вызывает сожаление и является причиной того, что некоторые преподаватели анализа предпочитают оставлять его неопределенным, чтобы избежать путаницы, но даже им приходится принимать 0 ^ 0 = 1, как только они доберутся до силовой ряд.
Эйке Шульте
3
@bmike Нет необходимости использовать ограничения. Тот факт, что x ^ y будет прерывистым в (0, 0) , не означает, что вы не можете присвоить значение 0 ^ 0
Деннис
3
0 ^ 0 = 1 абсолютно не противоречие. 0 ^ 0 - это пустое произведение , и, следовательно, 1. 0 ^ 0 - это мощность множества функций от пустого набора до пустого набора, и существует ровно одна такая функция . Это необходимо для полиномов . Список можно продолжить.
user76284
4

Существует некоторая полуконверсия о 0 about, которая сводится к функции x ^ y, имеющей разрыв при (x, y) -> (0,0). Это полуконтроль, поскольку математически бессмысленно запрещать функцию, имеющую значение при разрыве.

Общепринятая практика - встраивать целые числа в вещественные числа так, чтобы функция, определенная в числах, соответствовала той же функции, что и целые числа, всякий раз, когда действительная функция принимает целочисленные значения. Так что нет смысла отличать 0.0 ^ 0 от 0.0 ^ 0.0.

Теперь x⁰ с целым числом 0 в качестве показателя является произведением, содержащим ровно ноль множителей x. Поскольку в его значении нет факторов x, нет смысла присваивать ему значение, зависящее от x, и его значение как пустого произведения довольно ясно равно 1, нейтральному элементу для умножения.

Это также имеет смысл, так как не ограничивает произвольно теорему бинома ненулевыми значениями. В некотором смысле, это аргумент, основанный на попытках разумно завершить функцию x⁰ при x = 0, делая ее определенной и непрерывной везде.

Если мы попробуем это с функцией 0 ^ x вместо этого, предел при x = 0 + может быть 0, но определение его как такового все еще не помогает излечить существенный разрыв, поскольку функция не определена для отрицательного x.

Теперь калькуляторы имеют тенденцию вычислять x ^ y как exp (y * ln (x)). Конечно, это плохие новости для х = 0. Таким образом, такие значения должны быть явно запрограммированы, иначе вы получите не число. Для явного программирования вы должны полагаться на математическую интуицию программиста, и типичный программист будет больше руководствоваться псевдоматематической интуицией типа «функция должна быть непрерывной там, где она определена», чем математик.

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

Таким образом, результат является демократическим, а не математическим, и демократическое большинство имеет тенденцию меняться.


источник