elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  limits.h
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: limits.h  (Leído 3,658 veces)
Treppe

Desconectado Desconectado

Mensajes: 15


Ver Perfil
limits.h
« en: 2 Agosto 2011, 15:01 pm »

Hola, tengo un problema que no se porqué pasa, yo creo que es el compilador, pero como yo no se mucho prefiero consultarlo con alguien que sepa.

Bueno, he estado siguiendo un libro de programación en C, y he escrito un programa para que me diga simplemente la amplitud de los valores a la que pueden llegar las diferentes variables.
/*buscando los límites*/
#include<stdio.h>
#include<limits.h>
#include<float.h>

int main(void)
{
    printf("Las variables de tipo char guardan valores entre %d y %d.",
                                                       CHAR_MIN, CHAR_MAX);
   
    printf("\nLas variables de tipo unsigned char guardan valores entre 0 y %u."
                                                       , UCHAR_MAX);
   
    printf("\nLas variables de tipo short guardan valores entre %d y %d.",
                                                          SHRT_MIN, SHRT_MAX);
   
    printf("\nLas variables de tipo unsigned short guarda valores entre 0 y %u."
                                                        , USHRT_MAX);
   
    printf("\nLas variables de tipo int guardan valores entre %d y %d.",
                                                        INT_MIN, INT_MAX);
   
    printf("\nLas variables de tipo unsigned int guardan valores entre 0 y %u.",
                                                         UINT_MAX);
   
    printf("\nLas variables de tipo long guardan valores entre %ld y %ld.",
                                                         LONG_MIN, LONG_MAX);
   
    printf("\nLas variables de tipo unsinged long guardan valores entre"
                                             "0 y %ld.", ULONG_MAX);
   
    printf("\nLas variables de tipo long long guardan valores "
                               "entre %lld y %lld.", LLONG_MIN, LLONG_MAX);
   
    printf("\nLas variables de tipo unsigned long long guardan valores entre "
                                             "0 y %llu.", ULLONG_MAX);
   
    printf("\nEl tamaño del valor más pequeño de tipo float es"
                                                     " %.3e.", FLT_MIN);
   
    printf("\nEl tamaño del valor más grande de tipo float es %.3e", FLT_MAX);
   
    printf("\nEl tamaño del valor más pequeño de tipo double es"
                                                     " %.3e.", DBL_MIN);
   
    printf("\nEl tamaño del valor más grande de tipo double es %.3e.", DBL_MAX);
   
    printf("\nEl tamaño del valor más pequeño de tipo long "
                                              "double \nes %.3Le.", LDBL_MIN);
   
    printf("\nEl tamaño del valor más grande de tipo long double es %.3Le."
                                                          , LDBL_MAX);
   
    printf("\nLas variables de tipo float tienen %u decimales de precisión."
                                                          , FLT_DIG);
   
    printf("\nLas variables de tipo double tienen %u decimales de precisión."
                                                          , DBL_DIG);
   
    printf("\nLas variables de tipo long double tienen %u decimales de "
                                                "precisión.", LDBL_DIG);
    return 0;
}         
                                         
Es como está en el libro, pero el valor de la variable "long long", a la hora de ejecutar el programa,  no corresponde con la uqe sale en el libro, sino con la variable "long" y "int. Y luego tambien, la variable "long double" me da un número que parece ser producto de un error "0.000e+000" para el valor más pequeño, y "-1.#Q0E+000". Gracias de antelación por la ayuda ^^


En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: limits.h
« Respuesta #1 en: 3 Agosto 2011, 01:54 am »

Hola, tengo un problema que no se porqué pasa, yo creo que es el compilador
En ese caso nos ayudarías como no tienes idea si nos indicas cual estas utilizando.

El único problema en potencia con el programa son los tipos "long long" y "unsigned long long" ya que estos fueron introducidos con el estándar C99. Debes revisar la documentación de tu compilador para saber si soporta esos tipos y que este configurado correctamente.

También debes utilizar "%lu" para imprimir la macro "ULONG_MAX".

Es como está en el libro, pero el valor de la variable "long long", a la hora de ejecutar el programa,  no corresponde con la uqe sale en el libro
Por esa razón se utilizan esas macros: los valores que se indican en un libro son los mínimos garantizados, los valores exactos dependen de la implementación.

Un saludo


En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: limits.h
« Respuesta #2 en: 4 Agosto 2011, 06:45 am »

.
los limites dependen de la arquitectura dela computadora, ya que no es lo mismo un int en x32 que en una de x64

Dulces Lunas!¡.
En línea

The Dark Shadow is my passion.
rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: limits.h
« Respuesta #3 en: 5 Agosto 2011, 03:27 am »

Una forma de acortar el programa es mediante una macro utilizando el operador '#' (para delimitar el argumento, en otras palabras convertirlo en cadena literal):
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #include <limits.h>
  5. #include <float.h>
  6.  
  7. #define IMPRIMIR(macro, fmt)  printf(#macro ": " fmt "\n", macro)
  8.  
  9. int main (void)
  10. {
  11.   IMPRIMIR(INT_MIN, "% d");
  12.   IMPRIMIR(INT_MAX, "% d");
  13.   putchar('\n');
  14.  
  15.   IMPRIMIR(LONG_MIN, "% ld");
  16.   IMPRIMIR(LONG_MAX, "% ld");
  17.   putchar('\n');
  18.  
  19.   IMPRIMIR(FLT_MIN, "%e");
  20.   IMPRIMIR(FLT_MAX, "%e");
  21.   putchar('\n');
  22.  
  23.   /* ... */
  24.  
  25.   return EXIT_SUCCESS;
  26. }

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Treppe

Desconectado Desconectado

Mensajes: 15


Ver Perfil
Re: limits.h
« Respuesta #4 en: 8 Agosto 2011, 19:36 pm »

Muchas gracias ^^
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Calcular el rango en byte de un determinado objeto sin utilizar <limits.h> [C]
Programación C/C++
NOB2014 7 2,577 Último mensaje 22 Octubre 2016, 23:11 pm
por engel lex
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines