Average Error: 1.8 → 2.9
Time: 5.7m
Precision: 64
Internal Precision: 1152
\[x \cdot e^{y \cdot \left(\log z - t\right) + a \cdot \left(\log \left(1.0 - z\right) - b\right)}\]
\[\begin{array}{l} \mathbf{if}\;x \le 6.162182387522347 \cdot 10^{-283}:\\ \;\;\;\;\left(x \cdot e^{\left(\log \left(1.0 - z\right) - b\right) \cdot a}\right) \cdot e^{y \cdot \left(\log z - t\right)}\\ \mathbf{else}:\\ \;\;\;\;e^{\left(\log x + \left(\log z - t\right) \cdot y\right) + a \cdot \left(\log \left(1.0 - z\right) - b\right)}\\ \end{array}\]

Error

Bits error versus x

Bits error versus y

Bits error versus z

Bits error versus t

Bits error versus a

Bits error versus b

Target

Original1.8
Target1.8
Herbie2.9
\[x \cdot e^{y \cdot \left(\log z - t\right) + a \cdot \left(\log \left(1.0 - z\right) - b\right)}\]

Derivation

  1. Split input into 2 regimes
  2. if x < 6.162182387522347e-283

    1. Initial program 1.6

      \[x \cdot e^{y \cdot \left(\log z - t\right) + a \cdot \left(\log \left(1.0 - z\right) - b\right)}\]
    2. Applied simplify18.8

      \[\leadsto \color{blue}{\left(x \cdot {\left(\frac{1.0 - z}{e^{b}}\right)}^{a}\right) \cdot {\left(\frac{z}{e^{t}}\right)}^{y}}\]
    3. Using strategy rm
    4. Applied add-exp-log18.8

      \[\leadsto \left(x \cdot {\left(\frac{\color{blue}{e^{\log \left(1.0 - z\right)}}}{e^{b}}\right)}^{a}\right) \cdot {\left(\frac{z}{e^{t}}\right)}^{y}\]
    5. Applied div-exp18.8

      \[\leadsto \left(x \cdot {\color{blue}{\left(e^{\log \left(1.0 - z\right) - b}\right)}}^{a}\right) \cdot {\left(\frac{z}{e^{t}}\right)}^{y}\]
    6. Applied pow-exp10.9

      \[\leadsto \left(x \cdot \color{blue}{e^{\left(\log \left(1.0 - z\right) - b\right) \cdot a}}\right) \cdot {\left(\frac{z}{e^{t}}\right)}^{y}\]
    7. Using strategy rm
    8. Applied add-exp-log10.9

      \[\leadsto \left(x \cdot e^{\left(\log \left(1.0 - z\right) - b\right) \cdot a}\right) \cdot {\color{blue}{\left(e^{\log \left(\frac{z}{e^{t}}\right)}\right)}}^{y}\]
    9. Applied pow-exp10.9

      \[\leadsto \left(x \cdot e^{\left(\log \left(1.0 - z\right) - b\right) \cdot a}\right) \cdot \color{blue}{e^{\log \left(\frac{z}{e^{t}}\right) \cdot y}}\]
    10. Applied simplify2.3

      \[\leadsto \left(x \cdot e^{\left(\log \left(1.0 - z\right) - b\right) \cdot a}\right) \cdot e^{\color{blue}{y \cdot \left(\log z - t\right)}}\]

    if 6.162182387522347e-283 < x

    1. Initial program 1.9

      \[x \cdot e^{y \cdot \left(\log z - t\right) + a \cdot \left(\log \left(1.0 - z\right) - b\right)}\]
    2. Applied simplify22.4

      \[\leadsto \color{blue}{\left(x \cdot {\left(\frac{1.0 - z}{e^{b}}\right)}^{a}\right) \cdot {\left(\frac{z}{e^{t}}\right)}^{y}}\]
    3. Using strategy rm
    4. Applied add-exp-log22.4

      \[\leadsto \left(x \cdot {\left(\frac{1.0 - z}{e^{b}}\right)}^{a}\right) \cdot {\color{blue}{\left(e^{\log \left(\frac{z}{e^{t}}\right)}\right)}}^{y}\]
    5. Applied pow-exp22.4

      \[\leadsto \left(x \cdot {\left(\frac{1.0 - z}{e^{b}}\right)}^{a}\right) \cdot \color{blue}{e^{\log \left(\frac{z}{e^{t}}\right) \cdot y}}\]
    6. Applied add-exp-log23.2

      \[\leadsto \color{blue}{e^{\log \left(x \cdot {\left(\frac{1.0 - z}{e^{b}}\right)}^{a}\right)}} \cdot e^{\log \left(\frac{z}{e^{t}}\right) \cdot y}\]
    7. Applied prod-exp21.8

      \[\leadsto \color{blue}{e^{\log \left(x \cdot {\left(\frac{1.0 - z}{e^{b}}\right)}^{a}\right) + \log \left(\frac{z}{e^{t}}\right) \cdot y}}\]
    8. Applied simplify3.6

      \[\leadsto e^{\color{blue}{\left(\log x + \left(\log z - t\right) \cdot y\right) + a \cdot \left(\log \left(1.0 - z\right) - b\right)}}\]
  3. Recombined 2 regimes into one program.
  4. Removed slow pow expressions.

Runtime

Time bar (total: 5.7m)Debug log

herbie shell --seed '#(1567391828 2030694642 2833800258 828025724 3004380912 3532991858)' +o setup:early-exit +o reduce:binary-search
(FPCore (x y z t a b)
  :name "Numeric.SpecFunctions:incompleteBetaApprox from math-functions-0.1.5.2, B"

  :herbie-target
  (* x (exp (+ (* y (- (log z) t)) (* a (- (log (- 1.0 z)) b)))))

  (* x (exp (+ (* y (- (log z) t)) (* a (- (log (- 1.0 z)) b))))))