\left(x + y\right) - \frac{\left(z - t\right) \cdot y}{a - t}\begin{array}{l}
\mathbf{if}\;t \le -9.252090162115357006237294731896797375812 \cdot 10^{100} \lor \neg \left(t \le 3.516092148404992652607455309589265621051 \cdot 10^{107}\right):\\
\;\;\;\;\mathsf{fma}\left(\frac{z}{t}, y, x\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{\sqrt[3]{t - z} \cdot \sqrt[3]{t - z}}{\frac{\sqrt[3]{a - t} \cdot \sqrt[3]{a - t}}{\sqrt[3]{y} \cdot \sqrt[3]{y}}}, \frac{\sqrt[3]{t - z}}{\frac{\sqrt[3]{a - t}}{\sqrt[3]{y}}}, x + y\right)\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r602964 = x;
double r602965 = y;
double r602966 = r602964 + r602965;
double r602967 = z;
double r602968 = t;
double r602969 = r602967 - r602968;
double r602970 = r602969 * r602965;
double r602971 = a;
double r602972 = r602971 - r602968;
double r602973 = r602970 / r602972;
double r602974 = r602966 - r602973;
return r602974;
}
double f(double x, double y, double z, double t, double a) {
double r602975 = t;
double r602976 = -9.252090162115357e+100;
bool r602977 = r602975 <= r602976;
double r602978 = 3.5160921484049927e+107;
bool r602979 = r602975 <= r602978;
double r602980 = !r602979;
bool r602981 = r602977 || r602980;
double r602982 = z;
double r602983 = r602982 / r602975;
double r602984 = y;
double r602985 = x;
double r602986 = fma(r602983, r602984, r602985);
double r602987 = r602975 - r602982;
double r602988 = cbrt(r602987);
double r602989 = r602988 * r602988;
double r602990 = a;
double r602991 = r602990 - r602975;
double r602992 = cbrt(r602991);
double r602993 = r602992 * r602992;
double r602994 = cbrt(r602984);
double r602995 = r602994 * r602994;
double r602996 = r602993 / r602995;
double r602997 = r602989 / r602996;
double r602998 = r602992 / r602994;
double r602999 = r602988 / r602998;
double r603000 = r602985 + r602984;
double r603001 = fma(r602997, r602999, r603000);
double r603002 = r602981 ? r602986 : r603001;
return r603002;
}




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.1 |
if t < -9.252090162115357e+100 or 3.5160921484049927e+107 < t Initial program 30.2
Simplified21.0
rmApplied clear-num21.1
rmApplied fma-udef21.2
Simplified21.2
Taylor expanded around inf 17.5
Simplified12.1
if -9.252090162115357e+100 < t < 3.5160921484049927e+107Initial program 9.1
Simplified6.9
rmApplied clear-num7.0
rmApplied fma-udef7.0
Simplified6.8
rmApplied add-cube-cbrt7.0
Applied add-cube-cbrt7.1
Applied times-frac7.1
Applied add-cube-cbrt7.1
Applied times-frac5.8
Applied fma-def5.7
Final simplification8.1
herbie shell --seed 2020001 +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))))