A la suite d'un code de golf antérieur, pourquoi le feraient-ils ?
>NaN^0
[1] 1
C'est tout à fait logique pour NA^0
à 1 parce que NA
est une donnée manquante, et cualquier un nombre porté à 0 donne 1, y compris -Inf
y Inf
. Cependant NaN
est censé représenter pas un numéro Pourquoi en est-il ainsi ? C'est d'autant plus déroutant et inquiétant que la page d'aide de ?NaN
États :
Dans R, toutes les fonctions mathématiques (y compris les fonctions de base de la
Arithmetic
), sont censés fonctionner correctement avec+/- Inf
yNaN
comme d'entrée ou de sortie.La règle de base devrait être que les appels et les relations avec les
Inf
sont vraiment avec une limite mathématique appropriée.Calculs impliquant
NaN
renverraNaN
ou peut-êtreNA
: lequel de ces deux n'est pas n'est pas garanti et peut dépendre de la plate-forme R (puisque compilateurs peuvent réordonner les calculs).
Y a-t-il une raison philosophique à cela, ou est-ce simplement lié à la façon dont R représente ces constantes ?
0 votes
Je ne sais pas pour R mais la même chose se produit en Python sur ma machine avec la même erreur : 1**nan returning 1.0
6 votes
@hivert au moins dans le cas de R
^
est une fonction qui ne se contente pas d'appeler la fonctionC
fonctionpow
Il vérifie si la base est 1 ou si l'exposant est 0 et si l'un ou l'autre estTRUE
il renvoie1.
avant d'appelerpow
:if((x1 = INTEGER(s1)[i1]) == 1 || (x2 = INTEGER(s2)[i2]) == 0); REAL(ans)[i] = 1.;
3 votes
Je ne suis pas convaincu
NA^0 == 1
n'a pas non plus beaucoup de sens parce queInf^0
est une forme indéterminée. En d'autres termes, lorsqu'elle est considérée comme une limite, nous ne pouvons pas déterminer, à partir de cette seule forme, quelle était la valeur de la limite d'origine. Par exemple, lorsque n s'approche de l'infini,exp(n)^*(1/n)
se rapproche de e, maisn^(1/n)
s'approche de 1, même si les deux ont l'air deInf^0
.0 votes
Juste un commentaire à ce sujet : "tout nombre élevé à 0 donnera 1, y compris -Inf et Inf" : pour -Inf et +Inf, la valeur devrait être NaN, car il s'agit de limites indéterminées. Pensez à (1 + 1/x)^x lorsque x s'approche de 0.