x + \frac{\left(y - z\right) \cdot \left(t - x\right)}{a - z}\begin{array}{l}
\mathbf{if}\;a \le -2.0167221434791827 \cdot 10^{-79}:\\
\;\;\;\;x + \left(\sqrt[3]{\frac{y - z}{\sqrt[3]{a - z} \cdot \sqrt[3]{a - z}}} \cdot \sqrt[3]{\frac{y - z}{\sqrt[3]{a - z} \cdot \sqrt[3]{a - z}}}\right) \cdot \left(\sqrt[3]{\frac{y - z}{\sqrt[3]{a - z} \cdot \sqrt[3]{a - z}}} \cdot \frac{t - x}{\sqrt[3]{a - z}}\right)\\
\mathbf{elif}\;a \le 1.082916304047229 \cdot 10^{-175}:\\
\;\;\;\;\left(\frac{x}{z} - \frac{t}{z}\right) \cdot y + t\\
\mathbf{else}:\\
\;\;\;\;x + \left(\sqrt[3]{\frac{y - z}{\sqrt[3]{a - z} \cdot \sqrt[3]{a - z}}} \cdot \sqrt[3]{\frac{y - z}{\sqrt[3]{a - z} \cdot \sqrt[3]{a - z}}}\right) \cdot \left(\sqrt[3]{\frac{y - z}{\sqrt[3]{a - z} \cdot \sqrt[3]{a - z}}} \cdot \frac{t - x}{\sqrt[3]{a - z}}\right)\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r32426249 = x;
double r32426250 = y;
double r32426251 = z;
double r32426252 = r32426250 - r32426251;
double r32426253 = t;
double r32426254 = r32426253 - r32426249;
double r32426255 = r32426252 * r32426254;
double r32426256 = a;
double r32426257 = r32426256 - r32426251;
double r32426258 = r32426255 / r32426257;
double r32426259 = r32426249 + r32426258;
return r32426259;
}
double f(double x, double y, double z, double t, double a) {
double r32426260 = a;
double r32426261 = -2.0167221434791827e-79;
bool r32426262 = r32426260 <= r32426261;
double r32426263 = x;
double r32426264 = y;
double r32426265 = z;
double r32426266 = r32426264 - r32426265;
double r32426267 = r32426260 - r32426265;
double r32426268 = cbrt(r32426267);
double r32426269 = r32426268 * r32426268;
double r32426270 = r32426266 / r32426269;
double r32426271 = cbrt(r32426270);
double r32426272 = r32426271 * r32426271;
double r32426273 = t;
double r32426274 = r32426273 - r32426263;
double r32426275 = r32426274 / r32426268;
double r32426276 = r32426271 * r32426275;
double r32426277 = r32426272 * r32426276;
double r32426278 = r32426263 + r32426277;
double r32426279 = 1.082916304047229e-175;
bool r32426280 = r32426260 <= r32426279;
double r32426281 = r32426263 / r32426265;
double r32426282 = r32426273 / r32426265;
double r32426283 = r32426281 - r32426282;
double r32426284 = r32426283 * r32426264;
double r32426285 = r32426284 + r32426273;
double r32426286 = r32426280 ? r32426285 : r32426278;
double r32426287 = r32426262 ? r32426278 : r32426286;
return r32426287;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 23.8 |
|---|---|
| Target | 11.7 |
| Herbie | 10.4 |
if a < -2.0167221434791827e-79 or 1.082916304047229e-175 < a Initial program 22.2
rmApplied add-cube-cbrt22.5
Applied times-frac9.6
rmApplied add-cube-cbrt9.7
Applied associate-*l*9.7
if -2.0167221434791827e-79 < a < 1.082916304047229e-175Initial program 28.7
rmApplied add-cube-cbrt29.3
Applied times-frac20.4
rmApplied add-cube-cbrt20.1
Applied times-frac20.1
Applied associate-*l*19.8
Taylor expanded around inf 15.0
Simplified12.4
Final simplification10.4
herbie shell --seed 2019168
(FPCore (x y z t a)
:name "Graphics.Rendering.Chart.Axis.Types:invLinMap from Chart-1.5.3"
: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))))