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 -8.236707572209711538125694934855866174229 \cdot 10^{-288}:\\
\;\;\;\;x + \frac{y - x}{\frac{a}{z - t} - \frac{t}{z - t}}\\
\mathbf{elif}\;x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t} \le 0.0:\\
\;\;\;\;\left(y + \frac{x \cdot z}{t}\right) - \frac{z \cdot y}{t}\\
\mathbf{else}:\\
\;\;\;\;x + \left(y - x\right) \cdot \frac{z - t}{a - t}\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r557687 = x;
double r557688 = y;
double r557689 = r557688 - r557687;
double r557690 = z;
double r557691 = t;
double r557692 = r557690 - r557691;
double r557693 = r557689 * r557692;
double r557694 = a;
double r557695 = r557694 - r557691;
double r557696 = r557693 / r557695;
double r557697 = r557687 + r557696;
return r557697;
}
double f(double x, double y, double z, double t, double a) {
double r557698 = x;
double r557699 = y;
double r557700 = r557699 - r557698;
double r557701 = z;
double r557702 = t;
double r557703 = r557701 - r557702;
double r557704 = r557700 * r557703;
double r557705 = a;
double r557706 = r557705 - r557702;
double r557707 = r557704 / r557706;
double r557708 = r557698 + r557707;
double r557709 = -8.236707572209712e-288;
bool r557710 = r557708 <= r557709;
double r557711 = r557705 / r557703;
double r557712 = r557702 / r557703;
double r557713 = r557711 - r557712;
double r557714 = r557700 / r557713;
double r557715 = r557698 + r557714;
double r557716 = 0.0;
bool r557717 = r557708 <= r557716;
double r557718 = r557698 * r557701;
double r557719 = r557718 / r557702;
double r557720 = r557699 + r557719;
double r557721 = r557701 * r557699;
double r557722 = r557721 / r557702;
double r557723 = r557720 - r557722;
double r557724 = r557703 / r557706;
double r557725 = r557700 * r557724;
double r557726 = r557698 + r557725;
double r557727 = r557717 ? r557723 : r557726;
double r557728 = r557710 ? r557715 : r557727;
return r557728;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 25.2 |
|---|---|
| Target | 9.4 |
| Herbie | 8.5 |
if (+ x (/ (* (- y x) (- z t)) (- a t))) < -8.236707572209712e-288Initial program 21.4
rmApplied associate-/l*7.3
rmApplied div-sub7.3
if -8.236707572209712e-288 < (+ x (/ (* (- y x) (- z t)) (- a t))) < 0.0Initial program 59.7
Taylor expanded around inf 17.6
if 0.0 < (+ x (/ (* (- y x) (- z t)) (- a t))) Initial program 22.9
rmApplied *-un-lft-identity22.9
Applied times-frac8.2
Simplified8.2
Final simplification8.5
herbie shell --seed 2019322
(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.7744031700831742e-182) (- y (* (/ z t) (- y x))) (+ x (* (/ (- y x) 1) (/ (- z t) (- a t))))))
(+ x (/ (* (- y x) (- z t)) (- a t))))