是否有東西壞了或我不明白髮生了什麼?如何通過其最小增量改變雙倍
static String getRealBinary(double val) {
long tmp = Double.doubleToLongBits(val);
StringBuilder sb = new StringBuilder();
for (long n = 64; --n > 0; tmp >>= 1)
if ((tmp & 1) == 0)
sb.insert(0, ('0'));
else
sb.insert(0, ('1'));
sb.insert(0, '[').insert(2, "] [").insert(16, "] [").append(']');
return sb.toString();
}
public static void main(String[] argv) {
for (int j = 3; --j >= 0;) {
double d = j;
for (int i = 3; --i >= 0;) {
d += Double.MIN_VALUE;
System.out.println(d +getRealBinary(d));
}
}
}
隨着輸出:
2.0[1] [00000000000] [000000000000000000000000000000000000000000000000000]
2.0[1] [00000000000] [000000000000000000000000000000000000000000000000000]
2.0[1] [00000000000] [000000000000000000000000000000000000000000000000000]
1.0[0] [11111111110] [000000000000000000000000000000000000000000000000000]
1.0[0] [11111111110] [000000000000000000000000000000000000000000000000000]
1.0[0] [11111111110] [000000000000000000000000000000000000000000000000000]
4.9E-324[0] [00000000000] [000000000000000000000000000000000000000000000000001]
1.0E-323[0] [00000000000] [000000000000000000000000000000000000000000000000010]
1.5E-323[0] [00000000000] [000000000000000000000000000000000000000000000000011]
你想做什麼?你的問題是什麼? – Sjoerd 2010-10-10 13:19:24
我的問題是:「如何通過最小的增量來改變雙倍」,這是我的努力失敗的原因。 – Margus 2010-10-10 13:21:18
爲什麼不只是編輯這些位,如果你想做最小的增量,它會失敗的1和2,因爲MIN_VALUE是微小的(非常小),所以0 +真的很小=真的很小,但2+真的很小〜2 =因爲浮點值min_value與儘可能遠的點相對,而兩個點在中間的某個位置,左失去。你可以看到差異點後的大約300位數字,這意味着雙重儲存只有約15-20個有效數字。 – flownt 2010-10-10 13:23:44