x + \frac{y \cdot \left(\left(\left(\left(z \cdot 3.13060547622999996 + 11.166754126200001\right) \cdot z + t\right) \cdot z + a\right) \cdot z + b\right)}{\left(\left(\left(z + 15.234687406999999\right) \cdot z + 31.469011574900001\right) \cdot z + 11.940090572100001\right) \cdot z + 0.60777138777100004}\begin{array}{l}
\mathbf{if}\;z \le -17052070997538.8926 \lor \neg \left(z \le 130676711668149.234\right):\\
\;\;\;\;x + \mathsf{fma}\left(y, 3.13060547622999996, \frac{t \cdot y}{{z}^{2}} - 36.527041698806414 \cdot \frac{y}{z}\right)\\
\mathbf{else}:\\
\;\;\;\;x + y \cdot \frac{\left(\left(\left(z \cdot 3.13060547622999996 + 11.166754126200001\right) \cdot z + t\right) \cdot z + a\right) \cdot z + b}{\left(\left(\left(z + 15.234687406999999\right) \cdot z + 31.469011574900001\right) \cdot z + 11.940090572100001\right) \cdot z + 0.60777138777100004}\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r336139 = x;
double r336140 = y;
double r336141 = z;
double r336142 = 3.13060547623;
double r336143 = r336141 * r336142;
double r336144 = 11.1667541262;
double r336145 = r336143 + r336144;
double r336146 = r336145 * r336141;
double r336147 = t;
double r336148 = r336146 + r336147;
double r336149 = r336148 * r336141;
double r336150 = a;
double r336151 = r336149 + r336150;
double r336152 = r336151 * r336141;
double r336153 = b;
double r336154 = r336152 + r336153;
double r336155 = r336140 * r336154;
double r336156 = 15.234687407;
double r336157 = r336141 + r336156;
double r336158 = r336157 * r336141;
double r336159 = 31.4690115749;
double r336160 = r336158 + r336159;
double r336161 = r336160 * r336141;
double r336162 = 11.9400905721;
double r336163 = r336161 + r336162;
double r336164 = r336163 * r336141;
double r336165 = 0.607771387771;
double r336166 = r336164 + r336165;
double r336167 = r336155 / r336166;
double r336168 = r336139 + r336167;
return r336168;
}
double f(double x, double y, double z, double t, double a, double b) {
double r336169 = z;
double r336170 = -17052070997538.893;
bool r336171 = r336169 <= r336170;
double r336172 = 130676711668149.23;
bool r336173 = r336169 <= r336172;
double r336174 = !r336173;
bool r336175 = r336171 || r336174;
double r336176 = x;
double r336177 = y;
double r336178 = 3.13060547623;
double r336179 = t;
double r336180 = r336179 * r336177;
double r336181 = 2.0;
double r336182 = pow(r336169, r336181);
double r336183 = r336180 / r336182;
double r336184 = 36.527041698806414;
double r336185 = r336177 / r336169;
double r336186 = r336184 * r336185;
double r336187 = r336183 - r336186;
double r336188 = fma(r336177, r336178, r336187);
double r336189 = r336176 + r336188;
double r336190 = r336169 * r336178;
double r336191 = 11.1667541262;
double r336192 = r336190 + r336191;
double r336193 = r336192 * r336169;
double r336194 = r336193 + r336179;
double r336195 = r336194 * r336169;
double r336196 = a;
double r336197 = r336195 + r336196;
double r336198 = r336197 * r336169;
double r336199 = b;
double r336200 = r336198 + r336199;
double r336201 = 15.234687407;
double r336202 = r336169 + r336201;
double r336203 = r336202 * r336169;
double r336204 = 31.4690115749;
double r336205 = r336203 + r336204;
double r336206 = r336205 * r336169;
double r336207 = 11.9400905721;
double r336208 = r336206 + r336207;
double r336209 = r336208 * r336169;
double r336210 = 0.607771387771;
double r336211 = r336209 + r336210;
double r336212 = r336200 / r336211;
double r336213 = r336177 * r336212;
double r336214 = r336176 + r336213;
double r336215 = r336175 ? r336189 : r336214;
return r336215;
}




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.5 |
|---|---|
| Target | 1.1 |
| Herbie | 4.8 |
if z < -17052070997538.893 or 130676711668149.23 < z Initial program 56.8
Taylor expanded around inf 9.0
Simplified9.0
if -17052070997538.893 < z < 130676711668149.23Initial program 0.3
rmApplied *-un-lft-identity0.3
Applied times-frac0.3
Simplified0.3
Final simplification4.8
herbie shell --seed 2020065 +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.499344996252632e+53) (+ x (* (+ (- 3.13060547623 (/ 36.527041698806414 z)) (/ t (* z z))) (/ y 1))) (if (< z 7.066965436914287e+59) (+ x (/ y (/ (+ (* (+ (* (+ (* (+ z 15.234687407) z) 31.4690115749) z) 11.9400905721) z) 0.607771387771) (+ (* (+ (* (+ (* (+ (* z 3.13060547623) 11.1667541262) z) t) z) a) z) b)))) (+ x (* (+ (- 3.13060547623 (/ 36.527041698806414 z)) (/ t (* z z))) (/ y 1)))))
(+ x (/ (* y (+ (* (+ (* (+ (* (+ (* z 3.13060547623) 11.1667541262) z) t) z) a) z) b)) (+ (* (+ (* (+ (* (+ z 15.234687407) z) 31.4690115749) z) 11.9400905721) z) 0.607771387771))))