int main()
{
float x=3.4e2;
printf("%f",x);
return 0;
}
Output:
340.000000 // It's ok.
But if write x=3.1234e2
the output is 312.339996
and if x=3.12345678e2
the output is 312.345673
.
Why are the outputs like these? I think if I write x=3.1234e2
the output should be 312.340000
, but the actual output is 312.339996
using GCC compiler.
Not all fractional numbers have an exact binary equivalent so it is rounded to the nearest value.
Simplified example,
if you have 3 bits for the fraction, you can have:
0
0.125
0.25
0.375
...
0.5 has an exact representation, but 0.1 will be shown as 0.125.
Of course the real differences are much smaller.