\frac{\log \left(1 - x\right)}{\log \left(1 + x\right)}\log \left(e^{\frac{\log 1 - \mathsf{fma}\left(\frac{x}{1} \cdot \frac{x}{1}, \frac{1}{2}, 1 \cdot x\right)}{\mathsf{fma}\left(\frac{x}{1} \cdot \frac{x}{1}, \frac{-1}{2}, \mathsf{fma}\left(x, 1, \log 1\right)\right)}}\right)double f(double x) {
double r3721800 = 1.0;
double r3721801 = x;
double r3721802 = r3721800 - r3721801;
double r3721803 = log(r3721802);
double r3721804 = r3721800 + r3721801;
double r3721805 = log(r3721804);
double r3721806 = r3721803 / r3721805;
return r3721806;
}
double f(double x) {
double r3721807 = 1.0;
double r3721808 = log(r3721807);
double r3721809 = x;
double r3721810 = r3721809 / r3721807;
double r3721811 = r3721810 * r3721810;
double r3721812 = 0.5;
double r3721813 = r3721807 * r3721809;
double r3721814 = fma(r3721811, r3721812, r3721813);
double r3721815 = r3721808 - r3721814;
double r3721816 = -0.5;
double r3721817 = fma(r3721809, r3721807, r3721808);
double r3721818 = fma(r3721811, r3721816, r3721817);
double r3721819 = r3721815 / r3721818;
double r3721820 = exp(r3721819);
double r3721821 = log(r3721820);
return r3721821;
}




Bits error versus x
| 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 +o rules:numerics
(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))))