2009-08-10 10 views
4

So nach cplusplus.com, wenn Sie das Format-Flag eines Ausgangsstroms an den wissenschaftlichen Notation überNur 2 Stellen in Exponenten in der wissenschaftlichen ofstream

of.setf(ios::scientific)

gesetzt, sollten Sie 3 Ziffern sehen zzgl und ein Zeichen in der Exponent. Allerdings scheint ich nur 2 in meiner Ausgabe zu bekommen. Irgendwelche Ideen? Kompiliert unter Mac OS mit GCC 4.0.1.

Hier ist der eigentliche Code verwende ich:

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; 
} 

und ein Beispiel Ausgabezeile:

1.015037e+00 1.015037e+00 1.395640e-06 -1.119544e-06 -8.333264e-07 

Dank

Antwort

3

Ich glaube cplusplus.com falsch ist, oder zumindest ist Dokumentation einer bestimmten Implementierung - Ich kann keine anderen Online-Dokumente sehen, die speziell die Anzahl der angezeigten Exponentenziffern angeben - ich kann es nicht einmal in der C++ - Spezifikation finden.

bearbeiten:

Die C++ Standard Library: A Tutorial and Reference nicht explizit die Anzahl der Exponent Ziffern angeben ist; aber alle Beispiele zeigen zwei Exponenten.

4

Es ist Implementierung spezifisch.

0

Ich erhalte 3 in MSVC++ 08 und g ++ 4.4.0 mit diesem Code:

#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); 
} 

Sie können ganz einfach die Nummer Typ verändern sie verwendet. Es gibt mir drei Plätze mit float und double, und der Standard sagt nichts über die tatsächliche Formatierung, also würde ich mit mgb's answer gehen.

+1

gleichen Code auf OS X kompiliert/Intel zwei Exponenten Ziffern gibt - sieht ziemlich schlüssig ist es einfach implementierungsabhängig. – DaveR

+0

In der Tat, Sie schlagen meine Bearbeitung bis zum Ende um eine Minute. :) – GManNickG

+1

@GMan: Immer den Weg auf SO;) – DaveR

0

Ich habe gerade einen Gedanken gehabt - da ich Floats drucke, warum würde es 3 Exponentenwerte anzeigen, da der Max/Min-Exponent ~ 38 ist. Ich wette, wenn die Daten-Array-Typ waren Doppel es wäre 3.