Foros del Web » Programación para mayores de 30 ;) » C/C++ »

¿Qué significa rango?

Estas en el tema de ¿Qué significa rango? en el foro de C/C++ en Foros del Web. Buenas! Estoy iniciándome en la programación en C, y cuando dicen que pro ejemplo el tipo de variable float tiene el rango de posibles valores ...
  #1 (permalink)  
Antiguo 15/05/2011, 05:56
jesusgox
Invitado
 
Mensajes: n/a
Puntos:
¿Qué significa rango?

Buenas!

Estoy iniciándome en la programación en C, y cuando dicen que pro ejemplo el tipo de variable float tiene el rango de posibles valores del 3,4E-38 al 3.4E38.¿Qué quiere decir?

Gracias!
  #2 (permalink)  
Antiguo 15/05/2011, 09:56
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: ¿Qué significa rango?

Quiere decir que una variable del tipo float no puede almacenar un numero mas chico que
3,4E-38 y mas grande que 3.4E38.

supongamos que el tipo x tiene rango -255 a 255. Si quisieramos asigar el numero 256 nos daria un error de overflow y se truncaria el numero a 255.
  #3 (permalink)  
Antiguo 15/05/2011, 11:07
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Desacuerdo Respuesta: ¿Qué significa rango?

Hola,

Cita:
Iniciado por sam90 Ver Mensaje
Quiere decir que una variable del tipo float no puede almacenar un numero mas chico que
3,4E-38 y mas grande que 3.4E38.

supongamos que el tipo x tiene rango -255 a 255. Si quisieramos asigar el numero 256 nos daria un error de overflow y se truncaria el numero a 255.
Exactamente, pero si X tuviera un rango de -255 a 255 y asignáramos el número 256 no daría ningún error (posiblemente un 'warning' nada más) y el número se almacenaría como 0 ó -255 posiblemente, dependiendo si fuera con signo o sin signo (signed). Eso si existiera el tipo de datos de -255 a 255 para lo cual se necesitan 2 bytes, y sucedería por la conversión binaria y la asignación de 2 bytes a 1 solo.

El hecho es que la conversión de (100000000 en binario) que usa 2 bytes y representa el 256 al intentar meterla en un solo byte que solamente puede representar 255 se queda como (0). Pero el ejemplo es bastante confuso, no existe el tipo de datos -255 a 255 porque usaría una pequeña parte de lo que necesita para su almacenamiento.

Saludos,

Última edición por HackmanC; 15/05/2011 a las 11:16 Razón: conversión
  #4 (permalink)  
Antiguo 15/05/2011, 12:08
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: ¿Qué significa rango?

Casualmente era un caso hipotetico, para dar un ejemplo sobre la situacion. Porque a lo mejor los numero escritos en notacion cientifica lo estan cofundiendo.
  #5 (permalink)  
Antiguo 15/05/2011, 12:52
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: ¿Qué significa rango?

Hola,

Cita:
Iniciado por sam90 Ver Mensaje
Casualmente era un caso hipotetico, para dar un ejemplo sobre la situacion. Porque a lo mejor los numero escritos en notacion cientifica lo estan cofundiendo.
Pero es algo muy confuso aún así, puesto que al almacenar 256 en un rango de 255, según lo que escribes es que va a almacenar el número máximo es decir el 255, pero como bien sabes el procesador del ordenador no funciona de esa forma.

Y sí está bien aclarar las dudas, pero no induciendo un mal concepto adicional, posiblemente interpretará que si guarda el número 65,536 en un 'unsigned short' va a obtener 65,535 que es su valor máximo, cuando en realidad va a obtener un 0 por el overflow.

Cita:
Iniciado por jesusgox Ver Mensaje
... Estoy iniciándome en la programación en C, y cuando dicen que pro ejemplo el tipo de variable float tiene el rango de posibles valores del 3,4E-38 al 3.4E38.¿Qué quiere decir?
...
Adicionalmente a lo que explicaba sam90, tienes que tener en cuenta que se van a almacenar números de 3.4e-38 hasta 3.4e+38. Pero solamente con una precisión de 6 o 7 digitos, es decir, los primeros 6 o 7 dígitos son importantes, lo demás no va a ser exacto.

Por ejemplo, el número 100000.0 lo va a almacenar correctamente, mientras que 100000000.01 va a perder precisión y posiblemente se va a almacenar como 1.0e+8, si tienes problemas con la interpretación de números en notación científica entonces busca información sobre eso específicamente.

Saludos,

Última edición por HackmanC; 15/05/2011 a las 13:06 Razón: edit
  #6 (permalink)  
Antiguo 15/05/2011, 16:22
jesusgox
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: ¿Qué significa rango?

Muchas gracias!
Me habéis ayudado un montón, entonces y en definitiva, lo que quiere decir esque si yo a la variable en decimal float x=256.6 no valdría con float, sin embargo si en un programa le asigno la variable float con el número 254.4 sí me lo va a mostrar y almacenar correctamente en memoria ¿No?
Por último, lo que no he entendido es eso que llegue hasta 3.4e38, Pues no estabamos hablando de que puede llegar a 255? Porque 3.4^38 = 1.57108198 × 1020

No me cuadra, creo que no entiendo eso bien... :S

Gracias Hackman y Sam =)
  #7 (permalink)  
Antiguo 15/05/2011, 18:22
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: ¿Qué significa rango?

Hola,

Cita:
Iniciado por jesusgox Ver Mensaje
... Me habéis ayudado un montón, entonces y en definitiva, lo que quiere decir esque si yo a la variable en decimal float x=256.6 no valdría con float, sin embargo si en un programa le asigno la variable float con el número 254.4 sí me lo va a mostrar y almacenar correctamente en memoria ¿No?
Por último, lo que no he entendido es eso que llegue hasta 3.4e38, Pues no estabamos hablando de que puede llegar a 255? Porque 3.4^38 = 1.57108198 × 1020 ...
Nop, creo que posiblemente te estamos confundiendo más por que hay conceptos fundamentales que si no los comprendes bien desde el inicio después te va a ser mucho mas difícil comprenderlos, así sam90 puso del ejemplo de 256 pero yo lo compliqué bastante más, puesto que si y solo si llegara a suceder que intentas guardar un número fuera del rango suceden cosas inesperadas bastante difíciles de comprender.

Primero que todo las variables float tienen un rango positivo de 3.4e38 que no es lo mismo que 3.4^38. La notación científica significa que tienes que multiplicar el número por 10^n donde n es el exponente. http://es.wikipedia.org/wiki/Notaci%...ient%C3%ADfica

Osea que el rango de las variables float es:

-3400000000000000000000...(hasta juntar 38 ceros)
hasta
+340000000000000000000....(hasta juntar 38 ceros)

Pero se guardan de una manera muy especial, así que solamente se expresan los primeros 6 o 7 digitos y seguidamente de cuantos ceros lleva antes o después.

Por ejemplo, si pones 8900000000001 en un float solamente va a guardar 8.9e12 puesto que lleva 89 y varios ceros más (creo que once o algo así), el último 1 se pierde porque no se pueden guardar más de 6 o 7 dígitos importantes, eso es para ahorrar espacio dentro de la computadora y por eso se dice que los float y doubles pierden precisión.

Saludos,

ps:

El verdadero rango de los float depende del compilador que estés usando. En los cálculos de la cantidad de ceros me pude haber equivocado en algunos lugares.

Última edición por HackmanC; 15/05/2011 a las 18:39 Razón: edit

Etiquetas: rango
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 19:43.