x + \left(y - x\right) \cdot \frac{z}{t}\begin{array}{l}
\mathbf{if}\;x \le -3.867509036970048745891178036710973818173 \cdot 10^{-290} \lor \neg \left(x \le 9.954863872437945886830732175117733893802 \cdot 10^{-260}\right):\\
\;\;\;\;x - \left(x - y\right) \cdot \frac{z}{t}\\
\mathbf{else}:\\
\;\;\;\;x - \frac{x - y}{t} \cdot z\\
\end{array}double f(double x, double y, double z, double t) {
double r376063 = x;
double r376064 = y;
double r376065 = r376064 - r376063;
double r376066 = z;
double r376067 = t;
double r376068 = r376066 / r376067;
double r376069 = r376065 * r376068;
double r376070 = r376063 + r376069;
return r376070;
}
double f(double x, double y, double z, double t) {
double r376071 = x;
double r376072 = -3.867509036970049e-290;
bool r376073 = r376071 <= r376072;
double r376074 = 9.954863872437946e-260;
bool r376075 = r376071 <= r376074;
double r376076 = !r376075;
bool r376077 = r376073 || r376076;
double r376078 = y;
double r376079 = r376071 - r376078;
double r376080 = z;
double r376081 = t;
double r376082 = r376080 / r376081;
double r376083 = r376079 * r376082;
double r376084 = r376071 - r376083;
double r376085 = r376079 / r376081;
double r376086 = r376085 * r376080;
double r376087 = r376071 - r376086;
double r376088 = r376077 ? r376084 : r376087;
return r376088;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 2.0 |
|---|---|
| Target | 2.2 |
| Herbie | 2.0 |
if x < -3.867509036970049e-290 or 9.954863872437946e-260 < x Initial program 1.7
Simplified1.7
if -3.867509036970049e-290 < x < 9.954863872437946e-260Initial program 7.1
Simplified7.1
rmApplied pow17.1
Applied pow17.1
Applied pow-prod-down7.1
Simplified7.2
rmApplied associate-/r/6.6
Final simplification2.0
herbie shell --seed 2019196
(FPCore (x y z t)
:name "Graphics.Rendering.Plot.Render.Plot.Axis:tickPosition from plot-0.2.3.4"
:herbie-target
(if (< (* (- y x) (/ z t)) -1013646692435.8867) (+ x (/ (- y x) (/ t z))) (if (< (* (- y x) (/ z t)) -0.0) (+ x (/ (* (- y x) z) t)) (+ x (/ (- y x) (/ t z)))))
(+ x (* (- y x) (/ z t))))