Are there data types with better precision than float?
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
Python’s built-in float type has double precision (it’s a C double in CPython, a Java double in Jython). If you need more precision, get NumPy and use its numpy.float128.
Method 2
- Unlike hardware based binary floating point, the decimal module has a user alterable precision (defaulting to 28 places) which can be as large as needed for a given problem.
If you are pressed by performance issuses, have a look at GMPY
Method 3
For some applications you can use Fraction instead of floating-point numbers.
>>> from fractions import Fraction >>> Fraction(1, 3**54) Fraction(1, 58149737003040059690390169)
(For other applications, there’s decimal, as suggested out by the other responses.)
Method 4
May be you need Decimal
>>> from decimal import Decimal
>>> Decimal(2.675)
Decimal('2.67499999999999982236431605997495353221893310546875')
Method 5
Here is my solution. I first create random numbers with random.uniform, format them in to string with double precision and then convert them back to float. You can adjust the precision by changing ‘.2f’ to ‘.3f’ etc..
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)
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0