4

質問はそれをすべて言います。私は倍精度の配列を持っていて、それらを使って何かをしています。

double expectedOutput[] = { 6.38792, 12.91079, 14.33333, 13.44517,
                12.34539, 12.05397, 8.34061, 2.07900, -2.01999, -5.47802,
                -8.21610, -9.26719, -11.02378 };

理想的には、テストして確認します

6.38792 == 6.38792そして「パス」で終わる

特定の条件下では、次のような状況になります

6.38792 != NaN

これが有効な場合があることを知っている場合、コードで NaN を表現するにはどうすればよいですか?

予想される要素の配列に含めるかNaNs、何らかの方法で結果が数値ではないことを理解する必要があります

Javaを使用しています

4

5 に答える 5

5

Java では、次を使用して NaN を取得できます。

Double.NaN

したがって、これを配列に入れるだけです。

何かが NaN であるかどうかを確認する方法について質問がある場合は、電話することができます

Double.isNan(/* ... value ... */);
于 2011-02-07T01:28:07.180 に答える
4

NaN != NaN配列に含めることはできないため、明示的にテストする必要があります。を使用する必要がありますDouble.isNaN(x)

于 2011-02-07T01:27:40.833 に答える
1
double d = 0.0/0.0;
if(Double.isNan(d)){
    // Double d is not a number.
}

または:

double d = Double.Nan;
if(Double.isNan(d)){
    // Double d is not a number.
}
于 2011-02-07T01:26:36.337 に答える
0

これは、Doubleオブジェクトがプリミティブよりも実際に役立つ場合ですdouble

// auto-boxes them all to Double objects
Collection<Double> expectedOutput =
    Arrays.asList(6.38792, 12.91079, 14.33333, 13.44517, 12.34539,
                  12.05397, 8.34061, 2.07900, -2.01999, -5.47802,
                  -8.21610, -9.26719, -11.02378, Double.NaN );
// maybe fill into HashSet for more efficient lookup?

// later:
double d = Double.NaN;
if(expectedOutput.contains(d)) {
    System.out.println("found");
}

その理由はDouble.equals、実際には、等しいコントラクトの反射条件を実装しているためです。つまり、とは逆に、をDouble.valueOf(Double.NaN).equals(Double.valueOf(Double.NaN))与えます。trueDouble.NaN != Double.NaN

于 2011-02-07T14:39:56.213 に答える
0

多くの言語では NaN はそれ自体と等しくないため (Java でも同様)、特定のケースとして処理する必要があります。NaN を参照するには、Float.NaN または Double.NaN を使用します。特定の値が NaN かどうかを確認するには、Float.isNaN または Double.isNaN を使用します。

于 2011-02-07T01:29:35.770 に答える