x \cdot \left(\frac{y}{z} - \frac{t}{1 - z}\right)\begin{array}{l}
\mathbf{if}\;z \le -2.788516208276912227779895046453297670907 \cdot 10^{-97}:\\
\;\;\;\;x \cdot \left(\left(\frac{y}{z} + \left(-\frac{t}{1 - z}\right)\right) + \mathsf{fma}\left(-\frac{1}{1 - z}, t, \frac{1}{1 - z} \cdot t\right)\right)\\
\mathbf{elif}\;z \le 9547715461.5958919525146484375:\\
\;\;\;\;\frac{x \cdot \left(y \cdot \left(1 - z\right) - z \cdot t\right)}{z \cdot \left(1 - z\right)}\\
\mathbf{else}:\\
\;\;\;\;x \cdot \left(\left(\frac{y}{z} + \left(-\frac{t}{1 - z}\right)\right) + \mathsf{fma}\left(-\frac{1}{1 - z}, t, \frac{1}{1 - z} \cdot t\right)\right)\\
\end{array}double f(double x, double y, double z, double t) {
double r62353178 = x;
double r62353179 = y;
double r62353180 = z;
double r62353181 = r62353179 / r62353180;
double r62353182 = t;
double r62353183 = 1.0;
double r62353184 = r62353183 - r62353180;
double r62353185 = r62353182 / r62353184;
double r62353186 = r62353181 - r62353185;
double r62353187 = r62353178 * r62353186;
return r62353187;
}
double f(double x, double y, double z, double t) {
double r62353188 = z;
double r62353189 = -2.788516208276912e-97;
bool r62353190 = r62353188 <= r62353189;
double r62353191 = x;
double r62353192 = y;
double r62353193 = r62353192 / r62353188;
double r62353194 = t;
double r62353195 = 1.0;
double r62353196 = r62353195 - r62353188;
double r62353197 = r62353194 / r62353196;
double r62353198 = -r62353197;
double r62353199 = r62353193 + r62353198;
double r62353200 = 1.0;
double r62353201 = r62353200 / r62353196;
double r62353202 = -r62353201;
double r62353203 = r62353201 * r62353194;
double r62353204 = fma(r62353202, r62353194, r62353203);
double r62353205 = r62353199 + r62353204;
double r62353206 = r62353191 * r62353205;
double r62353207 = 9547715461.595892;
bool r62353208 = r62353188 <= r62353207;
double r62353209 = r62353192 * r62353196;
double r62353210 = r62353188 * r62353194;
double r62353211 = r62353209 - r62353210;
double r62353212 = r62353191 * r62353211;
double r62353213 = r62353188 * r62353196;
double r62353214 = r62353212 / r62353213;
double r62353215 = r62353208 ? r62353214 : r62353206;
double r62353216 = r62353190 ? r62353206 : r62353215;
return r62353216;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 4.7 |
|---|---|
| Target | 4.5 |
| Herbie | 3.5 |
if z < -2.788516208276912e-97 or 9547715461.595892 < z Initial program 2.2
rmApplied div-inv2.2
Applied div-inv2.3
Applied prod-diff2.3
rmApplied associate-*l/2.2
Simplified2.2
rmApplied fma-udef2.2
Simplified2.2
if -2.788516208276912e-97 < z < 9547715461.595892Initial program 9.5
rmApplied frac-sub9.5
Applied associate-*r/6.0
Final simplification3.5
herbie shell --seed 2019173 +o rules:numerics
(FPCore (x y z t)
:name "Numeric.SpecFunctions:invIncompleteBetaWorker from math-functions-0.1.5.2, C"
:herbie-target
(if (< (* x (- (/ y z) (/ t (- 1.0 z)))) -7.623226303312042e-196) (* x (- (/ y z) (* t (/ 1.0 (- 1.0 z))))) (if (< (* x (- (/ y z) (/ t (- 1.0 z)))) 1.4133944927702302e-211) (+ (/ (* y x) z) (- (/ (* t x) (- 1.0 z)))) (* x (- (/ y z) (* t (/ 1.0 (- 1.0 z)))))))
(* x (- (/ y z) (/ t (- 1.0 z)))))