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):\\
\;\;\;\;\left(x + \frac{z}{a - t} \cdot \left(y - x\right)\right) + \left(y - x\right) \cdot \left(-\frac{\frac{t}{\sqrt[3]{a - t} \cdot \sqrt[3]{a - t}}}{\sqrt[3]{a - t}}\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 r751032 = x;
double r751033 = y;
double r751034 = r751033 - r751032;
double r751035 = z;
double r751036 = t;
double r751037 = r751035 - r751036;
double r751038 = r751034 * r751037;
double r751039 = a;
double r751040 = r751039 - r751036;
double r751041 = r751038 / r751040;
double r751042 = r751032 + r751041;
return r751042;
}
double f(double x, double y, double z, double t, double a) {
double r751043 = x;
double r751044 = y;
double r751045 = r751044 - r751043;
double r751046 = z;
double r751047 = t;
double r751048 = r751046 - r751047;
double r751049 = r751045 * r751048;
double r751050 = a;
double r751051 = r751050 - r751047;
double r751052 = r751049 / r751051;
double r751053 = r751043 + r751052;
double r751054 = -2.153952848057346e-251;
bool r751055 = r751053 <= r751054;
double r751056 = 0.0;
bool r751057 = r751053 <= r751056;
double r751058 = !r751057;
bool r751059 = r751055 || r751058;
double r751060 = r751046 / r751051;
double r751061 = r751060 * r751045;
double r751062 = r751043 + r751061;
double r751063 = cbrt(r751051);
double r751064 = r751063 * r751063;
double r751065 = r751047 / r751064;
double r751066 = r751065 / r751063;
double r751067 = -r751066;
double r751068 = r751045 * r751067;
double r751069 = r751062 + r751068;
double r751070 = r751043 * r751046;
double r751071 = r751070 / r751047;
double r751072 = r751044 + r751071;
double r751073 = r751046 * r751044;
double r751074 = r751073 / r751047;
double r751075 = r751072 - r751074;
double r751076 = r751059 ? r751069 : r751075;
return r751076;
}




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 | 9.1 |
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
Applied associate-+r+7.5
Simplified7.5
rmApplied add-cube-cbrt7.8
Applied associate-/r*7.8
if -2.153952848057346e-251 < (+ x (/ (* (- y x) (- z t)) (- a t))) < 0.0Initial program 55.8
Taylor expanded around inf 22.3
Final simplification9.1
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))))