Description
The current PlaneAngle class introduces unnecessary round-off errors during use since it internally converts all values to turns. For example, it is currently impossible to represent the radians value Double.MIN_NORMAL exactly since the internal multiplication introduces errors: PlaneAngle.ofRadians(Double.MIN_NORMAL).toRadians() does not equal Double.MIN_NORMAL. We should restructure this API so that values are stored exactly and multiplication is only performed when required.
This issue was discovered during work on GEOMETRY-124. Use of the new Reduce class added two more floating point operations to angle normalization and caused a regression in commons-geometry-spherical.