Embarcadero

Autor Tema: [RESUELTO] ¿Cuál es el valor de epsilon (o como calcularlo) de Delphi?  (Leído 14549 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Delphius

  • Administrador
  • ******
  • Panel de agradecimientos
  • -Tu has dado: 217
  • -Tu has recibido: 337
  • Mensajes: 4,362
  • Calificaciones: +381/-2
  • Sexo: Masculino
  • ¿El polimorfismo seguirá siendo parte de mi vida?
Muy buenas tardes, (y noche para los del otro lado del charco)

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  :D  ^o| ?

Saludos,
« Última Modificación: 06 de agosto de 2010, 23:44:45 por Delphius »
Como redactar mensajes - Uso de etiquetas

Se enseña por amor a los demás, se aprende por amor a la verdad
Cuanto más se busca la verdad, sin llegar a la perfección, anhelamos saber lo que falta

San Agustín

Comunidad Delphiaccess


Desconectado egostar

  • Administrador
  • ******
  • Panel de agradecimientos
  • -Tu has dado: 1182
  • -Tu has recibido: 641
  • Mensajes: 10,337
  • Calificaciones: +715/-7
  • Sexo: Masculino
  • coding my life
    • MeXistemas punto com
Hola Delphius

No se si esta función te sirva

function calceps:real;

Salud OS

"Si no quieres que la gente se olvide de ti apenas te mueras, escribe algo que valga la pena leerse o valga la pena escribirse."
- Benjamin Franklin
"Los programadores hicimos un pacto con dios, el no hace sistemas y nosotros no hacemos milagros."- Anónimo


          

Siga a los miembros que agradecieron este mensaje:


Desconectado Alfredo

  • Usuario Activo
  • ***
  • Panel de agradecimientos
  • -Tu has dado: 13
  • -Tu has recibido: 3
  • Mensajes: 91
  • Calificaciones: +5/-0
  • Sexo: Masculino
rebuscando en unos apuntes encontre esto:

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


Siga a los miembros que agradecieron este mensaje:


Desconectado Delphius

  • Administrador
  • ******
  • Panel de agradecimientos
  • -Tu has dado: 217
  • -Tu has recibido: 337
  • Mensajes: 4,362
  • Calificaciones: +381/-2
  • Sexo: Masculino
  • ¿El polimorfismo seguirá siendo parte de mi vida?
Les agradezco a ambos el esfuerzo y el tiempo que han destinado para ayudarme.

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!  :D 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  :p ), es que el valor epsilon se puede calcular de la siguiente forma:

Código DELPHI
  1. epsilon := 1;
  2. while epsilon + 1.0) > 1.0 do
  3.   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.  ^o|

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,
Como redactar mensajes - Uso de etiquetas

Se enseña por amor a los demás, se aprende por amor a la verdad
Cuanto más se busca la verdad, sin llegar a la perfección, anhelamos saber lo que falta

San Agustín

Desconectado escafandra

  • Moderadores
  • ******
  • Panel de agradecimientos
  • -Tu has dado: 105
  • -Tu has recibido: 735
  • Mensajes: 2,683
  • Calificaciones: +813/-0
  • Sexo: Masculino
Quizás esto también te sirva.

Saludos.

Siga a los miembros que agradecieron este mensaje:


Desconectado Delphius

  • Administrador
  • ******
  • Panel de agradecimientos
  • -Tu has dado: 217
  • -Tu has recibido: 337
  • Mensajes: 4,362
  • Calificaciones: +381/-2
  • Sexo: Masculino
  • ¿El polimorfismo seguirá siendo parte de mi vida?
Te agradezco escafandra por el enlace.

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,
Como redactar mensajes - Uso de etiquetas

Se enseña por amor a los demás, se aprende por amor a la verdad
Cuanto más se busca la verdad, sin llegar a la perfección, anhelamos saber lo que falta

San Agustín

Desconectado Delphius

  • Administrador
  • ******
  • Panel de agradecimientos
  • -Tu has dado: 217
  • -Tu has recibido: 337
  • Mensajes: 4,362
  • Calificaciones: +381/-2
  • Sexo: Masculino
  • ¿El polimorfismo seguirá siendo parte de mi vida?
