x + \frac{\left(y - z\right) \cdot \left(t - x\right)}{a - z}\begin{array}{l}
\mathbf{if}\;a \le -3.5583620483396235 \cdot 10^{-211}:\\
\;\;\;\;x + \left(\frac{\sqrt[3]{y - z} \cdot \sqrt[3]{y - z}}{\sqrt[3]{a - z}} \cdot \frac{\sqrt[3]{y - z}}{\sqrt[3]{a - z}}\right) \cdot \frac{t - x}{\sqrt[3]{a - z}}\\
\mathbf{elif}\;a \le 9.9984175975379507 \cdot 10^{-234}:\\
\;\;\;\;\left(\frac{x \cdot y}{z} + t\right) - \frac{t \cdot y}{z}\\
\mathbf{else}:\\
\;\;\;\;x + \left(\frac{y - z}{\sqrt[3]{a - z} \cdot \sqrt[3]{a - z}} \cdot \left(\sqrt[3]{\frac{t - x}{\sqrt[3]{a - z}}} \cdot \sqrt[3]{\frac{t - x}{\sqrt[3]{a - z}}}\right)\right) \cdot \sqrt[3]{\frac{t - x}{\sqrt[3]{a - z}}}\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r756073 = x;
double r756074 = y;
double r756075 = z;
double r756076 = r756074 - r756075;
double r756077 = t;
double r756078 = r756077 - r756073;
double r756079 = r756076 * r756078;
double r756080 = a;
double r756081 = r756080 - r756075;
double r756082 = r756079 / r756081;
double r756083 = r756073 + r756082;
return r756083;
}
double f(double x, double y, double z, double t, double a) {
double r756084 = a;
double r756085 = -3.5583620483396235e-211;
bool r756086 = r756084 <= r756085;
double r756087 = x;
double r756088 = y;
double r756089 = z;
double r756090 = r756088 - r756089;
double r756091 = cbrt(r756090);
double r756092 = r756091 * r756091;
double r756093 = r756084 - r756089;
double r756094 = cbrt(r756093);
double r756095 = r756092 / r756094;
double r756096 = r756091 / r756094;
double r756097 = r756095 * r756096;
double r756098 = t;
double r756099 = r756098 - r756087;
double r756100 = r756099 / r756094;
double r756101 = r756097 * r756100;
double r756102 = r756087 + r756101;
double r756103 = 9.998417597537951e-234;
bool r756104 = r756084 <= r756103;
double r756105 = r756087 * r756088;
double r756106 = r756105 / r756089;
double r756107 = r756106 + r756098;
double r756108 = r756098 * r756088;
double r756109 = r756108 / r756089;
double r756110 = r756107 - r756109;
double r756111 = r756094 * r756094;
double r756112 = r756090 / r756111;
double r756113 = cbrt(r756100);
double r756114 = r756113 * r756113;
double r756115 = r756112 * r756114;
double r756116 = r756115 * r756113;
double r756117 = r756087 + r756116;
double r756118 = r756104 ? r756110 : r756117;
double r756119 = r756086 ? r756102 : r756118;
return r756119;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 24.7 |
|---|---|
| Target | 12.0 |
| Herbie | 11.6 |
if a < -3.5583620483396235e-211Initial program 24.0
rmApplied add-cube-cbrt24.4
Applied times-frac11.3
rmApplied add-cube-cbrt11.3
Applied times-frac11.2
Applied associate-*l*11.0
rmApplied associate-*r*11.2
if -3.5583620483396235e-211 < a < 9.998417597537951e-234Initial program 29.7
Taylor expanded around inf 9.2
if 9.998417597537951e-234 < a Initial program 24.2
rmApplied add-cube-cbrt24.6
Applied times-frac12.5
rmApplied add-cube-cbrt12.7
Applied associate-*r*12.7
Final simplification11.6
herbie shell --seed 2020021
(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))))