x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t}\begin{array}{l}
\mathbf{if}\;a \le -2.766011212036650170966031009633619175096 \cdot 10^{-223} \lor \neg \left(a \le 2.631683075691333687052658508933688075174 \cdot 10^{-195}\right):\\
\;\;\;\;x + \left(y - x\right) \cdot \frac{z - t}{a - 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 r700827 = x;
double r700828 = y;
double r700829 = r700828 - r700827;
double r700830 = z;
double r700831 = t;
double r700832 = r700830 - r700831;
double r700833 = r700829 * r700832;
double r700834 = a;
double r700835 = r700834 - r700831;
double r700836 = r700833 / r700835;
double r700837 = r700827 + r700836;
return r700837;
}
double f(double x, double y, double z, double t, double a) {
double r700838 = a;
double r700839 = -2.76601121203665e-223;
bool r700840 = r700838 <= r700839;
double r700841 = 2.6316830756913337e-195;
bool r700842 = r700838 <= r700841;
double r700843 = !r700842;
bool r700844 = r700840 || r700843;
double r700845 = x;
double r700846 = y;
double r700847 = r700846 - r700845;
double r700848 = z;
double r700849 = t;
double r700850 = r700848 - r700849;
double r700851 = r700838 - r700849;
double r700852 = r700850 / r700851;
double r700853 = r700847 * r700852;
double r700854 = r700845 + r700853;
double r700855 = r700845 * r700848;
double r700856 = r700855 / r700849;
double r700857 = r700846 + r700856;
double r700858 = r700848 * r700846;
double r700859 = r700858 / r700849;
double r700860 = r700857 - r700859;
double r700861 = r700844 ? r700854 : r700860;
return r700861;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 24.4 |
|---|---|
| Target | 9.1 |
| Herbie | 10.4 |
if a < -2.76601121203665e-223 or 2.6316830756913337e-195 < a Initial program 23.6
rmApplied *-un-lft-identity23.6
Applied times-frac10.5
Simplified10.5
if -2.76601121203665e-223 < a < 2.6316830756913337e-195Initial program 29.5
Taylor expanded around inf 10.0
Final simplification10.4
herbie shell --seed 2019354
(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))))