\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 r99017 = 1.0;
double r99018 = x;
double r99019 = r99017 - r99018;
double r99020 = log(r99019);
double r99021 = r99017 + r99018;
double r99022 = log(r99021);
double r99023 = r99020 / r99022;
return r99023;
}
double f(double x) {
double r99024 = 1.0;
double r99025 = log(r99024);
double r99026 = x;
double r99027 = 0.5;
double r99028 = 2.0;
double r99029 = pow(r99026, r99028);
double r99030 = pow(r99024, r99028);
double r99031 = r99029 / r99030;
double r99032 = r99027 * r99031;
double r99033 = fma(r99024, r99026, r99032);
double r99034 = r99025 - r99033;
double r99035 = -0.5;
double r99036 = fma(r99024, r99026, r99025);
double r99037 = fma(r99035, r99031, r99036);
double r99038 = r99034 / r99037;
double r99039 = exp(r99038);
double r99040 = log(r99039);
return r99040;
}




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