MAX_VALUE, MIN_VALUE, NaN, NEGATIVE_INFINITY, POSITIVE_INFINITY は単純に比較可能かどうか調べてみた。
結論
NaN は比較不可能。他の値は相互に比較可能。
(小) NEGATIVE_INFINITY < MIN_VALUE -1 < 0 < 1 < MAX_VALUE < POSITIVE_INFINITY (大)
テスト用ソースコード
public class DoubleTest {
public static void main(String[] args) {
// MAX_VALUE - double 型の正の最大有限値
// MIN_VALUE - double 型の正の最小有限値
// NaN - double 型の非数 (NaN) 値
// NEGATIVE_INFINITY - double 型の負の無限大値
// POSITIVE_INFINITY - double 型の正の無限大値
DT[] dt = new DT[]{
new DT( 0, "0"),
new DT( 1, "1"),
new DT(-1, "-1"),
new DT(Double.MAX_VALUE, "MAX_VALUE"),
new DT(Double.MIN_VALUE, "MIN_VALUE"),
new DT(Double.NaN, "NaN"),
new DT(Double.NEGATIVE_INFINITY, "NEGATIVE_INFINITY"),
new DT(Double.POSITIVE_INFINITY , "POSITIVE_INFINITY"),
};
// 400.400桁まで対応可能
java.text.DecimalFormat df =
new java.text.DecimalFormat(
"########################################" +
"########################################" +
"########################################" +
"########################################" +
"########################################" +
"########################################" +
"########################################" +
"########################################" +
"########################################" +
"########################################" +
"." +
"########################################" +
"########################################" +
"########################################" +
"########################################" +
"########################################" +
"########################################" +
"########################################" +
"########################################" +
"########################################" +
"########################################");
System.out.println("------------------------------");
for(int i=0; i<dt.length; i++){
System.out.println(dt[i].s + " = " + df.format(dt[i].d));
}
System.out.println("------------------------------");
for(int i=0; i<dt.length; i++){
for(int j=0; j<dt.length; j++){
try{ // なんだか例外が発生しそうな予感
if(dt[i].d == dt[j].d){
System.out.println(dt[i].s + " == " + dt[j].s);
}else if(dt[i].d < dt[j].d){
System.out.println(dt[i].s + " < " + dt[j].s);
}else if(dt[i].d > dt[j].d){
System.out.println(dt[i].s + " > " + dt[j].s);
}else{
System.out.println(dt[i].s + " ? " + dt[j].s);
}
}catch(Exception e){
System.out.println(dt[i].s + " " + e + " " + dt[j].s);
}
}
}
}
private static class DT{
DT(double d, String s){
this.d = d;
this.s = s;
}
double d;
String s;
}
}
実行結果
------------------------------
0 = 0
1 = 1
-1 = -1
MAX_VALUE = 179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
MIN_VALUE = 0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000049
NaN = ?
NEGATIVE_INFINITY = -∞
POSITIVE_INFINITY = ∞
------------------------------
0 == 0
0 < 1
0 > -1
0 < MAX_VALUE
0 < MIN_VALUE
0 ? NaN
0 > NEGATIVE_INFINITY
0 < POSITIVE_INFINITY
1 > 0
1 == 1
1 > -1
1 < MAX_VALUE
1 > MIN_VALUE
1 ? NaN
1 > NEGATIVE_INFINITY
1 < POSITIVE_INFINITY
-1 < 0
-1 < 1
-1 == -1
-1 < MAX_VALUE
-1 < MIN_VALUE
-1 ? NaN
-1 > NEGATIVE_INFINITY
-1 < POSITIVE_INFINITY
MAX_VALUE > 0
MAX_VALUE > 1
MAX_VALUE > -1
MAX_VALUE == MAX_VALUE
MAX_VALUE > MIN_VALUE
MAX_VALUE ? NaN
MAX_VALUE > NEGATIVE_INFINITY
MAX_VALUE < POSITIVE_INFINITY
MIN_VALUE > 0
MIN_VALUE < 1
MIN_VALUE > -1
MIN_VALUE < MAX_VALUE
MIN_VALUE == MIN_VALUE
MIN_VALUE ? NaN
MIN_VALUE > NEGATIVE_INFINITY
MIN_VALUE < POSITIVE_INFINITY
NaN ? 0
NaN ? 1
NaN ? -1
NaN ? MAX_VALUE
NaN ? MIN_VALUE
NaN ? NaN
NaN ? NEGATIVE_INFINITY
NaN ? POSITIVE_INFINITY
NEGATIVE_INFINITY < 0
NEGATIVE_INFINITY < 1
NEGATIVE_INFINITY < -1
NEGATIVE_INFINITY < MAX_VALUE
NEGATIVE_INFINITY < MIN_VALUE
NEGATIVE_INFINITY ? NaN
NEGATIVE_INFINITY == NEGATIVE_INFINITY
NEGATIVE_INFINITY < POSITIVE_INFINITY
POSITIVE_INFINITY > 0
POSITIVE_INFINITY > 1
POSITIVE_INFINITY > -1
POSITIVE_INFINITY > MAX_VALUE
POSITIVE_INFINITY > MIN_VALUE
POSITIVE_INFINITY ? NaN
POSITIVE_INFINITY > NEGATIVE_INFINITY
POSITIVE_INFINITY == POSITIVE_INFINITY
tags: zlashdot Java Java
Posted by NI-Lab. (@nilab)