extrañeza de las matemáticas de coma flotanteEstoy usando JMP15.
Recientemente me di cuenta de que un script que he usado durante algún tiempo tenía un pequeño error que se deriva de una peculiaridad de coma flotante que se ilustra a continuación.
Las dos primeras líneas calculan el mismo número -> 23.
Cuando uso la función de techo, la primera versión devuelve 24 y la segunda devuelve 23.
¿Debería estar pasando esto?
mostrar (((1104/2016) * 42));
show (((42 * 1104/2016)));
espectáculo (techo ((1104/2016) * 42));
espectáculo (techo ((42 * 1104/2016)));
/ *:
(1104/2016) * 42 = 23;
42 * 1104/2016 = 23;
Techo ((1104/2016) * 42) = 24;
Techo (42 * 1104/2016) = 23;
ScriptingRe: extrañeza de las matemáticas de coma flotanteYa has visto que esta es una peculiaridad de coma flotante. Si está sucediendo, técnicamente no, pero siempre habrá extraños "problemas de redondeo" debido a los cálculos de coma flotante.
Si coloca el primer cálculo en una columna (1104/2016) * 42, cambie el ancho de la columna a 30 (arbitrariamente grande), formatee a Decimal fijo con 20 decimales, verá que el número se almacena como: 23.00000000000000355271 .
Re: extrañeza de las matemáticas de coma flotante2016: 2 × 2 × 2 × 2 × 2 × 3 × 3 × 7
1104: 2 × 2 × 2 × 2 × 3 × 23
42: 2 × 3 × 7
1104/2016 es ( 2 × 2 × 2 × 2 × 3 × 23) / ( 2 × 2 × 2 × 2 × 2 × 3 × 3 × 7)
23 / (2 × 3 × 7) es una fracción que se repite en la base 10 Y la base 2 (hexadecimal, base 16, que se muestra con 4 bits por dígito hexadecimal):
0.5476190476190476190476190 ... o 3FE186186186186 ... (¡Suerte repetición de 12 bits para visualización!)
Ambos están truncados e imprecisos. El valor real para la representación de la base hexadecimal 2 se redondea a 3FE1861861861862, que es ligeramente alto (3FE es el exponente). Multiplicar por 42, después de la división, también es ligeramente alto.
(42 × 1104) / 2016 es (( 2 × 3 × 7 ) × ( 2 × 2 × 2 × 2 × 3 × 23)) / ( 2 × 2 × 2 × 2 × 2 × 3 × 3 × 7 )
Multiplicar por 42, antes de la división, obtiene una buena reducción de los divisores primos.
Re: extrañeza de las matemáticas de coma flotanteCreo que voy a enmarcar esa respuesta