x + \frac{y \cdot \left(\left(\left(\left(z \cdot 3.130605476229999961645944495103321969509 + 11.16675412620000074070958362426608800888\right) \cdot z + t\right) \cdot z + a\right) \cdot z + b\right)}{\left(\left(\left(z + 15.2346874069999991263557603815570473671\right) \cdot z + 31.46901157490000144889563671313226222992\right) \cdot z + 11.94009057210000079862766142468899488449\right) \cdot z + 0.6077713877710000378584709324059076607227}\begin{array}{l}
\mathbf{if}\;z \le -5.529459923355985229411890016657604954072 \cdot 10^{74} \lor \neg \left(z \le 7218106116288501178668675409183118056227000\right):\\
\;\;\;\;x + y \cdot \left(\left(\frac{t}{{z}^{2}} + 3.130605476229999961645944495103321969509\right) - 36.52704169880641416057187598198652267456 \cdot \frac{1}{z}\right)\\
\mathbf{else}:\\
\;\;\;\;x + y \cdot \frac{\left(\left(\left(z \cdot 3.130605476229999961645944495103321969509 + 11.16675412620000074070958362426608800888\right) \cdot z + t\right) \cdot z + a\right) \cdot z + b}{\left(\left(\left(z + 15.2346874069999991263557603815570473671\right) \cdot z + 31.46901157490000144889563671313226222992\right) \cdot z + 11.94009057210000079862766142468899488449\right) \cdot z + 0.6077713877710000378584709324059076607227}\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r256067 = x;
double r256068 = y;
double r256069 = z;
double r256070 = 3.13060547623;
double r256071 = r256069 * r256070;
double r256072 = 11.1667541262;
double r256073 = r256071 + r256072;
double r256074 = r256073 * r256069;
double r256075 = t;
double r256076 = r256074 + r256075;
double r256077 = r256076 * r256069;
double r256078 = a;
double r256079 = r256077 + r256078;
double r256080 = r256079 * r256069;
double r256081 = b;
double r256082 = r256080 + r256081;
double r256083 = r256068 * r256082;
double r256084 = 15.234687407;
double r256085 = r256069 + r256084;
double r256086 = r256085 * r256069;
double r256087 = 31.4690115749;
double r256088 = r256086 + r256087;
double r256089 = r256088 * r256069;
double r256090 = 11.9400905721;
double r256091 = r256089 + r256090;
double r256092 = r256091 * r256069;
double r256093 = 0.607771387771;
double r256094 = r256092 + r256093;
double r256095 = r256083 / r256094;
double r256096 = r256067 + r256095;
return r256096;
}
double f(double x, double y, double z, double t, double a, double b) {
double r256097 = z;
double r256098 = -5.529459923355985e+74;
bool r256099 = r256097 <= r256098;
double r256100 = 7.218106116288501e+42;
bool r256101 = r256097 <= r256100;
double r256102 = !r256101;
bool r256103 = r256099 || r256102;
double r256104 = x;
double r256105 = y;
double r256106 = t;
double r256107 = 2.0;
double r256108 = pow(r256097, r256107);
double r256109 = r256106 / r256108;
double r256110 = 3.13060547623;
double r256111 = r256109 + r256110;
double r256112 = 36.527041698806414;
double r256113 = 1.0;
double r256114 = r256113 / r256097;
double r256115 = r256112 * r256114;
double r256116 = r256111 - r256115;
double r256117 = r256105 * r256116;
double r256118 = r256104 + r256117;
double r256119 = r256097 * r256110;
double r256120 = 11.1667541262;
double r256121 = r256119 + r256120;
double r256122 = r256121 * r256097;
double r256123 = r256122 + r256106;
double r256124 = r256123 * r256097;
double r256125 = a;
double r256126 = r256124 + r256125;
double r256127 = r256126 * r256097;
double r256128 = b;
double r256129 = r256127 + r256128;
double r256130 = 15.234687407;
double r256131 = r256097 + r256130;
double r256132 = r256131 * r256097;
double r256133 = 31.4690115749;
double r256134 = r256132 + r256133;
double r256135 = r256134 * r256097;
double r256136 = 11.9400905721;
double r256137 = r256135 + r256136;
double r256138 = r256137 * r256097;
double r256139 = 0.607771387771;
double r256140 = r256138 + r256139;
double r256141 = r256129 / r256140;
double r256142 = r256105 * r256141;
double r256143 = r256104 + r256142;
double r256144 = r256103 ? r256118 : r256143;
return r256144;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a




Bits error versus b
Results
| Original | 29.1 |
|---|---|
| Target | 1.0 |
| Herbie | 1.2 |
if z < -5.529459923355985e+74 or 7.218106116288501e+42 < z Initial program 61.7
rmApplied *-un-lft-identity61.7
Applied times-frac60.5
Simplified60.5
Taylor expanded around inf 0.8
if -5.529459923355985e+74 < z < 7.218106116288501e+42Initial program 3.4
rmApplied *-un-lft-identity3.4
Applied times-frac1.5
Simplified1.5
Final simplification1.2
herbie shell --seed 1978988140
(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.4993449962526318e53) (+ x (* (+ (- 3.13060547622999996 (/ 36.527041698806414 z)) (/ t (* z z))) (/ y 1))) (if (< z 7.0669654369142868e59) (+ x (/ y (/ (+ (* (+ (* (+ (* (+ z 15.234687406999999) z) 31.469011574900001) z) 11.940090572100001) z) 0.60777138777100004) (+ (* (+ (* (+ (* (+ (* z 3.13060547622999996) 11.166754126200001) z) t) z) a) z) b)))) (+ x (* (+ (- 3.13060547622999996 (/ 36.527041698806414 z)) (/ t (* z z))) (/ y 1)))))
(+ x (/ (* y (+ (* (+ (* (+ (* (+ (* z 3.13060547622999996) 11.166754126200001) z) t) z) a) z) b)) (+ (* (+ (* (+ (* (+ z 15.234687406999999) z) 31.469011574900001) z) 11.940090572100001) z) 0.60777138777100004))))