[RESUELTO] ¿Cuál es el valor de epsilon (o como calcularlo) de Delphi?
#1
Escrito 26 junio 2010 - 02:24
Tengo una preguntita.... ¿alguien sabría decirme algo sobre el valor epsilon de Delphi?
Me explico, se conoce como epsilon al error de tolerancia numérica que posee un lenguaje. Básicamente este número indica la precisión con la que los valores numéricos de punto flotante son almacenados (y con la que se calculan las operaciones).
Estuve buscando en internet pero no encuentro nada acerca del tema.
¿Alguien sabría darme alguna orientación, aunque sea en inglés y perder neuronas ?
Saludos,
#2
Escrito 26 junio 2010 - 08:58
#3
Escrito 26 junio 2010 - 09:17
Ejemplo: Considere una computadora que utiliza palabras de memoria de 16 bits para almacenar números reales en formato de punto flotante, guarda hasta 8 cifras de la mantisa, excluido el primer 1, y aplica el complemento a dos a los exponentes negativos. Si los 16 bits están distribuidos como sigue:
1 bit para el signo de la mantisa,
1 bit para el signo del exponente,
6 bits para el exponente entero, expresado en binario
8 bits para la mantisa, expresada en binario
a) determinar el rango de valores que podría representar y almacenar esta computadora hipotética.
b) calcular el épsilon correspondiente a esta máquina
a) Los 6 bits destinados al exponente se usan para registrar números enteros binarios en el rango de 000000 a 111111. Su signo se controla por separado. El mayor exponente positivo posible sería: 26 - 1 = 63 y el menor exponente negativo posible sería el -64, por la aplicación del complemento a dos.
Los 8 bits reservados para la mantisa se usan para registrar números fraccionarios en el rango de 0.100000000 a 0.111111111. El valor fraccionario más pequeño equivale a 0.5 en decimal y el valor fraccionario más grande equivale a 0.998134375 en decimal:
9
sum 2-j = 1 - 2-9 = 0.998046875
j=1
Entonces, el número real más pequeño que puede representarse es:
0.5 x 2-64 aprox 2.71 x 10 -20
y el número real más grande, que puede representarse es:
0.998046875 x 263 aprox 9.21 x 1018
El número más pequeño mayor que uno, que podría almacenarse es:
0.100000001 x 21 = (2-1 + 2-9) x 21 = 1.0039312510
por lo que el épsilon de esta máquina sería:
1.00393125 - 1 = 0.00393125 = 3.93 x 10-3
#4
Escrito 26 junio 2010 - 09:41
Tengo que ponerme a leer del tema con mayor tranquilidad. Ahorita mi cabeza no da para mucho... ya está con la batería baja. Y mañana... ¡Hay Fútbol! Tendrá que esperar al Domingo por la noche o el Lunes a la mañana.
Yo lo máximo que pude hallar es una fuente, no muy confiable (y que olvidé anotar ), es que el valor epsilon se puede calcular de la siguiente forma:
epsilon := 1; while epsilon + 1.0) > 1.0 do epsilon := epsilon/2;
El asunto es que dicho algoritmo me arroja un valor aproximado a 5.4E-20 (probado en una AMD y en una Intel)... Un valor demasiado alto a mi parecer.... yo más bien me esperaría valores de la mitad de eso: 2.2E-20.
Por un lado, de lo que estuve leyendo vagamente (no pude darme tiempo frente a la PC hoy) se habla del epsilon de la máquina (por tanto depende del hardware) y por el otro de un epsilon asociado al lenguaje... Esto me está confundiendo, y como no tengo posibilidad de acercarme a biblioteca para leer algo más confiable y certero ya no se que creer.
Saludos,
#6
Escrito 27 junio 2010 - 03:48
Voy a tener que destinar todo un día para aprender del tema. Ayer encontré un artículo que parece ser muy bueno (la pega... está en inglés ): What Every Computer Scientist Should Know About Floating-Point.
Creo que con el material que me han acercado, más el que tengo hay suficiente como para ilustrarme mejor.
¡Gracias!
Saludos,
#7
Escrito 12 julio 2010 - 07:36
Disculpen que actualice este hilo.
He estado leyendo las fuentes que he conseguido (el artículo Every... es muy bueno, lo aconsejo) y me brindaron.
Quise ir más profundo del tema y hay algunos artículos a los que no puedo acceder... en concreto, los de borland.community que cita el artículo que Eliseo me ha pasado. Es de esperar que no estén, sabiendo que ya Borland se fue de "viaje"...
Estuve intentando rastrearlos con la caché de Google pero no encuentro. ¿Alguna pista?
Quise entrar también a los artículos de OptimalCode y me lleva a una página de ¿Anti Popups? ¿WTF? Y del mismo modo, con la caché de Google no hay manera.
El asunto es que quisiera comprobar las fuentes de las fuentes (ya me conocen, soy meticuloso en esto... además que necesito ponerle mucha atención ya que mi tutora es exigente en estas cosas) y ando revisando las fuentes de la sección B del artículo de Eliseo.
¿Alguien sabría darme alguna pista?
Saludos,
#8
Escrito 12 julio 2010 - 07:47
http://www.google.co...l=&oq=&gs_rfai=
Salud OS
#9
Escrito 13 julio 2010 - 08:22
Me voy a poner a ver amigo. ¡Gracias!Hola amigo, a ver si alguno de estos te sirve de algo
http://www.google.co...l=&oq=&gs_rfai=
Salud OS
Te lo agradezco.
Me tendré que poner a buscar bien en los forums y en Quality Central.
Vaya que es todo un mundo trabajar con doble precisión y la aritmética de punto flotante en general. Uno asume muchas cosas, que es tan simple como sumar números enteros pero la realidad indica otra cosa. ¡Hay mucho que aprender!
Creo que después de todo esto me voy por una parte de la Informática Científica, parece fascinante. ¡Aunque tenga que estallar mi cabeza!
Saludos,
#10
Escrito 06 agosto 2010 - 10:41
Todo lo que me han pasado me ha servido muchísimo para comprender sobre la aritmética IEEE, y en concreto sobre el estándar IEEE 754 (aunque dentro de no mucho habrá que aprender sobre el 854, que salió en el 2008 y el que supuestamente soportan los equipos actuales )
Esto me revolvió la cabeza, ¡es como volver a aprender a sumar!
Ahora si, esto me aclara los horrores (si... horror, no error :'( ) de código y resultados que tienen (por el momento) mis operaciones y cálculos.
Mi biblioteca se ha inflado más en este mes que en los dos últimos años... ya tengo un cargo de conciencia enorme por la cantidad de hojas que voy imprimiendo.
Lo lindo, ahorita el trabajo será más llevadero, eso espero .
Si alguien está envuelto en lios de porqué tras unas cuantas (cientos, miles...) sumas, multiplicaciones, senos y cosenos el resultado es 1000 veces mayor que el esperado , ¡acuérdense de este hilo! Y aunque sea denso y aburrido esto les ayudará mucho.
Aquí están algunas de las fuentes. Lo que más material aporta es la página Math Info, me he centrado en la sección B.
No está todo, porque todavía me quedan enlaces por reordenar y clasificar. Pero esto les hará más fácil la tarea para hallar algunos documentos. Algunos enlaces de Math Info están muertos, lamentablemente pero se puede complementar facilmente con el resto de los disponibles:
Floating Point Arithmetic.html
http://docs.sun.com/...g_goldberg.html
High Performance Delphi Floating Point Optimization Guidelines.htm
http://www.pascalgam...brary/hpd_fpog/
Representation Floating Point.html
http://www.codeguru....ad.php?t=323835
------------------------
Computer Lab - Delphi:
Delphi Math Info
http://www.efg2.com/...elphi/MathInfo/
-> B. Floating-Point Numbers, IEEE Math:
B-2:
----
07_12_98 post:
http://www.efg2.com/...t/1998/0712.txt
UseNet post:
http://www.efg2.com/.../2000/0113e.txt
UseNet post2:
http://www.efg2.com/.../1999/0508a.txt
B-5:
----
NaN Tech Note:
http://www.efg2.com/...ematics/NaN.htm 12/07/2010
IEEE 754.pdf:
http://www.stat.yale...t/ieeefloat.pdf 12/07/2010 10:10 pm
CONSULTADO DESDE: IEEE Standard 754 Floating Point Numbers
http://www.research..../ieeefloat.html
floating_point.pdf:
-> Formally Verifying IEEE Compliance of Floating-Point Hardware
http://download.inte...ating_point.pdf - CONSULTADO DESDE:
http://www.intel.com...rchive/1999.htm
JohnHerbster_T_BinaryFloatingPoint_1 010102.zip:
http://www.efg2.com/...nt_1 010102.zip
B-7:
----
Convertir entre Microsoft e IEEE.html
http://www.uit.edu.v...p-ti/16431.html
UseNet post3:
http://www.efg2.com/...t/1999/0124.txt
B-8:
----
math10.zip:
http://www.tempest-s...ware.cgi?Delphi
http://www.tempest-s...lphi/math10.zip
B-9:
----
http://www.efg2.com/...ounding.pas.TXT
http://www.efg2.com/...l.htm#Set8087CW
http://www.efg2.com/...ControlWord.Txt
http://www.efg2.com/.../2000/0606b.txt
Saludos,
#11
Escrito 06 agosto 2010 - 11:05
Salud OS
#12
Escrito 06 agosto 2010 - 11:20
Sorry (uff... ya se me pego lo english ) por asustarte. Es que durante el día, tarde y noche ando con esto, con Delphi, con algunas pruebas y en el medio (a modo de descanso de tanto IEEE) paseo por DA.Vaya, si que hay mucha información, a esta hora de la noche no me hagan eso
Salud OS
Bueno, en realidad es una recopilación de los enlaces que me pasaron y que están disponibles en los documentos. Pero si, es bastante.
La principal lectura es "Lo que todo informático debe saber de aritemética flotante", que es el primer enlace. Eso es lo más pesado pero sirve para comprender que hay de mito y que hay de verdad. Explica de forma abstracta todo.
La mayoría de los enlaces son producto del documento de efg. ¡Ese tipo es la hostia! (como dirían los españoles). Sus enlaces son muy rico en material. Logré recuperar unos documentos sobre IEEE que están "escondidos" en algunos enlaces muertos. Concretamente uno de Microsoft y otro de Intel.
Las nota técnica sobre NaN y el resto de los valores especiales IEEE es quizá el aporte más rico de él. El resto son artículos breves y recomendaciones con algunos "trucos".
Se que me quedaron cosas en el tintero, falta ordenar otros más... pero creo que con esto es suficiente para que cualquiera pueda darse una idea. No creo que sea tan necesario ponerme todos los enlaces que hay en efg Math Info. Expuse los que considero que podrían ser útiles y a los que he revisado y hay acceso.
Saludos,
#13
Escrito 07 agosto 2010 - 10:30
#14
Escrito 07 agosto 2010 - 11:14
Espero que te sienta bien el inglés, y que el contenido no suene a chinoGracias Delphius, muy interesante los links, ya tengo para leer el fin de semana
De español allí no hay nada.
A mi por lo menos me ha sido (y es) de constante dedicación, leer, traducir, practicar los conceptos, ver ejemplos y comprobarlos... Yo llevo semanas envuelto. Dios no quiera que la cabeza te explote.
Saludos,
#15
Escrito 08 agosto 2010 - 08:10
http://rvelthuis.de/...les-floats.html
http://www.cygnus-so...aringfloats.htm
El primero explica el tema basado en Delphi, el segundo es más técnico y con ejemplos en C. El código es sencillo y fácilmente transportable a Delphi.
Saludos,