97 votes

Pourquoi (inf + 0j)*1 est-il évalué à inf + nanj ?

>>> (float('inf')+0j)*1
(inf+nanj)

Pourquoi? Cela a causé un méchant bug dans mon code.

1 n'est-il pas l'identité multiplicative, donnant (inf + 0j) ?

95voto

Marat Points 1274

Le 1 est d'abord converti en un nombre complexe, 1 + 0j , qui conduit ensuite à une inf * 0 , ce qui donne un nan .

 (inf + 0j) * 1
(inf + 0j) * (1 + 0j)
inf * 1  + inf * 0j  + 0j * 1 + 0j * 0j
#          ^ this is where it comes from
inf  + nan j  + 0j - 0
inf  + nan j

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X