Especificación IEEE-754, para representar valores decimales en punto flotante de simple precisión.

Documentos relacionados
Desde los programas más simples escritos en un lenguaje de programación suelen realizar tres tareas en forma secuencial.

Principios de Computadoras II

Práctica 3. Paso de parámetros entre subrutinas. 3. Consideraciones sobre el paso de parámetros

Organización del Computador. Prof. Angela Di Serio

Introducción a la Computación. Capítulo 10 Repertorio de instrucciones: Características y Funciones

Elementos de un programa en C

Universidad Rey Juan Carlos HOJA DE PROBLEMAS TEMA 3: REPRESENTACIÓN DE LA INFORMACIÓN

Definición de Memoria

Curso de Programación Avanzada en C

Ejercicios Representación de la información

Organización de Computadoras Apunte 2: Sistemas de Numeración: Punto Flotante

UNIVERSIDAD DE LOS ANDES NUCLEO UNIVERSITARIO RAFAEL RANGEL (NURR) DEPARTAMENTO DE FISICA Y MATEMATICA AREA COMPUTACION TRUJILLO EDO.

a octal A B C D E F

Representación de números enteros: el convenio exceso Z

Universidad Nacional de Ingeniería Facultad de Ciencias Introducción a la Ciencia de la Computación Sistemas de Numeros Prof: J.

Expresiones Aritméticas. Programación digital I Escuela de Sistemas Facultad de Ingeniería Gilberto Diaz

Computación I Representación Interna Curso 2011

Protocolo MODBUS para procesadores M850-W-x y M850-P-x

Java Avanzado. Guía 1. Java Avanzado Facultad de Ingeniería. Escuela de computación.

TEMA 2. CODIFICACIÓN DE LA INFORMACIÓN

Programación en java. Estructuras algorítmicas

ESTRUCTURA Y TECNOLOGÍA DE COMPUTADORES I CAPÍTULO III ARITMÉTICA Y CODIFICACIÓN

Lenguaje C Elementos de un Programa. Ing. Hugo Fdo. Velasco Peña Universidad Nacional 2006

Inicio del programa. Entrada de datos. Proceso de datos. Salida de datos. Fin del programa

Datos y tipos de datos

Representación de la información

Una base de datos de Access puede estar conformada por varios objetos, los más comunes son los siguientes:

en coma flotante Oliverio J. Santana Jaria Sistemas Digitales Ingeniería Técnica en Informática de Sistemas Curso

La velocidad no lleva a ninguna parte si no se va en la dirección correcta. Proverbio Americano. Punto Flotante

Guía - Taller # 2 (JAVA)

Objetivos de la sesión. Aplicación de consola 7/30/11. Código con que se inicia un programa en Visual C# (aplicación de consola)

INFORMATICA I EJERCICIOS PROPUESTOS Buscar en el diccionario Qué es INFORMÁTICA?, Qué es

Aritmética de Enteros

Instituto Tecnológico de Celaya

Todo programa en 'C' consta de una o más funciones, una de las cuales se llama main.

Cálculo numérico. Aritmética en punto flotante.

Tema 2. Sistemas de representación de la información

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

TEMA 7: Ficheros. TEMA 7: Ficheros Concepto de fichero

PROGRAMACIÓN. UNIDAD II. ALGORITMO PROFA : HAU MOY

Apuntadores en C y C++

Programación 1 Tema 3. Información, datos, operaciones y expresiones

Curso de Programación en C. Licenciatura, FCQeI. APUNTADORES.

Programación estructurada (Introducción a lenguaje C)

LENGUAJE DE PROGRAMACION I. Ing. JAVIER ECHEGARAY ROJO Ing. WILDER ROMAN MUNIVE. Ing. Javier Echegaray Rojo / Ing. Wilder Román Munive Pag 1

INTRODUCCIóN A LA PROGRAMACIóN APUNTES DE JAVA APUNTES DE JAVA

DOCUMENTACIÓN PARA EL TRABAJO CON LA PLATAFORMA GUADALBOT

Operadores. Javier Fernández Rivera -

ESCUELA DE INFORMÁTICA

Se guardan en archivos con extencion c y los cabezales con extension h

TEMA II: SISTEMAS DE NUMERACIÓN

Estructura de Computadores

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas

Fundamentos de Programación Visual Basic

TEMA 1 Representación de la información

Examen escrito de Programación 1. Jueves 5 de febrero de Problema 1 o (3.5 puntos)

Sistema electrónico digital (binario) que procesa datos siguiendo unas instrucciones almacenadas en su memoria

MODBus RTU en los registradores CAMRegis

Solución: exp Febrero, primera semana. Paso 1º: Cálculo del campo exponente. Según el apartado a) del primer corolario: 53.

Definición y Conversión de datos. Agustín J. González ELO-329

Introducción a la Programación 11 O. Humberto Cervantes Maceda

Tema 2 Introducción a la Programación en C.

PROPIEDADES DE LOS CAMPOS. Cada campo de una tabla dispone de una serie de características que proporcionan un control

2.2 Nombres, Ligado y Ámbito

Centro Asociado Palma de Mallorca. Tutor: Antonio Rivero Cuesta

