1 - \sqrt{0.5 \cdot \left(1 + \frac{1}{\mathsf{hypot}\left(1, x\right)}\right)}\left(1 \cdot \left(1 - 0.5\right) - \frac{\frac{1}{\sqrt{\mathsf{hypot}\left(1, x\right)}}}{\sqrt{\mathsf{hypot}\left(1, x\right)}} \cdot 0.5\right) \cdot \frac{1}{1 + \sqrt{0.5 \cdot \left(1 + \frac{1}{\mathsf{hypot}\left(1, x\right)}\right)}}double f(double x) {
double r253619 = 1.0;
double r253620 = 0.5;
double r253621 = x;
double r253622 = hypot(r253619, r253621);
double r253623 = r253619 / r253622;
double r253624 = r253619 + r253623;
double r253625 = r253620 * r253624;
double r253626 = sqrt(r253625);
double r253627 = r253619 - r253626;
return r253627;
}
double f(double x) {
double r253628 = 1.0;
double r253629 = 0.5;
double r253630 = r253628 - r253629;
double r253631 = r253628 * r253630;
double r253632 = x;
double r253633 = hypot(r253628, r253632);
double r253634 = sqrt(r253633);
double r253635 = r253628 / r253634;
double r253636 = r253635 / r253634;
double r253637 = r253636 * r253629;
double r253638 = r253631 - r253637;
double r253639 = 1.0;
double r253640 = r253628 / r253633;
double r253641 = r253628 + r253640;
double r253642 = r253629 * r253641;
double r253643 = sqrt(r253642);
double r253644 = r253628 + r253643;
double r253645 = r253639 / r253644;
double r253646 = r253638 * r253645;
return r253646;
}



Bits error versus x
Results
Initial program 15.3
rmApplied flip--15.3
Simplified14.8
rmApplied add-sqr-sqrt14.9
Applied associate-/r*14.8
rmApplied distribute-rgt-in14.8
Applied associate--r+14.8
Simplified14.8
rmApplied div-inv14.8
Final simplification14.8
herbie shell --seed 2020042
(FPCore (x)
:name "Given's Rotation SVD example, simplified"
:precision binary64
(- 1 (sqrt (* 0.5 (+ 1 (/ 1 (hypot 1 x)))))))