x \cdot \left(\frac{y}{z} - \frac{t}{1 - z}\right)\begin{array}{l}
\mathbf{if}\;x \cdot \left(\frac{y}{z} - \frac{t}{1 - z}\right) = -\infty:\\
\;\;\;\;\frac{x \cdot \left(y \cdot \left(1 - z\right) - z \cdot t\right)}{z \cdot \left(1 - z\right)}\\
\mathbf{elif}\;x \cdot \left(\frac{y}{z} - \frac{t}{1 - z}\right) \le -4.981739169253245 \cdot 10^{-270}:\\
\;\;\;\;x \cdot \mathsf{fma}\left(y, \frac{1}{z}, -\frac{t}{1 - z}\right)\\
\mathbf{elif}\;x \cdot \left(\frac{y}{z} - \frac{t}{1 - z}\right) \le -0.0:\\
\;\;\;\;\mathsf{fma}\left(\frac{1}{z} + 1, \frac{t \cdot x}{z}, \frac{x \cdot y}{z}\right)\\
\mathbf{else}:\\
\;\;\;\;x \cdot \mathsf{fma}\left(y, \frac{1}{z}, -\frac{t}{1 - z}\right)\\
\end{array}double f(double x, double y, double z, double t) {
double r417798 = x;
double r417799 = y;
double r417800 = z;
double r417801 = r417799 / r417800;
double r417802 = t;
double r417803 = 1.0;
double r417804 = r417803 - r417800;
double r417805 = r417802 / r417804;
double r417806 = r417801 - r417805;
double r417807 = r417798 * r417806;
return r417807;
}
double f(double x, double y, double z, double t) {
double r417808 = x;
double r417809 = y;
double r417810 = z;
double r417811 = r417809 / r417810;
double r417812 = t;
double r417813 = 1.0;
double r417814 = r417813 - r417810;
double r417815 = r417812 / r417814;
double r417816 = r417811 - r417815;
double r417817 = r417808 * r417816;
double r417818 = -inf.0;
bool r417819 = r417817 <= r417818;
double r417820 = r417809 * r417814;
double r417821 = r417810 * r417812;
double r417822 = r417820 - r417821;
double r417823 = r417808 * r417822;
double r417824 = r417810 * r417814;
double r417825 = r417823 / r417824;
double r417826 = -4.981739169253245e-270;
bool r417827 = r417817 <= r417826;
double r417828 = 1.0;
double r417829 = r417828 / r417810;
double r417830 = -r417815;
double r417831 = fma(r417809, r417829, r417830);
double r417832 = r417808 * r417831;
double r417833 = -0.0;
bool r417834 = r417817 <= r417833;
double r417835 = r417813 / r417810;
double r417836 = r417835 + r417828;
double r417837 = r417812 * r417808;
double r417838 = r417837 / r417810;
double r417839 = r417808 * r417809;
double r417840 = r417839 / r417810;
double r417841 = fma(r417836, r417838, r417840);
double r417842 = r417834 ? r417841 : r417832;
double r417843 = r417827 ? r417832 : r417842;
double r417844 = r417819 ? r417825 : r417843;
return r417844;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 4.6 |
|---|---|
| Target | 4.0 |
| Herbie | 2.1 |
if (* x (- (/ y z) (/ t (- 1.0 z)))) < -inf.0Initial program 64.0
rmApplied frac-sub64.0
Applied associate-*r/0.2
if -inf.0 < (* x (- (/ y z) (/ t (- 1.0 z)))) < -4.981739169253245e-270 or -0.0 < (* x (- (/ y z) (/ t (- 1.0 z)))) Initial program 2.2
rmApplied div-inv2.2
Applied fma-neg2.2
if -4.981739169253245e-270 < (* x (- (/ y z) (/ t (- 1.0 z)))) < -0.0Initial program 9.0
rmApplied div-inv9.0
Applied fma-neg9.0
Taylor expanded around inf 1.9
Simplified1.5
Final simplification2.1
herbie shell --seed 2020025 +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)))))