1 - \frac{\left(1 - x\right) \cdot y}{y + 1}\begin{array}{l}
\mathbf{if}\;y \le -1433265.00379428291 \lor \neg \left(y \le 2.739133723068897 \cdot 10^{23}\right):\\
\;\;\;\;\mathsf{fma}\left(1, \frac{x}{{y}^{2}} - \frac{x}{y}, x\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{y}{{y}^{3} + {1}^{3}} \cdot \left(y \cdot y + \left(1 \cdot 1 - y \cdot 1\right)\right), x - 1, 1\right)\\
\end{array}double f(double x, double y) {
double r972200 = 1.0;
double r972201 = x;
double r972202 = r972200 - r972201;
double r972203 = y;
double r972204 = r972202 * r972203;
double r972205 = r972203 + r972200;
double r972206 = r972204 / r972205;
double r972207 = r972200 - r972206;
return r972207;
}
double f(double x, double y) {
double r972208 = y;
double r972209 = -1433265.003794283;
bool r972210 = r972208 <= r972209;
double r972211 = 2.739133723068897e+23;
bool r972212 = r972208 <= r972211;
double r972213 = !r972212;
bool r972214 = r972210 || r972213;
double r972215 = 1.0;
double r972216 = x;
double r972217 = 2.0;
double r972218 = pow(r972208, r972217);
double r972219 = r972216 / r972218;
double r972220 = r972216 / r972208;
double r972221 = r972219 - r972220;
double r972222 = fma(r972215, r972221, r972216);
double r972223 = 3.0;
double r972224 = pow(r972208, r972223);
double r972225 = pow(r972215, r972223);
double r972226 = r972224 + r972225;
double r972227 = r972208 / r972226;
double r972228 = r972208 * r972208;
double r972229 = r972215 * r972215;
double r972230 = r972208 * r972215;
double r972231 = r972229 - r972230;
double r972232 = r972228 + r972231;
double r972233 = r972227 * r972232;
double r972234 = r972216 - r972215;
double r972235 = fma(r972233, r972234, r972215);
double r972236 = r972214 ? r972222 : r972235;
return r972236;
}




Bits error versus x




Bits error versus y
| Original | 22.8 |
|---|---|
| Target | 0.3 |
| Herbie | 7.6 |
if y < -1433265.003794283 or 2.739133723068897e+23 < y Initial program 46.2
Simplified29.6
rmApplied add-cube-cbrt30.4
Applied associate-/r*30.4
Taylor expanded around inf 14.8
Simplified14.8
if -1433265.003794283 < y < 2.739133723068897e+23Initial program 0.9
Simplified0.8
rmApplied flip3-+0.8
Applied associate-/r/0.8
Final simplification7.6
herbie shell --seed 2020034 +o rules:numerics
(FPCore (x y)
:name "Diagrams.Trail:splitAtParam from diagrams-lib-1.3.0.3, D"
:precision binary64
:herbie-target
(if (< y -3693.8482788297247) (- (/ 1 y) (- (/ x y) x)) (if (< y 6799310503.41891) (- 1 (/ (* (- 1 x) y) (+ y 1))) (- (/ 1 y) (- (/ x y) x))))
(- 1 (/ (* (- 1 x) y) (+ y 1))))