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, > Adam Bartoš > In one sense that is why I suggest a Circle based version of the trig functions. In effect that is a multiple of Tau (= 2*pi) routine.
Richard Damon _______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/