fbpx
Wikipedia

Formato en coma flotante de doble precisión

El formato en coma (o punto) flotante de doble precisión es un formato de número de computador u ordenador que ocupa 64 bits en su memoria y representa un amplio y dinámico rango de valores mediante el uso de la coma flotante. Este formato suele ser conocido como binary64 tal como se especifica en el estándar IEEE 754.[1]​ En los computadores antiguos fueron utilizados diferentes formatos de coma flotante de 8 bytes, como ejemplo, el tipo de datos de doble precisión en el lenguaje de programación GW-BASIC, el cual era un formato de coma flotante de 32 bits MBF (Formato Binario de Microsoft).

Descripción del formato

El formato binario en coma flotante de doble precisión es de uso común en los computadores personales, debido a su rango más amplio de trabajo con respecto al formato en coma flotante de simple precisión, a pesar de su rendimiento y su coste de ancho de banda. Al igual que con el formato de coma flotante de precisión simple, carece de precisión en números enteros cuando se compara con un formato entero del mismo tamaño. El estándar IEEE 754 establece que un número en formato binary64 consta de:

  • Bit de signo (S): 1 bit.
  • Exponente (E): 11 bits.
  • Significando o Mantisa: 53 bits (52 bits se almacenan explícitamente).

Si una cadena decimal con un máximo de 15 dígitos significativos se convierte en una representación de doble precisión y luego se convierte de nuevo a una cadena con el mismo número de dígitos significativos, a continuación, la cadena final debe coincidir con la original. Si un número en doble precisión se convierte en una cadena decimal con al menos 17 dígitos significativos y luego se convierte de nuevo en doble, el número final debe coincidir con el original.[2]

El formato se escribe con un significando que tiene un bit entero implícito de valor 1 (excepto para los números especiales). Con los 52 bits de la fracción o significando que aparecen en el formato de memoria, la precisión total es por lo tanto de 53 bits (es decir de 53*log10(2) ≈ 15.955 que se redondea a 16 dígitos decimales). Los bits se presentan de la siguiente manera:

 
Estructura de un número en formato de coma flotante de doble precisión.

El exponente de este formato está sesgado o desplazado en 1023 unidades, ya que como el máximo valor representado por 11 bits es 211-1=2047, es la mitad de este rango la que representa exponentes positivos y la otra, exponentes negativos, por lo que se usa la parte entera de la mitad de 2047. El valor verdadero ( ) de un número de coma flotante de doble precisión es:

 

En el intervalo entre 252 (4 503 599 627 370 496) y 253 (9 007 199 254 740 992) el espaciado entre números es 1, por lo que solo son exactamente representables los números enteros (no se puede representar la parte decimal). Para el rango siguiente superior, de 253 a 254, todo se multiplica por 2, por lo que los números representables solo son los pares (espaciado 2), y así en lo sucesivo (aumentando el espaciado en potencias de 2). Simétricamente, para el rango anterior, de 251 a 252, el espaciado es de 0,5, pudiéndose representar exactamente los números enteros en este rango y los valores intermedios (0,5, 1,5, etc). En los rangos que les anteceden el espaciado entre números representables se va reduciendo en potencias de 2. La separación como una fracción de los números en el intervalo de 2n a 2n+1 es 2n-52. El error máximo de redondeo relativo cuando se redondea un número al representable más próximo (denominado el épsilon de la máquina) es por lo tanto 2-53.

El ancho de 11 bits del exponente permite la representación de números en el rango comprendido entre 2-1023 y 2+1023 (10-308 y 10+308), con una precisión de 15 a 17 dígitos decimales completos. Al comprometer la precisión, la representación subnormal permite valores incluso más pequeños hasta aproximadamente 5 × 10-324.

Codificación del exponente

El exponente del formato en coma flotante de doble precisión es codificado usando una representación binaria sesgada en 1023 unidades, de modo que para obtener el exponente verdadero,debe restarse el sesgo de 1023 del exponente calculado.

Los exponentes 00016 y 7ff16 tienen un significado especial:

  • 00016 se usa para representar ceros con signo (mantisa cero) y números subnormales (mantisa no nula).
  • 7ff16 se usa para representar el valor infinito (∞), con mantisa cero y las cadenas no numéricas o NaN, con mantisa no nula.

donde F es la parte fraccionaria del significando o mantisa.

Todos los patrones de bits son de codificación válida. Excepto en los casos anteriores, todo número de doble precisión se describe por:

 

En el caso de valores subnormales, el número de doble precisión se describe mediante:

 

Velocidad de ejecución con aritmética de doble precisión

