\left(\left(\left(x - 0.5\right) \cdot \log x - x\right) + 0.91893853320467\right) + \frac{\left(\left(y + 0.0007936500793651\right) \cdot z - 0.0027777777777778\right) \cdot z + 0.083333333333333}{x}\begin{array}{l}
\mathbf{if}\;x \le 6.901387925691936 \cdot 10^{+29}:\\
\;\;\;\;\frac{0.083333333333333 + \left(\left(y + 0.0007936500793651\right) \cdot z - 0.0027777777777778\right) \cdot z}{x} + \left(0.91893853320467 + \left(\log \left(\sqrt{x}\right) \cdot \left(x - 0.5\right) + \left(\sqrt{\log \left(\sqrt{x}\right) \cdot \left(x - 0.5\right)} \cdot \sqrt{\log \left(\sqrt{x}\right) \cdot \left(x - 0.5\right)} - x\right)\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\left(0.91893853320467 + \left(\left(x - 0.5\right) \cdot \log x - x\right)\right) + \left(\left(y + 0.0007936500793651\right) \cdot \frac{z \cdot z}{x} - \frac{0.0027777777777778}{\frac{x}{z}}\right)\\
\end{array}double f(double x, double y, double z) {
double r25250202 = x;
double r25250203 = 0.5;
double r25250204 = r25250202 - r25250203;
double r25250205 = log(r25250202);
double r25250206 = r25250204 * r25250205;
double r25250207 = r25250206 - r25250202;
double r25250208 = 0.91893853320467;
double r25250209 = r25250207 + r25250208;
double r25250210 = y;
double r25250211 = 0.0007936500793651;
double r25250212 = r25250210 + r25250211;
double r25250213 = z;
double r25250214 = r25250212 * r25250213;
double r25250215 = 0.0027777777777778;
double r25250216 = r25250214 - r25250215;
double r25250217 = r25250216 * r25250213;
double r25250218 = 0.083333333333333;
double r25250219 = r25250217 + r25250218;
double r25250220 = r25250219 / r25250202;
double r25250221 = r25250209 + r25250220;
return r25250221;
}
double f(double x, double y, double z) {
double r25250222 = x;
double r25250223 = 6.901387925691936e+29;
bool r25250224 = r25250222 <= r25250223;
double r25250225 = 0.083333333333333;
double r25250226 = y;
double r25250227 = 0.0007936500793651;
double r25250228 = r25250226 + r25250227;
double r25250229 = z;
double r25250230 = r25250228 * r25250229;
double r25250231 = 0.0027777777777778;
double r25250232 = r25250230 - r25250231;
double r25250233 = r25250232 * r25250229;
double r25250234 = r25250225 + r25250233;
double r25250235 = r25250234 / r25250222;
double r25250236 = 0.91893853320467;
double r25250237 = sqrt(r25250222);
double r25250238 = log(r25250237);
double r25250239 = 0.5;
double r25250240 = r25250222 - r25250239;
double r25250241 = r25250238 * r25250240;
double r25250242 = sqrt(r25250241);
double r25250243 = r25250242 * r25250242;
double r25250244 = r25250243 - r25250222;
double r25250245 = r25250241 + r25250244;
double r25250246 = r25250236 + r25250245;
double r25250247 = r25250235 + r25250246;
double r25250248 = log(r25250222);
double r25250249 = r25250240 * r25250248;
double r25250250 = r25250249 - r25250222;
double r25250251 = r25250236 + r25250250;
double r25250252 = r25250229 * r25250229;
double r25250253 = r25250252 / r25250222;
double r25250254 = r25250228 * r25250253;
double r25250255 = r25250222 / r25250229;
double r25250256 = r25250231 / r25250255;
double r25250257 = r25250254 - r25250256;
double r25250258 = r25250251 + r25250257;
double r25250259 = r25250224 ? r25250247 : r25250258;
return r25250259;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 5.7 |
|---|---|
| Target | 1.2 |
| Herbie | 3.9 |
if x < 6.901387925691936e+29Initial program 0.2
rmApplied add-sqr-sqrt0.2
Applied log-prod0.2
Applied distribute-lft-in0.2
Applied associate--l+0.2
rmApplied add-sqr-sqrt0.2
if 6.901387925691936e+29 < x Initial program 10.2
Taylor expanded around inf 10.4
Simplified6.9
Final simplification3.9
herbie shell --seed 2019163
(FPCore (x y z)
:name "Numeric.SpecFunctions:$slogFactorial from math-functions-0.1.5.2, B"
: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)))