[erlang-questions] sine and cosine with degree angles

Richard O'Keefe <>
Fri Aug 27 05:38:43 CEST 2010


On Aug 26, 2010, at 11:03 PM, Roberto Ostinelli wrote:
> 
> however, due to approximations there seem to be an error in the
> computation of the cosine of 90° [which should be 0]:
> 
> 1> math:sin(90 * math:pi() / 180).
> 1.0
> 2> math:sin(0 * math:pi() / 180).
> 0.0
> 3> math:cos(90 * math:pi() / 180).
> 6.123233995736766e-17
> 4> math:cos(0 * math:pi() / 180).
> 1.0

As a matter of fact cos(90) looks about as good as it can
get.  You can't get *precisely* close to pi/2; the closest
you can get is pi/2 +/- epsilon, and the cosine of that
will be -/+ epsilon.

> cos(1.57079632679489661923132169163975144)
[1] 6.123234e-17

Now Ada lets you write
	cos(90, cycle => 360)
and Sun's math library lets you write
	cospi(90.0/180.0)
where cospi(x) = cos(pi * x) as if computed with an infinitely
precise pi.  We would expect either of those to return an
exact 0.

With the traditional C interface, 6.123233995736766e-17 is as
close as you are going to get.



More information about the erlang-questions mailing list