python - Python中的最小数
问题描述
问题陈述:编写一个 Python 脚本来确定 Python 中最小的正双精度数。
您的代码应该生成一个名为 minimum_num 的变量,它是 Python 中最小的双精度数。
您的脚本应该以系统的方式确定该值。您不能简单地调用返回此值的内置函数或访问包含此信息的内置变量。这包括 np.finfo() 和其他内置函数或变量。
设置代码提供以下变量:
您的代码片段应定义以下变量:
名称 类型 描述
minimum_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
推荐阅读
- c# - c# 对象在 Visual Studio 的 Locals 中可见,但在代码中不可用
- javascript - 获取 REST API 的错误请求响应
- javascript - 删除其他类时添加javascript类后播放CSS动画不播放
- angular - Angular 应用程序编译成功后呈现一个空白页面
- css - 图片未显示在 WooCommerce 单一产品页面上
- flutter - Flutter ProgressDialog 隐藏
- ghost-blog - 如何在 Ghost 中获取内部标签帖子
- c# - C#如何循环遍历列表的所有元素
- c++ - 使用 sprintf 附加到 char 数组
- django - “ImageField”对象没有属性“value_from_datadict”