\frac{\left(x - 2\right) \cdot \left(\left(\left(\left(x \cdot 4.16438922227999964 + 78.6994924154000017\right) \cdot x + 137.51941641600001\right) \cdot x + y\right) \cdot x + z\right)}{\left(\left(\left(x + 43.3400022514000014\right) \cdot x + 263.50507472100003\right) \cdot x + 313.399215894\right) \cdot x + 47.066876606000001}\begin{array}{l}
\mathbf{if}\;x \le -1.44052802145114724 \cdot 10^{47} \lor \neg \left(x \le 481036343538563580\right):\\
\;\;\;\;\mathsf{fma}\left(x, 4.16438922227999964, \frac{y}{{x}^{2}} - 110.11392429848109\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{\left(x - 2\right) \cdot \left(\left(\left(\left(x \cdot 4.16438922227999964 + 78.6994924154000017\right) \cdot x + 137.51941641600001\right) \cdot x + y\right) \cdot x + z\right)}{\left(\left(\left(x + 43.3400022514000014\right) \cdot x + 263.50507472100003\right) \cdot x + 313.399215894\right) \cdot x + 47.066876606000001}\\
\end{array}double f(double x, double y, double z) {
double r350249 = x;
double r350250 = 2.0;
double r350251 = r350249 - r350250;
double r350252 = 4.16438922228;
double r350253 = r350249 * r350252;
double r350254 = 78.6994924154;
double r350255 = r350253 + r350254;
double r350256 = r350255 * r350249;
double r350257 = 137.519416416;
double r350258 = r350256 + r350257;
double r350259 = r350258 * r350249;
double r350260 = y;
double r350261 = r350259 + r350260;
double r350262 = r350261 * r350249;
double r350263 = z;
double r350264 = r350262 + r350263;
double r350265 = r350251 * r350264;
double r350266 = 43.3400022514;
double r350267 = r350249 + r350266;
double r350268 = r350267 * r350249;
double r350269 = 263.505074721;
double r350270 = r350268 + r350269;
double r350271 = r350270 * r350249;
double r350272 = 313.399215894;
double r350273 = r350271 + r350272;
double r350274 = r350273 * r350249;
double r350275 = 47.066876606;
double r350276 = r350274 + r350275;
double r350277 = r350265 / r350276;
return r350277;
}
double f(double x, double y, double z) {
double r350278 = x;
double r350279 = -1.4405280214511472e+47;
bool r350280 = r350278 <= r350279;
double r350281 = 4.810363435385636e+17;
bool r350282 = r350278 <= r350281;
double r350283 = !r350282;
bool r350284 = r350280 || r350283;
double r350285 = 4.16438922228;
double r350286 = y;
double r350287 = 2.0;
double r350288 = pow(r350278, r350287);
double r350289 = r350286 / r350288;
double r350290 = 110.1139242984811;
double r350291 = r350289 - r350290;
double r350292 = fma(r350278, r350285, r350291);
double r350293 = 2.0;
double r350294 = r350278 - r350293;
double r350295 = r350278 * r350285;
double r350296 = 78.6994924154;
double r350297 = r350295 + r350296;
double r350298 = r350297 * r350278;
double r350299 = 137.519416416;
double r350300 = r350298 + r350299;
double r350301 = r350300 * r350278;
double r350302 = r350301 + r350286;
double r350303 = r350302 * r350278;
double r350304 = z;
double r350305 = r350303 + r350304;
double r350306 = r350294 * r350305;
double r350307 = 43.3400022514;
double r350308 = r350278 + r350307;
double r350309 = r350308 * r350278;
double r350310 = 263.505074721;
double r350311 = r350309 + r350310;
double r350312 = r350311 * r350278;
double r350313 = 313.399215894;
double r350314 = r350312 + r350313;
double r350315 = r350314 * r350278;
double r350316 = 47.066876606;
double r350317 = r350315 + r350316;
double r350318 = r350306 / r350317;
double r350319 = r350284 ? r350292 : r350318;
return r350319;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 26.7 |
|---|---|
| Target | 0.5 |
| Herbie | 1.1 |
if x < -1.4405280214511472e+47 or 4.810363435385636e+17 < x Initial program 58.5
Simplified54.4
rmApplied flip--54.4
Applied associate-/l/54.4
rmApplied clear-num54.4
rmApplied flip--54.4
Applied associate-/r/54.4
Applied associate-/r*54.4
Simplified54.4
Taylor expanded around inf 1.5
Simplified1.5
if -1.4405280214511472e+47 < x < 4.810363435385636e+17Initial program 0.7
Final simplification1.1
herbie shell --seed 2020064 +o rules:numerics
(FPCore (x y z)
:name "Numeric.SpecFunctions:logGamma from math-functions-0.1.5.2, C"
:precision binary64
:herbie-target
(if (< x -3.326128725870005e+62) (- (+ (/ y (* x x)) (* 4.16438922228 x)) 110.1139242984811) (if (< x 9.429991714554673e+55) (* (/ (- x 2) 1) (/ (+ (* (+ (* (+ (* (+ (* x 4.16438922228) 78.6994924154) x) 137.519416416) x) y) x) z) (+ (* (+ (+ (* 263.505074721 x) (+ (* 43.3400022514 (* x x)) (* x (* x x)))) 313.399215894) x) 47.066876606))) (- (+ (/ y (* x x)) (* 4.16438922228 x)) 110.1139242984811)))
(/ (* (- x 2) (+ (* (+ (* (+ (* (+ (* x 4.16438922228) 78.6994924154) x) 137.519416416) x) y) x) z)) (+ (* (+ (* (+ (* (+ x 43.3400022514) x) 263.505074721) x) 313.399215894) x) 47.066876606)))