\frac{\log \left(1 - x\right)}{\log \left(1 + x\right)}\sqrt[3]{\frac{\log 1 - \mathsf{fma}\left(\frac{1}{2}, \frac{x}{1} \cdot \frac{x}{1}, x \cdot 1\right)}{\mathsf{fma}\left(\frac{-1}{2}, \frac{x}{1} \cdot \frac{x}{1}, \mathsf{fma}\left(1, x, \log 1\right)\right)}} \cdot \left(\sqrt[3]{\frac{\log 1 - \mathsf{fma}\left(\frac{1}{2}, \frac{x}{1} \cdot \frac{x}{1}, x \cdot 1\right)}{\mathsf{fma}\left(\frac{-1}{2}, \frac{x}{1} \cdot \frac{x}{1}, \mathsf{fma}\left(1, x, \log 1\right)\right)}} \cdot \sqrt[3]{\frac{\log 1 - \mathsf{fma}\left(\frac{1}{2}, \frac{x}{1} \cdot \frac{x}{1}, x \cdot 1\right)}{\mathsf{fma}\left(\frac{-1}{2}, \frac{x}{1} \cdot \frac{x}{1}, \mathsf{fma}\left(1, x, \log 1\right)\right)}}\right)double f(double x) {
double r4111269 = 1.0;
double r4111270 = x;
double r4111271 = r4111269 - r4111270;
double r4111272 = log(r4111271);
double r4111273 = r4111269 + r4111270;
double r4111274 = log(r4111273);
double r4111275 = r4111272 / r4111274;
return r4111275;
}
double f(double x) {
double r4111276 = 1.0;
double r4111277 = log(r4111276);
double r4111278 = 0.5;
double r4111279 = x;
double r4111280 = r4111279 / r4111276;
double r4111281 = r4111280 * r4111280;
double r4111282 = r4111279 * r4111276;
double r4111283 = fma(r4111278, r4111281, r4111282);
double r4111284 = r4111277 - r4111283;
double r4111285 = -0.5;
double r4111286 = fma(r4111276, r4111279, r4111277);
double r4111287 = fma(r4111285, r4111281, r4111286);
double r4111288 = r4111284 / r4111287;
double r4111289 = cbrt(r4111288);
double r4111290 = r4111289 * r4111289;
double r4111291 = r4111289 * r4111290;
return r4111291;
}




Bits error versus x
| Original | 61.4 |
|---|---|
| Target | 0.3 |
| Herbie | 0.4 |
Initial program 61.4
Taylor expanded around 0 60.5
Simplified60.5
Taylor expanded around 0 0.4
Simplified0.4
rmApplied add-cube-cbrt0.4
rmApplied *-un-lft-identity0.4
Final simplification0.4
herbie shell --seed 2019200 +o rules:numerics
(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))))