java - 双打的有趣问题

时间:2017-04-28 11:53:03

标签: java double

我正在解决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
}

1 个答案:

答案 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
}