我正在解决Codeforces问题,我遇到了双打的有趣情况。当add(d) to a HashSet
输出与我add(0.0)
时生成的输出不同时,d
的值必须为0.0
,因为条件{{ 1}}必须在添加操作时为true。为什么呢?
d == 0.0
问题链接: http://codeforces.com/contest/514/problem/B
代码:
HashSet<Double> equations;
...
double d = (double)(y-y0)/(x-x0);
if(y == y0 && d == 0.0) {
equations.add(0.0); // if add(d) the output is different
}
答案 0 :(得分:0)
-0.0 == 0.0,但Double.valueOf(-0.0)不等于Double.valueOf(0.0)。
在你的第一种情况下,当调用equation.add(d)时,一次添加0.0,另一次添加-0.0,这会添加两个不同的Double值。在你的第二种情况下,当你调用equation.add(0.0)时,它会添加两次相同的Double值。
对此的一个小测试:
public static void main(String[] args) throws Exception {
double pos = 0.0;
System.out.println("" + (pos == 0.0)); // true
double neg = -0.0;
System.out.println("" + (neg == 0.0)); // true
System.out.println("" + (neg == pos)); // true
HashSet<Double> set = new HashSet<Double>();
set.add(pos);
set.add(neg);
System.out.println("" + set.size()); // 2
}