试图找到最小的数字

时间:2016-09-28 21:13:14

标签: python numbers

在我的程序中,我试图找到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中最小的数字是负数,但我希望得到最小的数字高于零

3 个答案:

答案 0 :(得分:3)

您可以使用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节,“浮动类型的特性”。

答案 1 :(得分:1)

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

另外两个答案分别给出了你需要找到这个数字的一​​半。可以通过将sys.float_info.min2.2250738585072014e-308(最小的规范化浮点数)乘以sys.float_info.epsilon2.220446049250313e-16来找到,这是您可以修改数字的最小比例,同时仍然可以获得明显的值)。

答案 2 :(得分:0)

您显然缺少的关键词是&#34; epsilon。&#34;如果您搜索 Python epsilon值,则会在Google的结果顶部附近返回StackOverflow: Value for epsilon in Python的链接。

显然,如果你理解这个术语与这个概念的关系,那将会有所帮助。