If you had more digits to the print of the double
you'll see that even double
cannot be represented exactly:
printf ("b: %.16f\n", b);
b: 101.0999999999999943
The thing is float
and double
are using binary format and not all floating pointer numbers can be represented exactly with binary format.