簡體   English   中英

試圖找到最小的數字

[英]Trying to find smallest number

在我的程序中,我試圖找到 python 可以給我的最小數字。 當我不斷將數字除以 2 時,我得到了 5 x 10^-324 (5e-324)。 我想我可以除以我可以在 python 中使用的最大數字。 我試圖通過這樣做來獲得 python 中的最大數字:

z = 1
    while True:
        try:
            z = z+1
        except OverflowError:
            z = z-1
            break

這是我的完整代碼:

from os import system
x = 76556758478567587
while True:
    x = x/2
    if x/2 == 0.0:
        break

print("Smallest number I can compute:", x)
print()
z = 1
while True:
    try:
        z = z+1
    except OverflowError:
        z = z-1
        break

print(str(x) + " divided by " + str(z) + " is...")
z = x/z
print(z)
system("pause >nul")

每次我運行它時它什么都不做。 我突然意識到它仍在嘗試解決問題,所以我打開任務管理器,Python 像狼吃死牛一樣吃掉我的 CPU。


我知道 python 中的最小數字是負數,但我想獲得大於零的最小數字。

您可以使用sys.float_info來獲得最大/最小可表示的有限浮點數:

>>> import sys
>>> sys.float_info.min
2.2250738585072014e-308
>>> sys.float_info.max
1.7976931348623157e+308

Python 使用雙精度浮點數,它可以保存大約 10 到 -308 到 10 到 308 次方的值。 下面是python提示符下的實驗:

# for maximum
>>> 1e308
1e+308
>>> 1e+309
inf   <-- Infinite

您甚至可以通過denormals數獲得小於1e-308數字,但這會嚴重影響性能,並且這些數字會以精度損失表示 我發現 Python 能夠處理 1e-323 但在 1e-324 上下溢並返回 0.0 作為值。

# for minimum
>>> 1e-323
1e-323
>>> 1e-324
0.0

您可以獲得非規范化最小值為sys.float_info.min * sys.float_info.epsilon ,即5e-324

根據文件:

sys.float_info.max是最大可表示的有限浮點數

sys.float_info.min是最小正標准化浮點數

要獲得更多信息檢查:sys.float_info

sys.float_info是一個結構序列,包含有關浮點類型的信息。 它包含有關精度和內部表示的低級信息。 這些值對應於“C”編程語言的標准頭文件 float.h 中定義的各種浮點常量; 有關詳細信息,請參閱 1999 ISO/IEC C 標准 [C99] 的第 5.2.4.2.2 節“浮動類型的特征”。

Python 中可表示的最小浮點數是5e-3242.0**-1075

其他兩個答案分別為您提供了找到此數字所需的一半。 可以通過將sys.float_info.min2.2250738585072014e-308 ,最小標准化浮點數)乘以sys.float_info.epsilon2.220446049250313e-16 ,您可以修改一個數字的最小比例)找到它,同時仍然得到一個不同的值.

您顯然缺少的關鍵詞是“ epsilon” 如果您搜索Python epsilon 值,那么它會返回一個指向StackOverflow: Value for epsilon in Python的鏈接,位於 Google 結果頂部附近。

顯然,如果您了解該術語與該概念的關系,將會有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM