\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 r586064 = x;
double r586065 = y;
double r586066 = r586064 + r586065;
double r586067 = z;
double r586068 = t;
double r586069 = r586067 - r586068;
double r586070 = r586069 * r586065;
double r586071 = a;
double r586072 = r586071 - r586068;
double r586073 = r586070 / r586072;
double r586074 = r586066 - r586073;
return r586074;
}
double f(double x, double y, double z, double t, double a) {
double r586075 = t;
double r586076 = -9.252090162115357e+100;
bool r586077 = r586075 <= r586076;
double r586078 = 3.5160921484049927e+107;
bool r586079 = r586075 <= r586078;
double r586080 = !r586079;
bool r586081 = r586077 || r586080;
double r586082 = z;
double r586083 = r586082 / r586075;
double r586084 = y;
double r586085 = x;
double r586086 = fma(r586083, r586084, r586085);
double r586087 = r586075 - r586082;
double r586088 = cbrt(r586087);
double r586089 = r586088 * r586088;
double r586090 = a;
double r586091 = r586090 - r586075;
double r586092 = cbrt(r586091);
double r586093 = r586092 * r586092;
double r586094 = cbrt(r586084);
double r586095 = r586094 * r586094;
double r586096 = r586093 / r586095;
double r586097 = r586089 / r586096;
double r586098 = r586092 / r586094;
double r586099 = r586088 / r586098;
double r586100 = r586085 + r586084;
double r586101 = fma(r586097, r586099, r586100);
double r586102 = r586081 ? r586086 : r586101;
return r586102;
}




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))))