On Tue, Jul 8, 2014 at 3:53 PM, Ian Kelly <ian.g.ke...@gmail.com> wrote: > On Tue, Jul 8, 2014 at 2:10 PM, Anders J. Munch <2...@jmunch.dk> wrote: >> Steven D'Aprano wrote: >>> - Keeping reflexivity for NANs would have implied some pretty nasty >>> things, e.g. if log(-3) == log(-5), then -3 == -5. >> >> >>>>> log(-3) >> Traceback (most recent call last): >> File "<stdin>", line 1, in <module> >> ValueError: math domain error >> >> You were perhaps referring to the log functions in C and Fortran, not >> math.log? >> The tradeoffs are different in those languages, so choices the IEEE-754 >> committee made with C and Fortran in mind may be less relevant for Python. > >>>> import ctypes >>>> libm = ctypes.cdll.LoadLibrary("libm.so.6") >>>> log = libm.log >>>> log.argtypes = [ctypes.c_double] >>>> log.restype = ctypes.c_double >>>> log(-3) > nan >>>> log(-5) > nan >>>> log(-3) == log(-5) > False
Also, numpy provides more control over floating-point error handling than straight Python does, and I think (but can't presently test) that numpy.log(-3) will return nan by default. -- https://mail.python.org/mailman/listinfo/python-list