\frac{\log \left(1 - x\right)}{\log \left(1 + x\right)}\sqrt[3]{{\left(\frac{\log 1 - \left(1 \cdot {x}^{2} + \frac{1}{2} \cdot \frac{{x}^{4}}{{1}^{2}}\right)}{\left(1 \cdot x + \log 1\right) - \frac{1}{2} \cdot \frac{{x}^{2}}{{1}^{2}}} - 1\right)}^{3}}double f(double x) {
double r92667 = 1.0;
double r92668 = x;
double r92669 = r92667 - r92668;
double r92670 = log(r92669);
double r92671 = r92667 + r92668;
double r92672 = log(r92671);
double r92673 = r92670 / r92672;
return r92673;
}
double f(double x) {
double r92674 = 1.0;
double r92675 = log(r92674);
double r92676 = x;
double r92677 = 2.0;
double r92678 = pow(r92676, r92677);
double r92679 = r92674 * r92678;
double r92680 = 0.5;
double r92681 = 4.0;
double r92682 = pow(r92676, r92681);
double r92683 = pow(r92674, r92677);
double r92684 = r92682 / r92683;
double r92685 = r92680 * r92684;
double r92686 = r92679 + r92685;
double r92687 = r92675 - r92686;
double r92688 = r92674 * r92676;
double r92689 = r92688 + r92675;
double r92690 = r92678 / r92683;
double r92691 = r92680 * r92690;
double r92692 = r92689 - r92691;
double r92693 = r92687 / r92692;
double r92694 = 1.0;
double r92695 = r92693 - r92694;
double r92696 = 3.0;
double r92697 = pow(r92695, r92696);
double r92698 = cbrt(r92697);
return r92698;
}




Bits error versus x
Results
| Original | 61.2 |
|---|---|
| Target | 0.3 |
| Herbie | 0.5 |
Initial program 61.2
rmApplied flip--60.8
Applied log-div61.0
Taylor expanded around 0 60.7
rmApplied add-cbrt-cube60.7
Applied add-cbrt-cube60.7
Applied cbrt-undiv60.7
Simplified60.7
Taylor expanded around 0 0.5
Final simplification0.5
herbie shell --seed 2020057
(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))))