3 回答

TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超5個(gè)贊
為了比較數(shù)字,從Python 3.5開(kāi)始math.isclose,按照PEP 485進(jìn)行。
為了比較數(shù)字或數(shù)組,有numpy.allclose。
對(duì)于測(cè)試數(shù)字或數(shù)組,有 numpy.testing.assert_allclose

TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超10個(gè)贊
另一種方法是計(jì)算兩個(gè)數(shù)字的相對(duì)變化(或相對(duì)差異),“用于比較兩個(gè)數(shù)量,同時(shí)考慮要比較的事物的'大小'”。Wikipedia文章中提到的兩個(gè)公式可用于類(lèi)似Python的以下比較中,它們還可以處理被比較的一個(gè)或兩個(gè)值均為零的情況:
def approx_equal(a, b, tol):
return abs(a-b) <= max(abs(a), abs(b)) * tol
def approx_equal(a, b, tol):
return abs(a-b) <= (abs(a)+abs(b))/2 * tol
兩種情況下的計(jì)算值都是無(wú)單位的分?jǐn)?shù)。在第一種情況下,基線值是兩個(gè)數(shù)字的最大絕對(duì)值,在第二種情況下,基線值是它們的平均絕對(duì)值。本文將更詳細(xì)地討論每一個(gè),以及它們的優(yōu)缺點(diǎn)。如果在比較之前乘以100(變?yōu)榘俜直戎担?,則后者可能會(huì)變成百分比差異tol。請(qǐng)注意,該文章建議,如果變化的值“本身就是百分比,則最好使用百分比來(lái)談?wù)撈渥兓保唇^對(duì)變化。
這兩種方法(顯然)都比簡(jiǎn)單地取兩個(gè)數(shù)之差的絕對(duì)值需要更多的計(jì)算,這可能是一個(gè)考慮因素。

TA貢獻(xiàn)1875條經(jīng)驗(yàn) 獲得超3個(gè)贊
有功能可以在python中測(cè)試浮點(diǎn)近似相等嗎?
因?yàn)槎x取決于上下文,所以不能有函數(shù)。
def eq( a, b, eps=0.0001 ):
return abs(a - b) <= eps
并不總是有效。在某些情況下
def eq( a, b, eps=0.0001 ):
return abs( a - b ) / abs(a) <= eps
可能更合適。
另外,這里總是很受歡迎。
def eq( a, b, eps=0.0001 ):
return abs(math.log( a ) - math.log(b)) <= eps
哪個(gè)更合適。
我看不到如何要求一個(gè)(單個(gè))函數(shù)將所有數(shù)學(xué)選擇組合在一起。由于這取決于應(yīng)用程序。
添加回答
舉報(bào)