Stand-alone Python code for log(1+x)
If p is very small, directly computing
log(1+p) can be inaccurate.
See the C++ version of this page for
NB: Starting with version 2.6, Python has a function
math.log1p for this purpose.
import math # compute log(1+x) without loss of precision for small values of x def log_one_plus_x(x): if x <= -1.0: raise FloatingPointError, "argument must be > -1" if abs(x) > 1e-4: # x is large enough that the obvious evaluation is OK return math.log(1.0 + x) else: # Use Taylor approx. # log(1 + x) = x - x^2/2 with error roughly x^3/3 # Since |x| < 10^-4, |x|^3 < 10^-12, # and the relative error is less than 10^-8 return (-0.5*x + 1.0)*x
This code is in the public domain. Do whatever you want to with it, no strings attached.