2017-01-07 82 views

回答

1

的那一刻F成爲小於1,我得到 「0」 顯示

這不是發生了什麼。第一次f小於1時,打印4.0 0.675。這不是0

1.0 1.5 
2.0 1.5 
3.0 1.125 
4.0 0.675 
5.0 0.3375 

f的值,那麼很快就會非常非常小,到Python開始使用科學記數法負指數的點:

6.0 0.144642857143 
7.0 0.0542410714286 
8.0 0.0180803571429 
9.0 0.00542410714286 
10.0 0.00147930194805 
11.0 0.000369825487013 
12.0 8.53443431568e-05 
13.0 1.82880735336e-05 
14.0 3.65761470672e-06 
15.0 6.8580275751e-07 

注意-05-06等。 f的值變得如此之小以至於小數點移位更有效率。如果你要使用格式化定點符號的價值,他們會使用多個零:

>>> format(8.53443431568e-05, '.53f') 
'0.00008534434315680000128750276600086976941383909434080' 
>>> format(6.8580275751e-07, '.53f') 
'0.00000068580275751000002849671038224199648425383202266' 

最後f成爲浮點型太小;浮點值,根本無法去接近零超出了這一點:

165.0 5.89639287564e-220 
166.0 1.05923225311e-221 
167.0 1.89148616627e-223 
168.0 3.35766775077e-225 
169.0 5.92529603077e-227 
170.0 0.0 

0.0前的最後一個值是5.925與227零它:

>>> format(5.92529603077e-227, '.250f') 
'0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000592529603077000028336751' 

這是相當接近對象可以表示的絕對最小值a float;看到min attribute of the sys.float_info named tuple

>>> import sys 
>>> sys.float_info.min 
2.2250738585072014e-308 

換句話說,你達到了極限,並且有5.92529603077e-2270.0左邊之間沒有更多的表示值。