PDA

Ver la Versión Completa : Diferencias entre real y extended


Delphius
04-08-2008, 07:07:22
Hola a todos,
Estuve haciendo unos cálculos que requieren de un tanto de precisión. Y me puse a pensar en la diferencia entre real y extended. El tipo real me basta y sobra (al menos no me imagino superar la barrera de los 1.7 x 10^308:eek:), pero leyendo la ayuda sobre el tema me pongo a filosofar... puesto que cuando hago las pruebas, y cálculos no veo que me afecte (al menos claro que intencionalmente haga superar la barrera del real).

Algo que no logro comprender, es lo que se menciona en este texto en la ayuda:

Extended offers greater precision than other real types but is less portable. Be careful using Extended if you are creating data files to share across platforms
Bien, Extended me ofrece la mejor precisión de los reales. ¿Pero es menos portable? Eso es una de las cosas que no entiendo... ¿hace referencia a que es posible que en futuro se cambie el tipo y/o la manera de trabajarlo?:confused:

Segunda cuestión... ¿Que tenga cuidado cuando cree archivos?:confused: ¿A que se refiere este punto?:confused:

Disculpen si mis preguntas han sonado un tanto a novatadas... pero hasta el momento nunca se me dio por ponerme quisquilloso con los tipos.

Les agradecería si alguien me podría dar un panorama para comprender el asunto.

Saludos,

kuan-yiu
04-08-2008, 08:20:56
Por lo que recuerdo de la facultad casi todos los lenguajes de programación, BD y sistemas informáticos tienen definidos los "real" de un modo muy similar, pero los "extended" no existen en todos los lenguajes y lo que es peor: su estructura interna de representación varia. Eso puede darte problemas a la hora de usar ese tipo de datos en otras aplicaciones, pero el principal problema es que las operaciones que se realizan sobre ellos son siempre un poco más lentas que las que utilizan formatos más comunes.
... Pero no te fíes demasiado que estoy hablando de memoria (fue hace un montón de años) y me cuesta recordar los detalles.

Delphius
04-08-2008, 18:31:30
Muchas gracias Kuan-yiu por la ayuda prestada.
Estuve buscando un poquito en la web y no encontré algo que me indicara algunas cosas. La información que tengo a mano sobre estos tipos no me es de mucha ayuda, es muy breve lo que se dice.

Si es como indicas, entonces al parecer no tiene beneficio que cambie mis real por extended.

Si alguien más considera que se puede aportar a este hilo puede hacerlo. Cualquier información al respecto es bienvenida.

Saludos,

2-D@monic
04-08-2008, 19:05:18
Bueno espero hacer un pequeño aporte acerca de la portabilidad de tipos de datos, funciones, etc., el problema es que cuando quieras migrar tus procedimientos a otro lenguaje o a otra plataforma (kylix en linux) no serán compatibles o por lo menos tendrás problemas al utilizarlos y por lo tanto no son "portables", recuerdo que eso pasa con t-sql de sql server, una desventaja que tiene es que tiene muchas funciones propias y disminuye su portabilidad al momento de migrar a otro lenguaje de consultas.
Otro punto es que te menciona que tratas de no utilizar este tipo de dato en archivos en donde tu aplicación se ejecutará en otra plataforma. puede que tu código compilado en kylix, lazarus, etc, no funcione.

Saludos.

cHackAll
04-08-2008, 21:46:33
The "Real" definition is now a "generic" type, as shown in Table 4. "Real" in Delphi 4/5 is equivalent to "Double." The "Extended" type offers greater precision than other real types but is less portable — the IEEE "Double" has the most precision that is a defined standard for all platforms. Be careful using Extended if you are creating data files to share across platforms. The Double type is adequate for most scientific and engineering calculations, so the new "Real" can be used for most calculations. Since the Double is 64-bits long, performance with the 64-bit processors in the near future will probably be faster with doubles than with the 80-bit extended values.


GenuineIntel.006F6 - Core 2 Duo E6300

Value= 9.98409973144531E+0002 Single = 96.02 clocks
Value= 9.98334166468120E+0002 Double = 112.01 clocks
Value= 9.98334166468282E+0002 Extended = 117.01 clocks

AuthenticAMD.40FB2 - Athlon X2 3800+

Value= 9.98409973144531E+0002 Single = 101.05 clocks
Value= 9.98334166468120E+0002 Double = 104.09 clocks
Value= 9.98334166468282E+0002 Extended = 122.90 clocks

GenuineIntel.006F6

sin
Value= 0.00000000000000E+0000 Single = 97.12 clocks
Value= 0.00000000000000E+0000 Double = 95.15 clocks
Value= 0.00000000000000E+0000 Extended = 103.13 clocks

sqrt
Value= 0.00000000000000E+0000 Single = 68.87 clocks
Value= 0.00000000000000E+0000 Double = 68.15 clocks
Value= 0.00000000000000E+0000 Extended = 68.73 clocks

arctan
Value= 0.00000000000000E+0000 Single = 143.13 clocks
Value= 0.00000000000000E+0000 Double = 143.15 clocks
Value= 0.00000000000000E+0000 Extended = 148.13 clocks

AuthenticAMD.40FB2

sin
Value= 0.00000000000000E+0000 Single = 101.09 clocks
Value= 0.00000000000000E+0000 Double = 101.10 clocks
Value= 0.00000000000000E+0000 Extended = 125.51 clocks

sqrt
Value= 0.00000000000000E+0000 Single = 32.08 clocks
Value= 0.00000000000000E+0000 Double = 32.08 clocks
Value= 0.00000000000000E+0000 Extended = 46.07 clocks

arctan
Value= 0.00000000000000E+0000 Single = 157.98 clocks
Value= 0.00000000000000E+0000 Double = 157.30 clocks
Value= 0.00000000000000E+0000 Extended = 175.08 clocks

Saludos (http://en.wikipedia.org/wiki/IEEE_754)

Delphius
05-08-2008, 01:04:10
Gracias Javier por la data,
Voy a ponerme a leer con mucha atención lo que haces llegar. Te lo agradezco.

Saludos,

Delphius
05-08-2008, 02:10:37
Bueno, estuve leyendo la info y creo ya entender mejor el asunto.
Lo ideal es emplear el double o real. En caso de ser necesario más, recién pensar en un extended, y tomarlo con pinzas.
Por lo que he leído, lo ideal para operaciones científicas es emplear double, o lo que es correcto el real. Me basta con él y hasta el momento, no me ha dado problemas.

Por cierto, ¿qué idioma es el que hablan en el enlace referencia tus citas? ¿Ruso?:confused: Intenté traducirlo con algunos traductores online y nada:o...

Seguiré leyendo con respecto al estándar 754 que estableció la IEEE a ver si se ha dicho algo más.

Gracias nuevamente.
Saludos,