\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}\;\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{{B}^{2} + {\left(A - C\right)}^{2}}\right)}}{{B}^{2} - \left(4 \cdot A\right) \cdot C} \leq -\infty:\\
\;\;\;\;-\frac{\sqrt{2} \cdot \sqrt{F \cdot -0.5}}{\sqrt{C}}\\
\mathbf{elif}\;\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{{B}^{2} + {\left(A - C\right)}^{2}}\right)}}{{B}^{2} - \left(4 \cdot A\right) \cdot C} \leq -6.277179099796118 \cdot 10^{-215}:\\
\;\;\;\;\frac{\frac{-\sqrt{\left(2 \cdot \left(F \cdot \left(B \cdot B - 4 \cdot \left(A \cdot C\right)\right)\right)\right) \cdot \left(\left(A + C\right) - \sqrt{{\left(A - C\right)}^{2} + B \cdot B}\right)}}{\sqrt{B \cdot B - 4 \cdot \left(A \cdot C\right)}}}{\sqrt{{B}^{2} - \left(4 \cdot A\right) \cdot C}}\\
\mathbf{elif}\;\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{{B}^{2} + {\left(A - C\right)}^{2}}\right)}}{{B}^{2} - \left(4 \cdot A\right) \cdot C} \leq 0:\\
\;\;\;\;-\sqrt{2} \cdot \frac{\sqrt{F \cdot -0.5}}{\sqrt{C}}\\
\mathbf{elif}\;\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{{B}^{2} + {\left(A - C\right)}^{2}}\right)}}{{B}^{2} - \left(4 \cdot A\right) \cdot C} \leq \infty:\\
\;\;\;\;\frac{\left(A \cdot \sqrt{2}\right) \cdot \sqrt{-8 \cdot \left(C \cdot F\right)} + \frac{\left(B \cdot B\right) \cdot \left(F \cdot \sqrt{2}\right)}{\sqrt{-8 \cdot \left(C \cdot F\right)}}}{{B}^{2} - \left(4 \cdot A\right) \cdot C}\\
\mathbf{else}:\\
\;\;\;\;-\sqrt{\sqrt{2}} \cdot \left(\frac{\sqrt{F \cdot -0.5}}{\sqrt{C}} \cdot \sqrt{\sqrt{2}}\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 (<=
(/
(-
(sqrt
(*
(* 2.0 (* (- (pow B 2.0) (* (* 4.0 A) C)) F))
(- (+ A C) (sqrt (+ (pow B 2.0) (pow (- A C) 2.0)))))))
(- (pow B 2.0) (* (* 4.0 A) C)))
(- INFINITY))
(- (/ (* (sqrt 2.0) (sqrt (* F -0.5))) (sqrt C)))
(if (<=
(/
(-
(sqrt
(*
(* 2.0 (* (- (pow B 2.0) (* (* 4.0 A) C)) F))
(- (+ A C) (sqrt (+ (pow B 2.0) (pow (- A C) 2.0)))))))
(- (pow B 2.0) (* (* 4.0 A) C)))
-6.277179099796118e-215)
(/
(/
(-
(sqrt
(*
(* 2.0 (* F (- (* B B) (* 4.0 (* A C)))))
(- (+ A C) (sqrt (+ (pow (- A C) 2.0) (* B B)))))))
(sqrt (- (* B B) (* 4.0 (* A C)))))
(sqrt (- (pow B 2.0) (* (* 4.0 A) C))))
(if (<=
(/
(-
(sqrt
(*
(* 2.0 (* (- (pow B 2.0) (* (* 4.0 A) C)) F))
(- (+ A C) (sqrt (+ (pow B 2.0) (pow (- A C) 2.0)))))))
(- (pow B 2.0) (* (* 4.0 A) C)))
0.0)
(- (* (sqrt 2.0) (/ (sqrt (* F -0.5)) (sqrt C))))
(if (<=
(/
(-
(sqrt
(*
(* 2.0 (* (- (pow B 2.0) (* (* 4.0 A) C)) F))
(- (+ A C) (sqrt (+ (pow B 2.0) (pow (- A C) 2.0)))))))
(- (pow B 2.0) (* (* 4.0 A) C)))
INFINITY)
(/
(+
(* (* A (sqrt 2.0)) (sqrt (* -8.0 (* C F))))
(/ (* (* B B) (* F (sqrt 2.0))) (sqrt (* -8.0 (* C F)))))
(- (pow B 2.0) (* (* 4.0 A) C)))
(-
(*
(sqrt (sqrt 2.0))
(* (/ (sqrt (* F -0.5)) (sqrt C)) (sqrt (sqrt 2.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 ((-sqrt((2.0 * ((pow(B, 2.0) - ((4.0 * A) * C)) * F)) * ((A + C) - sqrt(pow(B, 2.0) + pow((A - C), 2.0)))) / (pow(B, 2.0) - ((4.0 * A) * C))) <= -((double) INFINITY)) {
tmp = -((sqrt(2.0) * sqrt(F * -0.5)) / sqrt(C));
} else if ((-sqrt((2.0 * ((pow(B, 2.0) - ((4.0 * A) * C)) * F)) * ((A + C) - sqrt(pow(B, 2.0) + pow((A - C), 2.0)))) / (pow(B, 2.0) - ((4.0 * A) * C))) <= -6.277179099796118e-215) {
tmp = (-sqrt((2.0 * (F * ((B * B) - (4.0 * (A * C))))) * ((A + C) - sqrt(pow((A - C), 2.0) + (B * B)))) / sqrt((B * B) - (4.0 * (A * C)))) / sqrt(pow(B, 2.0) - ((4.0 * A) * C));
} else if ((-sqrt((2.0 * ((pow(B, 2.0) - ((4.0 * A) * C)) * F)) * ((A + C) - sqrt(pow(B, 2.0) + pow((A - C), 2.0)))) / (pow(B, 2.0) - ((4.0 * A) * C))) <= 0.0) {
tmp = -(sqrt(2.0) * (sqrt(F * -0.5) / sqrt(C)));
} else if ((-sqrt((2.0 * ((pow(B, 2.0) - ((4.0 * A) * C)) * F)) * ((A + C) - sqrt(pow(B, 2.0) + pow((A - C), 2.0)))) / (pow(B, 2.0) - ((4.0 * A) * C))) <= ((double) INFINITY)) {
tmp = (((A * sqrt(2.0)) * sqrt(-8.0 * (C * F))) + (((B * B) * (F * sqrt(2.0))) / sqrt(-8.0 * (C * F)))) / (pow(B, 2.0) - ((4.0 * A) * C));
} else {
tmp = -(sqrt(sqrt(2.0)) * ((sqrt(F * -0.5) / sqrt(C)) * sqrt(sqrt(2.0))));
}
return tmp;
}



Bits error versus A



Bits error versus B



Bits error versus C



Bits error versus F
Results
if (/.f64 (neg.f64 (sqrt.f64 (*.f64 (*.f64 2 (*.f64 (-.f64 (pow.f64 B 2) (*.f64 (*.f64 4 A) C)) F)) (-.f64 (+.f64 A C) (sqrt.f64 (+.f64 (pow.f64 (-.f64 A C) 2) (pow.f64 B 2))))))) (-.f64 (pow.f64 B 2) (*.f64 (*.f64 4 A) C))) < -inf.0Initial program 64.0
Taylor expanded around -inf 34.1
Simplified34.1
rmApplied associate-*r/_binary64_547634.1
Applied sqrt-div_binary64_555123.8
Applied associate-*r/_binary64_547623.8
Simplified23.8
if -inf.0 < (/.f64 (neg.f64 (sqrt.f64 (*.f64 (*.f64 2 (*.f64 (-.f64 (pow.f64 B 2) (*.f64 (*.f64 4 A) C)) F)) (-.f64 (+.f64 A C) (sqrt.f64 (+.f64 (pow.f64 (-.f64 A C) 2) (pow.f64 B 2))))))) (-.f64 (pow.f64 B 2) (*.f64 (*.f64 4 A) C))) < -6.277179099796118e-215Initial program 1.3
rmApplied add-sqr-sqrt_binary64_55561.3
Applied associate-/r*_binary64_54781.4
Simplified1.4
if -6.277179099796118e-215 < (/.f64 (neg.f64 (sqrt.f64 (*.f64 (*.f64 2 (*.f64 (-.f64 (pow.f64 B 2) (*.f64 (*.f64 4 A) C)) F)) (-.f64 (+.f64 A C) (sqrt.f64 (+.f64 (pow.f64 (-.f64 A C) 2) (pow.f64 B 2))))))) (-.f64 (pow.f64 B 2) (*.f64 (*.f64 4 A) C))) < 0.0Initial program 61.5
Taylor expanded around -inf 33.2
Simplified33.2
rmApplied associate-*r/_binary64_547633.2
Applied sqrt-div_binary64_555129.2
Simplified29.2
if 0.0 < (/.f64 (neg.f64 (sqrt.f64 (*.f64 (*.f64 2 (*.f64 (-.f64 (pow.f64 B 2) (*.f64 (*.f64 4 A) C)) F)) (-.f64 (+.f64 A C) (sqrt.f64 (+.f64 (pow.f64 (-.f64 A C) 2) (pow.f64 B 2))))))) (-.f64 (pow.f64 B 2) (*.f64 (*.f64 4 A) C))) < +inf.0Initial program 39.5
Taylor expanded around -inf 14.0
Simplified14.0
if +inf.0 < (/.f64 (neg.f64 (sqrt.f64 (*.f64 (*.f64 2 (*.f64 (-.f64 (pow.f64 B 2) (*.f64 (*.f64 4 A) C)) F)) (-.f64 (+.f64 A C) (sqrt.f64 (+.f64 (pow.f64 (-.f64 A C) 2) (pow.f64 B 2))))))) (-.f64 (pow.f64 B 2) (*.f64 (*.f64 4 A) C))) Initial program 64.0
Taylor expanded around -inf 52.2
Simplified52.2
rmApplied associate-*r/_binary64_547652.2
Applied sqrt-div_binary64_555148.3
Simplified48.3
rmApplied add-sqr-sqrt_binary64_555648.3
Applied associate-*l*_binary64_547548.3
Final simplification30.6
herbie shell --seed 2021060
(FPCore (A B C F)
:name "ABCF->ab-angle b"
: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))))