代码之家  ›  专栏  ›  技术社区  ›  qaisjp

为什么是np。nextafter(0,1)不等于float64ε值?

  •  0
  • qaisjp  · 技术社区  · 7 年前

    这太奇怪了!

    NPnextafter返回0之后的最小数字。这不应该等于float64ε吗?

    In [25]: np.nextafter(0, 1).dtype == np.finfo(np.float64).eps.dtype
    Out[25]: True
    
    In [26]: np.nextafter(0, 1) < np.finfo(np.float64).eps
    Out[26]: True
    
    2 回复  |  直到 7 年前
        1
  •  5
  •   Warren Weckesser    7 年前

    float64ε是相对于1.0计算的。是的 以64位浮点表示的最小正数。

    要查找它,请使用 np.nextafter() 使用 np.nextafter(1, 2) - 1 :

    In [215]: np.nextafter(1, 2) - 1
    Out[215]: 2.220446049250313e-16
    
    In [216]: np.finfo(np.float64).eps
    Out[216]: 2.220446049250313e-16
    
        2
  •  0
  •   Eric Postpischil    7 年前

    浮点数包括:

    • 符号:+或“-”。
    • 一些数字 N 某个基数中的位数 B ,包括小数点或小数点: D 0 D 1. D 2. D 第3页 –Ω D (n) (1)
    • 基地 B 提高到一定程度 E : B E

    符号应用于数字,结果乘以 B E ,因此整数为± D 0 D 1. D 第2页 D 3. –Ω D (n) (1) -1美分 B E .在计算方面, B 通常为2,表示每个数字都是一位。在通用IEEE-754基本64位二进制浮点格式中, N 是53。

    所谓的机器ε是 D (n) (1) 当指数 E 为0。换句话说,机器ε为+0.0001 B 0 ,等于 B ( N (1) 。对于常见的64位格式,这是2 52

    在任何浮点格式中,都有一个最小值 E 允许有(因为它必须适合为其保留的位字段)。对于常见的64位格式,这是–1022。因此,这种格式的浮点数可以具有的最小正值是+0.000–1–1 2. 1022 .等于2 52 2. 1022 =2 1074

    换句话说,机器epsilon告诉您接近1的浮点数的步长。步长取决于指数,因此数字越大步长越大,数字越小步长越小。接近零,步长为2 1074