\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 -2.157743170025255412113770440657152354777 \cdot 10^{66} \lor \neg \left(x \le 9.174667762816647694608141324020661791727 \cdot 10^{58}\right):\\
\;\;\;\;\mathsf{fma}\left(4.16438922227999963610045597306452691555, x, \frac{y}{{x}^{2}}\right) - 110.1139242984810948655649553984403610229\\
\mathbf{else}:\\
\;\;\;\;\left(x - 2\right) \cdot \frac{\mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(x, 4.16438922227999963610045597306452691555, 78.69949241540000173245061887428164482117\right), x, 137.5194164160000127594685181975364685059\right), x, y\right), x, z\right)}{\mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(x + 43.3400022514000013984514225739985704422, x, 263.5050747210000281484099105000495910645\right), x, 313.3992158940000081202015280723571777344\right), x, 47.06687660600000100430406746454536914825\right)}\\
\end{array}double f(double x, double y, double z) {
double r232196 = x;
double r232197 = 2.0;
double r232198 = r232196 - r232197;
double r232199 = 4.16438922228;
double r232200 = r232196 * r232199;
double r232201 = 78.6994924154;
double r232202 = r232200 + r232201;
double r232203 = r232202 * r232196;
double r232204 = 137.519416416;
double r232205 = r232203 + r232204;
double r232206 = r232205 * r232196;
double r232207 = y;
double r232208 = r232206 + r232207;
double r232209 = r232208 * r232196;
double r232210 = z;
double r232211 = r232209 + r232210;
double r232212 = r232198 * r232211;
double r232213 = 43.3400022514;
double r232214 = r232196 + r232213;
double r232215 = r232214 * r232196;
double r232216 = 263.505074721;
double r232217 = r232215 + r232216;
double r232218 = r232217 * r232196;
double r232219 = 313.399215894;
double r232220 = r232218 + r232219;
double r232221 = r232220 * r232196;
double r232222 = 47.066876606;
double r232223 = r232221 + r232222;
double r232224 = r232212 / r232223;
return r232224;
}
double f(double x, double y, double z) {
double r232225 = x;
double r232226 = -2.1577431700252554e+66;
bool r232227 = r232225 <= r232226;
double r232228 = 9.174667762816648e+58;
bool r232229 = r232225 <= r232228;
double r232230 = !r232229;
bool r232231 = r232227 || r232230;
double r232232 = 4.16438922228;
double r232233 = y;
double r232234 = 2.0;
double r232235 = pow(r232225, r232234);
double r232236 = r232233 / r232235;
double r232237 = fma(r232232, r232225, r232236);
double r232238 = 110.1139242984811;
double r232239 = r232237 - r232238;
double r232240 = 2.0;
double r232241 = r232225 - r232240;
double r232242 = 78.6994924154;
double r232243 = fma(r232225, r232232, r232242);
double r232244 = 137.519416416;
double r232245 = fma(r232243, r232225, r232244);
double r232246 = fma(r232245, r232225, r232233);
double r232247 = z;
double r232248 = fma(r232246, r232225, r232247);
double r232249 = 43.3400022514;
double r232250 = r232225 + r232249;
double r232251 = 263.505074721;
double r232252 = fma(r232250, r232225, r232251);
double r232253 = 313.399215894;
double r232254 = fma(r232252, r232225, r232253);
double r232255 = 47.066876606;
double r232256 = fma(r232254, r232225, r232255);
double r232257 = r232248 / r232256;
double r232258 = r232241 * r232257;
double r232259 = r232231 ? r232239 : r232258;
return r232259;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 26.6 |
|---|---|
| Target | 0.5 |
| Herbie | 0.5 |
if x < -2.1577431700252554e+66 or 9.174667762816648e+58 < x Initial program 63.7
Simplified60.8
Taylor expanded around inf 0.2
Simplified0.2
if -2.1577431700252554e+66 < x < 9.174667762816648e+58Initial program 2.4
Simplified0.9
rmApplied div-inv0.9
rmApplied *-un-lft-identity0.9
Applied *-un-lft-identity0.9
Applied times-frac0.9
Applied add-cube-cbrt0.9
Applied times-frac0.9
Simplified0.9
Simplified0.7
Final simplification0.5
herbie shell --seed 2019208 +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.3261287258700048e62) (- (+ (/ y (* x x)) (* 4.16438922227999964 x)) 110.11392429848109) (if (< x 9.4299917145546727e55) (* (/ (- x 2) 1) (/ (+ (* (+ (* (+ (* (+ (* x 4.16438922227999964) 78.6994924154000017) x) 137.51941641600001) x) y) x) z) (+ (* (+ (+ (* 263.50507472100003 x) (+ (* 43.3400022514000014 (* x x)) (* x (* x x)))) 313.399215894) x) 47.066876606000001))) (- (+ (/ y (* x x)) (* 4.16438922227999964 x)) 110.11392429848109)))
(/ (* (- x 2) (+ (* (+ (* (+ (* (+ (* x 4.16438922227999964) 78.6994924154000017) x) 137.51941641600001) x) y) x) z)) (+ (* (+ (* (+ (* (+ x 43.3400022514000014) x) 263.50507472100003) x) 313.399215894) x) 47.066876606000001)))