Плавающие значения двойной точности в Python?


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

5 59

5 ответов:

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

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

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

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

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

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

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

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

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

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

вот мое решение. Сначала я создаю случайные числа со случайными.униформа, отформатируйте их в строку с двойной точностью, а затем преобразуйте их обратно в float. Вы можете настроить точность путем изменения '.2f 'to'.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)