x + \frac{y \cdot \left(\left(z \cdot 0.0692910599291889 + 0.4917317610505968\right) \cdot z + 0.279195317918525\right)}{\left(z + 6.012459259764103\right) \cdot z + 3.350343815022304}\begin{array}{l}
\mathbf{if}\;z \le -273974326636.0899:\\
\;\;\;\;\mathsf{fma}\left(\frac{y}{z}, 0.07512208616047561, \mathsf{fma}\left(0.0692910599291889, y, x\right)\right)\\
\mathbf{elif}\;z \le 2431685.1655870155:\\
\;\;\;\;x + \frac{y \cdot \left(z \cdot \left(z \cdot 0.0692910599291889 + 0.4917317610505968\right) + 0.279195317918525\right)}{3.350343815022304 + z \cdot \left(z + 6.012459259764103\right)}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{y}{z}, 0.07512208616047561, \mathsf{fma}\left(0.0692910599291889, y, x\right)\right)\\
\end{array}double f(double x, double y, double z) {
double r19207379 = x;
double r19207380 = y;
double r19207381 = z;
double r19207382 = 0.0692910599291889;
double r19207383 = r19207381 * r19207382;
double r19207384 = 0.4917317610505968;
double r19207385 = r19207383 + r19207384;
double r19207386 = r19207385 * r19207381;
double r19207387 = 0.279195317918525;
double r19207388 = r19207386 + r19207387;
double r19207389 = r19207380 * r19207388;
double r19207390 = 6.012459259764103;
double r19207391 = r19207381 + r19207390;
double r19207392 = r19207391 * r19207381;
double r19207393 = 3.350343815022304;
double r19207394 = r19207392 + r19207393;
double r19207395 = r19207389 / r19207394;
double r19207396 = r19207379 + r19207395;
return r19207396;
}
double f(double x, double y, double z) {
double r19207397 = z;
double r19207398 = -273974326636.0899;
bool r19207399 = r19207397 <= r19207398;
double r19207400 = y;
double r19207401 = r19207400 / r19207397;
double r19207402 = 0.07512208616047561;
double r19207403 = 0.0692910599291889;
double r19207404 = x;
double r19207405 = fma(r19207403, r19207400, r19207404);
double r19207406 = fma(r19207401, r19207402, r19207405);
double r19207407 = 2431685.1655870155;
bool r19207408 = r19207397 <= r19207407;
double r19207409 = r19207397 * r19207403;
double r19207410 = 0.4917317610505968;
double r19207411 = r19207409 + r19207410;
double r19207412 = r19207397 * r19207411;
double r19207413 = 0.279195317918525;
double r19207414 = r19207412 + r19207413;
double r19207415 = r19207400 * r19207414;
double r19207416 = 3.350343815022304;
double r19207417 = 6.012459259764103;
double r19207418 = r19207397 + r19207417;
double r19207419 = r19207397 * r19207418;
double r19207420 = r19207416 + r19207419;
double r19207421 = r19207415 / r19207420;
double r19207422 = r19207404 + r19207421;
double r19207423 = r19207408 ? r19207422 : r19207406;
double r19207424 = r19207399 ? r19207406 : r19207423;
return r19207424;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 19.4 |
|---|---|
| Target | 0.2 |
| Herbie | 0.1 |
if z < -273974326636.0899 or 2431685.1655870155 < z Initial program 40.3
Simplified34.3
rmApplied add-cube-cbrt34.5
Applied *-un-lft-identity34.5
Applied times-frac34.5
Taylor expanded around inf 0.0
Simplified0.0
if -273974326636.0899 < z < 2431685.1655870155Initial program 0.2
Final simplification0.1
herbie shell --seed 2019158 +o rules:numerics
(FPCore (x y z)
:name "Numeric.SpecFunctions:logGamma from math-functions-0.1.5.2, B"
:herbie-target
(if (< z -8120153.652456675) (- (* (+ (/ 0.07512208616047561 z) 0.0692910599291889) y) (- (/ (* 0.40462203869992125 y) (* z z)) x)) (if (< z 6.576118972787377e+20) (+ x (* (* y (+ (* (+ (* z 0.0692910599291889) 0.4917317610505968) z) 0.279195317918525)) (/ 1 (+ (* (+ z 6.012459259764103) z) 3.350343815022304)))) (- (* (+ (/ 0.07512208616047561 z) 0.0692910599291889) y) (- (/ (* 0.40462203869992125 y) (* z z)) x))))
(+ x (/ (* y (+ (* (+ (* z 0.0692910599291889) 0.4917317610505968) z) 0.279195317918525)) (+ (* (+ z 6.012459259764103) z) 3.350343815022304))))