\frac{\log \left(1 - x\right)}{\log \left(1 + x\right)}\frac{\log 1 - \left(1 \cdot x + \left(\frac{1}{2} \cdot \frac{x}{1}\right) \cdot \frac{x}{{\left(\sqrt{1}\right)}^{2}}\right)}{\left(1 \cdot x + \log 1\right) - \frac{1}{2} \cdot \frac{{x}^{2}}{{1}^{2}}}double f(double x) {
double r93421 = 1.0;
double r93422 = x;
double r93423 = r93421 - r93422;
double r93424 = log(r93423);
double r93425 = r93421 + r93422;
double r93426 = log(r93425);
double r93427 = r93424 / r93426;
return r93427;
}
double f(double x) {
double r93428 = 1.0;
double r93429 = log(r93428);
double r93430 = x;
double r93431 = r93428 * r93430;
double r93432 = 0.5;
double r93433 = r93430 / r93428;
double r93434 = r93432 * r93433;
double r93435 = sqrt(r93428);
double r93436 = 2.0;
double r93437 = pow(r93435, r93436);
double r93438 = r93430 / r93437;
double r93439 = r93434 * r93438;
double r93440 = r93431 + r93439;
double r93441 = r93429 - r93440;
double r93442 = r93431 + r93429;
double r93443 = pow(r93430, r93436);
double r93444 = pow(r93428, r93436);
double r93445 = r93443 / r93444;
double r93446 = r93432 * r93445;
double r93447 = r93442 - r93446;
double r93448 = r93441 / r93447;
return r93448;
}




Bits error versus x
Results
| Original | 61.3 |
|---|---|
| Target | 0.3 |
| Herbie | 0.4 |
Initial program 61.3
Taylor expanded around 0 60.4
Taylor expanded around 0 0.4
rmApplied add-sqr-sqrt0.4
Applied unpow-prod-down0.4
Applied unpow20.4
Applied times-frac0.4
Applied associate-*r*0.4
Simplified0.4
Final simplification0.4
herbie shell --seed 2019351
(FPCore (x)
:name "qlog (example 3.10)"
:precision binary64
:pre (and (< -1 x) (< x 1))
:herbie-target
(- (+ (+ (+ 1 x) (/ (* x x) 2)) (* 0.4166666666666667 (pow x 3))))
(/ (log (- 1 x)) (log (+ 1 x))))