为什么std :: numeric_limits <float> :: min()在使用不同函数流式传输到输出时的行为不同?

时间:2016-12-25 06:40:32

标签: c++ c++11 floating-point format-specifiers numeric-limits

我有一个奇怪的行为

 std::numeric_limits<float>::min()

当我调用std :: cout时,我得到的输出值为1.17549e-38

相反,当我使用

printf("%f", std::numeric_limits<float>::min());

我的值为0.000000。

请注意,当我评估(std::numeric_limits<float>::min() == std::numeric_limits<float>::min())时,我得到true(这是直观且合乎逻辑的)

那么,任何人都可以向我解释输出的这种差异吗?

1 个答案:

答案 0 :(得分:4)

cppreference for numeric_limits

std::numeric_limits<float>::min()返回FLT_MIN

使用0显示的返回值(实际上不是%f)实际上已格式化为固定的小数位数。 '%f'格式以固定格式打印6个小数位。

您可以使用:

%e=gives the scientific notation
%g=handles large floating numbers