The representation of floating point numbers is just an approximation. Truncation and rounding occur frequently because the hardware cannot offer infinite precision when using a fixed number of bits. For most applications, the standard types float, double, and long double offer sufficient (albeit finite) precision. If you need infinite precision, you can use classes that encapsulate infinite precision. Such a class is available at http://www.hagins.com/jody/ipnumbers.html
for free. Note that infinite precision classes tend to be slower compared to built-in floating point types. The tradeoff is between higher precision and slower execution speed.