In [1]:
from sympy import *
import numpy as np
from scipy.special import factorial as fact
In [2]:
epsilon = .5
for i in range(200):
if 1. + epsilon != 1.:
epsilon *= .5
else:
print('Calculated epsilon:', epsilon * 2)
break
print('Actual epsilon:', np.finfo(float).eps)
print('Difference between the two:', epsilon * 2 - np.finfo(float).eps)
In [3]:
def approx_exp(x):
k = np.arange(21)
return np.sum(x ** k / fact(k))
In [4]:
for x in [10, 1, -1, -10]:
print (x, ':\n', (approx_exp(x) - np.exp(x)) / np.exp(x) )
In [5]:
def good_exp(x):
if x < 0:
return 1 / approx_exp(-x)
else:
return approx_exp(x)
In [6]:
for x in [10, 1, -1, -10]:
print (x, ':\n', (good_exp(x) - np.exp(x)) / np.exp(x) )
In [ ]: