\frac{-\sqrt{\left(2 \cdot \left(\left({B}^{2} - \left(4 \cdot A\right) \cdot C\right) \cdot F\right)\right) \cdot \left(\left(A + C\right) + \sqrt{{\left(A - C\right)}^{2} + {B}^{2}}\right)}}{{B}^{2} - \left(4 \cdot A\right) \cdot C}\begin{array}{l}
\mathbf{if}\;A \leq -1.0923582101290374 \cdot 10^{-212}:\\
\;\;\;\;\frac{-\sqrt{2 \cdot \left(\left(B \cdot B - C \cdot \left(A \cdot 4\right)\right) \cdot F\right)} \cdot \sqrt{\left|\sqrt[3]{B \cdot B + {\left(A - C\right)}^{2}}\right| \cdot \sqrt{\sqrt[3]{\sqrt[3]{B \cdot B + {\left(A - C\right)}^{2}} \cdot \sqrt[3]{B \cdot B + {\left(A - C\right)}^{2}}} \cdot \sqrt[3]{\sqrt[3]{B \cdot B + {\left(A - C\right)}^{2}}}} + \left(A + C\right)}}{{B}^{2} - C \cdot \left(A \cdot 4\right)}\\
\mathbf{elif}\;A \leq 1.0370206653323664 \cdot 10^{-290}:\\
\;\;\;\;\frac{-\sqrt{2 \cdot \left(\left(B \cdot B - C \cdot \left(A \cdot 4\right)\right) \cdot F\right)} \cdot \sqrt{\left(A + C\right) + \left(C - A\right)}}{{B}^{2} - C \cdot \left(A \cdot 4\right)}\\
\mathbf{elif}\;A \leq 3.6253503641308704 \cdot 10^{+122}:\\
\;\;\;\;\frac{-\sqrt{2 \cdot \left(\left(B \cdot B - C \cdot \left(A \cdot 4\right)\right) \cdot F\right)} \cdot \sqrt{\left(A + C\right) + \sqrt{\sqrt{B \cdot B + {\left(A - C\right)}^{2}}} \cdot \sqrt{\sqrt{B \cdot B + {\left(A - C\right)}^{2}}}}}{{B}^{2} - C \cdot \left(A \cdot 4\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{-\sqrt{2 \cdot \left(\left(B \cdot B - C \cdot \left(A \cdot 4\right)\right) \cdot F\right)} \cdot \sqrt{\left(A - C\right) + \left(A + C\right)}}{{B}^{2} - C \cdot \left(A \cdot 4\right)}\\
\end{array}(FPCore (A B C F)
:precision binary64
(/
(-
(sqrt
(*
(* 2.0 (* (- (pow B 2.0) (* (* 4.0 A) C)) F))
(+ (+ A C) (sqrt (+ (pow (- A C) 2.0) (pow B 2.0)))))))
(- (pow B 2.0) (* (* 4.0 A) C))))(FPCore (A B C F)
:precision binary64
(if (<= A -1.0923582101290374e-212)
(/
(-
(*
(sqrt (* 2.0 (* (- (* B B) (* C (* A 4.0))) F)))
(sqrt
(+
(*
(fabs (cbrt (+ (* B B) (pow (- A C) 2.0))))
(sqrt
(*
(cbrt
(*
(cbrt (+ (* B B) (pow (- A C) 2.0)))
(cbrt (+ (* B B) (pow (- A C) 2.0)))))
(cbrt (cbrt (+ (* B B) (pow (- A C) 2.0)))))))
(+ A C)))))
(- (pow B 2.0) (* C (* A 4.0))))
(if (<= A 1.0370206653323664e-290)
(/
(-
(*
(sqrt (* 2.0 (* (- (* B B) (* C (* A 4.0))) F)))
(sqrt (+ (+ A C) (- C A)))))
(- (pow B 2.0) (* C (* A 4.0))))
(if (<= A 3.6253503641308704e+122)
(/
(-
(*
(sqrt (* 2.0 (* (- (* B B) (* C (* A 4.0))) F)))
(sqrt
(+
(+ A C)
(*
(sqrt (sqrt (+ (* B B) (pow (- A C) 2.0))))
(sqrt (sqrt (+ (* B B) (pow (- A C) 2.0)))))))))
(- (pow B 2.0) (* C (* A 4.0))))
(/
(-
(*
(sqrt (* 2.0 (* (- (* B B) (* C (* A 4.0))) F)))
(sqrt (+ (- A C) (+ A C)))))
(- (pow B 2.0) (* C (* A 4.0))))))))double code(double A, double B, double C, double F) {
return -sqrt((2.0 * ((pow(B, 2.0) - ((4.0 * A) * C)) * F)) * ((A + C) + sqrt(pow((A - C), 2.0) + pow(B, 2.0)))) / (pow(B, 2.0) - ((4.0 * A) * C));
}
double code(double A, double B, double C, double F) {
double tmp;
if (A <= -1.0923582101290374e-212) {
tmp = -(sqrt(2.0 * (((B * B) - (C * (A * 4.0))) * F)) * sqrt((fabs(cbrt((B * B) + pow((A - C), 2.0))) * sqrt(cbrt(cbrt((B * B) + pow((A - C), 2.0)) * cbrt((B * B) + pow((A - C), 2.0))) * cbrt(cbrt((B * B) + pow((A - C), 2.0))))) + (A + C))) / (pow(B, 2.0) - (C * (A * 4.0)));
} else if (A <= 1.0370206653323664e-290) {
tmp = -(sqrt(2.0 * (((B * B) - (C * (A * 4.0))) * F)) * sqrt((A + C) + (C - A))) / (pow(B, 2.0) - (C * (A * 4.0)));
} else if (A <= 3.6253503641308704e+122) {
tmp = -(sqrt(2.0 * (((B * B) - (C * (A * 4.0))) * F)) * sqrt((A + C) + (sqrt(sqrt((B * B) + pow((A - C), 2.0))) * sqrt(sqrt((B * B) + pow((A - C), 2.0)))))) / (pow(B, 2.0) - (C * (A * 4.0)));
} else {
tmp = -(sqrt(2.0 * (((B * B) - (C * (A * 4.0))) * F)) * sqrt((A - C) + (A + C))) / (pow(B, 2.0) - (C * (A * 4.0)));
}
return tmp;
}



Bits error versus A



Bits error versus B



Bits error versus C



Bits error versus F
Results
if A < -1.09235821012903745e-212Initial program 55.8
rmApplied sqrt-prod_binary64_589154.9
Simplified54.9
Simplified54.9
rmApplied add-cube-cbrt_binary64_591054.9
Applied sqrt-prod_binary64_589154.9
Simplified54.9
rmApplied add-cube-cbrt_binary64_591054.9
Applied cbrt-prod_binary64_590654.9
if -1.09235821012903745e-212 < A < 1.03702066533236635e-290Initial program 50.1
rmApplied sqrt-prod_binary64_589148.0
Simplified48.0
Simplified48.0
Taylor expanded around -inf 55.1
if 1.03702066533236635e-290 < A < 3.6253503641308704e122Initial program 44.5
rmApplied sqrt-prod_binary64_589141.6
Simplified41.6
Simplified41.6
rmApplied add-sqr-sqrt_binary64_589741.7
if 3.6253503641308704e122 < A Initial program 61.0
rmApplied sqrt-prod_binary64_589160.0
Simplified60.0
Simplified60.0
Taylor expanded around inf 41.4
Final simplification48.5
herbie shell --seed 2020354
(FPCore (A B C F)
:name "ABCF->ab-angle a"
:precision binary64
(/ (- (sqrt (* (* 2.0 (* (- (pow B 2.0) (* (* 4.0 A) C)) F)) (+ (+ A C) (sqrt (+ (pow (- A C) 2.0) (pow B 2.0))))))) (- (pow B 2.0) (* (* 4.0 A) C))))