Dlaczego 0 ^ 0 w kalkulatorze macOS i iOS daje różne wyniki w różnych wersjach?


17

Sprawdziłem wynik 0 ^ 0 w kalkulatorze w różnych wersjach:

  • iOS 10.3 => 1
  • iOS 11.4 => Błąd
  • macOS 10.12.6 => 1
  • macOS 10.13.5 => Brak liczby

Jaki jest powód różnicy?


22
Będę musiał trzymać się High Sierra, bo uwielbiam chleb NaN ;-))
Tetsujin


także news.ycombinator.com/item?id=8502968 <(Apple przestało publikować swoją wersję biblioteki bibliotek matematycznych)
don bright

3
Czy pytasz, abyś mógł zrozumieć matematykę, czy pytasz, dlaczego Apple zmieniło swoją interpretację 0 ^ 0 wiele razy? Jeśli jest to ten pierwszy, opublikowano akceptowalną odpowiedź; jeśli to drugie, to niekoniecznie może być odpowiedzialne.
zr00

W wersji 10.11.6 wynik to 1
Robert Kowal

Odpowiedzi:


20

Podczas gdy 0⁰ jest ogólnie niezdefiniowane, niektóre gałęzie matematyki jawnie definiują go jako 1, ponieważ, jak widać , jest to wartość, do której zbiega się funkcja y (x) = xˣ przy n = 0.

Mniej formalnie zauważ, że 0,5 0,5 = 0,707…; 0,2 0,2 = 0,725…; 0,1 0,1 = 0,794… i 0,01 0,01 = 0,955…. Gdy zbliżysz się do 0, wynik będzie zbliżał się do 1, co czyni logiczne i przydatne zdefiniowanie 0 ^ 0 jako 1 w niektórych przypadkach .

Zatem żaden z tych 3 wyników nie jest sam w sobie niepoprawny i zamiast tego wszystkie odzwierciedlają różne konwencje dotyczące wartości tego niezdefiniowanego wyrażenia.

Jest dobry artykuł w Wikipedii wyjaśniający ten problem. Zobacz także Zerowa moc zerowa - czy 0⁰ = 1? .


4
Masz na myśli x = 0, a nie n = 0.
Ruslan

2
Nigdy wcześniej nie spotkałem się z tym uzasadnieniem dla ustawienia 0 ^ 0 = 1. W końcu x ^ y nie ma limitu, ponieważ (x, y) → (0,0). Jednakże , jeśli napiszesz ogólny wielomian w C_n forma Ď x ^ n, gdzie n w zakresach sum od 0 do n (stopień wielomianu), staje się niezbędny, aby mieć 0 ^ 0 = 1, albo też „ „stały” termin wcale nie jest taki stały. Zobacz także tutaj.
Harald Hanche-Olsen

@ HaraldHanche-Olsen To bardzo wnikliwy punkt, prosimy o napisanie odpowiedzi lub edytowanie mojego. Moja intuicja wynikała z faktu, że większość funkcji w postaci e ^ {αx ^ β * ln ^ {ξx ^ γ + μ}} zbiegnie się w 1 (z wyjątkiem β = 0 i być może niektórych innych przypadków brzegowych) i tej klasy jest często spotykany w aplikacjach inżynieryjnych, tj. do rzeczy, do których ludzie prawdopodobnie będą używać aplikacji kalkulatora, ale rozumiem, że jest to trochę przesadne.
undercat wspiera Monikę

3
Chociaż ta odpowiedź dobrze wyjaśnia, czym 0/0 jest / można ją zdefiniować, nie wyjaśnia, dlaczego Apple kilkakrotnie zmieniało swoją interpretację.
zr00

1
@DawoodibnKareem Mój komentarz powyżej i, co najważniejsze, przywoływane pytanie na matematyce.se powinno wyjaśnić, dlaczego warto mieć 0 ^ 0 równą 1. Oczywiście taka konwencja ma swoją cenę: Wyrażenie x ^ y jest nieciągły przy (0,0).
Harald Hanche-Olsen

13

Większość implementacji arytmetyki zmiennoprzecinkowej jest zgodna ze standardem IEEE 754-2008, który określa, że ​​pow (0,0) zwraca 1 (patrz §9.2.1).

Ale definiuje także dwie inne funkcje: pown (0,0) = 1 i powr (0,0) = NaN.

Wikipedia podsumowuje to w następujący sposób :

Standard zmiennoprzecinkowy IEEE 754-2008 jest używany do projektowania większości bibliotek zmiennoprzecinkowych. Zaleca szereg operacji obliczania mocy: [20]

pow traktuje 0 0 jako 1. Jeśli moc jest dokładną liczbą całkowitą, wynik jest taki sam jak dla pown, w przeciwnym razie wynik jest taki jak dla powr (z wyjątkiem wyjątkowych przypadków).

pown traktuje 0 0 jako 1. Moc musi być dokładną liczbą całkowitą. Wartość jest zdefiniowana dla zasad ujemnych; np. pown (-3,5) wynosi -243. powr traktuje 0 0 jako NaN (Not-a-Number - undefined). Wartość jest również NaN dla przypadków takich jak powr (-3,2), w których zasada jest mniejsza niż zero. Wartość jest zdefiniowana przez epower × log (base).

