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?
Sprawdziłem wynik 0 ^ 0 w kalkulatorze w różnych wersjach:
Jaki jest powód różnicy?
Odpowiedzi:
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? .
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ę.
Ktoś z Apple zorientował się, że 0 ^ 0 jest nieprawidłową operacją i naprawił ją.
Zero do potęgi zerowej jest sprzecznością
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.
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.