Gracias Andres por el dato, voy a ojear el ScaledDecimal. Saludos
On 10/17/07, Andres Valloud <[EMAIL PROTECTED]> wrote: > > Sergio, > > Si, *parece* funcionar... pero como igualdad es imposible. Aca hay un > caso mas facil, pero al final es lo mismo. Obviando detalles que no vienen > al caso, todos los numeros de punto flotante son un entero m de longitud > limitada que se llama mantisa, y un exponente e. El valor del numero esta > dado, basicamente, asi: > > m x 2^e > > El punto flota porque si uno cambia e, el punto binario del valor de > arriba se mueve sin necesidad de cambiar m. Ahora bien, supongamos que > tenemos la igualdad: > > 1 asFloat / 3 asFloat = (1/3) > > Como las conversiones de 1 y 3 a floats funcionan sin perdida de > precision, entonces da la impresion de que deberia estar bien. Pero... > > m x 2^e = 1 / 3 > > Como m es un entero, e tiene que ser < 0. Por lo tanto, ese 2^e es una > fraccion de la unidad. Si ponemos j = -e, > > m x 2^-j = 1 / 3 > > O sea, > > 3m = 2^j > > Por el teorema fundamental de la aritmetica, que dice que los numeros > enteros admiten factorizacion unica, esta igualdad es imposible. Por lo > tanto, no existe ningun numero de punto flotante que represente a 1/3 > exactamente. > > Lo mismo pasa con cualquier fraccion que tenga factores impares (salvo 1) > en su denominador, en particular con las fracciones de 10 por tener 10 el > factor 5. Por esto, redondear numeros de punto flotante a una cantidad x de > cifras decimales no tiene porque funcionar como uno espera. > > Andres. > > > On 10/17/07, Sergio Fedi <[EMAIL PROTECTED]> wrote: > > > > > > > 0.85 = (17/20) > > > > ¿por? > > > > Esto, en Dolphin 6 me da bien. > > > > Probé darle mas decimales: > > > > 0.000085 = (17/200000) > > > > Y tambien da. > > > > > > > > --~--~---------~--~----~------------~-------~--~----~ Has recibido este mensaje porque estás suscrito a Grupo "clubSmalltalk" de Grupos de Google. Si quieres publicar en este grupo, envía un mensaje de correo electrónico a [email protected] Para anular la suscripción a este grupo, envía un mensaje a [EMAIL PROTECTED] Para obtener más opciones, visita este grupo en http://groups.google.com/group/clubSmalltalk?hl=es. -~----------~----~----~----~------~----~------~--~---
