Ant*_*yko 3 c++ floating-point
当我调试时,我有时想要打印函数返回的浮点数,并将其用作另一个函数的输入值.我想知道什么是指导浮点数格式化的默认参数.
以下代码中f1和f2是否始终相同?
#include <sstream>
#include <cassert>
int main(int argc, const char *argv[])
{
std::stringstream ss;
float f1 = .1f;
ss << f1;
float f2;
ss >> f2;
assert(f1 == f2);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我可以将一堆浮点数写入std :: cout或std :: ofsteam并读取它们以获得完全相同的数字,或者我应该明确设置小数点后的数字量(就像这里建议的那样?
困扰我的是,尽管.1不能表示为二进制分数,但仍然可以通过标准流正确格式化.
不必要.默认情况下,ostream输出6位精度.为了能够"往返"一个浮点数,你需要一个精度std::numeric_limits<float>::max_digits10(对于最常见的表示,它是9).如果流用于持久性,并且您只是持久浮动,则只需在写入任何内容之前设置精度,例如:
ss.precision( std::numeric_limits<float>::max_digits10 );
Run Code Online (Sandbox Code Playgroud)
(如果你需要同时处理float和double,并且不希望在额外的数字float,你需要每次输出的浮点值设定的精度.)