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.498504472161727260840727440753193578465 \cdot 10^{50} \lor \neg \left(z \le 5.476141867176123272637843180166698485792 \cdot 10^{47}\right):\\
\;\;\;\;\mathsf{fma}\left(y, \frac{t}{{z}^{2}} + 3.130605476229999961645944495103321969509, x\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{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)}, \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), x\right)\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r220138 = x;
double r220139 = y;
double r220140 = z;
double r220141 = 3.13060547623;
double r220142 = r220140 * r220141;
double r220143 = 11.1667541262;
double r220144 = r220142 + r220143;
double r220145 = r220144 * r220140;
double r220146 = t;
double r220147 = r220145 + r220146;
double r220148 = r220147 * r220140;
double r220149 = a;
double r220150 = r220148 + r220149;
double r220151 = r220150 * r220140;
double r220152 = b;
double r220153 = r220151 + r220152;
double r220154 = r220139 * r220153;
double r220155 = 15.234687407;
double r220156 = r220140 + r220155;
double r220157 = r220156 * r220140;
double r220158 = 31.4690115749;
double r220159 = r220157 + r220158;
double r220160 = r220159 * r220140;
double r220161 = 11.9400905721;
double r220162 = r220160 + r220161;
double r220163 = r220162 * r220140;
double r220164 = 0.607771387771;
double r220165 = r220163 + r220164;
double r220166 = r220154 / r220165;
double r220167 = r220138 + r220166;
return r220167;
}
double f(double x, double y, double z, double t, double a, double b) {
double r220168 = z;
double r220169 = -1.4985044721617273e+50;
bool r220170 = r220168 <= r220169;
double r220171 = 5.476141867176123e+47;
bool r220172 = r220168 <= r220171;
double r220173 = !r220172;
bool r220174 = r220170 || r220173;
double r220175 = y;
double r220176 = t;
double r220177 = 2.0;
double r220178 = pow(r220168, r220177);
double r220179 = r220176 / r220178;
double r220180 = 3.13060547623;
double r220181 = r220179 + r220180;
double r220182 = x;
double r220183 = fma(r220175, r220181, r220182);
double r220184 = 15.234687407;
double r220185 = r220168 + r220184;
double r220186 = 31.4690115749;
double r220187 = fma(r220185, r220168, r220186);
double r220188 = 11.9400905721;
double r220189 = fma(r220187, r220168, r220188);
double r220190 = 0.607771387771;
double r220191 = fma(r220189, r220168, r220190);
double r220192 = r220175 / r220191;
double r220193 = 11.1667541262;
double r220194 = fma(r220168, r220180, r220193);
double r220195 = fma(r220194, r220168, r220176);
double r220196 = a;
double r220197 = fma(r220195, r220168, r220196);
double r220198 = b;
double r220199 = fma(r220197, r220168, r220198);
double r220200 = fma(r220192, r220199, r220182);
double r220201 = r220174 ? r220183 : r220200;
return r220201;
}




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.4 |
|---|---|
| Target | 1.0 |
| Herbie | 1.1 |
if z < -1.4985044721617273e+50 or 5.476141867176123e+47 < z Initial program 61.4
Simplified59.6
Taylor expanded around inf 8.1
Simplified0.8
if -1.4985044721617273e+50 < z < 5.476141867176123e+47Initial program 2.3
Simplified1.3
Final simplification1.1
herbie shell --seed 2019304 +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))))