\frac{x + y \cdot \left(z - x\right)}{z}\begin{array}{l}
\mathbf{if}\;z \le 1.010367153808741264986405239084380831559 \cdot 10^{46}:\\
\;\;\;\;y + \frac{x - y \cdot x}{z}\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{\sqrt{z}} \cdot \left(\frac{1}{\sqrt{z}} - \frac{1}{\frac{\sqrt{z}}{y}}\right) + y\\
\end{array}double f(double x, double y, double z) {
double r586077 = x;
double r586078 = y;
double r586079 = z;
double r586080 = r586079 - r586077;
double r586081 = r586078 * r586080;
double r586082 = r586077 + r586081;
double r586083 = r586082 / r586079;
return r586083;
}
double f(double x, double y, double z) {
double r586084 = z;
double r586085 = 1.0103671538087413e+46;
bool r586086 = r586084 <= r586085;
double r586087 = y;
double r586088 = x;
double r586089 = r586087 * r586088;
double r586090 = r586088 - r586089;
double r586091 = r586090 / r586084;
double r586092 = r586087 + r586091;
double r586093 = sqrt(r586084);
double r586094 = r586088 / r586093;
double r586095 = 1.0;
double r586096 = r586095 / r586093;
double r586097 = r586093 / r586087;
double r586098 = r586095 / r586097;
double r586099 = r586096 - r586098;
double r586100 = r586094 * r586099;
double r586101 = r586100 + r586087;
double r586102 = r586086 ? r586092 : r586101;
return r586102;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 10.7 |
|---|---|
| Target | 0.0 |
| Herbie | 1.9 |
if z < 1.0103671538087413e+46Initial program 7.5
Simplified2.5
if 1.0103671538087413e+46 < z Initial program 19.8
Simplified6.2
rmApplied add-sqr-sqrt6.3
Applied *-un-lft-identity6.3
Applied times-frac6.3
rmApplied div-sub6.3
Simplified2.2
rmApplied div-inv2.2
Applied div-inv2.2
Applied distribute-lft-out--2.2
Applied associate-*r*0.2
Simplified0.2
Final simplification1.9
herbie shell --seed 2019196
(FPCore (x y z)
:name "Diagrams.Backend.Rasterific:rasterificRadialGradient from diagrams-rasterific-1.3.1.3"
:herbie-target
(- (+ y (/ x z)) (/ y (/ z x)))
(/ (+ x (* y (- z x))) z))