What was wrong with my initial implementation with a lookup table ? :D def sind(x): if x % 90 == 0: return (0, 1, 0, -1)[int(x // 90) % 4] else: return sin(radians(x))
If you want to support multiples of 30, you can do % 30 and // 30. Le mer. 13 juin 2018 à 09:51, Stephan Houben <stephan...@gmail.com> a écrit : > Op di 12 jun. 2018 12:41 schreef Nathaniel Smith <n...@pobox.com>: > >> On Tue, Jun 12, 2018, 00:03 Stephan Houben <stephan...@gmail.com> wrote: >> >>> Hi all, >>> >>> I wrote a possible implementation of sindg: >>> >>> https://gist.github.com/stephanh42/336d54a53b31104b97e46156c7deacdd >>> >>> This code first reduces the angle to the [0,90] interval. >>> After doing so, it can be observed that the simple implementation >>> math.sin(math.radians(angle)) >>> produces exact results for 0 and 90, and a result already rounded to >>> nearest for >>> 60. >>> >> >> You observed this on your system, but math.sin uses the platform libm, >> which might do different things on other people's systems. >> > > > Ok, I updated the code to treat all the values 0, 30, 45, 60 and 90 > specially. > > Stephan > > >> >>> For 30 and 45, this simple implementation is one ulp too low. >>> So I special-case those to return the correct/correctly-rounded value >>> instead. >>> Note that this does not affect monotonicity around those values. >>> >> >> Again, monotonicity is preserved on your system, but it might not be on >> others. It's not clear that this matters, but then it's not clear that any >> of this matters... >> >> -n >> > _______________________________________________ > 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/