
(FPCore (a b) :precision binary64 (/ (exp a) (+ (exp a) (exp b))))
double code(double a, double b) {
return exp(a) / (exp(a) + exp(b));
}
real(8) function code(a, b)
real(8), intent (in) :: a
real(8), intent (in) :: b
code = exp(a) / (exp(a) + exp(b))
end function
public static double code(double a, double b) {
return Math.exp(a) / (Math.exp(a) + Math.exp(b));
}
def code(a, b): return math.exp(a) / (math.exp(a) + math.exp(b))
function code(a, b) return Float64(exp(a) / Float64(exp(a) + exp(b))) end
function tmp = code(a, b) tmp = exp(a) / (exp(a) + exp(b)); end
code[a_, b_] := N[(N[Exp[a], $MachinePrecision] / N[(N[Exp[a], $MachinePrecision] + N[Exp[b], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{e^{a}}{e^{a} + e^{b}}
\end{array}
Sampling outcomes in binary64 precision:
Herbie found 17 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (a b) :precision binary64 (/ (exp a) (+ (exp a) (exp b))))
double code(double a, double b) {
return exp(a) / (exp(a) + exp(b));
}
real(8) function code(a, b)
real(8), intent (in) :: a
real(8), intent (in) :: b
code = exp(a) / (exp(a) + exp(b))
end function
public static double code(double a, double b) {
return Math.exp(a) / (Math.exp(a) + Math.exp(b));
}
def code(a, b): return math.exp(a) / (math.exp(a) + math.exp(b))
function code(a, b) return Float64(exp(a) / Float64(exp(a) + exp(b))) end
function tmp = code(a, b) tmp = exp(a) / (exp(a) + exp(b)); end
code[a_, b_] := N[(N[Exp[a], $MachinePrecision] / N[(N[Exp[a], $MachinePrecision] + N[Exp[b], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{e^{a}}{e^{a} + e^{b}}
\end{array}
(FPCore (a b) :precision binary64 (exp (- (log1p (exp (- b a))))))
double code(double a, double b) {
return exp(-log1p(exp((b - a))));
}
public static double code(double a, double b) {
return Math.exp(-Math.log1p(Math.exp((b - a))));
}
def code(a, b): return math.exp(-math.log1p(math.exp((b - a))))
function code(a, b) return exp(Float64(-log1p(exp(Float64(b - a))))) end
code[a_, b_] := N[Exp[(-N[Log[1 + N[Exp[N[(b - a), $MachinePrecision]], $MachinePrecision]], $MachinePrecision])], $MachinePrecision]
\begin{array}{l}
\\
e^{-\mathsf{log1p}\left(e^{b - a}\right)}
\end{array}
Initial program 100.0%
*-lft-identity100.0%
associate-*l/100.0%
associate-/r/100.0%
remove-double-neg100.0%
unsub-neg100.0%
div-sub71.8%
*-lft-identity71.8%
associate-*l/71.8%
lft-mult-inverse100.0%
sub-neg100.0%
distribute-frac-neg100.0%
remove-double-neg100.0%
div-exp100.0%
Simplified100.0%
add-exp-log100.0%
log-rec100.0%
log1p-define100.0%
Applied egg-rr100.0%
(FPCore (a b)
:precision binary64
(if (<= a -1e+103)
(/ 1.0 (+ 2.0 (* a (+ (* a (* a -0.16666666666666666)) -1.0))))
(if (<= a -3100.0)
(/ 1.0 (+ 1.0 (/ (+ (/ (+ (/ (+ (/ -1.0 b) -1.0) b) -1.0) b) -1.0) b)))
(/ 1.0 (+ 1.0 (exp b))))))
double code(double a, double b) {
double tmp;
if (a <= -1e+103) {
tmp = 1.0 / (2.0 + (a * ((a * (a * -0.16666666666666666)) + -1.0)));
} else if (a <= -3100.0) {
tmp = 1.0 / (1.0 + (((((((-1.0 / b) + -1.0) / b) + -1.0) / b) + -1.0) / b));
} else {
tmp = 1.0 / (1.0 + exp(b));
}
return tmp;
}
real(8) function code(a, b)
real(8), intent (in) :: a
real(8), intent (in) :: b
real(8) :: tmp
if (a <= (-1d+103)) then
tmp = 1.0d0 / (2.0d0 + (a * ((a * (a * (-0.16666666666666666d0))) + (-1.0d0))))
else if (a <= (-3100.0d0)) then
tmp = 1.0d0 / (1.0d0 + ((((((((-1.0d0) / b) + (-1.0d0)) / b) + (-1.0d0)) / b) + (-1.0d0)) / b))
else
tmp = 1.0d0 / (1.0d0 + exp(b))
end if
code = tmp
end function
public static double code(double a, double b) {
double tmp;
if (a <= -1e+103) {
tmp = 1.0 / (2.0 + (a * ((a * (a * -0.16666666666666666)) + -1.0)));
} else if (a <= -3100.0) {
tmp = 1.0 / (1.0 + (((((((-1.0 / b) + -1.0) / b) + -1.0) / b) + -1.0) / b));
} else {
tmp = 1.0 / (1.0 + Math.exp(b));
}
return tmp;
}
def code(a, b): tmp = 0 if a <= -1e+103: tmp = 1.0 / (2.0 + (a * ((a * (a * -0.16666666666666666)) + -1.0))) elif a <= -3100.0: tmp = 1.0 / (1.0 + (((((((-1.0 / b) + -1.0) / b) + -1.0) / b) + -1.0) / b)) else: tmp = 1.0 / (1.0 + math.exp(b)) return tmp
function code(a, b) tmp = 0.0 if (a <= -1e+103) tmp = Float64(1.0 / Float64(2.0 + Float64(a * Float64(Float64(a * Float64(a * -0.16666666666666666)) + -1.0)))); elseif (a <= -3100.0) tmp = Float64(1.0 / Float64(1.0 + Float64(Float64(Float64(Float64(Float64(Float64(Float64(-1.0 / b) + -1.0) / b) + -1.0) / b) + -1.0) / b))); else tmp = Float64(1.0 / Float64(1.0 + exp(b))); end return tmp end
function tmp_2 = code(a, b) tmp = 0.0; if (a <= -1e+103) tmp = 1.0 / (2.0 + (a * ((a * (a * -0.16666666666666666)) + -1.0))); elseif (a <= -3100.0) tmp = 1.0 / (1.0 + (((((((-1.0 / b) + -1.0) / b) + -1.0) / b) + -1.0) / b)); else tmp = 1.0 / (1.0 + exp(b)); end tmp_2 = tmp; end
code[a_, b_] := If[LessEqual[a, -1e+103], N[(1.0 / N[(2.0 + N[(a * N[(N[(a * N[(a * -0.16666666666666666), $MachinePrecision]), $MachinePrecision] + -1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[a, -3100.0], N[(1.0 / N[(1.0 + N[(N[(N[(N[(N[(N[(N[(-1.0 / b), $MachinePrecision] + -1.0), $MachinePrecision] / b), $MachinePrecision] + -1.0), $MachinePrecision] / b), $MachinePrecision] + -1.0), $MachinePrecision] / b), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(1.0 / N[(1.0 + N[Exp[b], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;a \leq -1 \cdot 10^{+103}:\\
\;\;\;\;\frac{1}{2 + a \cdot \left(a \cdot \left(a \cdot -0.16666666666666666\right) + -1\right)}\\
\mathbf{elif}\;a \leq -3100:\\
\;\;\;\;\frac{1}{1 + \frac{\frac{\frac{\frac{-1}{b} + -1}{b} + -1}{b} + -1}{b}}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{1 + e^{b}}\\
\end{array}
\end{array}
if a < -1e103Initial program 100.0%
*-lft-identity100.0%
associate-*l/100.0%
associate-/r/100.0%
remove-double-neg100.0%
unsub-neg100.0%
div-sub0.0%
*-lft-identity0.0%
associate-*l/0.0%
lft-mult-inverse100.0%
sub-neg100.0%
distribute-frac-neg100.0%
remove-double-neg100.0%
div-exp100.0%
Simplified100.0%
Taylor expanded in b around 0 100.0%
Taylor expanded in a around 0 100.0%
Taylor expanded in a around inf 100.0%
*-commutative100.0%
Simplified100.0%
if -1e103 < a < -3100Initial program 100.0%
*-lft-identity100.0%
associate-*l/100.0%
associate-/r/100.0%
remove-double-neg100.0%
unsub-neg100.0%
div-sub0.0%
*-lft-identity0.0%
associate-*l/0.0%
lft-mult-inverse100.0%
sub-neg100.0%
distribute-frac-neg100.0%
remove-double-neg100.0%
div-exp100.0%
Simplified100.0%
exp-diff100.0%
clear-num100.0%
Applied egg-rr100.0%
Taylor expanded in a around 0 28.6%
rec-exp28.6%
Simplified28.6%
Taylor expanded in b around 0 3.1%
mul-1-neg3.1%
unsub-neg3.1%
Simplified3.1%
Taylor expanded in b around inf 54.5%
Simplified54.5%
if -3100 < a Initial program 99.9%
*-lft-identity99.9%
associate-*l/99.9%
associate-/r/99.9%
remove-double-neg99.9%
unsub-neg99.9%
div-sub99.4%
*-lft-identity99.4%
associate-*l/99.4%
lft-mult-inverse99.9%
sub-neg99.9%
distribute-frac-neg99.9%
remove-double-neg99.9%
div-exp99.9%
Simplified99.9%
Taylor expanded in a around 0 99.5%
Final simplification96.3%
(FPCore (a b) :precision binary64 (if (<= a -8000.0) (/ 1.0 (+ 1.0 (exp (- a)))) (/ 1.0 (+ 1.0 (exp b)))))
double code(double a, double b) {
double tmp;
if (a <= -8000.0) {
tmp = 1.0 / (1.0 + exp(-a));
} else {
tmp = 1.0 / (1.0 + exp(b));
}
return tmp;
}
real(8) function code(a, b)
real(8), intent (in) :: a
real(8), intent (in) :: b
real(8) :: tmp
if (a <= (-8000.0d0)) then
tmp = 1.0d0 / (1.0d0 + exp(-a))
else
tmp = 1.0d0 / (1.0d0 + exp(b))
end if
code = tmp
end function
public static double code(double a, double b) {
double tmp;
if (a <= -8000.0) {
tmp = 1.0 / (1.0 + Math.exp(-a));
} else {
tmp = 1.0 / (1.0 + Math.exp(b));
}
return tmp;
}
def code(a, b): tmp = 0 if a <= -8000.0: tmp = 1.0 / (1.0 + math.exp(-a)) else: tmp = 1.0 / (1.0 + math.exp(b)) return tmp
function code(a, b) tmp = 0.0 if (a <= -8000.0) tmp = Float64(1.0 / Float64(1.0 + exp(Float64(-a)))); else tmp = Float64(1.0 / Float64(1.0 + exp(b))); end return tmp end
function tmp_2 = code(a, b) tmp = 0.0; if (a <= -8000.0) tmp = 1.0 / (1.0 + exp(-a)); else tmp = 1.0 / (1.0 + exp(b)); end tmp_2 = tmp; end
code[a_, b_] := If[LessEqual[a, -8000.0], N[(1.0 / N[(1.0 + N[Exp[(-a)], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(1.0 / N[(1.0 + N[Exp[b], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;a \leq -8000:\\
\;\;\;\;\frac{1}{1 + e^{-a}}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{1 + e^{b}}\\
\end{array}
\end{array}
if a < -8e3Initial program 100.0%
*-lft-identity100.0%
associate-*l/100.0%
associate-/r/100.0%
remove-double-neg100.0%
unsub-neg100.0%
div-sub0.0%
*-lft-identity0.0%
associate-*l/0.0%
lft-mult-inverse100.0%
sub-neg100.0%
distribute-frac-neg100.0%
remove-double-neg100.0%
div-exp100.0%
Simplified100.0%
Taylor expanded in b around 0 100.0%
if -8e3 < a Initial program 99.9%
*-lft-identity99.9%
associate-*l/99.9%
associate-/r/99.9%
remove-double-neg99.9%
unsub-neg99.9%
div-sub99.4%
*-lft-identity99.4%
associate-*l/99.4%
lft-mult-inverse99.9%
sub-neg99.9%
distribute-frac-neg99.9%
remove-double-neg99.9%
div-exp99.9%
Simplified99.9%
Taylor expanded in a around 0 99.5%
(FPCore (a b) :precision binary64 (/ 1.0 (+ (exp (- b a)) 1.0)))
double code(double a, double b) {
return 1.0 / (exp((b - a)) + 1.0);
}
real(8) function code(a, b)
real(8), intent (in) :: a
real(8), intent (in) :: b
code = 1.0d0 / (exp((b - a)) + 1.0d0)
end function
public static double code(double a, double b) {
return 1.0 / (Math.exp((b - a)) + 1.0);
}
def code(a, b): return 1.0 / (math.exp((b - a)) + 1.0)
function code(a, b) return Float64(1.0 / Float64(exp(Float64(b - a)) + 1.0)) end
function tmp = code(a, b) tmp = 1.0 / (exp((b - a)) + 1.0); end
code[a_, b_] := N[(1.0 / N[(N[Exp[N[(b - a), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{1}{e^{b - a} + 1}
\end{array}
Initial program 100.0%
*-lft-identity100.0%
associate-*l/100.0%
associate-/r/100.0%
remove-double-neg100.0%
unsub-neg100.0%
div-sub71.8%
*-lft-identity71.8%
associate-*l/71.8%
lft-mult-inverse100.0%
sub-neg100.0%
distribute-frac-neg100.0%
remove-double-neg100.0%
div-exp100.0%
Simplified100.0%
Final simplification100.0%
(FPCore (a b)
:precision binary64
(if (<= b -4.6e-16)
(/
1.0
(+
1.0
(/ 1.0 (+ 1.0 (* b (+ (* b (+ 0.5 (* b -0.16666666666666666))) -1.0))))))
(if (<= b 2.45e+67)
(/ 1.0 (+ 2.0 (* a (+ (* a (+ (* a -0.16666666666666666) 0.5)) -1.0))))
(/ 1.0 (+ 2.0 (* b (+ 1.0 (* b (+ b 1.0)))))))))
double code(double a, double b) {
double tmp;
if (b <= -4.6e-16) {
tmp = 1.0 / (1.0 + (1.0 / (1.0 + (b * ((b * (0.5 + (b * -0.16666666666666666))) + -1.0)))));
} else if (b <= 2.45e+67) {
tmp = 1.0 / (2.0 + (a * ((a * ((a * -0.16666666666666666) + 0.5)) + -1.0)));
} else {
tmp = 1.0 / (2.0 + (b * (1.0 + (b * (b + 1.0)))));
}
return tmp;
}
real(8) function code(a, b)
real(8), intent (in) :: a
real(8), intent (in) :: b
real(8) :: tmp
if (b <= (-4.6d-16)) then
tmp = 1.0d0 / (1.0d0 + (1.0d0 / (1.0d0 + (b * ((b * (0.5d0 + (b * (-0.16666666666666666d0)))) + (-1.0d0))))))
else if (b <= 2.45d+67) then
tmp = 1.0d0 / (2.0d0 + (a * ((a * ((a * (-0.16666666666666666d0)) + 0.5d0)) + (-1.0d0))))
else
tmp = 1.0d0 / (2.0d0 + (b * (1.0d0 + (b * (b + 1.0d0)))))
end if
code = tmp
end function
public static double code(double a, double b) {
double tmp;
if (b <= -4.6e-16) {
tmp = 1.0 / (1.0 + (1.0 / (1.0 + (b * ((b * (0.5 + (b * -0.16666666666666666))) + -1.0)))));
} else if (b <= 2.45e+67) {
tmp = 1.0 / (2.0 + (a * ((a * ((a * -0.16666666666666666) + 0.5)) + -1.0)));
} else {
tmp = 1.0 / (2.0 + (b * (1.0 + (b * (b + 1.0)))));
}
return tmp;
}
def code(a, b): tmp = 0 if b <= -4.6e-16: tmp = 1.0 / (1.0 + (1.0 / (1.0 + (b * ((b * (0.5 + (b * -0.16666666666666666))) + -1.0))))) elif b <= 2.45e+67: tmp = 1.0 / (2.0 + (a * ((a * ((a * -0.16666666666666666) + 0.5)) + -1.0))) else: tmp = 1.0 / (2.0 + (b * (1.0 + (b * (b + 1.0))))) return tmp
function code(a, b) tmp = 0.0 if (b <= -4.6e-16) tmp = Float64(1.0 / Float64(1.0 + Float64(1.0 / Float64(1.0 + Float64(b * Float64(Float64(b * Float64(0.5 + Float64(b * -0.16666666666666666))) + -1.0)))))); elseif (b <= 2.45e+67) tmp = Float64(1.0 / Float64(2.0 + Float64(a * Float64(Float64(a * Float64(Float64(a * -0.16666666666666666) + 0.5)) + -1.0)))); else tmp = Float64(1.0 / Float64(2.0 + Float64(b * Float64(1.0 + Float64(b * Float64(b + 1.0)))))); end return tmp end
function tmp_2 = code(a, b) tmp = 0.0; if (b <= -4.6e-16) tmp = 1.0 / (1.0 + (1.0 / (1.0 + (b * ((b * (0.5 + (b * -0.16666666666666666))) + -1.0))))); elseif (b <= 2.45e+67) tmp = 1.0 / (2.0 + (a * ((a * ((a * -0.16666666666666666) + 0.5)) + -1.0))); else tmp = 1.0 / (2.0 + (b * (1.0 + (b * (b + 1.0))))); end tmp_2 = tmp; end
code[a_, b_] := If[LessEqual[b, -4.6e-16], N[(1.0 / N[(1.0 + N[(1.0 / N[(1.0 + N[(b * N[(N[(b * N[(0.5 + N[(b * -0.16666666666666666), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + -1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[b, 2.45e+67], N[(1.0 / N[(2.0 + N[(a * N[(N[(a * N[(N[(a * -0.16666666666666666), $MachinePrecision] + 0.5), $MachinePrecision]), $MachinePrecision] + -1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(1.0 / N[(2.0 + N[(b * N[(1.0 + N[(b * N[(b + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;b \leq -4.6 \cdot 10^{-16}:\\
\;\;\;\;\frac{1}{1 + \frac{1}{1 + b \cdot \left(b \cdot \left(0.5 + b \cdot -0.16666666666666666\right) + -1\right)}}\\
\mathbf{elif}\;b \leq 2.45 \cdot 10^{+67}:\\
\;\;\;\;\frac{1}{2 + a \cdot \left(a \cdot \left(a \cdot -0.16666666666666666 + 0.5\right) + -1\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{2 + b \cdot \left(1 + b \cdot \left(b + 1\right)\right)}\\
\end{array}
\end{array}
if b < -4.5999999999999998e-16Initial program 100.0%
*-lft-identity100.0%
associate-*l/100.0%
associate-/r/100.0%
remove-double-neg100.0%
unsub-neg100.0%
div-sub98.3%
*-lft-identity98.3%
associate-*l/98.3%
lft-mult-inverse100.0%
sub-neg100.0%
distribute-frac-neg100.0%
remove-double-neg100.0%
div-exp100.0%
Simplified100.0%
exp-diff100.0%
clear-num100.0%
Applied egg-rr100.0%
Taylor expanded in a around 0 98.4%
rec-exp98.4%
Simplified98.4%
Taylor expanded in b around 0 96.8%
if -4.5999999999999998e-16 < b < 2.44999999999999995e67Initial program 99.9%
*-lft-identity99.9%
associate-*l/99.9%
associate-/r/99.9%
remove-double-neg99.9%
unsub-neg99.9%
div-sub64.8%
*-lft-identity64.8%
associate-*l/64.8%
lft-mult-inverse99.9%
sub-neg99.9%
distribute-frac-neg99.9%
remove-double-neg99.9%
div-exp99.9%
Simplified99.9%
Taylor expanded in b around 0 90.6%
Taylor expanded in a around 0 80.3%
if 2.44999999999999995e67 < b Initial program 100.0%
*-lft-identity100.0%
associate-*l/100.0%
associate-/r/100.0%
remove-double-neg100.0%
unsub-neg100.0%
div-sub60.4%
*-lft-identity60.4%
associate-*l/60.4%
lft-mult-inverse100.0%
sub-neg100.0%
distribute-frac-neg100.0%
remove-double-neg100.0%
div-exp100.0%
Simplified100.0%
exp-diff100.0%
clear-num100.0%
Applied egg-rr100.0%
Taylor expanded in a around 0 100.0%
rec-exp100.0%
Simplified100.0%
Taylor expanded in b around 0 3.1%
mul-1-neg3.1%
unsub-neg3.1%
Simplified3.1%
Taylor expanded in b around 0 96.1%
Final simplification87.2%
(FPCore (a b)
:precision binary64
(if (<= b -4.6e-16)
(/ 1.0 (+ 1.0 (/ 1.0 (+ 1.0 (* b (+ (* b 0.5) -1.0))))))
(if (<= b 2.45e+67)
(/ 1.0 (+ 2.0 (* a (+ (* a (+ (* a -0.16666666666666666) 0.5)) -1.0))))
(/ 1.0 (+ 2.0 (* b (+ 1.0 (* b (+ b 1.0)))))))))
double code(double a, double b) {
double tmp;
if (b <= -4.6e-16) {
tmp = 1.0 / (1.0 + (1.0 / (1.0 + (b * ((b * 0.5) + -1.0)))));
} else if (b <= 2.45e+67) {
tmp = 1.0 / (2.0 + (a * ((a * ((a * -0.16666666666666666) + 0.5)) + -1.0)));
} else {
tmp = 1.0 / (2.0 + (b * (1.0 + (b * (b + 1.0)))));
}
return tmp;
}
real(8) function code(a, b)
real(8), intent (in) :: a
real(8), intent (in) :: b
real(8) :: tmp
if (b <= (-4.6d-16)) then
tmp = 1.0d0 / (1.0d0 + (1.0d0 / (1.0d0 + (b * ((b * 0.5d0) + (-1.0d0))))))
else if (b <= 2.45d+67) then
tmp = 1.0d0 / (2.0d0 + (a * ((a * ((a * (-0.16666666666666666d0)) + 0.5d0)) + (-1.0d0))))
else
tmp = 1.0d0 / (2.0d0 + (b * (1.0d0 + (b * (b + 1.0d0)))))
end if
code = tmp
end function
public static double code(double a, double b) {
double tmp;
if (b <= -4.6e-16) {
tmp = 1.0 / (1.0 + (1.0 / (1.0 + (b * ((b * 0.5) + -1.0)))));
} else if (b <= 2.45e+67) {
tmp = 1.0 / (2.0 + (a * ((a * ((a * -0.16666666666666666) + 0.5)) + -1.0)));
} else {
tmp = 1.0 / (2.0 + (b * (1.0 + (b * (b + 1.0)))));
}
return tmp;
}
def code(a, b): tmp = 0 if b <= -4.6e-16: tmp = 1.0 / (1.0 + (1.0 / (1.0 + (b * ((b * 0.5) + -1.0))))) elif b <= 2.45e+67: tmp = 1.0 / (2.0 + (a * ((a * ((a * -0.16666666666666666) + 0.5)) + -1.0))) else: tmp = 1.0 / (2.0 + (b * (1.0 + (b * (b + 1.0))))) return tmp
function code(a, b) tmp = 0.0 if (b <= -4.6e-16) tmp = Float64(1.0 / Float64(1.0 + Float64(1.0 / Float64(1.0 + Float64(b * Float64(Float64(b * 0.5) + -1.0)))))); elseif (b <= 2.45e+67) tmp = Float64(1.0 / Float64(2.0 + Float64(a * Float64(Float64(a * Float64(Float64(a * -0.16666666666666666) + 0.5)) + -1.0)))); else tmp = Float64(1.0 / Float64(2.0 + Float64(b * Float64(1.0 + Float64(b * Float64(b + 1.0)))))); end return tmp end
function tmp_2 = code(a, b) tmp = 0.0; if (b <= -4.6e-16) tmp = 1.0 / (1.0 + (1.0 / (1.0 + (b * ((b * 0.5) + -1.0))))); elseif (b <= 2.45e+67) tmp = 1.0 / (2.0 + (a * ((a * ((a * -0.16666666666666666) + 0.5)) + -1.0))); else tmp = 1.0 / (2.0 + (b * (1.0 + (b * (b + 1.0))))); end tmp_2 = tmp; end
code[a_, b_] := If[LessEqual[b, -4.6e-16], N[(1.0 / N[(1.0 + N[(1.0 / N[(1.0 + N[(b * N[(N[(b * 0.5), $MachinePrecision] + -1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[b, 2.45e+67], N[(1.0 / N[(2.0 + N[(a * N[(N[(a * N[(N[(a * -0.16666666666666666), $MachinePrecision] + 0.5), $MachinePrecision]), $MachinePrecision] + -1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(1.0 / N[(2.0 + N[(b * N[(1.0 + N[(b * N[(b + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;b \leq -4.6 \cdot 10^{-16}:\\
\;\;\;\;\frac{1}{1 + \frac{1}{1 + b \cdot \left(b \cdot 0.5 + -1\right)}}\\
\mathbf{elif}\;b \leq 2.45 \cdot 10^{+67}:\\
\;\;\;\;\frac{1}{2 + a \cdot \left(a \cdot \left(a \cdot -0.16666666666666666 + 0.5\right) + -1\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{2 + b \cdot \left(1 + b \cdot \left(b + 1\right)\right)}\\
\end{array}
\end{array}
if b < -4.5999999999999998e-16Initial program 100.0%
*-lft-identity100.0%
associate-*l/100.0%
associate-/r/100.0%
remove-double-neg100.0%
unsub-neg100.0%
div-sub98.3%
*-lft-identity98.3%
associate-*l/98.3%
lft-mult-inverse100.0%
sub-neg100.0%
distribute-frac-neg100.0%
remove-double-neg100.0%
div-exp100.0%
Simplified100.0%
exp-diff100.0%
clear-num100.0%
Applied egg-rr100.0%
Taylor expanded in a around 0 98.4%
rec-exp98.4%
Simplified98.4%
Taylor expanded in b around 0 96.5%
if -4.5999999999999998e-16 < b < 2.44999999999999995e67Initial program 99.9%
*-lft-identity99.9%
associate-*l/99.9%
associate-/r/99.9%
remove-double-neg99.9%
unsub-neg99.9%
div-sub64.8%
*-lft-identity64.8%
associate-*l/64.8%
lft-mult-inverse99.9%
sub-neg99.9%
distribute-frac-neg99.9%
remove-double-neg99.9%
div-exp99.9%
Simplified99.9%
Taylor expanded in b around 0 90.6%
Taylor expanded in a around 0 80.3%
if 2.44999999999999995e67 < b Initial program 100.0%
*-lft-identity100.0%
associate-*l/100.0%
associate-/r/100.0%
remove-double-neg100.0%
unsub-neg100.0%
div-sub60.4%
*-lft-identity60.4%
associate-*l/60.4%
lft-mult-inverse100.0%
sub-neg100.0%
distribute-frac-neg100.0%
remove-double-neg100.0%
div-exp100.0%
Simplified100.0%
exp-diff100.0%
clear-num100.0%
Applied egg-rr100.0%
Taylor expanded in a around 0 100.0%
rec-exp100.0%
Simplified100.0%
Taylor expanded in b around 0 3.1%
mul-1-neg3.1%
unsub-neg3.1%
Simplified3.1%
Taylor expanded in b around 0 96.1%
Final simplification87.1%
(FPCore (a b)
:precision binary64
(if (<= b -4.6e-16)
(/ 1.0 (+ 1.0 (/ 1.0 (+ 1.0 (* b (+ (* b 0.5) -1.0))))))
(if (<= b 2.45e+67)
(/ 1.0 (+ 2.0 (* a (+ (* a (* a -0.16666666666666666)) -1.0))))
(/ 1.0 (+ 2.0 (* b (+ 1.0 (* b (+ b 1.0)))))))))
double code(double a, double b) {
double tmp;
if (b <= -4.6e-16) {
tmp = 1.0 / (1.0 + (1.0 / (1.0 + (b * ((b * 0.5) + -1.0)))));
} else if (b <= 2.45e+67) {
tmp = 1.0 / (2.0 + (a * ((a * (a * -0.16666666666666666)) + -1.0)));
} else {
tmp = 1.0 / (2.0 + (b * (1.0 + (b * (b + 1.0)))));
}
return tmp;
}
real(8) function code(a, b)
real(8), intent (in) :: a
real(8), intent (in) :: b
real(8) :: tmp
if (b <= (-4.6d-16)) then
tmp = 1.0d0 / (1.0d0 + (1.0d0 / (1.0d0 + (b * ((b * 0.5d0) + (-1.0d0))))))
else if (b <= 2.45d+67) then
tmp = 1.0d0 / (2.0d0 + (a * ((a * (a * (-0.16666666666666666d0))) + (-1.0d0))))
else
tmp = 1.0d0 / (2.0d0 + (b * (1.0d0 + (b * (b + 1.0d0)))))
end if
code = tmp
end function
public static double code(double a, double b) {
double tmp;
if (b <= -4.6e-16) {
tmp = 1.0 / (1.0 + (1.0 / (1.0 + (b * ((b * 0.5) + -1.0)))));
} else if (b <= 2.45e+67) {
tmp = 1.0 / (2.0 + (a * ((a * (a * -0.16666666666666666)) + -1.0)));
} else {
tmp = 1.0 / (2.0 + (b * (1.0 + (b * (b + 1.0)))));
}
return tmp;
}
def code(a, b): tmp = 0 if b <= -4.6e-16: tmp = 1.0 / (1.0 + (1.0 / (1.0 + (b * ((b * 0.5) + -1.0))))) elif b <= 2.45e+67: tmp = 1.0 / (2.0 + (a * ((a * (a * -0.16666666666666666)) + -1.0))) else: tmp = 1.0 / (2.0 + (b * (1.0 + (b * (b + 1.0))))) return tmp
function code(a, b) tmp = 0.0 if (b <= -4.6e-16) tmp = Float64(1.0 / Float64(1.0 + Float64(1.0 / Float64(1.0 + Float64(b * Float64(Float64(b * 0.5) + -1.0)))))); elseif (b <= 2.45e+67) tmp = Float64(1.0 / Float64(2.0 + Float64(a * Float64(Float64(a * Float64(a * -0.16666666666666666)) + -1.0)))); else tmp = Float64(1.0 / Float64(2.0 + Float64(b * Float64(1.0 + Float64(b * Float64(b + 1.0)))))); end return tmp end
function tmp_2 = code(a, b) tmp = 0.0; if (b <= -4.6e-16) tmp = 1.0 / (1.0 + (1.0 / (1.0 + (b * ((b * 0.5) + -1.0))))); elseif (b <= 2.45e+67) tmp = 1.0 / (2.0 + (a * ((a * (a * -0.16666666666666666)) + -1.0))); else tmp = 1.0 / (2.0 + (b * (1.0 + (b * (b + 1.0))))); end tmp_2 = tmp; end
code[a_, b_] := If[LessEqual[b, -4.6e-16], N[(1.0 / N[(1.0 + N[(1.0 / N[(1.0 + N[(b * N[(N[(b * 0.5), $MachinePrecision] + -1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[b, 2.45e+67], N[(1.0 / N[(2.0 + N[(a * N[(N[(a * N[(a * -0.16666666666666666), $MachinePrecision]), $MachinePrecision] + -1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(1.0 / N[(2.0 + N[(b * N[(1.0 + N[(b * N[(b + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;b \leq -4.6 \cdot 10^{-16}:\\
\;\;\;\;\frac{1}{1 + \frac{1}{1 + b \cdot \left(b \cdot 0.5 + -1\right)}}\\
\mathbf{elif}\;b \leq 2.45 \cdot 10^{+67}:\\
\;\;\;\;\frac{1}{2 + a \cdot \left(a \cdot \left(a \cdot -0.16666666666666666\right) + -1\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{2 + b \cdot \left(1 + b \cdot \left(b + 1\right)\right)}\\
\end{array}
\end{array}
if b < -4.5999999999999998e-16Initial program 100.0%
*-lft-identity100.0%
associate-*l/100.0%
associate-/r/100.0%
remove-double-neg100.0%
unsub-neg100.0%
div-sub98.3%
*-lft-identity98.3%
associate-*l/98.3%
lft-mult-inverse100.0%
sub-neg100.0%
distribute-frac-neg100.0%
remove-double-neg100.0%
div-exp100.0%
Simplified100.0%
exp-diff100.0%
clear-num100.0%
Applied egg-rr100.0%
Taylor expanded in a around 0 98.4%
rec-exp98.4%
Simplified98.4%
Taylor expanded in b around 0 96.5%
if -4.5999999999999998e-16 < b < 2.44999999999999995e67Initial program 99.9%
*-lft-identity99.9%
associate-*l/99.9%
associate-/r/99.9%
remove-double-neg99.9%
unsub-neg99.9%
div-sub64.8%
*-lft-identity64.8%
associate-*l/64.8%
lft-mult-inverse99.9%
sub-neg99.9%
distribute-frac-neg99.9%
remove-double-neg99.9%
div-exp99.9%
Simplified99.9%
Taylor expanded in b around 0 90.6%
Taylor expanded in a around 0 80.3%
Taylor expanded in a around inf 80.1%
*-commutative80.1%
Simplified80.1%
if 2.44999999999999995e67 < b Initial program 100.0%
*-lft-identity100.0%
associate-*l/100.0%
associate-/r/100.0%
remove-double-neg100.0%
unsub-neg100.0%
div-sub60.4%
*-lft-identity60.4%
associate-*l/60.4%
lft-mult-inverse100.0%
sub-neg100.0%
distribute-frac-neg100.0%
remove-double-neg100.0%
div-exp100.0%
Simplified100.0%
exp-diff100.0%
clear-num100.0%
Applied egg-rr100.0%
Taylor expanded in a around 0 100.0%
rec-exp100.0%
Simplified100.0%
Taylor expanded in b around 0 3.1%
mul-1-neg3.1%
unsub-neg3.1%
Simplified3.1%
Taylor expanded in b around 0 96.1%
Final simplification87.0%
(FPCore (a b)
:precision binary64
(if (<= b -11.0)
1.0
(if (<= b 2.45e+67)
(/ 1.0 (+ 2.0 (* a (+ (* a (* a -0.16666666666666666)) -1.0))))
(/ 1.0 (+ 2.0 (* b (+ 1.0 (* b (+ b 1.0)))))))))
double code(double a, double b) {
double tmp;
if (b <= -11.0) {
tmp = 1.0;
} else if (b <= 2.45e+67) {
tmp = 1.0 / (2.0 + (a * ((a * (a * -0.16666666666666666)) + -1.0)));
} else {
tmp = 1.0 / (2.0 + (b * (1.0 + (b * (b + 1.0)))));
}
return tmp;
}
real(8) function code(a, b)
real(8), intent (in) :: a
real(8), intent (in) :: b
real(8) :: tmp
if (b <= (-11.0d0)) then
tmp = 1.0d0
else if (b <= 2.45d+67) then
tmp = 1.0d0 / (2.0d0 + (a * ((a * (a * (-0.16666666666666666d0))) + (-1.0d0))))
else
tmp = 1.0d0 / (2.0d0 + (b * (1.0d0 + (b * (b + 1.0d0)))))
end if
code = tmp
end function
public static double code(double a, double b) {
double tmp;
if (b <= -11.0) {
tmp = 1.0;
} else if (b <= 2.45e+67) {
tmp = 1.0 / (2.0 + (a * ((a * (a * -0.16666666666666666)) + -1.0)));
} else {
tmp = 1.0 / (2.0 + (b * (1.0 + (b * (b + 1.0)))));
}
return tmp;
}
def code(a, b): tmp = 0 if b <= -11.0: tmp = 1.0 elif b <= 2.45e+67: tmp = 1.0 / (2.0 + (a * ((a * (a * -0.16666666666666666)) + -1.0))) else: tmp = 1.0 / (2.0 + (b * (1.0 + (b * (b + 1.0))))) return tmp
function code(a, b) tmp = 0.0 if (b <= -11.0) tmp = 1.0; elseif (b <= 2.45e+67) tmp = Float64(1.0 / Float64(2.0 + Float64(a * Float64(Float64(a * Float64(a * -0.16666666666666666)) + -1.0)))); else tmp = Float64(1.0 / Float64(2.0 + Float64(b * Float64(1.0 + Float64(b * Float64(b + 1.0)))))); end return tmp end
function tmp_2 = code(a, b) tmp = 0.0; if (b <= -11.0) tmp = 1.0; elseif (b <= 2.45e+67) tmp = 1.0 / (2.0 + (a * ((a * (a * -0.16666666666666666)) + -1.0))); else tmp = 1.0 / (2.0 + (b * (1.0 + (b * (b + 1.0))))); end tmp_2 = tmp; end
code[a_, b_] := If[LessEqual[b, -11.0], 1.0, If[LessEqual[b, 2.45e+67], N[(1.0 / N[(2.0 + N[(a * N[(N[(a * N[(a * -0.16666666666666666), $MachinePrecision]), $MachinePrecision] + -1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(1.0 / N[(2.0 + N[(b * N[(1.0 + N[(b * N[(b + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;b \leq -11:\\
\;\;\;\;1\\
\mathbf{elif}\;b \leq 2.45 \cdot 10^{+67}:\\
\;\;\;\;\frac{1}{2 + a \cdot \left(a \cdot \left(a \cdot -0.16666666666666666\right) + -1\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{2 + b \cdot \left(1 + b \cdot \left(b + 1\right)\right)}\\
\end{array}
\end{array}
if b < -11Initial program 100.0%
*-lft-identity100.0%
associate-*l/100.0%
associate-/r/100.0%
remove-double-neg100.0%
unsub-neg100.0%
div-sub100.0%
*-lft-identity100.0%
associate-*l/100.0%
lft-mult-inverse100.0%
sub-neg100.0%
distribute-frac-neg100.0%
remove-double-neg100.0%
div-exp100.0%
Simplified100.0%
exp-diff100.0%
clear-num100.0%
Applied egg-rr100.0%
Taylor expanded in a around 0 100.0%
rec-exp100.0%
Simplified100.0%
Taylor expanded in b around 0 99.0%
mul-1-neg99.0%
unsub-neg99.0%
Simplified99.0%
Taylor expanded in b around inf 100.0%
if -11 < b < 2.44999999999999995e67Initial program 99.9%
*-lft-identity99.9%
associate-*l/99.9%
associate-/r/99.9%
remove-double-neg99.9%
unsub-neg99.9%
div-sub65.7%
*-lft-identity65.7%
associate-*l/65.7%
lft-mult-inverse99.9%
sub-neg99.9%
distribute-frac-neg99.9%
remove-double-neg99.9%
div-exp99.9%
Simplified99.9%
Taylor expanded in b around 0 89.4%
Taylor expanded in a around 0 79.6%
Taylor expanded in a around inf 79.4%
*-commutative79.4%
Simplified79.4%
if 2.44999999999999995e67 < b Initial program 100.0%
*-lft-identity100.0%
associate-*l/100.0%
associate-/r/100.0%
remove-double-neg100.0%
unsub-neg100.0%
div-sub60.4%
*-lft-identity60.4%
associate-*l/60.4%
lft-mult-inverse100.0%
sub-neg100.0%
distribute-frac-neg100.0%
remove-double-neg100.0%
div-exp100.0%
Simplified100.0%
exp-diff100.0%
clear-num100.0%
Applied egg-rr100.0%
Taylor expanded in a around 0 100.0%
rec-exp100.0%
Simplified100.0%
Taylor expanded in b around 0 3.1%
mul-1-neg3.1%
unsub-neg3.1%
Simplified3.1%
Taylor expanded in b around 0 96.1%
Final simplification86.8%
(FPCore (a b)
:precision binary64
(if (<= b -17.5)
1.0
(if (<= b 1.45e+149)
(/ 1.0 (+ 2.0 (* a (+ (* a (* a -0.16666666666666666)) -1.0))))
(/ 1.0 (+ 2.0 (* b (+ b 1.0)))))))
double code(double a, double b) {
double tmp;
if (b <= -17.5) {
tmp = 1.0;
} else if (b <= 1.45e+149) {
tmp = 1.0 / (2.0 + (a * ((a * (a * -0.16666666666666666)) + -1.0)));
} else {
tmp = 1.0 / (2.0 + (b * (b + 1.0)));
}
return tmp;
}
real(8) function code(a, b)
real(8), intent (in) :: a
real(8), intent (in) :: b
real(8) :: tmp
if (b <= (-17.5d0)) then
tmp = 1.0d0
else if (b <= 1.45d+149) then
tmp = 1.0d0 / (2.0d0 + (a * ((a * (a * (-0.16666666666666666d0))) + (-1.0d0))))
else
tmp = 1.0d0 / (2.0d0 + (b * (b + 1.0d0)))
end if
code = tmp
end function
public static double code(double a, double b) {
double tmp;
if (b <= -17.5) {
tmp = 1.0;
} else if (b <= 1.45e+149) {
tmp = 1.0 / (2.0 + (a * ((a * (a * -0.16666666666666666)) + -1.0)));
} else {
tmp = 1.0 / (2.0 + (b * (b + 1.0)));
}
return tmp;
}
def code(a, b): tmp = 0 if b <= -17.5: tmp = 1.0 elif b <= 1.45e+149: tmp = 1.0 / (2.0 + (a * ((a * (a * -0.16666666666666666)) + -1.0))) else: tmp = 1.0 / (2.0 + (b * (b + 1.0))) return tmp
function code(a, b) tmp = 0.0 if (b <= -17.5) tmp = 1.0; elseif (b <= 1.45e+149) tmp = Float64(1.0 / Float64(2.0 + Float64(a * Float64(Float64(a * Float64(a * -0.16666666666666666)) + -1.0)))); else tmp = Float64(1.0 / Float64(2.0 + Float64(b * Float64(b + 1.0)))); end return tmp end
function tmp_2 = code(a, b) tmp = 0.0; if (b <= -17.5) tmp = 1.0; elseif (b <= 1.45e+149) tmp = 1.0 / (2.0 + (a * ((a * (a * -0.16666666666666666)) + -1.0))); else tmp = 1.0 / (2.0 + (b * (b + 1.0))); end tmp_2 = tmp; end
code[a_, b_] := If[LessEqual[b, -17.5], 1.0, If[LessEqual[b, 1.45e+149], N[(1.0 / N[(2.0 + N[(a * N[(N[(a * N[(a * -0.16666666666666666), $MachinePrecision]), $MachinePrecision] + -1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(1.0 / N[(2.0 + N[(b * N[(b + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;b \leq -17.5:\\
\;\;\;\;1\\
\mathbf{elif}\;b \leq 1.45 \cdot 10^{+149}:\\
\;\;\;\;\frac{1}{2 + a \cdot \left(a \cdot \left(a \cdot -0.16666666666666666\right) + -1\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{2 + b \cdot \left(b + 1\right)}\\
\end{array}
\end{array}
if b < -17.5Initial program 100.0%
*-lft-identity100.0%
associate-*l/100.0%
associate-/r/100.0%
remove-double-neg100.0%
unsub-neg100.0%
div-sub100.0%
*-lft-identity100.0%
associate-*l/100.0%
lft-mult-inverse100.0%
sub-neg100.0%
distribute-frac-neg100.0%
remove-double-neg100.0%
div-exp100.0%
Simplified100.0%
exp-diff100.0%
clear-num100.0%
Applied egg-rr100.0%
Taylor expanded in a around 0 100.0%
rec-exp100.0%
Simplified100.0%
Taylor expanded in b around 0 99.0%
mul-1-neg99.0%
unsub-neg99.0%
Simplified99.0%
Taylor expanded in b around inf 100.0%
if -17.5 < b < 1.4500000000000001e149Initial program 99.9%
*-lft-identity99.9%
associate-*l/99.9%
associate-/r/99.9%
remove-double-neg99.9%
unsub-neg99.9%
div-sub65.4%
*-lft-identity65.4%
associate-*l/65.4%
lft-mult-inverse99.9%
sub-neg99.9%
distribute-frac-neg99.9%
remove-double-neg99.9%
div-exp99.9%
Simplified99.9%
Taylor expanded in b around 0 86.5%
Taylor expanded in a around 0 76.2%
Taylor expanded in a around inf 76.0%
*-commutative76.0%
Simplified76.0%
if 1.4500000000000001e149 < b Initial program 100.0%
*-lft-identity100.0%
associate-*l/100.0%
associate-/r/100.0%
remove-double-neg100.0%
unsub-neg100.0%
div-sub60.5%
*-lft-identity60.5%
associate-*l/60.5%
lft-mult-inverse100.0%
sub-neg100.0%
distribute-frac-neg100.0%
remove-double-neg100.0%
div-exp100.0%
Simplified100.0%
exp-diff100.0%
clear-num100.0%
Applied egg-rr100.0%
Taylor expanded in a around 0 100.0%
rec-exp100.0%
Simplified100.0%
Taylor expanded in b around 0 3.1%
mul-1-neg3.1%
unsub-neg3.1%
Simplified3.1%
Taylor expanded in b around 0 93.1%
Final simplification83.5%
(FPCore (a b)
:precision binary64
(if (<= b -12.0)
1.0
(if (<= b 6e+148)
(/ 1.0 (+ 2.0 (* a (+ (* a 0.5) -1.0))))
(/ 1.0 (+ 2.0 (* b (+ b 1.0)))))))
double code(double a, double b) {
double tmp;
if (b <= -12.0) {
tmp = 1.0;
} else if (b <= 6e+148) {
tmp = 1.0 / (2.0 + (a * ((a * 0.5) + -1.0)));
} else {
tmp = 1.0 / (2.0 + (b * (b + 1.0)));
}
return tmp;
}
real(8) function code(a, b)
real(8), intent (in) :: a
real(8), intent (in) :: b
real(8) :: tmp
if (b <= (-12.0d0)) then
tmp = 1.0d0
else if (b <= 6d+148) then
tmp = 1.0d0 / (2.0d0 + (a * ((a * 0.5d0) + (-1.0d0))))
else
tmp = 1.0d0 / (2.0d0 + (b * (b + 1.0d0)))
end if
code = tmp
end function
public static double code(double a, double b) {
double tmp;
if (b <= -12.0) {
tmp = 1.0;
} else if (b <= 6e+148) {
tmp = 1.0 / (2.0 + (a * ((a * 0.5) + -1.0)));
} else {
tmp = 1.0 / (2.0 + (b * (b + 1.0)));
}
return tmp;
}
def code(a, b): tmp = 0 if b <= -12.0: tmp = 1.0 elif b <= 6e+148: tmp = 1.0 / (2.0 + (a * ((a * 0.5) + -1.0))) else: tmp = 1.0 / (2.0 + (b * (b + 1.0))) return tmp
function code(a, b) tmp = 0.0 if (b <= -12.0) tmp = 1.0; elseif (b <= 6e+148) tmp = Float64(1.0 / Float64(2.0 + Float64(a * Float64(Float64(a * 0.5) + -1.0)))); else tmp = Float64(1.0 / Float64(2.0 + Float64(b * Float64(b + 1.0)))); end return tmp end
function tmp_2 = code(a, b) tmp = 0.0; if (b <= -12.0) tmp = 1.0; elseif (b <= 6e+148) tmp = 1.0 / (2.0 + (a * ((a * 0.5) + -1.0))); else tmp = 1.0 / (2.0 + (b * (b + 1.0))); end tmp_2 = tmp; end
code[a_, b_] := If[LessEqual[b, -12.0], 1.0, If[LessEqual[b, 6e+148], N[(1.0 / N[(2.0 + N[(a * N[(N[(a * 0.5), $MachinePrecision] + -1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(1.0 / N[(2.0 + N[(b * N[(b + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;b \leq -12:\\
\;\;\;\;1\\
\mathbf{elif}\;b \leq 6 \cdot 10^{+148}:\\
\;\;\;\;\frac{1}{2 + a \cdot \left(a \cdot 0.5 + -1\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{2 + b \cdot \left(b + 1\right)}\\
\end{array}
\end{array}
if b < -12Initial program 100.0%
*-lft-identity100.0%
associate-*l/100.0%
associate-/r/100.0%
remove-double-neg100.0%
unsub-neg100.0%
div-sub100.0%
*-lft-identity100.0%
associate-*l/100.0%
lft-mult-inverse100.0%
sub-neg100.0%
distribute-frac-neg100.0%
remove-double-neg100.0%
div-exp100.0%
Simplified100.0%
exp-diff100.0%
clear-num100.0%
Applied egg-rr100.0%
Taylor expanded in a around 0 100.0%
rec-exp100.0%
Simplified100.0%
Taylor expanded in b around 0 99.0%
mul-1-neg99.0%
unsub-neg99.0%
Simplified99.0%
Taylor expanded in b around inf 100.0%
if -12 < b < 6.00000000000000029e148Initial program 99.9%
*-lft-identity99.9%
associate-*l/99.9%
associate-/r/99.9%
remove-double-neg99.9%
unsub-neg99.9%
div-sub65.4%
*-lft-identity65.4%
associate-*l/65.4%
lft-mult-inverse99.9%
sub-neg99.9%
distribute-frac-neg99.9%
remove-double-neg99.9%
div-exp99.9%
Simplified99.9%
Taylor expanded in b around 0 86.5%
Taylor expanded in a around 0 70.9%
if 6.00000000000000029e148 < b Initial program 100.0%
*-lft-identity100.0%
associate-*l/100.0%
associate-/r/100.0%
remove-double-neg100.0%
unsub-neg100.0%
div-sub60.5%
*-lft-identity60.5%
associate-*l/60.5%
lft-mult-inverse100.0%
sub-neg100.0%
distribute-frac-neg100.0%
remove-double-neg100.0%
div-exp100.0%
Simplified100.0%
exp-diff100.0%
clear-num100.0%
Applied egg-rr100.0%
Taylor expanded in a around 0 100.0%
rec-exp100.0%
Simplified100.0%
Taylor expanded in b around 0 3.1%
mul-1-neg3.1%
unsub-neg3.1%
Simplified3.1%
Taylor expanded in b around 0 93.1%
Final simplification80.2%
(FPCore (a b) :precision binary64 (if (<= b -1.05) 1.0 (/ 1.0 (+ 2.0 (* b (+ b 1.0))))))
double code(double a, double b) {
double tmp;
if (b <= -1.05) {
tmp = 1.0;
} else {
tmp = 1.0 / (2.0 + (b * (b + 1.0)));
}
return tmp;
}
real(8) function code(a, b)
real(8), intent (in) :: a
real(8), intent (in) :: b
real(8) :: tmp
if (b <= (-1.05d0)) then
tmp = 1.0d0
else
tmp = 1.0d0 / (2.0d0 + (b * (b + 1.0d0)))
end if
code = tmp
end function
public static double code(double a, double b) {
double tmp;
if (b <= -1.05) {
tmp = 1.0;
} else {
tmp = 1.0 / (2.0 + (b * (b + 1.0)));
}
return tmp;
}
def code(a, b): tmp = 0 if b <= -1.05: tmp = 1.0 else: tmp = 1.0 / (2.0 + (b * (b + 1.0))) return tmp
function code(a, b) tmp = 0.0 if (b <= -1.05) tmp = 1.0; else tmp = Float64(1.0 / Float64(2.0 + Float64(b * Float64(b + 1.0)))); end return tmp end
function tmp_2 = code(a, b) tmp = 0.0; if (b <= -1.05) tmp = 1.0; else tmp = 1.0 / (2.0 + (b * (b + 1.0))); end tmp_2 = tmp; end
code[a_, b_] := If[LessEqual[b, -1.05], 1.0, N[(1.0 / N[(2.0 + N[(b * N[(b + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;b \leq -1.05:\\
\;\;\;\;1\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{2 + b \cdot \left(b + 1\right)}\\
\end{array}
\end{array}
if b < -1.05000000000000004Initial program 100.0%
*-lft-identity100.0%
associate-*l/100.0%
associate-/r/100.0%
remove-double-neg100.0%
unsub-neg100.0%
div-sub100.0%
*-lft-identity100.0%
associate-*l/100.0%
lft-mult-inverse100.0%
sub-neg100.0%
distribute-frac-neg100.0%
remove-double-neg100.0%
div-exp100.0%
Simplified100.0%
exp-diff100.0%
clear-num100.0%
Applied egg-rr100.0%
Taylor expanded in a around 0 100.0%
rec-exp100.0%
Simplified100.0%
Taylor expanded in b around 0 99.0%
mul-1-neg99.0%
unsub-neg99.0%
Simplified99.0%
Taylor expanded in b around inf 100.0%
if -1.05000000000000004 < b Initial program 99.9%
*-lft-identity99.9%
associate-*l/99.9%
associate-/r/99.9%
remove-double-neg99.9%
unsub-neg99.9%
div-sub64.5%
*-lft-identity64.5%
associate-*l/64.5%
lft-mult-inverse100.0%
sub-neg100.0%
distribute-frac-neg100.0%
remove-double-neg100.0%
div-exp100.0%
Simplified100.0%
exp-diff100.0%
clear-num100.0%
Applied egg-rr100.0%
Taylor expanded in a around 0 77.6%
rec-exp77.6%
Simplified77.6%
Taylor expanded in b around 0 44.6%
mul-1-neg44.6%
unsub-neg44.6%
Simplified44.6%
Taylor expanded in b around 0 61.7%
Final simplification69.6%
(FPCore (a b) :precision binary64 (if (<= b -1.0) 1.0 (/ 1.0 (+ b 2.0))))
double code(double a, double b) {
double tmp;
if (b <= -1.0) {
tmp = 1.0;
} else {
tmp = 1.0 / (b + 2.0);
}
return tmp;
}
real(8) function code(a, b)
real(8), intent (in) :: a
real(8), intent (in) :: b
real(8) :: tmp
if (b <= (-1.0d0)) then
tmp = 1.0d0
else
tmp = 1.0d0 / (b + 2.0d0)
end if
code = tmp
end function
public static double code(double a, double b) {
double tmp;
if (b <= -1.0) {
tmp = 1.0;
} else {
tmp = 1.0 / (b + 2.0);
}
return tmp;
}
def code(a, b): tmp = 0 if b <= -1.0: tmp = 1.0 else: tmp = 1.0 / (b + 2.0) return tmp
function code(a, b) tmp = 0.0 if (b <= -1.0) tmp = 1.0; else tmp = Float64(1.0 / Float64(b + 2.0)); end return tmp end
function tmp_2 = code(a, b) tmp = 0.0; if (b <= -1.0) tmp = 1.0; else tmp = 1.0 / (b + 2.0); end tmp_2 = tmp; end
code[a_, b_] := If[LessEqual[b, -1.0], 1.0, N[(1.0 / N[(b + 2.0), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;b \leq -1:\\
\;\;\;\;1\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{b + 2}\\
\end{array}
\end{array}
if b < -1Initial program 100.0%
*-lft-identity100.0%
associate-*l/100.0%
associate-/r/100.0%
remove-double-neg100.0%
unsub-neg100.0%
div-sub100.0%
*-lft-identity100.0%
associate-*l/100.0%
lft-mult-inverse100.0%
sub-neg100.0%
distribute-frac-neg100.0%
remove-double-neg100.0%
div-exp100.0%
Simplified100.0%
exp-diff100.0%
clear-num100.0%
Applied egg-rr100.0%
Taylor expanded in a around 0 100.0%
rec-exp100.0%
Simplified100.0%
Taylor expanded in b around 0 99.0%
mul-1-neg99.0%
unsub-neg99.0%
Simplified99.0%
Taylor expanded in b around inf 100.0%
if -1 < b Initial program 99.9%
*-lft-identity99.9%
associate-*l/99.9%
associate-/r/99.9%
remove-double-neg99.9%
unsub-neg99.9%
div-sub64.5%
*-lft-identity64.5%
associate-*l/64.5%
lft-mult-inverse100.0%
sub-neg100.0%
distribute-frac-neg100.0%
remove-double-neg100.0%
div-exp100.0%
Simplified100.0%
Taylor expanded in a around 0 77.6%
Taylor expanded in b around 0 45.4%
+-commutative45.4%
Simplified45.4%
Final simplification56.7%
(FPCore (a b) :precision binary64 (if (<= b -2.0) 1.0 (+ 0.5 (* b -0.25))))
double code(double a, double b) {
double tmp;
if (b <= -2.0) {
tmp = 1.0;
} else {
tmp = 0.5 + (b * -0.25);
}
return tmp;
}
real(8) function code(a, b)
real(8), intent (in) :: a
real(8), intent (in) :: b
real(8) :: tmp
if (b <= (-2.0d0)) then
tmp = 1.0d0
else
tmp = 0.5d0 + (b * (-0.25d0))
end if
code = tmp
end function
public static double code(double a, double b) {
double tmp;
if (b <= -2.0) {
tmp = 1.0;
} else {
tmp = 0.5 + (b * -0.25);
}
return tmp;
}
def code(a, b): tmp = 0 if b <= -2.0: tmp = 1.0 else: tmp = 0.5 + (b * -0.25) return tmp
function code(a, b) tmp = 0.0 if (b <= -2.0) tmp = 1.0; else tmp = Float64(0.5 + Float64(b * -0.25)); end return tmp end
function tmp_2 = code(a, b) tmp = 0.0; if (b <= -2.0) tmp = 1.0; else tmp = 0.5 + (b * -0.25); end tmp_2 = tmp; end
code[a_, b_] := If[LessEqual[b, -2.0], 1.0, N[(0.5 + N[(b * -0.25), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;b \leq -2:\\
\;\;\;\;1\\
\mathbf{else}:\\
\;\;\;\;0.5 + b \cdot -0.25\\
\end{array}
\end{array}
if b < -2Initial program 100.0%
*-lft-identity100.0%
associate-*l/100.0%
associate-/r/100.0%
remove-double-neg100.0%
unsub-neg100.0%
div-sub100.0%
*-lft-identity100.0%
associate-*l/100.0%
lft-mult-inverse100.0%
sub-neg100.0%
distribute-frac-neg100.0%
remove-double-neg100.0%
div-exp100.0%
Simplified100.0%
exp-diff100.0%
clear-num100.0%
Applied egg-rr100.0%
Taylor expanded in a around 0 100.0%
rec-exp100.0%
Simplified100.0%
Taylor expanded in b around 0 99.0%
mul-1-neg99.0%
unsub-neg99.0%
Simplified99.0%
Taylor expanded in b around inf 100.0%
if -2 < b Initial program 99.9%
*-lft-identity99.9%
associate-*l/99.9%
associate-/r/99.9%
remove-double-neg99.9%
unsub-neg99.9%
div-sub64.5%
*-lft-identity64.5%
associate-*l/64.5%
lft-mult-inverse100.0%
sub-neg100.0%
distribute-frac-neg100.0%
remove-double-neg100.0%
div-exp100.0%
Simplified100.0%
Taylor expanded in a around 0 77.6%
Taylor expanded in b around 0 44.9%
*-commutative44.9%
Simplified44.9%
Final simplification56.3%
(FPCore (a b) :precision binary64 (if (<= b -0.98) 1.0 (+ 0.5 (* a 0.25))))
double code(double a, double b) {
double tmp;
if (b <= -0.98) {
tmp = 1.0;
} else {
tmp = 0.5 + (a * 0.25);
}
return tmp;
}
real(8) function code(a, b)
real(8), intent (in) :: a
real(8), intent (in) :: b
real(8) :: tmp
if (b <= (-0.98d0)) then
tmp = 1.0d0
else
tmp = 0.5d0 + (a * 0.25d0)
end if
code = tmp
end function
public static double code(double a, double b) {
double tmp;
if (b <= -0.98) {
tmp = 1.0;
} else {
tmp = 0.5 + (a * 0.25);
}
return tmp;
}
def code(a, b): tmp = 0 if b <= -0.98: tmp = 1.0 else: tmp = 0.5 + (a * 0.25) return tmp
function code(a, b) tmp = 0.0 if (b <= -0.98) tmp = 1.0; else tmp = Float64(0.5 + Float64(a * 0.25)); end return tmp end
function tmp_2 = code(a, b) tmp = 0.0; if (b <= -0.98) tmp = 1.0; else tmp = 0.5 + (a * 0.25); end tmp_2 = tmp; end
code[a_, b_] := If[LessEqual[b, -0.98], 1.0, N[(0.5 + N[(a * 0.25), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;b \leq -0.98:\\
\;\;\;\;1\\
\mathbf{else}:\\
\;\;\;\;0.5 + a \cdot 0.25\\
\end{array}
\end{array}
if b < -0.97999999999999998Initial program 100.0%
*-lft-identity100.0%
associate-*l/100.0%
associate-/r/100.0%
remove-double-neg100.0%
unsub-neg100.0%
div-sub100.0%
*-lft-identity100.0%
associate-*l/100.0%
lft-mult-inverse100.0%
sub-neg100.0%
distribute-frac-neg100.0%
remove-double-neg100.0%
div-exp100.0%
Simplified100.0%
exp-diff100.0%
clear-num100.0%
Applied egg-rr100.0%
Taylor expanded in a around 0 100.0%
rec-exp100.0%
Simplified100.0%
Taylor expanded in b around 0 99.0%
mul-1-neg99.0%
unsub-neg99.0%
Simplified99.0%
Taylor expanded in b around inf 100.0%
if -0.97999999999999998 < b Initial program 99.9%
*-lft-identity99.9%
associate-*l/99.9%
associate-/r/99.9%
remove-double-neg99.9%
unsub-neg99.9%
div-sub64.5%
*-lft-identity64.5%
associate-*l/64.5%
lft-mult-inverse100.0%
sub-neg100.0%
distribute-frac-neg100.0%
remove-double-neg100.0%
div-exp100.0%
Simplified100.0%
Taylor expanded in b around 0 78.0%
Taylor expanded in a around 0 43.4%
*-commutative43.4%
Simplified43.4%
Final simplification55.1%
(FPCore (a b) :precision binary64 (/ 1.0 (+ 1.0 (/ 1.0 (- 1.0 b)))))
double code(double a, double b) {
return 1.0 / (1.0 + (1.0 / (1.0 - b)));
}
real(8) function code(a, b)
real(8), intent (in) :: a
real(8), intent (in) :: b
code = 1.0d0 / (1.0d0 + (1.0d0 / (1.0d0 - b)))
end function
public static double code(double a, double b) {
return 1.0 / (1.0 + (1.0 / (1.0 - b)));
}
def code(a, b): return 1.0 / (1.0 + (1.0 / (1.0 - b)))
function code(a, b) return Float64(1.0 / Float64(1.0 + Float64(1.0 / Float64(1.0 - b)))) end
function tmp = code(a, b) tmp = 1.0 / (1.0 + (1.0 / (1.0 - b))); end
code[a_, b_] := N[(1.0 / N[(1.0 + N[(1.0 / N[(1.0 - b), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{1}{1 + \frac{1}{1 - b}}
\end{array}
Initial program 100.0%
*-lft-identity100.0%
associate-*l/100.0%
associate-/r/100.0%
remove-double-neg100.0%
unsub-neg100.0%
div-sub71.8%
*-lft-identity71.8%
associate-*l/71.8%
lft-mult-inverse100.0%
sub-neg100.0%
distribute-frac-neg100.0%
remove-double-neg100.0%
div-exp100.0%
Simplified100.0%
exp-diff100.0%
clear-num100.0%
Applied egg-rr100.0%
Taylor expanded in a around 0 82.2%
rec-exp82.2%
Simplified82.2%
Taylor expanded in b around 0 55.9%
mul-1-neg55.9%
unsub-neg55.9%
Simplified55.9%
(FPCore (a b) :precision binary64 (if (<= b -1.1) 1.0 0.5))
double code(double a, double b) {
double tmp;
if (b <= -1.1) {
tmp = 1.0;
} else {
tmp = 0.5;
}
return tmp;
}
real(8) function code(a, b)
real(8), intent (in) :: a
real(8), intent (in) :: b
real(8) :: tmp
if (b <= (-1.1d0)) then
tmp = 1.0d0
else
tmp = 0.5d0
end if
code = tmp
end function
public static double code(double a, double b) {
double tmp;
if (b <= -1.1) {
tmp = 1.0;
} else {
tmp = 0.5;
}
return tmp;
}
def code(a, b): tmp = 0 if b <= -1.1: tmp = 1.0 else: tmp = 0.5 return tmp
function code(a, b) tmp = 0.0 if (b <= -1.1) tmp = 1.0; else tmp = 0.5; end return tmp end
function tmp_2 = code(a, b) tmp = 0.0; if (b <= -1.1) tmp = 1.0; else tmp = 0.5; end tmp_2 = tmp; end
code[a_, b_] := If[LessEqual[b, -1.1], 1.0, 0.5]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;b \leq -1.1:\\
\;\;\;\;1\\
\mathbf{else}:\\
\;\;\;\;0.5\\
\end{array}
\end{array}
if b < -1.1000000000000001Initial program 100.0%
*-lft-identity100.0%
associate-*l/100.0%
associate-/r/100.0%
remove-double-neg100.0%
unsub-neg100.0%
div-sub100.0%
*-lft-identity100.0%
associate-*l/100.0%
lft-mult-inverse100.0%
sub-neg100.0%
distribute-frac-neg100.0%
remove-double-neg100.0%
div-exp100.0%
Simplified100.0%
exp-diff100.0%
clear-num100.0%
Applied egg-rr100.0%
Taylor expanded in a around 0 100.0%
rec-exp100.0%
Simplified100.0%
Taylor expanded in b around 0 99.0%
mul-1-neg99.0%
unsub-neg99.0%
Simplified99.0%
Taylor expanded in b around inf 100.0%
if -1.1000000000000001 < b Initial program 99.9%
*-lft-identity99.9%
associate-*l/99.9%
associate-/r/99.9%
remove-double-neg99.9%
unsub-neg99.9%
div-sub64.5%
*-lft-identity64.5%
associate-*l/64.5%
lft-mult-inverse100.0%
sub-neg100.0%
distribute-frac-neg100.0%
remove-double-neg100.0%
div-exp100.0%
Simplified100.0%
Taylor expanded in a around 0 77.6%
Taylor expanded in b around 0 43.3%
Final simplification55.0%
(FPCore (a b) :precision binary64 0.5)
double code(double a, double b) {
return 0.5;
}
real(8) function code(a, b)
real(8), intent (in) :: a
real(8), intent (in) :: b
code = 0.5d0
end function
public static double code(double a, double b) {
return 0.5;
}
def code(a, b): return 0.5
function code(a, b) return 0.5 end
function tmp = code(a, b) tmp = 0.5; end
code[a_, b_] := 0.5
\begin{array}{l}
\\
0.5
\end{array}
Initial program 100.0%
*-lft-identity100.0%
associate-*l/100.0%
associate-/r/100.0%
remove-double-neg100.0%
unsub-neg100.0%
div-sub71.8%
*-lft-identity71.8%
associate-*l/71.8%
lft-mult-inverse100.0%
sub-neg100.0%
distribute-frac-neg100.0%
remove-double-neg100.0%
div-exp100.0%
Simplified100.0%
Taylor expanded in a around 0 82.2%
Taylor expanded in b around 0 38.2%
(FPCore (a b) :precision binary64 (/ 1.0 (+ 1.0 (exp (- b a)))))
double code(double a, double b) {
return 1.0 / (1.0 + exp((b - a)));
}
real(8) function code(a, b)
real(8), intent (in) :: a
real(8), intent (in) :: b
code = 1.0d0 / (1.0d0 + exp((b - a)))
end function
public static double code(double a, double b) {
return 1.0 / (1.0 + Math.exp((b - a)));
}
def code(a, b): return 1.0 / (1.0 + math.exp((b - a)))
function code(a, b) return Float64(1.0 / Float64(1.0 + exp(Float64(b - a)))) end
function tmp = code(a, b) tmp = 1.0 / (1.0 + exp((b - a))); end
code[a_, b_] := N[(1.0 / N[(1.0 + N[Exp[N[(b - a), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{1}{1 + e^{b - a}}
\end{array}
herbie shell --seed 2024131
(FPCore (a b)
:name "Quotient of sum of exps"
:precision binary64
:alt
(! :herbie-platform default (/ 1 (+ 1 (exp (- b a)))))
(/ (exp a) (+ (exp a) (exp b))))