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 -1.41477452775683541 \cdot 10^{60} \lor \neg \left(z \le 7.72815837420437455 \cdot 10^{23}\right):\\
\;\;\;\;\left(\left(\frac{t}{{z}^{2}} + 3.13060547622999996\right) - 36.527041698806414 \cdot \frac{1}{z}\right) \cdot y + x\\
\mathbf{else}:\\
\;\;\;\;\frac{\mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(z, 3.13060547622999996, 11.166754126200001\right), z, t\right), z, a\right), z, b\right)}{\frac{\mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(z + 15.234687406999999, z, 31.469011574900001\right), z, 11.940090572100001\right), z, 0.60777138777100004\right)}{y}} + x\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r326104 = x;
double r326105 = y;
double r326106 = z;
double r326107 = 3.13060547623;
double r326108 = r326106 * r326107;
double r326109 = 11.1667541262;
double r326110 = r326108 + r326109;
double r326111 = r326110 * r326106;
double r326112 = t;
double r326113 = r326111 + r326112;
double r326114 = r326113 * r326106;
double r326115 = a;
double r326116 = r326114 + r326115;
double r326117 = r326116 * r326106;
double r326118 = b;
double r326119 = r326117 + r326118;
double r326120 = r326105 * r326119;
double r326121 = 15.234687407;
double r326122 = r326106 + r326121;
double r326123 = r326122 * r326106;
double r326124 = 31.4690115749;
double r326125 = r326123 + r326124;
double r326126 = r326125 * r326106;
double r326127 = 11.9400905721;
double r326128 = r326126 + r326127;
double r326129 = r326128 * r326106;
double r326130 = 0.607771387771;
double r326131 = r326129 + r326130;
double r326132 = r326120 / r326131;
double r326133 = r326104 + r326132;
return r326133;
}
double f(double x, double y, double z, double t, double a, double b) {
double r326134 = z;
double r326135 = -1.4147745277568354e+60;
bool r326136 = r326134 <= r326135;
double r326137 = 7.728158374204375e+23;
bool r326138 = r326134 <= r326137;
double r326139 = !r326138;
bool r326140 = r326136 || r326139;
double r326141 = t;
double r326142 = 2.0;
double r326143 = pow(r326134, r326142);
double r326144 = r326141 / r326143;
double r326145 = 3.13060547623;
double r326146 = r326144 + r326145;
double r326147 = 36.527041698806414;
double r326148 = 1.0;
double r326149 = r326148 / r326134;
double r326150 = r326147 * r326149;
double r326151 = r326146 - r326150;
double r326152 = y;
double r326153 = r326151 * r326152;
double r326154 = x;
double r326155 = r326153 + r326154;
double r326156 = 11.1667541262;
double r326157 = fma(r326134, r326145, r326156);
double r326158 = fma(r326157, r326134, r326141);
double r326159 = a;
double r326160 = fma(r326158, r326134, r326159);
double r326161 = b;
double r326162 = fma(r326160, r326134, r326161);
double r326163 = 15.234687407;
double r326164 = r326134 + r326163;
double r326165 = 31.4690115749;
double r326166 = fma(r326164, r326134, r326165);
double r326167 = 11.9400905721;
double r326168 = fma(r326166, r326134, r326167);
double r326169 = 0.607771387771;
double r326170 = fma(r326168, r326134, r326169);
double r326171 = r326170 / r326152;
double r326172 = r326162 / r326171;
double r326173 = r326172 + r326154;
double r326174 = r326140 ? r326155 : r326173;
return r326174;
}




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.1 |
|---|---|
| Target | 1.0 |
| Herbie | 1.3 |
if z < -1.4147745277568354e+60 or 7.728158374204375e+23 < z Initial program 60.2
Simplified58.2
rmApplied add-cube-cbrt58.3
Applied associate-/r*58.3
rmApplied fma-udef58.3
Simplified58.3
rmApplied associate-/r/57.8
Taylor expanded around inf 1.5
if -1.4147745277568354e+60 < z < 7.728158374204375e+23Initial program 2.0
Simplified1.2
rmApplied add-cube-cbrt1.2
Applied associate-/r*1.3
rmApplied fma-udef1.3
Simplified1.2
Final simplification1.3
herbie shell --seed 2020039 +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))))