La utilización de variables de coma flotante de doble precisión y funciones matemáticas (por ejemplo: seno, coseno, arcotangente, logaritmo, exponencial y raíz cuadrada) es más lenta que trabajar con sus contrapartes de simple precisión. Un área de computación donde se trata de un problema particular es para el código paralelo que se ejecuta en las GPUs. Por ejemplo, cuando se utiliza la plataforma CUDA de NVIDIA, en las tarjetas de video diseñadas para juegos, los cálculos con doble precisión tardan 3 a 24 veces más en completarse que los cálculos con simple precisión.[3]

Implementaciones

Los formatos de coma flotante de doble precisión son implementados en muchos lenguajes de programación en diversas formas. Los procesadores que solo poseen precisión dinámica como los x86 sin SSE2 (o cuando SSE2 no es usado, para propósitos de compatibilidad) y con precisión extendida, usada por defecto, el software puede tener dificultades para cumplir ciertos requisitos.

C y C++

Cy C++ ofrecen una amplia variedad de tipos aritméticos. El formato de doble precisión no es requerido por los estándares de estos lenguajes (excepto por el Anexo F opcional de C99 que cubre la aritmética de la norma IEEE 754), pero en la mayoría de los sistemas el tipo de variable double corresponde a la doble precisión. Sin embargo, en procesadores x86 de 32 bits con precisión extendida por defecto, algunos compiladores pueden no cumplir con el estándar C y/o la aritmética puede sufrir problemas de doble redondeo.[4]

Object Pascal

Si bien las versiones tempranas de Pascal y Turbo Pascal no tenían soporte para Doble precisión, actualmente existe soporte completo para números en coma flotantes de doble precisisón en los compiladores más usados para Object Pascal. Delphi, y Free Pascal incluyen el tipo Double como números en coma flotante de 64 bits de acuerdo al estándar IEEE-754.

Common Lisp

El lenguaje de programación Common Lisp proporciona los tipos de variables SHORT-FLOAT, SINGLE-FLOAT, DOUBLE-FLOAT y LONG-FLOAT. La mayoría de las implementaciones proporcionan tipos SINGLE-FLOAT y DOUBLE-FLOAT con los otros tipos de sinónimos apropiados. Common Lisp proporciona excepciones para capturar subflujos de coma flotante y desbordamientos y la excepción de coma flotante inexacta, según IEEE 754. No hay valores infinitos y las expresiones no numéricas (NaNs) se describen en el estándar ANSI, sin embargo, varias implementaciones sí proporcionan estas como extensiones.

JavaScript

Tal como se especifica en la norma ECMAScript, toda la aritmética en JavaScript se realizará utilizando aritmética de coma flotante de doble precisión.[5]

Lua

En la versión 5.2[6]​ de Lua y anteriores, se usa aritmética de coma flotante de doble precisión. Además, se proporcionan conversiones de tipo automático entre variables double (doble precisión) y string (cadenas).

Véase también

Referencias

  1. (en inglés). IEEE. 29 de agosto de 2008. Archivado desde el original el 6 de noviembre de 2016. Consultado el 18 de marzo de 2017. 
  2. William Kahan (1 de octubre de 1987). «Lecture Notes on the Status of IEEE Standard 754 for Binary Floating-Point Arithmetic» (en inglés). Consultado el 14 de marzo de 2017. 
  3. Angelini, Chris (19 de febrero de 2013). «Nvidia GeForce GTX Titan 6 GB: GK110 On A Gaming Card» (en inglés). Tom's Hardware Guide. Consultado el 14 de marzo de 2017. 
  4. «323 – optimized code gives strange floating point results». gcc.gnu.org (en inglés). Free Software Foundation. Consultado el 15 de marzo de 2017. 
  5. «ECMA Standard-262: ECMAScript Language Specification» (en inglés). Ecma International. Consultado el 15 de marzo de 2017. 
  6. «Lua 5.2 Reference Manual». www.lua.org (en inglés). Consultado el 17 de marzo de 2017. 
  •   Datos: Q1243369

