C++ 在科学流中,指数只有2位
因此,根据cplusplus.com,当您通过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 <
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);
}