\frac{x \cdot \left(y - z\right)}{t - z}\begin{array}{l}
\mathbf{if}\;z \le -3.29927142667181471 \cdot 10^{-59} \lor \neg \left(z \le -8.2043700554885046 \cdot 10^{-288}\right):\\
\;\;\;\;\frac{x}{\frac{t - z}{y - z}}\\
\mathbf{else}:\\
\;\;\;\;\frac{x \cdot \left(y - z\right)}{t - z}\\
\end{array}double f(double x, double y, double z, double t) {
double r588905 = x;
double r588906 = y;
double r588907 = z;
double r588908 = r588906 - r588907;
double r588909 = r588905 * r588908;
double r588910 = t;
double r588911 = r588910 - r588907;
double r588912 = r588909 / r588911;
return r588912;
}
double f(double x, double y, double z, double t) {
double r588913 = z;
double r588914 = -3.2992714266718147e-59;
bool r588915 = r588913 <= r588914;
double r588916 = -8.204370055488505e-288;
bool r588917 = r588913 <= r588916;
double r588918 = !r588917;
bool r588919 = r588915 || r588918;
double r588920 = x;
double r588921 = t;
double r588922 = r588921 - r588913;
double r588923 = y;
double r588924 = r588923 - r588913;
double r588925 = r588922 / r588924;
double r588926 = r588920 / r588925;
double r588927 = r588920 * r588924;
double r588928 = r588927 / r588922;
double r588929 = r588919 ? r588926 : r588928;
return r588929;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 11.9 |
|---|---|
| Target | 2.2 |
| Herbie | 2.1 |
if z < -3.2992714266718147e-59 or -8.204370055488505e-288 < z Initial program 13.3
rmApplied associate-/l*1.6
if -3.2992714266718147e-59 < z < -8.204370055488505e-288Initial program 4.7
Final simplification2.1
herbie shell --seed 2020065 +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)))