\frac{x + \frac{y \cdot z - x}{t \cdot z - x}}{x + 1}\begin{array}{l}
\mathbf{if}\;x \le -4.329769589365412156618691488056306963715 \cdot 10^{-21}:\\
\;\;\;\;1 \cdot \frac{\mathsf{fma}\left(y \cdot \frac{1}{t \cdot z - x}, z, x\right)}{\left(x + 1\right) \cdot 1} - \frac{\frac{x}{t \cdot z - x}}{x + 1}\\
\mathbf{elif}\;x \le -1.087436073798729316230006245761988192998 \cdot 10^{-304}:\\
\;\;\;\;\frac{x + \left(y \cdot z - x\right) \cdot \frac{1}{t \cdot z - x}}{x + 1}\\
\mathbf{else}:\\
\;\;\;\;1 \cdot \frac{1}{\frac{x + 1}{\mathsf{fma}\left(\frac{y}{t \cdot z - x}, z, x\right)}} - \frac{\frac{x}{t \cdot z - x}}{x + 1}\\
\end{array}double f(double x, double y, double z, double t) {
double r599311 = x;
double r599312 = y;
double r599313 = z;
double r599314 = r599312 * r599313;
double r599315 = r599314 - r599311;
double r599316 = t;
double r599317 = r599316 * r599313;
double r599318 = r599317 - r599311;
double r599319 = r599315 / r599318;
double r599320 = r599311 + r599319;
double r599321 = 1.0;
double r599322 = r599311 + r599321;
double r599323 = r599320 / r599322;
return r599323;
}
double f(double x, double y, double z, double t) {
double r599324 = x;
double r599325 = -4.329769589365412e-21;
bool r599326 = r599324 <= r599325;
double r599327 = 1.0;
double r599328 = y;
double r599329 = t;
double r599330 = z;
double r599331 = r599329 * r599330;
double r599332 = r599331 - r599324;
double r599333 = r599327 / r599332;
double r599334 = r599328 * r599333;
double r599335 = fma(r599334, r599330, r599324);
double r599336 = 1.0;
double r599337 = r599324 + r599336;
double r599338 = r599337 * r599327;
double r599339 = r599335 / r599338;
double r599340 = r599327 * r599339;
double r599341 = r599324 / r599332;
double r599342 = r599341 / r599337;
double r599343 = r599340 - r599342;
double r599344 = -1.0874360737987293e-304;
bool r599345 = r599324 <= r599344;
double r599346 = r599328 * r599330;
double r599347 = r599346 - r599324;
double r599348 = r599347 * r599333;
double r599349 = r599324 + r599348;
double r599350 = r599349 / r599337;
double r599351 = r599328 / r599332;
double r599352 = fma(r599351, r599330, r599324);
double r599353 = r599337 / r599352;
double r599354 = r599327 / r599353;
double r599355 = r599327 * r599354;
double r599356 = r599355 - r599342;
double r599357 = r599345 ? r599350 : r599356;
double r599358 = r599326 ? r599343 : r599357;
return r599358;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 7.1 |
|---|---|
| Target | 0.4 |
| Herbie | 4.2 |
if x < -4.329769589365412e-21Initial program 7.2
rmApplied div-sub7.2
Applied associate-+r-7.2
Applied div-sub7.2
Simplified1.2
rmApplied *-un-lft-identity1.2
rmApplied div-inv1.2
if -4.329769589365412e-21 < x < -1.0874360737987293e-304Initial program 7.3
rmApplied div-inv7.4
if -1.0874360737987293e-304 < x Initial program 7.0
rmApplied div-sub7.0
Applied associate-+r-7.0
Applied div-sub7.0
Simplified4.5
rmApplied *-un-lft-identity4.5
rmApplied clear-num4.6
Simplified4.6
Final simplification4.2
herbie shell --seed 2020002 +o rules:numerics
(FPCore (x y z t)
:name "Diagrams.Trail:splitAtParam from diagrams-lib-1.3.0.3, A"
:precision binary64
:herbie-target
(/ (+ x (- (/ y (- t (/ x z))) (/ x (- (* t z) x)))) (+ x 1))
(/ (+ x (/ (- (* y z) x) (- (* t z) x))) (+ x 1)))