x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t}\begin{array}{l}
\mathbf{if}\;x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t} \le -5.94158773471745396 \cdot 10^{-307} \lor \neg \left(x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t} \le 0.0\right):\\
\;\;\;\;\left(y - x\right) \cdot \frac{z - t}{a - t} + x\\
\mathbf{else}:\\
\;\;\;\;\left(y + \frac{x \cdot z}{t}\right) - \frac{z \cdot y}{t}\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r563687 = x;
double r563688 = y;
double r563689 = r563688 - r563687;
double r563690 = z;
double r563691 = t;
double r563692 = r563690 - r563691;
double r563693 = r563689 * r563692;
double r563694 = a;
double r563695 = r563694 - r563691;
double r563696 = r563693 / r563695;
double r563697 = r563687 + r563696;
return r563697;
}
double f(double x, double y, double z, double t, double a) {
double r563698 = x;
double r563699 = y;
double r563700 = r563699 - r563698;
double r563701 = z;
double r563702 = t;
double r563703 = r563701 - r563702;
double r563704 = r563700 * r563703;
double r563705 = a;
double r563706 = r563705 - r563702;
double r563707 = r563704 / r563706;
double r563708 = r563698 + r563707;
double r563709 = -5.941587734717454e-307;
bool r563710 = r563708 <= r563709;
double r563711 = 0.0;
bool r563712 = r563708 <= r563711;
double r563713 = !r563712;
bool r563714 = r563710 || r563713;
double r563715 = r563703 / r563706;
double r563716 = r563700 * r563715;
double r563717 = r563716 + r563698;
double r563718 = r563698 * r563701;
double r563719 = r563718 / r563702;
double r563720 = r563699 + r563719;
double r563721 = r563701 * r563699;
double r563722 = r563721 / r563702;
double r563723 = r563720 - r563722;
double r563724 = r563714 ? r563717 : r563723;
return r563724;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 24.6 |
|---|---|
| Target | 9.1 |
| Herbie | 7.9 |
if (+ x (/ (* (- y x) (- z t)) (- a t))) < -5.941587734717454e-307 or 0.0 < (+ x (/ (* (- y x) (- z t)) (- a t))) Initial program 21.4
Simplified10.5
rmApplied fma-udef10.6
rmApplied div-inv10.6
Applied associate-*l*7.1
Simplified7.0
if -5.941587734717454e-307 < (+ x (/ (* (- y x) (- z t)) (- a t))) < 0.0Initial program 61.3
Simplified61.1
rmApplied fma-udef61.4
rmApplied div-inv61.3
Applied associate-*l*61.1
Simplified61.1
Taylor expanded around inf 18.2
Final simplification7.9
herbie shell --seed 2020047 +o rules:numerics
(FPCore (x y z t a)
:name "Graphics.Rendering.Chart.Axis.Types:linMap from Chart-1.5.3"
:precision binary64
:herbie-target
(if (< a -1.6153062845442575e-142) (+ x (* (/ (- y x) 1) (/ (- z t) (- a t)))) (if (< a 3.774403170083174e-182) (- y (* (/ z t) (- y x))) (+ x (* (/ (- y x) 1) (/ (- z t) (- a t))))))
(+ x (/ (* (- y x) (- z t)) (- a t))))