\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \frac{1}{x - 1}
\begin{array}{l}
t_0 := \frac{2}{{x}^{9}}\\
t_1 := \frac{2}{{x}^{5}}\\
t_2 := \frac{2}{{x}^{7}}\\
\mathbf{if}\;x \leq -10420091.783946034:\\
\;\;\;\;t_1 + \left(t_2 + \left(\frac{\frac{2}{x \cdot x}}{x} + t_0\right)\right)\\
\mathbf{elif}\;x \leq 128487391.2932317:\\
\;\;\;\;\begin{array}{l}
t_3 := x \cdot \left(x + 1\right)\\
\frac{\left(x - 2 \cdot \left(x + 1\right)\right) \cdot \left(x - 1\right) + t_3}{\left(x - 1\right) \cdot t_3}
\end{array}\\
\mathbf{else}:\\
\;\;\;\;t_1 + \left(t_2 + \left(t_0 + \frac{2}{{x}^{3}}\right)\right)\\
\end{array}
(FPCore (x) :precision binary64 (+ (- (/ 1.0 (+ x 1.0)) (/ 2.0 x)) (/ 1.0 (- x 1.0))))
(FPCore (x)
:precision binary64
(let* ((t_0 (/ 2.0 (pow x 9.0)))
(t_1 (/ 2.0 (pow x 5.0)))
(t_2 (/ 2.0 (pow x 7.0))))
(if (<= x -10420091.783946034)
(+ t_1 (+ t_2 (+ (/ (/ 2.0 (* x x)) x) t_0)))
(if (<= x 128487391.2932317)
(let* ((t_3 (* x (+ x 1.0))))
(/ (+ (* (- x (* 2.0 (+ x 1.0))) (- x 1.0)) t_3) (* (- x 1.0) t_3)))
(+ t_1 (+ t_2 (+ t_0 (/ 2.0 (pow x 3.0)))))))))double code(double x) {
return ((1.0 / (x + 1.0)) - (2.0 / x)) + (1.0 / (x - 1.0));
}
double code(double x) {
double t_0 = 2.0 / pow(x, 9.0);
double t_1 = 2.0 / pow(x, 5.0);
double t_2 = 2.0 / pow(x, 7.0);
double tmp;
if (x <= -10420091.783946034) {
tmp = t_1 + (t_2 + (((2.0 / (x * x)) / x) + t_0));
} else if (x <= 128487391.2932317) {
double t_3 = x * (x + 1.0);
tmp = (((x - (2.0 * (x + 1.0))) * (x - 1.0)) + t_3) / ((x - 1.0) * t_3);
} else {
tmp = t_1 + (t_2 + (t_0 + (2.0 / pow(x, 3.0))));
}
return tmp;
}




Bits error versus x
Results
| Original | 10.5 |
|---|---|
| Target | 0.3 |
| Herbie | 0.2 |
if x < -10420091.783946034Initial program 20.3
Taylor expanded in x around inf 0.4
Simplified0.4
Applied unpow3_binary640.5
Applied associate-/r*_binary640.1
if -10420091.783946034 < x < 128487391.2932317Initial program 0.6
Applied frac-sub_binary640.6
Applied frac-add_binary640.0
if 128487391.2932317 < x Initial program 20.7
Taylor expanded in x around inf 0.5
Simplified0.5
Final simplification0.2
herbie shell --seed 2022081
(FPCore (x)
:name "3frac (problem 3.3.3)"
:precision binary64
:herbie-target
(/ 2.0 (* x (- (* x x) 1.0)))
(+ (- (/ 1.0 (+ x 1.0)) (/ 2.0 x)) (/ 1.0 (- x 1.0))))