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. -~----------~----~----~----~------~----~------~--~---
