Чому 0 ^ 0 в калькуляторі macOS та iOS дає різні результати в різних версіях?


17

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

  • iOS 10.3 => 1
  • iOS 11.4 => Помилка
  • macOS 10.12.6 => 1
  • macOS 10.13.5 => Не число

У чому причина різниці?


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? .


4
Ви маєте на увазі при x = 0, а не n = 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 ^ y переривається при (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. Якщо потужність є цілим цілим числом, результат такий же, як і для Pown, інакше результат такий, як і для powr (за винятком деяких виняткових випадків).

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

Варіант порошку надихається функцією порошку від C99, головним чином для сумісності. [21] Це корисно здебільшого для мов з єдиною функцією живлення. Варіанти Pown та Powr були введені через суперечливе використання силових функцій та різних точок зору (як зазначено вище). [22]

Звичайно, це не має жодного стосунку до того, який правильний математичний результат: як зазначають інші, відповідь існує більше ніж одна, і IEEE довелося приймати довільне рішення.



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
Dennis

3
0 ^ 0 = 1 абсолютно не суперечить. 0 ^ 0 - це порожній добуток , і тому 1. 0 ^ 0 - це кардинальність набору функцій від порожнього набору до порожнього набору, і існує саме одна така функція . Це необхідно для многочленів . Список продовжується.
користувач76284

4

Існує деяка напівпровідність приблизно 0⁰, яка зводиться до функції x ^ y, що має розрив при (x, y) -> (0,0). Це напівпровідність, оскільки математична нісенітниця забороняє функції, що мають значення при розриві.

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

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

Це також має добрий сенс, оскільки воно не довільно обмежує біноміальну теорему ненульовими значеннями. Таким чином, це аргумент, заснований на спробі досконало виконати функцію x at при x = 0, зробивши її визначеною і безперервною всюди.

Якщо ми спробуємо це замість функції 0 ^ x, то межа при x = 0 + може бути дорівнює 0, але визначення її як такої все ще не допомагає вилікувати суттєвий розрив, оскільки функція не визначена для від'ємного x.

Тепер калькулятори, як правило, обчислюють x ^ y як exp (y * ln (x)). Звичайно, це погана новина для x = 0. Таким чином, такі значення повинні бути явно запрограмовані, або ви отримаєте не-число. Для явного програмування вам потрібно покластися на математичну інтуїцію програміста, і типовий програміст буде більше керуватися псевдоматематичною інтуїцією на зразок "функція повинна бути безперервною, де визначено", ніж математик.

Крім того, ви можете очікувати шквалу коментарів від різних користувачів, і чисті математики не будуть повертатися до калькуляторів за своє бачення математичної істини настільки багато, тож ви не можете очікувати, що їх внесок зможе переконатись від інших.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.