\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 r85083 = 1.0;
double r85084 = x;
double r85085 = r85083 - r85084;
double r85086 = log(r85085);
double r85087 = r85083 + r85084;
double r85088 = log(r85087);
double r85089 = r85086 / r85088;
return r85089;
}
double f(double x) {
double r85090 = 1.0;
double r85091 = log(r85090);
double r85092 = x;
double r85093 = r85090 * r85092;
double r85094 = 0.5;
double r85095 = 2.0;
double r85096 = pow(r85092, r85095);
double r85097 = pow(r85090, r85095);
double r85098 = r85096 / r85097;
double r85099 = r85094 * r85098;
double r85100 = r85093 + r85099;
double r85101 = r85091 - r85100;
double r85102 = r85091 - r85099;
double r85103 = fma(r85092, r85090, r85102);
double r85104 = r85101 / r85103;
return r85104;
}




Bits error versus x
| Original | 61.5 |
|---|---|
| Target | 0.3 |
| Herbie | 0.4 |
Initial program 61.5
Taylor expanded around 0 60.6
Simplified60.6
Taylor expanded around 0 0.4
Final simplification0.4
herbie shell --seed 2020001 +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))))