我正在处理一些大数字,并且遇到浮动值丢失的问题。
当乘以大数字时,浮动部分似乎丢失,丢失,变为零。 当使用具有较小数字的相同代码时,这不会发生。
琐碎的例子:
import math
f_ProNum(31 * 61) ## Correct: DEBUG float: 314.833333
f_ProNum(5915587277 * 3367900313) ## Incorrect: DEBUG float: 3320518040297852928.000000
def f_ProNum(v_Num):
"""Syntax: (int); Returns: (float)"""
print("DEBUG float: %f") %((v_Num - 2.0)/6.0) # DEBUG
v_PDNum = (v_Num - 2.0)/6.0
return v_PDNum
如第二次调用所示,浮动似乎丢失,或设置为零。
为什么要这样做,以及如何解决,修复?
答案 0 :(得分:4)
较大的浮点值会丢失精度。为简化一点,浮点数具有固定数量的“数字”,称为尾数或有效数,因此足够大的数字基本上将使用小数点左边部分的所有数字。 有关详情,请参阅:https://en.wikipedia.org/wiki/Floating_point#Internal_representation
要解决您的问题,您可以尝试使用decimal
模块,该模块允许您配置所需的精度:https://docs.python.org/2/library/decimal.html