\frac{x \cdot \left(y - z\right)}{t - z}\begin{array}{l}
\mathbf{if}\;z \le -2.7061335562483838 \cdot 10^{-235}:\\
\;\;\;\;\frac{x}{\frac{t - z}{y - z}}\\
\mathbf{elif}\;z \le 1.03830327655720515 \cdot 10^{-10}:\\
\;\;\;\;\left(x \cdot \left(y - z\right)\right) \cdot \frac{1}{t - z}\\
\mathbf{else}:\\
\;\;\;\;x \cdot \frac{y - z}{t - z}\\
\end{array}double f(double x, double y, double z, double t) {
double r704435 = x;
double r704436 = y;
double r704437 = z;
double r704438 = r704436 - r704437;
double r704439 = r704435 * r704438;
double r704440 = t;
double r704441 = r704440 - r704437;
double r704442 = r704439 / r704441;
return r704442;
}
double f(double x, double y, double z, double t) {
double r704443 = z;
double r704444 = -2.7061335562483838e-235;
bool r704445 = r704443 <= r704444;
double r704446 = x;
double r704447 = t;
double r704448 = r704447 - r704443;
double r704449 = y;
double r704450 = r704449 - r704443;
double r704451 = r704448 / r704450;
double r704452 = r704446 / r704451;
double r704453 = 1.0383032765572051e-10;
bool r704454 = r704443 <= r704453;
double r704455 = r704446 * r704450;
double r704456 = 1.0;
double r704457 = r704456 / r704448;
double r704458 = r704455 * r704457;
double r704459 = r704450 / r704448;
double r704460 = r704446 * r704459;
double r704461 = r704454 ? r704458 : r704460;
double r704462 = r704445 ? r704452 : r704461;
return r704462;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 11.5 |
|---|---|
| Target | 2.4 |
| Herbie | 2.3 |
if z < -2.7061335562483838e-235Initial program 12.2
rmApplied associate-/l*1.8
if -2.7061335562483838e-235 < z < 1.0383032765572051e-10Initial program 5.1
rmApplied div-inv5.2
if 1.0383032765572051e-10 < z Initial program 16.8
rmApplied *-un-lft-identity16.8
Applied times-frac0.1
Simplified0.1
Final simplification2.3
herbie shell --seed 2020043 +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)))