[Python-ideas] Trigonometry in degrees

Richard Damon Richard at Damon-Family.org
Fri Jun 8 20:04:51 EDT 2018

```On 6/8/18 5:11 PM, Adam Bartoš wrote:
> Steven D'Aprano wrote:
> > On Fri, Jun 08, 2018 at 10:53:34AM +0200, Adam Bartoš wrote:
> >> Wouldn't sin(45 * DEG) where DEG = 2 * math.pi / 360 be better that
> >> sind(45)? This way we woudn't have to introduce new functions. (The
> problem
> >> with nonexact results for nice angles is a separate issue.)
> >
> > But that's not a separate issue, that's precisely one of the motives
> for
> > having dedicated trig functions for degrees.
> >
> > sind(45) (or dsin(45), as I would prefer) could (in principle) return
> > the closest possible float to sqrt(2)/2, which sin(45*DEG) does not do:
> >
> > py> DEG = 2 * math.pi / 360
> > py> math.sin(45*DEG) == math.sqrt(2)/2
> > False
> >
> > Likewise, we'd expect cosd(90) to return zero, not something not-quite
> > zero:
> >
> > py> math.cos(90*DEG)
> > 6.123031769111886e-17
> >
> >
> >
> > That's how it works in Julia:
> >
> > julia> sind(45) == sqrt(2)/2
> > true
> >
> > julia> cosd(90)
> > 0.0
> >
> >
> > and I'd expect no less here. If we can't do that, there probably
> > wouldn't be much point in the exercise.
>
> But if there are both sin and dsin, and you ask about the difference
> between them, the obvious answer would be that one takes radians and
> the other takes degrees. The point that the degrees version is
> additionally exact on special values is an extra benefit. It would be
> nice to also fix the original sin, or more precisely to provide a way
> to give it a fractional multiple of pi. How about a special class
> PiMultiple that would represent a fractional multiple of pi?
>
> PI = PiMultiple(1)
> assert PI / 2 == PiMultiple(1, 2)
> assert cos(PI / 2) == 0
> DEG = 2 * PI / 360
> assert sin(45 * DEG) == sqrt(2) / 2
>
> Best regards,