\frac{\log \left(1 - x\right)}{\log \left(1 + x\right)}\frac{\log 1 - \mathsf{fma}\left(1, x, \frac{1}{2} \cdot \frac{{x}^{2}}{{1}^{2}}\right)}{\mathsf{fma}\left(\frac{{x}^{2}}{{1}^{2}}, \frac{-1}{2}, \mathsf{fma}\left(1, x, \log 1\right)\right)}double f(double x) {
double r57600 = 1.0;
double r57601 = x;
double r57602 = r57600 - r57601;
double r57603 = log(r57602);
double r57604 = r57600 + r57601;
double r57605 = log(r57604);
double r57606 = r57603 / r57605;
return r57606;
}
double f(double x) {
double r57607 = 1.0;
double r57608 = log(r57607);
double r57609 = x;
double r57610 = 0.5;
double r57611 = 2.0;
double r57612 = pow(r57609, r57611);
double r57613 = pow(r57607, r57611);
double r57614 = r57612 / r57613;
double r57615 = r57610 * r57614;
double r57616 = fma(r57607, r57609, r57615);
double r57617 = r57608 - r57616;
double r57618 = -0.5;
double r57619 = fma(r57607, r57609, r57608);
double r57620 = fma(r57614, r57618, r57619);
double r57621 = r57617 / r57620;
return r57621;
}




Bits error versus x
| Original | 61.6 |
|---|---|
| Target | 0.3 |
| Herbie | 0.4 |
Initial program 61.6
Taylor expanded around 0 60.6
Simplified60.6
Taylor expanded around 0 0.4
Simplified0.4
Final simplification0.4
herbie shell --seed 2019209 +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.416666666666666685 (pow x 3))))
(/ (log (- 1 x)) (log (+ 1 x))))