[英]How do I round up/down floats
我想通过两个函数f(x)和g(x)来执行x = 0到1000
我的目标是找到x的哪个值使f和g截距。
所以, while f(x) != g(x)
我想继续运行。
当f(x) = g(x)
我希望循环停止,并返回x
值。
My problem:
x不一定是整数。 实际上,在我的情况下,我必须处理许多小数。
有没有一种聪明的方法可以找出允许出现错误的x的近似浮点值?
谢谢!
如果要将f(x)
和g(x)
的回报与某个容差进行比较,可以执行以下操作:
if abs(f(x) - g(x)) < tolerance:
而不是
if f(x) == g(x):
使用round
函数并将其转换为整数使用
>>> int(round(2.56))
3
或者你可以使用Decimal
模块:
from decimal import *
getcontext().prec = 5
x = Decimal(22)/ Decimal(7)
print x
#3.1429
在此示例中,您可以将精度分配为5个小数位, getcontext().prec
为5
如果你想找到拦截,比较f(x)
和g(x)
是一种不好的方法,因为相邻步骤之间的变化总是太大而无法在你的公差范围内检测到或者你所做的那么小。我会找到你应该找到的多个拦截。
相反,你应该寻找f(x)
和g(x)
的相对位置发生变化的点,即从f(x) >= g(x)
到f(x) < g(x)
反之亦然 。 跟踪先前的状态应该允许您找到所有拦截点。
(注意:这假设f(x)
和g(x)
都是连续函数,因为具有不连续的函数,它们可以在不截断的情况下反转位置)
当然,你想以最好的方式做到这一点,你最好使用众多现有的,经过良好测试的数字根寻找算法之一。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.