float de doble precisión

Started by Windgate, February 23, 2010, 09:13:04 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Windgate

Nunca me había hecho falta, pero tengo unos cálculos trigonométricos bastante complejos que consisten en multiplicar entre sí senos y cosenos de los 3 ejes además de algún otro valor real... Y me gustaría tener toda la precisión posible a pesar de que sin ( ) y cos ( ) devuelven float.

El caso es que me ha dado por mirar los tipos de dato básicos de Bennu, y en el manual de Osk he leído que double es sinónimo de float... Me ha extrañado así que he probado a hacer say de un número decimal MUY largo guardado tanto en un float como en un double.

Mi sorpresa ha sido que al hacer say del double sólo me mostraba la parte entera :O

¿Alguien sabría aclarar un poco el uso actual de los tipos double, long int, long long int? Si es que los últimos existen...
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

SplinterGU

Download Lastest BennuGD Release: http://www.bennugd.org/node/2

DCelso

Y sería dificil introducirlo?
o bien cambiar el actual float internamente por doubles para que solo exista float bennu como double interno en c. Así conseguiríamos tener un real más preciso.
Por lo poco que he trabajado en c con doubles nunca me dió problemas.

Claro está que la mejor técnica (que te veo venir Splinter) para trabajar con reales de N decimales es lo que comentaba ya Splinter en otro post de multiplicar por 10*N todos los valores y trabajar con enteros sabiendo que la representación en pantalla tendrá que ser el valor guardado dividido por 10*N :D.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

Windgate

Hombre, cambiar directamente los float por double quizás sea excesivo... Pero añadir el tipo de dato no estaría mal. Ahora que en Bennu 3D hay mucha trigonometría y valores muy grandes sería el mejor momento para introducirlo, llevo unos días trabajando con dudas sobre si pierdo precisión por culpa de los float.

De todas formas, en Bennu 3D todas las funciones trabajan con float, realmente serviría sólo para los cálculos intermedios :P

Lo que dices de guardar la parte decimal en un entero lo veo un poco bizarro :D
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

SplinterGU

#4
eso no se pueda actualmente, ya que double son datos de 64bits... y float de 32bits... por eso no se soportan... hasta que no me decida a meter los 64bits y cambiar todo el core y demas, no se podran usar doubles...

pero bien podrias crear un tipo definido de 4 bytes y crear un modulo para manejar operaciones con estos numeros... que seria hacer las operaciones desde C... pero en vez de usar operadores llamar a funciones... aunque para hacer formulas estoy seguro que seria bastante complejo de escribir desde un prg.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Windgate

¿Ese lavado de core añadiría soporte multinúcleo, verdad? :D ok, de momento me quedo con float, la verdad, no he apreciado pérdidas de calidad en lo que he hecho hasta ahora, si detecto pérdidas reales avisaré de cuándo se producen, pero mientras tanto sabré esperar hasta ese Bennu 2.0
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

DCelso

olee, moola, yo tambíen ardo en deseos de ver ese nuevo core.
Incluirá ya clases. ¿No? :D
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

SplinterGU

cuidado que yo no he dicho nada de eso...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Windgate

Sólo hablaba de un caso hipotético, quién sabe, con el tiempo quizás salga un Bennu monstruoso con soporte para multi-todo: Tipos de dato, objetos, cores, 3D, vectoriales, sockets, embebido en web... ::)
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

SplinterGU

Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Drumpi

Pues ahora que lo mencionais, creo que tendré que echarle un vistazo al tema de la resolución de los float, porque me extraña que, cuando calculo la FFT en lo que estoy haciendo, me de distintos valores sin modificar la posición de la gráfica (en ocasiones estos crecen y crecen sin parar... muy poquito, pero crecen).
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

Windgate

Si operas con valores iguales no tienen por qué crecer, y de todas formas aunque crezcan también lo harían los double en (muy) menor medida... ¿Qué operaciones haces?
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

Drumpi

Pues lo típico: multiplicar por senos y cosenos, sumar, restar y demás con otros floats...
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)