2015-10-10 104 views
1

我想知道如何編輯此代碼,以包括一個計算,這將允許我打印出2的權力,以便我可以寫機器epsilon爲2^(1-t),其中t是數字尾數中的位,並且這將與基數2中雙精度(python浮點數)尾數的理論位數相匹配?Epsilon和比較

def MachineE(): 
    eps = 2.0**(-1) 
    while eps + 1 > 1: 
     eps = eps/2.0 
    print 2.0 * eps 

MachineE() 

回答

0

平凡解第一個問題:

def MachineE(): 
    eps = 2.0**(-1) 
    t = 2 
    while eps + 1 > 1: 
     eps = eps/2.0 
     t += 1 
    print "2^({}) = {}".format(2-t, 2.0 * eps) 

MachineE() 

但我會建議使用直接sys.float_info.epsilonhttps://docs.python.org/3/library/sys.html#sys.float_info

>>> MachineE() 
2^(-52) = 2.220446049250313e-16 
>>> import sys 
>>> sys.float_info.epsilon 
2.220446049250313e-16 
>>> import math 
>>> math.log(sys.float_info.epsilon,2) 
-52.0 

第二個問題:簡答:是的。很長的答案,以各種相關的問題:https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html