Wariant pow został zainspirowany funkcją pow z C99, głównie ze względu na kompatybilność. [21] Jest to przydatne głównie w przypadku języków z jedną funkcją zasilania. Warianty pown i powr zostały wprowadzone ze względu na sprzeczne użycie funkcji mocy i różne punkty widzenia (jak wspomniano powyżej) [22].

Oczywiście nie ma to wpływu na prawidłowy wynik matematyczny: jak zauważyli inni, istnieje więcej niż jedna możliwa odpowiedź, a IEEE musiała podjąć arbitralną decyzję.


5

Ktoś z Apple zorientował się, że 0 ^ 0 jest nieprawidłową operacją i naprawił ją.


5

Zero do potęgi zerowej jest sprzecznością

  • 0 razy dowolna liczba to 0
  • dowolna liczba do potęgi 0 to 1

To powinno wygenerować błąd. Jedynym powodem, dla którego nie widzisz generowanego błędu, jest fakt, że dana wersja kalkulatora nie wychwyciła tego błędu wejściowego.


9
(Bardzo zardzewiały amator) matematyk chciałby twierdzić, że granica 0 ^ x wynosi 0 jak x zbliża się do 0, a limit x ^ x oznacza 1 jako x zbliża 0 zatem masz nieciągłość, która jest sama definicja nieokreślony i rozgrzewa mój słyszany widok NaN na jednym prawdziwym systemie operacyjnym
bmike

1
ogrzewa moje słyszał - zdjęć z przyjemnie ciepły owiec robi problemy nazębnego z ich Sheppard, @bmike :-D
Allan

2
@MrLister „zdefiniowane przez niektórych autorów i niezdefiniowane przez innych autorów” jest dokładnie tym , jak działa matematyka. W prawie wszystkich kontekstach 0 ^ 0 = 1 jest poprawną definicją (np. Jest liczbą funkcji od pustego zestawu do pustego zestawu). Fakt, że x ^ y nie może być stale rozszerzany na źródło, jest niefortunny i jest powodem, że niektórzy nauczyciele analizy wolą pozostawić go niezdefiniowanym, aby zapobiec nieporozumieniom, ale nawet oni muszą przyjąć 0 ^ 0 = 1, kiedy dojdą do seria mocy.
Eike Schulte,

3
@bikeike Nie ma potrzeby angażowania limitów. To, że x ^ y byłoby nieciągłe w (0, 0) , nie oznacza, że ​​nie można przypisać wartości do 0 ^ 0
Dennis

3
0 ^ 0 = 1 absolutnie nie jest sprzecznością. 0 ^ 0 jest pustym produktem , a zatem 1. 0 ^ 0 jest licznością zbioru funkcji od pustego zestawu do pustego zestawu, i jest dokładnie jedna taka funkcja . Jest to konieczne w przypadku wielomianów . I tak dalej.
user76284,

4

Jest trochę kontrowersji wokół 0⁰, która sprowadza się do funkcji x ^ y mającej nieciągłość w (x, y) -> (0,0). Jest to półkontrowersja, ponieważ matematycznym nonsensem jest zabronienie funkcji o wartości nieciągłości.

Powszechną praktyką jest osadzanie liczb całkowitych w liczbach rzeczywistych, tak aby funkcja zdefiniowana na liczbach rzeczywistych pasowała do tej samej funkcji zdefiniowanej na liczbach całkowitych, ilekroć funkcja rzeczywista przyjmuje wartości całkowite. Nie ma więc sensu rozróżniać 0,0 ^ 0 od 0,0 ^ 0,0.

Teraz x⁰ z liczbą całkowitą 0 jako wykładnikiem jest produktem zawierającym dokładnie zero czynników x. Ponieważ w jej wartości nie ma żadnych czynników x, przypisywanie jej wartości w zależności od x nie ma sensu, a jej wartość jako iloczynu pustego wynosi dość wyraźnie 1, element neutralny do mnożenia.

Ma to również sens, ponieważ nie ogranicza arbitralnie twierdzenia dwumianowego do wartości niezerowych. W pewnym sensie jest to argument oparty na próbie pełnego wypełnienia funkcji x⁰ przy x = 0, dzięki czemu jest zdefiniowana i ciągła wszędzie.

Jeśli spróbujemy tego z funkcją 0 ^ x, limit przy x = 0 + może wynosić 0, ale zdefiniowanie go jako takiego nadal nie pomaga wyleczyć zasadniczej nieciągłości, ponieważ funkcja jest niezdefiniowana dla ujemnego x.

Teraz kalkulatory mają tendencję do obliczania x ^ y jako exp (y * ln (x)). Oczywiście to zła wiadomość dla x = 0. Tak więc takie wartości muszą być wyraźnie zaprogramowane, inaczej dojdziesz do nie-liczby. W przypadku programowania jawnego musisz polegać na matematycznej intuicji programisty, a typowy programista będzie bardziej kierował się intuicją pseudomatyczną, taką jak „funkcja musi być ciągła tam, gdzie jest zdefiniowana”, niż matematyk.

Ponadto, możesz spodziewać się lawiny komentarzy od różnych użytkowników, a czysti matematycy nie powrócą do kalkulatorów, ponieważ ich wizja prawdy matematycznej jest aż tak duża, więc nie możesz oczekiwać, że ich wkład zatruwa opinie innych.

Rezultat jest bardziej demokratyczny niż matematyczny, a większość demokratyczna ma tendencję do zmiany.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.