时间优化,如何取代圆形

时间:2018-03-20 08:54:43

标签: python performance rounding

在对我的程序进行概要分析后,我注意到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是好的,但不是劣等。 有什么建议吗?

0 个答案:

没有答案