\frac{x + y \cdot \left(z - x\right)}{z}\begin{array}{l}
\mathbf{if}\;z \le -1.2525042507888118 \cdot 10^{-93}:\\
\;\;\;\;\mathsf{fma}\left(1, \frac{x}{z} + y, \frac{-1}{\frac{\frac{z}{y}}{x}}\right)\\
\mathbf{elif}\;z \le 3.640402671389334 \cdot 10^{-286}:\\
\;\;\;\;\mathsf{fma}\left(\frac{\sqrt[3]{x} \cdot \sqrt[3]{x}}{\sqrt[3]{z} \cdot \sqrt[3]{z}}, \frac{\sqrt[3]{x}}{\sqrt[3]{z}}, y\right) - \frac{x \cdot y}{z}\\
\mathbf{else}:\\
\;\;\;\;\left(\frac{x}{z} + y\right) - \frac{x}{\sqrt{z}} \cdot \frac{y}{\sqrt{z}}\\
\end{array}double f(double x, double y, double z) {
double r778896 = x;
double r778897 = y;
double r778898 = z;
double r778899 = r778898 - r778896;
double r778900 = r778897 * r778899;
double r778901 = r778896 + r778900;
double r778902 = r778901 / r778898;
return r778902;
}
double f(double x, double y, double z) {
double r778903 = z;
double r778904 = -1.2525042507888118e-93;
bool r778905 = r778903 <= r778904;
double r778906 = 1.0;
double r778907 = x;
double r778908 = r778907 / r778903;
double r778909 = y;
double r778910 = r778908 + r778909;
double r778911 = -r778906;
double r778912 = r778903 / r778909;
double r778913 = r778912 / r778907;
double r778914 = r778911 / r778913;
double r778915 = fma(r778906, r778910, r778914);
double r778916 = 3.640402671389334e-286;
bool r778917 = r778903 <= r778916;
double r778918 = cbrt(r778907);
double r778919 = r778918 * r778918;
double r778920 = cbrt(r778903);
double r778921 = r778920 * r778920;
double r778922 = r778919 / r778921;
double r778923 = r778918 / r778920;
double r778924 = fma(r778922, r778923, r778909);
double r778925 = r778907 * r778909;
double r778926 = r778925 / r778903;
double r778927 = r778924 - r778926;
double r778928 = sqrt(r778903);
double r778929 = r778907 / r778928;
double r778930 = r778909 / r778928;
double r778931 = r778929 * r778930;
double r778932 = r778910 - r778931;
double r778933 = r778917 ? r778927 : r778932;
double r778934 = r778905 ? r778915 : r778933;
return r778934;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 10.4 |
|---|---|
| Target | 0.0 |
| Herbie | 0.8 |
if z < -1.2525042507888118e-93Initial program 14.0
Simplified14.0
Taylor expanded around 0 4.5
rmApplied *-un-lft-identity4.5
Applied fma-neg4.5
Simplified0.4
rmApplied *-un-lft-identity0.4
Applied distribute-lft-neg-in0.4
Applied associate-/l*0.4
if -1.2525042507888118e-93 < z < 3.640402671389334e-286Initial program 0.1
Simplified0.1
Taylor expanded around 0 0.1
rmApplied add-cube-cbrt0.9
Applied add-cube-cbrt1.0
Applied times-frac1.0
Applied fma-def1.0
if 3.640402671389334e-286 < z Initial program 10.4
Simplified10.4
Taylor expanded around 0 3.3
rmApplied add-sqr-sqrt3.4
Applied times-frac1.1
Final simplification0.8
herbie shell --seed 2020046 +o rules:numerics
(FPCore (x y z)
:name "Diagrams.Backend.Rasterific:rasterificRadialGradient from diagrams-rasterific-1.3.1.3"
:precision binary64
:herbie-target
(- (+ y (/ x z)) (/ y (/ z x)))
(/ (+ x (* y (- z x))) z))