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++ 标准库:教程和参考没有明确说明指数位数;但它的所有例子都显示两个指数数字。

于 2009-08-10T21:14:29.960 回答
4

它是特定于实现的。

于 2009-08-10T21:18:11.560 回答
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);
}

您可以轻松更改它使用的数字类型。它给了我三个地方floatdouble,并且标准没有说明实际格式,所以我会选择mgb 的答案

于 2009-08-10T21:21:45.857 回答
0

我刚刚有了一个想法 - 因为我正在打印浮点数,为什么它会显示 3 个指数值,因为最大/最小指数是 ~38。我敢打赌,如果数据数组是 double 类型,那么会有 3 个。

于 2009-08-10T21:21:56.903 回答
0

这是 M$ 实现 AFAIK 中的一个错误

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

于 2009-10-08T15:50:37.637 回答