Average Error: 13.5 → 0.9
Time: 3.9s
Precision: binary64
\[\]
\[\]

Error

Bits error versus wj

Bits error versus x

Target

Original13.5
Target13.0
Herbie0.9
\[\]

Derivation

  1. Split input into 2 regimes
  2. if wj < 4.47640317399307113e-9

    1. Initial program 13.2

      \[\]
    2. Simplified13.2

      \[\leadsto \]
    3. Taylor expanded around 0 0.8

      \[\leadsto \]
    4. Simplified0.9

      \[\leadsto \]

    if 4.47640317399307113e-9 < wj

    1. Initial program 24.6

      \[\]
    2. Simplified3.1

      \[\leadsto \]
    3. Using strategy rm
    4. Applied div-inv3.1

      \[\leadsto \]
    5. Simplified3.1

      \[\leadsto \]
  3. Recombined 2 regimes into one program.
  4. Final simplification0.9

    \[\leadsto \]

Reproduce

herbie shell --seed 2020191 
(FPCore (wj x)
  :name "Jmat.Real.lambertw, newton loop step"
  :precision binary64

  :herbie-target
  (- wj (- (/ wj (+ wj 1.0)) (/ x (+ (exp wj) (* wj (exp wj))))))

  (- wj (/ (- (* wj (exp wj)) x) (+ (exp wj) (* wj (exp wj))))))