在Ruby核心库中,有一个非常有用的Set
类。它可以存储任何类型的对象。在浮点数中存储浮点数?
但是如你所知,浮点数(Ruby中的Float
)有一些精度问题。 1.2-1.0
并不等于0.2
。
s = Set.new()
s.add(1.2-1.0)
s.add(0.2)
s.size
=> 2
是的,我可以使用BigDecimal
类型来获得精确的数字。但是是否可以给Set
一个特定的比较函数,以便它能够承受一个小错误(例如,1e-9
)?
(我知道这个问题是不可知的语言。在其他常用的语言欢迎的解决方案)
的语义是有问题的。例如,假设你已经有了'1.0'和'1.0 + 1.5e-9',允许的错误设置为'1e-9'。现在当你添加'1.0 + 0.7e-9'时会发生什么?该集合是从2个元素变为1个? – 2012-04-15 13:41:39