¿Hay algo roto o no entiendo lo que está sucediendo?Cómo alterar el doble en su incremento más pequeño
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));
}
}
}
Con salida:
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]
¿Qué estás tratando de hacer? ¿Cuál es tu pregunta? – Sjoerd
Mi pregunta es: "Cómo alterar el doble en su incremento más pequeño", y este es mi esfuerzo que falló. – Margus
porque no solo editas esos bits si quieres hacer el incremento más pequeño, falla para 1 y 2 porque MIN_VALUE es muy pequeño (realmente pequeño) así que 0 + realmente pequeño = muy pequeño, pero 2+ realmente pequeño ~ = 2 es debido a Punto flotante: min_value está con el punto lo más a la izquierda posible, mientras que para dos está en algún lugar en el medio, left pierde. puede ver sus aproximadamente 300 dígitos después del punto que la diferencia debería ser, mientras que una doble almacena solo alrededor de 15-20 dígitos significativos. – flownt