Descripción y Contenido del Curso. Programación C++ Capacity Academy.

#include <fstream.h> ifstream descriptor ( nombre.extensión ); ofstream descriptor ( nombre.extensión );

Caracteres y Cadenas Conversión de Datos Funciones y procedimientos Archivos cabecera. Fundamentos de programación

Práctica 5MODBUS: Bus Modbus

PRÁCTICA MANEJO INTERNO DE DATOS

Lección 1. Representación de números

Relación de prácticas de la asignatura METODOLOGÍA DE LA PROGRAMACIÓN Segundo Cuatrimestre Curso º Grado en Informática

Expresiones y sentencias

UNIDAD 1. COMPONENTES DEL COMPUTADOR

Entrada y salida de datos en C y C++

Manual de formación para soluciones generales en automatización Totally Integrated Automation (T I A ) MÓDULO B4. Bloques de Datos

Cursada Primer Semestre 2015 Guía de Trabajos Prácticos Nro. 2

Introducción al PLC Simatic Siemens S7-200.

VARIABLES ANÁLOGAS EN PROGRAMADORES NI4, y NO4I

Laboratorio de Arquitectura de Redes. Punteros en lenguaje C

Programación en Visual Basic Ricardo Rodríguez García

SISTEMAS DE NUMERACION

Tema 3. Electrónica Digital


1. Computadores y programación

Variables. Una variable no es más que un nombre simbólico que identifica una dirección de memoria: vs.

Guía número 1. Métodos numéricos. Universidad de san buenaventura de Cali

Representación de la Información

Objetivos de la práctica: - Practicar uso de ficheros: abrir, cerrar y tratamiento de información contenida en el fichero.

Representación en Punto Flotante

Sistemas Electrónicos Digitales

6.1.- Introducción a las estructuras de datos Tipos de datos Arrays unidimensionales: los vectores Operaciones con vectores.

ELO311 Estructuras de Computadores Digitales. Números

Práctica de laboratorio Uso de la Calculadora de Windows con direcciones de red

Representación de Datos. Representación de datos numéricos. Representación de datos caracteres. Representación de otros tipos de datos

El nivel ISA (II)! Conjunto de Instrucciones

Estructura del Computador

Variables. Profesor Leonardo Carámbula - Programación III EMT I.S.B.O.

Ficha de Aprendizaje N 13

Sistemas Numéricos y Códigos Binarios

Transcripción:

Especificación IEEE-754, para representar valores decimales en punto flotante de simple precisión. Ing. Cosme Rafael Marcano Gamero, MSc, DEA. cosmemarcano@gmail.com En este escrito se explica la especificación utilizada por la mayoría de los lenguajes de programación disponibles en el mercado para representación los así llamados números reales, en los dispositivos de almacenamiento, ya sea primario (RAM) o secundario (discos duros, etc.). La especificación IEEE-754 establece que los bits que ocupa un valor decimal, en formato de simple precisión, es la siguiente: Bit: bit de signo: = -, = + Bit-: 8 bits para el exponente, desplazado en 7. Bit-: bits para la mantisa normalizada. EJEMPLO. Tomemos como ejemplo a -. En primer lugar, la parte entera (sin signo) de -. es. Como no hay que mover la coma decimal, * exp onente 7 7 b Por último, como - es negativo, el bit de signo, es decir, el bit, será igual a. Entonces: B F 8 En vista de que los valores usualmente son almacenados terminando con el byte más significativo (lo cual es referido a veces como bigendian), entonces la representación de -, en formato IEEE-754 sería igual a BF8, y se colocaría en memoria o en archivos binarios como: 8BF, como se puede ver en la siguiente figura.

Figura. Representación en un archivo binario (reales.bin), de veintidós valores decimales en formato IEEE-754. En la Figura aparecen las representaciones de los siguientes valores decimales en formato IEEE-754: -, -.875, -.75, -.65, -.5, -.75, -.5, -.5,,.5,.5,.75,.5,.65,.75,.875,,.5,.5,.75,.7 y.45. Nótese que cada valor ocupa cuatro bytes, es decir, bits. Cada byte aparece representado en forma de dos dígitos hexadecimales. Así, por ejemplo, la representación de -., o sea, 8BF, corresponde a los cuatro primeros bytes a partir del inicio del archivo (posición ). EJEMPLO. Como otro ejemplo, hallemos la representación en formato IEEE-754 del penúltimo valor almacenado en este archivo, es decir,.7. En primer lugar, la parte entera de.7 es. Para normalizar este valor no hay que mover la coma decimal, entonces: * exp onente 7 7 b La conversión de la parte decimal (.7), viene a ser: Bit x i x * i,,,... acumulado *.5 *.5 * * 4.65.6875 5 *.6875

