Average Error: 43.7 → 3.6
Time: 3.6m
Precision: 64
Internal Precision: 1408
\[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}\;y \le -3.267451223538 \cdot 10^{-46}:\\
\;\;\;\;\log \left({\left({\left(e^{x}\right)}^{\left({\left(\frac{1.0 - z}{e^{b}}\right)}^{a}\right)}\right)}^{\left({\left(\frac{z}{e^{t}}\right)}^{y}\right)}\right)\\
\mathbf{if}\;y \le 0.802860764679358:\\
\;\;\;\;\left(x \cdot e^{\left(\log \left(1.0 - z\right) - b\right) \cdot a}\right) \cdot {\left(\left(z + \frac{1}{2} \cdot \left(z \cdot {t}^{2}\right)\right) - z \cdot t\right)}^{y}\\
\mathbf{else}:\\
\;\;\;\;\log \left({\left({\left(e^{x}\right)}^{\left({\left(\frac{1.0 - z}{e^{b}}\right)}^{a}\right)}\right)}^{\left({\left(\frac{z}{e^{t}}\right)}^{y}\right)}\right)\\
\end{array}\]
Target
| Original | 43.7 |
|---|
| Target | 43.7 |
|---|
| Herbie | 3.6 |
|---|
\[x \cdot e^{y \cdot \left(\log z - t\right) + a \cdot \left(\log \left(1.0 - z\right) - b\right)}\]
Derivation
- Split input into 2 regimes
if y < -3.267451223538e-46 or 0.802860764679358 < y
Initial program 51.4
\[x \cdot e^{y \cdot \left(\log z - t\right) + a \cdot \left(\log \left(1.0 - z\right) - b\right)}\]
Applied simplify34.1
\[\leadsto \color{blue}{\left(x \cdot {\left(\frac{1.0 - z}{e^{b}}\right)}^{a}\right) \cdot {\left(\frac{z}{e^{t}}\right)}^{y}}\]
- Using strategy
rm Applied add-exp-log38.7
\[\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}\]
Applied div-exp38.7
\[\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}\]
Applied pow-exp37.6
\[\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}\]
- Using strategy
rm Applied add-log-exp37.8
\[\leadsto \color{blue}{\log \left(e^{\left(x \cdot e^{\left(\log \left(1.0 - z\right) - b\right) \cdot a}\right) \cdot {\left(\frac{z}{e^{t}}\right)}^{y}}\right)}\]
Applied simplify1.0
\[\leadsto \log \color{blue}{\left({\left({\left(e^{x}\right)}^{\left({\left(\frac{1.0 - z}{e^{b}}\right)}^{a}\right)}\right)}^{\left({\left(\frac{z}{e^{t}}\right)}^{y}\right)}\right)}\]
if -3.267451223538e-46 < y < 0.802860764679358
Initial program 12.5
\[x \cdot e^{y \cdot \left(\log z - t\right) + a \cdot \left(\log \left(1.0 - z\right) - b\right)}\]
Applied simplify33.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}}\]
Taylor expanded around 0 25.7
\[\leadsto \left(x \cdot {\left(\frac{1.0 - z}{e^{b}}\right)}^{a}\right) \cdot {\color{blue}{\left(\left(z + \frac{1}{2} \cdot \left(z \cdot {t}^{2}\right)\right) - z \cdot t\right)}}^{y}\]
- Using strategy
rm Applied add-exp-log25.7
\[\leadsto \left(x \cdot {\left(\frac{\color{blue}{e^{\log \left(1.0 - z\right)}}}{e^{b}}\right)}^{a}\right) \cdot {\left(\left(z + \frac{1}{2} \cdot \left(z \cdot {t}^{2}\right)\right) - z \cdot t\right)}^{y}\]
Applied div-exp25.7
\[\leadsto \left(x \cdot {\color{blue}{\left(e^{\log \left(1.0 - z\right) - b}\right)}}^{a}\right) \cdot {\left(\left(z + \frac{1}{2} \cdot \left(z \cdot {t}^{2}\right)\right) - z \cdot t\right)}^{y}\]
Applied pow-exp14.4
\[\leadsto \left(x \cdot \color{blue}{e^{\left(\log \left(1.0 - z\right) - b\right) \cdot a}}\right) \cdot {\left(\left(z + \frac{1}{2} \cdot \left(z \cdot {t}^{2}\right)\right) - z \cdot t\right)}^{y}\]
- Recombined 2 regimes into one program.
- Removed slow
pow expressions.
Runtime
herbie shell --seed '#(1567391828 2030694642 2833800258 828025724 3004380912 3532991858)' +o setup:early-exit
(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))))))