\frac{\log \left(1 - x\right)}{\log \left(1 + x\right)}\frac{\log 1 - 1 \cdot x}{\left(\log 1 + 1 \cdot x\right) + \frac{\frac{-1}{2}}{\frac{1 \cdot 1}{{x}^{2}}}} - \frac{\frac{x}{1}}{\frac{\left(\log 1 + 1 \cdot x\right) + \frac{\frac{-1}{2}}{\frac{1 \cdot 1}{{x}^{2}}}}{\frac{\frac{1}{2}}{\frac{1}{x}}}}double f(double x) {
double r65546 = 1.0;
double r65547 = x;
double r65548 = r65546 - r65547;
double r65549 = log(r65548);
double r65550 = r65546 + r65547;
double r65551 = log(r65550);
double r65552 = r65549 / r65551;
return r65552;
}
double f(double x) {
double r65553 = 1.0;
double r65554 = log(r65553);
double r65555 = x;
double r65556 = r65553 * r65555;
double r65557 = r65554 - r65556;
double r65558 = r65554 + r65556;
double r65559 = -0.5;
double r65560 = r65553 * r65553;
double r65561 = 2.0;
double r65562 = pow(r65555, r65561);
double r65563 = r65560 / r65562;
double r65564 = r65559 / r65563;
double r65565 = r65558 + r65564;
double r65566 = r65557 / r65565;
double r65567 = r65555 / r65553;
double r65568 = 0.5;
double r65569 = r65553 / r65555;
double r65570 = r65568 / r65569;
double r65571 = r65565 / r65570;
double r65572 = r65567 / r65571;
double r65573 = r65566 - r65572;
return r65573;
}




Bits error versus x
Results
| 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 div-sub0.4
Simplified0.4
Simplified0.4
Final simplification0.4
herbie shell --seed 2019194
(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))))