You meant math.radians(degrees), and Robert already mentioned the problem with this:
>>> math.cos(math.radians(90)) 6.123233995736766e-17 On Thu, 7 Jun 2018 at 16:22 Ryan Gonzalez <rym...@gmail.com> wrote: > You could always do e.g. math.sin(math.degress(radians)) and so forth... > > On June 7, 2018 3:07:21 PM Robert Vanden Eynde < > robertvandeney...@hotmail.com> wrote: > >> I suggest adding degrees version of the trigonometric functions in the >> math module. >> >> - Useful in Teaching and replacing calculators by python, importing >> something is seen by the young students much more easy than to define a >> function. >> >> - 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 >> >> 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. >> >> - 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. >> >> Another option would be to add "deg" or prepend "d" or "deg" however the >> name should be short. >> >> sind, dsin, sindeg or degsin ? >> >> We can look in other languages what they chose. >> >> 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. >> >> - 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. >> >> Here's my current implementation : >> >> def cosd(x): >> if x % 90 == 0: >> return (1, 0, -1, 0)[int(x // 90) % 4] >> else: >> return cos(radians(x)) >> >> def sind(x): >> if x % 90 == 0: >> return (0, 1, 0, -1)[int(x // 90) % 4] >> else: >> return sin(radians(x)) >> >> def tand(x): >> if x % 90 == 0: >> return (0, float('inf'), 0, float('-inf'))[int(x // 90) % 4] >> else: >> return tan(radians(x)) >> >> The infinity being positive of negative is debatable however, here I've >> chosen the convention lim tan(x) as x approaches ±90° from 0 >> >> def acosd(x): >> if x == 1: return 0 >> if x == 0: return 90 >> if x == -1: return 180 >> return degrees(acos(x)) >> >> def asind(x): >> if x == 1: return 90 >> if x == 0: return 0 >> if x == -1: return -90 >> return degrees(asin(x)) >> >> However, currently [degrees(acos(x)) for x in (1,0,-1)] == [0, 90, 180] >> on my machine so maybe the test isn't necessary. >> >> Testing for Special values of abs(x) == 0.5 could be an idea but I don't >> think the overhead is worth the effort. >> >> Probably this has already been discussed but I don't know how to check >> that. >> _______________________________________________ >> Python-ideas mailing list >> Python-ideas@python.org >> https://mail.python.org/mailman/listinfo/python-ideas >> Code of Conduct: http://python.org/psf/codeofconduct/ >> >> _______________________________________________ > Python-ideas mailing list > Python-ideas@python.org > https://mail.python.org/mailman/listinfo/python-ideas > Code of Conduct: http://python.org/psf/codeofconduct/ >
_______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/