Существуют ли типы данных с большей точностью, чем float?
Плавные значения с двойной точностью в Python?
Ответ 1
- В отличие от аппаратной бинарной с плавающей запятой, десятичный модуль имеет изменяемую пользователем точность (по умолчанию - 28 мест), которая может быть такой же большой, как требуется для данной проблемы.
Если вы нажали на функции производительности, посмотрите GMPY
Ответ 2
Тип встроенного float
Python имеет двойную точность (это C double
в CPython, Java double
в Jython). Если вам нужна более высокая точность, получите NumPy и используйте его numpy.float128
.
Ответ 3
Для некоторых приложений вы можете использовать Fraction
вместо чисел с плавающей запятой.
>>> from fractions import Fraction
>>> Fraction(1, 3**54)
Fraction(1, 58149737003040059690390169)
(Для других приложений там decimal
, как это было предложено другими ответами.)
Ответ 4
Может понадобиться Десятичный
>>> from decimal import Decimal
>>> Decimal(2.675)
Decimal('2.67499999999999982236431605997495353221893310546875')
Ответ 5
Вот мое решение. Сначала я создаю случайные числа с random.uniform, форматируем их в строку с двойной точностью, а затем конвертируем их обратно в float. Вы можете настроить точность, изменив ".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)