Skill 對一個 list 中的元素去重 ( artUnique 改進版本 )
阿新 • • 發佈:2020-10-21
https://www.cnblogs.com/yeungchie/
替代內建函式
artUnique
,解決浮點數運算誤差造成的去重不徹底。
具體的原因可以看這裡 為什麼浮點運算有誤差?
- code
/************************************ * * * Program : ycUnique.il * * Language : Cadence Skill * * Author : YEUNGCHIE * * Version : 2020.10.20 * * * ************************************/ procedure(ycUnique(dbList @optional eps(1e-10) "ln") prog((uniqueList) foreach(x dbList prog((numbers delta) unless(member(x uniqueList) when(numberp(x) numbers = setof(v uniqueList numberp(v)) when(numbers foreach(num numbers delta = abs(num - x) when(delta < eps || delta - eps < 1e-10 return() ) ) ) ) uniqueList = append1(uniqueList x) ) );prog ) return(uniqueList) );prog );ycUnique
-
describe
dbList
為輸入 listeps
為輸入數字,指定判定精度,預設值為 \(1e^{-10}\)。 -
example
;bad case
artUnique(list(4.0 1.2/(0.1+0.2)))
ycUnique(list(4.0 1.2/(0.1+0.2)))
ycUnique(list(1 2 3 5 7 8 9) 2)