In the 1980's, the DEC and Unix C
libraries for trigonometric
functions, assumed that the end user's input is exact.
Because a number like
expressed
to fifteen decimals is really uncertain to
,
it is absurd to insist that the sine
or cosine of that number be exact.
Who knows where, on the unit circle, the angle really lies?
But without permission from the end user to treat the
input as approximate,
the only way to unwind the number around the circle accurately
is to use multiple-precision arithmetic with
stored to thousands of decimals! The resulting performance,
needless to say, is abysmal.
The fault lies in the misplacement of responsibility in
the implicit
contract between the end user and the application programmer.
A concession (by the end user) of inaccurate input
can greatly improve performance that
one can reasonably demand.