Foros del Web » Programación para mayores de 30 ;) » Programación General »

Límites numéricos en C

Estas en el tema de Límites numéricos en C en el foro de Programación General en Foros del Web. :séveR led onieR le edsed sodulaS Estoy haciendo (ó ya hice) un programa en C que tiene un ciclo infinito con operaciones numéricas... mi pregunta ...
  #1 (permalink)  
Antiguo 20/04/2005, 06:06
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 9 meses
Puntos: 102
Límites numéricos en C

:séveR led onieR le edsed sodulaS

Estoy haciendo (ó ya hice) un programa en C que tiene un ciclo infinito con operaciones numéricas... mi pregunta es ¿cuál es el límite MAXIMO que puedo manejar con valores numéricos?...

Ahora lo tengo declarada una variable long y para imprimirla ocupo printf("%lg", variable)... Creo que una variable de mayor capacidad es double long... pero no sé si tenga problemas al imprimirla...

La verdad es que he llegado a lo que tengo ahora por el método de prueba y error... así que pregunto aquí para llegar a la conclusión definitiva. ... cabe decir que hasta ahora he llegado ha 22X XXX (docientos veintitantos mil)... y no habia "quebrado" (cuál es el término correcto?) mi programa... mejor acabé por cerrarlo.. .

Saludos y gracias de antemano
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #2 (permalink)  
Antiguo 20/04/2005, 06:36
 
Fecha de Ingreso: diciembre-2002
Mensajes: 23
Antigüedad: 21 años, 5 meses
Puntos: 0
Los valores limites que puedes utilizar dependen del compilador que estes utilizando y estan definidos en los archivos de inclusion (o headers) limits.h y float.h.

Un saludo
  #3 (permalink)  
Antiguo 20/04/2005, 06:53
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Si estas con VC++:
http://msdn.microsoft.com/library/de...reftable_1.asp
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #4 (permalink)  
Antiguo 20/04/2005, 07:37
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años, 1 mes
Puntos: 17
Depende del compilador, sobre todo sobre cuántos bits usa.

Para un procesador de 32 bits, suelen ser éstos valores:
char 1 byte -> Byte - 0 hasta 255 (unsigned)
short* 2 bytes -> Word - 0 hasta 65525 (unsigned)
long* 4 bytes -> DWord - 0 hasta 4294967295 (unsigned)

* int "a secas" peude referirse a "long" o "short", pueda variar. Con la mayoría se refiere a long.

Consulta la información de tu compilador, aunque suele ser como te he dicho. "long" suele ser suficiente para contadores. Para saberlo, 255^x-1, siendo x los bytes, o 2^(x*8) bytes, o 2^x bits.

Otra manera para saber cuánto admite el compilador es usar sizeof:


Código:
printf
(
"char\t\t= %i bytes\n"
"short\t\t= %i bytes\n"
"long\t\t= %i bytes\n\n"
"Coma flotante:\n"
"float\t\t= %i bytes\n"
"double\t\t= %i bytes\n"
,sizeof(char)
,sizeof(short)
,sizeof(long)
,sizeof(float)
,sizeof(double)
);
También existen otros más especiales, de compiladores, pero no son estándar. Como el "long double", "long long", __int64, __...

8 bytes -> QWord - 0 hasta 18446744073709551615 (unsigned)

En en el enalce de Eternal Idol encuentras los de VC++, pero cada compilador tiene su propia especificación.


PD: "Localización: séveR led onieR lE", ¿no sería "Localización: sèveR led onieR lE"?

Última edición por MaxExtreme; 20/04/2005 a las 07:51
  #5 (permalink)  
Antiguo 22/04/2005, 02:25
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 9 meses
Puntos: 102
así que cada compilador determinará los límites... me lo suponia...
Cita:
Iniciado por MaxExtreme
Para un procesador de 32 bits, suelen ser éstos valores:
char 1 byte -> Byte - 0 hasta 255 (unsigned)
short* 2 bytes -> Word - 0 hasta 65525 (unsigned)
long* 4 bytes -> DWord - 0 hasta 4294967295 (unsigned)
Uso TurboC-v3.v (Borland C?). He encontrado los typos de variables en su ayuda:

así que supongo en mi caso podré definir a mi variable como long double... No podré hacer más ¿verdad?.. como por ejemplo ponerle un unsigned... solo puedo atenerme estrictamente a esa tabla ¿cierto?... ahora ¿para imprimirlo sigo ocupando %lg?
Cita:
* int "a secas" peude referirse a "long" o "short", pueda variar. Con la mayoría se refiere a long.
Disculpa pero... WHAT? ¿cómo que "int a secas"?... perdona mi ignorancia pero la verdad no entendí ni papa.
Cita:
8 bytes -> QWord - 0 hasta 18446744073709551615 (unsigned)
De verdad disculpame... pero qué es ese Qword y el Word que manejaste también en palabras anteriores???
Cita:
PD: "Localización: séveR led onieR lE", ¿no sería "Localización: sèveR led onieR lE"?
¿De qué hablas?? ... jejeje, tienes razón... Gracias por el aviso .

Saludos y gracias a todos... de verdad.
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #6 (permalink)  
Antiguo 22/04/2005, 06:08
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años, 1 mes
Puntos: 17
1 Byte = 8 bits
2 Bytes = 1 Word
4 Bytes = 2 Word = 1 DoubleWord (ó DWord abreviado)
8 Bytes = 4 Word = 2 DWord = 1 QuadWord (ó QWord abreviado)

Sobre lo del int.

short = short int
long = long int

Son acortaciones. Por eso, int "sin nada más" puede referirse al long o al short. Depende del compilador. En VC++ (32bits) se refiere al long (32 bits). En TurboC antiguo (16 bits) se refiere al short (16 bits). ¿Por qué? Por los bits del sistema en ese momento de su creación. Si tu procesador es de 32 bits (el sistema se supone que también), se usará un "int" normalmente de 32. Si es de 16 (como MSDOS, y por tanto Turbo C), se usará de 16.

Consejo: Usa un compilador nuevo: VC++6, Borland(hay gente que le gusta y es comercial, por eso le pongo 2º), DevCpp (basado en *nix), Cygwin (basado en *nix), DJGPP. Son las opciones más recomendables. La mejor a mi juicio la primera y de ahí para abajo.

Otro consejo: Si tu variable va a ser para un contador (o sea, entera o positiva, sin coma flotante), usa un tipo de no coma flotante, como long int o similar, pero no long double.
  #7 (permalink)  
Antiguo 22/04/2005, 06:21
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 9 meses
Puntos: 102
... osease un Word no es más que una unidad más! ... ya!... anotado.

Ya!, mil gracias por todo.. me queda más tranquilo... ... nada más comentar que si uso TC es porque me cabe en un Dissketito y lo puedo andar cargando cómodamente... y así poder hacer cosas en PC's que no son mias... .

De verdad muchas gracias... nos veremos pronto
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #8 (permalink)  
Antiguo 22/04/2005, 06:39
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años, 1 mes
Puntos: 17
Cita:
Iniciado por jam1138
... osease un Word no es más que una unidad más! ... ya!... anotado.

Ya!, mil gracias por todo.. me queda más tranquilo... ... nada más comentar que si uso TC es porque me cabe en un Dissketito y lo puedo andar cargando cómodamente... y así poder hacer cosas en PC's que no son mias... .

De verdad muchas gracias... nos veremos pronto
Cuando pases a hacer otro tipo de cosas un disketito no te va a ser suficiente...
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:27.