\frac{\log \left(1 - x\right)}{\log \left(1 + x\right)}\log \left(e^{\frac{\log 1 - \left(1 \cdot x + \left(\frac{x}{1} \cdot \frac{x}{1}\right) \cdot \frac{1}{2}\right)}{\left(1 \cdot x + \log 1\right) + \left(\frac{x}{1} \cdot \frac{x}{1}\right) \cdot \frac{-1}{2}}}\right)double f(double x) {
double r4242590 = 1.0;
double r4242591 = x;
double r4242592 = r4242590 - r4242591;
double r4242593 = log(r4242592);
double r4242594 = r4242590 + r4242591;
double r4242595 = log(r4242594);
double r4242596 = r4242593 / r4242595;
return r4242596;
}
double f(double x) {
double r4242597 = 1.0;
double r4242598 = log(r4242597);
double r4242599 = x;
double r4242600 = r4242597 * r4242599;
double r4242601 = r4242599 / r4242597;
double r4242602 = r4242601 * r4242601;
double r4242603 = 0.5;
double r4242604 = r4242602 * r4242603;
double r4242605 = r4242600 + r4242604;
double r4242606 = r4242598 - r4242605;
double r4242607 = r4242600 + r4242598;
double r4242608 = -0.5;
double r4242609 = r4242602 * r4242608;
double r4242610 = r4242607 + r4242609;
double r4242611 = r4242606 / r4242610;
double r4242612 = exp(r4242611);
double r4242613 = log(r4242612);
return r4242613;
}




Bits error versus x
Results
| Original | 61.4 |
|---|---|
| Target | 0.3 |
| Herbie | 0.4 |
Initial program 61.4
Taylor expanded around 0 60.5
Simplified60.5
Taylor expanded around 0 0.4
Simplified0.4
rmApplied add-log-exp0.4
Final simplification0.4
herbie shell --seed 2019192
(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))))