(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 (+ A (hypot B (- A C))))
(t_1 (+ C t_0))
(t_2 (fma B B (* A (* C -4.0))))
(t_3 (* 2.0 (* F t_2)))
(t_4 (* (* (sqrt (* 2.0 t_2)) (sqrt F)) (/ (- (sqrt t_1)) t_2)))
(t_5 (- (sqrt 2.0)))
(t_6 (* (sqrt (* -0.5 (/ F C))) t_5)))
(if (<= B -8.738524181400431e+158)
t_6
(if (<= B -435814139245693630.0)
t_4
(if (<= B 7.082312261175921e-228)
(/ (* (sqrt (fma 1.0 C t_0)) (- (sqrt t_3))) t_2)
(if (<= B 7.395390810525929e-138)
t_6
(if (<= B 742.5427233374058)
(- (/ (sqrt (* t_1 t_3)) t_2))
(if (<= B 8.49625271680864e+138)
t_4
(* (sqrt (* F (+ C (hypot C B)))) (/ t_5 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 = A + hypot(B, (A - C));
double t_1 = C + t_0;
double t_2 = fma(B, B, (A * (C * -4.0)));
double t_3 = 2.0 * (F * t_2);
double t_4 = (sqrt((2.0 * t_2)) * sqrt(F)) * (-sqrt(t_1) / t_2);
double t_5 = -sqrt(2.0);
double t_6 = sqrt((-0.5 * (F / C))) * t_5;
double tmp;
if (B <= -8.738524181400431e+158) {
tmp = t_6;
} else if (B <= -435814139245693630.0) {
tmp = t_4;
} else if (B <= 7.082312261175921e-228) {
tmp = (sqrt(fma(1.0, C, t_0)) * -sqrt(t_3)) / t_2;
} else if (B <= 7.395390810525929e-138) {
tmp = t_6;
} else if (B <= 742.5427233374058) {
tmp = -(sqrt((t_1 * t_3)) / t_2);
} else if (B <= 8.49625271680864e+138) {
tmp = t_4;
} else {
tmp = sqrt((F * (C + hypot(C, B)))) * (t_5 / 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 = Float64(A + hypot(B, Float64(A - C))) t_1 = Float64(C + t_0) t_2 = fma(B, B, Float64(A * Float64(C * -4.0))) t_3 = Float64(2.0 * Float64(F * t_2)) t_4 = Float64(Float64(sqrt(Float64(2.0 * t_2)) * sqrt(F)) * Float64(Float64(-sqrt(t_1)) / t_2)) t_5 = Float64(-sqrt(2.0)) t_6 = Float64(sqrt(Float64(-0.5 * Float64(F / C))) * t_5) tmp = 0.0 if (B <= -8.738524181400431e+158) tmp = t_6; elseif (B <= -435814139245693630.0) tmp = t_4; elseif (B <= 7.082312261175921e-228) tmp = Float64(Float64(sqrt(fma(1.0, C, t_0)) * Float64(-sqrt(t_3))) / t_2); elseif (B <= 7.395390810525929e-138) tmp = t_6; elseif (B <= 742.5427233374058) tmp = Float64(-Float64(sqrt(Float64(t_1 * t_3)) / t_2)); elseif (B <= 8.49625271680864e+138) tmp = t_4; else tmp = Float64(sqrt(Float64(F * Float64(C + hypot(C, B)))) * Float64(t_5 / 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[(A + N[Sqrt[B ^ 2 + N[(A - C), $MachinePrecision] ^ 2], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(C + t$95$0), $MachinePrecision]}, Block[{t$95$2 = N[(B * B + N[(A * N[(C * -4.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$3 = N[(2.0 * N[(F * t$95$2), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$4 = N[(N[(N[Sqrt[N[(2.0 * t$95$2), $MachinePrecision]], $MachinePrecision] * N[Sqrt[F], $MachinePrecision]), $MachinePrecision] * N[((-N[Sqrt[t$95$1], $MachinePrecision]) / t$95$2), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$5 = (-N[Sqrt[2.0], $MachinePrecision])}, Block[{t$95$6 = N[(N[Sqrt[N[(-0.5 * N[(F / C), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * t$95$5), $MachinePrecision]}, If[LessEqual[B, -8.738524181400431e+158], t$95$6, If[LessEqual[B, -435814139245693630.0], t$95$4, If[LessEqual[B, 7.082312261175921e-228], N[(N[(N[Sqrt[N[(1.0 * C + t$95$0), $MachinePrecision]], $MachinePrecision] * (-N[Sqrt[t$95$3], $MachinePrecision])), $MachinePrecision] / t$95$2), $MachinePrecision], If[LessEqual[B, 7.395390810525929e-138], t$95$6, If[LessEqual[B, 742.5427233374058], (-N[(N[Sqrt[N[(t$95$1 * t$95$3), $MachinePrecision]], $MachinePrecision] / t$95$2), $MachinePrecision]), If[LessEqual[B, 8.49625271680864e+138], t$95$4, N[(N[Sqrt[N[(F * N[(C + N[Sqrt[C ^ 2 + B ^ 2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * N[(t$95$5 / B), $MachinePrecision]), $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 := A + \mathsf{hypot}\left(B, A - C\right)\\
t_1 := C + t_0\\
t_2 := \mathsf{fma}\left(B, B, A \cdot \left(C \cdot -4\right)\right)\\
t_3 := 2 \cdot \left(F \cdot t_2\right)\\
t_4 := \left(\sqrt{2 \cdot t_2} \cdot \sqrt{F}\right) \cdot \frac{-\sqrt{t_1}}{t_2}\\
t_5 := -\sqrt{2}\\
t_6 := \sqrt{-0.5 \cdot \frac{F}{C}} \cdot t_5\\
\mathbf{if}\;B \leq -8.738524181400431 \cdot 10^{+158}:\\
\;\;\;\;t_6\\
\mathbf{elif}\;B \leq -435814139245693630:\\
\;\;\;\;t_4\\
\mathbf{elif}\;B \leq 7.082312261175921 \cdot 10^{-228}:\\
\;\;\;\;\frac{\sqrt{\mathsf{fma}\left(1, C, t_0\right)} \cdot \left(-\sqrt{t_3}\right)}{t_2}\\
\mathbf{elif}\;B \leq 7.395390810525929 \cdot 10^{-138}:\\
\;\;\;\;t_6\\
\mathbf{elif}\;B \leq 742.5427233374058:\\
\;\;\;\;-\frac{\sqrt{t_1 \cdot t_3}}{t_2}\\
\mathbf{elif}\;B \leq 8.49625271680864 \cdot 10^{+138}:\\
\;\;\;\;t_4\\
\mathbf{else}:\\
\;\;\;\;\sqrt{F \cdot \left(C + \mathsf{hypot}\left(C, B\right)\right)} \cdot \frac{t_5}{B}\\
\end{array}



Bits error versus A



Bits error versus B



Bits error versus C



Bits error versus F
if B < -8.73852418140043132e158 or 7.082312261175921e-228 < B < 7.39539081052592889e-138Initial program 59.4
Simplified56.7
Taylor expanded in A around inf 57.1
Simplified57.1
if -8.73852418140043132e158 < B < -435814139245693632 or 742.542723337405846 < B < 8.4962527168086406e138Initial program 45.9
Simplified42.2
Applied egg-rr34.9
Applied egg-rr34.8
Applied egg-rr25.9
if -435814139245693632 < B < 7.082312261175921e-228Initial program 49.6
Simplified44.3
Applied egg-rr40.9
Applied egg-rr40.2
if 7.39539081052592889e-138 < B < 742.542723337405846Initial program 46.5
Simplified41.5
Applied egg-rr36.5
Applied egg-rr41.5
if 8.4962527168086406e138 < B Initial program 63.1
Simplified62.9
Applied egg-rr61.6
Applied egg-rr61.6
Applied egg-rr61.6
Taylor expanded in A around 0 61.3
Simplified34.4
Final simplification39.8
herbie shell --seed 2022153
(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))))