\frac{\left(x - 2\right) \cdot \left(\left(\left(\left(x \cdot 4.16438922227999963610045597306452691555 + 78.69949241540000173245061887428164482117\right) \cdot x + 137.5194164160000127594685181975364685059\right) \cdot x + y\right) \cdot x + z\right)}{\left(\left(\left(x + 43.3400022514000013984514225739985704422\right) \cdot x + 263.5050747210000281484099105000495910645\right) \cdot x + 313.3992158940000081202015280723571777344\right) \cdot x + 47.06687660600000100430406746454536914825}\begin{array}{l}
\mathbf{if}\;x \le -41468195884167556148326040140678955008 \lor \neg \left(x \le 4.185814178876573776200097393718801150489 \cdot 10^{51}\right):\\
\;\;\;\;\left(\frac{y}{{x}^{2}} + \frac{4688685437421479}{1125899906842624} \cdot x\right) - \frac{1937144642339619}{17592186044416}\\
\mathbf{else}:\\
\;\;\;\;\frac{x - 2}{\frac{\left(\left(\left(x + \frac{6099563062176297}{140737488355328}\right) \cdot x + \frac{1158907574534893}{4398046511104}\right) \cdot x + \frac{172293041005667}{549755813888}\right) \cdot x + \frac{6624073998258585}{140737488355328}}{\left(\left(\left(x \cdot \frac{4688685437421479}{1125899906842624} + \frac{5537984448691291}{70368744177664}\right) \cdot x + \frac{604816789577447}{4398046511104}\right) \cdot x + y\right) \cdot x + z}}\\
\end{array}double f(double x, double y, double z) {
double r252271 = x;
double r252272 = 2.0;
double r252273 = r252271 - r252272;
double r252274 = 4.16438922228;
double r252275 = r252271 * r252274;
double r252276 = 78.6994924154;
double r252277 = r252275 + r252276;
double r252278 = r252277 * r252271;
double r252279 = 137.519416416;
double r252280 = r252278 + r252279;
double r252281 = r252280 * r252271;
double r252282 = y;
double r252283 = r252281 + r252282;
double r252284 = r252283 * r252271;
double r252285 = z;
double r252286 = r252284 + r252285;
double r252287 = r252273 * r252286;
double r252288 = 43.3400022514;
double r252289 = r252271 + r252288;
double r252290 = r252289 * r252271;
double r252291 = 263.505074721;
double r252292 = r252290 + r252291;
double r252293 = r252292 * r252271;
double r252294 = 313.399215894;
double r252295 = r252293 + r252294;
double r252296 = r252295 * r252271;
double r252297 = 47.066876606;
double r252298 = r252296 + r252297;
double r252299 = r252287 / r252298;
return r252299;
}
double f(double x, double y, double z) {
double r252300 = x;
double r252301 = -4.1468195884167556e+37;
bool r252302 = r252300 <= r252301;
double r252303 = 4.185814178876574e+51;
bool r252304 = r252300 <= r252303;
double r252305 = !r252304;
bool r252306 = r252302 || r252305;
double r252307 = y;
double r252308 = 2.0;
double r252309 = pow(r252300, r252308);
double r252310 = r252307 / r252309;
double r252311 = 4688685437421479.0;
double r252312 = 1125899906842624.0;
double r252313 = r252311 / r252312;
double r252314 = r252313 * r252300;
double r252315 = r252310 + r252314;
double r252316 = 1937144642339619.0;
double r252317 = 17592186044416.0;
double r252318 = r252316 / r252317;
double r252319 = r252315 - r252318;
double r252320 = 2.0;
double r252321 = r252300 - r252320;
double r252322 = 6099563062176297.0;
double r252323 = 140737488355328.0;
double r252324 = r252322 / r252323;
double r252325 = r252300 + r252324;
double r252326 = r252325 * r252300;
double r252327 = 1158907574534893.0;
double r252328 = 4398046511104.0;
double r252329 = r252327 / r252328;
double r252330 = r252326 + r252329;
double r252331 = r252330 * r252300;
double r252332 = 172293041005667.0;
double r252333 = 549755813888.0;
double r252334 = r252332 / r252333;
double r252335 = r252331 + r252334;
double r252336 = r252335 * r252300;
double r252337 = 6624073998258585.0;
double r252338 = r252337 / r252323;
double r252339 = r252336 + r252338;
double r252340 = r252300 * r252313;
double r252341 = 5537984448691291.0;
double r252342 = 70368744177664.0;
double r252343 = r252341 / r252342;
double r252344 = r252340 + r252343;
double r252345 = r252344 * r252300;
double r252346 = 604816789577447.0;
double r252347 = r252346 / r252328;
double r252348 = r252345 + r252347;
double r252349 = r252348 * r252300;
double r252350 = r252349 + r252307;
double r252351 = r252350 * r252300;
double r252352 = z;
double r252353 = r252351 + r252352;
double r252354 = r252339 / r252353;
double r252355 = r252321 / r252354;
double r252356 = r252306 ? r252319 : r252355;
return r252356;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 26.7 |
|---|---|
| Target | 0.4 |
| Herbie | 0.7 |
if x < -4.1468195884167556e+37 or 4.185814178876574e+51 < x Initial program 60.8
Taylor expanded around inf 0.7
Simplified0.7
if -4.1468195884167556e+37 < x < 4.185814178876574e+51Initial program 0.9
rmApplied associate-/l*0.7
Simplified0.7
Final simplification0.7
herbie shell --seed 2019304
(FPCore (x y z)
:name "Numeric.SpecFunctions:logGamma from math-functions-0.1.5.2, C"
:precision binary64
:herbie-target
(if (< x -3.3261287258700048e62) (- (+ (/ y (* x x)) (* 4.16438922227999964 x)) 110.11392429848109) (if (< x 9.4299917145546727e55) (* (/ (- x 2) 1) (/ (+ (* (+ (* (+ (* (+ (* x 4.16438922227999964) 78.6994924154000017) x) 137.51941641600001) x) y) x) z) (+ (* (+ (+ (* 263.50507472100003 x) (+ (* 43.3400022514000014 (* x x)) (* x (* x x)))) 313.399215894) x) 47.066876606000001))) (- (+ (/ y (* x x)) (* 4.16438922227999964 x)) 110.11392429848109)))
(/ (* (- x 2) (+ (* (+ (* (+ (* (+ (* x 4.16438922227999964) 78.6994924154000017) x) 137.51941641600001) x) y) x) z)) (+ (* (+ (* (+ (* (+ x 43.3400022514000014) x) 263.50507472100003) x) 313.399215894) x) 47.066876606000001)))