titledborder poner ejemplo borde java casting precision

poner - setbounds java



¿Cambia ligeramente la precisión durante el lanzamiento de int para doblarse en Java? (2)

He leído esto: ¿Por qué los números de punto flotante son inexactos?

Entonces, a veces la precisión se puede cambiar en el número de punto flotante debido a su estilo de representación (notación científica con un exponente y una mantisa).

Pero si lanzo un valor entero al doble, ¿hay alguna posibilidad de cambiar la precisión del doble ligeramente en Java?

Quiero decir,

int i = 3; double d = (double) i; System.out.println(d);

La salida que obtuve 3.0 como lo esperaba.

pero, ¿existe alguna posibilidad de que se 3.000001 precisión como 3.000001 debido al estilo de representación de doble en Java?


No para que int se duplique, pero puede que por mucho tiempo se doble (o int para flotar):

  • No todos los largos mayores que 2^53-1 (o menores que -2^53 ) pueden representarse exactamente por un doble;
  • No todos los ints mayores que 2^24-1 (o menores que -2^24 ) pueden ser representados exactamente por un flotador.

Esta restricción se produce debido a la cantidad de bits utilizados para representar la mantisa (53 en dobles, 24 en flotantes).


Puede iterate sobre i hasta que encuentre un doble de 2**i que sea igual a 2**i + 1 :

import java.util.stream.IntStream; public class PrecisionLoss { public static void main(String[] args) { double epsilon = 1; Integer maxInt = IntStream.iterate(0, i -> i + 1) .filter(i -> Math.pow(2, i) == Math.pow(2, i) + epsilon) .findFirst().getAsInt(); System.out.println("Loss of precision is greater than " + epsilon + " for 2**" + maxInt + " when using double."); } }

Produce:

Loss of precision is greater than 1.0 for 2**53 when using double.

Lo que confirma la answer aceptada.

Tenga en cuenta que en Javascript, no hay un tipo de entero y en su lugar se utilizan dobles (se llaman Number s). Si son lo suficientemente grandes, los Number consecutivos pueden ser iguales entre sí .