x \cdot \left(\frac{y}{z} - \frac{t}{1 - z}\right)\begin{array}{l}
\mathbf{if}\;\frac{y}{z} - \frac{t}{1 - z} \le -4.928602009194038086036205062754298231499 \cdot 10^{142} \lor \neg \left(\frac{y}{z} - \frac{t}{1 - z} \le 3.320323384323547401102295815138797212443 \cdot 10^{180}\right):\\
\;\;\;\;\left(x \cdot y\right) \cdot \frac{1}{z} + x \cdot \left(-\frac{t}{1 - z}\right)\\
\mathbf{else}:\\
\;\;\;\;\left(x \cdot \left(\frac{\sqrt[3]{y}}{\sqrt[3]{z}} \cdot \sqrt[3]{\frac{y}{z}}\right)\right) \cdot \sqrt[3]{\frac{y}{z}} + x \cdot \left(-\frac{t}{1 - z}\right)\\
\end{array}double f(double x, double y, double z, double t) {
double r295190 = x;
double r295191 = y;
double r295192 = z;
double r295193 = r295191 / r295192;
double r295194 = t;
double r295195 = 1.0;
double r295196 = r295195 - r295192;
double r295197 = r295194 / r295196;
double r295198 = r295193 - r295197;
double r295199 = r295190 * r295198;
return r295199;
}
double f(double x, double y, double z, double t) {
double r295200 = y;
double r295201 = z;
double r295202 = r295200 / r295201;
double r295203 = t;
double r295204 = 1.0;
double r295205 = r295204 - r295201;
double r295206 = r295203 / r295205;
double r295207 = r295202 - r295206;
double r295208 = -4.928602009194038e+142;
bool r295209 = r295207 <= r295208;
double r295210 = 3.3203233843235474e+180;
bool r295211 = r295207 <= r295210;
double r295212 = !r295211;
bool r295213 = r295209 || r295212;
double r295214 = x;
double r295215 = r295214 * r295200;
double r295216 = 1.0;
double r295217 = r295216 / r295201;
double r295218 = r295215 * r295217;
double r295219 = -r295206;
double r295220 = r295214 * r295219;
double r295221 = r295218 + r295220;
double r295222 = cbrt(r295200);
double r295223 = cbrt(r295201);
double r295224 = r295222 / r295223;
double r295225 = cbrt(r295202);
double r295226 = r295224 * r295225;
double r295227 = r295214 * r295226;
double r295228 = r295227 * r295225;
double r295229 = r295228 + r295220;
double r295230 = r295213 ? r295221 : r295229;
return r295230;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 4.6 |
|---|---|
| Target | 4.2 |
| Herbie | 2.1 |
if (- (/ y z) (/ t (- 1.0 z))) < -4.928602009194038e+142 or 3.3203233843235474e+180 < (- (/ y z) (/ t (- 1.0 z))) Initial program 13.7
rmApplied sub-neg13.7
Applied distribute-lft-in13.7
rmApplied div-inv13.7
Applied associate-*r*1.6
if -4.928602009194038e+142 < (- (/ y z) (/ t (- 1.0 z))) < 3.3203233843235474e+180Initial program 1.8
rmApplied sub-neg1.8
Applied distribute-lft-in1.8
rmApplied add-cube-cbrt2.3
Applied associate-*r*2.3
rmApplied cbrt-div2.2
Final simplification2.1
herbie shell --seed 2019308
(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.62322630331204244e-196) (* x (- (/ y z) (* t (/ 1 (- 1 z))))) (if (< (* x (- (/ y z) (/ t (- 1 z)))) 1.41339449277023022e-211) (+ (/ (* y x) z) (- (/ (* t x) (- 1 z)))) (* x (- (/ y z) (* t (/ 1 (- 1 z)))))))
(* x (- (/ y z) (/ t (- 1 z)))))