\frac{\left(x - 2\right) \cdot \left(\left(\left(\left(x \cdot 4.16438922227999963610045597306452691555 + 78.69949241540000173245061887428164482117\right) \cdot x + 137.5194164160000127594685181975364685059\right) \cdot x + y\right) \cdot x + z\right)}{\left(\left(\left(x + 43.3400022514000013984514225739985704422\right) \cdot x + 263.5050747210000281484099105000495910645\right) \cdot x + 313.3992158940000081202015280723571777344\right) \cdot x + 47.06687660600000100430406746454536914825}\begin{array}{l}
\mathbf{if}\;x \le -7.689434859723142729524296101916669810814 \cdot 10^{48} \lor \neg \left(x \le 219853368066851898595505554325504\right):\\
\;\;\;\;\mathsf{fma}\left(x, 4.16438922227999963610045597306452691555, \frac{y}{{x}^{2}}\right) - 110.1139242984810806547102401964366436005\\
\mathbf{else}:\\
\;\;\;\;\frac{\left(x - 2\right) \cdot \left(\left(\left(\left(x \cdot 4.16438922227999963610045597306452691555 + 78.69949241540000173245061887428164482117\right) \cdot x + 137.5194164160000127594685181975364685059\right) \cdot x + y\right) \cdot x + z\right)}{\left(\left(\left(x + 43.3400022514000013984514225739985704422\right) \cdot x + 263.5050747210000281484099105000495910645\right) \cdot x + 313.3992158940000081202015280723571777344\right) \cdot x + 47.06687660600000100430406746454536914825}\\
\end{array}double f(double x, double y, double z) {
double r604166 = x;
double r604167 = 2.0;
double r604168 = r604166 - r604167;
double r604169 = 4.16438922228;
double r604170 = r604166 * r604169;
double r604171 = 78.6994924154;
double r604172 = r604170 + r604171;
double r604173 = r604172 * r604166;
double r604174 = 137.519416416;
double r604175 = r604173 + r604174;
double r604176 = r604175 * r604166;
double r604177 = y;
double r604178 = r604176 + r604177;
double r604179 = r604178 * r604166;
double r604180 = z;
double r604181 = r604179 + r604180;
double r604182 = r604168 * r604181;
double r604183 = 43.3400022514;
double r604184 = r604166 + r604183;
double r604185 = r604184 * r604166;
double r604186 = 263.505074721;
double r604187 = r604185 + r604186;
double r604188 = r604187 * r604166;
double r604189 = 313.399215894;
double r604190 = r604188 + r604189;
double r604191 = r604190 * r604166;
double r604192 = 47.066876606;
double r604193 = r604191 + r604192;
double r604194 = r604182 / r604193;
return r604194;
}
double f(double x, double y, double z) {
double r604195 = x;
double r604196 = -7.689434859723143e+48;
bool r604197 = r604195 <= r604196;
double r604198 = 2.198533680668519e+32;
bool r604199 = r604195 <= r604198;
double r604200 = !r604199;
bool r604201 = r604197 || r604200;
double r604202 = 4.16438922228;
double r604203 = y;
double r604204 = 2.0;
double r604205 = pow(r604195, r604204);
double r604206 = r604203 / r604205;
double r604207 = fma(r604195, r604202, r604206);
double r604208 = 110.11392429848108;
double r604209 = r604207 - r604208;
double r604210 = 2.0;
double r604211 = r604195 - r604210;
double r604212 = r604195 * r604202;
double r604213 = 78.6994924154;
double r604214 = r604212 + r604213;
double r604215 = r604214 * r604195;
double r604216 = 137.519416416;
double r604217 = r604215 + r604216;
double r604218 = r604217 * r604195;
double r604219 = r604218 + r604203;
double r604220 = r604219 * r604195;
double r604221 = z;
double r604222 = r604220 + r604221;
double r604223 = r604211 * r604222;
double r604224 = 43.3400022514;
double r604225 = r604195 + r604224;
double r604226 = r604225 * r604195;
double r604227 = 263.505074721;
double r604228 = r604226 + r604227;
double r604229 = r604228 * r604195;
double r604230 = 313.399215894;
double r604231 = r604229 + r604230;
double r604232 = r604231 * r604195;
double r604233 = 47.066876606;
double r604234 = r604232 + r604233;
double r604235 = r604223 / r604234;
double r604236 = r604201 ? r604209 : r604235;
return r604236;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 26.4 |
|---|---|
| Target | 0.5 |
| Herbie | 0.9 |
if x < -7.689434859723143e+48 or 2.198533680668519e+32 < x Initial program 60.1
Simplified56.4
rmApplied flip--56.4
Applied associate-/l/56.4
Taylor expanded around inf 0.9
Simplified0.9
if -7.689434859723143e+48 < x < 2.198533680668519e+32Initial program 0.8
Final simplification0.9
herbie shell --seed 2019350 +o rules:numerics
(FPCore (x y z)
:name "Numeric.SpecFunctions:logGamma from math-functions-0.1.5.2, C"
:precision binary64
:herbie-target
(if (< x -3.326128725870005e+62) (- (+ (/ y (* x x)) (* 4.16438922228 x)) 110.1139242984811) (if (< x 9.429991714554673e+55) (* (/ (- x 2) 1) (/ (+ (* (+ (* (+ (* (+ (* x 4.16438922228) 78.6994924154) x) 137.519416416) x) y) x) z) (+ (* (+ (+ (* 263.505074721 x) (+ (* 43.3400022514 (* x x)) (* x (* x x)))) 313.399215894) x) 47.066876606))) (- (+ (/ y (* x x)) (* 4.16438922228 x)) 110.1139242984811)))
(/ (* (- x 2) (+ (* (+ (* (+ (* (+ (* x 4.16438922228) 78.6994924154) x) 137.519416416) x) y) x) z)) (+ (* (+ (* (+ (* (+ x 43.3400022514) x) 263.505074721) x) 313.399215894) x) 47.066876606)))