\left(x + y\right) - \frac{\left(z - t\right) \cdot y}{a - t}\begin{array}{l}
\mathbf{if}\;t \le -1.179864941832011171396338266480044311801 \cdot 10^{59} \lor \neg \left(t \le 4.135326618072270316718703166262897552955 \cdot 10^{92}\right):\\
\;\;\;\;\mathsf{fma}\left(\frac{z}{t}, y, x\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{\sqrt[3]{t - z}}{\sqrt[3]{\frac{\sqrt[3]{a - t} \cdot \sqrt[3]{a - t}}{\sqrt[3]{y} \cdot \sqrt[3]{y}}} \cdot \sqrt[3]{\frac{\sqrt[3]{a - t} \cdot \sqrt[3]{a - t}}{\sqrt[3]{y} \cdot \sqrt[3]{y}}}} \cdot \frac{\sqrt[3]{t - z}}{\sqrt[3]{\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 r523788 = x;
double r523789 = y;
double r523790 = r523788 + r523789;
double r523791 = z;
double r523792 = t;
double r523793 = r523791 - r523792;
double r523794 = r523793 * r523789;
double r523795 = a;
double r523796 = r523795 - r523792;
double r523797 = r523794 / r523796;
double r523798 = r523790 - r523797;
return r523798;
}
double f(double x, double y, double z, double t, double a) {
double r523799 = t;
double r523800 = -1.1798649418320112e+59;
bool r523801 = r523799 <= r523800;
double r523802 = 4.1353266180722703e+92;
bool r523803 = r523799 <= r523802;
double r523804 = !r523803;
bool r523805 = r523801 || r523804;
double r523806 = z;
double r523807 = r523806 / r523799;
double r523808 = y;
double r523809 = x;
double r523810 = fma(r523807, r523808, r523809);
double r523811 = r523799 - r523806;
double r523812 = cbrt(r523811);
double r523813 = a;
double r523814 = r523813 - r523799;
double r523815 = cbrt(r523814);
double r523816 = r523815 * r523815;
double r523817 = cbrt(r523808);
double r523818 = r523817 * r523817;
double r523819 = r523816 / r523818;
double r523820 = cbrt(r523819);
double r523821 = r523820 * r523820;
double r523822 = r523812 / r523821;
double r523823 = r523812 / r523820;
double r523824 = r523822 * r523823;
double r523825 = r523815 / r523817;
double r523826 = r523812 / r523825;
double r523827 = r523809 + r523808;
double r523828 = fma(r523824, r523826, r523827);
double r523829 = r523805 ? r523810 : r523828;
return r523829;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 17.1 |
|---|---|
| Target | 9.0 |
| Herbie | 8.0 |
if t < -1.1798649418320112e+59 or 4.1353266180722703e+92 < t Initial program 30.1
Simplified21.2
rmApplied clear-num21.4
rmApplied fma-udef21.4
Simplified21.4
Taylor expanded around inf 18.1
Simplified12.8
if -1.1798649418320112e+59 < t < 4.1353266180722703e+92Initial program 7.9
Simplified6.1
rmApplied clear-num6.1
rmApplied fma-udef6.2
Simplified6.0
rmApplied add-cube-cbrt6.2
Applied add-cube-cbrt6.3
Applied times-frac6.3
Applied add-cube-cbrt6.3
Applied times-frac4.7
Applied fma-def4.7
rmApplied add-cube-cbrt4.7
Applied times-frac4.7
Final simplification8.0
herbie shell --seed 2019353 +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))))