x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t}\begin{array}{l}
\mathbf{if}\;a \le -1.303506817302349080455228760291567734794 \cdot 10^{-200} \lor \neg \left(a \le 8.391913332199526304901558027644248232146 \cdot 10^{-123}\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 r372193 = x;
double r372194 = y;
double r372195 = r372194 - r372193;
double r372196 = z;
double r372197 = t;
double r372198 = r372196 - r372197;
double r372199 = r372195 * r372198;
double r372200 = a;
double r372201 = r372200 - r372197;
double r372202 = r372199 / r372201;
double r372203 = r372193 + r372202;
return r372203;
}
double f(double x, double y, double z, double t, double a) {
double r372204 = a;
double r372205 = -1.3035068173023491e-200;
bool r372206 = r372204 <= r372205;
double r372207 = 8.391913332199526e-123;
bool r372208 = r372204 <= r372207;
double r372209 = !r372208;
bool r372210 = r372206 || r372209;
double r372211 = x;
double r372212 = y;
double r372213 = r372212 - r372211;
double r372214 = t;
double r372215 = r372204 - r372214;
double r372216 = z;
double r372217 = r372216 - r372214;
double r372218 = r372215 / r372217;
double r372219 = r372213 / r372218;
double r372220 = r372211 + r372219;
double r372221 = r372211 * r372216;
double r372222 = r372221 / r372214;
double r372223 = r372212 + r372222;
double r372224 = r372216 * r372212;
double r372225 = r372224 / r372214;
double r372226 = r372223 - r372225;
double r372227 = r372210 ? r372220 : r372226;
return r372227;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 24.0 |
|---|---|
| Target | 9.3 |
| Herbie | 10.4 |
if a < -1.3035068173023491e-200 or 8.391913332199526e-123 < a Initial program 22.8
rmApplied associate-/l*9.6
if -1.3035068173023491e-200 < a < 8.391913332199526e-123Initial program 28.3
Taylor expanded around inf 13.7
Final simplification10.4
herbie shell --seed 2019298
(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))))