Bienvenidos a un nuevo curso. Ahora estoy en el ciclo de grado superior: Desarrollo de aplicaciones multiplataforma. Y voy a ser parte del experimento de la formación dual. Estaré haciendo practicas durante un año, y a la vez finalizando la formación.

Deseadme suerte.

lunes, 6 de octubre de 2014

Tipo Real

0

Tipo real
Es un tipo escalar no enumerable, por lo que presenta algunas particularidades respecto a los anteriores tipos de datos.
Los enteros son infinitos, pero el número de elementos que hay entre dos enteros cualesquiera, es finito. Esto no ocurre con los reales. Entre dos reales cualesquiera hay siempre infinitos números reales.
El dominio de sus posibles valores es función de la forma de representación interna del tipo. En cualquier caso, sólo determinadas fracciones son representables.
Por tanto, no todos los reales del intervalo representable son representantes, y como consecuencia, al operar con números reales, no se obtienen, en el caso general, resultados exactos, sino aproximados.


Representación binaria de números con decimales

Sabemos pasar a binario un número entero. Sin más hay que dividir por 2 sucesivamente o descomponerlo en una suma de potencias de 2.
La parte decimal de un número funciona "igual" pero con potencias negativas.
Una forma de pasar a binario la parte decimal de un número consiste en multiplicar por 2, coger la parte entera, y a la nueva parte decimal aplicarle sucesivamente esto:
0.875 *2=1.75     1
0.75*2=1.5          1
0.5*2=10             1
Claro, no siempre podré representar con el número de decimales binarios que pretenda el número correspondiente con lo que perdería precisión:
0.876*2=1.752    1
0.752*2=1.504    1
0.504*2=1.008    1
0.008*2=0.016    0
0.016*2=0.032    0
0.032*2=0.064    0
...


Representación de reales en coma (o punto) fija(/o)

Consiste sin más en asignar un número de bits para la parte entera y otro número para la parte fraccionaria.
Por ejemplo: si destino 32 bits para el número real, 24 para la parte entera y 8 para los decimales.
Ventaja: La precisión es constante.
Inconveniente: Limito el tamaño del mayor real y el menor real que puedo representar y desperdicio la parte fraccionaria cuando no hay decimales o no es necesario llegar a usar todos.
Esta representación no es la que suelen usar los lenguajes de programación para la representación interna de los números reales.
Inconveniente que siempre tendremos al trabajar reales sea almacenada la representación: sólo unas pocas fracciones pueden ser almacenadas con exactitud. Truncaremos el número eliminando aquellos bits de la parte fraccionaria que no se pueden almacenar por falta de espacio, o, redondearemos , escriben no el número representable que más se aproxima al número a representar. Al trabajar con reales, o se suelen obtener resultados exactos sino aproximados.

Representación mantisa-exponente
Cualquier número real se puede representar en una notación del tipo mantista x B exponente.
Si fijo la base B y siempre empleo la misma, no tengo que almacenarla, con lo que solo es necesario almacenar la mantista y el exponente.
Como base B se suele emplear 2 o una potencia pequea de 2.
De esta manera, se podrá reresentar un intervalo más menos amplio de números reales, centrado alrededor del valor real 0.0.

Representación en coma flotante
Hay que guardar tres componentes:
Signo S es un número binario de un bit representando el signo (0==positivo, 1==negativo). Generalmente es el bit más significativo (de la izquierda).
Exponente C es un número binario representando la potencia de 2 por la que hay que multiplicar la mantista. Cuando mayor pueda ser este exponente, mayor sera le valor absoluto del mayor número que puede ser representado.
Mantista M es un número binario que representa las cifras significativas del número. Por supuesto, cuanto mayor sea la precisión deseada (más cifras significativas conocidas). Mayor debe ser el espacio destinado a contener esta parte.
En función de los bits que empleo, se suelen hacer los siguientes repartos:
- 32 bits: S1, E8, M23
- 64 bits: S1, E11, M52
- 80bits: S1, E15, M64

IEEE 754
El signo: 0=Positiva; 1=Negativo.
El exponente en el rango -126 a +127 es desplazado mediante la suma de 127 para obtener un valor en el rango 1 a 254 (0 y 255 tienen valores especiales). Cuando se interpreta el valor es punto flotante, el número es desplazado de nuevo para obtener el exponente real. Según lo que vale es exponente, significa distintas cosas.
- Ceros: E0 M0
- Números desnormalizados: E0 M distinto de 0
- Números normalizados: E1-254 M cualquiera
- Infinitos: E 255 M0
- NaN (Not a Number) E255 M distinto de 0
La mantista: Se ajusta con el exponente para que en binario empiece por "1" y se guarda el resto ( no ese uno).
Lo dicho es con 32 bits. Si son 64, el exponente es desplazado +1023.

