
algoritmo de epsilon maquina
#1
Escrito 24 septiembre 2012 - 07:16
Muchas gracias
#2
Escrito 24 septiembre 2012 - 07:27
#3
Escrito 25 septiembre 2012 - 07:32
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,
#4
Escrito 25 septiembre 2012 - 07:55
La explicación de las diferencias es justamente por el dichoso optimizador y el preprocesador

Allí mismo sugiere la solución:
eps := 1.0; repeat eps := eps/2.0; sum := 1.0 + eps; until sum <= 1.0 ;
Saludos,
#5
Escrito 25 septiembre 2012 - 08:33
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.
#6
Escrito 25 septiembre 2012 - 08:40

Gracias totales

#7
Escrito 25 septiembre 2012 - 09:08
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:
eps := 1.0; repeat mo1.Lines.Add(FloatToStr(eps)); eps := eps/2.0; sum := 1.0 + eps; until sum <= 1.0; 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,
#8
Escrito 28 septiembre 2012 - 07:08
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
#9
Escrito 28 septiembre 2012 - 07:53
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.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
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,
#10
Escrito 30 septiembre 2012 - 07:22
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.

#11
Escrito 30 septiembre 2012 - 01:06
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,
#12
Escrito 30 septiembre 2012 - 08:16
Muchas gracias por el aporte.

Estamos en contacto. Saludos
