Search code examples
c++c++11floating-pointformat-specifiersnumeric-limits

why does std::numeric_limits<float>::min() differ in behavior when streamed to output with different functions?


I got a weird behaviour with

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

when I call std::cout I get an output value of 1.17549e-38

in contrast when I use

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

I get a value of 0.000000.

note that when I evaluate (std::numeric_limits<float>::min() == std::numeric_limits<float>::min()) I get true (which is intuitive and logical)

so, can any one explain to me this difference in output?


Solution

  • cppreference for numeric_limits:

    std::numeric_limits<float>::min() returns FLT_MIN.

    The returned value (which is not 0 in reality) displayed using %f is actually formatted to fixed number of decimal places. The '%f' format prints 6 decimal places in fixed format.

    You can use :

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