On Fri, Jan 19, 2018 at 8:45 AM, Charles R Harris <charlesr.har...@gmail.com > wrote:
> > > On Fri, Jan 19, 2018 at 8:27 AM, Matthew Brett <matthew.br...@gmail.com> > wrote: > >> Hi, >> >> On Fri, Jan 19, 2018 at 3:24 PM, Charles R Harris >> <charlesr.har...@gmail.com> wrote: >> > >> > >> > On Fri, Jan 19, 2018 at 7:48 AM, Matthew Brett <matthew.br...@gmail.com >> > >> > wrote: >> >> >> >> Hi Chuck, >> >> >> >> Thanks for the replies, they are very helpful. >> >> >> >> On Fri, Jan 19, 2018 at 1:51 PM, Charles R Harris >> >> <charlesr.har...@gmail.com> wrote: >> >> > >> >> > >> >> > On Fri, Jan 19, 2018 at 6:41 AM, Charles R Harris >> >> > <charlesr.har...@gmail.com> wrote: >> >> >> >> >> >> >> >> >> >> >> >> On Fri, Jan 19, 2018 at 3:30 AM, Matthew Brett >> >> >> <matthew.br...@gmail.com> >> >> >> wrote: >> >> >>> >> >> >>> Hi, >> >> >>> >> >> >>> Sorry for my confusion, but I noticed (as a result of the >> discussion >> >> >>> here [1]) that np.rint and the fallback C function [2] seem to >> round >> >> >>> to even. But - my impression was that C rint, by default, rounds >> down >> >> >>> [3]. Is numpy rint not behaving the same way as the GNU C library >> >> >>> rint? >> >> >>> >> >> >>> In [4]: np.rint(np.arange(0.5, 11)) >> >> >>> Out[4]: array([ 0., 2., 2., 4., 4., 6., 6., 8., 8., 10., >> 10.]) >> >> >>> >> >> >>> In [5]: np.round(np.arange(0.5, 11)) >> >> >>> Out[5]: array([ 0., 2., 2., 4., 4., 6., 6., 8., 8., 10., >> 10.]) >> >> >> >> >> >> >> >> >> The GNU C documentation says that rint "round(s) x to an integer >> value >> >> >> according to the current rounding mode." The rounding mode is >> >> >> determined by >> >> >> settings in the FPU control word. Numpy runs with it set to round to >> >> >> even, >> >> >> although, IIRC, there is a bug on windows where the library is not >> >> >> setting >> >> >> those bits correctly. >> >> > >> >> > >> >> > Round to even is also the Python default rounding mode. >> >> >> >> Do you mean that it is Python setting the FPU control word? Or do we >> >> set it? Do you happen to know where that is in the source? I did a >> >> quick grep just now without anything obvious. >> > >> > >> > I can't find official (PEP) documentation, but googling indicates that >> in >> > Python 3, `round` rounds to even, and in Python 2 it rounds up. See also >> > https://docs.python.org/3/whatsnew/3.0.html. >> >> But I guess this could be the Python implementation of round, rather >> than rint and the FPU control word? I'm asking because the question >> arose about npy_rint at the C level ... >> > > I'm pretty sure Python sets the FPU control word. Note that Python itself > doesn't have a public interface for setting it, nor does Java. The GNU > library documentation has the following: > > Round to nearest. > This is the default mode. It should be used unless there is a specific > need for one of the others. In this mode results are rounded to the nearest > representable value. If the result is midway between two representable > values, the even representable is chosen. *Even* here means the > lowest-order bit is zero. This rounding mode prevents statistical bias and > guarantees numeric stability: round-off errors in a lengthy calculation > will remain smaller than half of FLT_EPSILON. > > A classic reference for rounding is TAOCP (section 4.2.2 in the Third Edition). I read that many years ago, so don't recall the details. Chuck
_______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@python.org https://mail.python.org/mailman/listinfo/numpy-discussion