科学 ofstream 中的指数只有 2 位
Posted
技术标签:
【中文标题】科学 ofstream 中的指数只有 2 位【英文标题】:Only 2 digits in exponent in scientific ofstream 【发布时间】:2009-08-10 20:59:39 【问题描述】:所以根据 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
谢谢
【问题讨论】:
【参考方案1】:我认为 cplusplus.com 是不正确的,或者至少正在记录特定的实现 - 我看不到任何其他专门说明显示的指数位数的在线文档 - 我什至无法在C++ 规范。
编辑:
C++ Standard Library: A Tutorial and Reference 没有明确说明指数位数;但所有示例都显示两个指数数字。
【讨论】:
【参考方案2】:这是特定于实现的。
【讨论】:
【参考方案3】:我在 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
和 double
,标准没有说明实际格式,所以我会选择mgb's answer。
【讨论】:
在 OS X/Intel 上编译的相同代码给出了两个指数数字 - 看起来很确定,它只是依赖于实现。 @GMan: 总是这样;)【参考方案4】:这是 M$ 实现 AFAIK 中的一个错误
http://groups.google.com/group/comp.lang.c++/browse_thread/thread/624b679a4faf03d
【讨论】:
【参考方案5】:我刚刚有了一个想法 - 既然我正在打印浮点数,为什么它会显示 3 个指数值,因为最大/最小指数约为 38。我敢打赌,如果数据数组是 double 类型,那么会有 3 个。
【讨论】:
以上是关于科学 ofstream 中的指数只有 2 位的主要内容,如果未能解决你的问题,请参考以下文章