【问题标题】:Value for epsilon in PythonPython 中 epsilon 的值
【发布时间】:2012-03-20 16:02:35
【问题描述】:

Python 中的 epsilon 是否有标准值(或获取方法)?我需要比较浮点值并希望与可能的最小差异进行比较。

在 C++ 中,提供了一个函数 numeric_limits::epsilon( ),它为任何给定数据类型提供 epsilon 值。 Python中是否有等价物?

【问题讨论】:

  • 比较浮点数时,值的大小会影响epsilon。
  • 还要考虑值中的错误可以跨操作传播。 “数值分析”领域专门研究这一点。 This 网站也提供了一些好的规则来遵循。
  • 以上面人的评论为例,1e300-(1e300-1e200)返回0.0,实际差值一定是10^200。

标签: python comparison floating-point epsilon


【解决方案1】:

信息在sys.float_info,对应C99中的float.h。

>>> import sys
>>> sys.float_info.epsilon
2.220446049250313e-16

【讨论】:

    【解决方案2】:

    作为strcat posted,有sys.float_info.epsilon

    但不要忘记将其用作浮点比较的绝对误差范围的陷阱。例如。对于大数,舍入误差可能会超过 epsilon。

    如果您认为需要复习,标准参考是 David Goldberg 的 What Every Computer Scientist Should Know About Floating-Point Arithmetic,或者您可以查看 The Floating Point Guide 进行更简单的审查。

    【讨论】:

      【解决方案3】:

      如果您找不到执行此操作的函数,请记住计算机器 epsilon 的算法非常简单(您可以使用您喜欢的编程语言进行测试)。例如,对于 python:

      eps = 1.0
      while eps + 1 > 1:
          eps /= 2
      eps *= 2
      print("The machine epsilon is:", eps)
      

      就我而言,我得到了:

      The machine epsilon is: 2.220446049250313e-16

      【讨论】:

      • 生成 eps 的好方法,但为什么称它为机器精度?
      • @gfdsal:谢谢,我认为 machine epsilon 应该是准确的术语。
      【解决方案4】:

      很惊讶这里没有人提到这个;我想很多人会改用numpy.finfo( type(variable) ).eps。或者.resolution,如果是为了评估精度。

      请注意,finfo 仅适用于浮点类型,并且它也适用于 Python 自己的 float 类型(即不限于 numpy 的类型)。整数类型的等价物是 iinfo,尽管它不包含精度信息(因为,嗯,为什么会这样?)。

      【讨论】:

      • 不同意“大多数人”:不是每个人都使用 NumPy。如果您想要 Pythonfloat 的 epsilon,请使用 sys.float_info;仅仅为此使用 NumPy 会很奇怪。如果您需要 NumPy 类型(np.float32np.float64 等)的值,请使用 numpy.finfo
      • 更改了措辞。不过要澄清一下,np.finfo(float) 确实 工作,但我同意如果你从不使用 numpy,那么为此安装包将是矫枉过正。
      • 是的,但是np.finfo(float) 有点误导,因为 NumPy immediately convertsfloat 转换为 np.float64,然后报告详细信息。所以它再次报告 NumPy 类型,而不是 Python 的 float。 (尽管不可否认,floatnp.float64 的格式很可能是相同的:它们都在底层使用 C 双精度。)
      猜你喜欢
      • 2014-06-05
      • 2016-04-09
      • 2013-10-09
      • 2023-03-31
      • 2015-06-24
      • 2018-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多