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

anonymity
Libérer: 2019-06-14 09:53:17
original
14749 Les gens l'ont consulté

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'
Copier après la connexion

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
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!