\frac{x \cdot \left(y - z\right)}{t - z}\begin{array}{l}
\mathbf{if}\;z \le -1.2131459224267867 \cdot 10^{-6} \lor \neg \left(z \le 1.363066750823439 \cdot 10^{-188}\right):\\
\;\;\;\;x \cdot \frac{y - z}{t - z}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{1}{t - z}}{\frac{\frac{1}{y - z}}{x}}\\
\end{array}double f(double x, double y, double z, double t) {
double r898689 = x;
double r898690 = y;
double r898691 = z;
double r898692 = r898690 - r898691;
double r898693 = r898689 * r898692;
double r898694 = t;
double r898695 = r898694 - r898691;
double r898696 = r898693 / r898695;
return r898696;
}
double f(double x, double y, double z, double t) {
double r898697 = z;
double r898698 = -1.2131459224267867e-06;
bool r898699 = r898697 <= r898698;
double r898700 = 1.3630667508234389e-188;
bool r898701 = r898697 <= r898700;
double r898702 = !r898701;
bool r898703 = r898699 || r898702;
double r898704 = x;
double r898705 = y;
double r898706 = r898705 - r898697;
double r898707 = t;
double r898708 = r898707 - r898697;
double r898709 = r898706 / r898708;
double r898710 = r898704 * r898709;
double r898711 = 1.0;
double r898712 = r898711 / r898708;
double r898713 = r898711 / r898706;
double r898714 = r898713 / r898704;
double r898715 = r898712 / r898714;
double r898716 = r898703 ? r898710 : r898715;
return r898716;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 11.8 |
|---|---|
| Target | 2.4 |
| Herbie | 2.4 |
if z < -1.2131459224267867e-06 or 1.3630667508234389e-188 < z Initial program 14.7
rmApplied *-un-lft-identity14.7
Applied times-frac0.9
Simplified0.9
if -1.2131459224267867e-06 < z < 1.3630667508234389e-188Initial program 5.7
rmApplied associate-/l*5.5
rmApplied clear-num5.8
rmApplied *-un-lft-identity5.8
Applied div-inv5.8
Applied times-frac5.9
Applied associate-/r*5.7
Simplified5.7
Final simplification2.4
herbie shell --seed 2020042
(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)))