\frac{\log \left(1 - x\right)}{\log \left(1 + x\right)}\sqrt[3]{{\left(\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)}^{3}}double f(double x) {
double r67902 = 1.0;
double r67903 = x;
double r67904 = r67902 - r67903;
double r67905 = log(r67904);
double r67906 = r67902 + r67903;
double r67907 = log(r67906);
double r67908 = r67905 / r67907;
return r67908;
}
double f(double x) {
double r67909 = 1.0;
double r67910 = log(r67909);
double r67911 = x;
double r67912 = 0.5;
double r67913 = 2.0;
double r67914 = pow(r67911, r67913);
double r67915 = pow(r67909, r67913);
double r67916 = r67914 / r67915;
double r67917 = r67912 * r67916;
double r67918 = fma(r67909, r67911, r67917);
double r67919 = r67910 - r67918;
double r67920 = -0.5;
double r67921 = fma(r67909, r67911, r67910);
double r67922 = fma(r67920, r67916, r67921);
double r67923 = r67919 / r67922;
double r67924 = 3.0;
double r67925 = pow(r67923, r67924);
double r67926 = cbrt(r67925);
return r67926;
}




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-cbrt-cube42.3
Applied add-cbrt-cube41.7
Applied cbrt-undiv41.7
Simplified0.4
Final simplification0.4
herbie shell --seed 2019323 +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))))