Pourquoi 0 ^ 0 dans la calculatrice macOS et iOS donne-t-il des résultats différents sur différentes versions?


17

J'ai vérifié le résultat de 0 ^ 0 dans la calculatrice sur différentes versions:

  • iOS 10.3 => 1
  • iOS 11.4 => Erreur
  • macOS 10.12.6 => 1
  • macOS 10.13.5 => Pas un nombre

Quelle est la raison de la différence?


22
Je vais devoir m'en tenir à High Sierra alors, 'parce que j'aime le pain NaN ;-))
Tetsujin


aussi news.ycombinator.com/item?id=8502968 <(Apple a cessé de publier sa version de la bibliothèque mathématique libm)
Don

3
Demandez-vous pour comprendre les mathématiques, ou demandez-vous pourquoi Apple a changé son interprétation de 0 ^ 0 plusieurs fois? Si c'est le premier, il y a une réponse acceptable affichée; si ce dernier, alors ce n'est pas nécessairement responsable.
zr00

Dans la version 10.11.6, le résultat est 1
Robert Kowal

Réponses:


20

Alors que 0⁰ n'est généralement pas défini, certaines branches des mathématiques le définissent explicitement comme 1 car, comme vous pouvez le voir , c'est la valeur à laquelle la fonction y (x) = xˣ converge à n = 0.

Moins formellement, notons que 0,5 0,5 = 0,707…; 0,2 0,2 = 0,725…; 0,1 0,1 = 0,794… et 0,01 0,01 = 0,955…. Lorsque vous approchez de 0, le résultat se rapproche de 1, ce qui rend assez logique et pratique de définir 0 ^ 0 comme 1 dans certains cas .

Ainsi, aucun de ces 3 résultats n'est incorrect en soi et au lieu de cela, ils reflètent tous des conventions différentes sur la valeur de cette expression non définie.

Il y a un bon article Wikipedia expliquant le problème. Voir aussi Zero to the zero power - is 0⁰ = 1? .


4
Vous voulez dire à x = 0, pas n = 0.
Ruslan

2
Je n'ai jamais rencontré auparavant cette justification particulière pour définir 0 ^ 0 = 1. Après tout, x ^ y n'a pas de limite comme (x, y) → (0,0). Cependant , si vous écrivez un polynôme général sous la forme ∑ c_n x ^ n, où n dans la somme varie de 0 à n (le degré du polynôme), il devient essentiel d'avoir 0 ^ 0 = 1, sinon le " constant »n'est pas si constant après tout. Voir aussi ici.
Harald Hanche-Olsen

@ HaraldHanche-Olsen C'est un point très perspicace, pensez à écrire une réponse ou n'hésitez pas à modifier la mienne. Mon intuition vient du fait que la plupart des fonctions sous la forme e ^ {αx ^ β * ln ^ {ξx ^ γ + μ}} convergeront vers 1 (à l'exception de β = 0 et peut-être d'autres cas marginaux), et cette classe est fréquemment rencontré dans les applications d'ingénierie, c'est-à-dire le genre de choses pour lesquelles les gens utiliseront probablement l'application de calculatrice, mais je comprends que c'est un peu exagéré.
undercat prend en charge Monica le

3
Bien que cette réponse donne une bonne explication de ce que 0 ^ 0 est / pourrait être défini comme, elle n'explique pas pourquoi Apple a changé son interprétation plusieurs fois.
zr00

1
@DawoodibnKareem Mon commentaire ci-dessus, et plus précisément, la question référencée sur math.se, devrait expliquer pourquoi il peut être utile d'avoir 0 ^ 0 comme 1. Bien sûr, une telle convention a un prix: l'expression x ^ y est discontinu à (0,0).
Harald Hanche-Olsen

13

La plupart des implémentations de l'arithmétique à virgule flottante suivent la norme IEEE 754-2008, qui spécifie que pow (0,0) renvoie 1 (voir §9.2.1).

Mais il définit également deux autres fonctions: pown (0,0) = 1 et powr (0,0) = NaN.

Wikipedia le résume comme suit :

La norme à virgule flottante IEEE 754-2008 est utilisée dans la conception de la plupart des bibliothèques à virgule flottante. Il recommande un certain nombre d'opérations pour calculer une puissance: [20]

pow traite 0 0 comme 1. Si la puissance est un entier exact, le résultat est le même que pour pown, sinon le résultat est comme pour powr (sauf dans certains cas exceptionnels).

pown traite 0 0 comme 1. La puissance doit être un entier exact. La valeur est définie pour les bases négatives; par exemple, pown (−3,5) est −243. powr traite 0 0 comme NaN (Not-a-Number - undefined). La valeur est également NaN pour les cas comme powr (−3,2) où la base est inférieure à zéro. La valeur est définie par epower × log (base).

