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...
double no existe en bennu.
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.
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
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.
¿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
olee, moola, yo tambíen ardo en deseos de ver ese nuevo core.
Incluirá ya clases. ¿No? :D
cuidado que yo no he dicho nada de eso...
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... ::)
:)
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).
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?
Pues lo típico: multiplicar por senos y cosenos, sumar, restar y demás con otros floats...