loss of precission

From what I have read the Arduino floating-point math is only good for 6 or 7 digits.

Using an 'unsigned long' type (32 bits) you can get about 9.5 digits of range. That should let you calculate in millionths of a degree.