x \cdot \left(\frac{y}{z} - \frac{t}{1 - z}\right)\begin{array}{l}
\mathbf{if}\;z \le -1.07919684621796776 \cdot 10^{42}:\\
\;\;\;\;\frac{x}{\sqrt[3]{z} \cdot \sqrt[3]{z}} \cdot \frac{y}{\sqrt[3]{z}} + x \cdot \left(-\frac{t}{1 - z}\right)\\
\mathbf{elif}\;z \le 2.8051310836370026 \cdot 10^{-193}:\\
\;\;\;\;1 \cdot \frac{x \cdot y}{z} + x \cdot \left(-\frac{t}{1 - z}\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{\sqrt{z}} \cdot \frac{y}{\sqrt{z}} + x \cdot \left(-\frac{t}{1 - z}\right)\\
\end{array}double f(double x, double y, double z, double t) {
double r427652 = x;
double r427653 = y;
double r427654 = z;
double r427655 = r427653 / r427654;
double r427656 = t;
double r427657 = 1.0;
double r427658 = r427657 - r427654;
double r427659 = r427656 / r427658;
double r427660 = r427655 - r427659;
double r427661 = r427652 * r427660;
return r427661;
}
double f(double x, double y, double z, double t) {
double r427662 = z;
double r427663 = -1.0791968462179678e+42;
bool r427664 = r427662 <= r427663;
double r427665 = x;
double r427666 = cbrt(r427662);
double r427667 = r427666 * r427666;
double r427668 = r427665 / r427667;
double r427669 = y;
double r427670 = r427669 / r427666;
double r427671 = r427668 * r427670;
double r427672 = t;
double r427673 = 1.0;
double r427674 = r427673 - r427662;
double r427675 = r427672 / r427674;
double r427676 = -r427675;
double r427677 = r427665 * r427676;
double r427678 = r427671 + r427677;
double r427679 = 2.8051310836370026e-193;
bool r427680 = r427662 <= r427679;
double r427681 = 1.0;
double r427682 = r427665 * r427669;
double r427683 = r427682 / r427662;
double r427684 = r427681 * r427683;
double r427685 = r427684 + r427677;
double r427686 = sqrt(r427662);
double r427687 = r427665 / r427686;
double r427688 = r427669 / r427686;
double r427689 = r427687 * r427688;
double r427690 = r427689 + r427677;
double r427691 = r427680 ? r427685 : r427690;
double r427692 = r427664 ? r427678 : r427691;
return r427692;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 4.7 |
|---|---|
| Target | 4.3 |
| Herbie | 3.7 |
if z < -1.0791968462179678e+42Initial program 2.7
rmApplied sub-neg2.7
Applied distribute-lft-in2.7
rmApplied add-cube-cbrt3.1
Applied *-un-lft-identity3.1
Applied times-frac3.1
Applied associate-*r*4.3
Simplified4.3
if -1.0791968462179678e+42 < z < 2.8051310836370026e-193Initial program 8.4
rmApplied sub-neg8.4
Applied distribute-lft-in8.4
rmApplied add-cube-cbrt9.0
Applied *-un-lft-identity9.0
Applied times-frac9.0
Applied associate-*r*5.9
Simplified5.9
rmApplied *-un-lft-identity5.9
Applied associate-*l*5.9
Simplified4.0
if 2.8051310836370026e-193 < z Initial program 3.2
rmApplied sub-neg3.2
Applied distribute-lft-in3.2
rmApplied add-sqr-sqrt3.4
Applied *-un-lft-identity3.4
Applied times-frac3.4
Applied associate-*r*3.1
Simplified3.1
Final simplification3.7
herbie shell --seed 2020089 +o rules:numerics
(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)))))