Двойная точность плавающих значений в Python? - PullRequest
69 голосов
/ 12 июля 2011

Существуют ли типы данных с большей точностью, чем float?

Ответы [ 5 ]

96 голосов
/ 12 июля 2011

Встроенный тип Python float имеет двойную точность (это C double в CPython, Java double в Jython). Если вам нужно больше точности, получите NumPy и используйте его numpy.float128.

44 голосов
/ 12 июля 2011

Десятичный тип данных

  • В отличие от двоичной аппаратной части с плавающей запятой, десятичный модуль имеет изменяемую пользователем точность (по умолчанию до 28 разрядов), которая может быть настолько большой, насколько это необходимо для данной проблемы.

Если вас беспокоит проблема производительности, взгляните на GMPY

12 голосов
/ 12 июля 2011

Для некоторых приложений вы можете использовать Fraction вместо чисел с плавающей запятой.

>>> from fractions import Fraction
>>> Fraction(1, 3**54)
Fraction(1, 58149737003040059690390169)

(Для других приложений есть decimal,как указано в других ответах.)

12 голосов
/ 12 июля 2011

Может быть, вам нужно десятичное число

>>> from decimal import Decimal    
>>> Decimal(2.675)
Decimal('2.67499999999999982236431605997495353221893310546875')

Арифметика с плавающей точкой

2 голосов
/ 31 марта 2015

Вот мое решение. Сначала я создаю случайные числа с помощью random.uniform, форматирую их в строку с двойной точностью, а затем преобразовываю их обратно в число с плавающей точкой. Вы можете отрегулировать точность, изменив «.2f» на «.3f» и т. Д.

import random
from decimal import Decimal

GndSpeedHigh = float(format(Decimal(random.uniform(5, 25)), '.2f'))
GndSpeedLow = float(format(Decimal(random.uniform(2, GndSpeedHigh)), '.2f'))
GndSpeedMean = float(Decimal(format(GndSpeedHigh + GndSpeedLow) / 2, '.2f')))
print(GndSpeedMean)
...