x \cdot \left(\frac{y}{z} - \frac{t}{1 - z}\right)\begin{array}{l}
\mathbf{if}\;t \le -2.740368709049869308088666682154706200096 \cdot 10^{-97} \lor \neg \left(t \le 2.823511479814487689030883192213886222863 \cdot 10^{-176}\right):\\
\;\;\;\;\frac{x}{\frac{z}{y}} + \left(-\frac{t}{1 - z}\right) \cdot x\\
\mathbf{else}:\\
\;\;\;\;\frac{y}{\frac{z}{x}} + \left(-\frac{t \cdot x}{1 - z}\right)\\
\end{array}double f(double x, double y, double z, double t) {
double r277327 = x;
double r277328 = y;
double r277329 = z;
double r277330 = r277328 / r277329;
double r277331 = t;
double r277332 = 1.0;
double r277333 = r277332 - r277329;
double r277334 = r277331 / r277333;
double r277335 = r277330 - r277334;
double r277336 = r277327 * r277335;
return r277336;
}
double f(double x, double y, double z, double t) {
double r277337 = t;
double r277338 = -2.7403687090498693e-97;
bool r277339 = r277337 <= r277338;
double r277340 = 2.8235114798144877e-176;
bool r277341 = r277337 <= r277340;
double r277342 = !r277341;
bool r277343 = r277339 || r277342;
double r277344 = x;
double r277345 = z;
double r277346 = y;
double r277347 = r277345 / r277346;
double r277348 = r277344 / r277347;
double r277349 = 1.0;
double r277350 = r277349 - r277345;
double r277351 = r277337 / r277350;
double r277352 = -r277351;
double r277353 = r277352 * r277344;
double r277354 = r277348 + r277353;
double r277355 = r277345 / r277344;
double r277356 = r277346 / r277355;
double r277357 = r277337 * r277344;
double r277358 = r277357 / r277350;
double r277359 = -r277358;
double r277360 = r277356 + r277359;
double r277361 = r277343 ? r277354 : r277360;
return r277361;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 4.5 |
|---|---|
| Target | 4.2 |
| Herbie | 4.3 |
if t < -2.7403687090498693e-97 or 2.8235114798144877e-176 < t Initial program 4.0
rmApplied sub-neg4.0
Applied distribute-lft-in4.0
Simplified4.7
Simplified4.7
rmApplied associate-/l*3.7
if -2.7403687090498693e-97 < t < 2.8235114798144877e-176Initial program 5.8
rmApplied sub-neg5.8
Applied distribute-lft-in5.8
Simplified7.4
Simplified7.4
Taylor expanded around 0 7.4
Simplified6.9
rmApplied *-un-lft-identity6.9
Applied *-un-lft-identity6.9
Applied times-frac6.9
Applied distribute-lft-neg-in6.9
Applied associate-*l*6.9
Simplified5.8
Final simplification4.3
herbie shell --seed 2019303
(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)))))