La variante pow est inspirée de la fonction pow de C99, principalement pour la compatibilité. [21] Il est utile principalement pour les langues avec une seule fonction de puissance. Les variantes pown et powr ont été introduites en raison de l'utilisation conflictuelle des fonctions de puissance et des différents points de vue (comme indiqué ci-dessus). [22]

Bien sûr, cela n'a aucune incidence sur le résultat mathématique correct: comme d'autres l'ont noté, il y a plus d'une réponse possible, et l'IEEE a dû prendre une décision arbitraire.


5

Quelqu'un chez Apple a compris que 0 ^ 0 est une opération non valide et l'a corrigé.


5

Zéro à la puissance de zéro est une contradiction

  • 0 fois n'importe quel nombre est 0
  • tout nombre à la puissance 0 est 1

Cela devrait générer une erreur. La seule raison pour laquelle vous ne voyez pas d'erreur générée est due au fait que la version de la calculatrice en question n'a pas intercepté cette erreur d'entrée.


9
Le mathématicien (très rouillé amateur) voudrait faire valoir que la limite de 0 ^ x est 0 lorsque x approche 0 et la limite de x ^ x est 1 lorsque x approche 0, donc vous avez une discontinuité qui est la définition même de indéterminé et réchauffe mon audition de voir NaN sur le seul vrai OS
bmike

1
réchauffe mon audition - images de moutons chauds et grillés faisant des problèmes de calcul avec leur Sheppard, @bmike :-D
Allan

2
@MrLister «défini par certains auteurs et non défini par d'autres auteurs» est précisément le fonctionnement des mathématiques. Dans presque tous les contextes, 0 ^ 0 = 1 est la bonne définition (par exemple, c'est le nombre de fonctions de l'ensemble vide à l'ensemble vide). Le fait que x ^ y ne puisse pas être continuellement étendu à l'origine est regrettable et c'est la raison pour laquelle certains éducateurs d'analyse préfèrent ne pas le définir pour éviter la confusion, mais même ils doivent prendre 0 ^ 0 = 1 une fois qu'ils arrivent à série de puissance.
Eike Schulte

3
@bmike Il n'est pas nécessaire d'impliquer de limites. Ce n'est pas parce que x ^ y serait discontinu à (0, 0) que vous ne pouvez pas attribuer une valeur à 0 ^ 0
Dennis

3
0 ^ 0 = 1 n'est absolument pas une contradiction. 0 ^ 0 est un produit vide , et donc 1. 0 ^ 0 est la cardinalité de l'ensemble des fonctions de l' ensemble vide à l'ensemble vide, et il existe exactement une de ces fonctions . C'est nécessaire pour les polynômes . La liste continue.
user76284

4

Il existe une certaine controverse à propos de 0⁰ qui se résume à la fonction x ^ y ayant une discontinuité à (x, y) -> (0,0). Ceci est une semi-controverse car il est absurde mathématique d'interdire une fonction ayant une valeur à une discontinuité.

Il est courant d'incorporer des entiers dans les réels de sorte qu'une fonction définie sur les réels corresponde à la même fonction définie sur les entiers chaque fois que la fonction réelle prend des valeurs intégrales. Il est donc inutile de distinguer 0,0 ^ 0 de 0,0 ^ 0,0.

Maintenant, x⁰ avec le nombre entier 0 comme exposant est un produit contenant exactement zéro facteur de x. Comme aucun facteur de x n'est contenu dans sa valeur, il ne sert à rien de lui attribuer une valeur dépendant de x, et sa valeur en tant que produit vide est assez clairement 1, l'élément neutre pour la multiplication.

Cela a également du bon sens car il ne restreint pas arbitrairement le théorème binomial à des valeurs non nulles. D'une certaine manière, c'est un argument basé sur le fait d'essayer de compléter la fonction x⁰ sensiblement à x = 0, la rendant définie et continue partout.

Si nous essayons cela avec la fonction 0 ^ x à la place, la limite à x = 0 + peut être 0, mais la définir comme telle n'aide toujours pas à guérir la discontinuité essentielle puisque la fonction n'est pas définie pour x négatif.

Maintenant, les calculatrices ont tendance à calculer x ^ y comme exp (y * ln (x)). Bien sûr, c'est une mauvaise nouvelle pour x = 0. De telles valeurs doivent donc être programmées explicitement ou vous arriverez à pas un nombre. Pour une programmation explicite, vous devez vous fier à l'intuition mathématique du programmeur, et le programmeur type sera davantage guidé par l'intuition pseudomathématique comme "une fonction doit être continue là où elle est définie" qu'un mathématicien.

De plus, vous pouvez vous attendre à une vague de commentaires de différents utilisateurs, et les mathématiciens purs ne reviendront pas autant aux calculatrices pour leur vision de la vérité mathématique, vous ne pouvez donc pas vous attendre à ce que leur contribution submerge celle des autres.

Le résultat est donc plus démocratique que mathématique, et les majorités démocratiques ont tendance à changer.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.