(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
(let* ((t_0 (sqrt (hypot (sqrt (* A (* C -4.0))) B)))
(t_1 (hypot B (- A C)))
(t_2 (sqrt (* 2.0 (* F (+ (+ A C) t_1)))))
(t_3 (fma A (* C -4.0) (* B B)))
(t_4 (/ (- (sqrt (* t_3 (* 2.0 (* F (+ A (+ C t_1))))))) t_3)))
(if (<= B -7.04206316560968e+74)
(- (/ t_2 (- B)))
(if (<= B -1.3292949444045343e-118)
t_4
(if (<= B -7.755326901280092e-186)
(- (/ (* (sqrt (* F (+ C (hypot B C)))) (sqrt 2.0)) (* t_0 t_0)))
(if (<= B -5.241401211104361e-236)
(/
(-
(sqrt
(* t_3 (* 2.0 (* F (- (* 2.0 C) (* 0.5 (/ (pow B 2.0) A))))))))
t_3)
(if (<= B 4.017421150583121e-117)
t_4
(if (<= B 0.050588711370826114)
(- (* (sqrt 2.0) (sqrt (* -0.5 (/ F A)))))
(- (/ t_2 B))))))))))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 t_0 = sqrt(hypot(sqrt((A * (C * -4.0))), B));
double t_1 = hypot(B, (A - C));
double t_2 = sqrt((2.0 * (F * ((A + C) + t_1))));
double t_3 = fma(A, (C * -4.0), (B * B));
double t_4 = -sqrt((t_3 * (2.0 * (F * (A + (C + t_1)))))) / t_3;
double tmp;
if (B <= -7.04206316560968e+74) {
tmp = -(t_2 / -B);
} else if (B <= -1.3292949444045343e-118) {
tmp = t_4;
} else if (B <= -7.755326901280092e-186) {
tmp = -((sqrt((F * (C + hypot(B, C)))) * sqrt(2.0)) / (t_0 * t_0));
} else if (B <= -5.241401211104361e-236) {
tmp = -sqrt((t_3 * (2.0 * (F * ((2.0 * C) - (0.5 * (pow(B, 2.0) / A))))))) / t_3;
} else if (B <= 4.017421150583121e-117) {
tmp = t_4;
} else if (B <= 0.050588711370826114) {
tmp = -(sqrt(2.0) * sqrt((-0.5 * (F / A))));
} else {
tmp = -(t_2 / B);
}
return tmp;
}
function code(A, B, C, F) return Float64(Float64(-sqrt(Float64(Float64(2.0 * Float64(Float64((B ^ 2.0) - Float64(Float64(4.0 * A) * C)) * F)) * Float64(Float64(A + C) + sqrt(Float64((Float64(A - C) ^ 2.0) + (B ^ 2.0))))))) / Float64((B ^ 2.0) - Float64(Float64(4.0 * A) * C))) end
function code(A, B, C, F) t_0 = sqrt(hypot(sqrt(Float64(A * Float64(C * -4.0))), B)) t_1 = hypot(B, Float64(A - C)) t_2 = sqrt(Float64(2.0 * Float64(F * Float64(Float64(A + C) + t_1)))) t_3 = fma(A, Float64(C * -4.0), Float64(B * B)) t_4 = Float64(Float64(-sqrt(Float64(t_3 * Float64(2.0 * Float64(F * Float64(A + Float64(C + t_1))))))) / t_3) tmp = 0.0 if (B <= -7.04206316560968e+74) tmp = Float64(-Float64(t_2 / Float64(-B))); elseif (B <= -1.3292949444045343e-118) tmp = t_4; elseif (B <= -7.755326901280092e-186) tmp = Float64(-Float64(Float64(sqrt(Float64(F * Float64(C + hypot(B, C)))) * sqrt(2.0)) / Float64(t_0 * t_0))); elseif (B <= -5.241401211104361e-236) tmp = Float64(Float64(-sqrt(Float64(t_3 * Float64(2.0 * Float64(F * Float64(Float64(2.0 * C) - Float64(0.5 * Float64((B ^ 2.0) / A)))))))) / t_3); elseif (B <= 4.017421150583121e-117) tmp = t_4; elseif (B <= 0.050588711370826114) tmp = Float64(-Float64(sqrt(2.0) * sqrt(Float64(-0.5 * Float64(F / A))))); else tmp = Float64(-Float64(t_2 / B)); end return tmp end
code[A_, B_, C_, F_] := N[((-N[Sqrt[N[(N[(2.0 * N[(N[(N[Power[B, 2.0], $MachinePrecision] - N[(N[(4.0 * A), $MachinePrecision] * C), $MachinePrecision]), $MachinePrecision] * F), $MachinePrecision]), $MachinePrecision] * N[(N[(A + C), $MachinePrecision] + N[Sqrt[N[(N[Power[N[(A - C), $MachinePrecision], 2.0], $MachinePrecision] + N[Power[B, 2.0], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]) / N[(N[Power[B, 2.0], $MachinePrecision] - N[(N[(4.0 * A), $MachinePrecision] * C), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
code[A_, B_, C_, F_] := Block[{t$95$0 = N[Sqrt[N[Sqrt[N[Sqrt[N[(A * N[(C * -4.0), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] ^ 2 + B ^ 2], $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[Sqrt[B ^ 2 + N[(A - C), $MachinePrecision] ^ 2], $MachinePrecision]}, Block[{t$95$2 = N[Sqrt[N[(2.0 * N[(F * N[(N[(A + C), $MachinePrecision] + t$95$1), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$3 = N[(A * N[(C * -4.0), $MachinePrecision] + N[(B * B), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$4 = N[((-N[Sqrt[N[(t$95$3 * N[(2.0 * N[(F * N[(A + N[(C + t$95$1), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]) / t$95$3), $MachinePrecision]}, If[LessEqual[B, -7.04206316560968e+74], (-N[(t$95$2 / (-B)), $MachinePrecision]), If[LessEqual[B, -1.3292949444045343e-118], t$95$4, If[LessEqual[B, -7.755326901280092e-186], (-N[(N[(N[Sqrt[N[(F * N[(C + N[Sqrt[B ^ 2 + C ^ 2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * N[Sqrt[2.0], $MachinePrecision]), $MachinePrecision] / N[(t$95$0 * t$95$0), $MachinePrecision]), $MachinePrecision]), If[LessEqual[B, -5.241401211104361e-236], N[((-N[Sqrt[N[(t$95$3 * N[(2.0 * N[(F * N[(N[(2.0 * C), $MachinePrecision] - N[(0.5 * N[(N[Power[B, 2.0], $MachinePrecision] / A), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]) / t$95$3), $MachinePrecision], If[LessEqual[B, 4.017421150583121e-117], t$95$4, If[LessEqual[B, 0.050588711370826114], (-N[(N[Sqrt[2.0], $MachinePrecision] * N[Sqrt[N[(-0.5 * N[(F / A), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), (-N[(t$95$2 / B), $MachinePrecision])]]]]]]]]]]]
\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}
t_0 := \sqrt{\mathsf{hypot}\left(\sqrt{A \cdot \left(C \cdot -4\right)}, B\right)}\\
t_1 := \mathsf{hypot}\left(B, A - C\right)\\
t_2 := \sqrt{2 \cdot \left(F \cdot \left(\left(A + C\right) + t_1\right)\right)}\\
t_3 := \mathsf{fma}\left(A, C \cdot -4, B \cdot B\right)\\
t_4 := \frac{-\sqrt{t_3 \cdot \left(2 \cdot \left(F \cdot \left(A + \left(C + t_1\right)\right)\right)\right)}}{t_3}\\
\mathbf{if}\;B \leq -7.04206316560968 \cdot 10^{+74}:\\
\;\;\;\;-\frac{t_2}{-B}\\
\mathbf{elif}\;B \leq -1.3292949444045343 \cdot 10^{-118}:\\
\;\;\;\;t_4\\
\mathbf{elif}\;B \leq -7.755326901280092 \cdot 10^{-186}:\\
\;\;\;\;-\frac{\sqrt{F \cdot \left(C + \mathsf{hypot}\left(B, C\right)\right)} \cdot \sqrt{2}}{t_0 \cdot t_0}\\
\mathbf{elif}\;B \leq -5.241401211104361 \cdot 10^{-236}:\\
\;\;\;\;\frac{-\sqrt{t_3 \cdot \left(2 \cdot \left(F \cdot \left(2 \cdot C - 0.5 \cdot \frac{{B}^{2}}{A}\right)\right)\right)}}{t_3}\\
\mathbf{elif}\;B \leq 4.017421150583121 \cdot 10^{-117}:\\
\;\;\;\;t_4\\
\mathbf{elif}\;B \leq 0.050588711370826114:\\
\;\;\;\;-\sqrt{2} \cdot \sqrt{-0.5 \cdot \frac{F}{A}}\\
\mathbf{else}:\\
\;\;\;\;-\frac{t_2}{B}\\
\end{array}



Bits error versus A



Bits error versus B



Bits error versus C



Bits error versus F
if B < -7.04206316560967957e74Initial program 59.4
Simplified58.2
Applied add-sqr-sqrt_binary6458.2
Applied sqrt-prod_binary6452.5
Applied distribute-lft-neg-in_binary6452.5
Applied times-frac_binary6452.4
Simplified51.0
Taylor expanded in B around -inf 31.3
Simplified31.3
if -7.04206316560967957e74 < B < -1.3292949444045343e-118 or -5.2414012111043613e-236 < B < 4.01742115058312126e-117Initial program 49.7
Simplified44.8
Applied associate-+l+_binary6443.8
if -1.3292949444045343e-118 < B < -7.75532690128009245e-186Initial program 50.5
Simplified45.8
Applied add-sqr-sqrt_binary6453.3
Applied sqrt-prod_binary6448.0
Applied distribute-lft-neg-in_binary6448.0
Applied times-frac_binary6448.0
Simplified47.9
Applied add-sqr-sqrt_binary6447.9
Simplified48.0
Simplified46.2
Taylor expanded in A around 0 53.7
Simplified50.2
if -7.75532690128009245e-186 < B < -5.2414012111043613e-236Initial program 53.2
Simplified48.8
Taylor expanded in A around -inf 46.2
if 4.01742115058312126e-117 < B < 0.050588711370826114Initial program 44.4
Simplified40.1
Taylor expanded in C around inf 53.5
Simplified53.5
if 0.050588711370826114 < B Initial program 55.4
Simplified53.6
Applied add-sqr-sqrt_binary6454.2
Applied sqrt-prod_binary6448.9
Applied distribute-lft-neg-in_binary6448.9
Applied times-frac_binary6448.9
Simplified47.8
Taylor expanded in A around 0 32.6
Final simplification40.0
herbie shell --seed 2022137
(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))))