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

Número de decimales según tipo de dato

Estas en el tema de Número de decimales según tipo de dato en el foro de C/C++ en Foros del Web. Hola a todos. Quería saber cuántos decimales se pueden visualizar como máximo en C con un tipo de dato float, y con un double. Muchas ...
  #1 (permalink)  
Antiguo 02/07/2012, 12:22
Musiker
Invitado
 
Mensajes: n/a
Puntos:
Número de decimales según tipo de dato

Hola a todos.

Quería saber cuántos decimales se pueden visualizar como máximo en C con un tipo de dato float, y con un double.

Muchas gracias.
  #2 (permalink)  
Antiguo 02/07/2012, 16:15
 
Fecha de Ingreso: diciembre-2011
Ubicación: CABA
Mensajes: 433
Antigüedad: 12 años, 4 meses
Puntos: 94
Respuesta: Número de decimales según tipo de dato

float(32 bits): 3.4E-38 a 3.4E38

double(64 bits): 1.7E-308 a 1.7E308
  #3 (permalink)  
Antiguo 03/07/2012, 09:43
 
Fecha de Ingreso: junio-2010
Ubicación: Madrid
Mensajes: 620
Antigüedad: 13 años, 10 meses
Puntos: 73
Respuesta: Número de decimales según tipo de dato

Con un tipo float tienes 7-8 cifras significativas, y con un tipo double tienes 15-16 cifras significativas. A partir de aquí, si le pides que imprima más cifras, te imprimirá ceros.
  #4 (permalink)  
Antiguo 04/07/2012, 09:35
Musiker
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Número de decimales según tipo de dato

Cita:
Iniciado por Fw190 Ver Mensaje
Con un tipo float tienes 7-8 cifras significativas, y con un tipo double tienes 15-16 cifras significativas. A partir de aquí, si le pides que imprima más cifras, te imprimirá ceros.
Exacto!! A eso me refería yo. He observado eso y necesito tener muchos más de 15 o 16 decimales significativos. ¿¿Existe alguna forma de hacerlo sin que salgan ceros??
  #5 (permalink)  
Antiguo 04/07/2012, 10:40
 
Fecha de Ingreso: junio-2010
Ubicación: Madrid
Mensajes: 620
Antigüedad: 13 años, 10 meses
Puntos: 73
Respuesta: Número de decimales según tipo de dato

Para más dígitos tendríamos:

long double es el tipo con el que trabaja internamente la unidad de coma flotante. Son 80 bits (10 bytes), y te daría una precisión de unas 20 cifras significativas. Comprueba que dispones de el realmente, hay compiladores (creo que Visual C es uno de ellos) que te toma el tipo long double como sinónimo de double. Ojo, si compruebas el tamaño podría indicarte que ocupa 12 bytes (96 bits) ó 16 bytes (128 bits) por razones de direccionamiento de memoria, pero solamente te estaría usando los 80 bits.

El compilador GNU C, a partir de la versión 4.3 (creo) tiene un tipo (no estandar) __float128 (comienza con dos guiones bajos), de 128 bits (16 bytes). Con este tipo tendrías unas 34 cifras significativas.

Algunos compiladores disponen de un tipo qfloat de 384 bits (48 bytes) (no, no es un error). Con este tipo dispondrías de unas 100 cifras significativas. Por ejemplo, el compilador LCC-Win32. Es un compilador C (no C++, aunque tiene algunas características de C++), su IDE deja mucho que desear, pero es rápido y ocupa poca memoria.

Si utilizas alguno de estos tipos, ten en cuenta que podrían necesitar especificadores de formato especiales, o versiones especiales de las funciones scanf/printf/cin/cout (y familia) para entrada/salida de datos, consulta los manuales correspondientes.

También puedes utilizar alguna librería de precisión arbitraria, basta con rezar a San Google.
  #6 (permalink)  
Antiguo 04/07/2012, 10:46
Musiker
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Número de decimales según tipo de dato

Cita:
Iniciado por Fw190 Ver Mensaje
Para más dígitos tendríamos:

long double es el tipo con el que trabaja internamente la unidad de coma flotante. Son 80 bits (10 bytes), y te daría una precisión de unas 20 cifras significativas. Comprueba que dispones de el realmente, hay compiladores (creo que Visual C es uno de ellos) que te toma el tipo long double como sinónimo de double. Ojo, si compruebas el tamaño podría indicarte que ocupa 12 bytes (96 bits) ó 16 bytes (128 bits) por razones de direccionamiento de memoria, pero solamente te estaría usando los 80 bits.

El compilador GNU C, a partir de la versión 4.3 (creo) tiene un tipo (no estandar) __float128 (comienza con dos guiones bajos), de 128 bits (16 bytes). Con este tipo tendrías unas 34 cifras significativas.

Algunos compiladores disponen de un tipo qfloat de 384 bits (48 bytes) (no, no es un error). Con este tipo dispondrías de unas 100 cifras significativas. Por ejemplo, el compilador LCC-Win32. Es un compilador C (no C++, aunque tiene algunas características de C++), su IDE deja mucho que desear, pero es rápido y ocupa poca memoria.

Si utilizas alguno de estos tipos, ten en cuenta que podrían necesitar especificadores de formato especiales, o versiones especiales de las funciones scanf/printf/cin/cout (y familia) para entrada/salida de datos, consulta los manuales correspondientes.

También puedes utilizar alguna librería de precisión arbitraria, basta con rezar a San Google.
Muchísimas gracias, de verdad! :)

Etiquetas: dato, según, tipo
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 16:30.