\frac{x \cdot \left(y - z\right)}{y}\begin{array}{l}
\mathbf{if}\;y \le -3907237935777614:\\
\;\;\;\;x \cdot \frac{y - z}{y}\\
\mathbf{elif}\;y \le 1.09080637052234108 \cdot 10^{-105}:\\
\;\;\;\;x - \frac{x \cdot z}{y}\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{\frac{y}{y - z}}\\
\end{array}double f(double x, double y, double z) {
double r790766 = x;
double r790767 = y;
double r790768 = z;
double r790769 = r790767 - r790768;
double r790770 = r790766 * r790769;
double r790771 = r790770 / r790767;
return r790771;
}
double f(double x, double y, double z) {
double r790772 = y;
double r790773 = -3907237935777614.0;
bool r790774 = r790772 <= r790773;
double r790775 = x;
double r790776 = z;
double r790777 = r790772 - r790776;
double r790778 = r790777 / r790772;
double r790779 = r790775 * r790778;
double r790780 = 1.090806370522341e-105;
bool r790781 = r790772 <= r790780;
double r790782 = r790775 * r790776;
double r790783 = r790782 / r790772;
double r790784 = r790775 - r790783;
double r790785 = r790772 / r790777;
double r790786 = r790775 / r790785;
double r790787 = r790781 ? r790784 : r790786;
double r790788 = r790774 ? r790779 : r790787;
return r790788;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 12.0 |
|---|---|
| Target | 3.0 |
| Herbie | 1.7 |
if y < -3907237935777614.0Initial program 16.7
rmApplied *-un-lft-identity16.7
Applied times-frac0.1
Simplified0.1
if -3907237935777614.0 < y < 1.090806370522341e-105Initial program 6.8
rmApplied associate-/l*7.5
Taylor expanded around 0 4.2
if 1.090806370522341e-105 < y Initial program 13.5
rmApplied associate-/l*0.4
Final simplification1.7
herbie shell --seed 2020003
(FPCore (x y z)
:name "Diagrams.Backend.Cairo.Internal:setTexture from diagrams-cairo-1.3.0.3"
:precision binary64
:herbie-target
(if (< z -2.060202331921739e+104) (- x (/ (* z x) y)) (if (< z 1.6939766013828526e+213) (/ x (/ y (- y z))) (* (- y z) (/ x y))))
(/ (* x (- y z)) y))