\frac{\log \left(1 - x\right)}{\log \left(1 + x\right)}\mathsf{log1p}\left(\mathsf{expm1}\left(\frac{\log 1 - \mathsf{fma}\left(1, x, \frac{1}{2} \cdot \frac{{x}^{2}}{{1}^{2}}\right)}{\mathsf{fma}\left(1, x, \log 1\right) - \frac{1}{2} \cdot \frac{{x}^{2}}{{1}^{2}}}\right)\right)double f(double x) {
double r76596 = 1.0;
double r76597 = x;
double r76598 = r76596 - r76597;
double r76599 = log(r76598);
double r76600 = r76596 + r76597;
double r76601 = log(r76600);
double r76602 = r76599 / r76601;
return r76602;
}
double f(double x) {
double r76603 = 1.0;
double r76604 = log(r76603);
double r76605 = x;
double r76606 = 0.5;
double r76607 = 2.0;
double r76608 = pow(r76605, r76607);
double r76609 = pow(r76603, r76607);
double r76610 = r76608 / r76609;
double r76611 = r76606 * r76610;
double r76612 = fma(r76603, r76605, r76611);
double r76613 = r76604 - r76612;
double r76614 = fma(r76603, r76605, r76604);
double r76615 = r76614 - r76611;
double r76616 = r76613 / r76615;
double r76617 = expm1(r76616);
double r76618 = log1p(r76617);
return r76618;
}




Bits error versus x
| Original | 61.5 |
|---|---|
| Target | 0.3 |
| Herbie | 0.4 |
Initial program 61.5
Taylor expanded around 0 60.5
Simplified60.5
Taylor expanded around 0 0.4
Simplified0.4
rmApplied log1p-expm1-u0.4
Final simplification0.4
herbie shell --seed 2020046 +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))))