一、什么是浮点数精度的问题?
简单来说,计算机把一些十进制的浮点数转为二进制数时,无法进行精确表示导致的,就类似下面这样:
二、处理方法
一种简易的精度自动化调整的方式,能较好的解决超出精度时的特殊情况。
# -*-encoding:utf8-*-
class Para(object):
PRECISION = 0.0000000000000000001
DYNAMIC_PRECISION = PRECISION
INCREASE = 0.001
RESULT = 0.5
NUM = 0
def Clc():
# 动态精度和静态精度相同时,处理业务
if Para.DYNAMIC_PRECISION == Para.PRECISION:
Para.NUM += Para.INCREASE
# 在精度范围内,输出结果
if abs(Para.NUM-Para.RESULT)<=Para.DYNAMIC_PRECISION:
print("Para.NUM: ", Para.NUM)
Para.NUM = 0
# 动态精度还原回静态精度
Para.DYNAMIC_PRECISION = Para.PRECISION
# 超出精度,动态调整
elif Para.NUM>Para.RESULT:
print("Need ADJUST_PRECISION")
Para.DYNAMIC_PRECISION = Para.NUM - Para.RESULT
def Run():
while(1):
Clc()
if __name__ == "__main__":
Run()