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

¿Fue útil?

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 .

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.

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