formato, coma, flotante, doble, precisión, formato, coma, punto, flotante, doble, precisión, formato, número, computador, ordenador, ocupa, bits, memoria, representa, amplio, dinámico, rango, valores, mediante, coma, flotante, este, formato, suele, conocido, c. El formato en coma o punto flotante de doble precision es un formato de numero de computador u ordenador que ocupa 64 bits en su memoria y representa un amplio y dinamico rango de valores mediante el uso de la coma flotante Este formato suele ser conocido como binary64 tal como se especifica en el estandar IEEE 754 1 En los computadores antiguos fueron utilizados diferentes formatos de coma flotante de 8 bytes como ejemplo el tipo de datos de doble precision en el lenguaje de programacion GW BASIC el cual era un formato de coma flotante de 32 bits MBF Formato Binario de Microsoft Indice 1 Descripcion del formato 1 1 Codificacion del exponente 1 2 Velocidad de ejecucion con aritmetica de doble precision 2 Implementaciones 2 1 C y C 2 2 Object Pascal 2 3 Common Lisp 2 4 JavaScript 2 5 Lua 3 Vease tambien 4 ReferenciasDescripcion del formato EditarEl formato binario en coma flotante de doble precision es de uso comun en los computadores personales debido a su rango mas amplio de trabajo con respecto al formato en coma flotante de simple precision a pesar de su rendimiento y su coste de ancho de banda Al igual que con el formato de coma flotante de precision simple carece de precision en numeros enteros cuando se compara con un formato entero del mismo tamano El estandar IEEE 754 establece que un numero en formato binary64 consta de Bit de signo S 1 bit Exponente E 11 bits Significando o Mantisa 53 bits 52 bits se almacenan explicitamente Si una cadena decimal con un maximo de 15 digitos significativos se convierte en una representacion de doble precision y luego se convierte de nuevo a una cadena con el mismo numero de digitos significativos a continuacion la cadena final debe coincidir con la original Si un numero en doble precision se convierte en una cadena decimal con al menos 17 digitos significativos y luego se convierte de nuevo en doble el numero final debe coincidir con el original 2 El formato se escribe con un significando que tiene un bit entero implicito de valor 1 excepto para los numeros especiales Con los 52 bits de la fraccion o significando que aparecen en el formato de memoria la precision total es por lo tanto de 53 bits es decir de 53 log10 2 15 955 que se redondea a 16 digitos decimales Los bits se presentan de la siguiente manera Estructura de un numero en formato de coma flotante de doble precision El exponente de este formato esta sesgado o desplazado en 1023 unidades ya que como el maximo valor representado por 11 bits es 211 1 2047 es la mitad de este rango la que representa exponentes positivos y la otra exponentes negativos por lo que se usa la parte entera de la mitad de 2047 El valor verdadero v displaystyle v de un numero de coma flotante de doble precision es v 1 b 63 1 b 51 b 50 b 0 2 2 e 1023 1 b 63 1 i 0 51 b 51 i 2 i 2 e 1023 displaystyle v 1 b 63 times 1 b 51 b 50 b 0 2 times 2 e 1023 1 b 63 times left 1 sum i 0 51 b 51 i 2 i right times 2 e 1023 En el intervalo entre 252 4 503 599 627 370 496 y 253 9 007 199 254 740 992 el espaciado entre numeros es 1 por lo que solo son exactamente representables los numeros enteros no se puede representar la parte decimal Para el rango siguiente superior de 253 a 254 todo se multiplica por 2 por lo que los numeros representables solo son los pares espaciado 2 y asi en lo sucesivo aumentando el espaciado en potencias de 2 Simetricamente para el rango anterior de 251 a 252 el espaciado es de 0 5 pudiendose representar exactamente los numeros enteros en este rango y los valores intermedios 0 5 1 5 etc En los rangos que les anteceden el espaciado entre numeros representables se va reduciendo en potencias de 2 La separacion como una fraccion de los numeros en el intervalo de 2n a 2n 1 es 2n 52 El error maximo de redondeo relativo cuando se redondea un numero al representable mas proximo denominado el epsilon de la maquina es por lo tanto 2 53 El ancho de 11 bits del exponente permite la representacion de numeros en el rango comprendido entre 2 1023 y 2 1023 10 308 y 10 308 con una precision de 15 a 17 digitos decimales completos Al comprometer la precision la representacion subnormal permite valores incluso mas pequenos hasta aproximadamente 5 10 324 Codificacion del exponente Editar El exponente del formato en coma flotante de doble precision es codificado usando una representacion binaria sesgada en 1023 unidades de modo que para obtener el exponente verdadero debe restarse el sesgo de 1023 del exponente calculado Los exponentes 000 sub 16 sub y 7ff sub 16 sub tienen un significado especial 000 sub 16 sub se usa para representar ceros con signo mantisa cero y numeros subnormales mantisa no nula 7ff sub 16 sub se usa para representar el valor infinito con mantisa cero y las cadenas no numericas o NaN con mantisa no nula donde F es la parte fraccionaria del significando o mantisa Todos los patrones de bits son de codificacion valida Excepto en los casos anteriores todo numero de doble precision se describe por 1 b 63 2 e 1023 1 b 51 b 50 b 0 displaystyle 1 b 63 times 2 e 1023 times 1 b 51 b 50 dots b 0 En el caso de valores subnormales el numero de doble precision se describe mediante 1 b 63 2 1 1023 0 b 51 b 50 b 0 displaystyle 1 b 63 times 2 1 1023 times 0 b 51 b 50 dots b 0 Velocidad de ejecucion con aritmetica de doble precision Editar La utilizacion de variables de coma flotante de doble precision y funciones matematicas por ejemplo seno coseno arcotangente logaritmo exponencial y raiz cuadrada es mas lenta que trabajar con sus contrapartes de simple precision Un area de computacion donde se trata de un problema particular es para el codigo paralelo que se ejecuta en las GPUs Por ejemplo cuando se utiliza la plataforma CUDA de NVIDIA en las tarjetas de video disenadas para juegos los calculos con doble precision tardan 3 a 24 veces mas en completarse que los calculos con simple precision 3 Implementaciones EditarLos formatos de coma flotante de doble precision son implementados en muchos lenguajes de programacion en diversas formas Los procesadores que solo poseen precision dinamica como los x86 sin SSE2 o cuando SSE2 no es usado para propositos de compatibilidad y con precision extendida usada por defecto el software puede tener dificultades para cumplir ciertos requisitos C y C Editar Cy C ofrecen una amplia variedad de tipos aritmeticos El formato de doble precision no es requerido por los estandares de estos lenguajes excepto por el Anexo F opcional de C99 que cubre la aritmetica de la norma IEEE 754 pero en la mayoria de los sistemas el tipo de variable double corresponde a la doble precision Sin embargo en procesadores x86 de 32 bits con precision extendida por defecto algunos compiladores pueden no cumplir con el estandar C y o la aritmetica puede sufrir problemas de doble redondeo 4 Object Pascal Editar Si bien las versiones tempranas de Pascal y Turbo Pascal no tenian soporte para Doble precision actualmente existe soporte completo para numeros en coma flotantes de doble precisison en los compiladores mas usados para Object Pascal Delphi y Free Pascal incluyen el tipo Double como numeros en coma flotante de 64 bits de acuerdo al estandar IEEE 754 Common Lisp Editar El lenguaje de programacion Common Lisp proporciona los tipos de variables SHORT FLOAT SINGLE FLOAT DOUBLE FLOAT y LONG FLOAT La mayoria de las implementaciones proporcionan tipos SINGLE FLOAT y DOUBLE FLOAT con los otros tipos de sinonimos apropiados Common Lisp proporciona excepciones para capturar subflujos de coma flotante y desbordamientos y la excepcion de coma flotante inexacta segun IEEE 754 No hay valores infinitos y las expresiones no numericas NaNs se describen en el estandar ANSI sin embargo varias implementaciones si proporcionan estas como extensiones JavaScript Editar Tal como se especifica en la norma ECMAScript toda la aritmetica en JavaScript se realizara utilizando aritmetica de coma flotante de doble precision 5 Lua Editar En la version 5 2 6 de Lua y anteriores se usa aritmetica de coma flotante de doble precision Ademas se proporcionan conversiones de tipo automatico entre variables double doble precision y string cadenas Vease tambien EditarEstabilidad numerica Formato en coma flotante de simple precision IEEE Coma Flotante Tipo de dato elementalReferencias Editar IEEE Standard for Floating Point Arithmetic en ingles IEEE 29 de agosto de 2008 Archivado desde el original el 6 de noviembre de 2016 Consultado el 18 de marzo de 2017 William Kahan 1 de octubre de 1987 Lecture Notes on the Status of IEEE Standard 754 for Binary Floating Point Arithmetic en ingles Consultado el 14 de marzo de 2017 Angelini Chris 19 de febrero de 2013 Nvidia GeForce GTX Titan 6 GB GK110 On A Gaming Card en ingles Tom s Hardware Guide Consultado el 14 de marzo de 2017 323 optimized code gives strange floating point results gcc gnu org en ingles Free Software Foundation Consultado el 15 de marzo de 2017 ECMA Standard 262 ECMAScript Language Specification en ingles Ecma International Consultado el 15 de marzo de 2017 Lua 5 2 Reference Manual www lua org en ingles Consultado el 17 de marzo de 2017 Datos Q1243369 Obtenido de https es wikipedia org w index php title Formato en coma flotante de doble precision amp oldid 148130997, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos