\frac{x \cdot \left(\left(y - z\right) + 1.0\right)}{z}\begin{array}{l}
\mathbf{if}\;x \le -7.814855256918435 \cdot 10^{-142}:\\
\;\;\;\;\mathsf{fma}\left(\frac{x}{z}, 1.0, y \cdot \frac{x}{z}\right) - x\\
\mathbf{elif}\;x \le 3.0983310819560493 \cdot 10^{-110}:\\
\;\;\;\;\frac{1}{z} \cdot \left(\left(1.0 + \left(y - z\right)\right) \cdot x\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{\frac{z}{1.0 + \left(y - z\right)}}\\
\end{array}double f(double x, double y, double z) {
double r30463056 = x;
double r30463057 = y;
double r30463058 = z;
double r30463059 = r30463057 - r30463058;
double r30463060 = 1.0;
double r30463061 = r30463059 + r30463060;
double r30463062 = r30463056 * r30463061;
double r30463063 = r30463062 / r30463058;
return r30463063;
}
double f(double x, double y, double z) {
double r30463064 = x;
double r30463065 = -7.814855256918435e-142;
bool r30463066 = r30463064 <= r30463065;
double r30463067 = z;
double r30463068 = r30463064 / r30463067;
double r30463069 = 1.0;
double r30463070 = y;
double r30463071 = r30463070 * r30463068;
double r30463072 = fma(r30463068, r30463069, r30463071);
double r30463073 = r30463072 - r30463064;
double r30463074 = 3.0983310819560493e-110;
bool r30463075 = r30463064 <= r30463074;
double r30463076 = 1.0;
double r30463077 = r30463076 / r30463067;
double r30463078 = r30463070 - r30463067;
double r30463079 = r30463069 + r30463078;
double r30463080 = r30463079 * r30463064;
double r30463081 = r30463077 * r30463080;
double r30463082 = r30463067 / r30463079;
double r30463083 = r30463064 / r30463082;
double r30463084 = r30463075 ? r30463081 : r30463083;
double r30463085 = r30463066 ? r30463073 : r30463084;
return r30463085;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 10.5 |
|---|---|
| Target | 0.4 |
| Herbie | 0.5 |
if x < -7.814855256918435e-142Initial program 15.7
Taylor expanded around 0 5.3
Simplified0.2
if -7.814855256918435e-142 < x < 3.0983310819560493e-110Initial program 0.2
rmApplied associate-/l*7.0
rmApplied div-inv7.1
Applied *-un-lft-identity7.1
Applied times-frac0.3
Simplified0.3
if 3.0983310819560493e-110 < x Initial program 17.5
rmApplied associate-/l*1.0
Final simplification0.5
herbie shell --seed 2019165 +o rules:numerics
(FPCore (x y z)
:name "Diagrams.TwoD.Segment.Bernstein:evaluateBernstein from diagrams-lib-1.3.0.3"
:herbie-target
(if (< x -2.71483106713436e-162) (- (* (+ 1.0 y) (/ x z)) x) (if (< x 3.874108816439546e-197) (* (* x (+ (- y z) 1.0)) (/ 1.0 z)) (- (* (+ 1.0 y) (/ x z)) x)))
(/ (* x (+ (- y z) 1.0)) z))