5 回答

TA貢獻1866條經(jīng)驗 獲得超5個贊
根據(jù) Python 2 文檔和 Python 3 文檔,需要整數(shù)參數(shù)。
range
在IEEE-754 32位二進制浮點數(shù)中,最大可表示的有限數(shù)約為3.4028e38。將數(shù)字(如源代碼中的數(shù)字)轉(zhuǎn)換為此格式時,任何大于或等于 2128?2104 (340,282,377,062,143,265,289,209,819,405,393,854,464) 的數(shù)字都將轉(zhuǎn)換為無窮大,前提是使用常見的舍入到最近連接到偶數(shù)方法。因此,(代表10?1099,因此代表10100)將表現(xiàn)得像無窮大。但是,Python實現(xiàn)通常使用IEEE-754 64位二進制浮點,其中最大可表示的有限數(shù)是21024?2971,并充當(dāng)有限數(shù)。1 因此,要獲得無窮大,您需要周圍。
1e99
10e+99
10e99
1e309
人類不可能測試從1到1遞增1的循環(huán)是否會產(chǎn)生無窮大,因為人類每年可用的總計算能力只有大約1030個添加(對于松散的“周圍”感,一些數(shù)量級)。這不足以計數(shù)到32位浮點有限數(shù)的極限,更不用說64位浮點數(shù)了。
10e99
如果算術(shù)以浮點格式完成,即使具有無限的計算能力,它也永遠不會達到無窮大,因為一旦IEEE-754 64位二進制文件中的總和達到253,添加1不會改變數(shù)字;253 將在每次迭代中產(chǎn)生。這是因為 IEEE-754 64 位二進制文件只有 53 位可用于有效位數(shù),因此 253+1 不可表示。最接近的可表示值為 253 和 253+2。執(zhí)行算術(shù)運算時,默認情況下,確切的實數(shù)結(jié)果將舍入為最接近的可表示值,并將關(guān)系舍入到其有效位數(shù)為偶數(shù)低位的數(shù)字。當(dāng) 1 相加到 253 時,實數(shù)結(jié)果 253+1 將舍入為 253,因此對于所有將來的迭代,總和將保持在 253。
腳注
1 最接近的 10100 的可表示值為 10,000,000,000,000,000,159,028,911,097,599,180,468,360,808,563,945,281,389,781,327,557,747,838,772,170,381,060,813,469,985,856,815,104。

TA貢獻1803條經(jīng)驗 獲得超6個贊
問題出現(xiàn)是因為函數(shù)取一個,而10e+99確實是一個。雖然10e + 99當(dāng)然不是無窮大,因此你不應(yīng)該期望無窮大在程序執(zhí)行過程中彈出任何地方,但如果你真的想讓你的for循環(huán)按原樣工作,你可以簡單地做range()intfloat
a=0
for i in range(1, int(10e+99)):
a += 1
print (a)
然而,正如其他用戶所指出的那樣,我會完全重新考慮你的策略:使用基于范圍的for循環(huán)來“找出”無窮大的值是行不通的。無窮大不是一個數(shù)字。

TA貢獻1829條經(jīng)驗 獲得超13個贊
使用是代碼,你可以檢查你的變量是否無窮大。
import math
infinity = float('inf')
a = 99999999999999999999999999999999
if a > infinity:
print('Your number is an infinity number')
else:
print('Your number is not an infinity number')
#or you can check with math.isinf
print('Your number is Infinity: ',math.isinf(infinity ))
# Also infinity can be both positive and negative
注意:無窮大是無窮大,沒有盡頭,無論您輸入什么值或數(shù)字,它都將始終返回false。

TA貢獻1848條經(jīng)驗 獲得超6個贊
以下是如果您更正并執(zhí)行程序?qū)l(fā)生什么:
a=0
for i in range(1, 10**100):
a += 1
print (a)
假設(shè)你有一個超級高效的python虛擬機(每個人都知道他們有多高效...)。
假設(shè)您有一個非常有效的(無界)大整數(shù)實現(xiàn)。
假設(shè)每個循環(huán)需要幾個機器周期才能以十進制形式打印這些數(shù)字(假設(shè)只有1000,這在現(xiàn)實中是很不真實的)。
假設(shè)每個周期大約需要1.0e-10秒(10GHz),這意味著利用并行度實現(xiàn)打印。
有了這些不切實際的假設(shè),程序完成已經(jīng)需要10 ^ 93秒。
宇宙的年齡估計小于10^ 18秒。這將是漫長的。
現(xiàn)在讓我們計算一下它將在400W計算機的基礎(chǔ)上吸收的能量。假設(shè)所有太陽物質(zhì)(2e30 kg)都可以轉(zhuǎn)換為計算機的電能(通過E = m c ^ 2),您將消耗大約2 10 ^ 48相當(dāng)于Sun來執(zhí)行此計算。
在你回頭之前,我懇請你:三思而后行!拯救宇宙!

TA貢獻1780條經(jīng)驗 獲得超1個贊
也許你的意思是你的程序永遠持續(xù)下去:
a = 0
while True:
a += 1
print(a)
當(dāng)我看到時,在我的腦海中,我用“永遠”代替它。while True:
添加回答
舉報