x \cdot \left(\frac{y}{z} - \frac{t}{1 - z}\right)\begin{array}{l}
\mathbf{if}\;z \le -4.3574788430707297 \cdot 10^{-179} \lor \neg \left(z \le 8.4759760965436472 \cdot 10^{-78}\right):\\
\;\;\;\;\left(\sqrt[3]{x \cdot \left(\frac{y}{z} - \frac{1}{\frac{1 - z}{t}}\right)} \cdot \sqrt[3]{x \cdot \left(\frac{y}{z} - \frac{1}{\frac{1 - z}{t}}\right)}\right) \cdot \sqrt[3]{x \cdot \left(\frac{y}{z} - \frac{1}{\frac{1 - z}{t}}\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{x \cdot \left(y \cdot \left(1 - z\right) - z \cdot t\right)}{z \cdot \left(1 - z\right)}\\
\end{array}double f(double x, double y, double z, double t) {
double r503393 = x;
double r503394 = y;
double r503395 = z;
double r503396 = r503394 / r503395;
double r503397 = t;
double r503398 = 1.0;
double r503399 = r503398 - r503395;
double r503400 = r503397 / r503399;
double r503401 = r503396 - r503400;
double r503402 = r503393 * r503401;
return r503402;
}
double f(double x, double y, double z, double t) {
double r503403 = z;
double r503404 = -4.35747884307073e-179;
bool r503405 = r503403 <= r503404;
double r503406 = 8.475976096543647e-78;
bool r503407 = r503403 <= r503406;
double r503408 = !r503407;
bool r503409 = r503405 || r503408;
double r503410 = x;
double r503411 = y;
double r503412 = r503411 / r503403;
double r503413 = 1.0;
double r503414 = 1.0;
double r503415 = r503414 - r503403;
double r503416 = t;
double r503417 = r503415 / r503416;
double r503418 = r503413 / r503417;
double r503419 = r503412 - r503418;
double r503420 = r503410 * r503419;
double r503421 = cbrt(r503420);
double r503422 = r503421 * r503421;
double r503423 = r503422 * r503421;
double r503424 = r503411 * r503415;
double r503425 = r503403 * r503416;
double r503426 = r503424 - r503425;
double r503427 = r503410 * r503426;
double r503428 = r503403 * r503415;
double r503429 = r503427 / r503428;
double r503430 = r503409 ? r503423 : r503429;
return r503430;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 4.5 |
|---|---|
| Target | 4.1 |
| Herbie | 4.3 |
if z < -4.35747884307073e-179 or 8.475976096543647e-78 < z Initial program 2.6
rmApplied clear-num2.7
rmApplied add-cube-cbrt3.6
if -4.35747884307073e-179 < z < 8.475976096543647e-78Initial program 11.6
rmApplied frac-sub11.7
Applied associate-*r/7.1
Final simplification4.3
herbie shell --seed 2020027
(FPCore (x y z t)
:name "Numeric.SpecFunctions:invIncompleteBetaWorker from math-functions-0.1.5.2, C"
:precision binary64
:herbie-target
(if (< (* x (- (/ y z) (/ t (- 1 z)))) -7.623226303312042e-196) (* x (- (/ y z) (* t (/ 1 (- 1 z))))) (if (< (* x (- (/ y z) (/ t (- 1 z)))) 1.4133944927702302e-211) (+ (/ (* y x) z) (- (/ (* t x) (- 1 z)))) (* x (- (/ y z) (* t (/ 1 (- 1 z)))))))
(* x (- (/ y z) (/ t (- 1 z)))))