x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t}\begin{array}{l}
\mathbf{if}\;x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t} \le -2.153952848057346 \cdot 10^{-251} \lor \neg \left(x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t} \le 0.0\right):\\
\;\;\;\;x + \left(\frac{z}{a - t} \cdot \left(y - x\right) + \left(-\frac{t}{a - t}\right) \cdot \left(y - x\right)\right)\\
\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 r540789 = x;
double r540790 = y;
double r540791 = r540790 - r540789;
double r540792 = z;
double r540793 = t;
double r540794 = r540792 - r540793;
double r540795 = r540791 * r540794;
double r540796 = a;
double r540797 = r540796 - r540793;
double r540798 = r540795 / r540797;
double r540799 = r540789 + r540798;
return r540799;
}
double f(double x, double y, double z, double t, double a) {
double r540800 = x;
double r540801 = y;
double r540802 = r540801 - r540800;
double r540803 = z;
double r540804 = t;
double r540805 = r540803 - r540804;
double r540806 = r540802 * r540805;
double r540807 = a;
double r540808 = r540807 - r540804;
double r540809 = r540806 / r540808;
double r540810 = r540800 + r540809;
double r540811 = -2.153952848057346e-251;
bool r540812 = r540810 <= r540811;
double r540813 = 0.0;
bool r540814 = r540810 <= r540813;
double r540815 = !r540814;
bool r540816 = r540812 || r540815;
double r540817 = r540803 / r540808;
double r540818 = r540817 * r540802;
double r540819 = r540804 / r540808;
double r540820 = -r540819;
double r540821 = r540820 * r540802;
double r540822 = r540818 + r540821;
double r540823 = r540800 + r540822;
double r540824 = r540800 * r540803;
double r540825 = r540824 / r540804;
double r540826 = r540801 + r540825;
double r540827 = r540803 * r540801;
double r540828 = r540827 / r540804;
double r540829 = r540826 - r540828;
double r540830 = r540816 ? r540823 : r540829;
return r540830;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 24.5 |
|---|---|
| Target | 9.2 |
| Herbie | 8.7 |
if (+ x (/ (* (- y x) (- z t)) (- a t))) < -2.153952848057346e-251 or 0.0 < (+ x (/ (* (- y x) (- z t)) (- a t))) Initial program 21.6
rmApplied *-un-lft-identity21.6
Applied times-frac7.5
Simplified7.5
rmApplied div-sub7.5
rmApplied sub-neg7.5
Applied distribute-lft-in7.5
Simplified7.5
Simplified7.5
if -2.153952848057346e-251 < (+ x (/ (* (- y x) (- z t)) (- a t))) < 0.0Initial program 55.8
Taylor expanded around inf 22.3
Final simplification8.7
herbie shell --seed 2020046
(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))))