\frac{x \cdot e^{\left(y \cdot \log z + \left(t - 1\right) \cdot \log a\right) - b}}{y}
\begin{array}{l}
t_1 := \left(t - 1\right) \cdot \log a\\
\mathbf{if}\;t_1 \leq -283096.8059359662:\\
\;\;\;\;\frac{\mathsf{fma}\left(\log z, y, 1\right) \cdot \left({a}^{\left(t - 1\right)} \cdot x\right)}{y}\\
\mathbf{elif}\;t_1 \leq -71.88509251222985:\\
\;\;\;\;\frac{x}{a \cdot y} \cdot e^{\log z \cdot y - b}\\
\mathbf{else}:\\
\;\;\;\;\frac{x \cdot e^{\mathsf{fma}\left(\log z, y, \mathsf{fma}\left(\log a, t - 1, -b\right)\right)}}{y}\\
\end{array}
(FPCore (x y z t a b) :precision binary64 (/ (* x (exp (- (+ (* y (log z)) (* (- t 1.0) (log a))) b))) y))
(FPCore (x y z t a b)
:precision binary64
(let* ((t_1 (* (- t 1.0) (log a))))
(if (<= t_1 -283096.8059359662)
(/ (* (fma (log z) y 1.0) (* (pow a (- t 1.0)) x)) y)
(if (<= t_1 -71.88509251222985)
(* (/ x (* a y)) (exp (- (* (log z) y) b)))
(/ (* x (exp (fma (log z) y (fma (log a) (- t 1.0) (- b))))) y)))))double code(double x, double y, double z, double t, double a, double b) {
return (x * exp(((y * log(z)) + ((t - 1.0) * log(a))) - b)) / y;
}
double code(double x, double y, double z, double t, double a, double b) {
double t_1 = (t - 1.0) * log(a);
double tmp;
if (t_1 <= -283096.8059359662) {
tmp = (fma(log(z), y, 1.0) * (pow(a, (t - 1.0)) * x)) / y;
} else if (t_1 <= -71.88509251222985) {
tmp = (x / (a * y)) * exp((log(z) * y) - b);
} else {
tmp = (x * exp(fma(log(z), y, fma(log(a), (t - 1.0), -b)))) / y;
}
return tmp;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a




Bits error versus b
| Original | 1.9 |
|---|---|
| Target | 11.2 |
| Herbie | 0.9 |
if (*.f64 (-.f64 t 1) (log.f64 a)) < -283096.8059359662Initial program 0
Applied clear-num_binary640
Simplified19.2
Taylor expanded in b around 0 10.1
Simplified10.1
Taylor expanded in y around 0 0
Simplified0.1
if -283096.8059359662 < (*.f64 (-.f64 t 1) (log.f64 a)) < -71.885092512229846Initial program 6.1
Applied clear-num_binary646.2
Simplified12.1
Taylor expanded in t around 0 12.9
Simplified12.9
Taylor expanded in z around inf 8.4
Simplified2.1
if -71.885092512229846 < (*.f64 (-.f64 t 1) (log.f64 a)) Initial program 1.0
Applied add-exp-log_binary641.0
Simplified1.0
Final simplification0.9
herbie shell --seed 2022077
(FPCore (x y z t a b)
:name "Numeric.SpecFunctions:incompleteBetaWorker from math-functions-0.1.5.2, A"
:precision binary64
:herbie-target
(if (< t -0.8845848504127471) (/ (* x (/ (pow a (- t 1.0)) y)) (- (+ b 1.0) (* y (log z)))) (if (< t 852031.2288374073) (/ (* (/ x y) (pow a (- t 1.0))) (exp (- b (* (log z) y)))) (/ (* x (/ (pow a (- t 1.0)) y)) (- (+ b 1.0) (* y (log z))))))
(/ (* x (exp (- (+ (* y (log z)) (* (- t 1.0) (log a))) b))) y))