\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 -5.657540384046955638503103437127492884033 \cdot 10^{70} \lor \neg \left(x \le 2.326727261056874248511482631265264838987 \cdot 10^{74}\right):\\
\;\;\;\;\left(\frac{y}{{x}^{2}} + 4.16438922227999963610045597306452691555 \cdot x\right) - 110.1139242984810948655649553984403610229\\
\mathbf{else}:\\
\;\;\;\;\left(x - 2\right) \cdot \frac{\left(\left(\left(x \cdot 4.16438922227999963610045597306452691555 + 78.69949241540000173245061887428164482117\right) \cdot x + 137.5194164160000127594685181975364685059\right) \cdot x + y\right) \cdot x + z}{\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 r287012 = x;
double r287013 = 2.0;
double r287014 = r287012 - r287013;
double r287015 = 4.16438922228;
double r287016 = r287012 * r287015;
double r287017 = 78.6994924154;
double r287018 = r287016 + r287017;
double r287019 = r287018 * r287012;
double r287020 = 137.519416416;
double r287021 = r287019 + r287020;
double r287022 = r287021 * r287012;
double r287023 = y;
double r287024 = r287022 + r287023;
double r287025 = r287024 * r287012;
double r287026 = z;
double r287027 = r287025 + r287026;
double r287028 = r287014 * r287027;
double r287029 = 43.3400022514;
double r287030 = r287012 + r287029;
double r287031 = r287030 * r287012;
double r287032 = 263.505074721;
double r287033 = r287031 + r287032;
double r287034 = r287033 * r287012;
double r287035 = 313.399215894;
double r287036 = r287034 + r287035;
double r287037 = r287036 * r287012;
double r287038 = 47.066876606;
double r287039 = r287037 + r287038;
double r287040 = r287028 / r287039;
return r287040;
}
double f(double x, double y, double z) {
double r287041 = x;
double r287042 = -5.657540384046956e+70;
bool r287043 = r287041 <= r287042;
double r287044 = 2.326727261056874e+74;
bool r287045 = r287041 <= r287044;
double r287046 = !r287045;
bool r287047 = r287043 || r287046;
double r287048 = y;
double r287049 = 2.0;
double r287050 = pow(r287041, r287049);
double r287051 = r287048 / r287050;
double r287052 = 4.16438922228;
double r287053 = r287052 * r287041;
double r287054 = r287051 + r287053;
double r287055 = 110.1139242984811;
double r287056 = r287054 - r287055;
double r287057 = 2.0;
double r287058 = r287041 - r287057;
double r287059 = r287041 * r287052;
double r287060 = 78.6994924154;
double r287061 = r287059 + r287060;
double r287062 = r287061 * r287041;
double r287063 = 137.519416416;
double r287064 = r287062 + r287063;
double r287065 = r287064 * r287041;
double r287066 = r287065 + r287048;
double r287067 = r287066 * r287041;
double r287068 = z;
double r287069 = r287067 + r287068;
double r287070 = 43.3400022514;
double r287071 = r287041 + r287070;
double r287072 = r287071 * r287041;
double r287073 = 263.505074721;
double r287074 = r287072 + r287073;
double r287075 = r287074 * r287041;
double r287076 = 313.399215894;
double r287077 = r287075 + r287076;
double r287078 = r287077 * r287041;
double r287079 = 47.066876606;
double r287080 = r287078 + r287079;
double r287081 = r287069 / r287080;
double r287082 = r287058 * r287081;
double r287083 = r287047 ? r287056 : r287082;
return r287083;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 26.5 |
|---|---|
| Target | 0.5 |
| Herbie | 0.6 |
if x < -5.657540384046956e+70 or 2.326727261056874e+74 < x Initial program 64.0
Taylor expanded around inf 0.0
if -5.657540384046956e+70 < x < 2.326727261056874e+74Initial program 3.5
rmApplied associate-/l*1.1
rmApplied associate-/r/1.2
rmApplied div-inv1.2
Applied associate-*l*1.2
Simplified0.9
Final simplification0.6
herbie shell --seed 2019305
(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)))