簡體   English   中英

一組浮點數

[英]Set of floating point numbers

因此,我想創建一組浮點數,其中在給定一定的公差的情況下,兩個數被視為相等。 例如,如果我有一套

a =  set([1, 2, 3])

如果我添加公差為1e-4的元素1.00001,則結果集應為

{1, 2, 3}

並不是

{1, 1.00001, 2, 3}

我們可以使用舍入函數來檢查tolerance of 1e-4

a = set([1,2,3])
def add(number):
  if(round(number,4) not in a):
    a.add(number)


add(1)
print(a)
add(1.0000)
print(a)
add(1.0001)
print(a)
add(1.1)
print(a)

在我看來,您應該只能夠檢查該集中的每個項目,並且,如果該項目與您要添加的項目之間的絕對差值小於閾值,則不要添加它。

這樣的事情應該可以解決問題:

def AddToSetWithThreshold(pSet, pValue, pThreshold):
    vList = [entry for entry in pSet if abs(pValue - entry) < pThreshold]
    if len(vList) == 0:
        pSet.add(pValue)

a = set([1, 2, 3]) ; print(a)
AddToSetWithThreshold(a, 1.00001, 1e-4) ; print(a)
AddToSetWithThreshold(a, 1.00001, 1e-6) ; print(a)

因為第一個加法太接近於1 ,第二個加法太接近了這將導致以下輸出:

set([1, 2, 3])
set([1, 2, 3])
set([1, 2, 3, 1.00001])

導入數學並使用ceil

import math

decimals = 3

v = 1.234566789
print(math.ceil(v*pow(10,decimals))/pow(10,decimals))  
# 1.234

或者,如果您想使用“閾值”之類的整數,請使用

print(float(int(v)))
# 1.0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM