C - Tipos de datos - Flotantes - Adquirir rango de valores para flotantes

Iniciado por JPS, 28 Abril 2018, 04:41 AM

0 Miembros y 1 Visitante están viendo este tema.

JPS

Pues, he creado el siguiente código con la biblioteca limits.h; pero esta no tiene macros para saber el valor MAX y MIN de los tipos flotantes. ¿Alguien sabe de alguna otra biblioteca que me diese macros para terminar este sencillo programa?

Y segunda pregunta: ¿alguien sabe si compilo la línea 10 y 11 porque me sale un error en el DEVC++? No lo entiendo.


#include <stdio.h>
#include <limits.h>

int main()
{

printf("Numero de bits que tiene un tipo CHAR = %i\n\n", CHAR_BIT);
/*
No funcionan ¿Por qué?
printf("Numero de bits que tiene un tipo INT = %i\n\n", WORD_BIT);
printf("Numero de bits que tiene un tipo LONG = %i\n\n", LONG_BIT);
*/
//-------------------------------------------------------------------------------------

printf("El valor minimo de CHAR = %i\n", CHAR_MIN);
printf("El valor maximo de CHAR = %i\n\n", CHAR_MAX);

printf("El valor minimo de SIGNED CHAR = %i\n", SCHAR_MIN);
printf("El valor maximo de SIGNED CHAR = %i\n\n", SCHAR_MAX);
   
printf("El valor minimo de UNSIGNED CHAR = 0\n");
printf("El valor maximo de UNSIGNED CHAR = %u\n\n", UCHAR_MAX);

//-------------------------------------------------------------------------------------
   
printf("El valor minimo de SHORT INT = %i\n", SHRT_MIN);
printf("El valor maximo de SHORT INT = %i\n\n", SHRT_MAX);

printf("El valor minimo de UNSIGNED SHORT INT = 0\n");
printf("El valor maximo de UNSIGNED SHORT INT = %u\n\n", USHRT_MAX);

printf("El valor minimo de INT = %i\n", INT_MIN);
printf("El valor maximo de INT = %i\n\n", INT_MAX);

printf("El valor minimo de UNSIGNED INT = 0\n");
printf("El valor maximo de UNSIGNED INT = %u\n\n", UINT_MAX);

//-------------------------------------------------------------------------------------

printf("El valor minimo de LONG = %li\n", LONG_MIN);
printf("El valor maximo de LONG = %li\n\n", LONG_MAX);

printf("El valor minimo de UNSIGNED LONG = 0\n");
printf("El valor maximo de UNSIGNED LONG = %lu\n\n", ULONG_MAX);
   
    printf("El valor minimo de LONG LONG = %lli\n", LLONG_MIN);
printf("El valor maximo de LONG LONG = %lli\n\n", LLONG_MAX);

printf("El valor minimo de UNSIGNED LONG LONG = 0\n");
printf("El valor maximo de UNSIGNED LONG LONG = %llu\n\n", ULLONG_MAX);

//-------------------------------------------------------------------------------------

// Faltan los rangos de valores para los float, double y long double, además de sus formateadores.
 
   return(0);
}



/*
Estos Valores y formateadores los he ido recopilando y testeando, algunos no me han funcionado como el %Li.

Valores de tipos de datos según compilador y sistema operativo (16, 32 o 64bits).
================================================================================

signed char -> tipo caracter con signo -> %c | Tamaño = 1byte | Rango = -128...127 |
char -> tipo caracter con signo -> %c | Tamaño = 1byte | Rango = -128...127 | Ejemplo: char a='e';
unsigned char -> tipo caracter sin signo -> %c | Tamaño = 1byte | Rango = 0...255 |

short -> tipo entero corto con signo -> %i | Tamaño = 2bytes | Rango = -32768...32767 | Ejemplo: short b=-15;
int -> tipo entero normal con signo -> %i | Tamaño = 2bytes | Rango = -32768...32767 | Ejemplo: int c=1024;
unsigned int -> tipo entero normal sin signo -> %u | Tamaño = 2bytes | Rango = 0...65535 | Ejemplo: unsigned int d=50456;
signed int -> tipo entero normal con signo -> %i | Tamaño = 2bytes | Rango = -32768...32767 |
short int -> tipo entero corto con signo -> %i | Tamaño = 2bytes | Rango = -32768...32767 |
unsigned short int -> tipo entero corto sin signo -> %u | Tamaño = 2bytes | Rango = 0...65535 |
signed short int -> tipo entero corto con signo -> %i | Tamaño = 2bytes | Rango = -32768...32767 |

long int -> tipo entero largo con signo -> %li | Tamaño = 4bytes | Rango = -2147483648...2147483637 |
signed long int -> tipo entero largo con signo -> %li | Tamaño = 4bytes | Rango = -2147483648...2147483637 |
unsigned long int -> tipo entero largo sin signo -> %li | Tamaño = 4bytes | Rango = 0...4294967295 |
long -> tipo entero largo con signo -> %li | Tamaño = 4bytes | Rango = -2147483648...2147483637 | Ejemplo: long e=123456;
unsigned long -> tipo entero largo sin signo -> %li | Tamaño = 4bytes | Rango = 0...4294967295 |

float -> tipo real normal -> %f | Tamaño = 4bytes | Rango = 3.4*E-38...3.4*E38 | Ejemplo: float a=15.678;
double -> tipo real largo -> %lf | Tamaño = 8bytes | Rango = 1.7*E-308...1.7*E308 | Ejemplo: float a=15.678;
long double -> tipo real muy largo -> %Lf | Tamaño = 8bytes o 10bytes | Rango = 1.7*E-308...1.7*E308 o 3.4*E-4932...3.4*E4932 | Ejemplo: float a=15.678;

¿Cómo saturar el valor de las variables?


Formateadores (Wikipedia: https://es.wikipedia.org/wiki/Printf)
===============================================================
%d ó %i entero en base 10 con signo (int)
%u entero en base 10 sin signo (int)
%o entero en base 8 sin signo (int)
%x entero en base 16, letras en minúscula (int)
%X entero en base 16, letras en mayúscula (int)
%li ó %ld ?
%lu
%lli
%llu
%Li ?
%f Coma flotante decimal de precisión simple (float)
%lf Coma flotante decimal de precisión doble (double)
%e La notación científica (mantisa / exponente), minúsculas (decimal precisión simple ó doble)
%E La notación científica (mantisa / exponente), mayúsculas (decimal precisión simple ó doble)
%c caracter (char)
%s cadena de caracteres (string)



%07i justificado a la derecha, 7 dígitos de largo, sin relleno
%.7i largo mínimo de 7 dígitos, justificado a la derecha, rellena con ceros
%8.2f tamaño total de 8 dígitos, con dos decimales
%.*f"',x,d) tamaño predeterminado,x numeros decimales
%*.*f",x,y,d) tamaño igual a x, y numeros decimales
%s cadena terminada en null
%5s primeros cinco caracteres o delimitador
%.5s primeros cinco caracteres, sin tener en cuenta el delimitador
%20.5s primeros cinco caracteres, justificados a la derecha, con 20 caracteres de largo
%-20.5s primeros cinco caracteres, justificados a la izquierda, con 20 caracteres de largo

*/


engel lex

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

JPS