7 6 *.6875 * * 8.6955.699875 9 *.699875 *.699875 *.69977 *.699957 *.699957 4 *.699957 5 *.69998689 6 *.699996948 7 *.699996948 8 *.699996948 9 *.699998856 *.69999989 *.69999989 *.69999998 *.69999998 Parte decimal convertida:.69999998 Por último, como.7 es positivo, el bit de signo, es decir, el bit, será igual a. Entonces: F D 9 9 9 9 A Y se almacenará en el archivo con la siguiente apariencia: 9A 99 D9 F, como se muestra en la Figura. Nótese que en ambos ejemplos se omitió, de acuerdo a lo establecido en la especificación IEEE-754, la representación del., después de haberse normalizado la mantisa. Recuerde que cada bit de la representación de la parte decimal del valor que se desea convertir al formato IEEE-754, constituye un factor que multiplica a potencias negativas de dos. Esto es, si los bits de la parte decimal de.7 (que, en este caso es exactamente igual a la mantisa) son los siguientes:

Entonces, el equivalente decimal de esa representación será: 4 * * * *... * *.7 EJEMPLO. Por último, como un ejemplo de conversión de un valor cuya parte entera requiere más de un dígito binario, tomemos el.45, que es el último valor almacenado en el archivo reales.bin (ver Figura ). En este caso, la parte entera es igual a = b (7Bh). Para obtener la representación de la parte decimal, observamos que: Bit x i x * i,,,... acumulado *. *.5 *.75 * * 4 5.475.475 6 *.475 7 *.4455 8 *.449875 9 *.449875 * *.449875.44977 *.449957 *.449957 4 *.449957 5 *.44998689 6 *.4499899 7 *.4499899 Parte decimal convertida: =.4499899 Entonces:.45 =. Al normalizar, queda: 6.* exp onente 7 6 b Quitando el., y agregando la parte decimal, nos queda:

El bit de signo es, por ser.45 un valor positivo. 4 F 6 E 6 6 6 Finalmente, la representación de.45 en formato IEEE-754, que resultó ser igual a 4 F6 E6 66, es almacenado como 66 E6 F6 4, de acuerdo a lo mostrado en la Figura. COMENTARIOS SOBRE EL PROGRAMA QUE GENERÓ EL ARCHIO BIMARIO reales.bin Inclusión de la librería en donde se definen la clase de objeto #include <fstream> Definición de la estructura requerida para escribir y leer variables de tipo real (float) en/desde un archivo binario en C++: struct real { float valor; }; Declaración de un apuntador a la estructura requerida para escribir y leer variables de tipo real (float) en/desde un archivo binario en C++: real* preal = new real(); Declaración de una variable que contendrá el nombre del archivo binario en donde se almacenarán los valores reales: static const char *BINARIO = "reales.bin"; Apertura del archivo de escritura. Nóyese que se abrirá con el nombre salida. Con este nombre (manejador) se hará referencia al archivo físico reales.bin dentro del programa. Nótese también que se abre con los atributos ios_base::out para indicar que es un archivo de salida (sobre el cual se escribirán datos), ios_base::binary para indicar que los datos deben ser almacenados en formato binario, y el atributo ios_base::trunc, para indicar que los datos deben ser truncados (no redondeados) a la longitud exacta en bytes que ocupen. std::ofstream salida(binario, ios_base::out ios_base::binary ios_base::trunc); if (salida==null){ cout << "Error: no pude abrir Archivo de salida." << endl; return(-);

} Asignación del valor inicial de la variable real a ser escrita en el archivo binario. preal->valor=-.; for (int contador=; contador<; contador++){ // escribir el contenido de la variable en el archivo salida.write((const char*)preal, sizeof(real)); // mostrar en pantalla el mismo valor printf("\n%.7f", preal->valor); // incrementar en.5 el valor de la variable. Esto quiere decir que // el segundo valor a almacenar en el archivo será -.875, luego, - // -.75, etc. preal->valor+=.5; } preal->valor+=.; // aquí alcanza el valor de.7 printf("\n%.7f", preal->valor); salida.write((const char*)preal, sizeof(real)); // ejemplo con parte entera de más de un dígito binario preal->valor =.45; printf("\n%.7f", preal->valor); salida.write((const char*)preal, sizeof(real)); // cerrar archive explícitamente (aunque C++ cierra automáticamente los // archives que estén abiertos al finalizar la ejecución del programa). salida.close(); La lectura de variables reales desde un archivo binario se realiza de manera similar a la escritura y queda planteado como ejercicio. MOTA: Para poder utilizar printf("\n%.7f", preal->valor), se debe incluir el archivo de prototipos stdo.h el cual no es orioui de C++, sino de C estándar. Esta función, sin embargo, permite controlar a voluntad del programador (y las características del lenguaje de programación, por supuesto) el número de posiciones decimales que se quiere mostrar en pantalla. En este sentido, es más potente que la función std::cout de C++. Para una comparación más detallada entre printf()y std::cout se puede consultar el artículo Comentarios sobre printf()y std::cout m que está disponible en cosmemarcano.wordpress.com. COMENTARIO FINAL. Afortunadamente, la conversión de los números con decimales (también llamados números reales) es automática y transparente al programador en lenguaje de de alto nivel, como Fortran, Pascal y C. No obstante, a la hora de diseñar un prototipo de hardware que se desee conectar a una computadora u otro circuito digital estándar, es necesario respetar el formato utilizado para cada tipo de datos, de manera que se pueda compartir información entre tales dispositivos.