En implementaciones típicas de coma flotante, el resultado de una sola operación se produce como si la operación se realizara con precisión infinita y luego se redondeara al número de coma flotante más cercano.
Compare y b + a : el resultado de cada operación realizada con precisión infinita es el mismo, por lo tanto, estos resultados idénticos de precisión infinita se redondean de manera idéntica. En otras palabras, la suma de punto flotante es conmutativa.a + bb + a
Tome : b es un número de coma flotante. Con números binarios de coma flotante, 2 b también es un número de coma flotante (el exponente es mayor en uno), por lo que b + b se agrega sin ningún error de redondeo. Entonces una se añade a la exacta valor b + b . El resultado es el valor exacto 2 b + a , redondeado al número de punto flotante más cercano.b + b + asi2 bb + bunb + b2 b + a
Tome : un + b se añade, y habrá un error de redondeo r , por lo que obtener el resultado de un + b + r . Agregue b , y el resultado es el valor exacto 2 b + a + r , redondeado al número de punto flotante más cercano.a + b + ba + bra + b + rsi2 b + a + r
Entonces, en un caso, , redondeado. En el otro caso, 2 b + a + r , redondeado.2 b + a2 b + a + r
PD. Si para dos números particulares y b ambos cálculos dan el mismo resultado o no, depende de los números y del error de redondeo en el cálculo a + b , y generalmente es difícil de predecir. El uso de precisión simple o doble no hace ninguna diferencia al problema en principio, pero dado que los errores de redondeo son diferentes, habrá valores de a y b donde en precisión simple los resultados son iguales y en precisión doble no lo son, o viceversa. La precisión será mucho mayor, pero el problema de que dos expresiones son matemáticamente iguales pero no iguales en aritmética de coma flotante sigue siendo el mismo.unsia + b
PPS En algunos idiomas, la aritmética de coma flotante se puede realizar con mayor precisión o un rango de números mayor que el que dan las declaraciones reales. En ese caso, sería mucho más probable (pero aún no está garantizado) que ambas sumas den el mismo resultado.
PPPS Un comentario preguntó si deberíamos preguntar si los números de coma flotante son iguales o no. Absolutamente si sabes lo que estás haciendo. Por ejemplo, si ordena una matriz o implementa un conjunto, se mete en problemas si desea utilizar alguna noción de "aproximadamente igual". En una interfaz gráfica de usuario, es posible que deba volver a calcular los tamaños de los objetos si el tamaño de un objeto ha cambiado: compara oldSize == newSize para evitar ese recálculo, sabiendo que en la práctica casi nunca tiene tamaños casi idénticos, y su programa es correcto incluso si hay un recálculo innecesario.