<html>
<head>
</head>
<body>
<div style="color: black;">
<div style="color: black;">
<p style="margin: 0 0 1em 0; color: black;">You could always do e.g. math.sin(math.degress(radians)) and so forth...</p>
</div>
<div style="color: black;">
<p style="color: black; font-size: 10pt; font-family: Arial, sans-serif; margin: 8pt 0;">On June 7, 2018 3:07:21 PM Robert Vanden Eynde <robertvandeneynde@hotmail.com> wrote:</p>
<blockquote type="cite" class="gmail_quote" style="margin: 0 0 0 0.75ex; border-left: 1px solid #808080; padding-left: 0.75ex;">
<div dir="auto">
<div dir="auto">I suggest adding degrees version of the trigonometric functions in the math module.</div>
<div dir="auto"><br>
</div>
<div dir="auto">- Useful in Teaching and replacing calculators by python, importing something is seen by the young students much more easy than to define a function.</div>
<div dir="auto"><br>
</div>
<div dir="auto"><span style="font-family:sans-serif">- Special values could be treated, aka when the angle is a multiple of 90, young students are often surprise to see that cos(pi/2) != 0</span><br>
</div>
<div dir="auto"><span style="font-family:sans-serif"><br>
</span></div>
<div dir="auto"><span style="font-family:sans-serif">Testing for a special value Isn't very costly (x % 90 == 0) but it could be pointed out that there is a small overhead using the "degrees" equivalent of trig function because of the radians to degrees conversion
 And the special values testing.</span></div>
<div dir="auto"><span style="font-family:sans-serif"><br>
</span></div>
<div dir="auto">- Standard names will be chosen so that everyone will use the same name convention. I suggest adding a "d" like sind, cosd, tand, acosd, asind, atand, atan2d.</div>
<div dir="auto"><br>
</div>
<div dir="auto">Another option would be to add "deg" or prepend "d" or "deg" however the name should be short.</div>
<div dir="auto"><br>
</div>
<div dir="auto">sind, dsin, sindeg or degsin ?</div>
<div dir="auto"><br>
</div>
<div dir="auto">We can look in other languages what they chose.</div>
<div dir="auto"><br>
</div>
<div dir="auto">Creating a new package like 'from math.degrees import cos' however I would not recommend that because "cos" in the source code would mean to lookup the import to know if it's in degrees or radians (and that leads to very filthy bugs). Also "degrees"
 is already so the name would have to change the name of the package.</div>
<div dir="auto"><br>
</div>
<div dir="auto">- Also in the cmath module. Even though the radians make more sense in the complex plane. The same functions sin cos tan, asin acos atan, alongside with phase and polar.</div>
<div dir="auto"><br>
</div>
<div dir="auto">Here's my current implementation :</div>
<div dir="auto"><br>
</div>
<div dir="auto">
<div dir="auto" style="font-family:sans-serif">def cosd(x):</div>
<div dir="auto" style="font-family:sans-serif">    if x % 90 == 0:</div>
<div dir="auto" style="font-family:sans-serif">        return (1, 0, -1, 0)[int(x // 90) % 4]</div>
<div dir="auto" style="font-family:sans-serif">    else:</div>
<div dir="auto" style="font-family:sans-serif">        return cos(radians(x))</div>
</div>
<div dir="auto"><br>
</div>
<div dir="auto">def sind(x):</div>
<div dir="auto">    if x % 90 == 0:</div>
<div dir="auto">        return (0, 1, 0, -1)[int(x // 90) % 4]</div>
<div dir="auto">    else:</div>
<div dir="auto">        return sin(radians(x))</div>
<div dir="auto">
<div dir="auto" style="font-family:sans-serif"><br>
</div>
<div dir="auto" style="font-family:sans-serif">
<div dir="auto">def tand(x):</div>
<div dir="auto">    if x % 90 == 0:</div>
<div dir="auto">        return (0, float('inf'), 0, float('-inf'))[int(x // 90) % 4]</div>
<div dir="auto">    else:</div>
<div dir="auto">        return tan(radians(x))</div>
<div dir="auto"><br>
</div>
<div dir="auto">The infinity being positive of negative is debatable however, here I've chosen the convention lim tan(x) as x approaches ±90° from 0</div>
<div dir="auto"><br>
</div>
<div dir="auto">def acosd(x):</div>
<div dir="auto">    if x == 1: return 0</div>
<div dir="auto">    if x == 0: return 90</div>
<div dir="auto">    if x == -1: return 180</div>
<div dir="auto">    return degrees(acos(x))</div>
<div dir="auto"><br>
</div>
<div dir="auto">
<div dir="auto">def asind(x):</div>
<div dir="auto">    if x == 1: return 90</div>
<div dir="auto">    if x == 0: return 0</div>
<div dir="auto">    if x == -1: return -90</div>
<div dir="auto">    return degrees(asin(x))</div>
<div dir="auto"><br>
</div>
<div dir="auto">However, currently [degrees(acos(x)) for x in (1,0,-1)] == [0, 90, 180] on my machine so maybe the test isn't necessary.</div>
<div dir="auto"><br>
</div>
<div dir="auto">Testing for Special values of abs(x) == 0.5 could be an idea but I don't think the overhead is worth the effort.</div>
</div>
</div>
</div>
<div dir="auto"><br>
</div>
Probably this has already been discussed but I don't know how to check that.</div>

_______________________________________________<br>
Python-ideas mailing list<br>
<a class="aqm-autolink aqm-autowrap" href="mailto:Python-ideas%40python.org">Python-ideas@python.org</a><br>
<a class="aqm-autolink aqm-autowrap" href="https://mail.python.org/mailman/listinfo/python-ideas">https://mail.python.org/mailman/listinfo/python-ideas</a><br>
Code of Conduct: <a class="aqm-autolink aqm-autowrap" href="http://python.org/psf/codeofconduct/">http://python.org/psf/codeofconduct/</a><br>
<br></blockquote>
</div>
</div>
</body>
</html>