1
x=1.0
i=1
while(1.0+x>1.0):
    x=x/2
    i=i+1
print i

フォローアップの質問、なぜ i=54 の値なのですか?

私の考えでは、(1.0+x) の値は常に 1.0 より大きいままなので、ループは終了しません。しかし、コードを実行するときはそうではありません。

4

4 に答える 4

6

浮動小数点の不正確さにより、 の値xが小さすぎて Python がその値を格納できず、本質的に になる時が必ず来ます0。その段階に到達するには 54 回 (実際には 53回) の反復が必要iです。

例えば、

>>> 1e-1000
0.0
于 2013-04-14T02:59:45.703 に答える
6

なぜ54?-- 実際には 53 です。インクリメントする前だったからです。

>>> 2.**-54
5.551115123125783e-17

>>> 2.**-53
1.1102230246251565e-16

>>> 2.**-52
2.220446049250313e-16

>>> sys.float_info.epsilon
2.220446049250313e-16

これほど小さいものを 1 に足しても、それは 1 のままです。

于 2013-04-14T03:01:42.903 に答える