\frac{\log \left(1 - x\right)}{\log \left(1 + x\right)}\frac{\log 1 - 1 \cdot x}{\left(1 \cdot x - \left(\frac{x}{1} \cdot \frac{x}{1}\right) \cdot \frac{1}{2}\right) + \log 1} - \frac{\left(\frac{x}{1} \cdot \frac{x}{1}\right) \cdot \frac{1}{2}}{\left(1 \cdot x - \left(\frac{x}{1} \cdot \frac{x}{1}\right) \cdot \frac{1}{2}\right) + \log 1}double f(double x) {
double r3656845 = 1.0;
double r3656846 = x;
double r3656847 = r3656845 - r3656846;
double r3656848 = log(r3656847);
double r3656849 = r3656845 + r3656846;
double r3656850 = log(r3656849);
double r3656851 = r3656848 / r3656850;
return r3656851;
}
double f(double x) {
double r3656852 = 1.0;
double r3656853 = log(r3656852);
double r3656854 = x;
double r3656855 = r3656852 * r3656854;
double r3656856 = r3656853 - r3656855;
double r3656857 = r3656854 / r3656852;
double r3656858 = r3656857 * r3656857;
double r3656859 = 0.5;
double r3656860 = r3656858 * r3656859;
double r3656861 = r3656855 - r3656860;
double r3656862 = r3656861 + r3656853;
double r3656863 = r3656856 / r3656862;
double r3656864 = r3656860 / r3656862;
double r3656865 = r3656863 - r3656864;
return r3656865;
}




Bits error versus x
Results
| Original | 61.2 |
|---|---|
| Target | 0.3 |
| Herbie | 0.4 |
Initial program 61.2
Taylor expanded around 0 60.4
Simplified60.4
Taylor expanded around 0 0.4
Simplified0.4
rmApplied div-sub0.4
Final simplification0.4
herbie shell --seed 2019170
(FPCore (x)
:name "qlog (example 3.10)"
:pre (and (< -1.0 x) (< x 1.0))
:herbie-target
(- (+ (+ (+ 1.0 x) (/ (* x x) 2.0)) (* 0.4166666666666667 (pow x 3.0))))
(/ (log (- 1.0 x)) (log (+ 1.0 x))))