x + \frac{\left(y - z\right) \cdot \left(t - x\right)}{a - z}\begin{array}{l}
\mathbf{if}\;a \le -8.0853465553119063 \cdot 10^{-142}:\\
\;\;\;\;x + \left(\frac{y - z}{\sqrt[3]{a - z} \cdot \sqrt[3]{a - z}} \cdot \frac{\sqrt[3]{t - x} \cdot \sqrt[3]{t - x}}{\sqrt[3]{\sqrt[3]{a - z} \cdot \sqrt[3]{a - z}}}\right) \cdot \frac{\sqrt[3]{t - x}}{\sqrt[3]{\sqrt[3]{a - z}}}\\
\mathbf{elif}\;a \le 9.5997484764803608 \cdot 10^{-263}:\\
\;\;\;\;\left(\frac{x \cdot y}{z} + t\right) - \frac{t \cdot y}{z}\\
\mathbf{else}:\\
\;\;\;\;x + \frac{y - z}{\sqrt[3]{a - z} \cdot \sqrt[3]{a - z}} \cdot \frac{t - x}{\sqrt[3]{\sqrt[3]{a - z} \cdot \sqrt[3]{a - z}} \cdot \sqrt[3]{\sqrt[3]{a - z}}}\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r631982 = x;
double r631983 = y;
double r631984 = z;
double r631985 = r631983 - r631984;
double r631986 = t;
double r631987 = r631986 - r631982;
double r631988 = r631985 * r631987;
double r631989 = a;
double r631990 = r631989 - r631984;
double r631991 = r631988 / r631990;
double r631992 = r631982 + r631991;
return r631992;
}
double f(double x, double y, double z, double t, double a) {
double r631993 = a;
double r631994 = -8.085346555311906e-142;
bool r631995 = r631993 <= r631994;
double r631996 = x;
double r631997 = y;
double r631998 = z;
double r631999 = r631997 - r631998;
double r632000 = r631993 - r631998;
double r632001 = cbrt(r632000);
double r632002 = r632001 * r632001;
double r632003 = r631999 / r632002;
double r632004 = t;
double r632005 = r632004 - r631996;
double r632006 = cbrt(r632005);
double r632007 = r632006 * r632006;
double r632008 = cbrt(r632002);
double r632009 = r632007 / r632008;
double r632010 = r632003 * r632009;
double r632011 = cbrt(r632001);
double r632012 = r632006 / r632011;
double r632013 = r632010 * r632012;
double r632014 = r631996 + r632013;
double r632015 = 9.599748476480361e-263;
bool r632016 = r631993 <= r632015;
double r632017 = r631996 * r631997;
double r632018 = r632017 / r631998;
double r632019 = r632018 + r632004;
double r632020 = r632004 * r631997;
double r632021 = r632020 / r631998;
double r632022 = r632019 - r632021;
double r632023 = r632008 * r632011;
double r632024 = r632005 / r632023;
double r632025 = r632003 * r632024;
double r632026 = r631996 + r632025;
double r632027 = r632016 ? r632022 : r632026;
double r632028 = r631995 ? r632014 : r632027;
return r632028;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 24.1 |
|---|---|
| Target | 12.1 |
| Herbie | 11.1 |
if a < -8.085346555311906e-142Initial program 22.8
rmApplied add-cube-cbrt23.2
Applied times-frac10.0
rmApplied add-cube-cbrt10.1
Applied cbrt-prod10.1
Applied add-cube-cbrt10.3
Applied times-frac10.3
Applied associate-*r*9.8
if -8.085346555311906e-142 < a < 9.599748476480361e-263Initial program 28.9
Taylor expanded around inf 12.0
if 9.599748476480361e-263 < a Initial program 23.6
rmApplied add-cube-cbrt24.0
Applied times-frac11.8
rmApplied add-cube-cbrt11.8
Applied cbrt-prod11.9
Final simplification11.1
herbie shell --seed 2020083
(FPCore (x y z t a)
:name "Graphics.Rendering.Chart.Axis.Types:invLinMap from Chart-1.5.3"
:precision binary64
:herbie-target
(if (< z -1.2536131056095036e+188) (- t (* (/ y z) (- t x))) (if (< z 4.446702369113811e+64) (+ x (/ (- y z) (/ (- a z) (- t x)))) (- t (* (/ y z) (- t x)))))
(+ x (/ (* (- y z) (- t x)) (- a z))))