\left(x - \frac{y}{z \cdot 3}\right) + \frac{t}{\left(z \cdot 3\right) \cdot y}\begin{array}{l}
\mathbf{if}\;t \le -3964198673573570831051653120 \lor \neg \left(t \le 2.882727162813425589307412170211595841217 \cdot 10^{-23}\right):\\
\;\;\;\;\left(x - \frac{y}{z \cdot 3}\right) + \frac{1}{\frac{\left(z \cdot 3\right) \cdot y}{t}}\\
\mathbf{else}:\\
\;\;\;\;\left(x - \frac{\frac{y}{z}}{3}\right) + \frac{1}{z} \cdot \frac{\frac{t}{3}}{y}\\
\end{array}double f(double x, double y, double z, double t) {
double r546035 = x;
double r546036 = y;
double r546037 = z;
double r546038 = 3.0;
double r546039 = r546037 * r546038;
double r546040 = r546036 / r546039;
double r546041 = r546035 - r546040;
double r546042 = t;
double r546043 = r546039 * r546036;
double r546044 = r546042 / r546043;
double r546045 = r546041 + r546044;
return r546045;
}
double f(double x, double y, double z, double t) {
double r546046 = t;
double r546047 = -3.964198673573571e+27;
bool r546048 = r546046 <= r546047;
double r546049 = 2.8827271628134256e-23;
bool r546050 = r546046 <= r546049;
double r546051 = !r546050;
bool r546052 = r546048 || r546051;
double r546053 = x;
double r546054 = y;
double r546055 = z;
double r546056 = 3.0;
double r546057 = r546055 * r546056;
double r546058 = r546054 / r546057;
double r546059 = r546053 - r546058;
double r546060 = 1.0;
double r546061 = r546057 * r546054;
double r546062 = r546061 / r546046;
double r546063 = r546060 / r546062;
double r546064 = r546059 + r546063;
double r546065 = r546054 / r546055;
double r546066 = r546065 / r546056;
double r546067 = r546053 - r546066;
double r546068 = r546060 / r546055;
double r546069 = r546046 / r546056;
double r546070 = r546069 / r546054;
double r546071 = r546068 * r546070;
double r546072 = r546067 + r546071;
double r546073 = r546052 ? r546064 : r546072;
return r546073;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 3.8 |
|---|---|
| Target | 1.7 |
| Herbie | 0.4 |
if t < -3.964198673573571e+27 or 2.8827271628134256e-23 < t Initial program 0.5
rmApplied clear-num0.5
if -3.964198673573571e+27 < t < 2.8827271628134256e-23Initial program 6.1
rmApplied associate-/r*1.1
rmApplied associate-/r*1.1
rmApplied *-un-lft-identity1.1
Applied *-un-lft-identity1.1
Applied times-frac1.1
Applied times-frac0.3
Simplified0.3
Final simplification0.4
herbie shell --seed 2019347 +o rules:numerics
(FPCore (x y z t)
:name "Diagrams.Solve.Polynomial:cubForm from diagrams-solve-0.1, H"
:precision binary64
:herbie-target
(+ (- x (/ y (* z 3))) (/ (/ t (* z 3)) y))
(+ (- x (/ y (* z 3))) (/ t (* (* z 3) y))))