The following code:
#include <iostream>
#include <ios>
int main() {
auto mod = 1e9+7;
std::cout << mod << '\n';
std::cout << std::fixed << mod << '\n';
}
outputs:
1e+009
1000000007.000000
I think that in this case, mod
is a floating point number and so first one gives 1e+009 as output which may be due to floating point precision. But then after while using std::fixed
, why the output is not 1000000000.000000 ?
1e9 + 7
This number is exactly representable in double
, there is not loss of precision here.
However, when you print it using std::cout << mod
, it is printed using default precision, which is 6 decimal digits. Therefore, 7 is not printed.
You can adjust precision of std::cout
using std::setprecision
manipulator:
#include <iostream>
#include <iomanip>
int main() {
std::cout << std::setprecision(10) << mod << '\n';
}
will print 1000000007