C: ¿Cuánto tiempo puede durar un doble cuando se imprime mediante printf ()

StackOverflow https://stackoverflow.com/questions/1012747

  •  06-07-2019
  •  | 
  •  

Pregunta

Necesito especificar la longitud exacta de una cadena para imprimir desde un valor doble, pero no quiero restringir el resultado más de lo necesario.

¿Cuál es la longitud máxima que tendrá un doble de precisión de 6 dígitos cuando se formatee con printf ()?

Específicamente, ¿qué valor debo darle a X en printf("%X.6lg",doubleValue); para asegurar que ningún valor se trunca?

La razón por la que necesito ser específico sobre la longitud es porque estoy definiendo un tipo de datos derivado de MPI compuesto por muchas representaciones de cadenas de valores dobles y debo conocer su longitud exacta para dividir regiones del archivo entre procesos MPI .

Espero que esté claro. Gracias de antemano por responder.

¿Fue útil?

Solución

use printf("%.6g", doubleValue) o printf("%.6Lg", doubleValue)

Tenga en cuenta que omitir los dígitos iniciales (" width ") en el especificador de precisión no exige la longitud de la parte integral del valor.

También tenga en cuenta que las minúsculas " l " especificará que su valor es un int largo. Las mayúsculas & Quot; L & Quot; especifica un valor doble largo. También tenga en cuenta que si no desea que esto se cambie potencialmente a notación científica (si es una representación más corta), entonces usaría " f quot; en lugar de " g " ;.

Vea un referencia de printf aquí .

Otros consejos

El máximo exponente de un IEEE doble es 1023, por lo que el doble más grande será 1 + 1/2 + 1/4 + 1/8 + ... etc * 2 ^ 1023. Que tendrá aproximadamente 318 caracteres de longitud, en notación decimal.

¿Por qué no usar " e " especificador de formato?

Hay < float.h > que contiene muchos valores útiles, entre ellos DECIMAL_DIG, que es para un largo doble sin embargo.

El mismo archivo probablemente le dirá que un doble en su plataforma tiene más de 6 dígitos de precisión ...

PD: También tenga en cuenta la respuesta de Demi arriba. Señala varios defectos en tu printf () que se me escaparon.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top