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 -3.807302090294030027556419953822894801612 \cdot 10^{70}:\\
\;\;\;\;\left(\left(\frac{\frac{t}{z}}{z} \cdot y + 3.130605476229999961645944495103321969509 \cdot y\right) - \frac{36.52704169880641416057187598198652267456}{\frac{z}{y}}\right) + x\\
\mathbf{elif}\;z \le 548437100344291305854952900722667028480:\\
\;\;\;\;x + \frac{z \cdot \left(a + \left(\left(11.16675412620000074070958362426608800888 + 3.130605476229999961645944495103321969509 \cdot z\right) \cdot z + t\right) \cdot z\right) + b}{0.6077713877710000378584709324059076607227 + \left(z \cdot \left(31.46901157490000144889563671313226222992 + \left(z + 15.2346874069999991263557603815570473671\right) \cdot z\right) + 11.94009057210000079862766142468899488449\right) \cdot z} \cdot y\\
\mathbf{else}:\\
\;\;\;\;\left(\left(\frac{\frac{t}{z}}{z} \cdot y + 3.130605476229999961645944495103321969509 \cdot y\right) - \frac{36.52704169880641416057187598198652267456}{\frac{z}{y}}\right) + x\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r18178114 = x;
double r18178115 = y;
double r18178116 = z;
double r18178117 = 3.13060547623;
double r18178118 = r18178116 * r18178117;
double r18178119 = 11.1667541262;
double r18178120 = r18178118 + r18178119;
double r18178121 = r18178120 * r18178116;
double r18178122 = t;
double r18178123 = r18178121 + r18178122;
double r18178124 = r18178123 * r18178116;
double r18178125 = a;
double r18178126 = r18178124 + r18178125;
double r18178127 = r18178126 * r18178116;
double r18178128 = b;
double r18178129 = r18178127 + r18178128;
double r18178130 = r18178115 * r18178129;
double r18178131 = 15.234687407;
double r18178132 = r18178116 + r18178131;
double r18178133 = r18178132 * r18178116;
double r18178134 = 31.4690115749;
double r18178135 = r18178133 + r18178134;
double r18178136 = r18178135 * r18178116;
double r18178137 = 11.9400905721;
double r18178138 = r18178136 + r18178137;
double r18178139 = r18178138 * r18178116;
double r18178140 = 0.607771387771;
double r18178141 = r18178139 + r18178140;
double r18178142 = r18178130 / r18178141;
double r18178143 = r18178114 + r18178142;
return r18178143;
}
double f(double x, double y, double z, double t, double a, double b) {
double r18178144 = z;
double r18178145 = -3.80730209029403e+70;
bool r18178146 = r18178144 <= r18178145;
double r18178147 = t;
double r18178148 = r18178147 / r18178144;
double r18178149 = r18178148 / r18178144;
double r18178150 = y;
double r18178151 = r18178149 * r18178150;
double r18178152 = 3.13060547623;
double r18178153 = r18178152 * r18178150;
double r18178154 = r18178151 + r18178153;
double r18178155 = 36.527041698806414;
double r18178156 = r18178144 / r18178150;
double r18178157 = r18178155 / r18178156;
double r18178158 = r18178154 - r18178157;
double r18178159 = x;
double r18178160 = r18178158 + r18178159;
double r18178161 = 5.484371003442913e+38;
bool r18178162 = r18178144 <= r18178161;
double r18178163 = a;
double r18178164 = 11.1667541262;
double r18178165 = r18178152 * r18178144;
double r18178166 = r18178164 + r18178165;
double r18178167 = r18178166 * r18178144;
double r18178168 = r18178167 + r18178147;
double r18178169 = r18178168 * r18178144;
double r18178170 = r18178163 + r18178169;
double r18178171 = r18178144 * r18178170;
double r18178172 = b;
double r18178173 = r18178171 + r18178172;
double r18178174 = 0.607771387771;
double r18178175 = 31.4690115749;
double r18178176 = 15.234687407;
double r18178177 = r18178144 + r18178176;
double r18178178 = r18178177 * r18178144;
double r18178179 = r18178175 + r18178178;
double r18178180 = r18178144 * r18178179;
double r18178181 = 11.9400905721;
double r18178182 = r18178180 + r18178181;
double r18178183 = r18178182 * r18178144;
double r18178184 = r18178174 + r18178183;
double r18178185 = r18178173 / r18178184;
double r18178186 = r18178185 * r18178150;
double r18178187 = r18178159 + r18178186;
double r18178188 = r18178162 ? r18178187 : r18178160;
double r18178189 = r18178146 ? r18178160 : r18178188;
return r18178189;
}




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 | 30.2 |
|---|---|
| Target | 0.8 |
| Herbie | 1.0 |
if z < -3.80730209029403e+70 or 5.484371003442913e+38 < z Initial program 61.7
Taylor expanded around inf 8.6
Simplified0.8
rmApplied div-inv0.8
Applied associate-*l*0.7
Simplified0.7
if -3.80730209029403e+70 < z < 5.484371003442913e+38Initial program 2.9
rmApplied *-un-lft-identity2.9
Applied times-frac1.3
Simplified1.3
Final simplification1.0
herbie shell --seed 2019174
(FPCore (x y z t a b)
:name "Numeric.SpecFunctions:logGamma from math-functions-0.1.5.2, D"
:herbie-target
(if (< z -6.499344996252632e+53) (+ x (* (+ (- 3.13060547623 (/ 36.527041698806414 z)) (/ t (* z z))) (/ y 1.0))) (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.0)))))
(+ 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))))