
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (+ (/ NdChar (+ 1.0 (exp (/ (- (- (- (- Ec Vef) EDonor) mu)) KbT)))) (/ NaChar (+ 1.0 (exp (/ (+ (+ (+ Ev Vef) EAccept) (- mu)) KbT))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NdChar / (1.0 + exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + exp(((((Ev + Vef) + EAccept) + -mu) / KbT))));
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
code = (ndchar / (1.0d0 + exp((-(((ec - vef) - edonor) - mu) / kbt)))) + (nachar / (1.0d0 + exp(((((ev + vef) + eaccept) + -mu) / kbt))))
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NdChar / (1.0 + Math.exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + Math.exp(((((Ev + Vef) + EAccept) + -mu) / KbT))));
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return (NdChar / (1.0 + math.exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + math.exp(((((Ev + Vef) + EAccept) + -mu) / KbT))))
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(-Float64(Float64(Float64(Ec - Vef) - EDonor) - mu)) / KbT)))) + Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(Float64(Ev + Vef) + EAccept) + Float64(-mu)) / KbT))))) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = (NdChar / (1.0 + exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + exp(((((Ev + Vef) + EAccept) + -mu) / KbT)))); end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(N[(NdChar / N[(1.0 + N[Exp[N[((-N[(N[(N[(Ec - Vef), $MachinePrecision] - EDonor), $MachinePrecision] - mu), $MachinePrecision]) / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Exp[N[(N[(N[(N[(Ev + Vef), $MachinePrecision] + EAccept), $MachinePrecision] + (-mu)), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{NdChar}{1 + e^{\frac{-\left(\left(\left(Ec - Vef\right) - EDonor\right) - mu\right)}{KbT}}} + \frac{NaChar}{1 + e^{\frac{\left(\left(Ev + Vef\right) + EAccept\right) + \left(-mu\right)}{KbT}}}
\end{array}
Sampling outcomes in binary64 precision:
Herbie found 23 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (+ (/ NdChar (+ 1.0 (exp (/ (- (- (- (- Ec Vef) EDonor) mu)) KbT)))) (/ NaChar (+ 1.0 (exp (/ (+ (+ (+ Ev Vef) EAccept) (- mu)) KbT))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NdChar / (1.0 + exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + exp(((((Ev + Vef) + EAccept) + -mu) / KbT))));
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
code = (ndchar / (1.0d0 + exp((-(((ec - vef) - edonor) - mu) / kbt)))) + (nachar / (1.0d0 + exp(((((ev + vef) + eaccept) + -mu) / kbt))))
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NdChar / (1.0 + Math.exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + Math.exp(((((Ev + Vef) + EAccept) + -mu) / KbT))));
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return (NdChar / (1.0 + math.exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + math.exp(((((Ev + Vef) + EAccept) + -mu) / KbT))))
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(-Float64(Float64(Float64(Ec - Vef) - EDonor) - mu)) / KbT)))) + Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(Float64(Ev + Vef) + EAccept) + Float64(-mu)) / KbT))))) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = (NdChar / (1.0 + exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + exp(((((Ev + Vef) + EAccept) + -mu) / KbT)))); end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(N[(NdChar / N[(1.0 + N[Exp[N[((-N[(N[(N[(Ec - Vef), $MachinePrecision] - EDonor), $MachinePrecision] - mu), $MachinePrecision]) / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Exp[N[(N[(N[(N[(Ev + Vef), $MachinePrecision] + EAccept), $MachinePrecision] + (-mu)), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{NdChar}{1 + e^{\frac{-\left(\left(\left(Ec - Vef\right) - EDonor\right) - mu\right)}{KbT}}} + \frac{NaChar}{1 + e^{\frac{\left(\left(Ev + Vef\right) + EAccept\right) + \left(-mu\right)}{KbT}}}
\end{array}
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (+ (/ NdChar (expm1 (log (+ 2.0 (exp (/ (+ Vef (+ mu (- EDonor Ec))) KbT)))))) (/ NaChar (+ 1.0 (exp (/ (+ (- EAccept mu) (+ Vef Ev)) KbT))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NdChar / expm1(log((2.0 + exp(((Vef + (mu + (EDonor - Ec))) / KbT)))))) + (NaChar / (1.0 + exp((((EAccept - mu) + (Vef + Ev)) / KbT))));
}
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NdChar / Math.expm1(Math.log((2.0 + Math.exp(((Vef + (mu + (EDonor - Ec))) / KbT)))))) + (NaChar / (1.0 + Math.exp((((EAccept - mu) + (Vef + Ev)) / KbT))));
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return (NdChar / math.expm1(math.log((2.0 + math.exp(((Vef + (mu + (EDonor - Ec))) / KbT)))))) + (NaChar / (1.0 + math.exp((((EAccept - mu) + (Vef + Ev)) / KbT))))
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(Float64(NdChar / expm1(log(Float64(2.0 + exp(Float64(Float64(Vef + Float64(mu + Float64(EDonor - Ec))) / KbT)))))) + Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(EAccept - mu) + Float64(Vef + Ev)) / KbT))))) end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(N[(NdChar / N[(Exp[N[Log[N[(2.0 + N[Exp[N[(N[(Vef + N[(mu + N[(EDonor - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]] - 1), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Exp[N[(N[(N[(EAccept - mu), $MachinePrecision] + N[(Vef + Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{NdChar}{\mathsf{expm1}\left(\log \left(2 + e^{\frac{Vef + \left(mu + \left(EDonor - Ec\right)\right)}{KbT}}\right)\right)} + \frac{NaChar}{1 + e^{\frac{\left(EAccept - mu\right) + \left(Vef + Ev\right)}{KbT}}}
\end{array}
Initial program 100.0%
Simplified100.0%
expm1-log1p-u99.8%
log1p-udef100.0%
associate-+r+100.0%
metadata-eval100.0%
associate-+l-100.0%
associate--r+100.0%
Applied egg-rr100.0%
Final simplification100.0%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0
(+
(/ NaChar (+ 1.0 (exp (/ (+ (- EAccept mu) (+ Vef Ev)) KbT))))
(/ NdChar (+ 1.0 (exp (/ mu KbT))))))
(t_1 (/ NdChar (+ 1.0 (exp (/ (+ (- Vef Ec) (+ EDonor mu)) KbT)))))
(t_2 (+ t_1 (/ NaChar (+ 1.0 (exp (/ Vef KbT)))))))
(if (<= Ev -3.9e+175)
(+ t_1 (/ NaChar (+ 1.0 (exp (/ Ev KbT)))))
(if (<= Ev -3e+66)
t_2
(if (<= Ev -2.5e-47)
t_0
(if (<= Ev -4.45e-197)
t_2
(if (<= Ev 1.6e-52)
t_0
(+ t_1 (/ NaChar (+ 1.0 (exp (/ EAccept KbT))))))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar / (1.0 + exp((((EAccept - mu) + (Vef + Ev)) / KbT)))) + (NdChar / (1.0 + exp((mu / KbT))));
double t_1 = NdChar / (1.0 + exp((((Vef - Ec) + (EDonor + mu)) / KbT)));
double t_2 = t_1 + (NaChar / (1.0 + exp((Vef / KbT))));
double tmp;
if (Ev <= -3.9e+175) {
tmp = t_1 + (NaChar / (1.0 + exp((Ev / KbT))));
} else if (Ev <= -3e+66) {
tmp = t_2;
} else if (Ev <= -2.5e-47) {
tmp = t_0;
} else if (Ev <= -4.45e-197) {
tmp = t_2;
} else if (Ev <= 1.6e-52) {
tmp = t_0;
} else {
tmp = t_1 + (NaChar / (1.0 + exp((EAccept / KbT))));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: t_2
real(8) :: tmp
t_0 = (nachar / (1.0d0 + exp((((eaccept - mu) + (vef + ev)) / kbt)))) + (ndchar / (1.0d0 + exp((mu / kbt))))
t_1 = ndchar / (1.0d0 + exp((((vef - ec) + (edonor + mu)) / kbt)))
t_2 = t_1 + (nachar / (1.0d0 + exp((vef / kbt))))
if (ev <= (-3.9d+175)) then
tmp = t_1 + (nachar / (1.0d0 + exp((ev / kbt))))
else if (ev <= (-3d+66)) then
tmp = t_2
else if (ev <= (-2.5d-47)) then
tmp = t_0
else if (ev <= (-4.45d-197)) then
tmp = t_2
else if (ev <= 1.6d-52) then
tmp = t_0
else
tmp = t_1 + (nachar / (1.0d0 + exp((eaccept / kbt))))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar / (1.0 + Math.exp((((EAccept - mu) + (Vef + Ev)) / KbT)))) + (NdChar / (1.0 + Math.exp((mu / KbT))));
double t_1 = NdChar / (1.0 + Math.exp((((Vef - Ec) + (EDonor + mu)) / KbT)));
double t_2 = t_1 + (NaChar / (1.0 + Math.exp((Vef / KbT))));
double tmp;
if (Ev <= -3.9e+175) {
tmp = t_1 + (NaChar / (1.0 + Math.exp((Ev / KbT))));
} else if (Ev <= -3e+66) {
tmp = t_2;
} else if (Ev <= -2.5e-47) {
tmp = t_0;
} else if (Ev <= -4.45e-197) {
tmp = t_2;
} else if (Ev <= 1.6e-52) {
tmp = t_0;
} else {
tmp = t_1 + (NaChar / (1.0 + Math.exp((EAccept / KbT))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = (NaChar / (1.0 + math.exp((((EAccept - mu) + (Vef + Ev)) / KbT)))) + (NdChar / (1.0 + math.exp((mu / KbT)))) t_1 = NdChar / (1.0 + math.exp((((Vef - Ec) + (EDonor + mu)) / KbT))) t_2 = t_1 + (NaChar / (1.0 + math.exp((Vef / KbT)))) tmp = 0 if Ev <= -3.9e+175: tmp = t_1 + (NaChar / (1.0 + math.exp((Ev / KbT)))) elif Ev <= -3e+66: tmp = t_2 elif Ev <= -2.5e-47: tmp = t_0 elif Ev <= -4.45e-197: tmp = t_2 elif Ev <= 1.6e-52: tmp = t_0 else: tmp = t_1 + (NaChar / (1.0 + math.exp((EAccept / KbT)))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(EAccept - mu) + Float64(Vef + Ev)) / KbT)))) + Float64(NdChar / Float64(1.0 + exp(Float64(mu / KbT))))) t_1 = Float64(NdChar / Float64(1.0 + exp(Float64(Float64(Float64(Vef - Ec) + Float64(EDonor + mu)) / KbT)))) t_2 = Float64(t_1 + Float64(NaChar / Float64(1.0 + exp(Float64(Vef / KbT))))) tmp = 0.0 if (Ev <= -3.9e+175) tmp = Float64(t_1 + Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT))))); elseif (Ev <= -3e+66) tmp = t_2; elseif (Ev <= -2.5e-47) tmp = t_0; elseif (Ev <= -4.45e-197) tmp = t_2; elseif (Ev <= 1.6e-52) tmp = t_0; else tmp = Float64(t_1 + Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT))))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = (NaChar / (1.0 + exp((((EAccept - mu) + (Vef + Ev)) / KbT)))) + (NdChar / (1.0 + exp((mu / KbT)))); t_1 = NdChar / (1.0 + exp((((Vef - Ec) + (EDonor + mu)) / KbT))); t_2 = t_1 + (NaChar / (1.0 + exp((Vef / KbT)))); tmp = 0.0; if (Ev <= -3.9e+175) tmp = t_1 + (NaChar / (1.0 + exp((Ev / KbT)))); elseif (Ev <= -3e+66) tmp = t_2; elseif (Ev <= -2.5e-47) tmp = t_0; elseif (Ev <= -4.45e-197) tmp = t_2; elseif (Ev <= 1.6e-52) tmp = t_0; else tmp = t_1 + (NaChar / (1.0 + exp((EAccept / KbT)))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(N[(EAccept - mu), $MachinePrecision] + N[(Vef + Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(1.0 + N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(NdChar / N[(1.0 + N[Exp[N[(N[(N[(Vef - Ec), $MachinePrecision] + N[(EDonor + mu), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(t$95$1 + N[(NaChar / N[(1.0 + N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[Ev, -3.9e+175], N[(t$95$1 + N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[Ev, -3e+66], t$95$2, If[LessEqual[Ev, -2.5e-47], t$95$0, If[LessEqual[Ev, -4.45e-197], t$95$2, If[LessEqual[Ev, 1.6e-52], t$95$0, N[(t$95$1 + N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{\left(EAccept - mu\right) + \left(Vef + Ev\right)}{KbT}}} + \frac{NdChar}{1 + e^{\frac{mu}{KbT}}}\\
t_1 := \frac{NdChar}{1 + e^{\frac{\left(Vef - Ec\right) + \left(EDonor + mu\right)}{KbT}}}\\
t_2 := t_1 + \frac{NaChar}{1 + e^{\frac{Vef}{KbT}}}\\
\mathbf{if}\;Ev \leq -3.9 \cdot 10^{+175}:\\
\;\;\;\;t_1 + \frac{NaChar}{1 + e^{\frac{Ev}{KbT}}}\\
\mathbf{elif}\;Ev \leq -3 \cdot 10^{+66}:\\
\;\;\;\;t_2\\
\mathbf{elif}\;Ev \leq -2.5 \cdot 10^{-47}:\\
\;\;\;\;t_0\\
\mathbf{elif}\;Ev \leq -4.45 \cdot 10^{-197}:\\
\;\;\;\;t_2\\
\mathbf{elif}\;Ev \leq 1.6 \cdot 10^{-52}:\\
\;\;\;\;t_0\\
\mathbf{else}:\\
\;\;\;\;t_1 + \frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}}\\
\end{array}
\end{array}
if Ev < -3.89999999999999972e175Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 95.9%
if -3.89999999999999972e175 < Ev < -3.00000000000000002e66 or -2.50000000000000006e-47 < Ev < -4.4500000000000001e-197Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 80.4%
if -3.00000000000000002e66 < Ev < -2.50000000000000006e-47 or -4.4500000000000001e-197 < Ev < 1.60000000000000005e-52Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 82.8%
if 1.60000000000000005e-52 < Ev Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 69.0%
Final simplification79.7%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (+ 1.0 (exp (/ Vef KbT))))
(t_1
(+
(/ NdChar (+ 1.0 (exp (/ mu KbT))))
(/ NaChar (+ 1.0 (exp (/ (- mu) KbT))))))
(t_2
(+
(/ NdChar (+ 1.0 (exp (/ (+ (- Vef Ec) (+ EDonor mu)) KbT))))
(/
NaChar
(-
(+
2.0
(/
(/ (+ (* KbT EAccept) (* KbT (/ (* KbT (+ Vef Ev)) KbT))) KbT)
KbT))
(/ mu KbT))))))
(if (<= mu -1.55e+87)
t_1
(if (<= mu -1.1e-34)
t_2
(if (<= mu -1.25e-73)
(/ NaChar (+ 1.0 (exp (/ EAccept KbT))))
(if (<= mu -2.05e-140)
(+ (/ NaChar t_0) (/ NdChar t_0))
(if (<= mu 6.7e-276)
(+
(/ NaChar (+ 1.0 (exp (/ (+ (- EAccept mu) (+ Vef Ev)) KbT))))
(/ NdChar (- 2.0 (/ (- (- (- Ec EDonor) mu) Vef) KbT))))
(if (<= mu 5.2e+62) t_2 t_1))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = 1.0 + exp((Vef / KbT));
double t_1 = (NdChar / (1.0 + exp((mu / KbT)))) + (NaChar / (1.0 + exp((-mu / KbT))));
double t_2 = (NdChar / (1.0 + exp((((Vef - Ec) + (EDonor + mu)) / KbT)))) + (NaChar / ((2.0 + ((((KbT * EAccept) + (KbT * ((KbT * (Vef + Ev)) / KbT))) / KbT) / KbT)) - (mu / KbT)));
double tmp;
if (mu <= -1.55e+87) {
tmp = t_1;
} else if (mu <= -1.1e-34) {
tmp = t_2;
} else if (mu <= -1.25e-73) {
tmp = NaChar / (1.0 + exp((EAccept / KbT)));
} else if (mu <= -2.05e-140) {
tmp = (NaChar / t_0) + (NdChar / t_0);
} else if (mu <= 6.7e-276) {
tmp = (NaChar / (1.0 + exp((((EAccept - mu) + (Vef + Ev)) / KbT)))) + (NdChar / (2.0 - ((((Ec - EDonor) - mu) - Vef) / KbT)));
} else if (mu <= 5.2e+62) {
tmp = t_2;
} else {
tmp = t_1;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: t_2
real(8) :: tmp
t_0 = 1.0d0 + exp((vef / kbt))
t_1 = (ndchar / (1.0d0 + exp((mu / kbt)))) + (nachar / (1.0d0 + exp((-mu / kbt))))
t_2 = (ndchar / (1.0d0 + exp((((vef - ec) + (edonor + mu)) / kbt)))) + (nachar / ((2.0d0 + ((((kbt * eaccept) + (kbt * ((kbt * (vef + ev)) / kbt))) / kbt) / kbt)) - (mu / kbt)))
if (mu <= (-1.55d+87)) then
tmp = t_1
else if (mu <= (-1.1d-34)) then
tmp = t_2
else if (mu <= (-1.25d-73)) then
tmp = nachar / (1.0d0 + exp((eaccept / kbt)))
else if (mu <= (-2.05d-140)) then
tmp = (nachar / t_0) + (ndchar / t_0)
else if (mu <= 6.7d-276) then
tmp = (nachar / (1.0d0 + exp((((eaccept - mu) + (vef + ev)) / kbt)))) + (ndchar / (2.0d0 - ((((ec - edonor) - mu) - vef) / kbt)))
else if (mu <= 5.2d+62) then
tmp = t_2
else
tmp = t_1
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = 1.0 + Math.exp((Vef / KbT));
double t_1 = (NdChar / (1.0 + Math.exp((mu / KbT)))) + (NaChar / (1.0 + Math.exp((-mu / KbT))));
double t_2 = (NdChar / (1.0 + Math.exp((((Vef - Ec) + (EDonor + mu)) / KbT)))) + (NaChar / ((2.0 + ((((KbT * EAccept) + (KbT * ((KbT * (Vef + Ev)) / KbT))) / KbT) / KbT)) - (mu / KbT)));
double tmp;
if (mu <= -1.55e+87) {
tmp = t_1;
} else if (mu <= -1.1e-34) {
tmp = t_2;
} else if (mu <= -1.25e-73) {
tmp = NaChar / (1.0 + Math.exp((EAccept / KbT)));
} else if (mu <= -2.05e-140) {
tmp = (NaChar / t_0) + (NdChar / t_0);
} else if (mu <= 6.7e-276) {
tmp = (NaChar / (1.0 + Math.exp((((EAccept - mu) + (Vef + Ev)) / KbT)))) + (NdChar / (2.0 - ((((Ec - EDonor) - mu) - Vef) / KbT)));
} else if (mu <= 5.2e+62) {
tmp = t_2;
} else {
tmp = t_1;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = 1.0 + math.exp((Vef / KbT)) t_1 = (NdChar / (1.0 + math.exp((mu / KbT)))) + (NaChar / (1.0 + math.exp((-mu / KbT)))) t_2 = (NdChar / (1.0 + math.exp((((Vef - Ec) + (EDonor + mu)) / KbT)))) + (NaChar / ((2.0 + ((((KbT * EAccept) + (KbT * ((KbT * (Vef + Ev)) / KbT))) / KbT) / KbT)) - (mu / KbT))) tmp = 0 if mu <= -1.55e+87: tmp = t_1 elif mu <= -1.1e-34: tmp = t_2 elif mu <= -1.25e-73: tmp = NaChar / (1.0 + math.exp((EAccept / KbT))) elif mu <= -2.05e-140: tmp = (NaChar / t_0) + (NdChar / t_0) elif mu <= 6.7e-276: tmp = (NaChar / (1.0 + math.exp((((EAccept - mu) + (Vef + Ev)) / KbT)))) + (NdChar / (2.0 - ((((Ec - EDonor) - mu) - Vef) / KbT))) elif mu <= 5.2e+62: tmp = t_2 else: tmp = t_1 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(1.0 + exp(Float64(Vef / KbT))) t_1 = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(mu / KbT)))) + Float64(NaChar / Float64(1.0 + exp(Float64(Float64(-mu) / KbT))))) t_2 = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(Float64(Vef - Ec) + Float64(EDonor + mu)) / KbT)))) + Float64(NaChar / Float64(Float64(2.0 + Float64(Float64(Float64(Float64(KbT * EAccept) + Float64(KbT * Float64(Float64(KbT * Float64(Vef + Ev)) / KbT))) / KbT) / KbT)) - Float64(mu / KbT)))) tmp = 0.0 if (mu <= -1.55e+87) tmp = t_1; elseif (mu <= -1.1e-34) tmp = t_2; elseif (mu <= -1.25e-73) tmp = Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT)))); elseif (mu <= -2.05e-140) tmp = Float64(Float64(NaChar / t_0) + Float64(NdChar / t_0)); elseif (mu <= 6.7e-276) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(EAccept - mu) + Float64(Vef + Ev)) / KbT)))) + Float64(NdChar / Float64(2.0 - Float64(Float64(Float64(Float64(Ec - EDonor) - mu) - Vef) / KbT)))); elseif (mu <= 5.2e+62) tmp = t_2; else tmp = t_1; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = 1.0 + exp((Vef / KbT)); t_1 = (NdChar / (1.0 + exp((mu / KbT)))) + (NaChar / (1.0 + exp((-mu / KbT)))); t_2 = (NdChar / (1.0 + exp((((Vef - Ec) + (EDonor + mu)) / KbT)))) + (NaChar / ((2.0 + ((((KbT * EAccept) + (KbT * ((KbT * (Vef + Ev)) / KbT))) / KbT) / KbT)) - (mu / KbT))); tmp = 0.0; if (mu <= -1.55e+87) tmp = t_1; elseif (mu <= -1.1e-34) tmp = t_2; elseif (mu <= -1.25e-73) tmp = NaChar / (1.0 + exp((EAccept / KbT))); elseif (mu <= -2.05e-140) tmp = (NaChar / t_0) + (NdChar / t_0); elseif (mu <= 6.7e-276) tmp = (NaChar / (1.0 + exp((((EAccept - mu) + (Vef + Ev)) / KbT)))) + (NdChar / (2.0 - ((((Ec - EDonor) - mu) - Vef) / KbT))); elseif (mu <= 5.2e+62) tmp = t_2; else tmp = t_1; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(1.0 + N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NdChar / N[(1.0 + N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Exp[N[((-mu) / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(N[(Vef - Ec), $MachinePrecision] + N[(EDonor + mu), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(N[(2.0 + N[(N[(N[(N[(KbT * EAccept), $MachinePrecision] + N[(KbT * N[(N[(KbT * N[(Vef + Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision] - N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[mu, -1.55e+87], t$95$1, If[LessEqual[mu, -1.1e-34], t$95$2, If[LessEqual[mu, -1.25e-73], N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[mu, -2.05e-140], N[(N[(NaChar / t$95$0), $MachinePrecision] + N[(NdChar / t$95$0), $MachinePrecision]), $MachinePrecision], If[LessEqual[mu, 6.7e-276], N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(N[(EAccept - mu), $MachinePrecision] + N[(Vef + Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(2.0 - N[(N[(N[(N[(Ec - EDonor), $MachinePrecision] - mu), $MachinePrecision] - Vef), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[mu, 5.2e+62], t$95$2, t$95$1]]]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := 1 + e^{\frac{Vef}{KbT}}\\
t_1 := \frac{NdChar}{1 + e^{\frac{mu}{KbT}}} + \frac{NaChar}{1 + e^{\frac{-mu}{KbT}}}\\
t_2 := \frac{NdChar}{1 + e^{\frac{\left(Vef - Ec\right) + \left(EDonor + mu\right)}{KbT}}} + \frac{NaChar}{\left(2 + \frac{\frac{KbT \cdot EAccept + KbT \cdot \frac{KbT \cdot \left(Vef + Ev\right)}{KbT}}{KbT}}{KbT}\right) - \frac{mu}{KbT}}\\
\mathbf{if}\;mu \leq -1.55 \cdot 10^{+87}:\\
\;\;\;\;t_1\\
\mathbf{elif}\;mu \leq -1.1 \cdot 10^{-34}:\\
\;\;\;\;t_2\\
\mathbf{elif}\;mu \leq -1.25 \cdot 10^{-73}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}}\\
\mathbf{elif}\;mu \leq -2.05 \cdot 10^{-140}:\\
\;\;\;\;\frac{NaChar}{t_0} + \frac{NdChar}{t_0}\\
\mathbf{elif}\;mu \leq 6.7 \cdot 10^{-276}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{\left(EAccept - mu\right) + \left(Vef + Ev\right)}{KbT}}} + \frac{NdChar}{2 - \frac{\left(\left(Ec - EDonor\right) - mu\right) - Vef}{KbT}}\\
\mathbf{elif}\;mu \leq 5.2 \cdot 10^{+62}:\\
\;\;\;\;t_2\\
\mathbf{else}:\\
\;\;\;\;t_1\\
\end{array}
\end{array}
if mu < -1.55e87 or 5.19999999999999968e62 < mu Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 90.6%
Taylor expanded in mu around inf 79.8%
associate-*r/41.3%
mul-1-neg41.3%
Simplified79.8%
if -1.55e87 < mu < -1.0999999999999999e-34 or 6.69999999999999983e-276 < mu < 5.19999999999999968e62Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 71.7%
frac-add64.9%
associate-/r*70.6%
*-commutative70.6%
*-commutative70.6%
Applied egg-rr70.6%
frac-add70.5%
associate-/r*74.0%
*-commutative74.0%
*-commutative74.0%
distribute-lft-out75.2%
Applied egg-rr75.2%
if -1.0999999999999999e-34 < mu < -1.25e-73Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 73.1%
Taylor expanded in KbT around inf 59.3%
associate--l+59.3%
sub-neg59.3%
mul-1-neg59.3%
+-commutative59.3%
associate-+r+59.3%
+-commutative59.3%
associate-+r+59.3%
mul-1-neg59.3%
neg-sub059.3%
associate-+l-59.3%
div-sub59.3%
associate--r-59.3%
div-sub59.3%
neg-sub059.3%
+-commutative59.3%
sub-neg59.3%
div-sub59.6%
Simplified59.6%
Taylor expanded in EDonor around inf 45.5%
associate-/l*45.5%
Simplified45.5%
Taylor expanded in KbT around 0 73.2%
if -1.25e-73 < mu < -2.0500000000000001e-140Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 91.7%
Taylor expanded in EDonor around 0 91.7%
+-commutative39.1%
associate--l+39.1%
Simplified91.7%
Taylor expanded in Vef around inf 91.7%
if -2.0500000000000001e-140 < mu < 6.69999999999999983e-276Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 77.9%
associate--l+60.6%
sub-neg60.6%
mul-1-neg60.6%
+-commutative60.6%
associate-+r+60.6%
+-commutative60.6%
associate-+r+60.6%
mul-1-neg60.6%
neg-sub060.6%
associate-+l-60.6%
div-sub62.7%
associate--r-62.7%
div-sub62.7%
neg-sub062.7%
+-commutative62.7%
sub-neg62.7%
div-sub62.7%
Simplified80.1%
Final simplification78.6%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0
(+
(/ NaChar (+ 1.0 (exp (/ (+ (- EAccept mu) (+ Vef Ev)) KbT))))
(/ NdChar (+ 1.0 (exp (/ mu KbT)))))))
(if (<= Vef -4.7e+126)
t_0
(if (<= Vef -6.2e-92)
(+
(/ NdChar (+ 1.0 (exp (/ (+ (- Vef Ec) (+ EDonor mu)) KbT))))
(/ NaChar (+ 1.0 (exp (/ EAccept KbT)))))
(if (<= Vef 2.3e+103)
t_0
(+
(/ NaChar (+ 1.0 (exp (/ Vef KbT))))
(/ NdChar (+ 1.0 (exp (/ (+ Vef (- mu Ec)) KbT))))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar / (1.0 + exp((((EAccept - mu) + (Vef + Ev)) / KbT)))) + (NdChar / (1.0 + exp((mu / KbT))));
double tmp;
if (Vef <= -4.7e+126) {
tmp = t_0;
} else if (Vef <= -6.2e-92) {
tmp = (NdChar / (1.0 + exp((((Vef - Ec) + (EDonor + mu)) / KbT)))) + (NaChar / (1.0 + exp((EAccept / KbT))));
} else if (Vef <= 2.3e+103) {
tmp = t_0;
} else {
tmp = (NaChar / (1.0 + exp((Vef / KbT)))) + (NdChar / (1.0 + exp(((Vef + (mu - Ec)) / KbT))));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: tmp
t_0 = (nachar / (1.0d0 + exp((((eaccept - mu) + (vef + ev)) / kbt)))) + (ndchar / (1.0d0 + exp((mu / kbt))))
if (vef <= (-4.7d+126)) then
tmp = t_0
else if (vef <= (-6.2d-92)) then
tmp = (ndchar / (1.0d0 + exp((((vef - ec) + (edonor + mu)) / kbt)))) + (nachar / (1.0d0 + exp((eaccept / kbt))))
else if (vef <= 2.3d+103) then
tmp = t_0
else
tmp = (nachar / (1.0d0 + exp((vef / kbt)))) + (ndchar / (1.0d0 + exp(((vef + (mu - ec)) / kbt))))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar / (1.0 + Math.exp((((EAccept - mu) + (Vef + Ev)) / KbT)))) + (NdChar / (1.0 + Math.exp((mu / KbT))));
double tmp;
if (Vef <= -4.7e+126) {
tmp = t_0;
} else if (Vef <= -6.2e-92) {
tmp = (NdChar / (1.0 + Math.exp((((Vef - Ec) + (EDonor + mu)) / KbT)))) + (NaChar / (1.0 + Math.exp((EAccept / KbT))));
} else if (Vef <= 2.3e+103) {
tmp = t_0;
} else {
tmp = (NaChar / (1.0 + Math.exp((Vef / KbT)))) + (NdChar / (1.0 + Math.exp(((Vef + (mu - Ec)) / KbT))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = (NaChar / (1.0 + math.exp((((EAccept - mu) + (Vef + Ev)) / KbT)))) + (NdChar / (1.0 + math.exp((mu / KbT)))) tmp = 0 if Vef <= -4.7e+126: tmp = t_0 elif Vef <= -6.2e-92: tmp = (NdChar / (1.0 + math.exp((((Vef - Ec) + (EDonor + mu)) / KbT)))) + (NaChar / (1.0 + math.exp((EAccept / KbT)))) elif Vef <= 2.3e+103: tmp = t_0 else: tmp = (NaChar / (1.0 + math.exp((Vef / KbT)))) + (NdChar / (1.0 + math.exp(((Vef + (mu - Ec)) / KbT)))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(EAccept - mu) + Float64(Vef + Ev)) / KbT)))) + Float64(NdChar / Float64(1.0 + exp(Float64(mu / KbT))))) tmp = 0.0 if (Vef <= -4.7e+126) tmp = t_0; elseif (Vef <= -6.2e-92) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(Float64(Vef - Ec) + Float64(EDonor + mu)) / KbT)))) + Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT))))); elseif (Vef <= 2.3e+103) tmp = t_0; else tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Vef / KbT)))) + Float64(NdChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(mu - Ec)) / KbT))))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = (NaChar / (1.0 + exp((((EAccept - mu) + (Vef + Ev)) / KbT)))) + (NdChar / (1.0 + exp((mu / KbT)))); tmp = 0.0; if (Vef <= -4.7e+126) tmp = t_0; elseif (Vef <= -6.2e-92) tmp = (NdChar / (1.0 + exp((((Vef - Ec) + (EDonor + mu)) / KbT)))) + (NaChar / (1.0 + exp((EAccept / KbT)))); elseif (Vef <= 2.3e+103) tmp = t_0; else tmp = (NaChar / (1.0 + exp((Vef / KbT)))) + (NdChar / (1.0 + exp(((Vef + (mu - Ec)) / KbT)))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(N[(EAccept - mu), $MachinePrecision] + N[(Vef + Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(1.0 + N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[Vef, -4.7e+126], t$95$0, If[LessEqual[Vef, -6.2e-92], N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(N[(Vef - Ec), $MachinePrecision] + N[(EDonor + mu), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[Vef, 2.3e+103], t$95$0, N[(N[(NaChar / N[(1.0 + N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(mu - Ec), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{\left(EAccept - mu\right) + \left(Vef + Ev\right)}{KbT}}} + \frac{NdChar}{1 + e^{\frac{mu}{KbT}}}\\
\mathbf{if}\;Vef \leq -4.7 \cdot 10^{+126}:\\
\;\;\;\;t_0\\
\mathbf{elif}\;Vef \leq -6.2 \cdot 10^{-92}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{\left(Vef - Ec\right) + \left(EDonor + mu\right)}{KbT}}} + \frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}}\\
\mathbf{elif}\;Vef \leq 2.3 \cdot 10^{+103}:\\
\;\;\;\;t_0\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Vef}{KbT}}} + \frac{NdChar}{1 + e^{\frac{Vef + \left(mu - Ec\right)}{KbT}}}\\
\end{array}
\end{array}
if Vef < -4.6999999999999999e126 or -6.2000000000000002e-92 < Vef < 2.30000000000000008e103Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 78.5%
if -4.6999999999999999e126 < Vef < -6.2000000000000002e-92Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 79.3%
if 2.30000000000000008e103 < Vef Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 93.1%
Taylor expanded in EDonor around 0 93.0%
+-commutative28.9%
associate--l+28.9%
Simplified93.0%
Final simplification81.8%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NdChar (+ 1.0 (exp (/ (+ (- Vef Ec) (+ EDonor mu)) KbT))))))
(if (<= Ev -1.4e+153)
(+ t_0 (/ NaChar (+ 1.0 (exp (/ Ev KbT)))))
(if (<= Ev -1.9e-145)
(+
(/ NaChar (+ 1.0 (exp (/ Vef KbT))))
(/ NdChar (+ 1.0 (exp (/ (+ Vef (- mu Ec)) KbT)))))
(if (<= Ev 1.1e-58)
(+
(/ NaChar (+ 1.0 (exp (/ (+ (- EAccept mu) (+ Vef Ev)) KbT))))
(/ NdChar (+ 1.0 (exp (/ mu KbT)))))
(+ t_0 (/ NaChar (+ 1.0 (exp (/ EAccept KbT))))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (1.0 + exp((((Vef - Ec) + (EDonor + mu)) / KbT)));
double tmp;
if (Ev <= -1.4e+153) {
tmp = t_0 + (NaChar / (1.0 + exp((Ev / KbT))));
} else if (Ev <= -1.9e-145) {
tmp = (NaChar / (1.0 + exp((Vef / KbT)))) + (NdChar / (1.0 + exp(((Vef + (mu - Ec)) / KbT))));
} else if (Ev <= 1.1e-58) {
tmp = (NaChar / (1.0 + exp((((EAccept - mu) + (Vef + Ev)) / KbT)))) + (NdChar / (1.0 + exp((mu / KbT))));
} else {
tmp = t_0 + (NaChar / (1.0 + exp((EAccept / KbT))));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: tmp
t_0 = ndchar / (1.0d0 + exp((((vef - ec) + (edonor + mu)) / kbt)))
if (ev <= (-1.4d+153)) then
tmp = t_0 + (nachar / (1.0d0 + exp((ev / kbt))))
else if (ev <= (-1.9d-145)) then
tmp = (nachar / (1.0d0 + exp((vef / kbt)))) + (ndchar / (1.0d0 + exp(((vef + (mu - ec)) / kbt))))
else if (ev <= 1.1d-58) then
tmp = (nachar / (1.0d0 + exp((((eaccept - mu) + (vef + ev)) / kbt)))) + (ndchar / (1.0d0 + exp((mu / kbt))))
else
tmp = t_0 + (nachar / (1.0d0 + exp((eaccept / kbt))))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (1.0 + Math.exp((((Vef - Ec) + (EDonor + mu)) / KbT)));
double tmp;
if (Ev <= -1.4e+153) {
tmp = t_0 + (NaChar / (1.0 + Math.exp((Ev / KbT))));
} else if (Ev <= -1.9e-145) {
tmp = (NaChar / (1.0 + Math.exp((Vef / KbT)))) + (NdChar / (1.0 + Math.exp(((Vef + (mu - Ec)) / KbT))));
} else if (Ev <= 1.1e-58) {
tmp = (NaChar / (1.0 + Math.exp((((EAccept - mu) + (Vef + Ev)) / KbT)))) + (NdChar / (1.0 + Math.exp((mu / KbT))));
} else {
tmp = t_0 + (NaChar / (1.0 + Math.exp((EAccept / KbT))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NdChar / (1.0 + math.exp((((Vef - Ec) + (EDonor + mu)) / KbT))) tmp = 0 if Ev <= -1.4e+153: tmp = t_0 + (NaChar / (1.0 + math.exp((Ev / KbT)))) elif Ev <= -1.9e-145: tmp = (NaChar / (1.0 + math.exp((Vef / KbT)))) + (NdChar / (1.0 + math.exp(((Vef + (mu - Ec)) / KbT)))) elif Ev <= 1.1e-58: tmp = (NaChar / (1.0 + math.exp((((EAccept - mu) + (Vef + Ev)) / KbT)))) + (NdChar / (1.0 + math.exp((mu / KbT)))) else: tmp = t_0 + (NaChar / (1.0 + math.exp((EAccept / KbT)))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NdChar / Float64(1.0 + exp(Float64(Float64(Float64(Vef - Ec) + Float64(EDonor + mu)) / KbT)))) tmp = 0.0 if (Ev <= -1.4e+153) tmp = Float64(t_0 + Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT))))); elseif (Ev <= -1.9e-145) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Vef / KbT)))) + Float64(NdChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(mu - Ec)) / KbT))))); elseif (Ev <= 1.1e-58) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(EAccept - mu) + Float64(Vef + Ev)) / KbT)))) + Float64(NdChar / Float64(1.0 + exp(Float64(mu / KbT))))); else tmp = Float64(t_0 + Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT))))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NdChar / (1.0 + exp((((Vef - Ec) + (EDonor + mu)) / KbT))); tmp = 0.0; if (Ev <= -1.4e+153) tmp = t_0 + (NaChar / (1.0 + exp((Ev / KbT)))); elseif (Ev <= -1.9e-145) tmp = (NaChar / (1.0 + exp((Vef / KbT)))) + (NdChar / (1.0 + exp(((Vef + (mu - Ec)) / KbT)))); elseif (Ev <= 1.1e-58) tmp = (NaChar / (1.0 + exp((((EAccept - mu) + (Vef + Ev)) / KbT)))) + (NdChar / (1.0 + exp((mu / KbT)))); else tmp = t_0 + (NaChar / (1.0 + exp((EAccept / KbT)))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NdChar / N[(1.0 + N[Exp[N[(N[(N[(Vef - Ec), $MachinePrecision] + N[(EDonor + mu), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[Ev, -1.4e+153], N[(t$95$0 + N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[Ev, -1.9e-145], N[(N[(NaChar / N[(1.0 + N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(mu - Ec), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[Ev, 1.1e-58], N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(N[(EAccept - mu), $MachinePrecision] + N[(Vef + Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(1.0 + N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(t$95$0 + N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{1 + e^{\frac{\left(Vef - Ec\right) + \left(EDonor + mu\right)}{KbT}}}\\
\mathbf{if}\;Ev \leq -1.4 \cdot 10^{+153}:\\
\;\;\;\;t_0 + \frac{NaChar}{1 + e^{\frac{Ev}{KbT}}}\\
\mathbf{elif}\;Ev \leq -1.9 \cdot 10^{-145}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Vef}{KbT}}} + \frac{NdChar}{1 + e^{\frac{Vef + \left(mu - Ec\right)}{KbT}}}\\
\mathbf{elif}\;Ev \leq 1.1 \cdot 10^{-58}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{\left(EAccept - mu\right) + \left(Vef + Ev\right)}{KbT}}} + \frac{NdChar}{1 + e^{\frac{mu}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;t_0 + \frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}}\\
\end{array}
\end{array}
if Ev < -1.39999999999999993e153Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 93.6%
if -1.39999999999999993e153 < Ev < -1.9000000000000001e-145Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 77.0%
Taylor expanded in EDonor around 0 74.9%
+-commutative29.0%
associate--l+29.0%
Simplified74.9%
if -1.9000000000000001e-145 < Ev < 1.10000000000000003e-58Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 80.6%
if 1.10000000000000003e-58 < Ev Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 69.9%
Final simplification77.6%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (+ (/ NaChar (+ 1.0 (exp (/ (+ (- EAccept mu) (+ Vef Ev)) KbT)))) (/ NdChar (+ 1.0 (exp (/ (+ (- Vef Ec) (+ EDonor mu)) KbT))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NaChar / (1.0 + exp((((EAccept - mu) + (Vef + Ev)) / KbT)))) + (NdChar / (1.0 + exp((((Vef - Ec) + (EDonor + mu)) / KbT))));
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
code = (nachar / (1.0d0 + exp((((eaccept - mu) + (vef + ev)) / kbt)))) + (ndchar / (1.0d0 + exp((((vef - ec) + (edonor + mu)) / kbt))))
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NaChar / (1.0 + Math.exp((((EAccept - mu) + (Vef + Ev)) / KbT)))) + (NdChar / (1.0 + Math.exp((((Vef - Ec) + (EDonor + mu)) / KbT))));
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return (NaChar / (1.0 + math.exp((((EAccept - mu) + (Vef + Ev)) / KbT)))) + (NdChar / (1.0 + math.exp((((Vef - Ec) + (EDonor + mu)) / KbT))))
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(EAccept - mu) + Float64(Vef + Ev)) / KbT)))) + Float64(NdChar / Float64(1.0 + exp(Float64(Float64(Float64(Vef - Ec) + Float64(EDonor + mu)) / KbT))))) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = (NaChar / (1.0 + exp((((EAccept - mu) + (Vef + Ev)) / KbT)))) + (NdChar / (1.0 + exp((((Vef - Ec) + (EDonor + mu)) / KbT)))); end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(N[(EAccept - mu), $MachinePrecision] + N[(Vef + Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(1.0 + N[Exp[N[(N[(N[(Vef - Ec), $MachinePrecision] + N[(EDonor + mu), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{NaChar}{1 + e^{\frac{\left(EAccept - mu\right) + \left(Vef + Ev\right)}{KbT}}} + \frac{NdChar}{1 + e^{\frac{\left(Vef - Ec\right) + \left(EDonor + mu\right)}{KbT}}}
\end{array}
Initial program 100.0%
Simplified100.0%
Final simplification100.0%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (or (<= mu -4.7e+98) (not (<= mu 4.4e+25)))
(+
(/ NaChar (+ 1.0 (exp (/ (+ (- EAccept mu) (+ Vef Ev)) KbT))))
(/ NdChar (+ 1.0 (exp (/ mu KbT)))))
(+
(/ NaChar (+ 1.0 (exp (/ Vef KbT))))
(/ NdChar (+ 1.0 (exp (/ (+ Vef (- mu Ec)) KbT)))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((mu <= -4.7e+98) || !(mu <= 4.4e+25)) {
tmp = (NaChar / (1.0 + exp((((EAccept - mu) + (Vef + Ev)) / KbT)))) + (NdChar / (1.0 + exp((mu / KbT))));
} else {
tmp = (NaChar / (1.0 + exp((Vef / KbT)))) + (NdChar / (1.0 + exp(((Vef + (mu - Ec)) / KbT))));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if ((mu <= (-4.7d+98)) .or. (.not. (mu <= 4.4d+25))) then
tmp = (nachar / (1.0d0 + exp((((eaccept - mu) + (vef + ev)) / kbt)))) + (ndchar / (1.0d0 + exp((mu / kbt))))
else
tmp = (nachar / (1.0d0 + exp((vef / kbt)))) + (ndchar / (1.0d0 + exp(((vef + (mu - ec)) / kbt))))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((mu <= -4.7e+98) || !(mu <= 4.4e+25)) {
tmp = (NaChar / (1.0 + Math.exp((((EAccept - mu) + (Vef + Ev)) / KbT)))) + (NdChar / (1.0 + Math.exp((mu / KbT))));
} else {
tmp = (NaChar / (1.0 + Math.exp((Vef / KbT)))) + (NdChar / (1.0 + Math.exp(((Vef + (mu - Ec)) / KbT))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if (mu <= -4.7e+98) or not (mu <= 4.4e+25): tmp = (NaChar / (1.0 + math.exp((((EAccept - mu) + (Vef + Ev)) / KbT)))) + (NdChar / (1.0 + math.exp((mu / KbT)))) else: tmp = (NaChar / (1.0 + math.exp((Vef / KbT)))) + (NdChar / (1.0 + math.exp(((Vef + (mu - Ec)) / KbT)))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if ((mu <= -4.7e+98) || !(mu <= 4.4e+25)) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(EAccept - mu) + Float64(Vef + Ev)) / KbT)))) + Float64(NdChar / Float64(1.0 + exp(Float64(mu / KbT))))); else tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Vef / KbT)))) + Float64(NdChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(mu - Ec)) / KbT))))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if ((mu <= -4.7e+98) || ~((mu <= 4.4e+25))) tmp = (NaChar / (1.0 + exp((((EAccept - mu) + (Vef + Ev)) / KbT)))) + (NdChar / (1.0 + exp((mu / KbT)))); else tmp = (NaChar / (1.0 + exp((Vef / KbT)))) + (NdChar / (1.0 + exp(((Vef + (mu - Ec)) / KbT)))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[Or[LessEqual[mu, -4.7e+98], N[Not[LessEqual[mu, 4.4e+25]], $MachinePrecision]], N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(N[(EAccept - mu), $MachinePrecision] + N[(Vef + Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(1.0 + N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar / N[(1.0 + N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(mu - Ec), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;mu \leq -4.7 \cdot 10^{+98} \lor \neg \left(mu \leq 4.4 \cdot 10^{+25}\right):\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{\left(EAccept - mu\right) + \left(Vef + Ev\right)}{KbT}}} + \frac{NdChar}{1 + e^{\frac{mu}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Vef}{KbT}}} + \frac{NdChar}{1 + e^{\frac{Vef + \left(mu - Ec\right)}{KbT}}}\\
\end{array}
\end{array}
if mu < -4.6999999999999997e98 or 4.4000000000000001e25 < mu Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 89.9%
if -4.6999999999999997e98 < mu < 4.4000000000000001e25Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 79.1%
Taylor expanded in EDonor around 0 76.6%
+-commutative22.5%
associate--l+22.5%
Simplified76.6%
Final simplification81.9%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (or (<= mu -2.65e+132) (not (<= mu 4.9e+63)))
(+
(/ NdChar (+ 1.0 (exp (/ mu KbT))))
(/ NaChar (+ 1.0 (exp (/ (- mu) KbT)))))
(+
(/ NaChar (+ 1.0 (exp (/ Vef KbT))))
(/ NdChar (+ 1.0 (exp (/ (+ Vef (- mu Ec)) KbT)))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((mu <= -2.65e+132) || !(mu <= 4.9e+63)) {
tmp = (NdChar / (1.0 + exp((mu / KbT)))) + (NaChar / (1.0 + exp((-mu / KbT))));
} else {
tmp = (NaChar / (1.0 + exp((Vef / KbT)))) + (NdChar / (1.0 + exp(((Vef + (mu - Ec)) / KbT))));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if ((mu <= (-2.65d+132)) .or. (.not. (mu <= 4.9d+63))) then
tmp = (ndchar / (1.0d0 + exp((mu / kbt)))) + (nachar / (1.0d0 + exp((-mu / kbt))))
else
tmp = (nachar / (1.0d0 + exp((vef / kbt)))) + (ndchar / (1.0d0 + exp(((vef + (mu - ec)) / kbt))))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((mu <= -2.65e+132) || !(mu <= 4.9e+63)) {
tmp = (NdChar / (1.0 + Math.exp((mu / KbT)))) + (NaChar / (1.0 + Math.exp((-mu / KbT))));
} else {
tmp = (NaChar / (1.0 + Math.exp((Vef / KbT)))) + (NdChar / (1.0 + Math.exp(((Vef + (mu - Ec)) / KbT))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if (mu <= -2.65e+132) or not (mu <= 4.9e+63): tmp = (NdChar / (1.0 + math.exp((mu / KbT)))) + (NaChar / (1.0 + math.exp((-mu / KbT)))) else: tmp = (NaChar / (1.0 + math.exp((Vef / KbT)))) + (NdChar / (1.0 + math.exp(((Vef + (mu - Ec)) / KbT)))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if ((mu <= -2.65e+132) || !(mu <= 4.9e+63)) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(mu / KbT)))) + Float64(NaChar / Float64(1.0 + exp(Float64(Float64(-mu) / KbT))))); else tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Vef / KbT)))) + Float64(NdChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(mu - Ec)) / KbT))))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if ((mu <= -2.65e+132) || ~((mu <= 4.9e+63))) tmp = (NdChar / (1.0 + exp((mu / KbT)))) + (NaChar / (1.0 + exp((-mu / KbT)))); else tmp = (NaChar / (1.0 + exp((Vef / KbT)))) + (NdChar / (1.0 + exp(((Vef + (mu - Ec)) / KbT)))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[Or[LessEqual[mu, -2.65e+132], N[Not[LessEqual[mu, 4.9e+63]], $MachinePrecision]], N[(N[(NdChar / N[(1.0 + N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Exp[N[((-mu) / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar / N[(1.0 + N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(mu - Ec), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;mu \leq -2.65 \cdot 10^{+132} \lor \neg \left(mu \leq 4.9 \cdot 10^{+63}\right):\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{mu}{KbT}}} + \frac{NaChar}{1 + e^{\frac{-mu}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Vef}{KbT}}} + \frac{NdChar}{1 + e^{\frac{Vef + \left(mu - Ec\right)}{KbT}}}\\
\end{array}
\end{array}
if mu < -2.65e132 or 4.8999999999999997e63 < mu Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 90.3%
Taylor expanded in mu around inf 83.4%
associate-*r/42.1%
mul-1-neg42.1%
Simplified83.4%
if -2.65e132 < mu < 4.8999999999999997e63Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 77.7%
Taylor expanded in EDonor around 0 74.8%
+-commutative22.8%
associate--l+22.8%
Simplified74.8%
Final simplification77.8%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NdChar (+ 1.0 (exp (/ (+ (- Vef Ec) (+ EDonor mu)) KbT)))))
(t_1
(+
(/ NaChar (+ 1.0 (exp (/ (+ (- EAccept mu) (+ Vef Ev)) KbT))))
(/ NdChar (- 2.0 (/ (- (- (- Ec EDonor) mu) Vef) KbT))))))
(if (<= NaChar -1.4e-14)
t_1
(if (<= NaChar 6.6e-162)
(+ t_0 (/ NaChar (+ 2.0 (/ Vef KbT))))
(if (or (<= NaChar 1.45e-146) (not (<= NaChar 1.9e-43)))
t_1
(+ t_0 (/ NaChar (/ (- (+ EAccept (+ Vef Ev)) mu) KbT))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (1.0 + exp((((Vef - Ec) + (EDonor + mu)) / KbT)));
double t_1 = (NaChar / (1.0 + exp((((EAccept - mu) + (Vef + Ev)) / KbT)))) + (NdChar / (2.0 - ((((Ec - EDonor) - mu) - Vef) / KbT)));
double tmp;
if (NaChar <= -1.4e-14) {
tmp = t_1;
} else if (NaChar <= 6.6e-162) {
tmp = t_0 + (NaChar / (2.0 + (Vef / KbT)));
} else if ((NaChar <= 1.45e-146) || !(NaChar <= 1.9e-43)) {
tmp = t_1;
} else {
tmp = t_0 + (NaChar / (((EAccept + (Vef + Ev)) - mu) / KbT));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = ndchar / (1.0d0 + exp((((vef - ec) + (edonor + mu)) / kbt)))
t_1 = (nachar / (1.0d0 + exp((((eaccept - mu) + (vef + ev)) / kbt)))) + (ndchar / (2.0d0 - ((((ec - edonor) - mu) - vef) / kbt)))
if (nachar <= (-1.4d-14)) then
tmp = t_1
else if (nachar <= 6.6d-162) then
tmp = t_0 + (nachar / (2.0d0 + (vef / kbt)))
else if ((nachar <= 1.45d-146) .or. (.not. (nachar <= 1.9d-43))) then
tmp = t_1
else
tmp = t_0 + (nachar / (((eaccept + (vef + ev)) - mu) / kbt))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (1.0 + Math.exp((((Vef - Ec) + (EDonor + mu)) / KbT)));
double t_1 = (NaChar / (1.0 + Math.exp((((EAccept - mu) + (Vef + Ev)) / KbT)))) + (NdChar / (2.0 - ((((Ec - EDonor) - mu) - Vef) / KbT)));
double tmp;
if (NaChar <= -1.4e-14) {
tmp = t_1;
} else if (NaChar <= 6.6e-162) {
tmp = t_0 + (NaChar / (2.0 + (Vef / KbT)));
} else if ((NaChar <= 1.45e-146) || !(NaChar <= 1.9e-43)) {
tmp = t_1;
} else {
tmp = t_0 + (NaChar / (((EAccept + (Vef + Ev)) - mu) / KbT));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NdChar / (1.0 + math.exp((((Vef - Ec) + (EDonor + mu)) / KbT))) t_1 = (NaChar / (1.0 + math.exp((((EAccept - mu) + (Vef + Ev)) / KbT)))) + (NdChar / (2.0 - ((((Ec - EDonor) - mu) - Vef) / KbT))) tmp = 0 if NaChar <= -1.4e-14: tmp = t_1 elif NaChar <= 6.6e-162: tmp = t_0 + (NaChar / (2.0 + (Vef / KbT))) elif (NaChar <= 1.45e-146) or not (NaChar <= 1.9e-43): tmp = t_1 else: tmp = t_0 + (NaChar / (((EAccept + (Vef + Ev)) - mu) / KbT)) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NdChar / Float64(1.0 + exp(Float64(Float64(Float64(Vef - Ec) + Float64(EDonor + mu)) / KbT)))) t_1 = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(EAccept - mu) + Float64(Vef + Ev)) / KbT)))) + Float64(NdChar / Float64(2.0 - Float64(Float64(Float64(Float64(Ec - EDonor) - mu) - Vef) / KbT)))) tmp = 0.0 if (NaChar <= -1.4e-14) tmp = t_1; elseif (NaChar <= 6.6e-162) tmp = Float64(t_0 + Float64(NaChar / Float64(2.0 + Float64(Vef / KbT)))); elseif ((NaChar <= 1.45e-146) || !(NaChar <= 1.9e-43)) tmp = t_1; else tmp = Float64(t_0 + Float64(NaChar / Float64(Float64(Float64(EAccept + Float64(Vef + Ev)) - mu) / KbT))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NdChar / (1.0 + exp((((Vef - Ec) + (EDonor + mu)) / KbT))); t_1 = (NaChar / (1.0 + exp((((EAccept - mu) + (Vef + Ev)) / KbT)))) + (NdChar / (2.0 - ((((Ec - EDonor) - mu) - Vef) / KbT))); tmp = 0.0; if (NaChar <= -1.4e-14) tmp = t_1; elseif (NaChar <= 6.6e-162) tmp = t_0 + (NaChar / (2.0 + (Vef / KbT))); elseif ((NaChar <= 1.45e-146) || ~((NaChar <= 1.9e-43))) tmp = t_1; else tmp = t_0 + (NaChar / (((EAccept + (Vef + Ev)) - mu) / KbT)); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NdChar / N[(1.0 + N[Exp[N[(N[(N[(Vef - Ec), $MachinePrecision] + N[(EDonor + mu), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(N[(EAccept - mu), $MachinePrecision] + N[(Vef + Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(2.0 - N[(N[(N[(N[(Ec - EDonor), $MachinePrecision] - mu), $MachinePrecision] - Vef), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -1.4e-14], t$95$1, If[LessEqual[NaChar, 6.6e-162], N[(t$95$0 + N[(NaChar / N[(2.0 + N[(Vef / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[Or[LessEqual[NaChar, 1.45e-146], N[Not[LessEqual[NaChar, 1.9e-43]], $MachinePrecision]], t$95$1, N[(t$95$0 + N[(NaChar / N[(N[(N[(EAccept + N[(Vef + Ev), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{1 + e^{\frac{\left(Vef - Ec\right) + \left(EDonor + mu\right)}{KbT}}}\\
t_1 := \frac{NaChar}{1 + e^{\frac{\left(EAccept - mu\right) + \left(Vef + Ev\right)}{KbT}}} + \frac{NdChar}{2 - \frac{\left(\left(Ec - EDonor\right) - mu\right) - Vef}{KbT}}\\
\mathbf{if}\;NaChar \leq -1.4 \cdot 10^{-14}:\\
\;\;\;\;t_1\\
\mathbf{elif}\;NaChar \leq 6.6 \cdot 10^{-162}:\\
\;\;\;\;t_0 + \frac{NaChar}{2 + \frac{Vef}{KbT}}\\
\mathbf{elif}\;NaChar \leq 1.45 \cdot 10^{-146} \lor \neg \left(NaChar \leq 1.9 \cdot 10^{-43}\right):\\
\;\;\;\;t_1\\
\mathbf{else}:\\
\;\;\;\;t_0 + \frac{NaChar}{\frac{\left(EAccept + \left(Vef + Ev\right)\right) - mu}{KbT}}\\
\end{array}
\end{array}
if NaChar < -1.4e-14 or 6.60000000000000026e-162 < NaChar < 1.45000000000000005e-146 or 1.89999999999999985e-43 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 64.6%
associate--l+43.3%
sub-neg43.3%
mul-1-neg43.3%
+-commutative43.3%
associate-+r+43.3%
+-commutative43.3%
associate-+r+43.3%
mul-1-neg43.3%
neg-sub043.3%
associate-+l-43.3%
div-sub44.0%
associate--r-44.0%
div-sub45.5%
neg-sub045.5%
+-commutative45.5%
sub-neg45.5%
div-sub46.3%
Simplified72.5%
if -1.4e-14 < NaChar < 6.60000000000000026e-162Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 77.7%
Taylor expanded in Vef around 0 72.5%
if 1.45000000000000005e-146 < NaChar < 1.89999999999999985e-43Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 67.4%
Taylor expanded in KbT around 0 73.2%
Final simplification72.5%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (or (<= NaChar -2e+30) (not (<= NaChar 7200.0)))
(+
(/ NaChar (+ 1.0 (exp (/ (+ (- EAccept mu) (+ Vef Ev)) KbT))))
(/ NdChar 2.0))
(+
(/ NdChar (+ 1.0 (exp (/ (+ (- Vef Ec) (+ EDonor mu)) KbT))))
(/ NaChar (+ 2.0 (/ Vef KbT))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NaChar <= -2e+30) || !(NaChar <= 7200.0)) {
tmp = (NaChar / (1.0 + exp((((EAccept - mu) + (Vef + Ev)) / KbT)))) + (NdChar / 2.0);
} else {
tmp = (NdChar / (1.0 + exp((((Vef - Ec) + (EDonor + mu)) / KbT)))) + (NaChar / (2.0 + (Vef / KbT)));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if ((nachar <= (-2d+30)) .or. (.not. (nachar <= 7200.0d0))) then
tmp = (nachar / (1.0d0 + exp((((eaccept - mu) + (vef + ev)) / kbt)))) + (ndchar / 2.0d0)
else
tmp = (ndchar / (1.0d0 + exp((((vef - ec) + (edonor + mu)) / kbt)))) + (nachar / (2.0d0 + (vef / kbt)))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NaChar <= -2e+30) || !(NaChar <= 7200.0)) {
tmp = (NaChar / (1.0 + Math.exp((((EAccept - mu) + (Vef + Ev)) / KbT)))) + (NdChar / 2.0);
} else {
tmp = (NdChar / (1.0 + Math.exp((((Vef - Ec) + (EDonor + mu)) / KbT)))) + (NaChar / (2.0 + (Vef / KbT)));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if (NaChar <= -2e+30) or not (NaChar <= 7200.0): tmp = (NaChar / (1.0 + math.exp((((EAccept - mu) + (Vef + Ev)) / KbT)))) + (NdChar / 2.0) else: tmp = (NdChar / (1.0 + math.exp((((Vef - Ec) + (EDonor + mu)) / KbT)))) + (NaChar / (2.0 + (Vef / KbT))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if ((NaChar <= -2e+30) || !(NaChar <= 7200.0)) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(EAccept - mu) + Float64(Vef + Ev)) / KbT)))) + Float64(NdChar / 2.0)); else tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(Float64(Vef - Ec) + Float64(EDonor + mu)) / KbT)))) + Float64(NaChar / Float64(2.0 + Float64(Vef / KbT)))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if ((NaChar <= -2e+30) || ~((NaChar <= 7200.0))) tmp = (NaChar / (1.0 + exp((((EAccept - mu) + (Vef + Ev)) / KbT)))) + (NdChar / 2.0); else tmp = (NdChar / (1.0 + exp((((Vef - Ec) + (EDonor + mu)) / KbT)))) + (NaChar / (2.0 + (Vef / KbT))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[Or[LessEqual[NaChar, -2e+30], N[Not[LessEqual[NaChar, 7200.0]], $MachinePrecision]], N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(N[(EAccept - mu), $MachinePrecision] + N[(Vef + Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(N[(Vef - Ec), $MachinePrecision] + N[(EDonor + mu), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(2.0 + N[(Vef / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NaChar \leq -2 \cdot 10^{+30} \lor \neg \left(NaChar \leq 7200\right):\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{\left(EAccept - mu\right) + \left(Vef + Ev\right)}{KbT}}} + \frac{NdChar}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{\left(Vef - Ec\right) + \left(EDonor + mu\right)}{KbT}}} + \frac{NaChar}{2 + \frac{Vef}{KbT}}\\
\end{array}
\end{array}
if NaChar < -2e30 or 7200 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 61.7%
if -2e30 < NaChar < 7200Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 77.4%
Taylor expanded in Vef around 0 67.7%
Final simplification64.8%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (or (<= NaChar -2.55e+27) (not (<= NaChar 26000.0)))
(+
(/ NaChar (+ 1.0 (exp (/ (+ (- EAccept mu) (+ Vef Ev)) KbT))))
(/ NdChar (+ 2.0 (/ mu KbT))))
(+
(/ NdChar (+ 1.0 (exp (/ (+ (- Vef Ec) (+ EDonor mu)) KbT))))
(/ NaChar (+ 2.0 (/ Vef KbT))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NaChar <= -2.55e+27) || !(NaChar <= 26000.0)) {
tmp = (NaChar / (1.0 + exp((((EAccept - mu) + (Vef + Ev)) / KbT)))) + (NdChar / (2.0 + (mu / KbT)));
} else {
tmp = (NdChar / (1.0 + exp((((Vef - Ec) + (EDonor + mu)) / KbT)))) + (NaChar / (2.0 + (Vef / KbT)));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if ((nachar <= (-2.55d+27)) .or. (.not. (nachar <= 26000.0d0))) then
tmp = (nachar / (1.0d0 + exp((((eaccept - mu) + (vef + ev)) / kbt)))) + (ndchar / (2.0d0 + (mu / kbt)))
else
tmp = (ndchar / (1.0d0 + exp((((vef - ec) + (edonor + mu)) / kbt)))) + (nachar / (2.0d0 + (vef / kbt)))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NaChar <= -2.55e+27) || !(NaChar <= 26000.0)) {
tmp = (NaChar / (1.0 + Math.exp((((EAccept - mu) + (Vef + Ev)) / KbT)))) + (NdChar / (2.0 + (mu / KbT)));
} else {
tmp = (NdChar / (1.0 + Math.exp((((Vef - Ec) + (EDonor + mu)) / KbT)))) + (NaChar / (2.0 + (Vef / KbT)));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if (NaChar <= -2.55e+27) or not (NaChar <= 26000.0): tmp = (NaChar / (1.0 + math.exp((((EAccept - mu) + (Vef + Ev)) / KbT)))) + (NdChar / (2.0 + (mu / KbT))) else: tmp = (NdChar / (1.0 + math.exp((((Vef - Ec) + (EDonor + mu)) / KbT)))) + (NaChar / (2.0 + (Vef / KbT))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if ((NaChar <= -2.55e+27) || !(NaChar <= 26000.0)) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(EAccept - mu) + Float64(Vef + Ev)) / KbT)))) + Float64(NdChar / Float64(2.0 + Float64(mu / KbT)))); else tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(Float64(Vef - Ec) + Float64(EDonor + mu)) / KbT)))) + Float64(NaChar / Float64(2.0 + Float64(Vef / KbT)))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if ((NaChar <= -2.55e+27) || ~((NaChar <= 26000.0))) tmp = (NaChar / (1.0 + exp((((EAccept - mu) + (Vef + Ev)) / KbT)))) + (NdChar / (2.0 + (mu / KbT))); else tmp = (NdChar / (1.0 + exp((((Vef - Ec) + (EDonor + mu)) / KbT)))) + (NaChar / (2.0 + (Vef / KbT))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[Or[LessEqual[NaChar, -2.55e+27], N[Not[LessEqual[NaChar, 26000.0]], $MachinePrecision]], N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(N[(EAccept - mu), $MachinePrecision] + N[(Vef + Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(2.0 + N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(N[(Vef - Ec), $MachinePrecision] + N[(EDonor + mu), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(2.0 + N[(Vef / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NaChar \leq -2.55 \cdot 10^{+27} \lor \neg \left(NaChar \leq 26000\right):\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{\left(EAccept - mu\right) + \left(Vef + Ev\right)}{KbT}}} + \frac{NdChar}{2 + \frac{mu}{KbT}}\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{\left(Vef - Ec\right) + \left(EDonor + mu\right)}{KbT}}} + \frac{NaChar}{2 + \frac{Vef}{KbT}}\\
\end{array}
\end{array}
if NaChar < -2.55e27 or 26000 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 76.9%
Taylor expanded in mu around 0 65.4%
if -2.55e27 < NaChar < 26000Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 77.4%
Taylor expanded in Vef around 0 67.7%
Final simplification66.6%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (or (<= NaChar -7e+28) (not (<= NaChar 1650.0)))
(+
(/ NaChar (+ 1.0 (exp (/ (+ (- EAccept mu) (+ Vef Ev)) KbT))))
(/ NdChar 2.0))
(+
(/ NdChar (+ 1.0 (exp (/ (+ Vef (- mu Ec)) KbT))))
(/ NaChar (+ 2.0 (/ Vef KbT))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NaChar <= -7e+28) || !(NaChar <= 1650.0)) {
tmp = (NaChar / (1.0 + exp((((EAccept - mu) + (Vef + Ev)) / KbT)))) + (NdChar / 2.0);
} else {
tmp = (NdChar / (1.0 + exp(((Vef + (mu - Ec)) / KbT)))) + (NaChar / (2.0 + (Vef / KbT)));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if ((nachar <= (-7d+28)) .or. (.not. (nachar <= 1650.0d0))) then
tmp = (nachar / (1.0d0 + exp((((eaccept - mu) + (vef + ev)) / kbt)))) + (ndchar / 2.0d0)
else
tmp = (ndchar / (1.0d0 + exp(((vef + (mu - ec)) / kbt)))) + (nachar / (2.0d0 + (vef / kbt)))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NaChar <= -7e+28) || !(NaChar <= 1650.0)) {
tmp = (NaChar / (1.0 + Math.exp((((EAccept - mu) + (Vef + Ev)) / KbT)))) + (NdChar / 2.0);
} else {
tmp = (NdChar / (1.0 + Math.exp(((Vef + (mu - Ec)) / KbT)))) + (NaChar / (2.0 + (Vef / KbT)));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if (NaChar <= -7e+28) or not (NaChar <= 1650.0): tmp = (NaChar / (1.0 + math.exp((((EAccept - mu) + (Vef + Ev)) / KbT)))) + (NdChar / 2.0) else: tmp = (NdChar / (1.0 + math.exp(((Vef + (mu - Ec)) / KbT)))) + (NaChar / (2.0 + (Vef / KbT))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if ((NaChar <= -7e+28) || !(NaChar <= 1650.0)) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(EAccept - mu) + Float64(Vef + Ev)) / KbT)))) + Float64(NdChar / 2.0)); else tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(mu - Ec)) / KbT)))) + Float64(NaChar / Float64(2.0 + Float64(Vef / KbT)))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if ((NaChar <= -7e+28) || ~((NaChar <= 1650.0))) tmp = (NaChar / (1.0 + exp((((EAccept - mu) + (Vef + Ev)) / KbT)))) + (NdChar / 2.0); else tmp = (NdChar / (1.0 + exp(((Vef + (mu - Ec)) / KbT)))) + (NaChar / (2.0 + (Vef / KbT))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[Or[LessEqual[NaChar, -7e+28], N[Not[LessEqual[NaChar, 1650.0]], $MachinePrecision]], N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(N[(EAccept - mu), $MachinePrecision] + N[(Vef + Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(mu - Ec), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(2.0 + N[(Vef / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NaChar \leq -7 \cdot 10^{+28} \lor \neg \left(NaChar \leq 1650\right):\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{\left(EAccept - mu\right) + \left(Vef + Ev\right)}{KbT}}} + \frac{NdChar}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{Vef + \left(mu - Ec\right)}{KbT}}} + \frac{NaChar}{2 + \frac{Vef}{KbT}}\\
\end{array}
\end{array}
if NaChar < -6.9999999999999999e28 or 1650 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 61.7%
if -6.9999999999999999e28 < NaChar < 1650Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 77.4%
Taylor expanded in EDonor around 0 73.8%
+-commutative38.6%
associate--l+38.6%
Simplified73.8%
Taylor expanded in Vef around 0 63.3%
Final simplification62.6%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NdChar (+ 1.0 (exp (/ (+ (- Vef Ec) (+ EDonor mu)) KbT))))))
(if (<= NdChar -4.8e+71)
(+ t_0 (/ KbT (/ Ev NaChar)))
(if (<= NdChar 2e+184)
(+
(/ NaChar (+ 1.0 (exp (/ (+ (- EAccept mu) (+ Vef Ev)) KbT))))
(/ NdChar 2.0))
(+ t_0 (/ NaChar (/ EAccept KbT)))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (1.0 + exp((((Vef - Ec) + (EDonor + mu)) / KbT)));
double tmp;
if (NdChar <= -4.8e+71) {
tmp = t_0 + (KbT / (Ev / NaChar));
} else if (NdChar <= 2e+184) {
tmp = (NaChar / (1.0 + exp((((EAccept - mu) + (Vef + Ev)) / KbT)))) + (NdChar / 2.0);
} else {
tmp = t_0 + (NaChar / (EAccept / KbT));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: tmp
t_0 = ndchar / (1.0d0 + exp((((vef - ec) + (edonor + mu)) / kbt)))
if (ndchar <= (-4.8d+71)) then
tmp = t_0 + (kbt / (ev / nachar))
else if (ndchar <= 2d+184) then
tmp = (nachar / (1.0d0 + exp((((eaccept - mu) + (vef + ev)) / kbt)))) + (ndchar / 2.0d0)
else
tmp = t_0 + (nachar / (eaccept / kbt))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (1.0 + Math.exp((((Vef - Ec) + (EDonor + mu)) / KbT)));
double tmp;
if (NdChar <= -4.8e+71) {
tmp = t_0 + (KbT / (Ev / NaChar));
} else if (NdChar <= 2e+184) {
tmp = (NaChar / (1.0 + Math.exp((((EAccept - mu) + (Vef + Ev)) / KbT)))) + (NdChar / 2.0);
} else {
tmp = t_0 + (NaChar / (EAccept / KbT));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NdChar / (1.0 + math.exp((((Vef - Ec) + (EDonor + mu)) / KbT))) tmp = 0 if NdChar <= -4.8e+71: tmp = t_0 + (KbT / (Ev / NaChar)) elif NdChar <= 2e+184: tmp = (NaChar / (1.0 + math.exp((((EAccept - mu) + (Vef + Ev)) / KbT)))) + (NdChar / 2.0) else: tmp = t_0 + (NaChar / (EAccept / KbT)) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NdChar / Float64(1.0 + exp(Float64(Float64(Float64(Vef - Ec) + Float64(EDonor + mu)) / KbT)))) tmp = 0.0 if (NdChar <= -4.8e+71) tmp = Float64(t_0 + Float64(KbT / Float64(Ev / NaChar))); elseif (NdChar <= 2e+184) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(EAccept - mu) + Float64(Vef + Ev)) / KbT)))) + Float64(NdChar / 2.0)); else tmp = Float64(t_0 + Float64(NaChar / Float64(EAccept / KbT))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NdChar / (1.0 + exp((((Vef - Ec) + (EDonor + mu)) / KbT))); tmp = 0.0; if (NdChar <= -4.8e+71) tmp = t_0 + (KbT / (Ev / NaChar)); elseif (NdChar <= 2e+184) tmp = (NaChar / (1.0 + exp((((EAccept - mu) + (Vef + Ev)) / KbT)))) + (NdChar / 2.0); else tmp = t_0 + (NaChar / (EAccept / KbT)); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NdChar / N[(1.0 + N[Exp[N[(N[(N[(Vef - Ec), $MachinePrecision] + N[(EDonor + mu), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NdChar, -4.8e+71], N[(t$95$0 + N[(KbT / N[(Ev / NaChar), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NdChar, 2e+184], N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(N[(EAccept - mu), $MachinePrecision] + N[(Vef + Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision], N[(t$95$0 + N[(NaChar / N[(EAccept / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{1 + e^{\frac{\left(Vef - Ec\right) + \left(EDonor + mu\right)}{KbT}}}\\
\mathbf{if}\;NdChar \leq -4.8 \cdot 10^{+71}:\\
\;\;\;\;t_0 + \frac{KbT}{\frac{Ev}{NaChar}}\\
\mathbf{elif}\;NdChar \leq 2 \cdot 10^{+184}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{\left(EAccept - mu\right) + \left(Vef + Ev\right)}{KbT}}} + \frac{NdChar}{2}\\
\mathbf{else}:\\
\;\;\;\;t_0 + \frac{NaChar}{\frac{EAccept}{KbT}}\\
\end{array}
\end{array}
if NdChar < -4.79999999999999961e71Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 59.7%
Taylor expanded in Ev around inf 53.6%
associate-/l*53.7%
Simplified53.7%
if -4.79999999999999961e71 < NdChar < 2.00000000000000003e184Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 55.1%
if 2.00000000000000003e184 < NdChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 70.0%
Taylor expanded in EAccept around inf 53.7%
Final simplification54.8%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (<= NdChar -1.45e+72)
(+
(/ NdChar (+ 1.0 (exp (/ (+ (- Vef Ec) (+ EDonor mu)) KbT))))
(/ KbT (/ Ev NaChar)))
(if (<= NdChar 1.25e+100)
(+
(/ NaChar (+ 1.0 (exp (/ (+ (- EAccept mu) (+ Vef Ev)) KbT))))
(/ NdChar 2.0))
(-
(/ NdChar (+ 1.0 (exp (/ (+ Vef (- mu Ec)) KbT))))
(/ KbT (/ mu NaChar))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (NdChar <= -1.45e+72) {
tmp = (NdChar / (1.0 + exp((((Vef - Ec) + (EDonor + mu)) / KbT)))) + (KbT / (Ev / NaChar));
} else if (NdChar <= 1.25e+100) {
tmp = (NaChar / (1.0 + exp((((EAccept - mu) + (Vef + Ev)) / KbT)))) + (NdChar / 2.0);
} else {
tmp = (NdChar / (1.0 + exp(((Vef + (mu - Ec)) / KbT)))) - (KbT / (mu / NaChar));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if (ndchar <= (-1.45d+72)) then
tmp = (ndchar / (1.0d0 + exp((((vef - ec) + (edonor + mu)) / kbt)))) + (kbt / (ev / nachar))
else if (ndchar <= 1.25d+100) then
tmp = (nachar / (1.0d0 + exp((((eaccept - mu) + (vef + ev)) / kbt)))) + (ndchar / 2.0d0)
else
tmp = (ndchar / (1.0d0 + exp(((vef + (mu - ec)) / kbt)))) - (kbt / (mu / nachar))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (NdChar <= -1.45e+72) {
tmp = (NdChar / (1.0 + Math.exp((((Vef - Ec) + (EDonor + mu)) / KbT)))) + (KbT / (Ev / NaChar));
} else if (NdChar <= 1.25e+100) {
tmp = (NaChar / (1.0 + Math.exp((((EAccept - mu) + (Vef + Ev)) / KbT)))) + (NdChar / 2.0);
} else {
tmp = (NdChar / (1.0 + Math.exp(((Vef + (mu - Ec)) / KbT)))) - (KbT / (mu / NaChar));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if NdChar <= -1.45e+72: tmp = (NdChar / (1.0 + math.exp((((Vef - Ec) + (EDonor + mu)) / KbT)))) + (KbT / (Ev / NaChar)) elif NdChar <= 1.25e+100: tmp = (NaChar / (1.0 + math.exp((((EAccept - mu) + (Vef + Ev)) / KbT)))) + (NdChar / 2.0) else: tmp = (NdChar / (1.0 + math.exp(((Vef + (mu - Ec)) / KbT)))) - (KbT / (mu / NaChar)) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (NdChar <= -1.45e+72) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(Float64(Vef - Ec) + Float64(EDonor + mu)) / KbT)))) + Float64(KbT / Float64(Ev / NaChar))); elseif (NdChar <= 1.25e+100) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(EAccept - mu) + Float64(Vef + Ev)) / KbT)))) + Float64(NdChar / 2.0)); else tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(mu - Ec)) / KbT)))) - Float64(KbT / Float64(mu / NaChar))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (NdChar <= -1.45e+72) tmp = (NdChar / (1.0 + exp((((Vef - Ec) + (EDonor + mu)) / KbT)))) + (KbT / (Ev / NaChar)); elseif (NdChar <= 1.25e+100) tmp = (NaChar / (1.0 + exp((((EAccept - mu) + (Vef + Ev)) / KbT)))) + (NdChar / 2.0); else tmp = (NdChar / (1.0 + exp(((Vef + (mu - Ec)) / KbT)))) - (KbT / (mu / NaChar)); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[NdChar, -1.45e+72], N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(N[(Vef - Ec), $MachinePrecision] + N[(EDonor + mu), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(KbT / N[(Ev / NaChar), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NdChar, 1.25e+100], N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(N[(EAccept - mu), $MachinePrecision] + N[(Vef + Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(mu - Ec), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(KbT / N[(mu / NaChar), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NdChar \leq -1.45 \cdot 10^{+72}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{\left(Vef - Ec\right) + \left(EDonor + mu\right)}{KbT}}} + \frac{KbT}{\frac{Ev}{NaChar}}\\
\mathbf{elif}\;NdChar \leq 1.25 \cdot 10^{+100}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{\left(EAccept - mu\right) + \left(Vef + Ev\right)}{KbT}}} + \frac{NdChar}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{Vef + \left(mu - Ec\right)}{KbT}}} - \frac{KbT}{\frac{mu}{NaChar}}\\
\end{array}
\end{array}
if NdChar < -1.45000000000000009e72Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 59.7%
Taylor expanded in Ev around inf 53.6%
associate-/l*53.7%
Simplified53.7%
if -1.45000000000000009e72 < NdChar < 1.25e100Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 57.0%
if 1.25e100 < NdChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 62.7%
Taylor expanded in mu around inf 51.8%
mul-1-neg51.8%
associate-/l*53.9%
Simplified53.9%
Taylor expanded in EDonor around 0 51.5%
+-commutative51.5%
associate--l+51.5%
Simplified51.5%
Final simplification55.6%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NaChar (+ 1.0 (exp (/ EAccept KbT))))))
(if (<= KbT -1.35e+27)
(+ t_0 (/ NdChar (+ 2.0 (/ EDonor KbT))))
(if (<= KbT 5.8e-226)
t_0
(if (<= KbT 3.7e-59)
(- (/ NdChar (+ 1.0 (exp (/ mu KbT)))) (/ KbT (/ mu NaChar)))
(+ (/ NaChar (+ 1.0 (exp (/ Ev KbT)))) (/ NdChar 2.0)))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NaChar / (1.0 + exp((EAccept / KbT)));
double tmp;
if (KbT <= -1.35e+27) {
tmp = t_0 + (NdChar / (2.0 + (EDonor / KbT)));
} else if (KbT <= 5.8e-226) {
tmp = t_0;
} else if (KbT <= 3.7e-59) {
tmp = (NdChar / (1.0 + exp((mu / KbT)))) - (KbT / (mu / NaChar));
} else {
tmp = (NaChar / (1.0 + exp((Ev / KbT)))) + (NdChar / 2.0);
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: tmp
t_0 = nachar / (1.0d0 + exp((eaccept / kbt)))
if (kbt <= (-1.35d+27)) then
tmp = t_0 + (ndchar / (2.0d0 + (edonor / kbt)))
else if (kbt <= 5.8d-226) then
tmp = t_0
else if (kbt <= 3.7d-59) then
tmp = (ndchar / (1.0d0 + exp((mu / kbt)))) - (kbt / (mu / nachar))
else
tmp = (nachar / (1.0d0 + exp((ev / kbt)))) + (ndchar / 2.0d0)
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NaChar / (1.0 + Math.exp((EAccept / KbT)));
double tmp;
if (KbT <= -1.35e+27) {
tmp = t_0 + (NdChar / (2.0 + (EDonor / KbT)));
} else if (KbT <= 5.8e-226) {
tmp = t_0;
} else if (KbT <= 3.7e-59) {
tmp = (NdChar / (1.0 + Math.exp((mu / KbT)))) - (KbT / (mu / NaChar));
} else {
tmp = (NaChar / (1.0 + Math.exp((Ev / KbT)))) + (NdChar / 2.0);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NaChar / (1.0 + math.exp((EAccept / KbT))) tmp = 0 if KbT <= -1.35e+27: tmp = t_0 + (NdChar / (2.0 + (EDonor / KbT))) elif KbT <= 5.8e-226: tmp = t_0 elif KbT <= 3.7e-59: tmp = (NdChar / (1.0 + math.exp((mu / KbT)))) - (KbT / (mu / NaChar)) else: tmp = (NaChar / (1.0 + math.exp((Ev / KbT)))) + (NdChar / 2.0) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT)))) tmp = 0.0 if (KbT <= -1.35e+27) tmp = Float64(t_0 + Float64(NdChar / Float64(2.0 + Float64(EDonor / KbT)))); elseif (KbT <= 5.8e-226) tmp = t_0; elseif (KbT <= 3.7e-59) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(mu / KbT)))) - Float64(KbT / Float64(mu / NaChar))); else tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT)))) + Float64(NdChar / 2.0)); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NaChar / (1.0 + exp((EAccept / KbT))); tmp = 0.0; if (KbT <= -1.35e+27) tmp = t_0 + (NdChar / (2.0 + (EDonor / KbT))); elseif (KbT <= 5.8e-226) tmp = t_0; elseif (KbT <= 3.7e-59) tmp = (NdChar / (1.0 + exp((mu / KbT)))) - (KbT / (mu / NaChar)); else tmp = (NaChar / (1.0 + exp((Ev / KbT)))) + (NdChar / 2.0); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[KbT, -1.35e+27], N[(t$95$0 + N[(NdChar / N[(2.0 + N[(EDonor / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[KbT, 5.8e-226], t$95$0, If[LessEqual[KbT, 3.7e-59], N[(N[(NdChar / N[(1.0 + N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(KbT / N[(mu / NaChar), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}}\\
\mathbf{if}\;KbT \leq -1.35 \cdot 10^{+27}:\\
\;\;\;\;t_0 + \frac{NdChar}{2 + \frac{EDonor}{KbT}}\\
\mathbf{elif}\;KbT \leq 5.8 \cdot 10^{-226}:\\
\;\;\;\;t_0\\
\mathbf{elif}\;KbT \leq 3.7 \cdot 10^{-59}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{mu}{KbT}}} - \frac{KbT}{\frac{mu}{NaChar}}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Ev}{KbT}}} + \frac{NdChar}{2}\\
\end{array}
\end{array}
if KbT < -1.3499999999999999e27Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 70.7%
Taylor expanded in KbT around inf 52.8%
associate--l+52.8%
sub-neg52.8%
mul-1-neg52.8%
+-commutative52.8%
associate-+r+52.8%
+-commutative52.8%
associate-+r+52.8%
mul-1-neg52.8%
neg-sub052.8%
associate-+l-52.8%
div-sub52.8%
associate--r-52.8%
div-sub52.8%
neg-sub052.8%
+-commutative52.8%
sub-neg52.8%
div-sub52.8%
Simplified52.8%
Taylor expanded in EDonor around inf 54.9%
if -1.3499999999999999e27 < KbT < 5.80000000000000003e-226Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 69.1%
Taylor expanded in KbT around inf 30.1%
associate--l+30.1%
sub-neg30.1%
mul-1-neg30.1%
+-commutative30.1%
associate-+r+30.1%
+-commutative30.1%
associate-+r+30.1%
mul-1-neg30.1%
neg-sub030.1%
associate-+l-30.1%
div-sub31.1%
associate--r-31.1%
div-sub34.3%
neg-sub034.3%
+-commutative34.3%
sub-neg34.3%
div-sub35.6%
Simplified35.6%
Taylor expanded in EDonor around inf 23.6%
associate-/l*21.5%
Simplified21.5%
Taylor expanded in KbT around 0 37.0%
if 5.80000000000000003e-226 < KbT < 3.6999999999999999e-59Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 60.2%
Taylor expanded in mu around inf 60.8%
mul-1-neg60.8%
associate-/l*53.1%
Simplified53.1%
Taylor expanded in mu around inf 47.5%
if 3.6999999999999999e-59 < KbT Initial program 99.9%
Simplified99.9%
Taylor expanded in KbT around inf 64.9%
Taylor expanded in Ev around inf 54.8%
Final simplification47.1%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (<= NdChar 5.5e+106)
(+
(/ NaChar (+ 1.0 (exp (/ (+ (- EAccept mu) (+ Vef Ev)) KbT))))
(/ NdChar 2.0))
(- (/ NdChar (+ 1.0 (exp (/ mu KbT)))) (/ KbT (/ mu NaChar)))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (NdChar <= 5.5e+106) {
tmp = (NaChar / (1.0 + exp((((EAccept - mu) + (Vef + Ev)) / KbT)))) + (NdChar / 2.0);
} else {
tmp = (NdChar / (1.0 + exp((mu / KbT)))) - (KbT / (mu / NaChar));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if (ndchar <= 5.5d+106) then
tmp = (nachar / (1.0d0 + exp((((eaccept - mu) + (vef + ev)) / kbt)))) + (ndchar / 2.0d0)
else
tmp = (ndchar / (1.0d0 + exp((mu / kbt)))) - (kbt / (mu / nachar))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (NdChar <= 5.5e+106) {
tmp = (NaChar / (1.0 + Math.exp((((EAccept - mu) + (Vef + Ev)) / KbT)))) + (NdChar / 2.0);
} else {
tmp = (NdChar / (1.0 + Math.exp((mu / KbT)))) - (KbT / (mu / NaChar));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if NdChar <= 5.5e+106: tmp = (NaChar / (1.0 + math.exp((((EAccept - mu) + (Vef + Ev)) / KbT)))) + (NdChar / 2.0) else: tmp = (NdChar / (1.0 + math.exp((mu / KbT)))) - (KbT / (mu / NaChar)) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (NdChar <= 5.5e+106) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(EAccept - mu) + Float64(Vef + Ev)) / KbT)))) + Float64(NdChar / 2.0)); else tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(mu / KbT)))) - Float64(KbT / Float64(mu / NaChar))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (NdChar <= 5.5e+106) tmp = (NaChar / (1.0 + exp((((EAccept - mu) + (Vef + Ev)) / KbT)))) + (NdChar / 2.0); else tmp = (NdChar / (1.0 + exp((mu / KbT)))) - (KbT / (mu / NaChar)); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[NdChar, 5.5e+106], N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(N[(EAccept - mu), $MachinePrecision] + N[(Vef + Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar / N[(1.0 + N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(KbT / N[(mu / NaChar), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NdChar \leq 5.5 \cdot 10^{+106}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{\left(EAccept - mu\right) + \left(Vef + Ev\right)}{KbT}}} + \frac{NdChar}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{mu}{KbT}}} - \frac{KbT}{\frac{mu}{NaChar}}\\
\end{array}
\end{array}
if NdChar < 5.5e106Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 52.2%
if 5.5e106 < NdChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 62.7%
Taylor expanded in mu around inf 51.8%
mul-1-neg51.8%
associate-/l*53.9%
Simplified53.9%
Taylor expanded in mu around inf 43.5%
Final simplification50.7%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (<= NdChar 1.75e+110)
(+
(/ NaChar (+ 1.0 (exp (/ (+ (- EAccept mu) (+ Vef Ev)) KbT))))
(/ NdChar 2.0))
(-
(/ NdChar (+ 1.0 (exp (/ (+ Vef (- mu Ec)) KbT))))
(/ KbT (/ mu NaChar)))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (NdChar <= 1.75e+110) {
tmp = (NaChar / (1.0 + exp((((EAccept - mu) + (Vef + Ev)) / KbT)))) + (NdChar / 2.0);
} else {
tmp = (NdChar / (1.0 + exp(((Vef + (mu - Ec)) / KbT)))) - (KbT / (mu / NaChar));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if (ndchar <= 1.75d+110) then
tmp = (nachar / (1.0d0 + exp((((eaccept - mu) + (vef + ev)) / kbt)))) + (ndchar / 2.0d0)
else
tmp = (ndchar / (1.0d0 + exp(((vef + (mu - ec)) / kbt)))) - (kbt / (mu / nachar))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (NdChar <= 1.75e+110) {
tmp = (NaChar / (1.0 + Math.exp((((EAccept - mu) + (Vef + Ev)) / KbT)))) + (NdChar / 2.0);
} else {
tmp = (NdChar / (1.0 + Math.exp(((Vef + (mu - Ec)) / KbT)))) - (KbT / (mu / NaChar));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if NdChar <= 1.75e+110: tmp = (NaChar / (1.0 + math.exp((((EAccept - mu) + (Vef + Ev)) / KbT)))) + (NdChar / 2.0) else: tmp = (NdChar / (1.0 + math.exp(((Vef + (mu - Ec)) / KbT)))) - (KbT / (mu / NaChar)) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (NdChar <= 1.75e+110) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(EAccept - mu) + Float64(Vef + Ev)) / KbT)))) + Float64(NdChar / 2.0)); else tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(mu - Ec)) / KbT)))) - Float64(KbT / Float64(mu / NaChar))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (NdChar <= 1.75e+110) tmp = (NaChar / (1.0 + exp((((EAccept - mu) + (Vef + Ev)) / KbT)))) + (NdChar / 2.0); else tmp = (NdChar / (1.0 + exp(((Vef + (mu - Ec)) / KbT)))) - (KbT / (mu / NaChar)); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[NdChar, 1.75e+110], N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(N[(EAccept - mu), $MachinePrecision] + N[(Vef + Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(mu - Ec), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(KbT / N[(mu / NaChar), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NdChar \leq 1.75 \cdot 10^{+110}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{\left(EAccept - mu\right) + \left(Vef + Ev\right)}{KbT}}} + \frac{NdChar}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{Vef + \left(mu - Ec\right)}{KbT}}} - \frac{KbT}{\frac{mu}{NaChar}}\\
\end{array}
\end{array}
if NdChar < 1.75e110Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 52.2%
if 1.75e110 < NdChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 62.7%
Taylor expanded in mu around inf 51.8%
mul-1-neg51.8%
associate-/l*53.9%
Simplified53.9%
Taylor expanded in EDonor around 0 51.5%
+-commutative51.5%
associate--l+51.5%
Simplified51.5%
Final simplification52.1%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (<= KbT -4.4e+190)
(+
(/ NdChar (- 2.0 (/ (- (- (- Ec EDonor) mu) Vef) KbT)))
(/
NaChar
(- (+ 2.0 (+ (/ EAccept KbT) (+ (/ Ev KbT) (/ Vef KbT)))) (/ mu KbT))))
(if (<= KbT 8.2e-180)
(/ NaChar (+ 1.0 (exp (/ EAccept KbT))))
(+ (/ NaChar (+ 1.0 (exp (/ Ev KbT)))) (/ NdChar 2.0)))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (KbT <= -4.4e+190) {
tmp = (NdChar / (2.0 - ((((Ec - EDonor) - mu) - Vef) / KbT))) + (NaChar / ((2.0 + ((EAccept / KbT) + ((Ev / KbT) + (Vef / KbT)))) - (mu / KbT)));
} else if (KbT <= 8.2e-180) {
tmp = NaChar / (1.0 + exp((EAccept / KbT)));
} else {
tmp = (NaChar / (1.0 + exp((Ev / KbT)))) + (NdChar / 2.0);
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if (kbt <= (-4.4d+190)) then
tmp = (ndchar / (2.0d0 - ((((ec - edonor) - mu) - vef) / kbt))) + (nachar / ((2.0d0 + ((eaccept / kbt) + ((ev / kbt) + (vef / kbt)))) - (mu / kbt)))
else if (kbt <= 8.2d-180) then
tmp = nachar / (1.0d0 + exp((eaccept / kbt)))
else
tmp = (nachar / (1.0d0 + exp((ev / kbt)))) + (ndchar / 2.0d0)
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (KbT <= -4.4e+190) {
tmp = (NdChar / (2.0 - ((((Ec - EDonor) - mu) - Vef) / KbT))) + (NaChar / ((2.0 + ((EAccept / KbT) + ((Ev / KbT) + (Vef / KbT)))) - (mu / KbT)));
} else if (KbT <= 8.2e-180) {
tmp = NaChar / (1.0 + Math.exp((EAccept / KbT)));
} else {
tmp = (NaChar / (1.0 + Math.exp((Ev / KbT)))) + (NdChar / 2.0);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if KbT <= -4.4e+190: tmp = (NdChar / (2.0 - ((((Ec - EDonor) - mu) - Vef) / KbT))) + (NaChar / ((2.0 + ((EAccept / KbT) + ((Ev / KbT) + (Vef / KbT)))) - (mu / KbT))) elif KbT <= 8.2e-180: tmp = NaChar / (1.0 + math.exp((EAccept / KbT))) else: tmp = (NaChar / (1.0 + math.exp((Ev / KbT)))) + (NdChar / 2.0) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (KbT <= -4.4e+190) tmp = Float64(Float64(NdChar / Float64(2.0 - Float64(Float64(Float64(Float64(Ec - EDonor) - mu) - Vef) / KbT))) + Float64(NaChar / Float64(Float64(2.0 + Float64(Float64(EAccept / KbT) + Float64(Float64(Ev / KbT) + Float64(Vef / KbT)))) - Float64(mu / KbT)))); elseif (KbT <= 8.2e-180) tmp = Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT)))); else tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT)))) + Float64(NdChar / 2.0)); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (KbT <= -4.4e+190) tmp = (NdChar / (2.0 - ((((Ec - EDonor) - mu) - Vef) / KbT))) + (NaChar / ((2.0 + ((EAccept / KbT) + ((Ev / KbT) + (Vef / KbT)))) - (mu / KbT))); elseif (KbT <= 8.2e-180) tmp = NaChar / (1.0 + exp((EAccept / KbT))); else tmp = (NaChar / (1.0 + exp((Ev / KbT)))) + (NdChar / 2.0); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[KbT, -4.4e+190], N[(N[(NdChar / N[(2.0 - N[(N[(N[(N[(Ec - EDonor), $MachinePrecision] - mu), $MachinePrecision] - Vef), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(N[(2.0 + N[(N[(EAccept / KbT), $MachinePrecision] + N[(N[(Ev / KbT), $MachinePrecision] + N[(Vef / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[KbT, 8.2e-180], N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;KbT \leq -4.4 \cdot 10^{+190}:\\
\;\;\;\;\frac{NdChar}{2 - \frac{\left(\left(Ec - EDonor\right) - mu\right) - Vef}{KbT}} + \frac{NaChar}{\left(2 + \left(\frac{EAccept}{KbT} + \left(\frac{Ev}{KbT} + \frac{Vef}{KbT}\right)\right)\right) - \frac{mu}{KbT}}\\
\mathbf{elif}\;KbT \leq 8.2 \cdot 10^{-180}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Ev}{KbT}}} + \frac{NdChar}{2}\\
\end{array}
\end{array}
if KbT < -4.4e190Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 86.3%
Taylor expanded in KbT around inf 82.1%
associate--l+86.4%
sub-neg86.4%
mul-1-neg86.4%
+-commutative86.4%
associate-+r+86.4%
+-commutative86.4%
associate-+r+86.4%
mul-1-neg86.4%
neg-sub086.4%
associate-+l-86.4%
div-sub86.4%
associate--r-86.4%
div-sub86.4%
neg-sub086.4%
+-commutative86.4%
sub-neg86.4%
div-sub86.4%
Simplified82.1%
if -4.4e190 < KbT < 8.2e-180Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 65.1%
Taylor expanded in KbT around inf 29.3%
associate--l+29.3%
sub-neg29.3%
mul-1-neg29.3%
+-commutative29.3%
associate-+r+29.3%
+-commutative29.3%
associate-+r+29.3%
mul-1-neg29.3%
neg-sub029.3%
associate-+l-29.3%
div-sub30.0%
associate--r-30.0%
div-sub32.4%
neg-sub032.4%
+-commutative32.4%
sub-neg32.4%
div-sub33.3%
Simplified33.3%
Taylor expanded in EDonor around inf 22.5%
associate-/l*21.0%
Simplified21.0%
Taylor expanded in KbT around 0 35.6%
if 8.2e-180 < KbT Initial program 99.9%
Simplified99.9%
Taylor expanded in KbT around inf 56.5%
Taylor expanded in Ev around inf 44.1%
Final simplification42.8%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (<= EAccept -7.2e-227)
(+ (/ NaChar (+ 1.0 (exp (/ Ev KbT)))) (/ NdChar 2.0))
(if (<= EAccept 4.1e+48)
(+ (/ NaChar (+ 1.0 (exp (/ Vef KbT)))) (/ NdChar 2.0))
(/ NaChar (+ 1.0 (exp (/ EAccept KbT)))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (EAccept <= -7.2e-227) {
tmp = (NaChar / (1.0 + exp((Ev / KbT)))) + (NdChar / 2.0);
} else if (EAccept <= 4.1e+48) {
tmp = (NaChar / (1.0 + exp((Vef / KbT)))) + (NdChar / 2.0);
} else {
tmp = NaChar / (1.0 + exp((EAccept / KbT)));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if (eaccept <= (-7.2d-227)) then
tmp = (nachar / (1.0d0 + exp((ev / kbt)))) + (ndchar / 2.0d0)
else if (eaccept <= 4.1d+48) then
tmp = (nachar / (1.0d0 + exp((vef / kbt)))) + (ndchar / 2.0d0)
else
tmp = nachar / (1.0d0 + exp((eaccept / kbt)))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (EAccept <= -7.2e-227) {
tmp = (NaChar / (1.0 + Math.exp((Ev / KbT)))) + (NdChar / 2.0);
} else if (EAccept <= 4.1e+48) {
tmp = (NaChar / (1.0 + Math.exp((Vef / KbT)))) + (NdChar / 2.0);
} else {
tmp = NaChar / (1.0 + Math.exp((EAccept / KbT)));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if EAccept <= -7.2e-227: tmp = (NaChar / (1.0 + math.exp((Ev / KbT)))) + (NdChar / 2.0) elif EAccept <= 4.1e+48: tmp = (NaChar / (1.0 + math.exp((Vef / KbT)))) + (NdChar / 2.0) else: tmp = NaChar / (1.0 + math.exp((EAccept / KbT))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (EAccept <= -7.2e-227) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT)))) + Float64(NdChar / 2.0)); elseif (EAccept <= 4.1e+48) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Vef / KbT)))) + Float64(NdChar / 2.0)); else tmp = Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT)))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (EAccept <= -7.2e-227) tmp = (NaChar / (1.0 + exp((Ev / KbT)))) + (NdChar / 2.0); elseif (EAccept <= 4.1e+48) tmp = (NaChar / (1.0 + exp((Vef / KbT)))) + (NdChar / 2.0); else tmp = NaChar / (1.0 + exp((EAccept / KbT))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[EAccept, -7.2e-227], N[(N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[EAccept, 4.1e+48], N[(N[(NaChar / N[(1.0 + N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision], N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;EAccept \leq -7.2 \cdot 10^{-227}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Ev}{KbT}}} + \frac{NdChar}{2}\\
\mathbf{elif}\;EAccept \leq 4.1 \cdot 10^{+48}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Vef}{KbT}}} + \frac{NdChar}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}}\\
\end{array}
\end{array}
if EAccept < -7.1999999999999999e-227Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 47.2%
Taylor expanded in Ev around inf 37.7%
if -7.1999999999999999e-227 < EAccept < 4.1000000000000003e48Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 50.6%
Taylor expanded in Vef around inf 43.4%
if 4.1000000000000003e48 < EAccept Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 81.8%
Taylor expanded in KbT around inf 45.3%
associate--l+45.3%
sub-neg45.3%
mul-1-neg45.3%
+-commutative45.3%
associate-+r+45.3%
+-commutative45.3%
associate-+r+45.3%
mul-1-neg45.3%
neg-sub045.3%
associate-+l-45.3%
div-sub45.3%
associate--r-45.3%
div-sub49.0%
neg-sub049.0%
+-commutative49.0%
sub-neg49.0%
div-sub49.1%
Simplified49.1%
Taylor expanded in EDonor around inf 33.4%
associate-/l*33.3%
Simplified33.3%
Taylor expanded in KbT around 0 46.8%
Final simplification41.5%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NdChar (- 2.0 (/ (- (- (- Ec EDonor) mu) Vef) KbT)))))
(if (<= KbT -7e+190)
(+
t_0
(/
NaChar
(- (+ 2.0 (+ (/ EAccept KbT) (+ (/ Ev KbT) (/ Vef KbT)))) (/ mu KbT))))
(if (<= KbT 4.5e+123)
(/ NaChar (+ 1.0 (exp (/ EAccept KbT))))
(+ t_0 (/ NaChar (+ 1.0 (+ 1.0 (/ EAccept KbT)))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (2.0 - ((((Ec - EDonor) - mu) - Vef) / KbT));
double tmp;
if (KbT <= -7e+190) {
tmp = t_0 + (NaChar / ((2.0 + ((EAccept / KbT) + ((Ev / KbT) + (Vef / KbT)))) - (mu / KbT)));
} else if (KbT <= 4.5e+123) {
tmp = NaChar / (1.0 + exp((EAccept / KbT)));
} else {
tmp = t_0 + (NaChar / (1.0 + (1.0 + (EAccept / KbT))));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: tmp
t_0 = ndchar / (2.0d0 - ((((ec - edonor) - mu) - vef) / kbt))
if (kbt <= (-7d+190)) then
tmp = t_0 + (nachar / ((2.0d0 + ((eaccept / kbt) + ((ev / kbt) + (vef / kbt)))) - (mu / kbt)))
else if (kbt <= 4.5d+123) then
tmp = nachar / (1.0d0 + exp((eaccept / kbt)))
else
tmp = t_0 + (nachar / (1.0d0 + (1.0d0 + (eaccept / kbt))))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (2.0 - ((((Ec - EDonor) - mu) - Vef) / KbT));
double tmp;
if (KbT <= -7e+190) {
tmp = t_0 + (NaChar / ((2.0 + ((EAccept / KbT) + ((Ev / KbT) + (Vef / KbT)))) - (mu / KbT)));
} else if (KbT <= 4.5e+123) {
tmp = NaChar / (1.0 + Math.exp((EAccept / KbT)));
} else {
tmp = t_0 + (NaChar / (1.0 + (1.0 + (EAccept / KbT))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NdChar / (2.0 - ((((Ec - EDonor) - mu) - Vef) / KbT)) tmp = 0 if KbT <= -7e+190: tmp = t_0 + (NaChar / ((2.0 + ((EAccept / KbT) + ((Ev / KbT) + (Vef / KbT)))) - (mu / KbT))) elif KbT <= 4.5e+123: tmp = NaChar / (1.0 + math.exp((EAccept / KbT))) else: tmp = t_0 + (NaChar / (1.0 + (1.0 + (EAccept / KbT)))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NdChar / Float64(2.0 - Float64(Float64(Float64(Float64(Ec - EDonor) - mu) - Vef) / KbT))) tmp = 0.0 if (KbT <= -7e+190) tmp = Float64(t_0 + Float64(NaChar / Float64(Float64(2.0 + Float64(Float64(EAccept / KbT) + Float64(Float64(Ev / KbT) + Float64(Vef / KbT)))) - Float64(mu / KbT)))); elseif (KbT <= 4.5e+123) tmp = Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT)))); else tmp = Float64(t_0 + Float64(NaChar / Float64(1.0 + Float64(1.0 + Float64(EAccept / KbT))))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NdChar / (2.0 - ((((Ec - EDonor) - mu) - Vef) / KbT)); tmp = 0.0; if (KbT <= -7e+190) tmp = t_0 + (NaChar / ((2.0 + ((EAccept / KbT) + ((Ev / KbT) + (Vef / KbT)))) - (mu / KbT))); elseif (KbT <= 4.5e+123) tmp = NaChar / (1.0 + exp((EAccept / KbT))); else tmp = t_0 + (NaChar / (1.0 + (1.0 + (EAccept / KbT)))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NdChar / N[(2.0 - N[(N[(N[(N[(Ec - EDonor), $MachinePrecision] - mu), $MachinePrecision] - Vef), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[KbT, -7e+190], N[(t$95$0 + N[(NaChar / N[(N[(2.0 + N[(N[(EAccept / KbT), $MachinePrecision] + N[(N[(Ev / KbT), $MachinePrecision] + N[(Vef / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[KbT, 4.5e+123], N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(t$95$0 + N[(NaChar / N[(1.0 + N[(1.0 + N[(EAccept / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{2 - \frac{\left(\left(Ec - EDonor\right) - mu\right) - Vef}{KbT}}\\
\mathbf{if}\;KbT \leq -7 \cdot 10^{+190}:\\
\;\;\;\;t_0 + \frac{NaChar}{\left(2 + \left(\frac{EAccept}{KbT} + \left(\frac{Ev}{KbT} + \frac{Vef}{KbT}\right)\right)\right) - \frac{mu}{KbT}}\\
\mathbf{elif}\;KbT \leq 4.5 \cdot 10^{+123}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;t_0 + \frac{NaChar}{1 + \left(1 + \frac{EAccept}{KbT}\right)}\\
\end{array}
\end{array}
if KbT < -6.9999999999999997e190Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 86.3%
Taylor expanded in KbT around inf 82.1%
associate--l+86.4%
sub-neg86.4%
mul-1-neg86.4%
+-commutative86.4%
associate-+r+86.4%
+-commutative86.4%
associate-+r+86.4%
mul-1-neg86.4%
neg-sub086.4%
associate-+l-86.4%
div-sub86.4%
associate--r-86.4%
div-sub86.4%
neg-sub086.4%
+-commutative86.4%
sub-neg86.4%
div-sub86.4%
Simplified82.1%
if -6.9999999999999997e190 < KbT < 4.49999999999999983e123Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 65.1%
Taylor expanded in KbT around inf 27.3%
associate--l+27.3%
sub-neg27.3%
mul-1-neg27.3%
+-commutative27.3%
associate-+r+27.3%
+-commutative27.3%
associate-+r+27.3%
mul-1-neg27.3%
neg-sub027.3%
associate-+l-27.3%
div-sub27.8%
associate--r-27.8%
div-sub29.4%
neg-sub029.4%
+-commutative29.4%
sub-neg29.4%
div-sub30.1%
Simplified30.1%
Taylor expanded in EDonor around inf 21.4%
associate-/l*20.4%
Simplified20.4%
Taylor expanded in KbT around 0 32.9%
if 4.49999999999999983e123 < KbT Initial program 99.9%
Simplified99.9%
Taylor expanded in EAccept around inf 75.5%
Taylor expanded in KbT around inf 66.6%
associate--l+66.6%
sub-neg66.6%
mul-1-neg66.6%
+-commutative66.6%
associate-+r+66.6%
+-commutative66.6%
associate-+r+66.6%
mul-1-neg66.6%
neg-sub066.6%
associate-+l-66.6%
div-sub66.6%
associate--r-66.6%
div-sub66.6%
neg-sub066.6%
+-commutative66.6%
sub-neg66.6%
div-sub66.6%
Simplified66.6%
Taylor expanded in EAccept around 0 62.0%
Final simplification41.8%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (<= KbT -1.26e-166)
(* 0.5 (+ NdChar NaChar))
(+
(/ NdChar (- 2.0 (/ (- (- (- Ec EDonor) mu) Vef) KbT)))
(/ NaChar (+ 1.0 (+ 1.0 (/ EAccept KbT)))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (KbT <= -1.26e-166) {
tmp = 0.5 * (NdChar + NaChar);
} else {
tmp = (NdChar / (2.0 - ((((Ec - EDonor) - mu) - Vef) / KbT))) + (NaChar / (1.0 + (1.0 + (EAccept / KbT))));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if (kbt <= (-1.26d-166)) then
tmp = 0.5d0 * (ndchar + nachar)
else
tmp = (ndchar / (2.0d0 - ((((ec - edonor) - mu) - vef) / kbt))) + (nachar / (1.0d0 + (1.0d0 + (eaccept / kbt))))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (KbT <= -1.26e-166) {
tmp = 0.5 * (NdChar + NaChar);
} else {
tmp = (NdChar / (2.0 - ((((Ec - EDonor) - mu) - Vef) / KbT))) + (NaChar / (1.0 + (1.0 + (EAccept / KbT))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if KbT <= -1.26e-166: tmp = 0.5 * (NdChar + NaChar) else: tmp = (NdChar / (2.0 - ((((Ec - EDonor) - mu) - Vef) / KbT))) + (NaChar / (1.0 + (1.0 + (EAccept / KbT)))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (KbT <= -1.26e-166) tmp = Float64(0.5 * Float64(NdChar + NaChar)); else tmp = Float64(Float64(NdChar / Float64(2.0 - Float64(Float64(Float64(Float64(Ec - EDonor) - mu) - Vef) / KbT))) + Float64(NaChar / Float64(1.0 + Float64(1.0 + Float64(EAccept / KbT))))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (KbT <= -1.26e-166) tmp = 0.5 * (NdChar + NaChar); else tmp = (NdChar / (2.0 - ((((Ec - EDonor) - mu) - Vef) / KbT))) + (NaChar / (1.0 + (1.0 + (EAccept / KbT)))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[KbT, -1.26e-166], N[(0.5 * N[(NdChar + NaChar), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar / N[(2.0 - N[(N[(N[(N[(Ec - EDonor), $MachinePrecision] - mu), $MachinePrecision] - Vef), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[(1.0 + N[(EAccept / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;KbT \leq -1.26 \cdot 10^{-166}:\\
\;\;\;\;0.5 \cdot \left(NdChar + NaChar\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{2 - \frac{\left(\left(Ec - EDonor\right) - mu\right) - Vef}{KbT}} + \frac{NaChar}{1 + \left(1 + \frac{EAccept}{KbT}\right)}\\
\end{array}
\end{array}
if KbT < -1.26e-166Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 47.8%
Taylor expanded in mu around inf 37.7%
associate-*r/37.7%
mul-1-neg37.7%
Simplified37.7%
Taylor expanded in mu around 0 25.9%
Taylor expanded in mu around 0 31.9%
distribute-lft-out31.9%
Simplified31.9%
if -1.26e-166 < KbT Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 66.8%
Taylor expanded in KbT around inf 36.8%
associate--l+36.8%
sub-neg36.8%
mul-1-neg36.8%
+-commutative36.8%
associate-+r+36.8%
+-commutative36.8%
associate-+r+36.8%
mul-1-neg36.8%
neg-sub036.8%
associate-+l-36.8%
div-sub37.5%
associate--r-37.5%
div-sub39.4%
neg-sub039.4%
+-commutative39.4%
sub-neg39.4%
div-sub40.2%
Simplified40.2%
Taylor expanded in EAccept around 0 29.9%
Final simplification30.6%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (* 0.5 (+ NdChar NaChar)))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return 0.5 * (NdChar + NaChar);
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
code = 0.5d0 * (ndchar + nachar)
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return 0.5 * (NdChar + NaChar);
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return 0.5 * (NdChar + NaChar)
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(0.5 * Float64(NdChar + NaChar)) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.5 * (NdChar + NaChar); end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(0.5 * N[(NdChar + NaChar), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
0.5 \cdot \left(NdChar + NaChar\right)
\end{array}
Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 48.0%
Taylor expanded in mu around inf 36.3%
associate-*r/36.3%
mul-1-neg36.3%
Simplified36.3%
Taylor expanded in mu around 0 22.7%
Taylor expanded in mu around 0 28.4%
distribute-lft-out28.4%
Simplified28.4%
Final simplification28.4%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (* NdChar 0.5))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return NdChar * 0.5;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
code = ndchar * 0.5d0
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return NdChar * 0.5;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return NdChar * 0.5
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(NdChar * 0.5) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = NdChar * 0.5; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(NdChar * 0.5), $MachinePrecision]
\begin{array}{l}
\\
NdChar \cdot 0.5
\end{array}
Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 48.0%
Taylor expanded in mu around inf 36.3%
associate-*r/36.3%
mul-1-neg36.3%
Simplified36.3%
Taylor expanded in mu around 0 22.7%
Taylor expanded in NdChar around inf 16.0%
Final simplification16.0%
herbie shell --seed 2023305
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:name "Bulmash initializePoisson"
:precision binary64
(+ (/ NdChar (+ 1.0 (exp (/ (- (- (- (- Ec Vef) EDonor) mu)) KbT)))) (/ NaChar (+ 1.0 (exp (/ (+ (+ (+ Ev Vef) EAccept) (- mu)) KbT))))))