¡Hola!

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?  ^o| ¿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,
Como redactar mensajes - Uso de etiquetas

Se enseña por amor a los demás, se aprende por amor a la verdad
Cuanto más se busca la verdad, sin llegar a la perfección, anhelamos saber lo que falta

San Agustín

Desconectado egostar

  • Administrador
  • ******
  • Panel de agradecimientos
  • -Tu has dado: 1182
  • -Tu has recibido: 641
  • Mensajes: 10,337
  • Calificaciones: +715/-7
  • Sexo: Masculino
  • coding my life
    • MeXistemas punto com

"Si no quieres que la gente se olvide de ti apenas te mueras, escribe algo que valga la pena leerse o valga la pena escribirse."
- Benjamin Franklin
"Los programadores hicimos un pacto con dios, el no hace sistemas y nosotros no hacemos milagros."- Anónimo


          

Desconectado Delphius

  • Administrador
  • ******
  • Panel de agradecimientos
  • -Tu has dado: 217
  • -Tu has recibido: 337
  • Mensajes: 4,362
  • Calificaciones: +381/-2
  • Sexo: Masculino
  • ¿El polimorfismo seguirá siendo parte de mi vida?
Hola amigo, a ver si alguno de estos te sirve de algo

http://www.google.com.mx/search?hl=es&q=embarcadero+technologies+How+to+Compare+Floating+Point+Numbers&aq=f&aqi=&aql=&oq=&gs_rfai=

Salud OS
Me voy a poner a ver amigo. ¡Gracias!
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!  :D

Saludos,
Como redactar mensajes - Uso de etiquetas

Se enseña por amor a los demás, se aprende por amor a la verdad
Cuanto más se busca la verdad, sin llegar a la perfección, anhelamos saber lo que falta

San Agustín

Desconectado Delphius

  • Administrador
  • ******
  • Panel de agradecimientos
  • -Tu has dado: 217
  • -Tu has recibido: 337
  • Mensajes: 4,362
  • Calificaciones: +381/-2
  • Sexo: Masculino
  • ¿El polimorfismo seguirá siendo parte de mi vida?
Actualizo este hilo para ya darlo por finalizado y resuelto.

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  8o| )

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  ^o|.

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/source/806-3568/ncg_goldberg.html

High Performance Delphi  Floating Point Optimization Guidelines.htm
http://www.pascalgamedevelopment.com/library/hpd_fpog/

Representation Floating Point.html
http://www.codeguru.com/forum/printthread.php?t=323835

------------------------
Computer Lab - Delphi:
Delphi Math Info
http://www.efg2.com/Lab/Library/Delphi/MathInfo/

-> B. Floating-Point Numbers, IEEE Math:
B-2:
----
07_12_98 post:
http://www.efg2.com/Lab/Library/UseNet/1998/0712.txt

UseNet post:
http://www.efg2.com/Lab/Library/UseNet/2000/0113e.txt

UseNet post2:
http://www.efg2.com/Lab/Library/UseNet/1999/0508a.txt

B-5:
----
NaN Tech Note:
http://www.efg2.com/Lab/Mathematics/NaN.htm 12/07/2010

IEEE 754.pdf:
http://www.stat.yale.edu/~pollard/Courses/312.fall02/Handouts/floating-point/ieeefloat.pdf 12/07/2010 10:10 pm
CONSULTADO DESDE: IEEE Standard 754 Floating Point Numbers
http://www.research.microsoft.com/~hollasch/cgindex/coding/ieeefloat.html

floating_point.pdf:
-> Formally Verifying IEEE Compliance of Floating-Point Hardware
http://download.intel.com/technology/itj/q11999/pdf/floating_point.pdf - CONSULTADO DESDE:
http://www.intel.com/technology/itj/archive/1999.htm

JohnHerbster_T_BinaryFloatingPoint_1 010102.zip:
http://www.efg2.com/Lab/Library/Delphi/MathInfo/JohnHerbster_T_BinaryFloatingPoint_1%20010102.zip

B-7:
----
Convertir entre Microsoft e IEEE.html
http://www.uit.edu.vn/data/gtrinh/TH012/tlthamkhao/cpp-ti/16431.html

UseNet post3:
http://www.efg2.com/Lab/Library/UseNet/1999/0124.txt

