在对我的程序进行概要分析后,我注意到round()
函数的调用过多。
ncalls tottime percall cumtime percall filename:lineno(function)
12615015 69.616 0.000 69.616 0.000 {built-in method builtins.round}
基本上,我的程序正在进行大量的迭代加载,而且我正在使用round()
方法,因为我经常出现像0.3这样的浮点数。此外,python不会输出0.3
,而是0.29999...9997
(浮点数的编码问题)。
但是,我经常需要使用if / else语句进行比较,我花了一段时间才发现我的程序的错误输出来自这种近似错误,因此决策制定错误,因为python不是'在右侧if / elif / else
。
问题是,如何替换此round()
以避免精度问题和耗时的舍入?
谢谢!
关于容忍评论的编辑:
我不知道如何用公差代替round()
。
部分代码:
d = round(abs(number_1 - number_2), 3)
if number_1 <= number_2 and d < 0.3:
do_this()
continue
我的问题是,假设d等于0.3,因为我有时会得到0.2999 ... 99997,有时会得到0.30000 ... 0000005(例如)。
我没有看到如何实施容忍,如果我想检查平等,0.3-d < tolerance
是好的,但不是劣等。
有什么建议吗?