\sqrt{0.5 \cdot \left(1 + \frac{x}{\sqrt{\left(4 \cdot p\right) \cdot p + x \cdot x}}\right)}\begin{array}{l}
\mathbf{if}\;\frac{x}{\sqrt{x \cdot x + p \cdot \left(p \cdot 4\right)}} \le -0.9999999999999691357999154206481762230396:\\
\;\;\;\;\left(\log \left(\sqrt[3]{e^{\sqrt[3]{\sqrt{0.5 \cdot \log \left(e^{1 + \frac{x}{\sqrt{x \cdot x + p \cdot \left(p \cdot 4\right)}}}\right)}} \cdot \sqrt[3]{\sqrt{0.5 \cdot \log \left(e^{1 + \frac{x}{\sqrt{x \cdot x + p \cdot \left(p \cdot 4\right)}}}\right)}}}}\right) + \log \left(\sqrt[3]{e^{\sqrt[3]{\sqrt{0.5 \cdot \log \left(e^{1 + \frac{x}{\sqrt{x \cdot x + p \cdot \left(p \cdot 4\right)}}}\right)}} \cdot \sqrt[3]{\sqrt{0.5 \cdot \log \left(e^{1 + \frac{x}{\sqrt{x \cdot x + p \cdot \left(p \cdot 4\right)}}}\right)}}}} \cdot \sqrt[3]{e^{\sqrt[3]{\sqrt{0.5 \cdot \log \left(e^{1 + \frac{x}{\sqrt{x \cdot x + p \cdot \left(p \cdot 4\right)}}}\right)}} \cdot \sqrt[3]{\sqrt{0.5 \cdot \log \left(e^{1 + \frac{x}{\sqrt{x \cdot x + p \cdot \left(p \cdot 4\right)}}}\right)}}}}\right)\right) \cdot \sqrt[3]{\sqrt{0.5 \cdot \log \left(e^{1 + \frac{x}{\sqrt{x \cdot x + p \cdot \left(p \cdot 4\right)}}}\right)}}\\
\mathbf{else}:\\
\;\;\;\;\sqrt{0.5 \cdot \left(\frac{x}{\sqrt{\sqrt{x \cdot x + p \cdot \left(p \cdot 4\right)}} \cdot \sqrt{\sqrt{x \cdot x + p \cdot \left(p \cdot 4\right)}}} + 1\right)}\\
\end{array}double f(double p, double x) {
double r11315542 = 0.5;
double r11315543 = 1.0;
double r11315544 = x;
double r11315545 = 4.0;
double r11315546 = p;
double r11315547 = r11315545 * r11315546;
double r11315548 = r11315547 * r11315546;
double r11315549 = r11315544 * r11315544;
double r11315550 = r11315548 + r11315549;
double r11315551 = sqrt(r11315550);
double r11315552 = r11315544 / r11315551;
double r11315553 = r11315543 + r11315552;
double r11315554 = r11315542 * r11315553;
double r11315555 = sqrt(r11315554);
return r11315555;
}
double f(double p, double x) {
double r11315556 = x;
double r11315557 = r11315556 * r11315556;
double r11315558 = p;
double r11315559 = 4.0;
double r11315560 = r11315558 * r11315559;
double r11315561 = r11315558 * r11315560;
double r11315562 = r11315557 + r11315561;
double r11315563 = sqrt(r11315562);
double r11315564 = r11315556 / r11315563;
double r11315565 = -0.9999999999999691;
bool r11315566 = r11315564 <= r11315565;
double r11315567 = 0.5;
double r11315568 = 1.0;
double r11315569 = r11315568 + r11315564;
double r11315570 = exp(r11315569);
double r11315571 = log(r11315570);
double r11315572 = r11315567 * r11315571;
double r11315573 = sqrt(r11315572);
double r11315574 = cbrt(r11315573);
double r11315575 = r11315574 * r11315574;
double r11315576 = exp(r11315575);
double r11315577 = cbrt(r11315576);
double r11315578 = log(r11315577);
double r11315579 = r11315577 * r11315577;
double r11315580 = log(r11315579);
double r11315581 = r11315578 + r11315580;
double r11315582 = r11315581 * r11315574;
double r11315583 = sqrt(r11315563);
double r11315584 = r11315583 * r11315583;
double r11315585 = r11315556 / r11315584;
double r11315586 = r11315585 + r11315568;
double r11315587 = r11315567 * r11315586;
double r11315588 = sqrt(r11315587);
double r11315589 = r11315566 ? r11315582 : r11315588;
return r11315589;
}




Bits error versus p




Bits error versus x
Results
| Original | 13.3 |
|---|---|
| Target | 13.3 |
| Herbie | 13.3 |
if (/ x (sqrt (+ (* (* 4.0 p) p) (* x x)))) < -0.9999999999999691Initial program 54.1
rmApplied add-log-exp54.1
Applied add-log-exp54.1
Applied sum-log54.1
Simplified54.1
rmApplied add-cube-cbrt54.1
rmApplied add-log-exp54.1
rmApplied add-cube-cbrt54.1
Applied log-prod54.1
if -0.9999999999999691 < (/ x (sqrt (+ (* (* 4.0 p) p) (* x x)))) Initial program 0.2
rmApplied add-sqr-sqrt0.2
Applied sqrt-prod0.2
Final simplification13.3
herbie shell --seed 2019168
(FPCore (p x)
:name "Given's Rotation SVD example"
:pre (< 1e-150 (fabs x) 1e+150)
:herbie-target
(sqrt (+ 0.5 (/ (copysign 0.5 x) (hypot 1.0 (/ (* 2.0 p) x)))))
(sqrt (* 0.5 (+ 1.0 (/ x (sqrt (+ (* (* 4.0 p) p) (* x x))))))))