浮点数计算问题(大概?)
看课本的时候偶然发现的一个问题,就是在这样一个程序运算下import numpy as np
def deriv(f,x,h,n=1):
if n == 1:
return (f(x+h)-f(x))/h
else:
return (deriv(f,x+h,h,n-1)-deriv(f,x,h,n-1))/h
#本质上就是一个模拟微分的函数,如果n=1则按照微分定义,如果n=2则分头继续导
H =
for h in H:
E1 = deriv(np.exp,1,h,1)
E3 = deriv(np.exp,1,h,3)
e = np.exp(1) #exp(x) 返还的是e的x次方的值
diff1 = np.abs(E1-e)
diff3 = np.abs(E3-e)
print("(exp(%.0e))'= %.6f, which is %.2e away from the value of %.6f." % (h,E1,diff1,e))
print("(exp(%.0e))'''= %.6f, which is %.2e away from the value of %.6f." % (h,E3,diff3,e))
最后一个E3是0而非e附近哪个值。这是因为超出运算精度了还是什么其他原因吗?
用的是Colaboratory。 并且倒数第二个E3(倒数第三行输出)也非常可疑。理应来讲应当也是e附近哪个值,但是显示的却是3.11。
页:
[1]