[Python-ideas] Fwd: Trigonometry in degrees

Steven D'Aprano steve at pearwood.info
Mon Jun 11 14:38:07 EDT 2018

On Mon, Jun 11, 2018 at 10:24:42AM -0700, Michael Selik wrote:
> Would sind and cosd make Euler's formula work correctly?
> sind(x) + i * sind(x) == math.e ** (i * x)

No, using degrees makes Euler's identity *not* work correctly, unless 
you add in a conversion factor from degrees to radians:


Euler's Identity works fine in radians:

py> from cmath import exp
py> exp(1j*math.pi)

which is close enough to -1 given the usual rounding issues with floats. 
(Remember, math.pi is not π, but a number close to it. There is no way 
to represent the irrational number π in less than an infinite amount of 
memory without symbolic maths.)

> Perhaps you'd prefer an enhancement to the fractions module that provides
> real (not float) math?

I should think not. Niven's Theorem tells us that for rational angles 
between 0° and 90° (that is, angles which can be represented as 
fractions), there are only THREE for which sine (and cosine) are 
themselves rational:


Every value of sin(x) except for those three angles is an irrational 
number, which means they cannot be represented exactly as fractions or 
in a finite number of decimal places.

What that means is that if we tried to implement real (not float) 
trigonometric functions on fractions, we'd need symbolic maths capable 
of returning ever-more complicated expressions involving surds.

For example, the exact value of sin(7/2 °) involves a triple nested 
square root:

1/2 sqrt(2 - sqrt(2 + sqrt(3)))

and that's one of the relatively pretty ones. sin(3°) is:

-1/2 (-1)^(29/60) ((-1)^(1/60) - 1) (1 + (-1)^(1/60))


This proposal was supposed to *simplify* the trig functions for 
non-mathematicians, not make them mind-bogglingly complicated.


More information about the Python-ideas mailing list