Dennis Sweeney <sweeney.dennis...@gmail.com> added the comment:

According to https://docs.python.org/3/library/math.html#math.log :

"""With two arguments, return the logarithm of x to the given base, calculated 
as log(x)/log(base)."""

Indeed, this is consistent with that:

>>> from math import log
>>> log(243)
5.493061443340548
>>> log(3)
1.0986122886681098
>>> 5.493061443340548/1.0986122886681098
4.999999999999999

math.log is a floating-point operation, not an integer operation, and this is 
the nature of floating point operations: there can be rounding errors whenever 
there are intermediate steps of the computation. Strictly speaking, I would say 
this is not a bug, and results of floating point operations should generally be 
compared with math.isclose(), not with ==. Just like you can't expect (1/49)*49 
== 1.0.

On the other hand, it may be theoretically possible to do some clever floating 
point tricks to get more accurate results out of math.log(a, b), like maybe 
some kind of correction factor involving the platform libm pow() function. I 
don't know if those are typically any more reliable than the status quo 
quotient-of-logs.

----------
nosy: +Dennis Sweeney

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue45348>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to