x + \frac{y \cdot \left(\left(z \cdot 0.06929105992918889456166908757950295694172 + 0.4917317610505967939715787906607147306204\right) \cdot z + 0.2791953179185249767080279070796677842736\right)}{\left(z + 6.012459259764103336465268512256443500519\right) \cdot z + 3.350343815022303939343828460550867021084}\begin{array}{l}
\mathbf{if}\;z \le -5.110187933824355434057475957993495901711 \cdot 10^{45} \lor \neg \left(z \le 267536142.104578495025634765625\right):\\
\;\;\;\;\mathsf{fma}\left(0.07512208616047566511753075246815569698811, \frac{y}{z}, \mathsf{fma}\left(0.06929105992918889456166908757950295694172, y, x\right)\right)\\
\mathbf{else}:\\
\;\;\;\;x + y \cdot \frac{\mathsf{fma}\left(\mathsf{fma}\left(z, 0.06929105992918889456166908757950295694172, 0.4917317610505967939715787906607147306204\right), z, 0.2791953179185249767080279070796677842736\right)}{\mathsf{fma}\left(z + 6.012459259764103336465268512256443500519, z, 3.350343815022303939343828460550867021084\right)}\\
\end{array}double f(double x, double y, double z) {
double r217340 = x;
double r217341 = y;
double r217342 = z;
double r217343 = 0.0692910599291889;
double r217344 = r217342 * r217343;
double r217345 = 0.4917317610505968;
double r217346 = r217344 + r217345;
double r217347 = r217346 * r217342;
double r217348 = 0.279195317918525;
double r217349 = r217347 + r217348;
double r217350 = r217341 * r217349;
double r217351 = 6.012459259764103;
double r217352 = r217342 + r217351;
double r217353 = r217352 * r217342;
double r217354 = 3.350343815022304;
double r217355 = r217353 + r217354;
double r217356 = r217350 / r217355;
double r217357 = r217340 + r217356;
return r217357;
}
double f(double x, double y, double z) {
double r217358 = z;
double r217359 = -5.1101879338243554e+45;
bool r217360 = r217358 <= r217359;
double r217361 = 267536142.1045785;
bool r217362 = r217358 <= r217361;
double r217363 = !r217362;
bool r217364 = r217360 || r217363;
double r217365 = 0.07512208616047567;
double r217366 = y;
double r217367 = r217366 / r217358;
double r217368 = 0.0692910599291889;
double r217369 = x;
double r217370 = fma(r217368, r217366, r217369);
double r217371 = fma(r217365, r217367, r217370);
double r217372 = 0.4917317610505968;
double r217373 = fma(r217358, r217368, r217372);
double r217374 = 0.279195317918525;
double r217375 = fma(r217373, r217358, r217374);
double r217376 = 6.012459259764103;
double r217377 = r217358 + r217376;
double r217378 = 3.350343815022304;
double r217379 = fma(r217377, r217358, r217378);
double r217380 = r217375 / r217379;
double r217381 = r217366 * r217380;
double r217382 = r217369 + r217381;
double r217383 = r217364 ? r217371 : r217382;
return r217383;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 20.2 |
|---|---|
| Target | 0.1 |
| Herbie | 0.1 |
if z < -5.1101879338243554e+45 or 267536142.1045785 < z Initial program 43.7
Simplified36.6
rmApplied add-cube-cbrt36.8
Applied *-un-lft-identity36.8
Applied times-frac36.8
rmApplied expm1-log1p-u37.4
Taylor expanded around inf 0.0
Simplified0.0
if -5.1101879338243554e+45 < z < 267536142.1045785Initial program 0.4
rmApplied *-un-lft-identity0.4
Applied times-frac0.1
Simplified0.1
Simplified0.1
Final simplification0.1
herbie shell --seed 2019323 +o rules:numerics
(FPCore (x y z)
:name "Numeric.SpecFunctions:logGamma from math-functions-0.1.5.2, B"
:precision binary64
:herbie-target
(if (< z -8120153.652456675) (- (* (+ (/ 0.07512208616047561 z) 0.0692910599291889) y) (- (/ (* 0.40462203869992125 y) (* z z)) x)) (if (< z 657611897278737680000) (+ 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))))