\frac{x \cdot \left(y - z\right)}{t - z}\begin{array}{l}
\mathbf{if}\;z \le -2.54363164202423776 \cdot 10^{-164} \lor \neg \left(z \le 1.03870846195001497 \cdot 10^{-26}\right):\\
\;\;\;\;x \cdot \frac{y}{t - z} + x \cdot \left(-\frac{z}{t - z}\right)\\
\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 r558157 = x;
double r558158 = y;
double r558159 = z;
double r558160 = r558158 - r558159;
double r558161 = r558157 * r558160;
double r558162 = t;
double r558163 = r558162 - r558159;
double r558164 = r558161 / r558163;
return r558164;
}
double f(double x, double y, double z, double t) {
double r558165 = z;
double r558166 = -2.5436316420242378e-164;
bool r558167 = r558165 <= r558166;
double r558168 = 1.038708461950015e-26;
bool r558169 = r558165 <= r558168;
double r558170 = !r558169;
bool r558171 = r558167 || r558170;
double r558172 = x;
double r558173 = y;
double r558174 = t;
double r558175 = r558174 - r558165;
double r558176 = r558173 / r558175;
double r558177 = r558172 * r558176;
double r558178 = r558165 / r558175;
double r558179 = -r558178;
double r558180 = r558172 * r558179;
double r558181 = r558177 + r558180;
double r558182 = r558172 * r558173;
double r558183 = -r558165;
double r558184 = r558172 * r558183;
double r558185 = r558182 + r558184;
double r558186 = r558185 / r558175;
double r558187 = r558171 ? r558181 : r558186;
return r558187;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 12.0 |
|---|---|
| Target | 2.2 |
| Herbie | 2.2 |
if z < -2.5436316420242378e-164 or 1.038708461950015e-26 < z Initial program 15.1
rmApplied *-un-lft-identity15.1
Applied times-frac0.6
Simplified0.6
rmApplied div-sub0.6
rmApplied sub-neg0.6
Applied distribute-lft-in0.6
if -2.5436316420242378e-164 < z < 1.038708461950015e-26Initial program 5.5
rmApplied sub-neg5.5
Applied distribute-lft-in5.5
Final simplification2.2
herbie shell --seed 2020081 +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)))