x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t}\begin{array}{l}
\mathbf{if}\;a \le -3.4945496151903939 \cdot 10^{-151} \lor \neg \left(a \le 5.59941823364136278 \cdot 10^{-170}\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 r689847 = x;
double r689848 = y;
double r689849 = r689848 - r689847;
double r689850 = z;
double r689851 = t;
double r689852 = r689850 - r689851;
double r689853 = r689849 * r689852;
double r689854 = a;
double r689855 = r689854 - r689851;
double r689856 = r689853 / r689855;
double r689857 = r689847 + r689856;
return r689857;
}
double f(double x, double y, double z, double t, double a) {
double r689858 = a;
double r689859 = -3.494549615190394e-151;
bool r689860 = r689858 <= r689859;
double r689861 = 5.599418233641363e-170;
bool r689862 = r689858 <= r689861;
double r689863 = !r689862;
bool r689864 = r689860 || r689863;
double r689865 = x;
double r689866 = y;
double r689867 = r689866 - r689865;
double r689868 = z;
double r689869 = t;
double r689870 = r689868 - r689869;
double r689871 = r689858 - r689869;
double r689872 = r689870 / r689871;
double r689873 = r689867 * r689872;
double r689874 = r689865 + r689873;
double r689875 = r689865 * r689868;
double r689876 = r689875 / r689869;
double r689877 = r689866 + r689876;
double r689878 = r689868 * r689866;
double r689879 = r689878 / r689869;
double r689880 = r689877 - r689879;
double r689881 = r689864 ? r689874 : r689880;
return r689881;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 24.6 |
|---|---|
| Target | 9.1 |
| Herbie | 10.1 |
if a < -3.494549615190394e-151 or 5.599418233641363e-170 < a Initial program 23.2
rmApplied *-un-lft-identity23.2
Applied times-frac9.4
Simplified9.4
if -3.494549615190394e-151 < a < 5.599418233641363e-170Initial program 29.7
Taylor expanded around inf 12.8
Final simplification10.1
herbie shell --seed 2020027
(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))))