¿Cómo imprimir el contenido exacto de un número de punto flotante de doble precisión?
Tengo un double x
, resultado de un cálculo, para el cual x > 1.0
retorna true
. Quiero poder imprimir la representación exacta en notación científica de ese número sin dígitos basura. Sé que tiene 64 bits
, por lo tanto, me gustaría ver el número exacto que representa.
Tengo problemas porque, por ejemplo, si y = 1.01
e imprimo printf("%.20lf", y)
obtengo 1.01000000000000000888
, lo cual tiene dígitos basura al final.
Estoy bien con cualquier notación (científica o cualquier otra) siempre y cuando pueda leer el double exacto que representa x
o y
.
Esto podría ser trivial, pero no puedo encontrar ninguna solución. Gracias por las sugerencias.
davy.ai
Solución:
Para imprimir la representación exacta de
double x
sin ningún dígito de basura, podemos utilizar la funciónstd::cout
junto con la funciónstd::setprecision()
de la biblioteca<iomanip>
. Aquí hay un ejemplo de fragmento de código:“`c++ // para cout // para setprecision
#include
#include
int main() {
double x = 1.010;
std::cout << std::setprecision(17) << x << std::endl;
return 0;
}
1.0100000000000002
“`
Tenga en cuenta que esta salida puede no coincidir con nuestro valor
double
originalx
, pero es la representación exacta deldouble
quex
representa en la memoria.Podemos modificar la precisión según sea necesario para mostrar el número deseado de dígitos.