Dans quels cas exponentiation complexe Python jeter une pile OverflowError trop-plein

Un coup d'oeil à la source pour exponentiation complexe montre que Python vérifie uniquement en cas de débordement à la fin du calcul. En outre, il y a un cas particulier pour les petits exposants entiers qui utilise exponentiation par élévation au carré, ce qui implique la multiplication complexe.







Ceci est la formule de multiplication complexe. Notez les points suivants:

Quand a et b sont très grandes, cela devient infini à virgule flottante moins l'infini à virgule flottante, qui est nan. Les résultats nan se propagent, et après quelques opérations, le résultat est (nanj nan +). Py_ADJUST_ERANGE2 ne fixe que errno si elle voit une infinité, il manque le trop-plein et continue son chemin.

Ok, je suis sûr que je compris cela.

Tout d'abord, j'ai remarqué quelque chose qui semblait un peu ridicule:

Encore plus intéressant. Voyons voir ce que Python pense 1e309 et 1e308:







En bref, chiffres cessent de déborder éventuellement, et commencent à retourner inf. Les calculs sont faciles avec .inf, mais les calculs avec des chiffres proches de ce ne sont pas! Voilà pourquoi 2 1e309 ** fonctionne tout 1e308 ** 2 ne fonctionne pas. Lorsqu'il est associé avec des nombres complexes, ce (quelle qu'en soit la raison) donne (nanj nan +). Je ne trouve cela en jouant avec la console - j'aimerais voir une explication plus approfondie!

Comme un côté note, j'ai trouvé drôle:

valeurs entières de Python peuvent autopromote à une longue précision arbitraire:

Flotteur valeurs trop-plein en raison de la limitation du point Floating IEEE:

Le composant d'un complexe Python est une classe de flotteur, soumis au même débordement:

Prenez la double valeur de précision habituelle max:

Ce que la plupart des mesures qui augmentent la valeur dans la plage de la plage de virgule flottante et vous obtenez inf:

Si l'extérieur de la fenêtre FP, le mantisa et l'exposant ne change pas:

Débordement peut être vu:

Mais comme indiqué dans les documents. il est appliqué de manière incompatible:

En raison de l'absence de normalisation des flottants exception du point de manutention dans C, la plupart des opérations en virgule flottante ne sont pas vérifiées aussi.

Ce qui peut être vu ici:







Articles Liés