Estoy teniendo problemas para entender cómo la precisión de estos dobles afecta el resultado de las operaciones aritméticas en Matlab. Pensé que dado que ambos, un & b, son dobles, podrían llevar a cabo operaciones con esa precisión. Me doy cuenta de que puede haber un error de redondeo, pero dado que estos números están dentro de la representación numérica de 64 bits, no pensé que eso sería un problema.Precisión aritmética con dobles en Matlab
a = 1.22e-45
b = 1
a == 0
ans = 0 %a is not equal to zero
(a + b) == 1
ans = 1
¿Cómo es que es capaz de llevar la suficiente precisión para reconocer una! = 0, pero cuando se añade a 1 que no muestra ningún cambio.
Creo que la mantisa tiene 52 bits (11 bits para el exponente, más 1 bit para el signo que hace un total de 64 bits). Un excelente artículo de * Cleve Moler * (autor de la primera versión de MATLAB) explica todos los detalles de los números flotantes: [enlace PDF] http://www.mathworks.com/company/newsletters/news_notes/pdf/Fall96Cleve. pdf – Amro
@Amro: hay un bit implícito "1", a menos que el número se desnormalice. Así que Jim tiene razón, en la mayoría de los casos (y ciertamente para estos números). –
Gracias. Aún tengo mucho camino por recorrer para comprender las representaciones numéricas en las computadoras. – ZuluForce