亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

具有無限浮點數的python上的技術問題

具有無限浮點數的python上的技術問題

人到中年有點甜 2022-08-25 15:22:08
我正在使用Python,我有一個問題,我想做一個程序,可以數從1到無限,要知道多少是無限的。這是我的代碼:a=0for i in range(1, 10e+99):  a += 1  print (a)但它說“'浮點'對象不能被解釋為整數”而10e + 99不是浮子請幫幫我
查看完整描述

5 回答

?
心有法竹

TA貢獻1866條經驗 獲得超5個贊

  1. 根據 Python 2 文檔和 Python 3 文檔,需要整數參數。range

  2. 在IEEE-754 32位二進制浮點數中,最大可表示的有限數約為3.4028e38。將數字(如源代碼中的數字)轉換為此格式時,任何大于或等于 2128?2104 (340,282,377,062,143,265,289,209,819,405,393,854,464) 的數字都將轉換為無窮大,前提是使用常見的舍入到最近連接到偶數方法。因此,(代表10?1099,因此代表10100)將表現得像無窮大。但是,Python實現通常使用IEEE-754 64位二進制浮點,其中最大可表示的有限數是21024?2971,并充當有限數。1 因此,要獲得無窮大,您需要周圍。1e9910e+9910e991e309

  3. 人類不可能測試從1到1遞增1的循環是否會產生無窮大,因為人類每年可用的總計算能力只有大約1030個添加(對于松散的“周圍”感,一些數量級)。這不足以計數到32位浮點有限數的極限,更不用說64位浮點數了。10e99

  4. 如果算術以浮點格式完成,即使具有無限的計算能力,它也永遠不會達到無窮大,因為一旦IEEE-754 64位二進制文件中的總和達到253,添加1不會改變數字;253 將在每次迭代中產生。這是因為 IEEE-754 64 位二進制文件只有 53 位可用于有效位數,因此 253+1 不可表示。最接近的可表示值為 253 和 253+2。執行算術運算時,默認情況下,確切的實數結果將舍入為最接近的可表示值,并將關系舍入到其有效位數為偶數低位的數字。當 1 相加到 253 時,實數結果 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。


查看完整回答
反對 回復 2022-08-25
?
慕碼人8056858

TA貢獻1803條經驗 獲得超6個贊

問題出現是因為函數取一個,而10e+99確實是一個。雖然10e + 99當然不是無窮大,因此你不應該期望無窮大在程序執行過程中彈出任何地方,但如果你真的想讓你的for循環按原樣工作,你可以簡單地做range()intfloat


a=0

for i in range(1, int(10e+99)):

    a += 1

    print (a)

然而,正如其他用戶所指出的那樣,我會完全重新考慮你的策略:使用基于范圍的for循環來“找出”無窮大的值是行不通的。無窮大不是一個數字。


查看完整回答
反對 回復 2022-08-25
?
烙印99

TA貢獻1829條經驗 獲得超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 

注意:無窮大是無窮大,沒有盡頭,無論您輸入什么值或數字,它都將始終返回false。


查看完整回答
反對 回復 2022-08-25
?
慕勒3428872

TA貢獻1848條經驗 獲得超6個贊

以下是如果您更正并執行程序將會發生什么:


a=0

for i in range(1, 10**100):

  a += 1

  print (a)

假設你有一個超級高效的python虛擬機(每個人都知道他們有多高效...)。


假設您有一個非常有效的(無界)大整數實現。


假設每個循環需要幾個機器周期才能以十進制形式打印這些數字(假設只有1000,這在現實中是很不真實的)。


假設每個周期大約需要1.0e-10秒(10GHz),這意味著利用并行度實現打印。


有了這些不切實際的假設,程序完成已經需要10 ^ 93秒。


宇宙的年齡估計小于10^ 18秒。這將是漫長的。


現在讓我們計算一下它將在400W計算機的基礎上吸收的能量。假設所有太陽物質(2e30 kg)都可以轉換為計算機的電能(通過E = m c ^ 2),您將消耗大約2 10 ^ 48相當于Sun來執行此計算。


在你回頭之前,我懇請你:三思而后行!拯救宇宙!


查看完整回答
反對 回復 2022-08-25
?
慕神8447489

TA貢獻1780條經驗 獲得超1個贊

也許你的意思是你的程序永遠持續下去:


a = 0

while True:

  a += 1

  print(a)

當我看到時,在我的腦海中,我用“永遠”代替它。while True:


查看完整回答
反對 回復 2022-08-25
  • 5 回答
  • 0 關注
  • 151 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號