Maison  >  Article  >  développement back-end  >  Combien d'octets le nombre à virgule flottante de Python occupe-t-il ?

Combien d'octets le nombre à virgule flottante de Python occupe-t-il ?

anonymity
anonymityoriginal
2019-06-12 11:24:4514762parcourir

Les nombres à virgule flottante sont représentés en utilisant la double précision native (64 bits) du nombre à virgule flottante sur la machine. Fournit environ 17 chiffres de précision et un exposant allant de -308 à 308. C'est la même chose que le double type en langage C. Python ne prend pas en charge les nombres à virgule flottante simple précision 32 bits. Si votre programme nécessite un contrôle précis sur les intervalles et la précision numérique, envisagez d'utiliser la bibliothèque d'extension numpy.

Python 3.X fournit une précision de 17 chiffres par défaut pour les nombres à virgule flottante.

Combien d'octets le nombre à virgule flottante de Python occupe-t-il ?

Explication populaire sur la simple précision et la double précision :

Simple précision et double précision, son type le spécificateur est un spécificateur flottant simple précision, un spécificateur double double précision. Dans Turbo C, le type simple précision occupe 4 octets (32 bits) d'espace mémoire, sa plage de valeurs est 3,4E-38~3,4E+38 et ne peut fournir que sept chiffres significatifs. Le type double précision occupe 8 octets (64 bits) d'espace mémoire, sa plage de valeurs est 1,7E-308~1,7E+308 et peut fournir 16 chiffres significatifs.

Nécessite plus de 17 chiffres d'analyse de précision

Python utilise par défaut 17 chiffres décimaux de précision, mais il y a un problème ici, c'est-à-dire , quand on Que faire lorsque le calcul nécessite une plus grande précision (plus de 17 décimales) ?

1. Utilisez un formatage (non recommandé)

>>> a = "%.30f" % (1/3)
>>> a
'0.333333333333333314829616256247'

peut être affiché, mais il n'est pas exact et les nombres suivants n'ont souvent aucun sens.

2. Utilisez le module décimal avec une haute précision et coopérez avec getcontext

>>> from decimal import *
>>> print(getcontext())
Context(prec=28, rounding=ROUND_HALF_EVEN, Emin=-999999, Emax=999999, capitals=1, clamp=0, flags=[], traps=[InvalidOperation, DivisionByZero, Overflow])
>>> getcontext().prec = 50
>>> b = Decimal(1)/Decimal(3)
>>> b
Decimal('0.33333333333333333333333333333333333333333333333333')
>>> c = Decimal(1)/Decimal(17)
>>> c
Decimal('0.058823529411764705882352941176470588235294117647059')
>>> float(c)
0.058823529411764705

La précision du contexte par défaut est de 28 bits, qui peut être définie sur 50 bits ou même plus. . De cette façon, lors de l’analyse de nombres à virgule flottante complexes, vous pouvez bénéficier d’une plus grande précision contrôlable. En fait, vous pouvez faire attention au paramètre rounding=ROUND_HALF_EVEN dans le contexte. ROUND_HALF_EVEN, à moitié, proche du pair.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn