\left(\left(\left(x - 0.5\right) \cdot \log x - x\right) + 0.9189385332046700050057097541866824030876\right) + \frac{\left(\left(y + 7.936500793651000149400709382518925849581 \cdot 10^{-4}\right) \cdot z - 0.002777777777777800001512975569539776188321\right) \cdot z + 0.08333333333333299564049667651488562114537}{x}\begin{array}{l}
\mathbf{if}\;x \le 520673369551077.9375:\\
\;\;\;\;\left(\sqrt{\left(x - 0.5\right) \cdot \log x - x} \cdot \sqrt{\left(x - 0.5\right) \cdot \log x - x} + 0.9189385332046700050057097541866824030876\right) + \frac{\left(\left(y + 7.936500793651000149400709382518925849581 \cdot 10^{-4}\right) \cdot z - 0.002777777777777800001512975569539776188321\right) \cdot z + 0.08333333333333299564049667651488562114537}{x}\\
\mathbf{else}:\\
\;\;\;\;\left(\left(\left(x - 0.5\right) \cdot \log x - x\right) + 0.9189385332046700050057097541866824030876\right) + \left(\frac{{z}^{2}}{x} \cdot \left(y + 7.936500793651000149400709382518925849581 \cdot 10^{-4}\right) - 0.002777777777777800001512975569539776188321 \cdot \frac{z}{x}\right)\\
\end{array}double f(double x, double y, double z) {
double r507122 = x;
double r507123 = 0.5;
double r507124 = r507122 - r507123;
double r507125 = log(r507122);
double r507126 = r507124 * r507125;
double r507127 = r507126 - r507122;
double r507128 = 0.91893853320467;
double r507129 = r507127 + r507128;
double r507130 = y;
double r507131 = 0.0007936500793651;
double r507132 = r507130 + r507131;
double r507133 = z;
double r507134 = r507132 * r507133;
double r507135 = 0.0027777777777778;
double r507136 = r507134 - r507135;
double r507137 = r507136 * r507133;
double r507138 = 0.083333333333333;
double r507139 = r507137 + r507138;
double r507140 = r507139 / r507122;
double r507141 = r507129 + r507140;
return r507141;
}
double f(double x, double y, double z) {
double r507142 = x;
double r507143 = 520673369551077.94;
bool r507144 = r507142 <= r507143;
double r507145 = 0.5;
double r507146 = r507142 - r507145;
double r507147 = log(r507142);
double r507148 = r507146 * r507147;
double r507149 = r507148 - r507142;
double r507150 = sqrt(r507149);
double r507151 = r507150 * r507150;
double r507152 = 0.91893853320467;
double r507153 = r507151 + r507152;
double r507154 = y;
double r507155 = 0.0007936500793651;
double r507156 = r507154 + r507155;
double r507157 = z;
double r507158 = r507156 * r507157;
double r507159 = 0.0027777777777778;
double r507160 = r507158 - r507159;
double r507161 = r507160 * r507157;
double r507162 = 0.083333333333333;
double r507163 = r507161 + r507162;
double r507164 = r507163 / r507142;
double r507165 = r507153 + r507164;
double r507166 = r507149 + r507152;
double r507167 = 2.0;
double r507168 = pow(r507157, r507167);
double r507169 = r507168 / r507142;
double r507170 = r507169 * r507156;
double r507171 = r507157 / r507142;
double r507172 = r507159 * r507171;
double r507173 = r507170 - r507172;
double r507174 = r507166 + r507173;
double r507175 = r507144 ? r507165 : r507174;
return r507175;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 5.9 |
|---|---|
| Target | 1.2 |
| Herbie | 4.3 |
if x < 520673369551077.94Initial program 0.1
rmApplied add-sqr-sqrt0.4
if 520673369551077.94 < x Initial program 10.5
Taylor expanded around inf 10.5
Simplified7.3
Final simplification4.3
herbie shell --seed 2019350
(FPCore (x y z)
:name "Numeric.SpecFunctions:$slogFactorial from math-functions-0.1.5.2, B"
:precision binary64
:herbie-target
(+ (+ (+ (* (- x 0.5) (log x)) (- 0.91893853320467 x)) (/ 0.083333333333333 x)) (* (/ z x) (- (* z (+ y 0.0007936500793651)) 0.0027777777777778)))
(+ (+ (- (* (- x 0.5) (log x)) x) 0.91893853320467) (/ (+ (* (- (* (+ y 0.0007936500793651) z) 0.0027777777777778) z) 0.083333333333333) x)))