Jump to content


Photo

algoritmo de epsilon maquina


  • Please log in to reply
11 replies to this topic

#1 kiko

kiko

    Newbie

  • Miembros
  • Pip
  • 6 posts

Posted 24 September 2012 - 07:16 PM

Hola a todos. Estoy comenzando a manejar delphi 7 y quisiera saber como puedo escribir el código el delphi 7 para calcular el epsilon maquina


Muchas gracias
  • 0

#2 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14448 posts
  • LocationMéxico

Posted 24 September 2012 - 07:27 PM

Hola kiko, bienvenido a DelphiAcess.

A ver si te sirve éste hilo de nuestro amigo Delphius

Saludos


  • 0

#3 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6295 posts
  • LocationArgentina

Posted 25 September 2012 - 07:32 AM

No está demás considerar el siguiente artículo en wikipedia.

Aquí hay un método, escrito en Delphi, que es más preciso (y acuerdo a los valores estimados a los teóricos según el artículo en Wiki) del que está en el hilo que te han recomendado.

Yo a decir verdad no entiendo el porqué de las diferencias entre un algoritmo y el otro. Pero le tengo más confianza al expuesto por efg que el que yo puse en mi hilo.

Otros lenguajes ya tienen definido en una constante el valor del epsilon... me extraña que no lo tenga Delphi.
Lo que si hay que recalcar es que el valor calculado depende del tipo de coma flotante elegido... pruébese con double, extended, y single  ;)

Saludos,
  • 0

#4 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6295 posts
  • LocationArgentina

Posted 25 September 2012 - 07:55 AM

Este otro artículo quizá aporta más claridad.
La explicación de las diferencias es justamente por el dichoso optimizador y el preprocesador  8o|
Allí mismo sugiere la solución:



delphi
  1. eps := 1.0;
  2. repeat
  3.   eps := eps/2.0;
  4.   sum := 1.0 + eps;
  5. until sum <= 1.0 ;



Saludos,
  • 0

#5 kiko

kiko

    Newbie

  • Miembros
  • Pip
  • 6 posts

Posted 25 September 2012 - 08:33 AM

Hola kiko, bienvenido a DelphiAcess.

A ver si te sirve éste hilo de nuestro amigo Delphius

Saludos


Muchas gracias egostar, ahora mismo me dispongo a profundizar más sobre el tema. Ha sido de mucha ayuda.
  • 0

#6 kiko

kiko

    Newbie

  • Miembros
  • Pip
  • 6 posts

Posted 25 September 2012 - 08:40 AM

Les agradezco mucho a egostar y delphius. Con esta información me he ambientado mejor el tema. Llevo la primera semana del curso Análisis Numérico y estaba muy preocupado, ya que hace bastante tiempo había dejado de programar en delphi. Espero seguir contando con su ayuda mientras despego nuevamente con toda esta temática. :smiley:

Gracias totales :wink:
  • 0

#7 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6295 posts
  • LocationArgentina

Posted 25 September 2012 - 09:08 AM

Hola Kiko,
Aquí vas a encontrar gente dispuesta a ayudarte en lo que podamos, asi que no temas consultar con nosotros tus dudas.

Lo que si sugiero es prestarle mucha atención al último código que expuse. Ese es el que en verdad funciona. Si te fijas en el enlace que puse en dicho post el algoritmo original va mostrando el valor de epsilon en cada iteración. Nota que primero muestra el valor y luego opera, con lo que el valor real que debe devolverse es el epsilon previo al cálculo (es decir, el del ciclo anterior).

El valor estimado para el double, tal como señala el artículo es 2,22...E-16. Si tu muestras el valor de epsilon final al terminar el algoritmo, algo como:



delphi
  1.   eps := 1.0;
  2.   repeat
  3.     mo1.Lines.Add(FloatToStr(eps));
  4.     eps := eps/2.0;
  5.     sum := 1.0 + eps;
  6.   until sum <= 1.0;
  7.   ll1.Caption := FloatToStr(eps);



Recibirás justamente la mitad de éste: 1,11...E-16.

Justamente en el artículo en wikipedia, en la parte de la tabla con los diferentes valores un pequeños enlace a modo de acotación sobre una discusión sobre la interpretación del epsilon. Hay quienes aseguran que el valor es (2^-(p-1))/2 mientras que otros que es hasta (2^-p)/2. Lo que tiene una una clara implicancia.
De allí que veas que algunos sugieren que el valor real es 1,11...E-16 y no 2,22E16 debido a esta "iteración de más".

