x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t}\begin{array}{l}
\mathbf{if}\;a \le -1.957149557496558218367445688194546540827 \cdot 10^{-126} \lor \neg \left(a \le 4.003498980487542433224415809653995536148 \cdot 10^{-122}\right):\\
\;\;\;\;x + \frac{y - x}{\left(a - t\right) \cdot \frac{1}{z - t}}\\
\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 r683692 = x;
double r683693 = y;
double r683694 = r683693 - r683692;
double r683695 = z;
double r683696 = t;
double r683697 = r683695 - r683696;
double r683698 = r683694 * r683697;
double r683699 = a;
double r683700 = r683699 - r683696;
double r683701 = r683698 / r683700;
double r683702 = r683692 + r683701;
return r683702;
}
double f(double x, double y, double z, double t, double a) {
double r683703 = a;
double r683704 = -1.9571495574965582e-126;
bool r683705 = r683703 <= r683704;
double r683706 = 4.0034989804875424e-122;
bool r683707 = r683703 <= r683706;
double r683708 = !r683707;
bool r683709 = r683705 || r683708;
double r683710 = x;
double r683711 = y;
double r683712 = r683711 - r683710;
double r683713 = t;
double r683714 = r683703 - r683713;
double r683715 = 1.0;
double r683716 = z;
double r683717 = r683716 - r683713;
double r683718 = r683715 / r683717;
double r683719 = r683714 * r683718;
double r683720 = r683712 / r683719;
double r683721 = r683710 + r683720;
double r683722 = r683710 * r683716;
double r683723 = r683722 / r683713;
double r683724 = r683711 + r683723;
double r683725 = r683716 * r683711;
double r683726 = r683725 / r683713;
double r683727 = r683724 - r683726;
double r683728 = r683709 ? r683721 : r683727;
return r683728;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 25.0 |
|---|---|
| Target | 9.5 |
| Herbie | 10.7 |
if a < -1.9571495574965582e-126 or 4.0034989804875424e-122 < a Initial program 23.6
rmApplied associate-/l*9.5
rmApplied div-inv9.5
if -1.9571495574965582e-126 < a < 4.0034989804875424e-122Initial program 28.9
Taylor expanded around inf 14.0
Final simplification10.7
herbie shell --seed 2020001
(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))))