\frac{x \cdot \left(y - z\right)}{t - z}\begin{array}{l}
\mathbf{if}\;z \le -2.462290720716170268145851842092576515123 \cdot 10^{-19} \lor \neg \left(z \le 6.646211365845630643018977419410525880821 \cdot 10^{-98}\right):\\
\;\;\;\;\frac{x}{\frac{t - z}{y - z}}\\
\mathbf{else}:\\
\;\;\;\;\frac{x \cdot y + x \cdot \left(-z\right)}{t - z}\\
\end{array}double f(double x, double y, double z, double t) {
double r586095 = x;
double r586096 = y;
double r586097 = z;
double r586098 = r586096 - r586097;
double r586099 = r586095 * r586098;
double r586100 = t;
double r586101 = r586100 - r586097;
double r586102 = r586099 / r586101;
return r586102;
}
double f(double x, double y, double z, double t) {
double r586103 = z;
double r586104 = -2.4622907207161703e-19;
bool r586105 = r586103 <= r586104;
double r586106 = 6.64621136584563e-98;
bool r586107 = r586103 <= r586106;
double r586108 = !r586107;
bool r586109 = r586105 || r586108;
double r586110 = x;
double r586111 = t;
double r586112 = r586111 - r586103;
double r586113 = y;
double r586114 = r586113 - r586103;
double r586115 = r586112 / r586114;
double r586116 = r586110 / r586115;
double r586117 = r586110 * r586113;
double r586118 = -r586103;
double r586119 = r586110 * r586118;
double r586120 = r586117 + r586119;
double r586121 = r586120 / r586112;
double r586122 = r586109 ? r586116 : r586121;
return r586122;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 11.5 |
|---|---|
| Target | 2.1 |
| Herbie | 2.2 |
if z < -2.4622907207161703e-19 or 6.64621136584563e-98 < z Initial program 15.3
rmApplied associate-/l*0.3
if -2.4622907207161703e-19 < z < 6.64621136584563e-98Initial program 5.3
rmApplied sub-neg5.3
Applied distribute-lft-in5.3
Final simplification2.2
herbie shell --seed 2019354 +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)))