\frac{\log \left(1 - x\right)}{\log \left(1 + x\right)}\frac{\log 1 - 1 \cdot x}{\left(\log 1 + 1 \cdot x\right) + \frac{\frac{-1}{2}}{\frac{1 \cdot 1}{{x}^{2}}}} - \frac{\frac{x}{1}}{\frac{\left(\log 1 + 1 \cdot x\right) + \frac{\frac{-1}{2}}{\frac{1 \cdot 1}{{x}^{2}}}}{\frac{\frac{1}{2}}{\frac{1}{x}}}}double f(double x) {
double r55397 = 1.0;
double r55398 = x;
double r55399 = r55397 - r55398;
double r55400 = log(r55399);
double r55401 = r55397 + r55398;
double r55402 = log(r55401);
double r55403 = r55400 / r55402;
return r55403;
}
double f(double x) {
double r55404 = 1.0;
double r55405 = log(r55404);
double r55406 = x;
double r55407 = r55404 * r55406;
double r55408 = r55405 - r55407;
double r55409 = r55405 + r55407;
double r55410 = -0.5;
double r55411 = r55404 * r55404;
double r55412 = 2.0;
double r55413 = pow(r55406, r55412);
double r55414 = r55411 / r55413;
double r55415 = r55410 / r55414;
double r55416 = r55409 + r55415;
double r55417 = r55408 / r55416;
double r55418 = r55406 / r55404;
double r55419 = 0.5;
double r55420 = r55404 / r55406;
double r55421 = r55419 / r55420;
double r55422 = r55416 / r55421;
double r55423 = r55418 / r55422;
double r55424 = r55417 - r55423;
return r55424;
}




Bits error versus x
Results
| Original | 61.5 |
|---|---|
| Target | 0.3 |
| Herbie | 0.4 |
Initial program 61.5
Taylor expanded around 0 60.6
Simplified60.6
Taylor expanded around 0 0.4
Simplified0.4
rmApplied div-sub0.4
Simplified0.4
Simplified0.4
Final simplification0.4
herbie shell --seed 2019195
(FPCore (x)
:name "qlog (example 3.10)"
:pre (and (< -1.0 x) (< x 1.0))
:herbie-target
(- (+ (+ (+ 1.0 x) (/ (* x x) 2.0)) (* 0.4166666666666667 (pow x 3.0))))
(/ (log (- 1.0 x)) (log (+ 1.0 x))))