5

cplusplus.com によると、出力ストリームのフォーマットフラグを科学表記法に設定すると、

of.setf(ios::scientific)

指数に 3 桁のプラスと符号が表示されます。ただし、出力には2つしかないようです。何か案は?GCC 4.0.1 を使用して Mac OS でコンパイル。

これが私が使用している実際のコードです:

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

および出力の例:

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

ありがとう

4

5 に答える 5

4

cplusplus.com が間違っているか、少なくとも特定の実装を文書化していると思います-表示される指数の桁数を具体的に述べている他のオンラインドキュメントは見当たりません-C++仕様でも見つかりません。

編集

C++ 標準ライブラリ: チュートリアルとリファレンスには、指数の桁数が明示的に記載されていません。ただし、すべての例で 2 桁の指数が表示されます。

于 2009-08-10T21:14:29.960 に答える
4

それは実装固有です。

于 2009-08-10T21:18:11.560 に答える
0

これは M$ 実装のバグです AFAIK

http://groups.google.com/group/comp.lang.c++/browse_thread/thread/624b679a4faf03d

于 2009-10-08T15:50:37.637 に答える
0

次のコードを使用して、MSVC++08 および g++ 4.4.0 で 3 を取得しています。

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

使用する数値タイプは簡単に変更できます。floatと の両方で3 つの場所が与えられdouble、標準では実際の書式設定について何も述べられていないため、mgb の answerを使用します。

于 2009-08-10T21:21:45.857 に答える
0

私はちょうど考えました - 私はフロートを印刷しているので、最大/最小指数が〜38であるため、なぜ3つの指数値を表示するのでしょうか。データ配列が double 型の場合は 3 になるに違いありません。

于 2009-08-10T21:21:56.903 に答える