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 -3329472084554247498818768307486720 \lor \neg \left(z \le 206842536711288841568256\right):\\
\;\;\;\;\mathsf{fma}\left(y, \frac{t}{{z}^{2}} + 3.130605476229999961645944495103321969509, x\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{\mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(z, 3.130605476229999961645944495103321969509, 11.16675412620000074070958362426608800888\right), z, t\right), z, a\right), z, b\right) \cdot y}{\mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(z + 15.2346874069999991263557603815570473671, z, 31.46901157490000144889563671313226222992\right), z, 11.94009057210000079862766142468899488449\right), z, 0.6077713877710000378584709324059076607227\right)} + x\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r241185 = x;
double r241186 = y;
double r241187 = z;
double r241188 = 3.13060547623;
double r241189 = r241187 * r241188;
double r241190 = 11.1667541262;
double r241191 = r241189 + r241190;
double r241192 = r241191 * r241187;
double r241193 = t;
double r241194 = r241192 + r241193;
double r241195 = r241194 * r241187;
double r241196 = a;
double r241197 = r241195 + r241196;
double r241198 = r241197 * r241187;
double r241199 = b;
double r241200 = r241198 + r241199;
double r241201 = r241186 * r241200;
double r241202 = 15.234687407;
double r241203 = r241187 + r241202;
double r241204 = r241203 * r241187;
double r241205 = 31.4690115749;
double r241206 = r241204 + r241205;
double r241207 = r241206 * r241187;
double r241208 = 11.9400905721;
double r241209 = r241207 + r241208;
double r241210 = r241209 * r241187;
double r241211 = 0.607771387771;
double r241212 = r241210 + r241211;
double r241213 = r241201 / r241212;
double r241214 = r241185 + r241213;
return r241214;
}
double f(double x, double y, double z, double t, double a, double b) {
double r241215 = z;
double r241216 = -3.3294720845542475e+33;
bool r241217 = r241215 <= r241216;
double r241218 = 2.0684253671128884e+23;
bool r241219 = r241215 <= r241218;
double r241220 = !r241219;
bool r241221 = r241217 || r241220;
double r241222 = y;
double r241223 = t;
double r241224 = 2.0;
double r241225 = pow(r241215, r241224);
double r241226 = r241223 / r241225;
double r241227 = 3.13060547623;
double r241228 = r241226 + r241227;
double r241229 = x;
double r241230 = fma(r241222, r241228, r241229);
double r241231 = 11.1667541262;
double r241232 = fma(r241215, r241227, r241231);
double r241233 = fma(r241232, r241215, r241223);
double r241234 = a;
double r241235 = fma(r241233, r241215, r241234);
double r241236 = b;
double r241237 = fma(r241235, r241215, r241236);
double r241238 = r241237 * r241222;
double r241239 = 15.234687407;
double r241240 = r241215 + r241239;
double r241241 = 31.4690115749;
double r241242 = fma(r241240, r241215, r241241);
double r241243 = 11.9400905721;
double r241244 = fma(r241242, r241215, r241243);
double r241245 = 0.607771387771;
double r241246 = fma(r241244, r241215, r241245);
double r241247 = r241238 / r241246;
double r241248 = r241247 + r241229;
double r241249 = r241221 ? r241230 : r241248;
return r241249;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a




Bits error versus b
| Original | 29.7 |
|---|---|
| Target | 0.9 |
| Herbie | 1.3 |
if z < -3.3294720845542475e+33 or 2.0684253671128884e+23 < z Initial program 58.7
Simplified56.7
Taylor expanded around inf 8.3
Simplified1.6
if -3.3294720845542475e+33 < z < 2.0684253671128884e+23Initial program 1.0
Simplified0.5
rmApplied add-cube-cbrt1.0
rmApplied fma-udef1.0
Simplified1.0
Final simplification1.3
herbie shell --seed 2019303 +o rules:numerics
(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))))