
(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 22 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 (+ 1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT)))) (/ NaChar (+ 1.0 (exp (/ (+ Vef (+ Ev (- 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(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + exp(((Vef + (Ev + (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(((edonor + (mu + (vef - ec))) / kbt)))) + (nachar / (1.0d0 + exp(((vef + (ev + (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(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + Math.exp(((Vef + (Ev + (EAccept - mu))) / KbT))));
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return (NdChar / (1.0 + math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + math.exp(((Vef + (Ev + (EAccept - mu))) / KbT))))
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) + Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Ev + Float64(EAccept - mu))) / KbT))))) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT)))); end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(Ev + N[(EAccept - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{NdChar}{1 + e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}} + \frac{NaChar}{1 + e^{\frac{Vef + \left(Ev + \left(EAccept - mu\right)\right)}{KbT}}}
\end{array}
Initial program 100.0%
Simplified100.0%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NaChar (+ 1.0 (exp (/ (+ Vef (+ Ev (- EAccept mu))) KbT)))))
(t_1 (+ t_0 (/ NdChar (+ 1.0 (exp (/ Ec (- KbT)))))))
(t_2 (+ t_0 (/ NdChar (+ 1.0 (exp (/ EDonor KbT)))))))
(if (<= Ec -4.5e+157)
t_1
(if (<= Ec -1.7e-49)
(+ t_0 (/ NdChar (+ 1.0 (exp (/ Vef KbT)))))
(if (<= Ec 4.6e-97)
t_2
(if (<= Ec 3e-14)
(+
(/ NdChar (+ 1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT))))
(/
NaChar
(-
1.0
(*
mu
(+
(/ (- -1.0 (+ (/ EAccept KbT) (+ (/ Vef KbT) (/ Ev KbT)))) mu)
(/ 1.0 KbT))))))
(if (<= Ec 2.9e+119) 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 = NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT)));
double t_1 = t_0 + (NdChar / (1.0 + exp((Ec / -KbT))));
double t_2 = t_0 + (NdChar / (1.0 + exp((EDonor / KbT))));
double tmp;
if (Ec <= -4.5e+157) {
tmp = t_1;
} else if (Ec <= -1.7e-49) {
tmp = t_0 + (NdChar / (1.0 + exp((Vef / KbT))));
} else if (Ec <= 4.6e-97) {
tmp = t_2;
} else if (Ec <= 3e-14) {
tmp = (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 - (mu * (((-1.0 - ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) / mu) + (1.0 / KbT)))));
} else if (Ec <= 2.9e+119) {
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 = nachar / (1.0d0 + exp(((vef + (ev + (eaccept - mu))) / kbt)))
t_1 = t_0 + (ndchar / (1.0d0 + exp((ec / -kbt))))
t_2 = t_0 + (ndchar / (1.0d0 + exp((edonor / kbt))))
if (ec <= (-4.5d+157)) then
tmp = t_1
else if (ec <= (-1.7d-49)) then
tmp = t_0 + (ndchar / (1.0d0 + exp((vef / kbt))))
else if (ec <= 4.6d-97) then
tmp = t_2
else if (ec <= 3d-14) then
tmp = (ndchar / (1.0d0 + exp(((edonor + (mu + (vef - ec))) / kbt)))) + (nachar / (1.0d0 - (mu * ((((-1.0d0) - ((eaccept / kbt) + ((vef / kbt) + (ev / kbt)))) / mu) + (1.0d0 / kbt)))))
else if (ec <= 2.9d+119) 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 = NaChar / (1.0 + Math.exp(((Vef + (Ev + (EAccept - mu))) / KbT)));
double t_1 = t_0 + (NdChar / (1.0 + Math.exp((Ec / -KbT))));
double t_2 = t_0 + (NdChar / (1.0 + Math.exp((EDonor / KbT))));
double tmp;
if (Ec <= -4.5e+157) {
tmp = t_1;
} else if (Ec <= -1.7e-49) {
tmp = t_0 + (NdChar / (1.0 + Math.exp((Vef / KbT))));
} else if (Ec <= 4.6e-97) {
tmp = t_2;
} else if (Ec <= 3e-14) {
tmp = (NdChar / (1.0 + Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 - (mu * (((-1.0 - ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) / mu) + (1.0 / KbT)))));
} else if (Ec <= 2.9e+119) {
tmp = t_2;
} else {
tmp = t_1;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NaChar / (1.0 + math.exp(((Vef + (Ev + (EAccept - mu))) / KbT))) t_1 = t_0 + (NdChar / (1.0 + math.exp((Ec / -KbT)))) t_2 = t_0 + (NdChar / (1.0 + math.exp((EDonor / KbT)))) tmp = 0 if Ec <= -4.5e+157: tmp = t_1 elif Ec <= -1.7e-49: tmp = t_0 + (NdChar / (1.0 + math.exp((Vef / KbT)))) elif Ec <= 4.6e-97: tmp = t_2 elif Ec <= 3e-14: tmp = (NdChar / (1.0 + math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 - (mu * (((-1.0 - ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) / mu) + (1.0 / KbT))))) elif Ec <= 2.9e+119: tmp = t_2 else: tmp = t_1 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Ev + Float64(EAccept - mu))) / KbT)))) t_1 = Float64(t_0 + Float64(NdChar / Float64(1.0 + exp(Float64(Ec / Float64(-KbT)))))) t_2 = Float64(t_0 + Float64(NdChar / Float64(1.0 + exp(Float64(EDonor / KbT))))) tmp = 0.0 if (Ec <= -4.5e+157) tmp = t_1; elseif (Ec <= -1.7e-49) tmp = Float64(t_0 + Float64(NdChar / Float64(1.0 + exp(Float64(Vef / KbT))))); elseif (Ec <= 4.6e-97) tmp = t_2; elseif (Ec <= 3e-14) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) + Float64(NaChar / Float64(1.0 - Float64(mu * Float64(Float64(Float64(-1.0 - Float64(Float64(EAccept / KbT) + Float64(Float64(Vef / KbT) + Float64(Ev / KbT)))) / mu) + Float64(1.0 / KbT)))))); elseif (Ec <= 2.9e+119) 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 = NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT))); t_1 = t_0 + (NdChar / (1.0 + exp((Ec / -KbT)))); t_2 = t_0 + (NdChar / (1.0 + exp((EDonor / KbT)))); tmp = 0.0; if (Ec <= -4.5e+157) tmp = t_1; elseif (Ec <= -1.7e-49) tmp = t_0 + (NdChar / (1.0 + exp((Vef / KbT)))); elseif (Ec <= 4.6e-97) tmp = t_2; elseif (Ec <= 3e-14) tmp = (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 - (mu * (((-1.0 - ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) / mu) + (1.0 / KbT))))); elseif (Ec <= 2.9e+119) 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[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(Ev + N[(EAccept - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(t$95$0 + N[(NdChar / N[(1.0 + N[Exp[N[(Ec / (-KbT)), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(t$95$0 + N[(NdChar / N[(1.0 + N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[Ec, -4.5e+157], t$95$1, If[LessEqual[Ec, -1.7e-49], N[(t$95$0 + N[(NdChar / N[(1.0 + N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[Ec, 4.6e-97], t$95$2, If[LessEqual[Ec, 3e-14], N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 - N[(mu * N[(N[(N[(-1.0 - N[(N[(EAccept / KbT), $MachinePrecision] + N[(N[(Vef / KbT), $MachinePrecision] + N[(Ev / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / mu), $MachinePrecision] + N[(1.0 / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[Ec, 2.9e+119], t$95$2, t$95$1]]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{Vef + \left(Ev + \left(EAccept - mu\right)\right)}{KbT}}}\\
t_1 := t\_0 + \frac{NdChar}{1 + e^{\frac{Ec}{-KbT}}}\\
t_2 := t\_0 + \frac{NdChar}{1 + e^{\frac{EDonor}{KbT}}}\\
\mathbf{if}\;Ec \leq -4.5 \cdot 10^{+157}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;Ec \leq -1.7 \cdot 10^{-49}:\\
\;\;\;\;t\_0 + \frac{NdChar}{1 + e^{\frac{Vef}{KbT}}}\\
\mathbf{elif}\;Ec \leq 4.6 \cdot 10^{-97}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;Ec \leq 3 \cdot 10^{-14}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}} + \frac{NaChar}{1 - mu \cdot \left(\frac{-1 - \left(\frac{EAccept}{KbT} + \left(\frac{Vef}{KbT} + \frac{Ev}{KbT}\right)\right)}{mu} + \frac{1}{KbT}\right)}\\
\mathbf{elif}\;Ec \leq 2.9 \cdot 10^{+119}:\\
\;\;\;\;t\_2\\
\mathbf{else}:\\
\;\;\;\;t\_1\\
\end{array}
\end{array}
if Ec < -4.49999999999999985e157 or 2.90000000000000007e119 < Ec Initial program 100.0%
Simplified100.0%
Taylor expanded in Ec around inf 93.3%
associate-*r/93.3%
mul-1-neg93.3%
Simplified93.3%
if -4.49999999999999985e157 < Ec < -1.70000000000000002e-49Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 81.3%
if -1.70000000000000002e-49 < Ec < 4.59999999999999988e-97 or 2.9999999999999998e-14 < Ec < 2.90000000000000007e119Initial program 100.0%
Simplified100.0%
Taylor expanded in EDonor around inf 82.0%
if 4.59999999999999988e-97 < Ec < 2.9999999999999998e-14Initial program 99.9%
Simplified99.9%
Taylor expanded in KbT around inf 55.5%
Taylor expanded in mu around -inf 75.4%
Final simplification84.6%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (exp (/ (+ Vef (+ Ev (- EAccept mu))) KbT)))
(t_1 (+ (/ Vef KbT) (/ Ev KbT)))
(t_2
(+
(/ NdChar (+ 1.0 (exp (/ mu KbT))))
(/ NaChar (+ 1.0 (exp (/ (- mu) KbT))))))
(t_3 (/ NdChar (+ 1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT))))))
(if (<= mu -6.5e+202)
t_2
(if (<= mu -3.2e-133)
(+
t_3
(/
NaChar
(+
1.0
(-
(-
1.0
(*
EAccept
(-
(/ -1.0 KbT)
(+ (/ Vef (* KbT EAccept)) (/ Ev (* KbT EAccept))))))
(/ mu KbT)))))
(if (<= mu -1.4e-225)
(-
(/
NdChar
(+
1.0
(-
(+ 1.0 (+ (/ EDonor KbT) (+ (/ Vef KbT) (/ mu KbT))))
(/ Ec KbT))))
(/ NaChar (- -1.0 t_0)))
(if (<= mu 1.1e-194)
(+
t_3
(/
NaChar
(-
1.0
(* mu (+ (/ (- -1.0 (+ (/ EAccept KbT) t_1)) mu) (/ 1.0 KbT))))))
(if (<= mu 3.4e-94)
(+ (/ NaChar (+ 1.0 t_0)) (/ NdChar (+ 1.0 (+ 1.0 (/ Vef KbT)))))
(if (<= mu 1.8e+154)
(-
t_3
(/
NaChar
(+
-1.0
(*
EAccept
(+ (/ (+ (/ mu KbT) (- -1.0 t_1)) EAccept) (/ -1.0 KbT))))))
t_2))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = exp(((Vef + (Ev + (EAccept - mu))) / KbT));
double t_1 = (Vef / KbT) + (Ev / KbT);
double t_2 = (NdChar / (1.0 + exp((mu / KbT)))) + (NaChar / (1.0 + exp((-mu / KbT))));
double t_3 = NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)));
double tmp;
if (mu <= -6.5e+202) {
tmp = t_2;
} else if (mu <= -3.2e-133) {
tmp = t_3 + (NaChar / (1.0 + ((1.0 - (EAccept * ((-1.0 / KbT) - ((Vef / (KbT * EAccept)) + (Ev / (KbT * EAccept)))))) - (mu / KbT))));
} else if (mu <= -1.4e-225) {
tmp = (NdChar / (1.0 + ((1.0 + ((EDonor / KbT) + ((Vef / KbT) + (mu / KbT)))) - (Ec / KbT)))) - (NaChar / (-1.0 - t_0));
} else if (mu <= 1.1e-194) {
tmp = t_3 + (NaChar / (1.0 - (mu * (((-1.0 - ((EAccept / KbT) + t_1)) / mu) + (1.0 / KbT)))));
} else if (mu <= 3.4e-94) {
tmp = (NaChar / (1.0 + t_0)) + (NdChar / (1.0 + (1.0 + (Vef / KbT))));
} else if (mu <= 1.8e+154) {
tmp = t_3 - (NaChar / (-1.0 + (EAccept * ((((mu / KbT) + (-1.0 - t_1)) / EAccept) + (-1.0 / KbT)))));
} else {
tmp = t_2;
}
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) :: t_3
real(8) :: tmp
t_0 = exp(((vef + (ev + (eaccept - mu))) / kbt))
t_1 = (vef / kbt) + (ev / kbt)
t_2 = (ndchar / (1.0d0 + exp((mu / kbt)))) + (nachar / (1.0d0 + exp((-mu / kbt))))
t_3 = ndchar / (1.0d0 + exp(((edonor + (mu + (vef - ec))) / kbt)))
if (mu <= (-6.5d+202)) then
tmp = t_2
else if (mu <= (-3.2d-133)) then
tmp = t_3 + (nachar / (1.0d0 + ((1.0d0 - (eaccept * (((-1.0d0) / kbt) - ((vef / (kbt * eaccept)) + (ev / (kbt * eaccept)))))) - (mu / kbt))))
else if (mu <= (-1.4d-225)) then
tmp = (ndchar / (1.0d0 + ((1.0d0 + ((edonor / kbt) + ((vef / kbt) + (mu / kbt)))) - (ec / kbt)))) - (nachar / ((-1.0d0) - t_0))
else if (mu <= 1.1d-194) then
tmp = t_3 + (nachar / (1.0d0 - (mu * ((((-1.0d0) - ((eaccept / kbt) + t_1)) / mu) + (1.0d0 / kbt)))))
else if (mu <= 3.4d-94) then
tmp = (nachar / (1.0d0 + t_0)) + (ndchar / (1.0d0 + (1.0d0 + (vef / kbt))))
else if (mu <= 1.8d+154) then
tmp = t_3 - (nachar / ((-1.0d0) + (eaccept * ((((mu / kbt) + ((-1.0d0) - t_1)) / eaccept) + ((-1.0d0) / kbt)))))
else
tmp = t_2
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 = Math.exp(((Vef + (Ev + (EAccept - mu))) / KbT));
double t_1 = (Vef / KbT) + (Ev / KbT);
double t_2 = (NdChar / (1.0 + Math.exp((mu / KbT)))) + (NaChar / (1.0 + Math.exp((-mu / KbT))));
double t_3 = NdChar / (1.0 + Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)));
double tmp;
if (mu <= -6.5e+202) {
tmp = t_2;
} else if (mu <= -3.2e-133) {
tmp = t_3 + (NaChar / (1.0 + ((1.0 - (EAccept * ((-1.0 / KbT) - ((Vef / (KbT * EAccept)) + (Ev / (KbT * EAccept)))))) - (mu / KbT))));
} else if (mu <= -1.4e-225) {
tmp = (NdChar / (1.0 + ((1.0 + ((EDonor / KbT) + ((Vef / KbT) + (mu / KbT)))) - (Ec / KbT)))) - (NaChar / (-1.0 - t_0));
} else if (mu <= 1.1e-194) {
tmp = t_3 + (NaChar / (1.0 - (mu * (((-1.0 - ((EAccept / KbT) + t_1)) / mu) + (1.0 / KbT)))));
} else if (mu <= 3.4e-94) {
tmp = (NaChar / (1.0 + t_0)) + (NdChar / (1.0 + (1.0 + (Vef / KbT))));
} else if (mu <= 1.8e+154) {
tmp = t_3 - (NaChar / (-1.0 + (EAccept * ((((mu / KbT) + (-1.0 - t_1)) / EAccept) + (-1.0 / KbT)))));
} else {
tmp = t_2;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = math.exp(((Vef + (Ev + (EAccept - mu))) / KbT)) t_1 = (Vef / KbT) + (Ev / KbT) t_2 = (NdChar / (1.0 + math.exp((mu / KbT)))) + (NaChar / (1.0 + math.exp((-mu / KbT)))) t_3 = NdChar / (1.0 + math.exp(((EDonor + (mu + (Vef - Ec))) / KbT))) tmp = 0 if mu <= -6.5e+202: tmp = t_2 elif mu <= -3.2e-133: tmp = t_3 + (NaChar / (1.0 + ((1.0 - (EAccept * ((-1.0 / KbT) - ((Vef / (KbT * EAccept)) + (Ev / (KbT * EAccept)))))) - (mu / KbT)))) elif mu <= -1.4e-225: tmp = (NdChar / (1.0 + ((1.0 + ((EDonor / KbT) + ((Vef / KbT) + (mu / KbT)))) - (Ec / KbT)))) - (NaChar / (-1.0 - t_0)) elif mu <= 1.1e-194: tmp = t_3 + (NaChar / (1.0 - (mu * (((-1.0 - ((EAccept / KbT) + t_1)) / mu) + (1.0 / KbT))))) elif mu <= 3.4e-94: tmp = (NaChar / (1.0 + t_0)) + (NdChar / (1.0 + (1.0 + (Vef / KbT)))) elif mu <= 1.8e+154: tmp = t_3 - (NaChar / (-1.0 + (EAccept * ((((mu / KbT) + (-1.0 - t_1)) / EAccept) + (-1.0 / KbT))))) else: tmp = t_2 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = exp(Float64(Float64(Vef + Float64(Ev + Float64(EAccept - mu))) / KbT)) t_1 = Float64(Float64(Vef / KbT) + Float64(Ev / KbT)) t_2 = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(mu / KbT)))) + Float64(NaChar / Float64(1.0 + exp(Float64(Float64(-mu) / KbT))))) t_3 = Float64(NdChar / Float64(1.0 + exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) tmp = 0.0 if (mu <= -6.5e+202) tmp = t_2; elseif (mu <= -3.2e-133) tmp = Float64(t_3 + Float64(NaChar / Float64(1.0 + Float64(Float64(1.0 - Float64(EAccept * Float64(Float64(-1.0 / KbT) - Float64(Float64(Vef / Float64(KbT * EAccept)) + Float64(Ev / Float64(KbT * EAccept)))))) - Float64(mu / KbT))))); elseif (mu <= -1.4e-225) tmp = Float64(Float64(NdChar / Float64(1.0 + Float64(Float64(1.0 + Float64(Float64(EDonor / KbT) + Float64(Float64(Vef / KbT) + Float64(mu / KbT)))) - Float64(Ec / KbT)))) - Float64(NaChar / Float64(-1.0 - t_0))); elseif (mu <= 1.1e-194) tmp = Float64(t_3 + Float64(NaChar / Float64(1.0 - Float64(mu * Float64(Float64(Float64(-1.0 - Float64(Float64(EAccept / KbT) + t_1)) / mu) + Float64(1.0 / KbT)))))); elseif (mu <= 3.4e-94) tmp = Float64(Float64(NaChar / Float64(1.0 + t_0)) + Float64(NdChar / Float64(1.0 + Float64(1.0 + Float64(Vef / KbT))))); elseif (mu <= 1.8e+154) tmp = Float64(t_3 - Float64(NaChar / Float64(-1.0 + Float64(EAccept * Float64(Float64(Float64(Float64(mu / KbT) + Float64(-1.0 - t_1)) / EAccept) + Float64(-1.0 / KbT)))))); else tmp = t_2; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = exp(((Vef + (Ev + (EAccept - mu))) / KbT)); t_1 = (Vef / KbT) + (Ev / KbT); t_2 = (NdChar / (1.0 + exp((mu / KbT)))) + (NaChar / (1.0 + exp((-mu / KbT)))); t_3 = NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT))); tmp = 0.0; if (mu <= -6.5e+202) tmp = t_2; elseif (mu <= -3.2e-133) tmp = t_3 + (NaChar / (1.0 + ((1.0 - (EAccept * ((-1.0 / KbT) - ((Vef / (KbT * EAccept)) + (Ev / (KbT * EAccept)))))) - (mu / KbT)))); elseif (mu <= -1.4e-225) tmp = (NdChar / (1.0 + ((1.0 + ((EDonor / KbT) + ((Vef / KbT) + (mu / KbT)))) - (Ec / KbT)))) - (NaChar / (-1.0 - t_0)); elseif (mu <= 1.1e-194) tmp = t_3 + (NaChar / (1.0 - (mu * (((-1.0 - ((EAccept / KbT) + t_1)) / mu) + (1.0 / KbT))))); elseif (mu <= 3.4e-94) tmp = (NaChar / (1.0 + t_0)) + (NdChar / (1.0 + (1.0 + (Vef / KbT)))); elseif (mu <= 1.8e+154) tmp = t_3 - (NaChar / (-1.0 + (EAccept * ((((mu / KbT) + (-1.0 - t_1)) / EAccept) + (-1.0 / KbT))))); else tmp = t_2; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[Exp[N[(N[(Vef + N[(Ev + N[(EAccept - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[(N[(Vef / KbT), $MachinePrecision] + N[(Ev / KbT), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = 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$3 = N[(NdChar / N[(1.0 + N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[mu, -6.5e+202], t$95$2, If[LessEqual[mu, -3.2e-133], N[(t$95$3 + N[(NaChar / N[(1.0 + N[(N[(1.0 - N[(EAccept * N[(N[(-1.0 / KbT), $MachinePrecision] - N[(N[(Vef / N[(KbT * EAccept), $MachinePrecision]), $MachinePrecision] + N[(Ev / N[(KbT * EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[mu, -1.4e-225], N[(N[(NdChar / N[(1.0 + N[(N[(1.0 + N[(N[(EDonor / KbT), $MachinePrecision] + N[(N[(Vef / KbT), $MachinePrecision] + N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(NaChar / N[(-1.0 - t$95$0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[mu, 1.1e-194], N[(t$95$3 + N[(NaChar / N[(1.0 - N[(mu * N[(N[(N[(-1.0 - N[(N[(EAccept / KbT), $MachinePrecision] + t$95$1), $MachinePrecision]), $MachinePrecision] / mu), $MachinePrecision] + N[(1.0 / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[mu, 3.4e-94], N[(N[(NaChar / N[(1.0 + t$95$0), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(1.0 + N[(1.0 + N[(Vef / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[mu, 1.8e+154], N[(t$95$3 - N[(NaChar / N[(-1.0 + N[(EAccept * N[(N[(N[(N[(mu / KbT), $MachinePrecision] + N[(-1.0 - t$95$1), $MachinePrecision]), $MachinePrecision] / EAccept), $MachinePrecision] + N[(-1.0 / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$2]]]]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := e^{\frac{Vef + \left(Ev + \left(EAccept - mu\right)\right)}{KbT}}\\
t_1 := \frac{Vef}{KbT} + \frac{Ev}{KbT}\\
t_2 := \frac{NdChar}{1 + e^{\frac{mu}{KbT}}} + \frac{NaChar}{1 + e^{\frac{-mu}{KbT}}}\\
t_3 := \frac{NdChar}{1 + e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}}\\
\mathbf{if}\;mu \leq -6.5 \cdot 10^{+202}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;mu \leq -3.2 \cdot 10^{-133}:\\
\;\;\;\;t\_3 + \frac{NaChar}{1 + \left(\left(1 - EAccept \cdot \left(\frac{-1}{KbT} - \left(\frac{Vef}{KbT \cdot EAccept} + \frac{Ev}{KbT \cdot EAccept}\right)\right)\right) - \frac{mu}{KbT}\right)}\\
\mathbf{elif}\;mu \leq -1.4 \cdot 10^{-225}:\\
\;\;\;\;\frac{NdChar}{1 + \left(\left(1 + \left(\frac{EDonor}{KbT} + \left(\frac{Vef}{KbT} + \frac{mu}{KbT}\right)\right)\right) - \frac{Ec}{KbT}\right)} - \frac{NaChar}{-1 - t\_0}\\
\mathbf{elif}\;mu \leq 1.1 \cdot 10^{-194}:\\
\;\;\;\;t\_3 + \frac{NaChar}{1 - mu \cdot \left(\frac{-1 - \left(\frac{EAccept}{KbT} + t\_1\right)}{mu} + \frac{1}{KbT}\right)}\\
\mathbf{elif}\;mu \leq 3.4 \cdot 10^{-94}:\\
\;\;\;\;\frac{NaChar}{1 + t\_0} + \frac{NdChar}{1 + \left(1 + \frac{Vef}{KbT}\right)}\\
\mathbf{elif}\;mu \leq 1.8 \cdot 10^{+154}:\\
\;\;\;\;t\_3 - \frac{NaChar}{-1 + EAccept \cdot \left(\frac{\frac{mu}{KbT} + \left(-1 - t\_1\right)}{EAccept} + \frac{-1}{KbT}\right)}\\
\mathbf{else}:\\
\;\;\;\;t\_2\\
\end{array}
\end{array}
if mu < -6.4999999999999996e202 or 1.8e154 < mu Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 98.0%
Taylor expanded in mu around inf 93.3%
neg-mul-193.3%
distribute-neg-frac293.3%
Simplified93.3%
if -6.4999999999999996e202 < mu < -3.20000000000000013e-133Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 68.8%
Taylor expanded in EAccept around inf 76.1%
*-commutative76.1%
*-commutative76.1%
Simplified76.1%
if -3.20000000000000013e-133 < mu < -1.4e-225Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 86.9%
if -1.4e-225 < mu < 1.1000000000000001e-194Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 54.7%
Taylor expanded in mu around -inf 73.8%
if 1.1000000000000001e-194 < mu < 3.3999999999999998e-94Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 88.9%
Taylor expanded in Vef around 0 83.2%
if 3.3999999999999998e-94 < mu < 1.8e154Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 64.8%
Taylor expanded in EAccept around -inf 69.9%
Final simplification78.8%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NaChar (+ 1.0 (exp (/ (- (+ EAccept (+ Vef Ev)) mu) KbT)))))
(t_1 (/ NdChar (+ 1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT))))))
(if (<= KbT -4e-8)
(+
t_1
(/
NaChar
(-
1.0
(+
(/ mu KbT)
(+
-1.0
(/ (* EAccept (- -1.0 (+ (/ Ev EAccept) (/ Vef EAccept)))) KbT))))))
(if (<= KbT -1.95e-292)
t_0
(if (<= KbT 1.65e-167)
(+
t_1
(/
(* KbT NaChar)
(- (* Ev (- 1.0 (* EAccept (/ (- -1.0 (/ Vef EAccept)) Ev)))) mu)))
(if (<= KbT 6.5e+25)
t_0
(if (<= KbT 1.9e+51)
(+
t_1
(/
NaChar
(-
1.0
(*
mu
(+
(/
(- -1.0 (+ (/ EAccept KbT) (+ (/ Vef KbT) (/ Ev KbT))))
mu)
(/ 1.0 KbT))))))
(+
(/ NdChar (+ 1.0 (exp (/ Ec (- KbT)))))
(/ NaChar (+ 1.0 (exp (/ (- (+ 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 = NaChar / (1.0 + exp((((EAccept + (Vef + Ev)) - mu) / KbT)));
double t_1 = NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)));
double tmp;
if (KbT <= -4e-8) {
tmp = t_1 + (NaChar / (1.0 - ((mu / KbT) + (-1.0 + ((EAccept * (-1.0 - ((Ev / EAccept) + (Vef / EAccept)))) / KbT)))));
} else if (KbT <= -1.95e-292) {
tmp = t_0;
} else if (KbT <= 1.65e-167) {
tmp = t_1 + ((KbT * NaChar) / ((Ev * (1.0 - (EAccept * ((-1.0 - (Vef / EAccept)) / Ev)))) - mu));
} else if (KbT <= 6.5e+25) {
tmp = t_0;
} else if (KbT <= 1.9e+51) {
tmp = t_1 + (NaChar / (1.0 - (mu * (((-1.0 - ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) / mu) + (1.0 / KbT)))));
} else {
tmp = (NdChar / (1.0 + exp((Ec / -KbT)))) + (NaChar / (1.0 + exp((((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 = nachar / (1.0d0 + exp((((eaccept + (vef + ev)) - mu) / kbt)))
t_1 = ndchar / (1.0d0 + exp(((edonor + (mu + (vef - ec))) / kbt)))
if (kbt <= (-4d-8)) then
tmp = t_1 + (nachar / (1.0d0 - ((mu / kbt) + ((-1.0d0) + ((eaccept * ((-1.0d0) - ((ev / eaccept) + (vef / eaccept)))) / kbt)))))
else if (kbt <= (-1.95d-292)) then
tmp = t_0
else if (kbt <= 1.65d-167) then
tmp = t_1 + ((kbt * nachar) / ((ev * (1.0d0 - (eaccept * (((-1.0d0) - (vef / eaccept)) / ev)))) - mu))
else if (kbt <= 6.5d+25) then
tmp = t_0
else if (kbt <= 1.9d+51) then
tmp = t_1 + (nachar / (1.0d0 - (mu * ((((-1.0d0) - ((eaccept / kbt) + ((vef / kbt) + (ev / kbt)))) / mu) + (1.0d0 / kbt)))))
else
tmp = (ndchar / (1.0d0 + exp((ec / -kbt)))) + (nachar / (1.0d0 + exp((((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 = NaChar / (1.0 + Math.exp((((EAccept + (Vef + Ev)) - mu) / KbT)));
double t_1 = NdChar / (1.0 + Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)));
double tmp;
if (KbT <= -4e-8) {
tmp = t_1 + (NaChar / (1.0 - ((mu / KbT) + (-1.0 + ((EAccept * (-1.0 - ((Ev / EAccept) + (Vef / EAccept)))) / KbT)))));
} else if (KbT <= -1.95e-292) {
tmp = t_0;
} else if (KbT <= 1.65e-167) {
tmp = t_1 + ((KbT * NaChar) / ((Ev * (1.0 - (EAccept * ((-1.0 - (Vef / EAccept)) / Ev)))) - mu));
} else if (KbT <= 6.5e+25) {
tmp = t_0;
} else if (KbT <= 1.9e+51) {
tmp = t_1 + (NaChar / (1.0 - (mu * (((-1.0 - ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) / mu) + (1.0 / KbT)))));
} else {
tmp = (NdChar / (1.0 + Math.exp((Ec / -KbT)))) + (NaChar / (1.0 + Math.exp((((Vef + Ev) - mu) / KbT))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NaChar / (1.0 + math.exp((((EAccept + (Vef + Ev)) - mu) / KbT))) t_1 = NdChar / (1.0 + math.exp(((EDonor + (mu + (Vef - Ec))) / KbT))) tmp = 0 if KbT <= -4e-8: tmp = t_1 + (NaChar / (1.0 - ((mu / KbT) + (-1.0 + ((EAccept * (-1.0 - ((Ev / EAccept) + (Vef / EAccept)))) / KbT))))) elif KbT <= -1.95e-292: tmp = t_0 elif KbT <= 1.65e-167: tmp = t_1 + ((KbT * NaChar) / ((Ev * (1.0 - (EAccept * ((-1.0 - (Vef / EAccept)) / Ev)))) - mu)) elif KbT <= 6.5e+25: tmp = t_0 elif KbT <= 1.9e+51: tmp = t_1 + (NaChar / (1.0 - (mu * (((-1.0 - ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) / mu) + (1.0 / KbT))))) else: tmp = (NdChar / (1.0 + math.exp((Ec / -KbT)))) + (NaChar / (1.0 + math.exp((((Vef + Ev) - mu) / KbT)))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(EAccept + Float64(Vef + Ev)) - mu) / KbT)))) t_1 = Float64(NdChar / Float64(1.0 + exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) tmp = 0.0 if (KbT <= -4e-8) tmp = Float64(t_1 + Float64(NaChar / Float64(1.0 - Float64(Float64(mu / KbT) + Float64(-1.0 + Float64(Float64(EAccept * Float64(-1.0 - Float64(Float64(Ev / EAccept) + Float64(Vef / EAccept)))) / KbT)))))); elseif (KbT <= -1.95e-292) tmp = t_0; elseif (KbT <= 1.65e-167) tmp = Float64(t_1 + Float64(Float64(KbT * NaChar) / Float64(Float64(Ev * Float64(1.0 - Float64(EAccept * Float64(Float64(-1.0 - Float64(Vef / EAccept)) / Ev)))) - mu))); elseif (KbT <= 6.5e+25) tmp = t_0; elseif (KbT <= 1.9e+51) tmp = Float64(t_1 + Float64(NaChar / Float64(1.0 - Float64(mu * Float64(Float64(Float64(-1.0 - Float64(Float64(EAccept / KbT) + Float64(Float64(Vef / KbT) + Float64(Ev / KbT)))) / mu) + Float64(1.0 / KbT)))))); else tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Ec / Float64(-KbT))))) + Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(Vef + Ev) - mu) / 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 + (Vef + Ev)) - mu) / KbT))); t_1 = NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT))); tmp = 0.0; if (KbT <= -4e-8) tmp = t_1 + (NaChar / (1.0 - ((mu / KbT) + (-1.0 + ((EAccept * (-1.0 - ((Ev / EAccept) + (Vef / EAccept)))) / KbT))))); elseif (KbT <= -1.95e-292) tmp = t_0; elseif (KbT <= 1.65e-167) tmp = t_1 + ((KbT * NaChar) / ((Ev * (1.0 - (EAccept * ((-1.0 - (Vef / EAccept)) / Ev)))) - mu)); elseif (KbT <= 6.5e+25) tmp = t_0; elseif (KbT <= 1.9e+51) tmp = t_1 + (NaChar / (1.0 - (mu * (((-1.0 - ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) / mu) + (1.0 / KbT))))); else tmp = (NdChar / (1.0 + exp((Ec / -KbT)))) + (NaChar / (1.0 + exp((((Vef + Ev) - mu) / KbT)))); 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[(N[(N[(EAccept + N[(Vef + Ev), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(NdChar / N[(1.0 + N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[KbT, -4e-8], N[(t$95$1 + N[(NaChar / N[(1.0 - N[(N[(mu / KbT), $MachinePrecision] + N[(-1.0 + N[(N[(EAccept * N[(-1.0 - N[(N[(Ev / EAccept), $MachinePrecision] + N[(Vef / EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[KbT, -1.95e-292], t$95$0, If[LessEqual[KbT, 1.65e-167], N[(t$95$1 + N[(N[(KbT * NaChar), $MachinePrecision] / N[(N[(Ev * N[(1.0 - N[(EAccept * N[(N[(-1.0 - N[(Vef / EAccept), $MachinePrecision]), $MachinePrecision] / Ev), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[KbT, 6.5e+25], t$95$0, If[LessEqual[KbT, 1.9e+51], N[(t$95$1 + N[(NaChar / N[(1.0 - N[(mu * N[(N[(N[(-1.0 - N[(N[(EAccept / KbT), $MachinePrecision] + N[(N[(Vef / KbT), $MachinePrecision] + N[(Ev / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / mu), $MachinePrecision] + N[(1.0 / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar / N[(1.0 + N[Exp[N[(Ec / (-KbT)), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Exp[N[(N[(N[(Vef + Ev), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{\left(EAccept + \left(Vef + Ev\right)\right) - mu}{KbT}}}\\
t_1 := \frac{NdChar}{1 + e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}}\\
\mathbf{if}\;KbT \leq -4 \cdot 10^{-8}:\\
\;\;\;\;t\_1 + \frac{NaChar}{1 - \left(\frac{mu}{KbT} + \left(-1 + \frac{EAccept \cdot \left(-1 - \left(\frac{Ev}{EAccept} + \frac{Vef}{EAccept}\right)\right)}{KbT}\right)\right)}\\
\mathbf{elif}\;KbT \leq -1.95 \cdot 10^{-292}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;KbT \leq 1.65 \cdot 10^{-167}:\\
\;\;\;\;t\_1 + \frac{KbT \cdot NaChar}{Ev \cdot \left(1 - EAccept \cdot \frac{-1 - \frac{Vef}{EAccept}}{Ev}\right) - mu}\\
\mathbf{elif}\;KbT \leq 6.5 \cdot 10^{+25}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;KbT \leq 1.9 \cdot 10^{+51}:\\
\;\;\;\;t\_1 + \frac{NaChar}{1 - mu \cdot \left(\frac{-1 - \left(\frac{EAccept}{KbT} + \left(\frac{Vef}{KbT} + \frac{Ev}{KbT}\right)\right)}{mu} + \frac{1}{KbT}\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{Ec}{-KbT}}} + \frac{NaChar}{1 + e^{\frac{\left(Vef + Ev\right) - mu}{KbT}}}\\
\end{array}
\end{array}
if KbT < -4.0000000000000001e-8Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 71.4%
Taylor expanded in EAccept around inf 71.4%
*-commutative71.4%
*-commutative71.4%
Simplified71.4%
Taylor expanded in KbT around 0 70.1%
if -4.0000000000000001e-8 < KbT < -1.95e-292 or 1.64999999999999998e-167 < KbT < 6.50000000000000005e25Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 31.7%
*-commutative31.7%
Simplified31.7%
Taylor expanded in NdChar around 0 76.6%
if -1.95e-292 < KbT < 1.64999999999999998e-167Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 33.6%
Taylor expanded in EAccept around inf 52.3%
*-commutative52.3%
*-commutative52.3%
Simplified52.3%
Taylor expanded in KbT around 0 64.9%
+-commutative64.9%
+-commutative64.9%
associate-+l+64.9%
Simplified64.9%
Taylor expanded in Ev around inf 71.2%
associate-/l*74.2%
Simplified74.2%
if 6.50000000000000005e25 < KbT < 1.8999999999999999e51Initial program 99.8%
Simplified99.8%
Taylor expanded in KbT around inf 88.8%
Taylor expanded in mu around -inf 99.8%
if 1.8999999999999999e51 < KbT Initial program 100.0%
Simplified100.0%
Taylor expanded in Ec around inf 85.0%
associate-*r/85.0%
mul-1-neg85.0%
Simplified85.0%
Taylor expanded in EAccept around 0 81.8%
+-commutative81.8%
Simplified81.8%
Final simplification76.2%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NaChar (+ 1.0 (exp (/ (+ Vef (+ Ev (- EAccept mu))) KbT)))))
(t_1 (+ t_0 (/ NdChar (+ 1.0 (exp (/ mu KbT)))))))
(if (<= mu -6.5e+202)
t_1
(if (<= mu -4.7e+114)
(+
(/ NdChar (+ 1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT))))
(/
NaChar
(-
(- 2.0 (* EAccept (- (/ -1.0 KbT) (/ Vef (* KbT EAccept)))))
(/ mu KbT))))
(if (or (<= mu -3.5e+55) (not (<= mu 8.8e+55)))
t_1
(+ t_0 (/ NdChar (+ 1.0 (exp (/ EDonor 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(((Vef + (Ev + (EAccept - mu))) / KbT)));
double t_1 = t_0 + (NdChar / (1.0 + exp((mu / KbT))));
double tmp;
if (mu <= -6.5e+202) {
tmp = t_1;
} else if (mu <= -4.7e+114) {
tmp = (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / ((2.0 - (EAccept * ((-1.0 / KbT) - (Vef / (KbT * EAccept))))) - (mu / KbT)));
} else if ((mu <= -3.5e+55) || !(mu <= 8.8e+55)) {
tmp = t_1;
} else {
tmp = t_0 + (NdChar / (1.0 + exp((EDonor / 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 = nachar / (1.0d0 + exp(((vef + (ev + (eaccept - mu))) / kbt)))
t_1 = t_0 + (ndchar / (1.0d0 + exp((mu / kbt))))
if (mu <= (-6.5d+202)) then
tmp = t_1
else if (mu <= (-4.7d+114)) then
tmp = (ndchar / (1.0d0 + exp(((edonor + (mu + (vef - ec))) / kbt)))) + (nachar / ((2.0d0 - (eaccept * (((-1.0d0) / kbt) - (vef / (kbt * eaccept))))) - (mu / kbt)))
else if ((mu <= (-3.5d+55)) .or. (.not. (mu <= 8.8d+55))) then
tmp = t_1
else
tmp = t_0 + (ndchar / (1.0d0 + exp((edonor / 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(((Vef + (Ev + (EAccept - mu))) / KbT)));
double t_1 = t_0 + (NdChar / (1.0 + Math.exp((mu / KbT))));
double tmp;
if (mu <= -6.5e+202) {
tmp = t_1;
} else if (mu <= -4.7e+114) {
tmp = (NdChar / (1.0 + Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / ((2.0 - (EAccept * ((-1.0 / KbT) - (Vef / (KbT * EAccept))))) - (mu / KbT)));
} else if ((mu <= -3.5e+55) || !(mu <= 8.8e+55)) {
tmp = t_1;
} else {
tmp = t_0 + (NdChar / (1.0 + Math.exp((EDonor / KbT))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NaChar / (1.0 + math.exp(((Vef + (Ev + (EAccept - mu))) / KbT))) t_1 = t_0 + (NdChar / (1.0 + math.exp((mu / KbT)))) tmp = 0 if mu <= -6.5e+202: tmp = t_1 elif mu <= -4.7e+114: tmp = (NdChar / (1.0 + math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / ((2.0 - (EAccept * ((-1.0 / KbT) - (Vef / (KbT * EAccept))))) - (mu / KbT))) elif (mu <= -3.5e+55) or not (mu <= 8.8e+55): tmp = t_1 else: tmp = t_0 + (NdChar / (1.0 + math.exp((EDonor / KbT)))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Ev + Float64(EAccept - mu))) / KbT)))) t_1 = Float64(t_0 + Float64(NdChar / Float64(1.0 + exp(Float64(mu / KbT))))) tmp = 0.0 if (mu <= -6.5e+202) tmp = t_1; elseif (mu <= -4.7e+114) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) + Float64(NaChar / Float64(Float64(2.0 - Float64(EAccept * Float64(Float64(-1.0 / KbT) - Float64(Vef / Float64(KbT * EAccept))))) - Float64(mu / KbT)))); elseif ((mu <= -3.5e+55) || !(mu <= 8.8e+55)) tmp = t_1; else tmp = Float64(t_0 + Float64(NdChar / Float64(1.0 + exp(Float64(EDonor / KbT))))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT))); t_1 = t_0 + (NdChar / (1.0 + exp((mu / KbT)))); tmp = 0.0; if (mu <= -6.5e+202) tmp = t_1; elseif (mu <= -4.7e+114) tmp = (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / ((2.0 - (EAccept * ((-1.0 / KbT) - (Vef / (KbT * EAccept))))) - (mu / KbT))); elseif ((mu <= -3.5e+55) || ~((mu <= 8.8e+55))) tmp = t_1; else tmp = t_0 + (NdChar / (1.0 + exp((EDonor / KbT)))); 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[(N[(Vef + N[(Ev + N[(EAccept - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(t$95$0 + N[(NdChar / N[(1.0 + N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[mu, -6.5e+202], t$95$1, If[LessEqual[mu, -4.7e+114], N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(N[(2.0 - N[(EAccept * N[(N[(-1.0 / KbT), $MachinePrecision] - N[(Vef / N[(KbT * EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[Or[LessEqual[mu, -3.5e+55], N[Not[LessEqual[mu, 8.8e+55]], $MachinePrecision]], t$95$1, N[(t$95$0 + N[(NdChar / N[(1.0 + N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{Vef + \left(Ev + \left(EAccept - mu\right)\right)}{KbT}}}\\
t_1 := t\_0 + \frac{NdChar}{1 + e^{\frac{mu}{KbT}}}\\
\mathbf{if}\;mu \leq -6.5 \cdot 10^{+202}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;mu \leq -4.7 \cdot 10^{+114}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}} + \frac{NaChar}{\left(2 - EAccept \cdot \left(\frac{-1}{KbT} - \frac{Vef}{KbT \cdot EAccept}\right)\right) - \frac{mu}{KbT}}\\
\mathbf{elif}\;mu \leq -3.5 \cdot 10^{+55} \lor \neg \left(mu \leq 8.8 \cdot 10^{+55}\right):\\
\;\;\;\;t\_1\\
\mathbf{else}:\\
\;\;\;\;t\_0 + \frac{NdChar}{1 + e^{\frac{EDonor}{KbT}}}\\
\end{array}
\end{array}
if mu < -6.4999999999999996e202 or -4.7000000000000001e114 < mu < -3.5000000000000001e55 or 8.80000000000000042e55 < mu Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 90.5%
if -6.4999999999999996e202 < mu < -4.7000000000000001e114Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 67.6%
Taylor expanded in EAccept around inf 89.5%
*-commutative89.5%
*-commutative89.5%
Simplified89.5%
Taylor expanded in Ev around 0 84.0%
*-commutative84.0%
Simplified84.0%
if -3.5000000000000001e55 < mu < 8.80000000000000042e55Initial program 100.0%
Simplified100.0%
Taylor expanded in EDonor around inf 77.3%
Final simplification81.9%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0
(+
(/ NdChar (+ 1.0 (exp (/ mu KbT))))
(/ NaChar (+ 1.0 (exp (/ (- mu) KbT)))))))
(if (<= mu -7e+202)
t_0
(if (<= mu -1.95e-115)
(+
(/ NdChar (+ 1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT))))
(/
NaChar
(+
1.0
(-
(-
1.0
(*
EAccept
(-
(/ -1.0 KbT)
(+ (/ Vef (* KbT EAccept)) (/ Ev (* KbT EAccept))))))
(/ mu KbT)))))
(if (<= mu 2.4e+86)
(+
(/ NaChar (+ 1.0 (exp (/ (+ Vef (+ Ev (- EAccept mu))) KbT))))
(/ NdChar (+ 1.0 (exp (/ EDonor KbT)))))
t_0)))))
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((mu / KbT)))) + (NaChar / (1.0 + exp((-mu / KbT))));
double tmp;
if (mu <= -7e+202) {
tmp = t_0;
} else if (mu <= -1.95e-115) {
tmp = (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + ((1.0 - (EAccept * ((-1.0 / KbT) - ((Vef / (KbT * EAccept)) + (Ev / (KbT * EAccept)))))) - (mu / KbT))));
} else if (mu <= 2.4e+86) {
tmp = (NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT)))) + (NdChar / (1.0 + exp((EDonor / KbT))));
} else {
tmp = t_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 = (ndchar / (1.0d0 + exp((mu / kbt)))) + (nachar / (1.0d0 + exp((-mu / kbt))))
if (mu <= (-7d+202)) then
tmp = t_0
else if (mu <= (-1.95d-115)) then
tmp = (ndchar / (1.0d0 + exp(((edonor + (mu + (vef - ec))) / kbt)))) + (nachar / (1.0d0 + ((1.0d0 - (eaccept * (((-1.0d0) / kbt) - ((vef / (kbt * eaccept)) + (ev / (kbt * eaccept)))))) - (mu / kbt))))
else if (mu <= 2.4d+86) then
tmp = (nachar / (1.0d0 + exp(((vef + (ev + (eaccept - mu))) / kbt)))) + (ndchar / (1.0d0 + exp((edonor / kbt))))
else
tmp = t_0
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((mu / KbT)))) + (NaChar / (1.0 + Math.exp((-mu / KbT))));
double tmp;
if (mu <= -7e+202) {
tmp = t_0;
} else if (mu <= -1.95e-115) {
tmp = (NdChar / (1.0 + Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + ((1.0 - (EAccept * ((-1.0 / KbT) - ((Vef / (KbT * EAccept)) + (Ev / (KbT * EAccept)))))) - (mu / KbT))));
} else if (mu <= 2.4e+86) {
tmp = (NaChar / (1.0 + Math.exp(((Vef + (Ev + (EAccept - mu))) / KbT)))) + (NdChar / (1.0 + Math.exp((EDonor / KbT))));
} else {
tmp = t_0;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = (NdChar / (1.0 + math.exp((mu / KbT)))) + (NaChar / (1.0 + math.exp((-mu / KbT)))) tmp = 0 if mu <= -7e+202: tmp = t_0 elif mu <= -1.95e-115: tmp = (NdChar / (1.0 + math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + ((1.0 - (EAccept * ((-1.0 / KbT) - ((Vef / (KbT * EAccept)) + (Ev / (KbT * EAccept)))))) - (mu / KbT)))) elif mu <= 2.4e+86: tmp = (NaChar / (1.0 + math.exp(((Vef + (Ev + (EAccept - mu))) / KbT)))) + (NdChar / (1.0 + math.exp((EDonor / KbT)))) else: tmp = t_0 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(mu / KbT)))) + Float64(NaChar / Float64(1.0 + exp(Float64(Float64(-mu) / KbT))))) tmp = 0.0 if (mu <= -7e+202) tmp = t_0; elseif (mu <= -1.95e-115) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) + Float64(NaChar / Float64(1.0 + Float64(Float64(1.0 - Float64(EAccept * Float64(Float64(-1.0 / KbT) - Float64(Float64(Vef / Float64(KbT * EAccept)) + Float64(Ev / Float64(KbT * EAccept)))))) - Float64(mu / KbT))))); elseif (mu <= 2.4e+86) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Ev + Float64(EAccept - mu))) / KbT)))) + Float64(NdChar / Float64(1.0 + exp(Float64(EDonor / KbT))))); else tmp = t_0; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = (NdChar / (1.0 + exp((mu / KbT)))) + (NaChar / (1.0 + exp((-mu / KbT)))); tmp = 0.0; if (mu <= -7e+202) tmp = t_0; elseif (mu <= -1.95e-115) tmp = (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + ((1.0 - (EAccept * ((-1.0 / KbT) - ((Vef / (KbT * EAccept)) + (Ev / (KbT * EAccept)))))) - (mu / KbT)))); elseif (mu <= 2.4e+86) tmp = (NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT)))) + (NdChar / (1.0 + exp((EDonor / KbT)))); else tmp = t_0; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = 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]}, If[LessEqual[mu, -7e+202], t$95$0, If[LessEqual[mu, -1.95e-115], N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[(N[(1.0 - N[(EAccept * N[(N[(-1.0 / KbT), $MachinePrecision] - N[(N[(Vef / N[(KbT * EAccept), $MachinePrecision]), $MachinePrecision] + N[(Ev / N[(KbT * EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[mu, 2.4e+86], N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(Ev + N[(EAccept - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(1.0 + N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$0]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{1 + e^{\frac{mu}{KbT}}} + \frac{NaChar}{1 + e^{\frac{-mu}{KbT}}}\\
\mathbf{if}\;mu \leq -7 \cdot 10^{+202}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;mu \leq -1.95 \cdot 10^{-115}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}} + \frac{NaChar}{1 + \left(\left(1 - EAccept \cdot \left(\frac{-1}{KbT} - \left(\frac{Vef}{KbT \cdot EAccept} + \frac{Ev}{KbT \cdot EAccept}\right)\right)\right) - \frac{mu}{KbT}\right)}\\
\mathbf{elif}\;mu \leq 2.4 \cdot 10^{+86}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Vef + \left(Ev + \left(EAccept - mu\right)\right)}{KbT}}} + \frac{NdChar}{1 + e^{\frac{EDonor}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if mu < -6.99999999999999975e202 or 2.4e86 < mu Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 91.0%
Taylor expanded in mu around inf 84.5%
neg-mul-184.5%
distribute-neg-frac284.5%
Simplified84.5%
if -6.99999999999999975e202 < mu < -1.9499999999999999e-115Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 66.9%
Taylor expanded in EAccept around inf 76.2%
*-commutative76.2%
*-commutative76.2%
Simplified76.2%
if -1.9499999999999999e-115 < mu < 2.4e86Initial program 100.0%
Simplified100.0%
Taylor expanded in EDonor around inf 78.4%
Final simplification79.4%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NaChar (+ 1.0 (exp (/ (- (+ EAccept (+ Vef Ev)) mu) KbT)))))
(t_1 (/ NdChar (+ 1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT))))))
(if (<= KbT -8.5e-11)
(+
t_1
(/
NaChar
(-
1.0
(+
(/ mu KbT)
(+
-1.0
(/ (* EAccept (- -1.0 (+ (/ Ev EAccept) (/ Vef EAccept)))) KbT))))))
(if (<= KbT -2.2e-292)
t_0
(if (<= KbT 1.65e-167)
(+
t_1
(/
(* KbT NaChar)
(- (* Ev (- 1.0 (* EAccept (/ (- -1.0 (/ Vef EAccept)) Ev)))) mu)))
(if (<= KbT 3.1e+27)
t_0
(if (<= KbT 1.9e+86)
(+
t_1
(/
NaChar
(-
1.0
(*
mu
(+
(/
(- -1.0 (+ (/ EAccept KbT) (+ (/ Vef KbT) (/ Ev KbT))))
mu)
(/ 1.0 KbT))))))
(+
(/ NaChar (+ 1.0 (exp (/ (+ Vef (+ Ev (- EAccept mu))) KbT))))
(/ NdChar (+ 1.0 (+ 1.0 (/ Vef 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 + (Vef + Ev)) - mu) / KbT)));
double t_1 = NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)));
double tmp;
if (KbT <= -8.5e-11) {
tmp = t_1 + (NaChar / (1.0 - ((mu / KbT) + (-1.0 + ((EAccept * (-1.0 - ((Ev / EAccept) + (Vef / EAccept)))) / KbT)))));
} else if (KbT <= -2.2e-292) {
tmp = t_0;
} else if (KbT <= 1.65e-167) {
tmp = t_1 + ((KbT * NaChar) / ((Ev * (1.0 - (EAccept * ((-1.0 - (Vef / EAccept)) / Ev)))) - mu));
} else if (KbT <= 3.1e+27) {
tmp = t_0;
} else if (KbT <= 1.9e+86) {
tmp = t_1 + (NaChar / (1.0 - (mu * (((-1.0 - ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) / mu) + (1.0 / KbT)))));
} else {
tmp = (NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT)))) + (NdChar / (1.0 + (1.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) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = nachar / (1.0d0 + exp((((eaccept + (vef + ev)) - mu) / kbt)))
t_1 = ndchar / (1.0d0 + exp(((edonor + (mu + (vef - ec))) / kbt)))
if (kbt <= (-8.5d-11)) then
tmp = t_1 + (nachar / (1.0d0 - ((mu / kbt) + ((-1.0d0) + ((eaccept * ((-1.0d0) - ((ev / eaccept) + (vef / eaccept)))) / kbt)))))
else if (kbt <= (-2.2d-292)) then
tmp = t_0
else if (kbt <= 1.65d-167) then
tmp = t_1 + ((kbt * nachar) / ((ev * (1.0d0 - (eaccept * (((-1.0d0) - (vef / eaccept)) / ev)))) - mu))
else if (kbt <= 3.1d+27) then
tmp = t_0
else if (kbt <= 1.9d+86) then
tmp = t_1 + (nachar / (1.0d0 - (mu * ((((-1.0d0) - ((eaccept / kbt) + ((vef / kbt) + (ev / kbt)))) / mu) + (1.0d0 / kbt)))))
else
tmp = (nachar / (1.0d0 + exp(((vef + (ev + (eaccept - mu))) / kbt)))) + (ndchar / (1.0d0 + (1.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 t_0 = NaChar / (1.0 + Math.exp((((EAccept + (Vef + Ev)) - mu) / KbT)));
double t_1 = NdChar / (1.0 + Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)));
double tmp;
if (KbT <= -8.5e-11) {
tmp = t_1 + (NaChar / (1.0 - ((mu / KbT) + (-1.0 + ((EAccept * (-1.0 - ((Ev / EAccept) + (Vef / EAccept)))) / KbT)))));
} else if (KbT <= -2.2e-292) {
tmp = t_0;
} else if (KbT <= 1.65e-167) {
tmp = t_1 + ((KbT * NaChar) / ((Ev * (1.0 - (EAccept * ((-1.0 - (Vef / EAccept)) / Ev)))) - mu));
} else if (KbT <= 3.1e+27) {
tmp = t_0;
} else if (KbT <= 1.9e+86) {
tmp = t_1 + (NaChar / (1.0 - (mu * (((-1.0 - ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) / mu) + (1.0 / KbT)))));
} else {
tmp = (NaChar / (1.0 + Math.exp(((Vef + (Ev + (EAccept - mu))) / KbT)))) + (NdChar / (1.0 + (1.0 + (Vef / KbT))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NaChar / (1.0 + math.exp((((EAccept + (Vef + Ev)) - mu) / KbT))) t_1 = NdChar / (1.0 + math.exp(((EDonor + (mu + (Vef - Ec))) / KbT))) tmp = 0 if KbT <= -8.5e-11: tmp = t_1 + (NaChar / (1.0 - ((mu / KbT) + (-1.0 + ((EAccept * (-1.0 - ((Ev / EAccept) + (Vef / EAccept)))) / KbT))))) elif KbT <= -2.2e-292: tmp = t_0 elif KbT <= 1.65e-167: tmp = t_1 + ((KbT * NaChar) / ((Ev * (1.0 - (EAccept * ((-1.0 - (Vef / EAccept)) / Ev)))) - mu)) elif KbT <= 3.1e+27: tmp = t_0 elif KbT <= 1.9e+86: tmp = t_1 + (NaChar / (1.0 - (mu * (((-1.0 - ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) / mu) + (1.0 / KbT))))) else: tmp = (NaChar / (1.0 + math.exp(((Vef + (Ev + (EAccept - mu))) / KbT)))) + (NdChar / (1.0 + (1.0 + (Vef / KbT)))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(EAccept + Float64(Vef + Ev)) - mu) / KbT)))) t_1 = Float64(NdChar / Float64(1.0 + exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) tmp = 0.0 if (KbT <= -8.5e-11) tmp = Float64(t_1 + Float64(NaChar / Float64(1.0 - Float64(Float64(mu / KbT) + Float64(-1.0 + Float64(Float64(EAccept * Float64(-1.0 - Float64(Float64(Ev / EAccept) + Float64(Vef / EAccept)))) / KbT)))))); elseif (KbT <= -2.2e-292) tmp = t_0; elseif (KbT <= 1.65e-167) tmp = Float64(t_1 + Float64(Float64(KbT * NaChar) / Float64(Float64(Ev * Float64(1.0 - Float64(EAccept * Float64(Float64(-1.0 - Float64(Vef / EAccept)) / Ev)))) - mu))); elseif (KbT <= 3.1e+27) tmp = t_0; elseif (KbT <= 1.9e+86) tmp = Float64(t_1 + Float64(NaChar / Float64(1.0 - Float64(mu * Float64(Float64(Float64(-1.0 - Float64(Float64(EAccept / KbT) + Float64(Float64(Vef / KbT) + Float64(Ev / KbT)))) / mu) + Float64(1.0 / KbT)))))); else tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Ev + Float64(EAccept - mu))) / KbT)))) + Float64(NdChar / Float64(1.0 + Float64(1.0 + Float64(Vef / 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 + (Vef + Ev)) - mu) / KbT))); t_1 = NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT))); tmp = 0.0; if (KbT <= -8.5e-11) tmp = t_1 + (NaChar / (1.0 - ((mu / KbT) + (-1.0 + ((EAccept * (-1.0 - ((Ev / EAccept) + (Vef / EAccept)))) / KbT))))); elseif (KbT <= -2.2e-292) tmp = t_0; elseif (KbT <= 1.65e-167) tmp = t_1 + ((KbT * NaChar) / ((Ev * (1.0 - (EAccept * ((-1.0 - (Vef / EAccept)) / Ev)))) - mu)); elseif (KbT <= 3.1e+27) tmp = t_0; elseif (KbT <= 1.9e+86) tmp = t_1 + (NaChar / (1.0 - (mu * (((-1.0 - ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) / mu) + (1.0 / KbT))))); else tmp = (NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT)))) + (NdChar / (1.0 + (1.0 + (Vef / KbT)))); 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[(N[(N[(EAccept + N[(Vef + Ev), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(NdChar / N[(1.0 + N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[KbT, -8.5e-11], N[(t$95$1 + N[(NaChar / N[(1.0 - N[(N[(mu / KbT), $MachinePrecision] + N[(-1.0 + N[(N[(EAccept * N[(-1.0 - N[(N[(Ev / EAccept), $MachinePrecision] + N[(Vef / EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[KbT, -2.2e-292], t$95$0, If[LessEqual[KbT, 1.65e-167], N[(t$95$1 + N[(N[(KbT * NaChar), $MachinePrecision] / N[(N[(Ev * N[(1.0 - N[(EAccept * N[(N[(-1.0 - N[(Vef / EAccept), $MachinePrecision]), $MachinePrecision] / Ev), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[KbT, 3.1e+27], t$95$0, If[LessEqual[KbT, 1.9e+86], N[(t$95$1 + N[(NaChar / N[(1.0 - N[(mu * N[(N[(N[(-1.0 - N[(N[(EAccept / KbT), $MachinePrecision] + N[(N[(Vef / KbT), $MachinePrecision] + N[(Ev / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / mu), $MachinePrecision] + N[(1.0 / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(Ev + N[(EAccept - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(1.0 + N[(1.0 + N[(Vef / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{\left(EAccept + \left(Vef + Ev\right)\right) - mu}{KbT}}}\\
t_1 := \frac{NdChar}{1 + e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}}\\
\mathbf{if}\;KbT \leq -8.5 \cdot 10^{-11}:\\
\;\;\;\;t\_1 + \frac{NaChar}{1 - \left(\frac{mu}{KbT} + \left(-1 + \frac{EAccept \cdot \left(-1 - \left(\frac{Ev}{EAccept} + \frac{Vef}{EAccept}\right)\right)}{KbT}\right)\right)}\\
\mathbf{elif}\;KbT \leq -2.2 \cdot 10^{-292}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;KbT \leq 1.65 \cdot 10^{-167}:\\
\;\;\;\;t\_1 + \frac{KbT \cdot NaChar}{Ev \cdot \left(1 - EAccept \cdot \frac{-1 - \frac{Vef}{EAccept}}{Ev}\right) - mu}\\
\mathbf{elif}\;KbT \leq 3.1 \cdot 10^{+27}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;KbT \leq 1.9 \cdot 10^{+86}:\\
\;\;\;\;t\_1 + \frac{NaChar}{1 - mu \cdot \left(\frac{-1 - \left(\frac{EAccept}{KbT} + \left(\frac{Vef}{KbT} + \frac{Ev}{KbT}\right)\right)}{mu} + \frac{1}{KbT}\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Vef + \left(Ev + \left(EAccept - mu\right)\right)}{KbT}}} + \frac{NdChar}{1 + \left(1 + \frac{Vef}{KbT}\right)}\\
\end{array}
\end{array}
if KbT < -8.50000000000000037e-11Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 71.4%
Taylor expanded in EAccept around inf 71.4%
*-commutative71.4%
*-commutative71.4%
Simplified71.4%
Taylor expanded in KbT around 0 70.1%
if -8.50000000000000037e-11 < KbT < -2.20000000000000011e-292 or 1.64999999999999998e-167 < KbT < 3.09999999999999996e27Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 31.7%
*-commutative31.7%
Simplified31.7%
Taylor expanded in NdChar around 0 76.6%
if -2.20000000000000011e-292 < KbT < 1.64999999999999998e-167Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 33.6%
Taylor expanded in EAccept around inf 52.3%
*-commutative52.3%
*-commutative52.3%
Simplified52.3%
Taylor expanded in KbT around 0 64.9%
+-commutative64.9%
+-commutative64.9%
associate-+l+64.9%
Simplified64.9%
Taylor expanded in Ev around inf 71.2%
associate-/l*74.2%
Simplified74.2%
if 3.09999999999999996e27 < KbT < 1.89999999999999989e86Initial program 99.9%
Simplified99.9%
Taylor expanded in KbT around inf 76.9%
Taylor expanded in mu around -inf 81.6%
if 1.89999999999999989e86 < KbT Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 78.7%
Taylor expanded in Vef around 0 73.3%
Final simplification74.2%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NaChar (+ 1.0 (exp (/ (- (+ EAccept (+ Vef Ev)) mu) KbT)))))
(t_1 (/ NdChar (+ 1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT))))))
(if (<= KbT -1.15e-10)
(+
t_1
(/
NaChar
(-
1.0
(+
(/ mu KbT)
(+
-1.0
(/ (* EAccept (- -1.0 (+ (/ Ev EAccept) (/ Vef EAccept)))) KbT))))))
(if (<= KbT -2.4e-292)
t_0
(if (<= KbT 1.9e-166)
(+
t_1
(/
(* KbT NaChar)
(- (* Ev (- 1.0 (* EAccept (/ (- -1.0 (/ Vef EAccept)) Ev)))) mu)))
(if (<= KbT 1.66e+27)
t_0
(if (<= KbT 1.65e+86)
(+
t_1
(/
NaChar
(-
(- 2.0 (* EAccept (- (/ -1.0 KbT) (/ Vef (* KbT EAccept)))))
(/ mu KbT))))
(+
(/ NaChar (+ 1.0 (exp (/ (+ Vef (+ Ev (- EAccept mu))) KbT))))
(/ NdChar (+ 1.0 (+ 1.0 (/ Vef 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 + (Vef + Ev)) - mu) / KbT)));
double t_1 = NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)));
double tmp;
if (KbT <= -1.15e-10) {
tmp = t_1 + (NaChar / (1.0 - ((mu / KbT) + (-1.0 + ((EAccept * (-1.0 - ((Ev / EAccept) + (Vef / EAccept)))) / KbT)))));
} else if (KbT <= -2.4e-292) {
tmp = t_0;
} else if (KbT <= 1.9e-166) {
tmp = t_1 + ((KbT * NaChar) / ((Ev * (1.0 - (EAccept * ((-1.0 - (Vef / EAccept)) / Ev)))) - mu));
} else if (KbT <= 1.66e+27) {
tmp = t_0;
} else if (KbT <= 1.65e+86) {
tmp = t_1 + (NaChar / ((2.0 - (EAccept * ((-1.0 / KbT) - (Vef / (KbT * EAccept))))) - (mu / KbT)));
} else {
tmp = (NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT)))) + (NdChar / (1.0 + (1.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) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = nachar / (1.0d0 + exp((((eaccept + (vef + ev)) - mu) / kbt)))
t_1 = ndchar / (1.0d0 + exp(((edonor + (mu + (vef - ec))) / kbt)))
if (kbt <= (-1.15d-10)) then
tmp = t_1 + (nachar / (1.0d0 - ((mu / kbt) + ((-1.0d0) + ((eaccept * ((-1.0d0) - ((ev / eaccept) + (vef / eaccept)))) / kbt)))))
else if (kbt <= (-2.4d-292)) then
tmp = t_0
else if (kbt <= 1.9d-166) then
tmp = t_1 + ((kbt * nachar) / ((ev * (1.0d0 - (eaccept * (((-1.0d0) - (vef / eaccept)) / ev)))) - mu))
else if (kbt <= 1.66d+27) then
tmp = t_0
else if (kbt <= 1.65d+86) then
tmp = t_1 + (nachar / ((2.0d0 - (eaccept * (((-1.0d0) / kbt) - (vef / (kbt * eaccept))))) - (mu / kbt)))
else
tmp = (nachar / (1.0d0 + exp(((vef + (ev + (eaccept - mu))) / kbt)))) + (ndchar / (1.0d0 + (1.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 t_0 = NaChar / (1.0 + Math.exp((((EAccept + (Vef + Ev)) - mu) / KbT)));
double t_1 = NdChar / (1.0 + Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)));
double tmp;
if (KbT <= -1.15e-10) {
tmp = t_1 + (NaChar / (1.0 - ((mu / KbT) + (-1.0 + ((EAccept * (-1.0 - ((Ev / EAccept) + (Vef / EAccept)))) / KbT)))));
} else if (KbT <= -2.4e-292) {
tmp = t_0;
} else if (KbT <= 1.9e-166) {
tmp = t_1 + ((KbT * NaChar) / ((Ev * (1.0 - (EAccept * ((-1.0 - (Vef / EAccept)) / Ev)))) - mu));
} else if (KbT <= 1.66e+27) {
tmp = t_0;
} else if (KbT <= 1.65e+86) {
tmp = t_1 + (NaChar / ((2.0 - (EAccept * ((-1.0 / KbT) - (Vef / (KbT * EAccept))))) - (mu / KbT)));
} else {
tmp = (NaChar / (1.0 + Math.exp(((Vef + (Ev + (EAccept - mu))) / KbT)))) + (NdChar / (1.0 + (1.0 + (Vef / KbT))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NaChar / (1.0 + math.exp((((EAccept + (Vef + Ev)) - mu) / KbT))) t_1 = NdChar / (1.0 + math.exp(((EDonor + (mu + (Vef - Ec))) / KbT))) tmp = 0 if KbT <= -1.15e-10: tmp = t_1 + (NaChar / (1.0 - ((mu / KbT) + (-1.0 + ((EAccept * (-1.0 - ((Ev / EAccept) + (Vef / EAccept)))) / KbT))))) elif KbT <= -2.4e-292: tmp = t_0 elif KbT <= 1.9e-166: tmp = t_1 + ((KbT * NaChar) / ((Ev * (1.0 - (EAccept * ((-1.0 - (Vef / EAccept)) / Ev)))) - mu)) elif KbT <= 1.66e+27: tmp = t_0 elif KbT <= 1.65e+86: tmp = t_1 + (NaChar / ((2.0 - (EAccept * ((-1.0 / KbT) - (Vef / (KbT * EAccept))))) - (mu / KbT))) else: tmp = (NaChar / (1.0 + math.exp(((Vef + (Ev + (EAccept - mu))) / KbT)))) + (NdChar / (1.0 + (1.0 + (Vef / KbT)))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(EAccept + Float64(Vef + Ev)) - mu) / KbT)))) t_1 = Float64(NdChar / Float64(1.0 + exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) tmp = 0.0 if (KbT <= -1.15e-10) tmp = Float64(t_1 + Float64(NaChar / Float64(1.0 - Float64(Float64(mu / KbT) + Float64(-1.0 + Float64(Float64(EAccept * Float64(-1.0 - Float64(Float64(Ev / EAccept) + Float64(Vef / EAccept)))) / KbT)))))); elseif (KbT <= -2.4e-292) tmp = t_0; elseif (KbT <= 1.9e-166) tmp = Float64(t_1 + Float64(Float64(KbT * NaChar) / Float64(Float64(Ev * Float64(1.0 - Float64(EAccept * Float64(Float64(-1.0 - Float64(Vef / EAccept)) / Ev)))) - mu))); elseif (KbT <= 1.66e+27) tmp = t_0; elseif (KbT <= 1.65e+86) tmp = Float64(t_1 + Float64(NaChar / Float64(Float64(2.0 - Float64(EAccept * Float64(Float64(-1.0 / KbT) - Float64(Vef / Float64(KbT * EAccept))))) - Float64(mu / KbT)))); else tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Ev + Float64(EAccept - mu))) / KbT)))) + Float64(NdChar / Float64(1.0 + Float64(1.0 + Float64(Vef / 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 + (Vef + Ev)) - mu) / KbT))); t_1 = NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT))); tmp = 0.0; if (KbT <= -1.15e-10) tmp = t_1 + (NaChar / (1.0 - ((mu / KbT) + (-1.0 + ((EAccept * (-1.0 - ((Ev / EAccept) + (Vef / EAccept)))) / KbT))))); elseif (KbT <= -2.4e-292) tmp = t_0; elseif (KbT <= 1.9e-166) tmp = t_1 + ((KbT * NaChar) / ((Ev * (1.0 - (EAccept * ((-1.0 - (Vef / EAccept)) / Ev)))) - mu)); elseif (KbT <= 1.66e+27) tmp = t_0; elseif (KbT <= 1.65e+86) tmp = t_1 + (NaChar / ((2.0 - (EAccept * ((-1.0 / KbT) - (Vef / (KbT * EAccept))))) - (mu / KbT))); else tmp = (NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT)))) + (NdChar / (1.0 + (1.0 + (Vef / KbT)))); 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[(N[(N[(EAccept + N[(Vef + Ev), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(NdChar / N[(1.0 + N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[KbT, -1.15e-10], N[(t$95$1 + N[(NaChar / N[(1.0 - N[(N[(mu / KbT), $MachinePrecision] + N[(-1.0 + N[(N[(EAccept * N[(-1.0 - N[(N[(Ev / EAccept), $MachinePrecision] + N[(Vef / EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[KbT, -2.4e-292], t$95$0, If[LessEqual[KbT, 1.9e-166], N[(t$95$1 + N[(N[(KbT * NaChar), $MachinePrecision] / N[(N[(Ev * N[(1.0 - N[(EAccept * N[(N[(-1.0 - N[(Vef / EAccept), $MachinePrecision]), $MachinePrecision] / Ev), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[KbT, 1.66e+27], t$95$0, If[LessEqual[KbT, 1.65e+86], N[(t$95$1 + N[(NaChar / N[(N[(2.0 - N[(EAccept * N[(N[(-1.0 / KbT), $MachinePrecision] - N[(Vef / N[(KbT * EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(Ev + N[(EAccept - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(1.0 + N[(1.0 + N[(Vef / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{\left(EAccept + \left(Vef + Ev\right)\right) - mu}{KbT}}}\\
t_1 := \frac{NdChar}{1 + e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}}\\
\mathbf{if}\;KbT \leq -1.15 \cdot 10^{-10}:\\
\;\;\;\;t\_1 + \frac{NaChar}{1 - \left(\frac{mu}{KbT} + \left(-1 + \frac{EAccept \cdot \left(-1 - \left(\frac{Ev}{EAccept} + \frac{Vef}{EAccept}\right)\right)}{KbT}\right)\right)}\\
\mathbf{elif}\;KbT \leq -2.4 \cdot 10^{-292}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;KbT \leq 1.9 \cdot 10^{-166}:\\
\;\;\;\;t\_1 + \frac{KbT \cdot NaChar}{Ev \cdot \left(1 - EAccept \cdot \frac{-1 - \frac{Vef}{EAccept}}{Ev}\right) - mu}\\
\mathbf{elif}\;KbT \leq 1.66 \cdot 10^{+27}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;KbT \leq 1.65 \cdot 10^{+86}:\\
\;\;\;\;t\_1 + \frac{NaChar}{\left(2 - EAccept \cdot \left(\frac{-1}{KbT} - \frac{Vef}{KbT \cdot EAccept}\right)\right) - \frac{mu}{KbT}}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Vef + \left(Ev + \left(EAccept - mu\right)\right)}{KbT}}} + \frac{NdChar}{1 + \left(1 + \frac{Vef}{KbT}\right)}\\
\end{array}
\end{array}
if KbT < -1.15000000000000004e-10Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 71.4%
Taylor expanded in EAccept around inf 71.4%
*-commutative71.4%
*-commutative71.4%
Simplified71.4%
Taylor expanded in KbT around 0 70.1%
if -1.15000000000000004e-10 < KbT < -2.4000000000000001e-292 or 1.89999999999999991e-166 < KbT < 1.65999999999999986e27Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 31.7%
*-commutative31.7%
Simplified31.7%
Taylor expanded in NdChar around 0 76.6%
if -2.4000000000000001e-292 < KbT < 1.89999999999999991e-166Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 33.6%
Taylor expanded in EAccept around inf 52.3%
*-commutative52.3%
*-commutative52.3%
Simplified52.3%
Taylor expanded in KbT around 0 64.9%
+-commutative64.9%
+-commutative64.9%
associate-+l+64.9%
Simplified64.9%
Taylor expanded in Ev around inf 71.2%
associate-/l*74.2%
Simplified74.2%
if 1.65999999999999986e27 < KbT < 1.65e86Initial program 99.9%
Simplified99.9%
Taylor expanded in KbT around inf 76.9%
Taylor expanded in EAccept around inf 76.9%
*-commutative76.9%
*-commutative76.9%
Simplified76.9%
Taylor expanded in Ev around 0 77.5%
*-commutative77.5%
Simplified77.5%
if 1.65e86 < KbT Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 78.7%
Taylor expanded in Vef around 0 73.3%
Final simplification73.9%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NaChar (+ 1.0 (exp (/ (- (+ EAccept (+ Vef Ev)) mu) KbT)))))
(t_1 (/ NdChar (+ 1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT))))))
(if (<= KbT -1.45e-8)
(+
t_1
(/
NaChar
(-
1.0
(+
(/ mu KbT)
(- -1.0 (+ (/ EAccept KbT) (+ (/ Vef KbT) (/ Ev KbT))))))))
(if (<= KbT -1.35e-291)
t_0
(if (<= KbT 5.5e-167)
(+
t_1
(/
(* KbT NaChar)
(- (* Ev (- 1.0 (* EAccept (/ (- -1.0 (/ Vef EAccept)) Ev)))) mu)))
(if (<= KbT 7.2e+25)
t_0
(if (<= KbT 2.05e+86)
(+
t_1
(/
NaChar
(-
(- 2.0 (* EAccept (- (/ -1.0 KbT) (/ Vef (* KbT EAccept)))))
(/ mu KbT))))
(+
(/ NaChar (+ 1.0 (exp (/ (+ Vef (+ Ev (- EAccept mu))) KbT))))
(/ NdChar (+ 1.0 (+ 1.0 (/ Vef 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 + (Vef + Ev)) - mu) / KbT)));
double t_1 = NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)));
double tmp;
if (KbT <= -1.45e-8) {
tmp = t_1 + (NaChar / (1.0 - ((mu / KbT) + (-1.0 - ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))))));
} else if (KbT <= -1.35e-291) {
tmp = t_0;
} else if (KbT <= 5.5e-167) {
tmp = t_1 + ((KbT * NaChar) / ((Ev * (1.0 - (EAccept * ((-1.0 - (Vef / EAccept)) / Ev)))) - mu));
} else if (KbT <= 7.2e+25) {
tmp = t_0;
} else if (KbT <= 2.05e+86) {
tmp = t_1 + (NaChar / ((2.0 - (EAccept * ((-1.0 / KbT) - (Vef / (KbT * EAccept))))) - (mu / KbT)));
} else {
tmp = (NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT)))) + (NdChar / (1.0 + (1.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) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = nachar / (1.0d0 + exp((((eaccept + (vef + ev)) - mu) / kbt)))
t_1 = ndchar / (1.0d0 + exp(((edonor + (mu + (vef - ec))) / kbt)))
if (kbt <= (-1.45d-8)) then
tmp = t_1 + (nachar / (1.0d0 - ((mu / kbt) + ((-1.0d0) - ((eaccept / kbt) + ((vef / kbt) + (ev / kbt)))))))
else if (kbt <= (-1.35d-291)) then
tmp = t_0
else if (kbt <= 5.5d-167) then
tmp = t_1 + ((kbt * nachar) / ((ev * (1.0d0 - (eaccept * (((-1.0d0) - (vef / eaccept)) / ev)))) - mu))
else if (kbt <= 7.2d+25) then
tmp = t_0
else if (kbt <= 2.05d+86) then
tmp = t_1 + (nachar / ((2.0d0 - (eaccept * (((-1.0d0) / kbt) - (vef / (kbt * eaccept))))) - (mu / kbt)))
else
tmp = (nachar / (1.0d0 + exp(((vef + (ev + (eaccept - mu))) / kbt)))) + (ndchar / (1.0d0 + (1.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 t_0 = NaChar / (1.0 + Math.exp((((EAccept + (Vef + Ev)) - mu) / KbT)));
double t_1 = NdChar / (1.0 + Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)));
double tmp;
if (KbT <= -1.45e-8) {
tmp = t_1 + (NaChar / (1.0 - ((mu / KbT) + (-1.0 - ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))))));
} else if (KbT <= -1.35e-291) {
tmp = t_0;
} else if (KbT <= 5.5e-167) {
tmp = t_1 + ((KbT * NaChar) / ((Ev * (1.0 - (EAccept * ((-1.0 - (Vef / EAccept)) / Ev)))) - mu));
} else if (KbT <= 7.2e+25) {
tmp = t_0;
} else if (KbT <= 2.05e+86) {
tmp = t_1 + (NaChar / ((2.0 - (EAccept * ((-1.0 / KbT) - (Vef / (KbT * EAccept))))) - (mu / KbT)));
} else {
tmp = (NaChar / (1.0 + Math.exp(((Vef + (Ev + (EAccept - mu))) / KbT)))) + (NdChar / (1.0 + (1.0 + (Vef / KbT))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NaChar / (1.0 + math.exp((((EAccept + (Vef + Ev)) - mu) / KbT))) t_1 = NdChar / (1.0 + math.exp(((EDonor + (mu + (Vef - Ec))) / KbT))) tmp = 0 if KbT <= -1.45e-8: tmp = t_1 + (NaChar / (1.0 - ((mu / KbT) + (-1.0 - ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT))))))) elif KbT <= -1.35e-291: tmp = t_0 elif KbT <= 5.5e-167: tmp = t_1 + ((KbT * NaChar) / ((Ev * (1.0 - (EAccept * ((-1.0 - (Vef / EAccept)) / Ev)))) - mu)) elif KbT <= 7.2e+25: tmp = t_0 elif KbT <= 2.05e+86: tmp = t_1 + (NaChar / ((2.0 - (EAccept * ((-1.0 / KbT) - (Vef / (KbT * EAccept))))) - (mu / KbT))) else: tmp = (NaChar / (1.0 + math.exp(((Vef + (Ev + (EAccept - mu))) / KbT)))) + (NdChar / (1.0 + (1.0 + (Vef / KbT)))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(EAccept + Float64(Vef + Ev)) - mu) / KbT)))) t_1 = Float64(NdChar / Float64(1.0 + exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) tmp = 0.0 if (KbT <= -1.45e-8) tmp = Float64(t_1 + Float64(NaChar / Float64(1.0 - Float64(Float64(mu / KbT) + Float64(-1.0 - Float64(Float64(EAccept / KbT) + Float64(Float64(Vef / KbT) + Float64(Ev / KbT)))))))); elseif (KbT <= -1.35e-291) tmp = t_0; elseif (KbT <= 5.5e-167) tmp = Float64(t_1 + Float64(Float64(KbT * NaChar) / Float64(Float64(Ev * Float64(1.0 - Float64(EAccept * Float64(Float64(-1.0 - Float64(Vef / EAccept)) / Ev)))) - mu))); elseif (KbT <= 7.2e+25) tmp = t_0; elseif (KbT <= 2.05e+86) tmp = Float64(t_1 + Float64(NaChar / Float64(Float64(2.0 - Float64(EAccept * Float64(Float64(-1.0 / KbT) - Float64(Vef / Float64(KbT * EAccept))))) - Float64(mu / KbT)))); else tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Ev + Float64(EAccept - mu))) / KbT)))) + Float64(NdChar / Float64(1.0 + Float64(1.0 + Float64(Vef / 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 + (Vef + Ev)) - mu) / KbT))); t_1 = NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT))); tmp = 0.0; if (KbT <= -1.45e-8) tmp = t_1 + (NaChar / (1.0 - ((mu / KbT) + (-1.0 - ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT))))))); elseif (KbT <= -1.35e-291) tmp = t_0; elseif (KbT <= 5.5e-167) tmp = t_1 + ((KbT * NaChar) / ((Ev * (1.0 - (EAccept * ((-1.0 - (Vef / EAccept)) / Ev)))) - mu)); elseif (KbT <= 7.2e+25) tmp = t_0; elseif (KbT <= 2.05e+86) tmp = t_1 + (NaChar / ((2.0 - (EAccept * ((-1.0 / KbT) - (Vef / (KbT * EAccept))))) - (mu / KbT))); else tmp = (NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT)))) + (NdChar / (1.0 + (1.0 + (Vef / KbT)))); 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[(N[(N[(EAccept + N[(Vef + Ev), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(NdChar / N[(1.0 + N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[KbT, -1.45e-8], N[(t$95$1 + N[(NaChar / N[(1.0 - N[(N[(mu / KbT), $MachinePrecision] + N[(-1.0 - N[(N[(EAccept / KbT), $MachinePrecision] + N[(N[(Vef / KbT), $MachinePrecision] + N[(Ev / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[KbT, -1.35e-291], t$95$0, If[LessEqual[KbT, 5.5e-167], N[(t$95$1 + N[(N[(KbT * NaChar), $MachinePrecision] / N[(N[(Ev * N[(1.0 - N[(EAccept * N[(N[(-1.0 - N[(Vef / EAccept), $MachinePrecision]), $MachinePrecision] / Ev), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[KbT, 7.2e+25], t$95$0, If[LessEqual[KbT, 2.05e+86], N[(t$95$1 + N[(NaChar / N[(N[(2.0 - N[(EAccept * N[(N[(-1.0 / KbT), $MachinePrecision] - N[(Vef / N[(KbT * EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(Ev + N[(EAccept - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(1.0 + N[(1.0 + N[(Vef / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{\left(EAccept + \left(Vef + Ev\right)\right) - mu}{KbT}}}\\
t_1 := \frac{NdChar}{1 + e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}}\\
\mathbf{if}\;KbT \leq -1.45 \cdot 10^{-8}:\\
\;\;\;\;t\_1 + \frac{NaChar}{1 - \left(\frac{mu}{KbT} + \left(-1 - \left(\frac{EAccept}{KbT} + \left(\frac{Vef}{KbT} + \frac{Ev}{KbT}\right)\right)\right)\right)}\\
\mathbf{elif}\;KbT \leq -1.35 \cdot 10^{-291}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;KbT \leq 5.5 \cdot 10^{-167}:\\
\;\;\;\;t\_1 + \frac{KbT \cdot NaChar}{Ev \cdot \left(1 - EAccept \cdot \frac{-1 - \frac{Vef}{EAccept}}{Ev}\right) - mu}\\
\mathbf{elif}\;KbT \leq 7.2 \cdot 10^{+25}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;KbT \leq 2.05 \cdot 10^{+86}:\\
\;\;\;\;t\_1 + \frac{NaChar}{\left(2 - EAccept \cdot \left(\frac{-1}{KbT} - \frac{Vef}{KbT \cdot EAccept}\right)\right) - \frac{mu}{KbT}}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Vef + \left(Ev + \left(EAccept - mu\right)\right)}{KbT}}} + \frac{NdChar}{1 + \left(1 + \frac{Vef}{KbT}\right)}\\
\end{array}
\end{array}
if KbT < -1.4500000000000001e-8Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 71.4%
if -1.4500000000000001e-8 < KbT < -1.34999999999999996e-291 or 5.5000000000000003e-167 < KbT < 7.20000000000000031e25Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 31.7%
*-commutative31.7%
Simplified31.7%
Taylor expanded in NdChar around 0 76.6%
if -1.34999999999999996e-291 < KbT < 5.5000000000000003e-167Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 33.6%
Taylor expanded in EAccept around inf 52.3%
*-commutative52.3%
*-commutative52.3%
Simplified52.3%
Taylor expanded in KbT around 0 64.9%
+-commutative64.9%
+-commutative64.9%
associate-+l+64.9%
Simplified64.9%
Taylor expanded in Ev around inf 71.2%
associate-/l*74.2%
Simplified74.2%
if 7.20000000000000031e25 < KbT < 2.05e86Initial program 99.9%
Simplified99.9%
Taylor expanded in KbT around inf 76.9%
Taylor expanded in EAccept around inf 76.9%
*-commutative76.9%
*-commutative76.9%
Simplified76.9%
Taylor expanded in Ev around 0 77.5%
*-commutative77.5%
Simplified77.5%
if 2.05e86 < KbT Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 78.7%
Taylor expanded in Vef around 0 73.3%
Final simplification74.3%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NaChar (+ 1.0 (exp (/ (- (+ EAccept (+ Vef Ev)) mu) KbT)))))
(t_1 (/ NdChar (+ 1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT)))))
(t_2
(+
t_1
(/
NaChar
(-
(- 2.0 (* EAccept (- (/ -1.0 KbT) (/ Vef (* KbT EAccept)))))
(/ mu KbT))))))
(if (<= KbT -1.15e-10)
t_2
(if (<= KbT -1.25e-290)
t_0
(if (<= KbT 7.5e-164)
(+
t_1
(/
(* KbT NaChar)
(- (* Ev (- 1.0 (* EAccept (/ (- -1.0 (/ Vef EAccept)) Ev)))) mu)))
(if (<= KbT 5.7e+28)
t_0
(if (<= KbT 2.1e+86)
t_2
(+
(/ NaChar (+ 1.0 (exp (/ (+ Vef (+ Ev (- EAccept mu))) KbT))))
(/ NdChar (+ 1.0 (+ 1.0 (/ Vef 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 + (Vef + Ev)) - mu) / KbT)));
double t_1 = NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)));
double t_2 = t_1 + (NaChar / ((2.0 - (EAccept * ((-1.0 / KbT) - (Vef / (KbT * EAccept))))) - (mu / KbT)));
double tmp;
if (KbT <= -1.15e-10) {
tmp = t_2;
} else if (KbT <= -1.25e-290) {
tmp = t_0;
} else if (KbT <= 7.5e-164) {
tmp = t_1 + ((KbT * NaChar) / ((Ev * (1.0 - (EAccept * ((-1.0 - (Vef / EAccept)) / Ev)))) - mu));
} else if (KbT <= 5.7e+28) {
tmp = t_0;
} else if (KbT <= 2.1e+86) {
tmp = t_2;
} else {
tmp = (NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT)))) + (NdChar / (1.0 + (1.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) :: t_0
real(8) :: t_1
real(8) :: t_2
real(8) :: tmp
t_0 = nachar / (1.0d0 + exp((((eaccept + (vef + ev)) - mu) / kbt)))
t_1 = ndchar / (1.0d0 + exp(((edonor + (mu + (vef - ec))) / kbt)))
t_2 = t_1 + (nachar / ((2.0d0 - (eaccept * (((-1.0d0) / kbt) - (vef / (kbt * eaccept))))) - (mu / kbt)))
if (kbt <= (-1.15d-10)) then
tmp = t_2
else if (kbt <= (-1.25d-290)) then
tmp = t_0
else if (kbt <= 7.5d-164) then
tmp = t_1 + ((kbt * nachar) / ((ev * (1.0d0 - (eaccept * (((-1.0d0) - (vef / eaccept)) / ev)))) - mu))
else if (kbt <= 5.7d+28) then
tmp = t_0
else if (kbt <= 2.1d+86) then
tmp = t_2
else
tmp = (nachar / (1.0d0 + exp(((vef + (ev + (eaccept - mu))) / kbt)))) + (ndchar / (1.0d0 + (1.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 t_0 = NaChar / (1.0 + Math.exp((((EAccept + (Vef + Ev)) - mu) / KbT)));
double t_1 = NdChar / (1.0 + Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)));
double t_2 = t_1 + (NaChar / ((2.0 - (EAccept * ((-1.0 / KbT) - (Vef / (KbT * EAccept))))) - (mu / KbT)));
double tmp;
if (KbT <= -1.15e-10) {
tmp = t_2;
} else if (KbT <= -1.25e-290) {
tmp = t_0;
} else if (KbT <= 7.5e-164) {
tmp = t_1 + ((KbT * NaChar) / ((Ev * (1.0 - (EAccept * ((-1.0 - (Vef / EAccept)) / Ev)))) - mu));
} else if (KbT <= 5.7e+28) {
tmp = t_0;
} else if (KbT <= 2.1e+86) {
tmp = t_2;
} else {
tmp = (NaChar / (1.0 + Math.exp(((Vef + (Ev + (EAccept - mu))) / KbT)))) + (NdChar / (1.0 + (1.0 + (Vef / KbT))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NaChar / (1.0 + math.exp((((EAccept + (Vef + Ev)) - mu) / KbT))) t_1 = NdChar / (1.0 + math.exp(((EDonor + (mu + (Vef - Ec))) / KbT))) t_2 = t_1 + (NaChar / ((2.0 - (EAccept * ((-1.0 / KbT) - (Vef / (KbT * EAccept))))) - (mu / KbT))) tmp = 0 if KbT <= -1.15e-10: tmp = t_2 elif KbT <= -1.25e-290: tmp = t_0 elif KbT <= 7.5e-164: tmp = t_1 + ((KbT * NaChar) / ((Ev * (1.0 - (EAccept * ((-1.0 - (Vef / EAccept)) / Ev)))) - mu)) elif KbT <= 5.7e+28: tmp = t_0 elif KbT <= 2.1e+86: tmp = t_2 else: tmp = (NaChar / (1.0 + math.exp(((Vef + (Ev + (EAccept - mu))) / KbT)))) + (NdChar / (1.0 + (1.0 + (Vef / KbT)))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(EAccept + Float64(Vef + Ev)) - mu) / KbT)))) t_1 = Float64(NdChar / Float64(1.0 + exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) t_2 = Float64(t_1 + Float64(NaChar / Float64(Float64(2.0 - Float64(EAccept * Float64(Float64(-1.0 / KbT) - Float64(Vef / Float64(KbT * EAccept))))) - Float64(mu / KbT)))) tmp = 0.0 if (KbT <= -1.15e-10) tmp = t_2; elseif (KbT <= -1.25e-290) tmp = t_0; elseif (KbT <= 7.5e-164) tmp = Float64(t_1 + Float64(Float64(KbT * NaChar) / Float64(Float64(Ev * Float64(1.0 - Float64(EAccept * Float64(Float64(-1.0 - Float64(Vef / EAccept)) / Ev)))) - mu))); elseif (KbT <= 5.7e+28) tmp = t_0; elseif (KbT <= 2.1e+86) tmp = t_2; else tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Ev + Float64(EAccept - mu))) / KbT)))) + Float64(NdChar / Float64(1.0 + Float64(1.0 + Float64(Vef / 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 + (Vef + Ev)) - mu) / KbT))); t_1 = NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT))); t_2 = t_1 + (NaChar / ((2.0 - (EAccept * ((-1.0 / KbT) - (Vef / (KbT * EAccept))))) - (mu / KbT))); tmp = 0.0; if (KbT <= -1.15e-10) tmp = t_2; elseif (KbT <= -1.25e-290) tmp = t_0; elseif (KbT <= 7.5e-164) tmp = t_1 + ((KbT * NaChar) / ((Ev * (1.0 - (EAccept * ((-1.0 - (Vef / EAccept)) / Ev)))) - mu)); elseif (KbT <= 5.7e+28) tmp = t_0; elseif (KbT <= 2.1e+86) tmp = t_2; else tmp = (NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT)))) + (NdChar / (1.0 + (1.0 + (Vef / KbT)))); 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[(N[(N[(EAccept + N[(Vef + Ev), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(NdChar / N[(1.0 + N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(t$95$1 + N[(NaChar / N[(N[(2.0 - N[(EAccept * N[(N[(-1.0 / KbT), $MachinePrecision] - N[(Vef / N[(KbT * EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[KbT, -1.15e-10], t$95$2, If[LessEqual[KbT, -1.25e-290], t$95$0, If[LessEqual[KbT, 7.5e-164], N[(t$95$1 + N[(N[(KbT * NaChar), $MachinePrecision] / N[(N[(Ev * N[(1.0 - N[(EAccept * N[(N[(-1.0 - N[(Vef / EAccept), $MachinePrecision]), $MachinePrecision] / Ev), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[KbT, 5.7e+28], t$95$0, If[LessEqual[KbT, 2.1e+86], t$95$2, N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(Ev + N[(EAccept - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(1.0 + N[(1.0 + N[(Vef / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{\left(EAccept + \left(Vef + Ev\right)\right) - mu}{KbT}}}\\
t_1 := \frac{NdChar}{1 + e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}}\\
t_2 := t\_1 + \frac{NaChar}{\left(2 - EAccept \cdot \left(\frac{-1}{KbT} - \frac{Vef}{KbT \cdot EAccept}\right)\right) - \frac{mu}{KbT}}\\
\mathbf{if}\;KbT \leq -1.15 \cdot 10^{-10}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;KbT \leq -1.25 \cdot 10^{-290}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;KbT \leq 7.5 \cdot 10^{-164}:\\
\;\;\;\;t\_1 + \frac{KbT \cdot NaChar}{Ev \cdot \left(1 - EAccept \cdot \frac{-1 - \frac{Vef}{EAccept}}{Ev}\right) - mu}\\
\mathbf{elif}\;KbT \leq 5.7 \cdot 10^{+28}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;KbT \leq 2.1 \cdot 10^{+86}:\\
\;\;\;\;t\_2\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Vef + \left(Ev + \left(EAccept - mu\right)\right)}{KbT}}} + \frac{NdChar}{1 + \left(1 + \frac{Vef}{KbT}\right)}\\
\end{array}
\end{array}
if KbT < -1.15000000000000004e-10 or 5.7000000000000003e28 < KbT < 2.0999999999999999e86Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 72.6%
Taylor expanded in EAccept around inf 72.5%
*-commutative72.5%
*-commutative72.5%
Simplified72.5%
Taylor expanded in Ev around 0 73.7%
*-commutative73.7%
Simplified73.7%
if -1.15000000000000004e-10 < KbT < -1.25e-290 or 7.5000000000000006e-164 < KbT < 5.7000000000000003e28Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 31.7%
*-commutative31.7%
Simplified31.7%
Taylor expanded in NdChar around 0 76.6%
if -1.25e-290 < KbT < 7.5000000000000006e-164Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 33.6%
Taylor expanded in EAccept around inf 52.3%
*-commutative52.3%
*-commutative52.3%
Simplified52.3%
Taylor expanded in KbT around 0 64.9%
+-commutative64.9%
+-commutative64.9%
associate-+l+64.9%
Simplified64.9%
Taylor expanded in Ev around inf 71.2%
associate-/l*74.2%
Simplified74.2%
if 2.0999999999999999e86 < KbT Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 78.7%
Taylor expanded in Vef around 0 73.3%
Final simplification74.7%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (+ Vef (+ Ev (- EAccept mu))))
(t_1 (/ NaChar (+ 1.0 (exp (/ (- (+ EAccept (+ Vef Ev)) mu) KbT)))))
(t_2 (/ NdChar (+ 1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT)))))
(t_3
(+
t_2
(/
NaChar
(-
(- 2.0 (* EAccept (- (/ -1.0 KbT) (/ Vef (* KbT EAccept)))))
(/ mu KbT))))))
(if (<= KbT -2.3e-8)
t_3
(if (<= KbT -1e-293)
t_1
(if (<= KbT 3e-167)
(+ t_2 (* KbT (/ NaChar t_0)))
(if (<= KbT 3.8e+28)
t_1
(if (<= KbT 5.6e+85)
t_3
(+
(/ NaChar (+ 1.0 (exp (/ t_0 KbT))))
(/ NdChar (+ 1.0 (+ 1.0 (/ Vef KbT))))))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = Vef + (Ev + (EAccept - mu));
double t_1 = NaChar / (1.0 + exp((((EAccept + (Vef + Ev)) - mu) / KbT)));
double t_2 = NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)));
double t_3 = t_2 + (NaChar / ((2.0 - (EAccept * ((-1.0 / KbT) - (Vef / (KbT * EAccept))))) - (mu / KbT)));
double tmp;
if (KbT <= -2.3e-8) {
tmp = t_3;
} else if (KbT <= -1e-293) {
tmp = t_1;
} else if (KbT <= 3e-167) {
tmp = t_2 + (KbT * (NaChar / t_0));
} else if (KbT <= 3.8e+28) {
tmp = t_1;
} else if (KbT <= 5.6e+85) {
tmp = t_3;
} else {
tmp = (NaChar / (1.0 + exp((t_0 / KbT)))) + (NdChar / (1.0 + (1.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) :: t_0
real(8) :: t_1
real(8) :: t_2
real(8) :: t_3
real(8) :: tmp
t_0 = vef + (ev + (eaccept - mu))
t_1 = nachar / (1.0d0 + exp((((eaccept + (vef + ev)) - mu) / kbt)))
t_2 = ndchar / (1.0d0 + exp(((edonor + (mu + (vef - ec))) / kbt)))
t_3 = t_2 + (nachar / ((2.0d0 - (eaccept * (((-1.0d0) / kbt) - (vef / (kbt * eaccept))))) - (mu / kbt)))
if (kbt <= (-2.3d-8)) then
tmp = t_3
else if (kbt <= (-1d-293)) then
tmp = t_1
else if (kbt <= 3d-167) then
tmp = t_2 + (kbt * (nachar / t_0))
else if (kbt <= 3.8d+28) then
tmp = t_1
else if (kbt <= 5.6d+85) then
tmp = t_3
else
tmp = (nachar / (1.0d0 + exp((t_0 / kbt)))) + (ndchar / (1.0d0 + (1.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 t_0 = Vef + (Ev + (EAccept - mu));
double t_1 = NaChar / (1.0 + Math.exp((((EAccept + (Vef + Ev)) - mu) / KbT)));
double t_2 = NdChar / (1.0 + Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)));
double t_3 = t_2 + (NaChar / ((2.0 - (EAccept * ((-1.0 / KbT) - (Vef / (KbT * EAccept))))) - (mu / KbT)));
double tmp;
if (KbT <= -2.3e-8) {
tmp = t_3;
} else if (KbT <= -1e-293) {
tmp = t_1;
} else if (KbT <= 3e-167) {
tmp = t_2 + (KbT * (NaChar / t_0));
} else if (KbT <= 3.8e+28) {
tmp = t_1;
} else if (KbT <= 5.6e+85) {
tmp = t_3;
} else {
tmp = (NaChar / (1.0 + Math.exp((t_0 / KbT)))) + (NdChar / (1.0 + (1.0 + (Vef / KbT))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = Vef + (Ev + (EAccept - mu)) t_1 = NaChar / (1.0 + math.exp((((EAccept + (Vef + Ev)) - mu) / KbT))) t_2 = NdChar / (1.0 + math.exp(((EDonor + (mu + (Vef - Ec))) / KbT))) t_3 = t_2 + (NaChar / ((2.0 - (EAccept * ((-1.0 / KbT) - (Vef / (KbT * EAccept))))) - (mu / KbT))) tmp = 0 if KbT <= -2.3e-8: tmp = t_3 elif KbT <= -1e-293: tmp = t_1 elif KbT <= 3e-167: tmp = t_2 + (KbT * (NaChar / t_0)) elif KbT <= 3.8e+28: tmp = t_1 elif KbT <= 5.6e+85: tmp = t_3 else: tmp = (NaChar / (1.0 + math.exp((t_0 / KbT)))) + (NdChar / (1.0 + (1.0 + (Vef / KbT)))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Vef + Float64(Ev + Float64(EAccept - mu))) t_1 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(EAccept + Float64(Vef + Ev)) - mu) / KbT)))) t_2 = Float64(NdChar / Float64(1.0 + exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) t_3 = Float64(t_2 + Float64(NaChar / Float64(Float64(2.0 - Float64(EAccept * Float64(Float64(-1.0 / KbT) - Float64(Vef / Float64(KbT * EAccept))))) - Float64(mu / KbT)))) tmp = 0.0 if (KbT <= -2.3e-8) tmp = t_3; elseif (KbT <= -1e-293) tmp = t_1; elseif (KbT <= 3e-167) tmp = Float64(t_2 + Float64(KbT * Float64(NaChar / t_0))); elseif (KbT <= 3.8e+28) tmp = t_1; elseif (KbT <= 5.6e+85) tmp = t_3; else tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(t_0 / KbT)))) + Float64(NdChar / Float64(1.0 + Float64(1.0 + Float64(Vef / KbT))))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Vef + (Ev + (EAccept - mu)); t_1 = NaChar / (1.0 + exp((((EAccept + (Vef + Ev)) - mu) / KbT))); t_2 = NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT))); t_3 = t_2 + (NaChar / ((2.0 - (EAccept * ((-1.0 / KbT) - (Vef / (KbT * EAccept))))) - (mu / KbT))); tmp = 0.0; if (KbT <= -2.3e-8) tmp = t_3; elseif (KbT <= -1e-293) tmp = t_1; elseif (KbT <= 3e-167) tmp = t_2 + (KbT * (NaChar / t_0)); elseif (KbT <= 3.8e+28) tmp = t_1; elseif (KbT <= 5.6e+85) tmp = t_3; else tmp = (NaChar / (1.0 + exp((t_0 / KbT)))) + (NdChar / (1.0 + (1.0 + (Vef / KbT)))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(Vef + N[(Ev + N[(EAccept - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(NaChar / N[(1.0 + N[Exp[N[(N[(N[(EAccept + N[(Vef + Ev), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(NdChar / N[(1.0 + N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$3 = N[(t$95$2 + N[(NaChar / N[(N[(2.0 - N[(EAccept * N[(N[(-1.0 / KbT), $MachinePrecision] - N[(Vef / N[(KbT * EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[KbT, -2.3e-8], t$95$3, If[LessEqual[KbT, -1e-293], t$95$1, If[LessEqual[KbT, 3e-167], N[(t$95$2 + N[(KbT * N[(NaChar / t$95$0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[KbT, 3.8e+28], t$95$1, If[LessEqual[KbT, 5.6e+85], t$95$3, N[(N[(NaChar / N[(1.0 + N[Exp[N[(t$95$0 / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(1.0 + N[(1.0 + N[(Vef / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := Vef + \left(Ev + \left(EAccept - mu\right)\right)\\
t_1 := \frac{NaChar}{1 + e^{\frac{\left(EAccept + \left(Vef + Ev\right)\right) - mu}{KbT}}}\\
t_2 := \frac{NdChar}{1 + e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}}\\
t_3 := t\_2 + \frac{NaChar}{\left(2 - EAccept \cdot \left(\frac{-1}{KbT} - \frac{Vef}{KbT \cdot EAccept}\right)\right) - \frac{mu}{KbT}}\\
\mathbf{if}\;KbT \leq -2.3 \cdot 10^{-8}:\\
\;\;\;\;t\_3\\
\mathbf{elif}\;KbT \leq -1 \cdot 10^{-293}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;KbT \leq 3 \cdot 10^{-167}:\\
\;\;\;\;t\_2 + KbT \cdot \frac{NaChar}{t\_0}\\
\mathbf{elif}\;KbT \leq 3.8 \cdot 10^{+28}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;KbT \leq 5.6 \cdot 10^{+85}:\\
\;\;\;\;t\_3\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{t\_0}{KbT}}} + \frac{NdChar}{1 + \left(1 + \frac{Vef}{KbT}\right)}\\
\end{array}
\end{array}
if KbT < -2.3000000000000001e-8 or 3.7999999999999999e28 < KbT < 5.5999999999999998e85Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 72.6%
Taylor expanded in EAccept around inf 72.5%
*-commutative72.5%
*-commutative72.5%
Simplified72.5%
Taylor expanded in Ev around 0 73.7%
*-commutative73.7%
Simplified73.7%
if -2.3000000000000001e-8 < KbT < -1.0000000000000001e-293 or 2.9999999999999998e-167 < KbT < 3.7999999999999999e28Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 31.3%
*-commutative31.3%
Simplified31.3%
Taylor expanded in NdChar around 0 76.9%
if -1.0000000000000001e-293 < KbT < 2.9999999999999998e-167Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 34.5%
Taylor expanded in KbT around 0 70.2%
associate-/l*70.2%
+-commutative70.2%
+-commutative70.2%
associate-+r-70.2%
associate-+l+70.2%
Simplified70.2%
if 5.5999999999999998e85 < KbT Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 78.7%
Taylor expanded in Vef around 0 73.3%
Final simplification74.3%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NdChar (+ 1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT)))))
(t_1 (+ t_0 (* NaChar 0.5))))
(if (<= NdChar -4.2e+92)
t_1
(if (<= NdChar 5.2e+53)
(/ NaChar (+ 1.0 (exp (/ (- (+ EAccept (+ Vef Ev)) mu) KbT))))
(if (<= NdChar 1.12e+169)
t_1
(+
t_0
(*
KbT
(/
NaChar
(-
(* EAccept (+ (/ Vef EAccept) (+ 1.0 (/ Ev EAccept))))
mu)))))))))
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(((EDonor + (mu + (Vef - Ec))) / KbT)));
double t_1 = t_0 + (NaChar * 0.5);
double tmp;
if (NdChar <= -4.2e+92) {
tmp = t_1;
} else if (NdChar <= 5.2e+53) {
tmp = NaChar / (1.0 + exp((((EAccept + (Vef + Ev)) - mu) / KbT)));
} else if (NdChar <= 1.12e+169) {
tmp = t_1;
} else {
tmp = t_0 + (KbT * (NaChar / ((EAccept * ((Vef / EAccept) + (1.0 + (Ev / EAccept)))) - mu)));
}
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(((edonor + (mu + (vef - ec))) / kbt)))
t_1 = t_0 + (nachar * 0.5d0)
if (ndchar <= (-4.2d+92)) then
tmp = t_1
else if (ndchar <= 5.2d+53) then
tmp = nachar / (1.0d0 + exp((((eaccept + (vef + ev)) - mu) / kbt)))
else if (ndchar <= 1.12d+169) then
tmp = t_1
else
tmp = t_0 + (kbt * (nachar / ((eaccept * ((vef / eaccept) + (1.0d0 + (ev / eaccept)))) - mu)))
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(((EDonor + (mu + (Vef - Ec))) / KbT)));
double t_1 = t_0 + (NaChar * 0.5);
double tmp;
if (NdChar <= -4.2e+92) {
tmp = t_1;
} else if (NdChar <= 5.2e+53) {
tmp = NaChar / (1.0 + Math.exp((((EAccept + (Vef + Ev)) - mu) / KbT)));
} else if (NdChar <= 1.12e+169) {
tmp = t_1;
} else {
tmp = t_0 + (KbT * (NaChar / ((EAccept * ((Vef / EAccept) + (1.0 + (Ev / EAccept)))) - mu)));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NdChar / (1.0 + math.exp(((EDonor + (mu + (Vef - Ec))) / KbT))) t_1 = t_0 + (NaChar * 0.5) tmp = 0 if NdChar <= -4.2e+92: tmp = t_1 elif NdChar <= 5.2e+53: tmp = NaChar / (1.0 + math.exp((((EAccept + (Vef + Ev)) - mu) / KbT))) elif NdChar <= 1.12e+169: tmp = t_1 else: tmp = t_0 + (KbT * (NaChar / ((EAccept * ((Vef / EAccept) + (1.0 + (Ev / EAccept)))) - mu))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NdChar / Float64(1.0 + exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) t_1 = Float64(t_0 + Float64(NaChar * 0.5)) tmp = 0.0 if (NdChar <= -4.2e+92) tmp = t_1; elseif (NdChar <= 5.2e+53) tmp = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(EAccept + Float64(Vef + Ev)) - mu) / KbT)))); elseif (NdChar <= 1.12e+169) tmp = t_1; else tmp = Float64(t_0 + Float64(KbT * Float64(NaChar / Float64(Float64(EAccept * Float64(Float64(Vef / EAccept) + Float64(1.0 + Float64(Ev / EAccept)))) - mu)))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT))); t_1 = t_0 + (NaChar * 0.5); tmp = 0.0; if (NdChar <= -4.2e+92) tmp = t_1; elseif (NdChar <= 5.2e+53) tmp = NaChar / (1.0 + exp((((EAccept + (Vef + Ev)) - mu) / KbT))); elseif (NdChar <= 1.12e+169) tmp = t_1; else tmp = t_0 + (KbT * (NaChar / ((EAccept * ((Vef / EAccept) + (1.0 + (Ev / EAccept)))) - mu))); 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[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(t$95$0 + N[(NaChar * 0.5), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NdChar, -4.2e+92], t$95$1, If[LessEqual[NdChar, 5.2e+53], N[(NaChar / N[(1.0 + N[Exp[N[(N[(N[(EAccept + N[(Vef + Ev), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NdChar, 1.12e+169], t$95$1, N[(t$95$0 + N[(KbT * N[(NaChar / N[(N[(EAccept * N[(N[(Vef / EAccept), $MachinePrecision] + N[(1.0 + N[(Ev / EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{1 + e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}}\\
t_1 := t\_0 + NaChar \cdot 0.5\\
\mathbf{if}\;NdChar \leq -4.2 \cdot 10^{+92}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;NdChar \leq 5.2 \cdot 10^{+53}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{\left(EAccept + \left(Vef + Ev\right)\right) - mu}{KbT}}}\\
\mathbf{elif}\;NdChar \leq 1.12 \cdot 10^{+169}:\\
\;\;\;\;t\_1\\
\mathbf{else}:\\
\;\;\;\;t\_0 + KbT \cdot \frac{NaChar}{EAccept \cdot \left(\frac{Vef}{EAccept} + \left(1 + \frac{Ev}{EAccept}\right)\right) - mu}\\
\end{array}
\end{array}
if NdChar < -4.19999999999999972e92 or 5.19999999999999996e53 < NdChar < 1.11999999999999996e169Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 69.6%
Taylor expanded in KbT around inf 69.3%
if -4.19999999999999972e92 < NdChar < 5.19999999999999996e53Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 52.0%
*-commutative52.0%
Simplified52.0%
Taylor expanded in NdChar around 0 68.3%
if 1.11999999999999996e169 < NdChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 72.6%
Taylor expanded in EAccept around inf 82.4%
*-commutative82.4%
*-commutative82.4%
Simplified82.4%
Taylor expanded in KbT around 0 71.9%
+-commutative71.9%
+-commutative71.9%
associate-+l+71.9%
Simplified71.9%
associate-/l*71.9%
+-commutative71.9%
Applied egg-rr71.9%
Final simplification69.0%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (or (<= NdChar -9e+289)
(and (not (<= NdChar -6.2e+207))
(or (<= NdChar -2.85e+97) (not (<= NdChar 1.12e+54)))))
(+ (* NaChar 0.5) (/ NdChar (+ 1.0 (exp (/ (- (+ mu Vef) Ec) KbT)))))
(/ NaChar (+ 1.0 (exp (/ (- (+ 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 tmp;
if ((NdChar <= -9e+289) || (!(NdChar <= -6.2e+207) && ((NdChar <= -2.85e+97) || !(NdChar <= 1.12e+54)))) {
tmp = (NaChar * 0.5) + (NdChar / (1.0 + exp((((mu + Vef) - Ec) / KbT))));
} else {
tmp = NaChar / (1.0 + exp((((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) :: tmp
if ((ndchar <= (-9d+289)) .or. (.not. (ndchar <= (-6.2d+207))) .and. (ndchar <= (-2.85d+97)) .or. (.not. (ndchar <= 1.12d+54))) then
tmp = (nachar * 0.5d0) + (ndchar / (1.0d0 + exp((((mu + vef) - ec) / kbt))))
else
tmp = nachar / (1.0d0 + exp((((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 tmp;
if ((NdChar <= -9e+289) || (!(NdChar <= -6.2e+207) && ((NdChar <= -2.85e+97) || !(NdChar <= 1.12e+54)))) {
tmp = (NaChar * 0.5) + (NdChar / (1.0 + Math.exp((((mu + Vef) - Ec) / KbT))));
} else {
tmp = NaChar / (1.0 + Math.exp((((EAccept + (Vef + Ev)) - mu) / KbT)));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if (NdChar <= -9e+289) or (not (NdChar <= -6.2e+207) and ((NdChar <= -2.85e+97) or not (NdChar <= 1.12e+54))): tmp = (NaChar * 0.5) + (NdChar / (1.0 + math.exp((((mu + Vef) - Ec) / KbT)))) else: tmp = NaChar / (1.0 + math.exp((((EAccept + (Vef + Ev)) - mu) / KbT))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if ((NdChar <= -9e+289) || (!(NdChar <= -6.2e+207) && ((NdChar <= -2.85e+97) || !(NdChar <= 1.12e+54)))) tmp = Float64(Float64(NaChar * 0.5) + Float64(NdChar / Float64(1.0 + exp(Float64(Float64(Float64(mu + Vef) - Ec) / KbT))))); else tmp = Float64(NaChar / Float64(1.0 + exp(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) tmp = 0.0; if ((NdChar <= -9e+289) || (~((NdChar <= -6.2e+207)) && ((NdChar <= -2.85e+97) || ~((NdChar <= 1.12e+54))))) tmp = (NaChar * 0.5) + (NdChar / (1.0 + exp((((mu + Vef) - Ec) / KbT)))); else tmp = NaChar / (1.0 + exp((((EAccept + (Vef + Ev)) - mu) / KbT))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[Or[LessEqual[NdChar, -9e+289], And[N[Not[LessEqual[NdChar, -6.2e+207]], $MachinePrecision], Or[LessEqual[NdChar, -2.85e+97], N[Not[LessEqual[NdChar, 1.12e+54]], $MachinePrecision]]]], N[(N[(NaChar * 0.5), $MachinePrecision] + N[(NdChar / N[(1.0 + N[Exp[N[(N[(N[(mu + Vef), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(NaChar / N[(1.0 + N[Exp[N[(N[(N[(EAccept + N[(Vef + Ev), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NdChar \leq -9 \cdot 10^{+289} \lor \neg \left(NdChar \leq -6.2 \cdot 10^{+207}\right) \land \left(NdChar \leq -2.85 \cdot 10^{+97} \lor \neg \left(NdChar \leq 1.12 \cdot 10^{+54}\right)\right):\\
\;\;\;\;NaChar \cdot 0.5 + \frac{NdChar}{1 + e^{\frac{\left(mu + Vef\right) - Ec}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{\left(EAccept + \left(Vef + Ev\right)\right) - mu}{KbT}}}\\
\end{array}
\end{array}
if NdChar < -8.99999999999999969e289 or -6.2000000000000005e207 < NdChar < -2.8500000000000001e97 or 1.12e54 < NdChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 70.6%
Taylor expanded in KbT around inf 70.2%
Taylor expanded in EDonor around 0 61.2%
if -8.99999999999999969e289 < NdChar < -6.2000000000000005e207 or -2.8500000000000001e97 < NdChar < 1.12e54Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 48.6%
*-commutative48.6%
Simplified48.6%
Taylor expanded in NdChar around 0 67.2%
Final simplification65.3%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (<= KbT -1.1e+107)
(+ (* NdChar 0.5) (/ NaChar (+ 1.0 (exp (/ Ev KbT)))))
(if (or (<= KbT -4.2e+83) (and (not (<= KbT -85000.0)) (<= KbT 2.3e+200)))
(/ NaChar (+ 1.0 (exp (/ (- (+ EAccept (+ Vef Ev)) mu) KbT))))
(+ (/ NdChar (+ 1.0 (exp (/ EDonor KbT)))) (/ NaChar 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 <= -1.1e+107) {
tmp = (NdChar * 0.5) + (NaChar / (1.0 + exp((Ev / KbT))));
} else if ((KbT <= -4.2e+83) || (!(KbT <= -85000.0) && (KbT <= 2.3e+200))) {
tmp = NaChar / (1.0 + exp((((EAccept + (Vef + Ev)) - mu) / KbT)));
} else {
tmp = (NdChar / (1.0 + exp((EDonor / KbT)))) + (NaChar / 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 <= (-1.1d+107)) then
tmp = (ndchar * 0.5d0) + (nachar / (1.0d0 + exp((ev / kbt))))
else if ((kbt <= (-4.2d+83)) .or. (.not. (kbt <= (-85000.0d0))) .and. (kbt <= 2.3d+200)) then
tmp = nachar / (1.0d0 + exp((((eaccept + (vef + ev)) - mu) / kbt)))
else
tmp = (ndchar / (1.0d0 + exp((edonor / kbt)))) + (nachar / 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 <= -1.1e+107) {
tmp = (NdChar * 0.5) + (NaChar / (1.0 + Math.exp((Ev / KbT))));
} else if ((KbT <= -4.2e+83) || (!(KbT <= -85000.0) && (KbT <= 2.3e+200))) {
tmp = NaChar / (1.0 + Math.exp((((EAccept + (Vef + Ev)) - mu) / KbT)));
} else {
tmp = (NdChar / (1.0 + Math.exp((EDonor / KbT)))) + (NaChar / 2.0);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if KbT <= -1.1e+107: tmp = (NdChar * 0.5) + (NaChar / (1.0 + math.exp((Ev / KbT)))) elif (KbT <= -4.2e+83) or (not (KbT <= -85000.0) and (KbT <= 2.3e+200)): tmp = NaChar / (1.0 + math.exp((((EAccept + (Vef + Ev)) - mu) / KbT))) else: tmp = (NdChar / (1.0 + math.exp((EDonor / KbT)))) + (NaChar / 2.0) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (KbT <= -1.1e+107) tmp = Float64(Float64(NdChar * 0.5) + Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT))))); elseif ((KbT <= -4.2e+83) || (!(KbT <= -85000.0) && (KbT <= 2.3e+200))) tmp = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(EAccept + Float64(Vef + Ev)) - mu) / KbT)))); else tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(EDonor / KbT)))) + Float64(NaChar / 2.0)); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (KbT <= -1.1e+107) tmp = (NdChar * 0.5) + (NaChar / (1.0 + exp((Ev / KbT)))); elseif ((KbT <= -4.2e+83) || (~((KbT <= -85000.0)) && (KbT <= 2.3e+200))) tmp = NaChar / (1.0 + exp((((EAccept + (Vef + Ev)) - mu) / KbT))); else tmp = (NdChar / (1.0 + exp((EDonor / KbT)))) + (NaChar / 2.0); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[KbT, -1.1e+107], N[(N[(NdChar * 0.5), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[Or[LessEqual[KbT, -4.2e+83], And[N[Not[LessEqual[KbT, -85000.0]], $MachinePrecision], LessEqual[KbT, 2.3e+200]]], N[(NaChar / N[(1.0 + N[Exp[N[(N[(N[(EAccept + N[(Vef + Ev), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar / N[(1.0 + N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / 2.0), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;KbT \leq -1.1 \cdot 10^{+107}:\\
\;\;\;\;NdChar \cdot 0.5 + \frac{NaChar}{1 + e^{\frac{Ev}{KbT}}}\\
\mathbf{elif}\;KbT \leq -4.2 \cdot 10^{+83} \lor \neg \left(KbT \leq -85000\right) \land KbT \leq 2.3 \cdot 10^{+200}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{\left(EAccept + \left(Vef + Ev\right)\right) - mu}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{EDonor}{KbT}}} + \frac{NaChar}{2}\\
\end{array}
\end{array}
if KbT < -1.1e107Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 76.8%
*-commutative76.8%
Simplified76.8%
Taylor expanded in Ev around inf 65.1%
if -1.1e107 < KbT < -4.20000000000000005e83 or -85000 < KbT < 2.30000000000000003e200Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 37.0%
*-commutative37.0%
Simplified37.0%
Taylor expanded in NdChar around 0 65.3%
if -4.20000000000000005e83 < KbT < -85000 or 2.30000000000000003e200 < KbT Initial program 100.0%
Simplified100.0%
Taylor expanded in EDonor around inf 75.6%
Taylor expanded in KbT around inf 59.3%
Final simplification64.4%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (or (<= NdChar -2.8e+95) (not (<= NdChar 1.42e+54)))
(+
(/ NdChar (+ 1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT))))
(* NaChar 0.5))
(/ NaChar (+ 1.0 (exp (/ (- (+ 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 tmp;
if ((NdChar <= -2.8e+95) || !(NdChar <= 1.42e+54)) {
tmp = (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar * 0.5);
} else {
tmp = NaChar / (1.0 + exp((((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) :: tmp
if ((ndchar <= (-2.8d+95)) .or. (.not. (ndchar <= 1.42d+54))) then
tmp = (ndchar / (1.0d0 + exp(((edonor + (mu + (vef - ec))) / kbt)))) + (nachar * 0.5d0)
else
tmp = nachar / (1.0d0 + exp((((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 tmp;
if ((NdChar <= -2.8e+95) || !(NdChar <= 1.42e+54)) {
tmp = (NdChar / (1.0 + Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar * 0.5);
} else {
tmp = NaChar / (1.0 + Math.exp((((EAccept + (Vef + Ev)) - mu) / KbT)));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if (NdChar <= -2.8e+95) or not (NdChar <= 1.42e+54): tmp = (NdChar / (1.0 + math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar * 0.5) else: tmp = NaChar / (1.0 + math.exp((((EAccept + (Vef + Ev)) - mu) / KbT))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if ((NdChar <= -2.8e+95) || !(NdChar <= 1.42e+54)) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) + Float64(NaChar * 0.5)); else tmp = Float64(NaChar / Float64(1.0 + exp(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) tmp = 0.0; if ((NdChar <= -2.8e+95) || ~((NdChar <= 1.42e+54))) tmp = (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar * 0.5); else tmp = NaChar / (1.0 + exp((((EAccept + (Vef + Ev)) - mu) / KbT))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[Or[LessEqual[NdChar, -2.8e+95], N[Not[LessEqual[NdChar, 1.42e+54]], $MachinePrecision]], N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar * 0.5), $MachinePrecision]), $MachinePrecision], N[(NaChar / N[(1.0 + N[Exp[N[(N[(N[(EAccept + N[(Vef + Ev), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NdChar \leq -2.8 \cdot 10^{+95} \lor \neg \left(NdChar \leq 1.42 \cdot 10^{+54}\right):\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}} + NaChar \cdot 0.5\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{\left(EAccept + \left(Vef + Ev\right)\right) - mu}{KbT}}}\\
\end{array}
\end{array}
if NdChar < -2.7999999999999998e95 or 1.41999999999999995e54 < NdChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 70.4%
Taylor expanded in KbT around inf 66.9%
if -2.7999999999999998e95 < NdChar < 1.41999999999999995e54Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 52.0%
*-commutative52.0%
Simplified52.0%
Taylor expanded in NdChar around 0 68.3%
Final simplification67.7%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (<= KbT -1.65e-16)
(+ (/ NdChar (+ 1.0 (exp (/ EDonor KbT)))) (/ NaChar 2.0))
(if (<= KbT 1.2e+25)
(/ NaChar (+ 1.0 (exp (/ EAccept KbT))))
(+ (/ NdChar (+ 1.0 (exp (/ Ec (- KbT))))) (* NaChar 0.5)))))
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.65e-16) {
tmp = (NdChar / (1.0 + exp((EDonor / KbT)))) + (NaChar / 2.0);
} else if (KbT <= 1.2e+25) {
tmp = NaChar / (1.0 + exp((EAccept / KbT)));
} else {
tmp = (NdChar / (1.0 + exp((Ec / -KbT)))) + (NaChar * 0.5);
}
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.65d-16)) then
tmp = (ndchar / (1.0d0 + exp((edonor / kbt)))) + (nachar / 2.0d0)
else if (kbt <= 1.2d+25) then
tmp = nachar / (1.0d0 + exp((eaccept / kbt)))
else
tmp = (ndchar / (1.0d0 + exp((ec / -kbt)))) + (nachar * 0.5d0)
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.65e-16) {
tmp = (NdChar / (1.0 + Math.exp((EDonor / KbT)))) + (NaChar / 2.0);
} else if (KbT <= 1.2e+25) {
tmp = NaChar / (1.0 + Math.exp((EAccept / KbT)));
} else {
tmp = (NdChar / (1.0 + Math.exp((Ec / -KbT)))) + (NaChar * 0.5);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if KbT <= -1.65e-16: tmp = (NdChar / (1.0 + math.exp((EDonor / KbT)))) + (NaChar / 2.0) elif KbT <= 1.2e+25: tmp = NaChar / (1.0 + math.exp((EAccept / KbT))) else: tmp = (NdChar / (1.0 + math.exp((Ec / -KbT)))) + (NaChar * 0.5) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (KbT <= -1.65e-16) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(EDonor / KbT)))) + Float64(NaChar / 2.0)); elseif (KbT <= 1.2e+25) tmp = Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT)))); else tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Ec / Float64(-KbT))))) + Float64(NaChar * 0.5)); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (KbT <= -1.65e-16) tmp = (NdChar / (1.0 + exp((EDonor / KbT)))) + (NaChar / 2.0); elseif (KbT <= 1.2e+25) tmp = NaChar / (1.0 + exp((EAccept / KbT))); else tmp = (NdChar / (1.0 + exp((Ec / -KbT)))) + (NaChar * 0.5); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[KbT, -1.65e-16], N[(N[(NdChar / N[(1.0 + N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / 2.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[KbT, 1.2e+25], N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar / N[(1.0 + N[Exp[N[(Ec / (-KbT)), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar * 0.5), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;KbT \leq -1.65 \cdot 10^{-16}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{EDonor}{KbT}}} + \frac{NaChar}{2}\\
\mathbf{elif}\;KbT \leq 1.2 \cdot 10^{+25}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{Ec}{-KbT}}} + NaChar \cdot 0.5\\
\end{array}
\end{array}
if KbT < -1.64999999999999994e-16Initial program 100.0%
Simplified100.0%
Taylor expanded in EDonor around inf 72.4%
Taylor expanded in KbT around inf 55.3%
if -1.64999999999999994e-16 < KbT < 1.19999999999999998e25Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 29.9%
*-commutative29.9%
Simplified29.9%
Taylor expanded in EAccept around inf 19.3%
Taylor expanded in NdChar around 0 37.5%
if 1.19999999999999998e25 < KbT Initial program 99.9%
Simplified99.9%
Taylor expanded in KbT around inf 67.2%
Taylor expanded in KbT around inf 64.2%
Taylor expanded in Ec around inf 53.1%
associate-*r/80.3%
mul-1-neg80.3%
Simplified53.1%
Final simplification46.7%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (exp (/ EAccept KbT))))
(if (or (<= KbT -5.2e-9) (not (<= KbT 3e+49)))
(- (* NdChar 0.5) (/ NaChar (- -1.0 t_0)))
(/ NaChar (+ 1.0 t_0)))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = exp((EAccept / KbT));
double tmp;
if ((KbT <= -5.2e-9) || !(KbT <= 3e+49)) {
tmp = (NdChar * 0.5) - (NaChar / (-1.0 - t_0));
} else {
tmp = NaChar / (1.0 + t_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 = exp((eaccept / kbt))
if ((kbt <= (-5.2d-9)) .or. (.not. (kbt <= 3d+49))) then
tmp = (ndchar * 0.5d0) - (nachar / ((-1.0d0) - t_0))
else
tmp = nachar / (1.0d0 + t_0)
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 = Math.exp((EAccept / KbT));
double tmp;
if ((KbT <= -5.2e-9) || !(KbT <= 3e+49)) {
tmp = (NdChar * 0.5) - (NaChar / (-1.0 - t_0));
} else {
tmp = NaChar / (1.0 + t_0);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = math.exp((EAccept / KbT)) tmp = 0 if (KbT <= -5.2e-9) or not (KbT <= 3e+49): tmp = (NdChar * 0.5) - (NaChar / (-1.0 - t_0)) else: tmp = NaChar / (1.0 + t_0) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = exp(Float64(EAccept / KbT)) tmp = 0.0 if ((KbT <= -5.2e-9) || !(KbT <= 3e+49)) tmp = Float64(Float64(NdChar * 0.5) - Float64(NaChar / Float64(-1.0 - t_0))); else tmp = Float64(NaChar / Float64(1.0 + t_0)); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = exp((EAccept / KbT)); tmp = 0.0; if ((KbT <= -5.2e-9) || ~((KbT <= 3e+49))) tmp = (NdChar * 0.5) - (NaChar / (-1.0 - t_0)); else tmp = NaChar / (1.0 + t_0); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]}, If[Or[LessEqual[KbT, -5.2e-9], N[Not[LessEqual[KbT, 3e+49]], $MachinePrecision]], N[(N[(NdChar * 0.5), $MachinePrecision] - N[(NaChar / N[(-1.0 - t$95$0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(NaChar / N[(1.0 + t$95$0), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := e^{\frac{EAccept}{KbT}}\\
\mathbf{if}\;KbT \leq -5.2 \cdot 10^{-9} \lor \neg \left(KbT \leq 3 \cdot 10^{+49}\right):\\
\;\;\;\;NdChar \cdot 0.5 - \frac{NaChar}{-1 - t\_0}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + t\_0}\\
\end{array}
\end{array}
if KbT < -5.2000000000000002e-9 or 3.0000000000000002e49 < KbT Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 61.5%
*-commutative61.5%
Simplified61.5%
Taylor expanded in EAccept around inf 52.7%
if -5.2000000000000002e-9 < KbT < 3.0000000000000002e49Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 30.0%
*-commutative30.0%
Simplified30.0%
Taylor expanded in EAccept around inf 19.0%
Taylor expanded in NdChar around 0 37.2%
Final simplification45.2%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (<= KbT -2.55e-14)
(+ (/ NdChar (+ 1.0 (exp (/ EDonor KbT)))) (/ NaChar 2.0))
(if (<= KbT 2.05e+49)
(/ NaChar (+ 1.0 (exp (/ EAccept KbT))))
(+ (* NdChar 0.5) (/ NaChar (+ 1.0 (exp (/ Ev 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 <= -2.55e-14) {
tmp = (NdChar / (1.0 + exp((EDonor / KbT)))) + (NaChar / 2.0);
} else if (KbT <= 2.05e+49) {
tmp = NaChar / (1.0 + exp((EAccept / KbT)));
} else {
tmp = (NdChar * 0.5) + (NaChar / (1.0 + exp((Ev / 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 <= (-2.55d-14)) then
tmp = (ndchar / (1.0d0 + exp((edonor / kbt)))) + (nachar / 2.0d0)
else if (kbt <= 2.05d+49) then
tmp = nachar / (1.0d0 + exp((eaccept / kbt)))
else
tmp = (ndchar * 0.5d0) + (nachar / (1.0d0 + exp((ev / 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 <= -2.55e-14) {
tmp = (NdChar / (1.0 + Math.exp((EDonor / KbT)))) + (NaChar / 2.0);
} else if (KbT <= 2.05e+49) {
tmp = NaChar / (1.0 + Math.exp((EAccept / KbT)));
} else {
tmp = (NdChar * 0.5) + (NaChar / (1.0 + Math.exp((Ev / KbT))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if KbT <= -2.55e-14: tmp = (NdChar / (1.0 + math.exp((EDonor / KbT)))) + (NaChar / 2.0) elif KbT <= 2.05e+49: tmp = NaChar / (1.0 + math.exp((EAccept / KbT))) else: tmp = (NdChar * 0.5) + (NaChar / (1.0 + math.exp((Ev / KbT)))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (KbT <= -2.55e-14) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(EDonor / KbT)))) + Float64(NaChar / 2.0)); elseif (KbT <= 2.05e+49) tmp = Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT)))); else tmp = Float64(Float64(NdChar * 0.5) + Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT))))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (KbT <= -2.55e-14) tmp = (NdChar / (1.0 + exp((EDonor / KbT)))) + (NaChar / 2.0); elseif (KbT <= 2.05e+49) tmp = NaChar / (1.0 + exp((EAccept / KbT))); else tmp = (NdChar * 0.5) + (NaChar / (1.0 + exp((Ev / KbT)))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[KbT, -2.55e-14], N[(N[(NdChar / N[(1.0 + N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / 2.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[KbT, 2.05e+49], N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar * 0.5), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;KbT \leq -2.55 \cdot 10^{-14}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{EDonor}{KbT}}} + \frac{NaChar}{2}\\
\mathbf{elif}\;KbT \leq 2.05 \cdot 10^{+49}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;NdChar \cdot 0.5 + \frac{NaChar}{1 + e^{\frac{Ev}{KbT}}}\\
\end{array}
\end{array}
if KbT < -2.5499999999999999e-14Initial program 100.0%
Simplified100.0%
Taylor expanded in EDonor around inf 72.4%
Taylor expanded in KbT around inf 55.3%
if -2.5499999999999999e-14 < KbT < 2.05e49Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 29.4%
*-commutative29.4%
Simplified29.4%
Taylor expanded in EAccept around inf 19.2%
Taylor expanded in NdChar around 0 37.5%
if 2.05e49 < KbT Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 67.0%
*-commutative67.0%
Simplified67.0%
Taylor expanded in Ev around inf 53.4%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (exp (/ EAccept KbT))))
(if (<= KbT -5.6e-8)
(- (* NdChar 0.5) (/ NaChar (- -1.0 t_0)))
(if (<= KbT 2.2e+49)
(/ NaChar (+ 1.0 t_0))
(+ (* NdChar 0.5) (/ NaChar (+ 1.0 (exp (/ Ev KbT)))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = exp((EAccept / KbT));
double tmp;
if (KbT <= -5.6e-8) {
tmp = (NdChar * 0.5) - (NaChar / (-1.0 - t_0));
} else if (KbT <= 2.2e+49) {
tmp = NaChar / (1.0 + t_0);
} else {
tmp = (NdChar * 0.5) + (NaChar / (1.0 + exp((Ev / 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 = exp((eaccept / kbt))
if (kbt <= (-5.6d-8)) then
tmp = (ndchar * 0.5d0) - (nachar / ((-1.0d0) - t_0))
else if (kbt <= 2.2d+49) then
tmp = nachar / (1.0d0 + t_0)
else
tmp = (ndchar * 0.5d0) + (nachar / (1.0d0 + exp((ev / 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 = Math.exp((EAccept / KbT));
double tmp;
if (KbT <= -5.6e-8) {
tmp = (NdChar * 0.5) - (NaChar / (-1.0 - t_0));
} else if (KbT <= 2.2e+49) {
tmp = NaChar / (1.0 + t_0);
} else {
tmp = (NdChar * 0.5) + (NaChar / (1.0 + Math.exp((Ev / KbT))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = math.exp((EAccept / KbT)) tmp = 0 if KbT <= -5.6e-8: tmp = (NdChar * 0.5) - (NaChar / (-1.0 - t_0)) elif KbT <= 2.2e+49: tmp = NaChar / (1.0 + t_0) else: tmp = (NdChar * 0.5) + (NaChar / (1.0 + math.exp((Ev / KbT)))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = exp(Float64(EAccept / KbT)) tmp = 0.0 if (KbT <= -5.6e-8) tmp = Float64(Float64(NdChar * 0.5) - Float64(NaChar / Float64(-1.0 - t_0))); elseif (KbT <= 2.2e+49) tmp = Float64(NaChar / Float64(1.0 + t_0)); else tmp = Float64(Float64(NdChar * 0.5) + Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT))))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = exp((EAccept / KbT)); tmp = 0.0; if (KbT <= -5.6e-8) tmp = (NdChar * 0.5) - (NaChar / (-1.0 - t_0)); elseif (KbT <= 2.2e+49) tmp = NaChar / (1.0 + t_0); else tmp = (NdChar * 0.5) + (NaChar / (1.0 + exp((Ev / KbT)))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]}, If[LessEqual[KbT, -5.6e-8], N[(N[(NdChar * 0.5), $MachinePrecision] - N[(NaChar / N[(-1.0 - t$95$0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[KbT, 2.2e+49], N[(NaChar / N[(1.0 + t$95$0), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar * 0.5), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := e^{\frac{EAccept}{KbT}}\\
\mathbf{if}\;KbT \leq -5.6 \cdot 10^{-8}:\\
\;\;\;\;NdChar \cdot 0.5 - \frac{NaChar}{-1 - t\_0}\\
\mathbf{elif}\;KbT \leq 2.2 \cdot 10^{+49}:\\
\;\;\;\;\frac{NaChar}{1 + t\_0}\\
\mathbf{else}:\\
\;\;\;\;NdChar \cdot 0.5 + \frac{NaChar}{1 + e^{\frac{Ev}{KbT}}}\\
\end{array}
\end{array}
if KbT < -5.5999999999999999e-8Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 57.8%
*-commutative57.8%
Simplified57.8%
Taylor expanded in EAccept around inf 54.7%
if -5.5999999999999999e-8 < KbT < 2.2000000000000001e49Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 30.0%
*-commutative30.0%
Simplified30.0%
Taylor expanded in EAccept around inf 19.0%
Taylor expanded in NdChar around 0 37.2%
if 2.2000000000000001e49 < KbT Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 67.0%
*-commutative67.0%
Simplified67.0%
Taylor expanded in Ev around inf 53.4%
Final simplification45.9%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (<= KbT -6.5e-8)
(+
(/
NaChar
(+
1.0
(-
(-
1.0
(*
EAccept
(- (/ -1.0 KbT) (+ (/ Vef (* KbT EAccept)) (/ Ev (* KbT EAccept))))))
(/ mu KbT))))
(* NdChar 0.5))
(if (<= KbT 3.75e+49)
(/ NaChar (+ 1.0 (exp (/ EAccept KbT))))
(* 0.5 (+ NdChar NaChar)))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (KbT <= -6.5e-8) {
tmp = (NaChar / (1.0 + ((1.0 - (EAccept * ((-1.0 / KbT) - ((Vef / (KbT * EAccept)) + (Ev / (KbT * EAccept)))))) - (mu / KbT)))) + (NdChar * 0.5);
} else if (KbT <= 3.75e+49) {
tmp = NaChar / (1.0 + exp((EAccept / KbT)));
} else {
tmp = 0.5 * (NdChar + 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 (kbt <= (-6.5d-8)) then
tmp = (nachar / (1.0d0 + ((1.0d0 - (eaccept * (((-1.0d0) / kbt) - ((vef / (kbt * eaccept)) + (ev / (kbt * eaccept)))))) - (mu / kbt)))) + (ndchar * 0.5d0)
else if (kbt <= 3.75d+49) then
tmp = nachar / (1.0d0 + exp((eaccept / kbt)))
else
tmp = 0.5d0 * (ndchar + 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 (KbT <= -6.5e-8) {
tmp = (NaChar / (1.0 + ((1.0 - (EAccept * ((-1.0 / KbT) - ((Vef / (KbT * EAccept)) + (Ev / (KbT * EAccept)))))) - (mu / KbT)))) + (NdChar * 0.5);
} else if (KbT <= 3.75e+49) {
tmp = NaChar / (1.0 + Math.exp((EAccept / KbT)));
} else {
tmp = 0.5 * (NdChar + NaChar);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if KbT <= -6.5e-8: tmp = (NaChar / (1.0 + ((1.0 - (EAccept * ((-1.0 / KbT) - ((Vef / (KbT * EAccept)) + (Ev / (KbT * EAccept)))))) - (mu / KbT)))) + (NdChar * 0.5) elif KbT <= 3.75e+49: tmp = NaChar / (1.0 + math.exp((EAccept / KbT))) else: tmp = 0.5 * (NdChar + NaChar) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (KbT <= -6.5e-8) tmp = Float64(Float64(NaChar / Float64(1.0 + Float64(Float64(1.0 - Float64(EAccept * Float64(Float64(-1.0 / KbT) - Float64(Float64(Vef / Float64(KbT * EAccept)) + Float64(Ev / Float64(KbT * EAccept)))))) - Float64(mu / KbT)))) + Float64(NdChar * 0.5)); elseif (KbT <= 3.75e+49) tmp = Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT)))); else tmp = Float64(0.5 * Float64(NdChar + NaChar)); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (KbT <= -6.5e-8) tmp = (NaChar / (1.0 + ((1.0 - (EAccept * ((-1.0 / KbT) - ((Vef / (KbT * EAccept)) + (Ev / (KbT * EAccept)))))) - (mu / KbT)))) + (NdChar * 0.5); elseif (KbT <= 3.75e+49) tmp = NaChar / (1.0 + exp((EAccept / KbT))); else tmp = 0.5 * (NdChar + NaChar); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[KbT, -6.5e-8], N[(N[(NaChar / N[(1.0 + N[(N[(1.0 - N[(EAccept * N[(N[(-1.0 / KbT), $MachinePrecision] - N[(N[(Vef / N[(KbT * EAccept), $MachinePrecision]), $MachinePrecision] + N[(Ev / N[(KbT * EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar * 0.5), $MachinePrecision]), $MachinePrecision], If[LessEqual[KbT, 3.75e+49], N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(0.5 * N[(NdChar + NaChar), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;KbT \leq -6.5 \cdot 10^{-8}:\\
\;\;\;\;\frac{NaChar}{1 + \left(\left(1 - EAccept \cdot \left(\frac{-1}{KbT} - \left(\frac{Vef}{KbT \cdot EAccept} + \frac{Ev}{KbT \cdot EAccept}\right)\right)\right) - \frac{mu}{KbT}\right)} + NdChar \cdot 0.5\\
\mathbf{elif}\;KbT \leq 3.75 \cdot 10^{+49}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \left(NdChar + NaChar\right)\\
\end{array}
\end{array}
if KbT < -6.49999999999999997e-8Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 71.4%
Taylor expanded in EAccept around inf 71.4%
*-commutative71.4%
*-commutative71.4%
Simplified71.4%
Taylor expanded in KbT around inf 49.0%
*-commutative57.8%
Simplified49.0%
if -6.49999999999999997e-8 < KbT < 3.7499999999999998e49Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 30.0%
*-commutative30.0%
Simplified30.0%
Taylor expanded in EAccept around inf 19.0%
Taylor expanded in NdChar around 0 37.2%
if 3.7499999999999998e49 < KbT Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 67.0%
*-commutative67.0%
Simplified67.0%
Taylor expanded in KbT around inf 45.3%
distribute-lft-out45.3%
Simplified45.3%
Final simplification42.5%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (<= EDonor 1.15e-63)
(+
(/
NaChar
(+
1.0
(-
(-
1.0
(*
EAccept
(- (/ -1.0 KbT) (+ (/ Vef (* KbT EAccept)) (/ Ev (* KbT EAccept))))))
(/ mu KbT))))
(/
NdChar
(+
1.0
(- (+ 1.0 (+ (/ EDonor KbT) (+ (/ Vef KbT) (/ mu KbT)))) (/ Ec KbT)))))
(* 0.5 (+ NdChar NaChar))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (EDonor <= 1.15e-63) {
tmp = (NaChar / (1.0 + ((1.0 - (EAccept * ((-1.0 / KbT) - ((Vef / (KbT * EAccept)) + (Ev / (KbT * EAccept)))))) - (mu / KbT)))) + (NdChar / (1.0 + ((1.0 + ((EDonor / KbT) + ((Vef / KbT) + (mu / KbT)))) - (Ec / KbT))));
} else {
tmp = 0.5 * (NdChar + 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 (edonor <= 1.15d-63) then
tmp = (nachar / (1.0d0 + ((1.0d0 - (eaccept * (((-1.0d0) / kbt) - ((vef / (kbt * eaccept)) + (ev / (kbt * eaccept)))))) - (mu / kbt)))) + (ndchar / (1.0d0 + ((1.0d0 + ((edonor / kbt) + ((vef / kbt) + (mu / kbt)))) - (ec / kbt))))
else
tmp = 0.5d0 * (ndchar + 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 (EDonor <= 1.15e-63) {
tmp = (NaChar / (1.0 + ((1.0 - (EAccept * ((-1.0 / KbT) - ((Vef / (KbT * EAccept)) + (Ev / (KbT * EAccept)))))) - (mu / KbT)))) + (NdChar / (1.0 + ((1.0 + ((EDonor / KbT) + ((Vef / KbT) + (mu / KbT)))) - (Ec / KbT))));
} else {
tmp = 0.5 * (NdChar + NaChar);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if EDonor <= 1.15e-63: tmp = (NaChar / (1.0 + ((1.0 - (EAccept * ((-1.0 / KbT) - ((Vef / (KbT * EAccept)) + (Ev / (KbT * EAccept)))))) - (mu / KbT)))) + (NdChar / (1.0 + ((1.0 + ((EDonor / KbT) + ((Vef / KbT) + (mu / KbT)))) - (Ec / KbT)))) else: tmp = 0.5 * (NdChar + NaChar) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (EDonor <= 1.15e-63) tmp = Float64(Float64(NaChar / Float64(1.0 + Float64(Float64(1.0 - Float64(EAccept * Float64(Float64(-1.0 / KbT) - Float64(Float64(Vef / Float64(KbT * EAccept)) + Float64(Ev / Float64(KbT * EAccept)))))) - Float64(mu / KbT)))) + Float64(NdChar / Float64(1.0 + Float64(Float64(1.0 + Float64(Float64(EDonor / KbT) + Float64(Float64(Vef / KbT) + Float64(mu / KbT)))) - Float64(Ec / KbT))))); else tmp = Float64(0.5 * Float64(NdChar + NaChar)); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (EDonor <= 1.15e-63) tmp = (NaChar / (1.0 + ((1.0 - (EAccept * ((-1.0 / KbT) - ((Vef / (KbT * EAccept)) + (Ev / (KbT * EAccept)))))) - (mu / KbT)))) + (NdChar / (1.0 + ((1.0 + ((EDonor / KbT) + ((Vef / KbT) + (mu / KbT)))) - (Ec / KbT)))); else tmp = 0.5 * (NdChar + NaChar); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[EDonor, 1.15e-63], N[(N[(NaChar / N[(1.0 + N[(N[(1.0 - N[(EAccept * N[(N[(-1.0 / KbT), $MachinePrecision] - N[(N[(Vef / N[(KbT * EAccept), $MachinePrecision]), $MachinePrecision] + N[(Ev / N[(KbT * EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(1.0 + N[(N[(1.0 + N[(N[(EDonor / KbT), $MachinePrecision] + N[(N[(Vef / KbT), $MachinePrecision] + N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(0.5 * N[(NdChar + NaChar), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;EDonor \leq 1.15 \cdot 10^{-63}:\\
\;\;\;\;\frac{NaChar}{1 + \left(\left(1 - EAccept \cdot \left(\frac{-1}{KbT} - \left(\frac{Vef}{KbT \cdot EAccept} + \frac{Ev}{KbT \cdot EAccept}\right)\right)\right) - \frac{mu}{KbT}\right)} + \frac{NdChar}{1 + \left(\left(1 + \left(\frac{EDonor}{KbT} + \left(\frac{Vef}{KbT} + \frac{mu}{KbT}\right)\right)\right) - \frac{Ec}{KbT}\right)}\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \left(NdChar + NaChar\right)\\
\end{array}
\end{array}
if EDonor < 1.15e-63Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 57.9%
Taylor expanded in EAccept around inf 62.1%
*-commutative62.1%
*-commutative62.1%
Simplified62.1%
Taylor expanded in KbT around inf 39.5%
if 1.15e-63 < EDonor Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 41.5%
*-commutative41.5%
Simplified41.5%
Taylor expanded in KbT around inf 21.7%
distribute-lft-out21.7%
Simplified21.7%
Final simplification33.1%
(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 46.1%
*-commutative46.1%
Simplified46.1%
Taylor expanded in KbT around inf 28.8%
distribute-lft-out28.8%
Simplified28.8%
Final simplification28.8%
herbie shell --seed 2024086
(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))))))