''' Determine when log1p starts to be better than log(1+p). IOW, what is meant by "when x is near zero"? ''' from decimal import getcontext, Decimal from math import log, log1p from random import random from collections import Counter getcontext().prec = 100 def best_method(x): regular_log = log(1.0 + x) offset_log = log1p(x) if regular_log == offset_log: return 'equal' correct = (1 + Decimal(x)).ln() if abs(Decimal(regular_log) - correct) < abs(Decimal(offset_log) - correct): return 'regular_log' return 'offset_log' n = 100_000 print(Counter(best_method(random()) for i in range(n))) print(Counter(best_method(-random()) for i in range(n)))