\frac{x \cdot \left(\left(y - z\right) + 1\right)}{z}\begin{array}{l}
\mathbf{if}\;x \le -2.716741353213512542561167857708974654712 \cdot 10^{196}:\\
\;\;\;\;\frac{x}{\frac{z}{\left(y - z\right) + 1}}\\
\mathbf{elif}\;x \le 5.61926533510320507337176445760607473729 \cdot 10^{-243}:\\
\;\;\;\;\left(\frac{x \cdot y}{z} + 1 \cdot \frac{x}{z}\right) - x\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{z} \cdot \left(y + 1\right) - x\\
\end{array}double f(double x, double y, double z) {
double r720289 = x;
double r720290 = y;
double r720291 = z;
double r720292 = r720290 - r720291;
double r720293 = 1.0;
double r720294 = r720292 + r720293;
double r720295 = r720289 * r720294;
double r720296 = r720295 / r720291;
return r720296;
}
double f(double x, double y, double z) {
double r720297 = x;
double r720298 = -2.7167413532135125e+196;
bool r720299 = r720297 <= r720298;
double r720300 = z;
double r720301 = y;
double r720302 = r720301 - r720300;
double r720303 = 1.0;
double r720304 = r720302 + r720303;
double r720305 = r720300 / r720304;
double r720306 = r720297 / r720305;
double r720307 = 5.619265335103205e-243;
bool r720308 = r720297 <= r720307;
double r720309 = r720297 * r720301;
double r720310 = r720309 / r720300;
double r720311 = r720297 / r720300;
double r720312 = r720303 * r720311;
double r720313 = r720310 + r720312;
double r720314 = r720313 - r720297;
double r720315 = r720301 + r720303;
double r720316 = r720311 * r720315;
double r720317 = r720316 - r720297;
double r720318 = r720308 ? r720314 : r720317;
double r720319 = r720299 ? r720306 : r720318;
return r720319;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 9.9 |
|---|---|
| Target | 0.4 |
| Herbie | 1.2 |
if x < -2.7167413532135125e+196Initial program 49.8
rmApplied associate-/l*0.1
if -2.7167413532135125e+196 < x < 5.619265335103205e-243Initial program 4.4
Taylor expanded around 0 1.5
Simplified2.1
rmApplied *-un-lft-identity2.1
Applied add-cube-cbrt2.8
Applied times-frac2.8
Applied associate-*l*3.2
rmApplied distribute-lft-in3.2
Applied distribute-lft-in3.2
Simplified1.9
Simplified1.5
if 5.619265335103205e-243 < x Initial program 11.6
Taylor expanded around 0 4.0
Simplified0.8
Final simplification1.2
herbie shell --seed 2019350 +o rules:numerics
(FPCore (x y z)
:name "Diagrams.TwoD.Segment.Bernstein:evaluateBernstein from diagrams-lib-1.3.0.3"
:precision binary64
:herbie-target
(if (< x -2.71483106713436e-162) (- (* (+ 1 y) (/ x z)) x) (if (< x 3.874108816439546e-197) (* (* x (+ (- y z) 1)) (/ 1 z)) (- (* (+ 1 y) (/ x z)) x)))
(/ (* x (+ (- y z) 1)) z))