\frac{\log \left(1 - x\right)}{\log \left(1 + x\right)}\log \left(e^{\frac{\log 1 - \mathsf{fma}\left(1, x, \frac{1}{2} \cdot \frac{{x}^{2}}{{1}^{2}}\right)}{\mathsf{fma}\left(\frac{-1}{2}, \frac{{x}^{2}}{{1}^{2}}, \mathsf{fma}\left(1, x, \log 1\right)\right)}}\right)double f(double x) {
double r56693 = 1.0;
double r56694 = x;
double r56695 = r56693 - r56694;
double r56696 = log(r56695);
double r56697 = r56693 + r56694;
double r56698 = log(r56697);
double r56699 = r56696 / r56698;
return r56699;
}
double f(double x) {
double r56700 = 1.0;
double r56701 = log(r56700);
double r56702 = x;
double r56703 = 0.5;
double r56704 = 2.0;
double r56705 = pow(r56702, r56704);
double r56706 = pow(r56700, r56704);
double r56707 = r56705 / r56706;
double r56708 = r56703 * r56707;
double r56709 = fma(r56700, r56702, r56708);
double r56710 = r56701 - r56709;
double r56711 = -0.5;
double r56712 = fma(r56700, r56702, r56701);
double r56713 = fma(r56711, r56707, r56712);
double r56714 = r56710 / r56713;
double r56715 = exp(r56714);
double r56716 = log(r56715);
return r56716;
}




Bits error versus x
| Original | 61.3 |
|---|---|
| Target | 0.4 |
| Herbie | 0.5 |
Initial program 61.3
Taylor expanded around 0 60.4
Simplified60.4
Taylor expanded around 0 0.5
Simplified0.5
rmApplied add-log-exp0.5
Final simplification0.5
herbie shell --seed 2019326 +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))))