\frac{x \cdot \left(\left(y - z\right) + 1\right)}{z}\begin{array}{l}
\mathbf{if}\;x \le -1.255498797056056848092969270439685610774 \cdot 10^{-31} \lor \neg \left(x \le 18356449162475356553216\right):\\
\;\;\;\;\frac{x}{\frac{-z}{-\left(\left(y - z\right) + 1\right)}}\\
\mathbf{else}:\\
\;\;\;\;\left(\frac{x \cdot y}{z} + 1 \cdot \frac{x}{z}\right) - x\\
\end{array}double f(double x, double y, double z) {
double r716747 = x;
double r716748 = y;
double r716749 = z;
double r716750 = r716748 - r716749;
double r716751 = 1.0;
double r716752 = r716750 + r716751;
double r716753 = r716747 * r716752;
double r716754 = r716753 / r716749;
return r716754;
}
double f(double x, double y, double z) {
double r716755 = x;
double r716756 = -1.2554987970560568e-31;
bool r716757 = r716755 <= r716756;
double r716758 = 1.8356449162475357e+22;
bool r716759 = r716755 <= r716758;
double r716760 = !r716759;
bool r716761 = r716757 || r716760;
double r716762 = z;
double r716763 = -r716762;
double r716764 = y;
double r716765 = r716764 - r716762;
double r716766 = 1.0;
double r716767 = r716765 + r716766;
double r716768 = -r716767;
double r716769 = r716763 / r716768;
double r716770 = r716755 / r716769;
double r716771 = r716755 * r716764;
double r716772 = r716771 / r716762;
double r716773 = r716755 / r716762;
double r716774 = r716766 * r716773;
double r716775 = r716772 + r716774;
double r716776 = r716775 - r716755;
double r716777 = r716761 ? r716770 : r716776;
return r716777;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 9.8 |
|---|---|
| Target | 0.5 |
| Herbie | 0.1 |
if x < -1.2554987970560568e-31 or 1.8356449162475357e+22 < x Initial program 24.1
rmApplied associate-/l*0.1
rmApplied frac-2neg0.1
if -1.2554987970560568e-31 < x < 1.8356449162475357e+22Initial program 0.2
rmApplied associate-/l*5.5
Taylor expanded around 0 0.1
Final simplification0.1
herbie shell --seed 2019356
(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))