C++ 在科学流中,指数只有2位

C++ 在科学流中,指数只有2位,c++,scientific-notation,C++,Scientific Notation,因此,根据cplusplus.com,当您通过 of.setf(ios::scientific) 你应该在指数中看到3位加号和一个符号。然而,我的输出似乎只有2个。有什么想法吗?使用GCC4.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 <

因此,根据cplusplus.com,当您通过


of.setf(ios::scientific)

你应该在指数中看到3位加号和一个符号。然而,我的输出似乎只有2个。有什么想法吗?使用GCC4.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;
}

谢谢

< p>我相信CPLUS PLUSSUN是不正确的,或者至少是记录一个特定的实现——我看不到任何其他的在线文档,它们具体地显示了显示的指数数字的数量,我甚至在C++规范中找不到它。 编辑:


没有明确说明指数位数;但它的所有示例都显示两个指数数字。

它是特定于实现的。

我在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);
}

#include.

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

这是M$AFAIK实现中的一个bug


在OS X/Intel上编译的同一代码给出了两个指数数字-看起来很有说服力,它只是依赖于实现。@GMan:总是这样;)
#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);
}