Ejemplo
Codifiquemos el número decimal -118.625 usando el sistema de la IEEE 754.
El signo es "1"
El número pasado a binario es 1110110.101
Normalizado: 1110110.101=1.110110101-2 a la 6.
La mantista es la parte a la derecha del punto decimal, rellenada con ceros a la derecha hasta que obtengamos todos los 23 bits. Es decir 11011010100000000000000-
El exponente es 6, pero necesitamos convertirlo a binario y desplazarlo: 6 + 127 = 133.  En binario, esto se escribe como 10000101.
El resultado queda:
-1|10000101|11011010100000000000000

Tipo real: valores constantes
Los valores constantes de tipo real se escribirán en un algoritmo (representación externa) en notación arábiga, eventualmente precedidos por un signo '+' o '-', o en notación científica.
Ejemplos
_ 466.3
_-85645.456
_+856.07E-7

Tipo real: Operaciones
Dispone de las operaciones de relación de datos escalares, pero con excepciones:
- No dispone de funciones sucesor y predecesor ya que no se puede concretar cual es el siguiente número ni el anterior.
- El comparador de igualdad es muy peligroso usarlo en programas reales, ya que cualquier error de redondeo en los cálculos por pequeño que sea nos puede llevar a que dos datos reales no sean iguales.
Operaciones aritméticas binarias: +-*/
Funciones aritméticas de biblioteca:
- abs (x) valor absoluto
- sqr (x) elevar al cuadrado
- sqrt(x) raiz cuadrada
-sin(x) seno (en radianes)
- cos(x) coseno (en radiantes)
- arctan (x) arco tangente (resultado en radianes)
- in(x) logaritmo neperiano
- exp(x) exponencial (e')
- trunc (x)  truncar el real x devolviendo el mayor entero e tal que e>=x
Procedimientos de biblioteca para lectura y escritura de datos reales:
- leerReales (teclado, variableReal)
- escribirReal (pantalla, expresiónReal)


0 comentarios:

Publicar un comentario

Etiquetas actuales

BD (67) DEF (64) PROG (64) SQL (44) Java (29) PRACTICAS (20) php (18) DI (16) PRESTASHOP (16) PROGRAMACIÓN WEB (16) HTML (13) SGE (12) ERP (9) CONSULTAS (8) css (8) Linux (5) XML (5) Android (4) PDM (4) C (3) NetBeans (3) PSP (3) SMARTY (3) comandos (3) HOOK (2) POST (2) XSD (2) cURL (2) JS (1) MEDIA-QUERYS (1) PDO (1) RESPONSIVE (1) TPL (1) TRADUCCIÓN (1) app_inventor (1)

Todas las etiquetas

EJER (78) BD (67) DEF (64) PROG (64) SQL (44) c# (40) Programación (39) Ficheros (36) Java (29) bases de datos (21) PRACTICAS (20) lenguajes de marcas (19) AD (18) Entorno de desarrollo (18) php (18) PROCEDIMIENTOS (17) DI (16) FORM (16) PRESTASHOP (16) PROGRAMACIÓN WEB (16) lenguaje C (16) E/R (14) HTML (13) SGE (12) Sistemas informáticos (10) ERP (9) CONSULTAS (8) TRANSACCIONES (8) TRIGGER (8) VISUAL BASIC (8) css (8) FUNCIONES (7) html5 (6) Ada (5) EXAMEN (5) Linux (5) XML (5) estructuras (5) Android (4) DISEÑO (4) INTERFAZ (4) LOG (4) OpenBravo (4) PDM (4) ACTUALIZAR (3) C (3) DIAGRAMA (3) Directorios (3) NEW (3) NOR (3) NetBeans (3) OLD (3) PSP (3) SMARTY (3) comandos (3) css3 (3) AISLAMIENTOS (2) C++ (2) CONTROLERRORES (2) ELIMINAR (2) HOOK (2) INSERTAR (2) INST (2) MULTITABLA (2) POST (2) RECURSIVIDAD (2) SUBCONSULTAS (2) VISTAS (2) XSD (2) cURL (2) punteros (2) AJENA (1) BLOQUEOS (1) Byte (1) CREACION (1) CRM (1) Configuración (1) Controles (1) Datos (1) GOTFOCUS (1) IMAGENES (1) INDICES (1) JS (1) Lenght (1) MEDIA-QUERYS (1) Mingw (1) MonoDeveloped (1) OPTIMISTA (1) PDO (1) PESIMISTA (1) RESPONSIVE (1) SPEAK (1) Scanner (1) Serializacion (1) Streams (1) System (1) TPL (1) TRADUCCIÓN (1) USUARIOS (1) UseSystemPasswordChar (1) app_inventor (1) char (1) examenes (1) libreoffice (1) make (1) redes (1)