\frac{\log \left(1 - x\right)}{\log \left(1 + x\right)}\frac{\log 1 - \left(1 \cdot x + \frac{1}{2} \cdot \frac{{x}^{2}}{{1}^{2}}\right)}{\mathsf{fma}\left(x, 1, \log 1 - \frac{1}{2} \cdot \frac{{x}^{2}}{{1}^{2}}\right)}double f(double x) {
double r98463 = 1.0;
double r98464 = x;
double r98465 = r98463 - r98464;
double r98466 = log(r98465);
double r98467 = r98463 + r98464;
double r98468 = log(r98467);
double r98469 = r98466 / r98468;
return r98469;
}
double f(double x) {
double r98470 = 1.0;
double r98471 = log(r98470);
double r98472 = x;
double r98473 = r98470 * r98472;
double r98474 = 0.5;
double r98475 = 2.0;
double r98476 = pow(r98472, r98475);
double r98477 = pow(r98470, r98475);
double r98478 = r98476 / r98477;
double r98479 = r98474 * r98478;
double r98480 = r98473 + r98479;
double r98481 = r98471 - r98480;
double r98482 = r98471 - r98479;
double r98483 = fma(r98472, r98470, r98482);
double r98484 = r98481 / r98483;
return r98484;
}




Bits error versus x
| Original | 61.3 |
|---|---|
| Target | 0.3 |
| Herbie | 0.4 |
Initial program 61.3
Taylor expanded around 0 60.5
Simplified60.5
Taylor expanded around 0 0.4
Final simplification0.4
herbie shell --seed 2020002 +o rules:numerics
(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))))