\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 r82180 = 1.0;
double r82181 = x;
double r82182 = r82180 - r82181;
double r82183 = log(r82182);
double r82184 = r82180 + r82181;
double r82185 = log(r82184);
double r82186 = r82183 / r82185;
return r82186;
}
double f(double x) {
double r82187 = 1.0;
double r82188 = log(r82187);
double r82189 = x;
double r82190 = r82187 * r82189;
double r82191 = 0.5;
double r82192 = 2.0;
double r82193 = pow(r82189, r82192);
double r82194 = pow(r82187, r82192);
double r82195 = r82193 / r82194;
double r82196 = r82191 * r82195;
double r82197 = r82190 + r82196;
double r82198 = r82188 - r82197;
double r82199 = r82188 - r82196;
double r82200 = fma(r82189, r82187, r82199);
double r82201 = r82198 / r82200;
return r82201;
}




Bits error versus x
| Original | 61.4 |
|---|---|
| Target | 0.4 |
| Herbie | 0.5 |
Initial program 61.4
Taylor expanded around 0 60.5
Simplified60.5
Taylor expanded around 0 0.5
Final simplification0.5
herbie shell --seed 2019354 +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))))