\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \frac{1}{x - 1}\begin{array}{l}
\mathbf{if}\;\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \frac{1}{x - 1} \le -9.3981606387488981:\\
\;\;\;\;\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \frac{1}{x - 1}\\
\mathbf{elif}\;\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \frac{1}{x - 1} \le 4.94066 \cdot 10^{-324}:\\
\;\;\;\;\mathsf{fma}\left(2, \frac{1}{{x}^{7}}, \mathsf{fma}\left(2, \frac{1}{{x}^{5}}, 2 \cdot {x}^{\left(-3\right)}\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{\left(1 \cdot x - \left(x + 1\right) \cdot 2\right) \cdot \left(x - 1\right) + \left(\left(x + 1\right) \cdot x\right) \cdot 1}{\left(\left(x + 1\right) \cdot x\right) \cdot \left(x - 1\right)}\\
\end{array}double f(double x) {
double r118901 = 1.0;
double r118902 = x;
double r118903 = r118902 + r118901;
double r118904 = r118901 / r118903;
double r118905 = 2.0;
double r118906 = r118905 / r118902;
double r118907 = r118904 - r118906;
double r118908 = r118902 - r118901;
double r118909 = r118901 / r118908;
double r118910 = r118907 + r118909;
return r118910;
}
double f(double x) {
double r118911 = 1.0;
double r118912 = x;
double r118913 = r118912 + r118911;
double r118914 = r118911 / r118913;
double r118915 = 2.0;
double r118916 = r118915 / r118912;
double r118917 = r118914 - r118916;
double r118918 = r118912 - r118911;
double r118919 = r118911 / r118918;
double r118920 = r118917 + r118919;
double r118921 = -9.398160638748898;
bool r118922 = r118920 <= r118921;
double r118923 = 4.9406564584125e-324;
bool r118924 = r118920 <= r118923;
double r118925 = 1.0;
double r118926 = 7.0;
double r118927 = pow(r118912, r118926);
double r118928 = r118925 / r118927;
double r118929 = 5.0;
double r118930 = pow(r118912, r118929);
double r118931 = r118925 / r118930;
double r118932 = 3.0;
double r118933 = -r118932;
double r118934 = pow(r118912, r118933);
double r118935 = r118915 * r118934;
double r118936 = fma(r118915, r118931, r118935);
double r118937 = fma(r118915, r118928, r118936);
double r118938 = r118911 * r118912;
double r118939 = r118913 * r118915;
double r118940 = r118938 - r118939;
double r118941 = r118940 * r118918;
double r118942 = r118913 * r118912;
double r118943 = r118942 * r118911;
double r118944 = r118941 + r118943;
double r118945 = r118942 * r118918;
double r118946 = r118944 / r118945;
double r118947 = r118924 ? r118937 : r118946;
double r118948 = r118922 ? r118920 : r118947;
return r118948;
}




Bits error versus x
| Original | 9.5 |
|---|---|
| Target | 0.3 |
| Herbie | 0.4 |
if (+ (- (/ 1.0 (+ x 1.0)) (/ 2.0 x)) (/ 1.0 (- x 1.0))) < -9.398160638748898Initial program 0.0
if -9.398160638748898 < (+ (- (/ 1.0 (+ x 1.0)) (/ 2.0 x)) (/ 1.0 (- x 1.0))) < 4.9406564584125e-324Initial program 18.7
rmApplied frac-sub51.2
Applied frac-add50.7
Simplified51.2
Taylor expanded around inf 0.8
Simplified0.8
rmApplied pow-flip0.2
if 4.9406564584125e-324 < (+ (- (/ 1.0 (+ x 1.0)) (/ 2.0 x)) (/ 1.0 (- x 1.0))) Initial program 1.5
rmApplied frac-sub1.6
Applied frac-add0.9
Simplified1.5
rmApplied fma-udef0.9
Final simplification0.4
herbie shell --seed 2020059 +o rules:numerics
(FPCore (x)
:name "3frac (problem 3.3.3)"
:precision binary64
:herbie-target
(/ 2 (* x (- (* x x) 1)))
(+ (- (/ 1 (+ x 1)) (/ 2 x)) (/ 1 (- x 1))))