Lo cierto es que el valor efectivo es 2,22...E-16, o al menos es lo que leo en los artículos que tengo. Y de hecho es justamente este valor el que está definido como constante en C y no creo que sus diseñadores hayan puesto un valor erróneo. Mejor hago estas aclaraciones antes de que surjan otros problemas. Considero que a asuntos que tengan más que ver con algo académico (como estas posibles discrepancias teóricas y numéricas) lo consultes con tu profesor por más seguridad... El podría aclarar efectivamente cual es en la práctica el valor estimado.
Para todo lo demás aquí estamos.

Saludos,
  • 0

#8 kiko

kiko

    Newbie

  • Miembros
  • Pip
  • 6 posts

Posted 28 September 2012 - 07:08 PM

Hola Delphius.

Muchas gracias por los aportes. Estoy leyendo bastante ya que este tema me ha empezado a gustar. Deseo hacer un buen curso de Análisis Numérico para posteriores estudios de maestría. Espero seguir estudiando en la línea de la Matemática Aplicada.

Un saludo y estamos en contacto
  • 0

#9 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6295 posts
  • LocationArgentina

Posted 28 September 2012 - 07:53 PM

Hola Delphius.

Muchas gracias por los aportes. Estoy leyendo bastante ya que este tema me ha empezado a gustar. Deseo hacer un buen curso de Análisis Numérico para posteriores estudios de maestría. Espero seguir estudiando en la línea de la Matemática Aplicada.

Un saludo y estamos en contacto

A mi también me gusta la matemática aplicada, pero la cátedra que tuve sobre el tema no ha sido muy profunda y no le he podido sacar más provecho del que me gustaría. Yo me tuve que poner por mi cuenta, en lo que mis gustos me han llevado y me ha tocado... de forma autodidacta.

Sino te es mucha molestia, en algún momento libre que tengas, estaría encantado de que dieras a conocer algunas referencias bibiliográficas que te ha dejado el profesor. Yo no tuve oportunidad de trabajar con libros, la cátedra de Análisis Numérico la hemos tenido que cursar de prisa, y sin demasiado material... de hecho el profesor nos daba fotocopias porque los libros no estaban en biblioteca y no había tiempo. La CONADU nos exigía la cátedra (no estaba en el plan de estudios inicialmente) y era cursar o cursar. :(

Saludos,
  • 0

#10 kiko

kiko

    Newbie

  • Miembros
  • Pip
  • 6 posts

Posted 30 September 2012 - 07:22 AM

Hola Delphius.

Con mucho gusto puedo compartirte la bibliografía y el material que estamos trabajando en el curso.
Aunque en el curso apenas llevamos dos semanas, te puedo contar que por ahora vamos a trabajar con dos textos: Análisis Numérico - Richard Burden, J. Douglas Faires. y Análisis Numérico - David Kincaid.

Estos textos son los que se trabajan en el departamento de matemáticas de la U. del Cauca.

Además, estamos aprendiendo a escribir en Latex. Me parece genial este editor para escribir todo lo concerniente a los temas matemáticos. Y los lenguajes para programar son: java, c++ y delphi. El profe programa en Java.

Si puedo ayudar con algo más me lo haces saber.

Un saludo. (y)
  • 0

#11 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6295 posts
  • LocationArgentina

Posted 30 September 2012 - 01:06 PM

Hola kiko,
Te agradezco que me hallas dejado a mano la bibliografía.
Me resulta conocido Burden y Faires, creo haberlo visto entre los libros de la biblioteca de mi Universidad.

Me tendré que fijar si están en la Biblioteca Pública, ya que no estoy en la posibilidad de ir a la Universidad por el momento.
He editado tu mensaje para eliminar el enlace. No está permitido distribuir material con derechos de autor en el foro. Yo me conformo con saber el libro y el autor. Tengo una buena cantidad de libros por revisar y consultar, estos dos van para la lista.

Saludos,
  • 0

#12 kiko

kiko

    Newbie

  • Miembros
  • Pip
  • 6 posts

Posted 30 September 2012 - 08:16 PM

Hola Delphius

Muchas gracias por el aporte.  :embarrassed:

Estamos en contacto. Saludos (y)
  • 0




IP.Board spam blocked by CleanTalk.