\frac{x \cdot \left(y - z\right)}{t - z}\begin{array}{l}
\mathbf{if}\;z \le -9.209930139418709416077035712078213691711 \lor \neg \left(z \le -5.98376643875231480812769882703216664937 \cdot 10^{-268}\right):\\
\;\;\;\;x \cdot \frac{y - z}{t - z}\\
\mathbf{else}:\\
\;\;\;\;\frac{y - z}{\frac{t - z}{x}}\\
\end{array}double f(double x, double y, double z, double t) {
double r374684 = x;
double r374685 = y;
double r374686 = z;
double r374687 = r374685 - r374686;
double r374688 = r374684 * r374687;
double r374689 = t;
double r374690 = r374689 - r374686;
double r374691 = r374688 / r374690;
return r374691;
}
double f(double x, double y, double z, double t) {
double r374692 = z;
double r374693 = -9.20993013941871;
bool r374694 = r374692 <= r374693;
double r374695 = -5.983766438752315e-268;
bool r374696 = r374692 <= r374695;
double r374697 = !r374696;
bool r374698 = r374694 || r374697;
double r374699 = x;
double r374700 = y;
double r374701 = r374700 - r374692;
double r374702 = t;
double r374703 = r374702 - r374692;
double r374704 = r374701 / r374703;
double r374705 = r374699 * r374704;
double r374706 = r374703 / r374699;
double r374707 = r374701 / r374706;
double r374708 = r374698 ? r374705 : r374707;
return r374708;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 11.6 |
|---|---|
| Target | 2.2 |
| Herbie | 2.4 |
if z < -9.20993013941871 or -5.983766438752315e-268 < z Initial program 13.3
rmApplied *-un-lft-identity13.3
Applied times-frac1.7
Simplified1.7
if -9.20993013941871 < z < -5.983766438752315e-268Initial program 5.1
rmApplied clear-num5.5
rmApplied *-un-lft-identity5.5
Applied add-cube-cbrt5.5
Applied times-frac5.5
Simplified5.5
Simplified5.1
Final simplification2.4
herbie shell --seed 2019323 +o rules:numerics
(FPCore (x y z t)
:name "Graphics.Rendering.Chart.Plot.AreaSpots:renderAreaSpots4D from Chart-1.5.3"
:precision binary64
:herbie-target
(/ x (/ (- t z) (- y z)))
(/ (* x (- y z)) (- t z)))