Python中最小和最大的值是什麼?float在float中可以有多大的值範圍?
回答
看到這個post。
後的相關部分:
In [2]: import kinds In [3]: kinds.default_float_kind.M kinds.default_float_kind.MAX kinds.default_float_kind.MIN kinds.default_float_kind.MAX_10_EXP kinds.default_float_kind.MIN_10_EXP kinds.default_float_kind.MAX_EXP kinds.default_float_kind.MIN_EXP In [3]: kinds.default_float_kind.MIN Out[3]: 2.2250738585072014e-308
請注意,數字已經在很大程度上被NumPy所取代。我想知道是否有更現代的種類模塊存在,儘管... – EOL 2009-12-02 21:32:18
Python使用雙精度浮點值,這可以從約10到-308保存值到10至308的功率。
http://en.wikipedia.org/wiki/Double_precision_floating-point_format
從Python提示嘗試這個實驗:
>>> 1e308
1e+308
>>> 1e309
inf
10到309功率溢出,但10〜38是沒有的。 QED。
實際上,您可能通過denormals獲得小於1e-308的數字,但這會對性能產生重大影響。我發現Python能夠處理1e-324
,但在1e-325
下溢,並返回0.0
作爲值。
而且1e + 308應該如何比無限大(見問題)? ;) – sfussenegger 2009-12-03 11:22:25
@sfussenegger:答案「-inf和+ inf」當然是對這個問題的有效回答。請將它作爲單獨的答案發布。 – 2017-04-15 10:28:01
作爲對以前答案的一種理論補充,我想提一下,「魔術」值±308直接來自浮點數的二進制表示。 Double precision floats的形式爲±c * 2 ** q,帶有一個「小」小數值c(〜1),q是一個用11位二進制數字(其符號包括1位)寫入的整數。 2 **(2 ** 10-1)具有308(十進制)數字的事實說明極端浮點值中出現10 **±308。
計算在Python:
>>> print len(repr(2**(2**10-1)).rstrip('L'))
308
只是玩弄;這裏是找到的最小和最大正浮點數的計算方法,希望能在任何Python實現,其中float("+inf")
是可以接受的:
def find_float_limits():
"""Return a tuple of min, max positive numbers
representable by the platform's float"""
# first, make sure a float's a float
if 1.0/10*10 == 10.0:
raise RuntimeError("Your platform's floats aren't")
minimum= maximum= 1.0
infinity= float("+inf")
# first find minimum
last_minimum= 2*minimum
while last_minimum > minimum > 0:
last_minimum= minimum
minimum*= 0.5
# now find maximum
operands= []
while maximum < infinity:
operands.append(maximum)
try:
maximum*= 2
except OverflowError:
break
last_maximum= maximum= 0
while operands and maximum < infinity:
last_maximum= maximum
maximum+= operands.pop()
return last_minimum, last_maximum
if __name__ == "__main__":
print (find_float_limits()) # python 2 and 3 friendly
在我的情況下,
$ python so1835787.py
(4.9406564584124654e-324, 1.7976931348623157e+308)
所以使用非正規數。
>>> import sys
>>> sys.float_info
sys.floatinfo(max=1.7976931348623157e+308, max_exp=1024, max_10_exp=308,
min=2.2250738585072014e-308, min_exp=-1021, min_10_exp=-307, dig=15, mant_dig=53,
epsilon=2.2204460492503131e-16, radix=2, rounds=1)
最小的是sys.float_info.min
(2.2250738585072014e-308)和最大的是sys.float_info.max
(1.7976931348623157e + 308)。其他房產見documentation。
更新:你通常可以得到非規範化最低爲sys.float_info.min*sys.float_info.epsilon
。但請注意,這些數字是以精確度損失表示的。
- 1. float的最大值
- 2. Java中Float的最大值是多少?
- 3. F# - 乘以float float
- 4. Float或Int範圍內的隨機數
- 5. float變量如何存儲不在C++範圍內的負值?
- 6. java中float和float有什麼區別?
- 7. 蟒蛇:找到範圍內的值float數組
- 8. Javascript Float + Float = String?
- 9. float + float = NAN
- 10. 在JSP中,我在Float中輸入了一個Float值。如何從Action頁面以Float方式訪問它?
- 11. objective c float值
- 12. 在uint32_t計算中轉換爲float float
- 13. 在Java 1.5中截斷float Float in setRoundingMode
- 14. Float值的回聲
- 15. Double和Float大小
- 16. is if(float> int)if(float>(float)int)?
- 17. 從float到float的有損轉換int檢查在java中
- 18. Float/Float =奇怪的結果
- 19. 在SQL Server 2005中錯誤地將FLOAT賦值給FLOAT
- 20. JFreeChart在Y軸中顯示整數值爲float float
- 21. Teradata中Float數據類型的最大值是多少?
- 22. float x []與float [] x有什麼區別?
- 23. 以編程方式獲取SQL中float的最大值
- 24. 有沒有辦法限制CSS float的範圍並清除?在問題的
- 25. Java中float和double的包含範圍是什麼?
- 26. float和float有什麼區別?在C#中財產返還型
- 27. 多FLOAT DIV和BORDER
- 28. 可以在JUnit的float和double值上使用assertTrue嗎?
- 29. 提取float/double值
- 30. Python Float到Ord值
http://stackoverflow.com/questions/3477283/what-is-the-maximum-float-in-python – 2016-07-14 09:12:12