AnteriorPosterior

2.2. Tipo de datos real

  Curso: Fundamentos de programación en C, por Nacho Cabanes

2.2. Tipo de datos real

Cuando queremos almacenar datos con decimales, no nos sirve el tipo de datos “int”. Necesitamos otro tipo de datos que sí esté preparado para guardar números “reales” (con decimales). En el mundo de la informática hay dos formas de trabajar con números reales:

> Coma fija: el número máximo de cifras decimales está fijado de antemano, y el número de cifras enteras también. Por ejemplo, con un formato de 3 cifras enteras y 4 cifras decimales, el número 3,75 se almacenaría correctamente, el número 970,4361 también, pero el 5,678642 se guardaría como 5,6786 (se perdería a partir de la cuarta cifra decimal) y el 1010 no se podría guardar (tiene más de 3 cifras enteras).

> Coma flotante: el número de decimales y de cifras enteras permitido es variable, lo que importa es el número de cifras significativas (a partir del último 0). Por ejemplo, con 5 cifras significativas se podrían almacenar números como el 13405000000 o como el 0,0000007349 pero no se guardaría correctamente el 12,0000034, que se redondearía a un número cercano.

2.2.1. Simple y doble precisión

Tenemos dos tamaños para elegir, según si queremos guardar números con mayor cantidad de cifras o con menos. Para números con pocas cifras significativas (un máximo de 6) existe el tipo “float” y para números que necesiten más precisión (unas 10) tenemos el tipo “double”:

float

double

Tamaño en bits

32

64

Valor máximo

-3,4·10 -38

-1,7·10 -308

Valor mínimo

3,4·10 38

1,7·10 308

Cifras significativas

6 o más

10 o más

 

En algunos sistemas existe un tipo “long double”, con mayor precisión todavía (40 bits o incluso 128 bits).

Para definirlos, se hace igual que en el caso de los números enteros:

float x;

o bien, si queremos dar un valor inicial en el momento de definirlos (recordando que para las cifras decimales no debemos usar una coma, sino un punto):

float x = 12.56;

2.2.2. Mostrar en pantalla números reales

En principio es sencillo: usaremos “printf”, al que le indicaremos “%f” como código de formato:

printf("El valor de x es %f", x); /* Escribiría 12.5600 */

Pero también podemos detallar la anchura, indicando el número de cifras totales y el número de cifras decimales, separadas por un punto:

printf("El valor de x es %5.2f", x); /* Escribiría 12.56 */

Si indicamos una anchura mayor que la necesaria, se rellena con espacios al principio (queda alineado a la derecha)

printf("El valor de x es %7.2f", x); /* Escribiría “ 12.56” */

Si quisiéramos que quede alineado a la izquierda (con los espacios de sobra al final), debemos escribir la anchura como un número negativo

printf("El valor de x es %-7.2f", x); /* Escribiría “12.56 ” */

Si indicamos menos decimales que los necesarios, se redondeará el número

printf("El valor de x es %4.1f", x); /* Escribiría 12.6 */

Y si indicamos menos cifras enteras que las necesarias, no se nos hará caso y el número se escribirá con la cantidad de cifras que sea necesario usar

printf("El valor de x es %1.0f", x); /* Escribiría 13 */

Vamos a juntar todo esto en un ejemplo:

/*---------------------------*/
/*  Ejemplo en C nº 9:       */
/*  c009.c                   */
/*                           */
/*  Numeros en coma flotante */
/*                           */
/*  Curso de C,              */
/*    Nacho Cabanes          */
/*---------------------------*/
 
#include <stdio.h>
 
int main() {
  float x = 12.56;
 
  printf("El valor de x es %f", x);
  printf(" pero lo podemos escribir con 2 decimales %5.2f", x);
  printf(" o solo con uno %5.1f", x);
  printf(" o con 7 cifras %7.1f", x);
  printf(" o alineado a la izquierda %-7.1f", x);
  printf(quot; o sin decimales %2.0f", x);
  printf(" o solo con una cifra %1.0f", x);
 
  return 0;
}
 

El resultado sería

El valor de f es 12.560000 pero lo podemos escribir con 2 decimales 12.56 o solo
con uno 12.6 o con 7 cifras 12.6 o alineado a la izquierda 12.6 o sin
decimales 13 o solo con una cifra 13

Si queremos que sea el usuario el que introduzca los valores, usaremos "%f" como código de formato en "scanf":

scanf("%f", &x);

Ejercicios propuestos:

  • El usuario de nuestro programa podrá teclear dos números de hasta 8 cifras significativas. El programa deberá mostrar el resultado de dividir el primer número entre el segundo, utilizando tres cifras decimales.
  • Crear un programa que use tres variables x,y,z. Las tres serán números reales, y nos bastará con dos cifras decimales. Deberá pedir al usuario los valores para las tres variables y mostrar en pantalla cual es el mayor de los tres números tecleados.

Actualizado el: 23-07-2014 15:07

AnteriorPosterior