Floats have only 6-7 decimal digits of precision. That means the total number of digits, not the number to the right of the decimal point. Unlike other platforms, where you can get more precision by using a double (e.g. up to 15 digits), on the Arduino, double is the same size as float.Floating point numbers are not exact, and may yield strange results when compared. For example 6.0 / 3.0 may not equal 2.0. You should instead check that the absolute value of the difference between the numbers is less than some small number.
I am using floating point math. Why is the compiled code so big? Why does my code not work?You are not linking in the math library from AVR-LibC. GCC has a library that is used for floating point operations, but it is not optimized for the AVR, and so it generates big code, or it could be incorrect. This can happen even when you are not using any floating point math functions from the Standard C library, but you are just doing floating point math operations.When you link in the math library from AVR-LibC, those routines get replaced by hand-optimized AVR assembly and it produces much smaller code.
<math.h>: MathematicsDefines#define M_E 2.7182818284590452354#define M_LOG2E 1.4426950408889634074#define M_LOG10E 0.43429448190325182765#define M_LN2 0.69314718055994530942#define M_LN10 2.30258509299404568402#define M_PI 3.14159265358979323846#define M_PI_2 1.57079632679489661923#define M_PI_4 0.78539816339744830962#define M_1_PI 0.31830988618379067154#define M_2_PI 0.63661977236758134308#define M_2_SQRTPI 1.12837916709551257390#define M_SQRT2 1.41421356237309504880#define M_SQRT1_2 0.70710678118654752440