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}\;\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} = -\infty \lor \neg \left(\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} \le 2.2070559343021274 \cdot 10^{274}\right):\\
\;\;\;\;\mathsf{fma}\left(y, 3.13060547622999996 + \frac{t}{{z}^{2}}, x\right)\\
\mathbf{else}:\\
\;\;\;\;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}\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r539056 = x;
double r539057 = y;
double r539058 = z;
double r539059 = 3.13060547623;
double r539060 = r539058 * r539059;
double r539061 = 11.1667541262;
double r539062 = r539060 + r539061;
double r539063 = r539062 * r539058;
double r539064 = t;
double r539065 = r539063 + r539064;
double r539066 = r539065 * r539058;
double r539067 = a;
double r539068 = r539066 + r539067;
double r539069 = r539068 * r539058;
double r539070 = b;
double r539071 = r539069 + r539070;
double r539072 = r539057 * r539071;
double r539073 = 15.234687407;
double r539074 = r539058 + r539073;
double r539075 = r539074 * r539058;
double r539076 = 31.4690115749;
double r539077 = r539075 + r539076;
double r539078 = r539077 * r539058;
double r539079 = 11.9400905721;
double r539080 = r539078 + r539079;
double r539081 = r539080 * r539058;
double r539082 = 0.607771387771;
double r539083 = r539081 + r539082;
double r539084 = r539072 / r539083;
double r539085 = r539056 + r539084;
return r539085;
}
double f(double x, double y, double z, double t, double a, double b) {
double r539086 = y;
double r539087 = z;
double r539088 = 3.13060547623;
double r539089 = r539087 * r539088;
double r539090 = 11.1667541262;
double r539091 = r539089 + r539090;
double r539092 = r539091 * r539087;
double r539093 = t;
double r539094 = r539092 + r539093;
double r539095 = r539094 * r539087;
double r539096 = a;
double r539097 = r539095 + r539096;
double r539098 = r539097 * r539087;
double r539099 = b;
double r539100 = r539098 + r539099;
double r539101 = r539086 * r539100;
double r539102 = 15.234687407;
double r539103 = r539087 + r539102;
double r539104 = r539103 * r539087;
double r539105 = 31.4690115749;
double r539106 = r539104 + r539105;
double r539107 = r539106 * r539087;
double r539108 = 11.9400905721;
double r539109 = r539107 + r539108;
double r539110 = r539109 * r539087;
double r539111 = 0.607771387771;
double r539112 = r539110 + r539111;
double r539113 = r539101 / r539112;
double r539114 = -inf.0;
bool r539115 = r539113 <= r539114;
double r539116 = 2.2070559343021274e+274;
bool r539117 = r539113 <= r539116;
double r539118 = !r539117;
bool r539119 = r539115 || r539118;
double r539120 = 2.0;
double r539121 = pow(r539087, r539120);
double r539122 = r539093 / r539121;
double r539123 = r539088 + r539122;
double r539124 = x;
double r539125 = fma(r539086, r539123, r539124);
double r539126 = r539124 + r539113;
double r539127 = r539119 ? r539125 : r539126;
return r539127;
}




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.6 |
|---|---|
| Target | 1.0 |
| Herbie | 1.5 |
if (/ (* y (+ (* (+ (* (+ (* (+ (* z 3.13060547623) 11.1667541262) z) t) z) a) z) b)) (+ (* (+ (* (+ (* (+ z 15.234687407) z) 31.4690115749) z) 11.9400905721) z) 0.607771387771)) < -inf.0 or 2.2070559343021274e+274 < (/ (* y (+ (* (+ (* (+ (* (+ (* z 3.13060547623) 11.1667541262) z) t) z) a) z) b)) (+ (* (+ (* (+ (* (+ z 15.234687407) z) 31.4690115749) z) 11.9400905721) z) 0.607771387771)) Initial program 62.5
Simplified59.2
Taylor expanded around inf 10.9
Simplified3.0
if -inf.0 < (/ (* y (+ (* (+ (* (+ (* (+ (* z 3.13060547623) 11.1667541262) z) t) z) a) z) b)) (+ (* (+ (* (+ (* (+ z 15.234687407) z) 31.4690115749) z) 11.9400905721) z) 0.607771387771)) < 2.2070559343021274e+274Initial program 0.2
Final simplification1.5
herbie shell --seed 2020034 +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))))