B-8:
----
math10.zip:
http://www.tempest-sw.com/freeware/freeware.cgi?Delphi
http://www.tempest-sw.com/freeware/Delphi/math10.zip

B-9:
----
http://www.efg2.com/Lab/Library/Delphi/MathFunctions/Rounding.pas.TXT

http://www.efg2.com/Lab/Library/Delphi/MathFunctions/General.htm#Set8087CW

http://www.efg2.com/Lab/Library/Delphi/MathFunctions/FPUControlWord.Txt

http://www.efg2.com/Lab/Library/UseNet/2000/0606b.txt

Saludos,
« Última Modificación: 06 de agosto de 2010, 23:52:17 por Delphius »
Como redactar mensajes - Uso de etiquetas

Se enseña por amor a los demás, se aprende por amor a la verdad
Cuanto más se busca la verdad, sin llegar a la perfección, anhelamos saber lo que falta

San Agustín

Siga a los miembros que agradecieron este mensaje:


Desconectado egostar

  • Administrador
  • ******
  • Panel de agradecimientos
  • -Tu has dado: 1182
  • -Tu has recibido: 641
  • Mensajes: 10,337
  • Calificaciones: +715/-7
  • Sexo: Masculino
  • coding my life
    • MeXistemas punto com
Vaya, si que hay mucha información, a esta hora de la noche no me hagan eso :D :D :D

Salud OS

"Si no quieres que la gente se olvide de ti apenas te mueras, escribe algo que valga la pena leerse o valga la pena escribirse."
- Benjamin Franklin
"Los programadores hicimos un pacto con dios, el no hace sistemas y nosotros no hacemos milagros."- Anónimo


          

Desconectado Delphius

  • Administrador
  • ******
  • Panel de agradecimientos
  • -Tu has dado: 217
  • -Tu has recibido: 337
  • Mensajes: 4,362
  • Calificaciones: +381/-2
  • Sexo: Masculino
  • ¿El polimorfismo seguirá siendo parte de mi vida?
Vaya, si que hay mucha información, a esta hora de la noche no me hagan eso :D :D :D

Salud OS
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.

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,
Como redactar mensajes - Uso de etiquetas

Se enseña por amor a los demás, se aprende por amor a la verdad
Cuanto más se busca la verdad, sin llegar a la perfección, anhelamos saber lo que falta

San Agustín

Desconectado Alfredo

  • Usuario Activo
  • ***
  • Panel de agradecimientos
  • -Tu has dado: 13
  • -Tu has recibido: 3
  • Mensajes: 91
  • Calificaciones: +5/-0
  • Sexo: Masculino
Gracias Delphius, muy interesante los links, ya tengo para leer el fin de semana

Desconectado Delphius

  • Administrador
  • ******
  • Panel de agradecimientos
  • -Tu has dado: 217
  • -Tu has recibido: 337
  • Mensajes: 4,362
  • Calificaciones: +381/-2
  • Sexo: Masculino
  • ¿El polimorfismo seguirá siendo parte de mi vida?
Gracias Delphius, muy interesante los links, ya tengo para leer el fin de semana
Espero que te sienta bien el inglés, y que el contenido no suene a chino :D
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,
Como redactar mensajes - Uso de etiquetas

Se enseña por amor a los demás, se aprende por amor a la verdad
Cuanto más se busca la verdad, sin llegar a la perfección, anhelamos saber lo que falta

San Agustín

Desconectado Delphius

  • Administrador
  • ******
  • Panel de agradecimientos
  • -Tu has dado: 217
  • -Tu has recibido: 337
  • Mensajes: 4,362
  • Calificaciones: +381/-2
  • Sexo: Masculino
  • ¿El polimorfismo seguirá siendo parte de mi vida?
Para quien quiere un "resumen", y algo menos teórico y no tan técnico y más del tipo práctico tal vez les sienta bien estos artículos:

http://rvelthuis.de/articles/articles-floats.html

http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.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,
Como redactar mensajes - Uso de etiquetas

Se enseña por amor a los demás, se aprende por amor a la verdad
Cuanto más se busca la verdad, sin llegar a la perfección, anhelamos saber lo que falta

San Agustín

Siga a los miembros que agradecieron este mensaje: