x + \frac{y \cdot \left(\left(\left(\left(z \cdot 3.130605476229999961645944495103321969509 + 11.16675412620000074070958362426608800888\right) \cdot z + t\right) \cdot z + a\right) \cdot z + b\right)}{\left(\left(\left(z + 15.2346874069999991263557603815570473671\right) \cdot z + 31.46901157490000144889563671313226222992\right) \cdot z + 11.94009057210000079862766142468899488449\right) \cdot z + 0.6077713877710000378584709324059076607227}\begin{array}{l}
\mathbf{if}\;z \le -1.458773536608396111336416224072210451157 \cdot 10^{48} \lor \neg \left(z \le 5.110131669723293866087588395991373411936 \cdot 10^{44}\right):\\
\;\;\;\;x + y \cdot \left(\left(\frac{t}{{z}^{2}} + 3.130605476229999961645944495103321969509\right) - \frac{36.52704169880641416057187598198652267456}{z}\right)\\
\mathbf{else}:\\
\;\;\;\;x + y \cdot \left(\frac{1}{\sqrt{\left(\left(\left(z + 15.2346874069999991263557603815570473671\right) \cdot z + 31.46901157490000144889563671313226222992\right) \cdot z + 11.94009057210000079862766142468899488449\right) \cdot z + 0.6077713877710000378584709324059076607227}} \cdot \frac{\left(\left(\left(z \cdot 3.130605476229999961645944495103321969509 + 11.16675412620000074070958362426608800888\right) \cdot z + t\right) \cdot z + a\right) \cdot z + b}{\sqrt{\left(\left(\left(z + 15.2346874069999991263557603815570473671\right) \cdot z + 31.46901157490000144889563671313226222992\right) \cdot z + 11.94009057210000079862766142468899488449\right) \cdot z + 0.6077713877710000378584709324059076607227}}\right)\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r377259 = x;
double r377260 = y;
double r377261 = z;
double r377262 = 3.13060547623;
double r377263 = r377261 * r377262;
double r377264 = 11.1667541262;
double r377265 = r377263 + r377264;
double r377266 = r377265 * r377261;
double r377267 = t;
double r377268 = r377266 + r377267;
double r377269 = r377268 * r377261;
double r377270 = a;
double r377271 = r377269 + r377270;
double r377272 = r377271 * r377261;
double r377273 = b;
double r377274 = r377272 + r377273;
double r377275 = r377260 * r377274;
double r377276 = 15.234687407;
double r377277 = r377261 + r377276;
double r377278 = r377277 * r377261;
double r377279 = 31.4690115749;
double r377280 = r377278 + r377279;
double r377281 = r377280 * r377261;
double r377282 = 11.9400905721;
double r377283 = r377281 + r377282;
double r377284 = r377283 * r377261;
double r377285 = 0.607771387771;
double r377286 = r377284 + r377285;
double r377287 = r377275 / r377286;
double r377288 = r377259 + r377287;
return r377288;
}
double f(double x, double y, double z, double t, double a, double b) {
double r377289 = z;
double r377290 = -1.4587735366083961e+48;
bool r377291 = r377289 <= r377290;
double r377292 = 5.110131669723294e+44;
bool r377293 = r377289 <= r377292;
double r377294 = !r377293;
bool r377295 = r377291 || r377294;
double r377296 = x;
double r377297 = y;
double r377298 = t;
double r377299 = 2.0;
double r377300 = pow(r377289, r377299);
double r377301 = r377298 / r377300;
double r377302 = 3.13060547623;
double r377303 = r377301 + r377302;
double r377304 = 36.527041698806414;
double r377305 = r377304 / r377289;
double r377306 = r377303 - r377305;
double r377307 = r377297 * r377306;
double r377308 = r377296 + r377307;
double r377309 = 1.0;
double r377310 = 15.234687407;
double r377311 = r377289 + r377310;
double r377312 = r377311 * r377289;
double r377313 = 31.4690115749;
double r377314 = r377312 + r377313;
double r377315 = r377314 * r377289;
double r377316 = 11.9400905721;
double r377317 = r377315 + r377316;
double r377318 = r377317 * r377289;
double r377319 = 0.607771387771;
double r377320 = r377318 + r377319;
double r377321 = sqrt(r377320);
double r377322 = r377309 / r377321;
double r377323 = r377289 * r377302;
double r377324 = 11.1667541262;
double r377325 = r377323 + r377324;
double r377326 = r377325 * r377289;
double r377327 = r377326 + r377298;
double r377328 = r377327 * r377289;
double r377329 = a;
double r377330 = r377328 + r377329;
double r377331 = r377330 * r377289;
double r377332 = b;
double r377333 = r377331 + r377332;
double r377334 = r377333 / r377321;
double r377335 = r377322 * r377334;
double r377336 = r377297 * r377335;
double r377337 = r377296 + r377336;
double r377338 = r377295 ? r377308 : r377337;
return r377338;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a




Bits error versus b
Results
| Original | 29.2 |
|---|---|
| Target | 1.0 |
| Herbie | 1.1 |
if z < -1.4587735366083961e+48 or 5.110131669723294e+44 < z Initial program 60.6
rmApplied *-un-lft-identity60.6
Applied times-frac58.5
Simplified58.5
Taylor expanded around inf 1.0
Simplified1.0
if -1.4587735366083961e+48 < z < 5.110131669723294e+44Initial program 1.9
rmApplied *-un-lft-identity1.9
Applied times-frac0.8
Simplified0.8
rmApplied add-sqr-sqrt1.3
Applied *-un-lft-identity1.3
Applied times-frac1.1
Final simplification1.1
herbie shell --seed 2019208
(FPCore (x y z t a b)
:name "Numeric.SpecFunctions:logGamma from math-functions-0.1.5.2, D"
:precision binary64
:herbie-target
(if (< z -6.4993449962526318e53) (+ x (* (+ (- 3.13060547622999996 (/ 36.527041698806414 z)) (/ t (* z z))) (/ y 1))) (if (< z 7.0669654369142868e59) (+ x (/ y (/ (+ (* (+ (* (+ (* (+ z 15.234687406999999) z) 31.469011574900001) z) 11.940090572100001) z) 0.60777138777100004) (+ (* (+ (* (+ (* (+ (* z 3.13060547622999996) 11.166754126200001) z) t) z) a) z) b)))) (+ x (* (+ (- 3.13060547622999996 (/ 36.527041698806414 z)) (/ t (* z z))) (/ y 1)))))
(+ x (/ (* y (+ (* (+ (* (+ (* (+ (* z 3.13060547622999996) 11.166754126200001) z) t) z) a) z) b)) (+ (* (+ (* (+ (* (+ z 15.234687406999999) z) 31.469011574900001) z) 11.940090572100001) z) 0.60777138777100004))))