\left(x + y\right) - \frac{\left(z - t\right) \cdot y}{a - t}\begin{array}{l}
\mathbf{if}\;t \le -2.779827711068164583616374224793799672309 \cdot 10^{85} \lor \neg \left(t \le 5.547130691672522804697196022043674214808 \cdot 10^{55}\right):\\
\;\;\;\;\mathsf{fma}\left(\frac{z}{t}, y, x\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{1}{\frac{1}{\sqrt[3]{t - z} \cdot \sqrt[3]{t - z}}}, \frac{y}{\frac{a}{\sqrt[3]{t - z}} - \frac{t}{\sqrt[3]{t - z}}}, x + y\right)\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r345220 = x;
double r345221 = y;
double r345222 = r345220 + r345221;
double r345223 = z;
double r345224 = t;
double r345225 = r345223 - r345224;
double r345226 = r345225 * r345221;
double r345227 = a;
double r345228 = r345227 - r345224;
double r345229 = r345226 / r345228;
double r345230 = r345222 - r345229;
return r345230;
}
double f(double x, double y, double z, double t, double a) {
double r345231 = t;
double r345232 = -2.7798277110681646e+85;
bool r345233 = r345231 <= r345232;
double r345234 = 5.547130691672523e+55;
bool r345235 = r345231 <= r345234;
double r345236 = !r345235;
bool r345237 = r345233 || r345236;
double r345238 = z;
double r345239 = r345238 / r345231;
double r345240 = y;
double r345241 = x;
double r345242 = fma(r345239, r345240, r345241);
double r345243 = 1.0;
double r345244 = r345231 - r345238;
double r345245 = cbrt(r345244);
double r345246 = r345245 * r345245;
double r345247 = r345243 / r345246;
double r345248 = r345243 / r345247;
double r345249 = a;
double r345250 = r345249 / r345245;
double r345251 = r345231 / r345245;
double r345252 = r345250 - r345251;
double r345253 = r345240 / r345252;
double r345254 = r345241 + r345240;
double r345255 = fma(r345248, r345253, r345254);
double r345256 = r345237 ? r345242 : r345255;
return r345256;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 16.7 |
|---|---|
| Target | 8.3 |
| Herbie | 8.4 |
if t < -2.7798277110681646e+85 or 5.547130691672523e+55 < t Initial program 29.2
Simplified19.8
Taylor expanded around inf 18.0
Simplified13.0
if -2.7798277110681646e+85 < t < 5.547130691672523e+55Initial program 7.6
Simplified5.8
rmApplied clear-num5.8
rmApplied div-sub5.8
rmApplied fma-udef5.8
Simplified5.6
rmApplied add-cube-cbrt5.7
Applied *-un-lft-identity5.7
Applied times-frac5.7
Applied add-cube-cbrt5.8
Applied *-un-lft-identity5.8
Applied times-frac5.8
Applied distribute-lft-out--5.8
Applied *-un-lft-identity5.8
Applied times-frac5.0
Applied fma-def5.0
Final simplification8.4
herbie shell --seed 2019347 +o rules:numerics
(FPCore (x y z t a)
:name "Graphics.Rendering.Plot.Render.Plot.Axis:renderAxisTick from plot-0.2.3.4, B"
:precision binary64
:herbie-target
(if (< (- (+ x y) (/ (* (- z t) y) (- a t))) -1.3664970889390727e-07) (- (+ y x) (* (* (- z t) (/ 1 (- a t))) y)) (if (< (- (+ x y) (/ (* (- z t) y) (- a t))) 1.4754293444577233e-239) (/ (- (* y (- a z)) (* x t)) (- a t)) (- (+ y x) (* (* (- z t) (/ 1 (- a t))) y))))
(- (+ x y) (/ (* (- z t) y) (- a t))))