\sqrt{0.5 \cdot \left(1 + \frac{x}{\sqrt{\left(4 \cdot p\right) \cdot p + x \cdot x}}\right)}\sqrt{\frac{0.5 \cdot \left(0.5 \cdot 0.5\right) + \left(x \cdot 0.5\right) \cdot \frac{x \cdot 0.5}{\frac{\sqrt{x \cdot x + \left(p \cdot 4\right) \cdot p}}{\frac{x \cdot 0.5}{x \cdot x + \left(p \cdot 4\right) \cdot p}}}}{0.5 \cdot 0.5 - \left(x \cdot \frac{0.5}{\sqrt[3]{\left(\sqrt[3]{\sqrt{x \cdot x + \left(p \cdot 4\right) \cdot p}} \cdot \sqrt[3]{\sqrt{x \cdot x + \left(p \cdot 4\right) \cdot p}}\right) \cdot \sqrt[3]{\sqrt{x \cdot x + \left(p \cdot 4\right) \cdot p}}} \cdot \left(\sqrt[3]{\sqrt{x \cdot x + \left(p \cdot 4\right) \cdot p}} \cdot \sqrt[3]{\sqrt{x \cdot x + \left(p \cdot 4\right) \cdot p}}\right)}\right) \cdot \left(0.5 - x \cdot \frac{0.5}{\sqrt{x \cdot x + \left(p \cdot 4\right) \cdot p}}\right)}}double f(double p, double x) {
double r10220484 = 0.5;
double r10220485 = 1.0;
double r10220486 = x;
double r10220487 = 4.0;
double r10220488 = p;
double r10220489 = r10220487 * r10220488;
double r10220490 = r10220489 * r10220488;
double r10220491 = r10220486 * r10220486;
double r10220492 = r10220490 + r10220491;
double r10220493 = sqrt(r10220492);
double r10220494 = r10220486 / r10220493;
double r10220495 = r10220485 + r10220494;
double r10220496 = r10220484 * r10220495;
double r10220497 = sqrt(r10220496);
return r10220497;
}
double f(double p, double x) {
double r10220498 = 0.5;
double r10220499 = r10220498 * r10220498;
double r10220500 = r10220498 * r10220499;
double r10220501 = x;
double r10220502 = r10220501 * r10220498;
double r10220503 = r10220501 * r10220501;
double r10220504 = p;
double r10220505 = 4.0;
double r10220506 = r10220504 * r10220505;
double r10220507 = r10220506 * r10220504;
double r10220508 = r10220503 + r10220507;
double r10220509 = sqrt(r10220508);
double r10220510 = r10220502 / r10220508;
double r10220511 = r10220509 / r10220510;
double r10220512 = r10220502 / r10220511;
double r10220513 = r10220502 * r10220512;
double r10220514 = r10220500 + r10220513;
double r10220515 = cbrt(r10220509);
double r10220516 = r10220515 * r10220515;
double r10220517 = r10220516 * r10220515;
double r10220518 = cbrt(r10220517);
double r10220519 = r10220518 * r10220516;
double r10220520 = r10220498 / r10220519;
double r10220521 = r10220501 * r10220520;
double r10220522 = r10220498 / r10220509;
double r10220523 = r10220501 * r10220522;
double r10220524 = r10220498 - r10220523;
double r10220525 = r10220521 * r10220524;
double r10220526 = r10220499 - r10220525;
double r10220527 = r10220514 / r10220526;
double r10220528 = sqrt(r10220527);
return r10220528;
}




Bits error versus p




Bits error versus x
Results
| Original | 12.8 |
|---|---|
| Target | 12.8 |
| Herbie | 13.4 |
Initial program 12.8
Simplified12.8
rmApplied flip3-+12.8
Simplified13.4
Simplified13.4
rmApplied add-cube-cbrt13.4
rmApplied add-cube-cbrt13.4
Final simplification13.4
herbie shell --seed 2019139
(FPCore (p x)
:name "Given's Rotation SVD example"
:pre (< 1e-150 (fabs x) 1e+150)
:herbie-target
(sqrt (+ 1/2 (/ (copysign 1/2 x) (hypot 1 (/ (* 2 p) x)))))
(sqrt (* 0.5 (+ 1 (/ x (sqrt (+ (* (* 4 p) p) (* x x))))))))