\frac{x}{x + y \cdot e^{2 \cdot \left(\frac{z \cdot \sqrt{t + a}}{t} - \left(b - c\right) \cdot \left(\left(a + \frac{5}{6}\right) - \frac{2}{t \cdot 3}\right)\right)}}\begin{array}{l}
\mathbf{if}\;t \le -1.3988457469696705 \cdot 10^{-242} \lor \neg \left(t \le 3.22201208794726605 \cdot 10^{-194}\right):\\
\;\;\;\;\frac{x}{x + y \cdot e^{2 \cdot \left(\frac{\left(\left|\sqrt[3]{t + a}\right| \cdot z\right) \cdot \sqrt{\sqrt[3]{t + a}}}{t} - \left(b - c\right) \cdot \left(\left(a + \frac{5}{6}\right) - \frac{2}{t \cdot 3}\right)\right)}}\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{x + y \cdot e^{2 \cdot \frac{\left(\left(\left|\sqrt[3]{t + a}\right| \cdot z\right) \cdot \sqrt{\sqrt[3]{t + a}}\right) \cdot \left(\left(a - \frac{5}{6}\right) \cdot \left(t \cdot 3\right)\right) - t \cdot \left(\left(b - c\right) \cdot \left(\left(a + \frac{5}{6}\right) \cdot \left(\left(a - \frac{5}{6}\right) \cdot \left(t \cdot 3\right)\right) - \left(a - \frac{5}{6}\right) \cdot 2\right)\right)}{t \cdot \left(\left(a - \frac{5}{6}\right) \cdot \left(t \cdot 3\right)\right)}}}\\
\end{array}double f(double x, double y, double z, double t, double a, double b, double c) {
double r524208 = x;
double r524209 = y;
double r524210 = 2.0;
double r524211 = z;
double r524212 = t;
double r524213 = a;
double r524214 = r524212 + r524213;
double r524215 = sqrt(r524214);
double r524216 = r524211 * r524215;
double r524217 = r524216 / r524212;
double r524218 = b;
double r524219 = c;
double r524220 = r524218 - r524219;
double r524221 = 5.0;
double r524222 = 6.0;
double r524223 = r524221 / r524222;
double r524224 = r524213 + r524223;
double r524225 = 3.0;
double r524226 = r524212 * r524225;
double r524227 = r524210 / r524226;
double r524228 = r524224 - r524227;
double r524229 = r524220 * r524228;
double r524230 = r524217 - r524229;
double r524231 = r524210 * r524230;
double r524232 = exp(r524231);
double r524233 = r524209 * r524232;
double r524234 = r524208 + r524233;
double r524235 = r524208 / r524234;
return r524235;
}
double f(double x, double y, double z, double t, double a, double b, double c) {
double r524236 = t;
double r524237 = -1.3988457469696705e-242;
bool r524238 = r524236 <= r524237;
double r524239 = 3.222012087947266e-194;
bool r524240 = r524236 <= r524239;
double r524241 = !r524240;
bool r524242 = r524238 || r524241;
double r524243 = x;
double r524244 = y;
double r524245 = 2.0;
double r524246 = a;
double r524247 = r524236 + r524246;
double r524248 = cbrt(r524247);
double r524249 = fabs(r524248);
double r524250 = z;
double r524251 = r524249 * r524250;
double r524252 = sqrt(r524248);
double r524253 = r524251 * r524252;
double r524254 = r524253 / r524236;
double r524255 = b;
double r524256 = c;
double r524257 = r524255 - r524256;
double r524258 = 5.0;
double r524259 = 6.0;
double r524260 = r524258 / r524259;
double r524261 = r524246 + r524260;
double r524262 = 3.0;
double r524263 = r524236 * r524262;
double r524264 = r524245 / r524263;
double r524265 = r524261 - r524264;
double r524266 = r524257 * r524265;
double r524267 = r524254 - r524266;
double r524268 = r524245 * r524267;
double r524269 = exp(r524268);
double r524270 = r524244 * r524269;
double r524271 = r524243 + r524270;
double r524272 = r524243 / r524271;
double r524273 = r524246 - r524260;
double r524274 = r524273 * r524263;
double r524275 = r524253 * r524274;
double r524276 = r524261 * r524274;
double r524277 = r524273 * r524245;
double r524278 = r524276 - r524277;
double r524279 = r524257 * r524278;
double r524280 = r524236 * r524279;
double r524281 = r524275 - r524280;
double r524282 = r524236 * r524274;
double r524283 = r524281 / r524282;
double r524284 = r524245 * r524283;
double r524285 = exp(r524284);
double r524286 = r524244 * r524285;
double r524287 = r524243 + r524286;
double r524288 = r524243 / r524287;
double r524289 = r524242 ? r524272 : r524288;
return r524289;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 3.8 |
|---|---|
| Target | 2.7 |
| Herbie | 3.2 |
if t < -1.3988457469696705e-242 or 3.222012087947266e-194 < t Initial program 2.9
rmApplied add-cube-cbrt2.9
Applied sqrt-prod2.9
Applied associate-*r*2.9
Simplified2.9
if -1.3988457469696705e-242 < t < 3.222012087947266e-194Initial program 9.2
rmApplied add-cube-cbrt9.2
Applied sqrt-prod9.2
Applied associate-*r*9.2
Simplified9.2
rmApplied flip-+13.9
Applied frac-sub13.9
Applied associate-*r/13.9
Applied frac-sub9.8
rmApplied difference-of-squares9.8
Applied associate-*l*4.9
Final simplification3.2
herbie shell --seed 2020027
(FPCore (x y z t a b c)
:name "Numeric.SpecFunctions:invIncompleteBetaWorker from math-functions-0.1.5.2, I"
:precision binary64
:herbie-target
(if (< t -2.118326644891581e-50) (/ x (+ x (* y (exp (* 2 (- (+ (* a c) (* 0.8333333333333334 c)) (* a b))))))) (if (< t 5.196588770651547e-123) (/ x (+ x (* y (exp (* 2 (/ (- (* (* z (sqrt (+ t a))) (* (* 3 t) (- a (/ 5 6)))) (* (- (* (+ (/ 5 6) a) (* 3 t)) 2) (* (- a (/ 5 6)) (* (- b c) t)))) (* (* (* t t) 3) (- a (/ 5 6))))))))) (/ x (+ x (* y (exp (* 2 (- (/ (* z (sqrt (+ t a))) t) (* (- b c) (- (+ a (/ 5 6)) (/ 2 (* t 3))))))))))))
(/ x (+ x (* y (exp (* 2 (- (/ (* z (sqrt (+ t a))) t) (* (- b c) (- (+ a (/ 5 6)) (/ 2 (* t 3)))))))))))