x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t}\begin{array}{l}
\mathbf{if}\;a \le -4.211820321936384636273904047695058007751 \cdot 10^{-164} \lor \neg \left(a \le 9.038357837464358105879828645568363291679 \cdot 10^{-170}\right):\\
\;\;\;\;x + \frac{y - x}{\frac{a - t}{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 r440101 = x;
double r440102 = y;
double r440103 = r440102 - r440101;
double r440104 = z;
double r440105 = t;
double r440106 = r440104 - r440105;
double r440107 = r440103 * r440106;
double r440108 = a;
double r440109 = r440108 - r440105;
double r440110 = r440107 / r440109;
double r440111 = r440101 + r440110;
return r440111;
}
double f(double x, double y, double z, double t, double a) {
double r440112 = a;
double r440113 = -4.211820321936385e-164;
bool r440114 = r440112 <= r440113;
double r440115 = 9.038357837464358e-170;
bool r440116 = r440112 <= r440115;
double r440117 = !r440116;
bool r440118 = r440114 || r440117;
double r440119 = x;
double r440120 = y;
double r440121 = r440120 - r440119;
double r440122 = t;
double r440123 = r440112 - r440122;
double r440124 = z;
double r440125 = r440124 - r440122;
double r440126 = r440123 / r440125;
double r440127 = r440121 / r440126;
double r440128 = r440119 + r440127;
double r440129 = r440119 * r440124;
double r440130 = r440129 / r440122;
double r440131 = r440120 + r440130;
double r440132 = r440124 * r440120;
double r440133 = r440132 / r440122;
double r440134 = r440131 - r440133;
double r440135 = r440118 ? r440128 : r440134;
return r440135;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 24.7 |
|---|---|
| Target | 9.6 |
| Herbie | 10.5 |
if a < -4.211820321936385e-164 or 9.038357837464358e-170 < a Initial program 23.7
rmApplied associate-/l*9.9
if -4.211820321936385e-164 < a < 9.038357837464358e-170Initial program 28.5
Taylor expanded around inf 12.7
Final simplification10.5
herbie shell --seed 2019212
(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))))