Scientific ofstream 中的指数只有 2 位数字
-
12-09-2019 - |
题
因此,根据 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
谢谢
解决方案
我相信 cplusplus.com 是不正确的,或者至少正在记录一个特定的实现 - 我看不到任何其他在线文档专门说明显示的指数位数 - 我什至在 C++ 规范中找不到它。
编辑:
这 C++ 标准库:教程和参考 没有明确说明指数位数;但它的所有示例都显示两个指数数字。
其他提示
这是实现特定的。
我在MSVC得到3 ++ 08和g ++ 4.4.0与此代码:
#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
和double
,标准说,在实际的格式化什么都没有,所以我用的 MGB的回答。
我刚有一个想法 - 因为我打印浮筒,为什么会显示3个指数值,因为最大/最小指数为〜38。我打赌如果数据阵列是键入双会有3.
不隶属于 StackOverflow