x + \left(y - x\right) \cdot \frac{z}{t}\begin{array}{l}
\mathbf{if}\;t \le -2.00668391931767575 \cdot 10^{34} \lor \neg \left(t \le 3.16207688033320828 \cdot 10^{29}\right):\\
\;\;\;\;x + \frac{z}{\frac{t}{y - x}}\\
\mathbf{else}:\\
\;\;\;\;x + \frac{\left(y - x\right) \cdot z}{t}\\
\end{array}double f(double x, double y, double z, double t) {
double r680193 = x;
double r680194 = y;
double r680195 = r680194 - r680193;
double r680196 = z;
double r680197 = t;
double r680198 = r680196 / r680197;
double r680199 = r680195 * r680198;
double r680200 = r680193 + r680199;
return r680200;
}
double f(double x, double y, double z, double t) {
double r680201 = t;
double r680202 = -2.0066839193176758e+34;
bool r680203 = r680201 <= r680202;
double r680204 = 3.1620768803332083e+29;
bool r680205 = r680201 <= r680204;
double r680206 = !r680205;
bool r680207 = r680203 || r680206;
double r680208 = x;
double r680209 = z;
double r680210 = y;
double r680211 = r680210 - r680208;
double r680212 = r680201 / r680211;
double r680213 = r680209 / r680212;
double r680214 = r680208 + r680213;
double r680215 = r680211 * r680209;
double r680216 = r680215 / r680201;
double r680217 = r680208 + r680216;
double r680218 = r680207 ? r680214 : r680217;
return r680218;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 1.9 |
|---|---|
| Target | 2.1 |
| Herbie | 1.5 |
if t < -2.0066839193176758e+34 or 3.1620768803332083e+29 < t Initial program 1.1
Taylor expanded around 0 10.3
Simplified1.2
if -2.0066839193176758e+34 < t < 3.1620768803332083e+29Initial program 3.0
rmApplied associate-*r/1.8
Final simplification1.5
herbie shell --seed 2020042
(FPCore (x y z t)
:name "Graphics.Rendering.Plot.Render.Plot.Axis:tickPosition from plot-0.2.3.4"
:precision binary64
:herbie-target
(if (< (* (- y x) (/ z t)) -1013646692435.887) (+ 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))))