\frac{x \cdot \left(\left(y - z\right) + 1\right)}{z}\begin{array}{l}
\mathbf{if}\;x \le -1.659244719723380893322790679238792235926 \cdot 10^{73}:\\
\;\;\;\;\frac{x}{\frac{z}{\left(y - z\right) + 1}}\\
\mathbf{elif}\;x \le 2.380298721942920237570399274099843251842 \cdot 10^{69}:\\
\;\;\;\;\left(\frac{x \cdot y}{z} + 1 \cdot \frac{x}{z}\right) - x\\
\mathbf{else}:\\
\;\;\;\;x \cdot \frac{1 + y}{z} - x\\
\end{array}double f(double x, double y, double z) {
double r428023 = x;
double r428024 = y;
double r428025 = z;
double r428026 = r428024 - r428025;
double r428027 = 1.0;
double r428028 = r428026 + r428027;
double r428029 = r428023 * r428028;
double r428030 = r428029 / r428025;
return r428030;
}
double f(double x, double y, double z) {
double r428031 = x;
double r428032 = -1.659244719723381e+73;
bool r428033 = r428031 <= r428032;
double r428034 = z;
double r428035 = y;
double r428036 = r428035 - r428034;
double r428037 = 1.0;
double r428038 = r428036 + r428037;
double r428039 = r428034 / r428038;
double r428040 = r428031 / r428039;
double r428041 = 2.3802987219429202e+69;
bool r428042 = r428031 <= r428041;
double r428043 = r428031 * r428035;
double r428044 = r428043 / r428034;
double r428045 = r428031 / r428034;
double r428046 = r428037 * r428045;
double r428047 = r428044 + r428046;
double r428048 = r428047 - r428031;
double r428049 = r428037 + r428035;
double r428050 = r428049 / r428034;
double r428051 = r428031 * r428050;
double r428052 = r428051 - r428031;
double r428053 = r428042 ? r428048 : r428052;
double r428054 = r428033 ? r428040 : r428053;
return r428054;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 10.1 |
|---|---|
| Target | 0.5 |
| Herbie | 0.4 |
if x < -1.659244719723381e+73Initial program 33.3
rmApplied associate-/l*0.1
if -1.659244719723381e+73 < x < 2.3802987219429202e+69Initial program 1.2
Taylor expanded around 0 0.5
if 2.3802987219429202e+69 < x Initial program 34.1
Taylor expanded around 0 10.8
Taylor expanded around 0 10.8
Simplified0.1
rmApplied div-inv0.1
Applied associate-*l*0.1
Simplified0.1
Final simplification0.4
herbie shell --seed 2019291
(FPCore (x y z)
:name "Diagrams.TwoD.Segment.Bernstein:evaluateBernstein from diagrams-lib-1.3.0.3"
:precision binary64
:herbie-target
(if (< x -2.7148310671343599e-162) (- (* (+ 1 y) (/ x z)) x) (if (< x 3.87410881643954616e-197) (* (* x (+ (- y z) 1)) (/ 1 z)) (- (* (+ 1 y) (/ x z)) x)))
(/ (* x (+ (- y z) 1)) z))