Двойная точность плавающих значений в Python?

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

5 ответов


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

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

Если вы нажаты issuses производительности, посмотрите на GMPY


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


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

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

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


может быть, вам нужно Decimal

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

Арифметика С Плавающей Точкой


вот мое решение. Сначала я создаю случайные числа со случайными.равномерный, отформатируйте их в строку с двойной точностью, а затем преобразуйте их обратно в float. Вы можете настроить точность, изменив '.2Ф "до".3Ф и так далее..

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)