繁体   English   中英

Python中最小的数字

[英]Smallest Number in Python

问题陈述:写一个Python脚本来确定Python中最小的正双数。

您的代码应该生成一个名为smallest_num的变量,这是Python中最小的双精度数。

您的脚本应以系统的方式确定此值。 不能简单地调用返回此值的内置函数或访问包含此信息的内置变量。 这包括np.finfo()和其他内置函数或变量。

设置代码提供以下变量:

您的代码段应定义以下变量:

名称类型描述

smallest_num浮点Python中可能的最小数字

试图解决方案

import numpy as np
import math

def machineEpsilon(func=float):
    machine_epsilon = func(1)
    while func(1)+func(machine_epsilon) != func(1):
        machine_epsilon_last = machine_epsilon
        machine_epsilon = func(machine_epsilon) / func(2)
    return machine_epsilon_last

sum_f = machineEpsilon(np.float64)

smallest_sum = float(sum_f)
print(isinstance(smallest_sum, float))
print(smallest_sum)

输出真实2.220446049250313e-16

但是,我无法得到正确的答案。 因为真正的最小数字远小于印刷值。 我知道这个数字会下溢到零,我可能想在这里做一些比较。 但我有点卡住了。 有什么想法吗?

可能最合理的做法是直接计算0.0后的下一个双精度浮点数:

smallest_num = np.nextafter(0, 1)

这不是简单地调用返回最小正双精度浮点数的内置函数,或者访问预先设置为该值的变量。 然而,当人们在这样的问题中看到函数调用语法时,人们会变得很奇怪,因此无论如何都有可能被标记为错误。

利用IEEE754浮点表示和舍入的工作原理,我们可以从1.0开始除以2直到下一个除法下溢:

smallest_num = 1.0
while smallest_num / 2:
    smallest_num /= 2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM