[Python-ideas] Trigonometry in degrees

Stephan Houben stephanh42 at gmail.com
Sun Jun 10 10:44:03 EDT 2018


2018-06-09 8:18 GMT+02:00 Robert Vanden Eynde <robertvandeneynde at hotmail.com
>:

> For the naming convention, scipy using sindg (therefore Nor sind nor
> sindeg) will make the sind choice less obvious. However if Matlab and Julia
> chooses sind that's a good path to go, Matlab is pretty popular, as other
> pointed out, with Universities giving "free" licences and stuff. With that
> regards, scipy wanting to "be a replacement to Matlab in python and open
> source" it's interesting they chose sindg and not the Matlab name sind.
>


I would suggest that compatibility with a major Python library such as
SciPy is more important than compatibility
with other programming languages.

I would go even further and argue that scipy.special.sindg and its friends
cosdg and tandg
can serve as the reference implementation for this proposal.

Stephan



>
> For the "d" as suffix that would mean "d" as "double" like in opengl.
> Well, let's remember that in Python there's only One floating type, that's
> a double, and it's called float... So python programmers will not think
> "sind means it uses a python float and not a python float32 that C99 sinf
> would". Python programmers would be like "sin takes float in radians, sind
> takes float in degrees or int, because int can be converted to float when
> there's no overflow".
>
> Le sam. 9 juin 2018 à 04:09, Wes Turner <wes.turner at gmail.com> a écrit :
>
>> # Python, NumPy, SymPy, mpmath, sage trigonometric functions
>> https://en.wikipedia.org/wiki/Trigonometric_functions
>>
>> ## Python math module
>> https://docs.python.org/3/library/math.html#trigonometric-functions
>> - degrees(radians): Float degrees
>> - radians(degrees): Float degrees
>>
>> ## NumPy
>> https://docs.scipy.org/doc/numpy/reference/routines.math.htm
>> l#trigonometric-functions
>> - degrees(radians) : List[float] degrees
>> - rad2deg(radians): List[float] degrees
>> - radians(degrees) : List[float] radians
>> - deg2rad(degrees): List[float] radians
>>
>> https://docs.scipy.org/doc/numpy/reference/generated/numpy.sin.html
>>
>>
>> ## SymPy
>> http://docs.sympy.org/latest/modules/functions/elementary.ht
>> ml#sympy-functions-elementary-trigonometric
>> http://docs.sympy.org/latest/modules/functions/elementary.ht
>> ml#trionometric-functions
>>
>> - sympy.mpmath.degrees(radians): Float degrees
>> - sympy.mpmath.radians(degrees): Float radians
>>
>> - https://stackoverflow.com/questions/31072815/cosd-and-sind-with-sympy
>>   - cosd, sind
>>   - https://stackoverflow.com/questions/31072815/cosd-and-sind
>> -with-sympy#comment50176770_31072815
>>
>>     > Let x, theta, phi, etc. be Symbols representing quantities in
>> radians. Keep a list of these symbols: angles = [x, theta, phi]. Then, at
>> the very end, use y.subs([(angle, angle*pi/180) for angle in angles]) to
>> change the meaning of the symbols to degrees"
>>
>>
>> ## mpmath
>> http://mpmath.org/doc/current/functions/trigonometric.html
>> - sympy.mpmath.degrees(radians): Float degrees
>> - sympy.mpmath.radians(degrees): Float radians
>>
>>
>> ## Sage
>> https://doc.sagemath.org/html/en/reference/functions/sage/fu
>> nctions/trig.html
>>
>>
>>
>> On Friday, June 8, 2018, Robert Vanden Eynde <
>> robertvandeneynde at hotmail.com> wrote:
>>
>>> - Thanks for pointing out a language (Julia) that already had a name
>>> convention. Interestingly they don't have a atan2d function. Choosing the
>>> same convention as another language is a big plus.
>>>
>>> - Adding trig function using floats between 0 and 1 is nice, currently
>>> one needs to do sin(tau * t) which is not so bad (from math import tau, tau
>>> sounds like turn).
>>>
>>> - Julia has sinpi for sin(pi*x), one could have sintau(x) for sin(tau*x)
>>> or sinturn(x).
>>>
>>> Grads are in the idea of turns but with more problems, as you guys said,
>>> grads are used by noone, but turns are more useful. sin(tau * t) For The
>>> Win.
>>>
>>> - Even though people mentionned 1/6 not being exact, so that advantage
>>> over radians isn't that obvious ?
>>>
>>> from math import sin, tau
>>> from fractions import Fraction
>>> sin(Fraction(1,6) * tau)
>>> sindeg(Fraction(1,6) * 360)
>>>
>>> These already work today by the way.
>>>
>>> - As you guys pointed out, using radians implies knowing a little bit
>>> about floating point arithmetic and its limitations. Integer are more
>>> simple and less error prone. Of course it's useful to know about floats but
>>> in many case it's not necessary to learn about it right away, young
>>> students just want their player in the game move in a straight line when
>>> angle = 90.
>>>
>>> - sin(pi/2) == 1 but cos(pi/2) != 0 and sin(3*pi/2) != 1 so sin(pi/2) is
>>> kind of an exception.
>>>
>>>
>>>
>>>
>>> Le ven. 8 juin 2018 à 09:11, Steven D'Aprano <steve at pearwood.info> a
>>> écrit :
>>>
>>>> On Fri, Jun 08, 2018 at 03:55:34PM +1000, Chris Angelico wrote:
>>>> > On Fri, Jun 8, 2018 at 3:45 PM, Steven D'Aprano <steve at pearwood.info>
>>>> wrote:
>>>> > > Although personally I prefer the look of d as a prefix:
>>>> > >
>>>> > > dsin, dcos, dtan
>>>> > >
>>>> > > That's more obviously pronounced "d(egrees) sin" etc rather than
>>>> "sined"
>>>> > > "tanned" etc.
>>>> >
>>>> > Having it as a suffix does have one advantage. The math module would
>>>> > need a hyperbolic sine function which accepts an argument in; and
>>>> > then, like Charles Napier [1], Python would finally be able to say "I
>>>> > have sindh".
>>>>
>>>> Ha ha, nice pun, but no, the hyperbolic trig functions never take
>>>> arguments in degrees. Or radians for that matter. They are "hyperbolic
>>>> angles", which some electrical engineering text books refer to as
>>>> "hyperbolic radians", but all the maths text books I've seen don't call
>>>> them anything other than a real number. (Or sometimes a complex number.)
>>>>
>>>> But for what it's worth, there is a correspondence of a sort between
>>>> the
>>>> hyperbolic angle and circular angles. The circular angle going between
>>>> 0
>>>> to 45° corresponds to the hyperbolic angle going from 0 to infinity.
>>>>
>>>> https://en.wikipedia.org/wiki/Hyperbolic_angle
>>>>
>>>> https://en.wikipedia.org/wiki/Hyperbolic_function
>>>>
>>>>
>>>> > [1] Apocryphally, alas.
>>>>
>>>> Don't ruin a good story with facts ;-)
>>>>
>>>>
>>>>
>>>> --
>>>> Steve
>>>> _______________________________________________
>>>> Python-ideas mailing list
>>>> Python-ideas at python.org
>>>> https://mail.python.org/mailman/listinfo/python-ideas
>>>> Code of Conduct: http://python.org/psf/codeofconduct/
>>>>
>>> _______________________________________________
>> Python-ideas mailing list
>> Python-ideas at python.org
>> https://mail.python.org/mailman/listinfo/python-ideas
>> Code of Conduct: http://python.org/psf/codeofconduct/
>>
>
> _______________________________________________
> Python-ideas mailing list
> Python-ideas at python.org
> https://mail.python.org/mailman/listinfo/python-ideas
> Code of Conduct: http://python.org/psf/codeofconduct/
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20180610/794ac310/attachment-0001.html>


More information about the Python-ideas mailing list