#define versus const and other software performance issues

The compiler does floating point: it's part of the C language (it's gcc-avr). The hardware has no floating point support, so all the floating point math is done by emulation. The compiler inserts the code automatically to emulate floating point operations. It's just very expensive in terms of cycles used and in code space as well, compared to integer math.

Most of the time, I try really hard to not do floating point operations on an arduino, even if it makes the code a little messier. If performance is an issue, you're better off doing integer math.