Sólo 2 dígitos de exponente en ofstream científica
-
12-09-2019 - |
Pregunta
Así que de acuerdo a cplusplus.com cuando se establece el indicador de formato de un flujo de salida a través de la notación científica
of.setf(ios::scientific)
debería ver 3 dígitos más y un signo en el exponente. Sin embargo, sólo me parece que conseguir 2 en mi salida. ¿Algunas ideas? Compilado en Mac OS usando GCC 4.0.1.
Aquí está el código real que estoy utilizando:
of.setf(ios::scientific);
of.precision(6);
for (int i=0;i<dims[0];++i) {
for (int j=0;j<dims[1];++j) {
of << setw(15) << data[i*dims[1]+j];
}
of << endl;
}
y una línea de ejemplo de la salida:
1.015037e+00 1.015037e+00 1.395640e-06 -1.119544e-06 -8.333264e-07
Gracias
Solución
Creo cplusplus.com es incorrecta, o al menos está documentando una implementación particular - no puedo ver cualquier otro documentos en línea que establecen específicamente el número de dígitos que se muestran exponente - Ni siquiera puedo encontrar en la C ++ especificación.
Editar
La C ++ biblioteca estándar: Un tutorial y de referencia no establece explícitamente el número de dígitos de exponente; pero todos lo que es ejemplos muestran dos dígitos del exponente.
Otros consejos
Es de aplicación específica.
Me estoy poniendo 3 en MSVC ++ 08 g ++ y 4.4.0 con este código:
#include <algorithm>
#include <cstdlib>
#include <iomanip>
#include <iostream>
#include <iterator>
#include <vector>
typedef float NumberType;
double generate_number(void)
{
return static_cast<NumberType>(std::rand()) / RAND_MAX;
}
void print_number(NumberType d)
{
std::cout << std::setw(15) << d << std::endl;
};
int main(void)
{
std::vector<NumberType> data;
std::generate_n(std::back_inserter(data), 10, generate_number);
// print
std::cout.setf(std::ios::scientific);
std::cout.precision(6);
std::for_each(data.begin(), data.end(), print_number);
}
Usted puede cambiar fácilmente el tipo de número que utiliza. Me da tres lugares con tanto float
y double
, y la norma no dice nada sobre el formato real, por lo que me gustaría ir con mgb de respuesta .
Esto es un error en M $ implementación yo sepa
http://groups.google.com/group /comp.lang.c++/browse_thread/thread/624b679a4faf03d
acabo de tener un pensamiento - ya estoy imprimiendo flotadores, ¿por qué sería mostrar 3 valores del exponente ya que el máximo / mínimo exponente es ~ 38. Seguro que si la matriz de datos fueron de tipo doble que habría 3.