\frac{x \cdot \left(\left(y - z\right) + 1\right)}{z}\begin{array}{l}
\mathbf{if}\;x \le -4.241427555808642015592182073063133240868 \cdot 10^{-70}:\\
\;\;\;\;\left(\frac{1 \cdot x}{z} - x\right) + \frac{y}{\frac{z}{x}}\\
\mathbf{elif}\;x \le 3.13824538143855677196918343160641773358 \cdot 10^{-60}:\\
\;\;\;\;\frac{\left(\left(y - z\right) + 1\right) \cdot x}{z}\\
\mathbf{else}:\\
\;\;\;\;\left(\frac{1 \cdot x}{z} - x\right) + \frac{1}{\frac{\frac{z}{y}}{x}}\\
\end{array}double f(double x, double y, double z) {
double r558631 = x;
double r558632 = y;
double r558633 = z;
double r558634 = r558632 - r558633;
double r558635 = 1.0;
double r558636 = r558634 + r558635;
double r558637 = r558631 * r558636;
double r558638 = r558637 / r558633;
return r558638;
}
double f(double x, double y, double z) {
double r558639 = x;
double r558640 = -4.241427555808642e-70;
bool r558641 = r558639 <= r558640;
double r558642 = 1.0;
double r558643 = r558642 * r558639;
double r558644 = z;
double r558645 = r558643 / r558644;
double r558646 = r558645 - r558639;
double r558647 = y;
double r558648 = r558644 / r558639;
double r558649 = r558647 / r558648;
double r558650 = r558646 + r558649;
double r558651 = 3.138245381438557e-60;
bool r558652 = r558639 <= r558651;
double r558653 = r558647 - r558644;
double r558654 = r558653 + r558642;
double r558655 = r558654 * r558639;
double r558656 = r558655 / r558644;
double r558657 = 1.0;
double r558658 = r558644 / r558647;
double r558659 = r558658 / r558639;
double r558660 = r558657 / r558659;
double r558661 = r558646 + r558660;
double r558662 = r558652 ? r558656 : r558661;
double r558663 = r558641 ? r558650 : r558662;
return r558663;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 10.0 |
|---|---|
| Target | 0.5 |
| Herbie | 0.2 |
if x < -4.241427555808642e-70Initial program 18.7
Simplified0.8
Taylor expanded around 0 6.2
Simplified0.1
if -4.241427555808642e-70 < x < 3.138245381438557e-60Initial program 0.2
Simplified17.6
rmApplied associate-*l/0.2
Simplified0.2
if 3.138245381438557e-60 < x Initial program 20.6
Simplified0.7
Taylor expanded around 0 7.2
Simplified0.2
rmApplied clear-num0.2
Simplified0.4
Final simplification0.2
herbie shell --seed 2019179
(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))