Bennu Game Development

Foros en Español => General => Topic started by: warrior_rockk on October 02, 2013, 03:47:38 PM

Title: Resta de floats
Post by: warrior_rockk on October 02, 2013, 03:47:38 PM
Algo he leído por el foro de que hay que tener en cuenta la precisión de los floats, pero el problema que tengo no es muy normal. Tengo este ejemplo que resta 0.1 a un valor float hasta llegar al 0 y al llegar a 0.2 me deja la resta en 0.0999 con lo que la siguiente resta se pasa del 0:


process main()
private
float f;
begin
f = 1.0;
loop
f -=0.1;
frame;
end;
end


Title: Re:Resta de floats
Post by: panreyes on October 02, 2013, 03:52:42 PM
Es el comportamiento esperado :)
Title: Re:Resta de floats
Post by: warrior_rockk on October 02, 2013, 04:00:03 PM
¿y porqué? ¿Porque 0.2 - 0.1  no es igual a 0.1? De ser así como se comporta, no se pueden utilizar los floats para ciertas operaciones...
Title: Re:Resta de floats
Post by: panreyes on October 02, 2013, 04:02:54 PM
Para hacer los floats lo más rápidos posibles, estos pierden algo de precisión. No es algo de BennuGD, sino de la programación en general.


Además, las operaciones con floats son mucho más lentas que en ints, por lo que nunca se recomienda utilizarlas si no son necesarias.
Title: Re:Resta de floats
Post by: SplinterGU on October 02, 2013, 09:21:50 PM
sos groso PiXeL, me ahorraste la respuesta.

warrior_rockk, estos problemas de precision son comunes en las operaciones con punto flotante, no es un problema de bennugd, es un problema del estandard IEEE
Title: Re:Resta de floats
Post by: SplinterGU on October 02, 2013, 09:26:15 PM
pixel, me has hecho pensar (o quizas darme cuenta) que el problema del blitter podria estar en el cambio que se introdujo tiempo atras para usar floats en varias de las operaciones, y por eso quizas el problema de precision... mmm... luego lo probare! gracias!
Title: Re:Resta de floats
Post by: panreyes on October 02, 2013, 10:27:54 PM
Sigamos con el Brainstorming, diciendo palabras aleatorias, para ver si te ayudo más:
OpenGL
GL
Open
GLOpen
OPENGL


Yo lo dejo caer xD
Title: Re:Resta de floats
Post by: SplinterGU on October 03, 2013, 01:35:39 AM
Quote from: PiXeL on October 02, 2013, 10:27:54 PM
Sigamos con el Brainstorming, diciendo palabras aleatorias, para ver si te ayudo más:
OpenGL
GL
Open
GLOpen
OPENGL


Yo lo dejo caer xD

ya lo se, pero eso es un cambio grande... quizas, casi tan grande como fue pasar de fenix a bennugd... y seguramente muchos seguiran tirando del render por software para plataformas raras, en las que no haya ogl, se que seran menos, pero si hacer el fix no implica mucho esfuerzo, creo que deberia hacerlo.

para ogl, lamentablemente necesito un tiempo que por lo que resta de este año creo que no tendre.
Title: Re:Resta de floats
Post by: Drumpi on October 07, 2013, 11:24:37 PM
Respecto al hilo: más que por velocidad, podría incluso tener que ver el cómo se manejan los floats por hardware, ya que la precisión de estos se basan en un sistema binario con un máximo de 32bits por cifra, y tienen lugar redondeos varios que no son aceptables.
Los FLOATS se usan cuando se necesitan juntar cifras grandes (>100000) con otras pequeñas (<0.001), ya que al usar una potencia de 10 no ocupan tanto espacio en memoria, a cambio de una perdida de precisión. Existe un valor en los ordenadores (creo que se llamaba "beta") que ondoca el grado de desviación en los cálculos con floats, y hay ordenadores carísimos con una baja "beta" para esos menesteres, a los que los mortales comunes no tenemos acceso.
Pero cuando se van a usar valores con un rango limitado, aun cuando se usen decimales, es mejor usar INT, aunque después tengamos que multiplicar o dividir el resultado por una potencia de 10 y guardarlo en un float. Es poco más lento (inapreciable), más compatible con cualquier dispositivo, y mucho más preciso.

Respecto a OGL: recuerdo lo que fue el cambio de Fenix a Bennu. Pasaron dos meses antes de tener la primera alpha, y sólo hacía algunas funciones de texto y las funciones de carga de DLLs, el tema gráfico se modificó bastante después y hubo que esperar varios meses hasta la primera beta medio funcional. Si el código es como creo que es, casi mejor empezar de cero. Habrá muchas cosas que se puedan usar, como pasó con Fenix, pero si ahora se rompe el uso de las SDL surfaces (creo que es así como se llaman los objetos que contienen los gráficos en memoria internamente), casi todo depende de ellas ¿o no?
Lo mejor es tomárselo todo con paiencia e ir poco a poco, y no ponerse una fecha temprana.

¿En serio hay operaciones con floats para el cálculo de gráficos?