(FPCore (x l t) :precision binary64 (/ (* (sqrt 2.0) t) (sqrt (- (* (/ (+ x 1.0) (- x 1.0)) (+ (* l l) (* 2.0 (* t t)))) (* l l)))))
(FPCore (x l t)
:precision binary64
(let* ((t_1 (/ (* t t) x))
(t_2 (* t (sqrt 2.0)))
(t_3 (* (sqrt 2.0) x))
(t_4 (* t (sqrt (+ (/ 2.0 (- x 1.0)) (* 2.0 (/ x (- x 1.0)))))))
(t_5 (/ t_2 (- t_4)))
(t_6 (* 2.0 (+ (* t t) (/ (* l l) x))))
(t_7 (/ t_2 (sqrt (fma 4.0 t_1 t_6))))
(t_8
(sqrt
(sqrt
(fma
4.0
(/ (* t t) (* x x))
(fma
4.0
t_1
(fma
4.0
(/ (* t t) (pow x 3.0))
(fma
2.0
(/ (* l l) (* x x))
(fma 2.0 (/ (* l l) (pow x 3.0)) t_6)))))))))
(if (<= t -5.617995743088974e+23)
t_5
(if (<= t -1.9442302404542524e-154)
(/ t_2 (* t_8 t_8))
(if (<= t -1.4178637038882688e-186)
t_5
(if (<= t -1.2062010810487966e-222)
(/
t_2
(* l (sqrt (+ (/ 2.0 x) (+ (/ 2.0 (pow x 3.0)) (/ 2.0 (* x x)))))))
(if (<= t 2.7904332859958544e-275)
t_7
(if (<= t 8.418248280997763e-203)
(/
t_2
(fma t (sqrt 2.0) (fma 2.0 (/ t t_3) (/ (* l l) (* t t_3)))))
(if (<= t 5.140420865775031e-43) t_7 (/ t_2 t_4))))))))))double code(double x, double l, double t) {
return (sqrt(2.0) * t) / sqrt(((((x + 1.0) / (x - 1.0)) * ((l * l) + (2.0 * (t * t)))) - (l * l)));
}
double code(double x, double l, double t) {
double t_1 = (t * t) / x;
double t_2 = t * sqrt(2.0);
double t_3 = sqrt(2.0) * x;
double t_4 = t * sqrt(((2.0 / (x - 1.0)) + (2.0 * (x / (x - 1.0)))));
double t_5 = t_2 / -t_4;
double t_6 = 2.0 * ((t * t) + ((l * l) / x));
double t_7 = t_2 / sqrt(fma(4.0, t_1, t_6));
double t_8 = sqrt(sqrt(fma(4.0, ((t * t) / (x * x)), fma(4.0, t_1, fma(4.0, ((t * t) / pow(x, 3.0)), fma(2.0, ((l * l) / (x * x)), fma(2.0, ((l * l) / pow(x, 3.0)), t_6)))))));
double tmp;
if (t <= -5.617995743088974e+23) {
tmp = t_5;
} else if (t <= -1.9442302404542524e-154) {
tmp = t_2 / (t_8 * t_8);
} else if (t <= -1.4178637038882688e-186) {
tmp = t_5;
} else if (t <= -1.2062010810487966e-222) {
tmp = t_2 / (l * sqrt(((2.0 / x) + ((2.0 / pow(x, 3.0)) + (2.0 / (x * x))))));
} else if (t <= 2.7904332859958544e-275) {
tmp = t_7;
} else if (t <= 8.418248280997763e-203) {
tmp = t_2 / fma(t, sqrt(2.0), fma(2.0, (t / t_3), ((l * l) / (t * t_3))));
} else if (t <= 5.140420865775031e-43) {
tmp = t_7;
} else {
tmp = t_2 / t_4;
}
return tmp;
}
function code(x, l, t) return Float64(Float64(sqrt(2.0) * t) / sqrt(Float64(Float64(Float64(Float64(x + 1.0) / Float64(x - 1.0)) * Float64(Float64(l * l) + Float64(2.0 * Float64(t * t)))) - Float64(l * l)))) end
function code(x, l, t) t_1 = Float64(Float64(t * t) / x) t_2 = Float64(t * sqrt(2.0)) t_3 = Float64(sqrt(2.0) * x) t_4 = Float64(t * sqrt(Float64(Float64(2.0 / Float64(x - 1.0)) + Float64(2.0 * Float64(x / Float64(x - 1.0)))))) t_5 = Float64(t_2 / Float64(-t_4)) t_6 = Float64(2.0 * Float64(Float64(t * t) + Float64(Float64(l * l) / x))) t_7 = Float64(t_2 / sqrt(fma(4.0, t_1, t_6))) t_8 = sqrt(sqrt(fma(4.0, Float64(Float64(t * t) / Float64(x * x)), fma(4.0, t_1, fma(4.0, Float64(Float64(t * t) / (x ^ 3.0)), fma(2.0, Float64(Float64(l * l) / Float64(x * x)), fma(2.0, Float64(Float64(l * l) / (x ^ 3.0)), t_6))))))) tmp = 0.0 if (t <= -5.617995743088974e+23) tmp = t_5; elseif (t <= -1.9442302404542524e-154) tmp = Float64(t_2 / Float64(t_8 * t_8)); elseif (t <= -1.4178637038882688e-186) tmp = t_5; elseif (t <= -1.2062010810487966e-222) tmp = Float64(t_2 / Float64(l * sqrt(Float64(Float64(2.0 / x) + Float64(Float64(2.0 / (x ^ 3.0)) + Float64(2.0 / Float64(x * x))))))); elseif (t <= 2.7904332859958544e-275) tmp = t_7; elseif (t <= 8.418248280997763e-203) tmp = Float64(t_2 / fma(t, sqrt(2.0), fma(2.0, Float64(t / t_3), Float64(Float64(l * l) / Float64(t * t_3))))); elseif (t <= 5.140420865775031e-43) tmp = t_7; else tmp = Float64(t_2 / t_4); end return tmp end
code[x_, l_, t_] := N[(N[(N[Sqrt[2.0], $MachinePrecision] * t), $MachinePrecision] / N[Sqrt[N[(N[(N[(N[(x + 1.0), $MachinePrecision] / N[(x - 1.0), $MachinePrecision]), $MachinePrecision] * N[(N[(l * l), $MachinePrecision] + N[(2.0 * N[(t * t), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(l * l), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]
code[x_, l_, t_] := Block[{t$95$1 = N[(N[(t * t), $MachinePrecision] / x), $MachinePrecision]}, Block[{t$95$2 = N[(t * N[Sqrt[2.0], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$3 = N[(N[Sqrt[2.0], $MachinePrecision] * x), $MachinePrecision]}, Block[{t$95$4 = N[(t * N[Sqrt[N[(N[(2.0 / N[(x - 1.0), $MachinePrecision]), $MachinePrecision] + N[(2.0 * N[(x / N[(x - 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$5 = N[(t$95$2 / (-t$95$4)), $MachinePrecision]}, Block[{t$95$6 = N[(2.0 * N[(N[(t * t), $MachinePrecision] + N[(N[(l * l), $MachinePrecision] / x), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$7 = N[(t$95$2 / N[Sqrt[N[(4.0 * t$95$1 + t$95$6), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$8 = N[Sqrt[N[Sqrt[N[(4.0 * N[(N[(t * t), $MachinePrecision] / N[(x * x), $MachinePrecision]), $MachinePrecision] + N[(4.0 * t$95$1 + N[(4.0 * N[(N[(t * t), $MachinePrecision] / N[Power[x, 3.0], $MachinePrecision]), $MachinePrecision] + N[(2.0 * N[(N[(l * l), $MachinePrecision] / N[(x * x), $MachinePrecision]), $MachinePrecision] + N[(2.0 * N[(N[(l * l), $MachinePrecision] / N[Power[x, 3.0], $MachinePrecision]), $MachinePrecision] + t$95$6), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]], $MachinePrecision]}, If[LessEqual[t, -5.617995743088974e+23], t$95$5, If[LessEqual[t, -1.9442302404542524e-154], N[(t$95$2 / N[(t$95$8 * t$95$8), $MachinePrecision]), $MachinePrecision], If[LessEqual[t, -1.4178637038882688e-186], t$95$5, If[LessEqual[t, -1.2062010810487966e-222], N[(t$95$2 / N[(l * N[Sqrt[N[(N[(2.0 / x), $MachinePrecision] + N[(N[(2.0 / N[Power[x, 3.0], $MachinePrecision]), $MachinePrecision] + N[(2.0 / N[(x * x), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[t, 2.7904332859958544e-275], t$95$7, If[LessEqual[t, 8.418248280997763e-203], N[(t$95$2 / N[(t * N[Sqrt[2.0], $MachinePrecision] + N[(2.0 * N[(t / t$95$3), $MachinePrecision] + N[(N[(l * l), $MachinePrecision] / N[(t * t$95$3), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[t, 5.140420865775031e-43], t$95$7, N[(t$95$2 / t$95$4), $MachinePrecision]]]]]]]]]]]]]]]]
\frac{\sqrt{2} \cdot t}{\sqrt{\frac{x + 1}{x - 1} \cdot \left(\ell \cdot \ell + 2 \cdot \left(t \cdot t\right)\right) - \ell \cdot \ell}}
\begin{array}{l}
t_1 := \frac{t \cdot t}{x}\\
t_2 := t \cdot \sqrt{2}\\
t_3 := \sqrt{2} \cdot x\\
t_4 := t \cdot \sqrt{\frac{2}{x - 1} + 2 \cdot \frac{x}{x - 1}}\\
t_5 := \frac{t_2}{-t_4}\\
t_6 := 2 \cdot \left(t \cdot t + \frac{\ell \cdot \ell}{x}\right)\\
t_7 := \frac{t_2}{\sqrt{\mathsf{fma}\left(4, t_1, t_6\right)}}\\
t_8 := \sqrt{\sqrt{\mathsf{fma}\left(4, \frac{t \cdot t}{x \cdot x}, \mathsf{fma}\left(4, t_1, \mathsf{fma}\left(4, \frac{t \cdot t}{{x}^{3}}, \mathsf{fma}\left(2, \frac{\ell \cdot \ell}{x \cdot x}, \mathsf{fma}\left(2, \frac{\ell \cdot \ell}{{x}^{3}}, t_6\right)\right)\right)\right)\right)}}\\
\mathbf{if}\;t \leq -5.617995743088974 \cdot 10^{+23}:\\
\;\;\;\;t_5\\
\mathbf{elif}\;t \leq -1.9442302404542524 \cdot 10^{-154}:\\
\;\;\;\;\frac{t_2}{t_8 \cdot t_8}\\
\mathbf{elif}\;t \leq -1.4178637038882688 \cdot 10^{-186}:\\
\;\;\;\;t_5\\
\mathbf{elif}\;t \leq -1.2062010810487966 \cdot 10^{-222}:\\
\;\;\;\;\frac{t_2}{\ell \cdot \sqrt{\frac{2}{x} + \left(\frac{2}{{x}^{3}} + \frac{2}{x \cdot x}\right)}}\\
\mathbf{elif}\;t \leq 2.7904332859958544 \cdot 10^{-275}:\\
\;\;\;\;t_7\\
\mathbf{elif}\;t \leq 8.418248280997763 \cdot 10^{-203}:\\
\;\;\;\;\frac{t_2}{\mathsf{fma}\left(t, \sqrt{2}, \mathsf{fma}\left(2, \frac{t}{t_3}, \frac{\ell \cdot \ell}{t \cdot t_3}\right)\right)}\\
\mathbf{elif}\;t \leq 5.140420865775031 \cdot 10^{-43}:\\
\;\;\;\;t_7\\
\mathbf{else}:\\
\;\;\;\;\frac{t_2}{t_4}\\
\end{array}



Bits error versus x



Bits error versus l



Bits error versus t
if t < -5.61799574308897423e23 or -1.94423024045425239e-154 < t < -1.4178637038882688e-186Initial program 44.1
Simplified44.1
Taylor expanded in t around -inf 6.3
Simplified6.3
if -5.61799574308897423e23 < t < -1.94423024045425239e-154Initial program 29.4
Simplified29.4
Taylor expanded in x around inf 9.3
Simplified9.3
Applied add-sqr-sqrt_binary649.5
if -1.4178637038882688e-186 < t < -1.2062010810487966e-222Initial program 63.9
Simplified63.9
Taylor expanded in x around inf 43.4
Simplified43.4
Taylor expanded in l around inf 40.0
Simplified40.0
if -1.2062010810487966e-222 < t < 2.79043328599585439e-275 or 8.4182482809977629e-203 < t < 5.1404208657750308e-43Initial program 48.2
Simplified48.2
Taylor expanded in x around inf 21.7
Simplified21.7
if 2.79043328599585439e-275 < t < 8.4182482809977629e-203Initial program 63.4
Simplified63.4
Taylor expanded in x around inf 22.5
Simplified22.5
if 5.1404208657750308e-43 < t Initial program 39.6
Simplified39.6
Taylor expanded in t around inf 6.0
Simplified6.0
Final simplification11.1
herbie shell --seed 2022129
(FPCore (x l t)
:name "Toniolo and Linder, Equation (7)"
:precision binary64
(/ (* (sqrt 2.0) t) (sqrt (- (* (/ (+ x 1.0) (- x 1.0)) (+ (* l l) (* 2.0 (* t t)))) (* l l)))))