Czy coś jest zepsute, czy nie rozumiem, co się dzieje?Jak zmienić dwukrotnie o najmniejszy przyrost
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));
}
}
}
Z wyjściem:
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]
Co próbujesz zrobić? Jakie jest Twoje pytanie? – Sjoerd
Moje pytanie brzmi: "Jak zmienić podwójnie przez jego najmniejszy przyrost", a to jest mój wysiłek, który się nie powiódł. – Margus
dlaczego nie po prostu edytować te bity, jeśli chcesz zrobić najmniejszy przyrost, to nie dla 1 i 2, ponieważ MIN_VALUE jest małe (naprawdę małe), więc 0 + naprawdę małe = naprawdę małe, ale 2+ naprawdę małe ~ = 2 to z powodu FLOATING punkt min_value jest z punktem tak daleko w lewo, jak to możliwe, podczas gdy dla dwóch jest gdzieś pośrodku, lewy traci. możesz zobaczyć jego około 300 cyfr po kropce, którą powinna być różnica, w której podwójne magazyny zawierają tylko około 15-20 znaczących cyfr. – flownt