\frac{\left(x \cdot x + y \cdot y\right) - z \cdot z}{y \cdot 2}0.5 \cdot \left(\left(y + \frac{\frac{x}{y}}{\frac{1}{x}}\right) - \left|z\right| \cdot \frac{\left|z\right|}{y}\right)double f(double x, double y, double z) {
double r689909 = x;
double r689910 = r689909 * r689909;
double r689911 = y;
double r689912 = r689911 * r689911;
double r689913 = r689910 + r689912;
double r689914 = z;
double r689915 = r689914 * r689914;
double r689916 = r689913 - r689915;
double r689917 = 2.0;
double r689918 = r689911 * r689917;
double r689919 = r689916 / r689918;
return r689919;
}
double f(double x, double y, double z) {
double r689920 = 0.5;
double r689921 = y;
double r689922 = x;
double r689923 = r689922 / r689921;
double r689924 = 1.0;
double r689925 = r689924 / r689922;
double r689926 = r689923 / r689925;
double r689927 = r689921 + r689926;
double r689928 = z;
double r689929 = fabs(r689928);
double r689930 = r689929 / r689921;
double r689931 = r689929 * r689930;
double r689932 = r689927 - r689931;
double r689933 = r689920 * r689932;
return r689933;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 28.2 |
|---|---|
| Target | 0.2 |
| Herbie | 0.2 |
Initial program 28.2
Taylor expanded around 0 12.3
Simplified12.3
rmApplied unpow212.3
Applied associate-/l*6.9
rmApplied *-un-lft-identity6.9
Applied add-sqr-sqrt6.9
Applied times-frac6.9
Simplified6.9
Simplified0.1
rmApplied div-inv0.2
Applied associate-/r*0.2
Final simplification0.2
herbie shell --seed 2020027 +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)))