[英]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.