Something that surprises a lot of programmers when they first learn it is that floating point types (float and double) are merely approximations. There is no way to represent an arbitrary floating point number with a fixed storage space, so the IEEE came up with a clever way to store and manipulate approximations. This is the method used by all computers today (that I’m aware of, at least…). The standard is called IEEE 754, and you can read all about it here: IEEE 754-2008 revision - Wikipedia
This IEEE standard is used both by hardware FPUs in processors (such as the one in a Cerberus), as well as software implementations (such as that used by the ARM7 in your Spider).
Double is more accurate, but it’s still an approximation. If your situation cannot tolerate these approximations and rounding errors, then you might be able to use the decimal type. It doesn’t use IEEE floating point numbers, but in turn, it cannot represent as many different values. It’s up to you to pick your solution.
libquadmath is still dealing in approximations, however, it just deals in more ACCURATE approximations. If you want arbitrary precision, MPFR might be for you