\frac{\left(x \cdot x + y \cdot y\right) - z \cdot z}{y \cdot 2}\begin{array}{l}
\mathbf{if}\;z \le -1.3464060117545458 \cdot 10^{154}:\\
\;\;\;\;0.5 \cdot \left(1 \cdot \left(\left(\mathsf{fma}\left(x, \frac{x}{y}, y\right) - \frac{z}{\sqrt{y}} \cdot \frac{z}{\sqrt{y}}\right) + \frac{z}{\sqrt{y}} \cdot \left(\frac{-z}{\sqrt{y}} + \frac{z}{\sqrt{y}}\right)\right)\right)\\
\mathbf{elif}\;z \le 1.32314543849587134 \cdot 10^{154}:\\
\;\;\;\;0.5 \cdot \left(1 \cdot \left(\mathsf{fma}\left(x, \frac{x}{y}, y\right) - \frac{{z}^{2}}{y}\right)\right)\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \left(\left(y + \frac{{x}^{2}}{y}\right) - z \cdot \frac{z}{y}\right)\\
\end{array}double f(double x, double y, double z) {
double r613210 = x;
double r613211 = r613210 * r613210;
double r613212 = y;
double r613213 = r613212 * r613212;
double r613214 = r613211 + r613213;
double r613215 = z;
double r613216 = r613215 * r613215;
double r613217 = r613214 - r613216;
double r613218 = 2.0;
double r613219 = r613212 * r613218;
double r613220 = r613217 / r613219;
return r613220;
}
double f(double x, double y, double z) {
double r613221 = z;
double r613222 = -1.3464060117545458e+154;
bool r613223 = r613221 <= r613222;
double r613224 = 0.5;
double r613225 = 1.0;
double r613226 = x;
double r613227 = y;
double r613228 = r613226 / r613227;
double r613229 = fma(r613226, r613228, r613227);
double r613230 = sqrt(r613227);
double r613231 = r613221 / r613230;
double r613232 = r613231 * r613231;
double r613233 = r613229 - r613232;
double r613234 = -r613221;
double r613235 = r613234 / r613230;
double r613236 = r613235 + r613231;
double r613237 = r613231 * r613236;
double r613238 = r613233 + r613237;
double r613239 = r613225 * r613238;
double r613240 = r613224 * r613239;
double r613241 = 1.3231454384958713e+154;
bool r613242 = r613221 <= r613241;
double r613243 = 2.0;
double r613244 = pow(r613221, r613243);
double r613245 = r613244 / r613227;
double r613246 = r613229 - r613245;
double r613247 = r613225 * r613246;
double r613248 = r613224 * r613247;
double r613249 = pow(r613226, r613243);
double r613250 = r613249 / r613227;
double r613251 = r613227 + r613250;
double r613252 = r613221 / r613227;
double r613253 = r613221 * r613252;
double r613254 = r613251 - r613253;
double r613255 = r613224 * r613254;
double r613256 = r613242 ? r613248 : r613255;
double r613257 = r613223 ? r613240 : r613256;
return r613257;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 28.9 |
|---|---|
| Target | 0.2 |
| Herbie | 2.6 |
if z < -1.3464060117545458e+154Initial program 64.0
Simplified64.0
Taylor expanded around 0 64.0
Simplified64.0
rmApplied *-un-lft-identity64.0
Applied add-sqr-sqrt64.0
Applied unpow-prod-down64.0
Applied times-frac64.0
Simplified64.0
Simplified64.0
rmApplied *-un-lft-identity64.0
Applied *-un-lft-identity64.0
Applied distribute-lft-out--64.0
Simplified64.0
rmApplied add-sqr-sqrt64.0
Applied add-sqr-sqrt64.0
Applied unpow-prod-down64.0
Applied times-frac64.0
Applied add-sqr-sqrt64.0
Applied prod-diff64.0
Simplified64.0
Simplified30.4
if -1.3464060117545458e+154 < z < 1.3231454384958713e+154Initial program 25.1
Simplified25.1
Taylor expanded around 0 7.1
Simplified7.1
rmApplied *-un-lft-identity7.1
Applied add-sqr-sqrt36.3
Applied unpow-prod-down36.3
Applied times-frac33.0
Simplified32.9
Simplified0.7
rmApplied *-un-lft-identity0.7
Applied *-un-lft-identity0.7
Applied distribute-lft-out--0.7
Simplified0.7
if 1.3231454384958713e+154 < z Initial program 64.0
Simplified64.0
Taylor expanded around 0 64.0
Simplified64.0
rmApplied *-un-lft-identity64.0
Applied add-sqr-sqrt64.0
Applied unpow-prod-down64.0
Applied times-frac12.1
Simplified12.0
Simplified11.8
Final simplification2.6
herbie shell --seed 2020083 +o rules:numerics
(FPCore (x y z)
:name "Diagrams.TwoD.Apollonian:initialConfig from diagrams-contrib-1.3.0.5, A"
:precision binary64
:herbie-target
(- (* y 0.5) (* (* (/ 0.5 y) (+ z x)) (- z x)))
(/ (- (+ (* x x) (* y y)) (* z z)) (* y 2)))