
(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 31 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 (pow (sqrt (exp (/ (+ EDonor (+ Vef (- mu Ec))) KbT))) 2.0))) (/ 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 + pow(sqrt(exp(((EDonor + (Vef + (mu - Ec))) / KbT))), 2.0))) + (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 + (sqrt(exp(((edonor + (vef + (mu - ec))) / kbt))) ** 2.0d0))) + (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.pow(Math.sqrt(Math.exp(((EDonor + (Vef + (mu - Ec))) / KbT))), 2.0))) + (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.pow(math.sqrt(math.exp(((EDonor + (Vef + (mu - Ec))) / KbT))), 2.0))) + (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 + (sqrt(exp(Float64(Float64(EDonor + Float64(Vef + Float64(mu - Ec))) / KbT))) ^ 2.0))) + 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 + (sqrt(exp(((EDonor + (Vef + (mu - Ec))) / KbT))) ^ 2.0))) + (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[Power[N[Sqrt[N[Exp[N[(N[(EDonor + N[(Vef + N[(mu - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]], $MachinePrecision], 2.0], $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 + {\left(\sqrt{e^{\frac{EDonor + \left(Vef + \left(mu - Ec\right)\right)}{KbT}}}\right)}^{2}} + \frac{NaChar}{1 + e^{\frac{Vef + \left(Ev + \left(EAccept - mu\right)\right)}{KbT}}}
\end{array}
Initial program 100.0%
Simplified100.0%
add-sqr-sqrt100.0%
pow2100.0%
*-un-lft-identity100.0%
*-un-lft-identity100.0%
+-commutative100.0%
associate-+l-100.0%
Applied egg-rr100.0%
Final simplification100.0%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NaChar (+ 1.0 (exp (/ (+ Vef (+ Ev (- EAccept mu))) KbT)))))
(t_1 (+ t_0 (/ NdChar (+ 1.0 (exp (/ mu KbT))))))
(t_2 (exp (/ (- EDonor (- (- Ec Vef) mu)) KbT))))
(if (<= mu -2e+100)
t_1
(if (<= mu -4.2e-299)
(+ t_0 (/ NdChar (+ 1.0 (exp (/ Vef KbT)))))
(if (<= mu 2050000000000.0)
(+ (/ NdChar (+ 1.0 t_2)) (/ NaChar (+ 1.0 (exp (/ EAccept KbT)))))
(if (<= mu 8.4e+120)
(- (/ NaChar (+ 1.0 (exp (/ Ev KbT)))) (/ NdChar (- -1.0 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((mu / KbT))));
double t_2 = exp(((EDonor - ((Ec - Vef) - mu)) / KbT));
double tmp;
if (mu <= -2e+100) {
tmp = t_1;
} else if (mu <= -4.2e-299) {
tmp = t_0 + (NdChar / (1.0 + exp((Vef / KbT))));
} else if (mu <= 2050000000000.0) {
tmp = (NdChar / (1.0 + t_2)) + (NaChar / (1.0 + exp((EAccept / KbT))));
} else if (mu <= 8.4e+120) {
tmp = (NaChar / (1.0 + exp((Ev / KbT)))) - (NdChar / (-1.0 - 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((mu / kbt))))
t_2 = exp(((edonor - ((ec - vef) - mu)) / kbt))
if (mu <= (-2d+100)) then
tmp = t_1
else if (mu <= (-4.2d-299)) then
tmp = t_0 + (ndchar / (1.0d0 + exp((vef / kbt))))
else if (mu <= 2050000000000.0d0) then
tmp = (ndchar / (1.0d0 + t_2)) + (nachar / (1.0d0 + exp((eaccept / kbt))))
else if (mu <= 8.4d+120) then
tmp = (nachar / (1.0d0 + exp((ev / kbt)))) - (ndchar / ((-1.0d0) - 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((mu / KbT))));
double t_2 = Math.exp(((EDonor - ((Ec - Vef) - mu)) / KbT));
double tmp;
if (mu <= -2e+100) {
tmp = t_1;
} else if (mu <= -4.2e-299) {
tmp = t_0 + (NdChar / (1.0 + Math.exp((Vef / KbT))));
} else if (mu <= 2050000000000.0) {
tmp = (NdChar / (1.0 + t_2)) + (NaChar / (1.0 + Math.exp((EAccept / KbT))));
} else if (mu <= 8.4e+120) {
tmp = (NaChar / (1.0 + Math.exp((Ev / KbT)))) - (NdChar / (-1.0 - 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((mu / KbT)))) t_2 = math.exp(((EDonor - ((Ec - Vef) - mu)) / KbT)) tmp = 0 if mu <= -2e+100: tmp = t_1 elif mu <= -4.2e-299: tmp = t_0 + (NdChar / (1.0 + math.exp((Vef / KbT)))) elif mu <= 2050000000000.0: tmp = (NdChar / (1.0 + t_2)) + (NaChar / (1.0 + math.exp((EAccept / KbT)))) elif mu <= 8.4e+120: tmp = (NaChar / (1.0 + math.exp((Ev / KbT)))) - (NdChar / (-1.0 - 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(mu / KbT))))) t_2 = exp(Float64(Float64(EDonor - Float64(Float64(Ec - Vef) - mu)) / KbT)) tmp = 0.0 if (mu <= -2e+100) tmp = t_1; elseif (mu <= -4.2e-299) tmp = Float64(t_0 + Float64(NdChar / Float64(1.0 + exp(Float64(Vef / KbT))))); elseif (mu <= 2050000000000.0) tmp = Float64(Float64(NdChar / Float64(1.0 + t_2)) + Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT))))); elseif (mu <= 8.4e+120) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT)))) - Float64(NdChar / Float64(-1.0 - 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((mu / KbT)))); t_2 = exp(((EDonor - ((Ec - Vef) - mu)) / KbT)); tmp = 0.0; if (mu <= -2e+100) tmp = t_1; elseif (mu <= -4.2e-299) tmp = t_0 + (NdChar / (1.0 + exp((Vef / KbT)))); elseif (mu <= 2050000000000.0) tmp = (NdChar / (1.0 + t_2)) + (NaChar / (1.0 + exp((EAccept / KbT)))); elseif (mu <= 8.4e+120) tmp = (NaChar / (1.0 + exp((Ev / KbT)))) - (NdChar / (-1.0 - 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[(mu / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[Exp[N[(N[(EDonor - N[(N[(Ec - Vef), $MachinePrecision] - mu), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]}, If[LessEqual[mu, -2e+100], t$95$1, If[LessEqual[mu, -4.2e-299], N[(t$95$0 + N[(NdChar / N[(1.0 + N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[mu, 2050000000000.0], N[(N[(NdChar / N[(1.0 + t$95$2), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[mu, 8.4e+120], N[(N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(NdChar / N[(-1.0 - t$95$2), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], 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{mu}{KbT}}}\\
t_2 := e^{\frac{EDonor - \left(\left(Ec - Vef\right) - mu\right)}{KbT}}\\
\mathbf{if}\;mu \leq -2 \cdot 10^{+100}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;mu \leq -4.2 \cdot 10^{-299}:\\
\;\;\;\;t\_0 + \frac{NdChar}{1 + e^{\frac{Vef}{KbT}}}\\
\mathbf{elif}\;mu \leq 2050000000000:\\
\;\;\;\;\frac{NdChar}{1 + t\_2} + \frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}}\\
\mathbf{elif}\;mu \leq 8.4 \cdot 10^{+120}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Ev}{KbT}}} - \frac{NdChar}{-1 - t\_2}\\
\mathbf{else}:\\
\;\;\;\;t\_1\\
\end{array}
\end{array}
if mu < -2.00000000000000003e100 or 8.4000000000000002e120 < mu Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 87.6%
if -2.00000000000000003e100 < mu < -4.2000000000000002e-299Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 84.8%
if -4.2000000000000002e-299 < mu < 2.05e12Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 70.5%
if 2.05e12 < mu < 8.4000000000000002e120Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 83.2%
Final simplification81.9%
(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
(+
(/ NdChar (+ 1.0 (exp (/ Vef KbT))))
(/ NaChar (+ 1.0 (exp (/ (- (+ Vef Ev) mu) KbT)))))))
(if (<= NdChar -1.16e+210)
(+
(/ NdChar (+ 1.0 (exp (/ (- EDonor (- (- Ec Vef) mu)) KbT))))
(/
NaChar
(+
1.0
(-
(+ 1.0 (+ (/ EAccept KbT) (+ (/ Vef KbT) (/ Ev KbT))))
(/ mu KbT)))))
(if (<= NdChar -8e-148)
t_1
(if (<= NdChar 4e-51)
(+ t_0 (/ NdChar (+ 1.0 (* Ec (+ (/ Vef (* Ec KbT)) (/ -1.0 KbT))))))
(if (<= NdChar 2.3e+107) (+ NdChar t_0) 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 = (NdChar / (1.0 + exp((Vef / KbT)))) + (NaChar / (1.0 + exp((((Vef + Ev) - mu) / KbT))));
double tmp;
if (NdChar <= -1.16e+210) {
tmp = (NdChar / (1.0 + exp(((EDonor - ((Ec - Vef) - mu)) / KbT)))) + (NaChar / (1.0 + ((1.0 + ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) - (mu / KbT))));
} else if (NdChar <= -8e-148) {
tmp = t_1;
} else if (NdChar <= 4e-51) {
tmp = t_0 + (NdChar / (1.0 + (Ec * ((Vef / (Ec * KbT)) + (-1.0 / KbT)))));
} else if (NdChar <= 2.3e+107) {
tmp = NdChar + t_0;
} 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) :: tmp
t_0 = nachar / (1.0d0 + exp(((vef + (ev + (eaccept - mu))) / kbt)))
t_1 = (ndchar / (1.0d0 + exp((vef / kbt)))) + (nachar / (1.0d0 + exp((((vef + ev) - mu) / kbt))))
if (ndchar <= (-1.16d+210)) then
tmp = (ndchar / (1.0d0 + exp(((edonor - ((ec - vef) - mu)) / kbt)))) + (nachar / (1.0d0 + ((1.0d0 + ((eaccept / kbt) + ((vef / kbt) + (ev / kbt)))) - (mu / kbt))))
else if (ndchar <= (-8d-148)) then
tmp = t_1
else if (ndchar <= 4d-51) then
tmp = t_0 + (ndchar / (1.0d0 + (ec * ((vef / (ec * kbt)) + ((-1.0d0) / kbt)))))
else if (ndchar <= 2.3d+107) then
tmp = ndchar + t_0
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 = (NdChar / (1.0 + Math.exp((Vef / KbT)))) + (NaChar / (1.0 + Math.exp((((Vef + Ev) - mu) / KbT))));
double tmp;
if (NdChar <= -1.16e+210) {
tmp = (NdChar / (1.0 + Math.exp(((EDonor - ((Ec - Vef) - mu)) / KbT)))) + (NaChar / (1.0 + ((1.0 + ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) - (mu / KbT))));
} else if (NdChar <= -8e-148) {
tmp = t_1;
} else if (NdChar <= 4e-51) {
tmp = t_0 + (NdChar / (1.0 + (Ec * ((Vef / (Ec * KbT)) + (-1.0 / KbT)))));
} else if (NdChar <= 2.3e+107) {
tmp = NdChar + t_0;
} 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 = (NdChar / (1.0 + math.exp((Vef / KbT)))) + (NaChar / (1.0 + math.exp((((Vef + Ev) - mu) / KbT)))) tmp = 0 if NdChar <= -1.16e+210: tmp = (NdChar / (1.0 + math.exp(((EDonor - ((Ec - Vef) - mu)) / KbT)))) + (NaChar / (1.0 + ((1.0 + ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) - (mu / KbT)))) elif NdChar <= -8e-148: tmp = t_1 elif NdChar <= 4e-51: tmp = t_0 + (NdChar / (1.0 + (Ec * ((Vef / (Ec * KbT)) + (-1.0 / KbT))))) elif NdChar <= 2.3e+107: tmp = NdChar + t_0 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(Float64(NdChar / Float64(1.0 + exp(Float64(Vef / KbT)))) + Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(Vef + Ev) - mu) / KbT))))) tmp = 0.0 if (NdChar <= -1.16e+210) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(EDonor - Float64(Float64(Ec - Vef) - mu)) / KbT)))) + Float64(NaChar / Float64(1.0 + Float64(Float64(1.0 + Float64(Float64(EAccept / KbT) + Float64(Float64(Vef / KbT) + Float64(Ev / KbT)))) - Float64(mu / KbT))))); elseif (NdChar <= -8e-148) tmp = t_1; elseif (NdChar <= 4e-51) tmp = Float64(t_0 + Float64(NdChar / Float64(1.0 + Float64(Ec * Float64(Float64(Vef / Float64(Ec * KbT)) + Float64(-1.0 / KbT)))))); elseif (NdChar <= 2.3e+107) tmp = Float64(NdChar + t_0); 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 = (NdChar / (1.0 + exp((Vef / KbT)))) + (NaChar / (1.0 + exp((((Vef + Ev) - mu) / KbT)))); tmp = 0.0; if (NdChar <= -1.16e+210) tmp = (NdChar / (1.0 + exp(((EDonor - ((Ec - Vef) - mu)) / KbT)))) + (NaChar / (1.0 + ((1.0 + ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) - (mu / KbT)))); elseif (NdChar <= -8e-148) tmp = t_1; elseif (NdChar <= 4e-51) tmp = t_0 + (NdChar / (1.0 + (Ec * ((Vef / (Ec * KbT)) + (-1.0 / KbT))))); elseif (NdChar <= 2.3e+107) tmp = NdChar + t_0; 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[(N[(NdChar / N[(1.0 + N[Exp[N[(Vef / 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]}, If[LessEqual[NdChar, -1.16e+210], N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(EDonor - N[(N[(Ec - Vef), $MachinePrecision] - mu), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[(N[(1.0 + N[(N[(EAccept / KbT), $MachinePrecision] + N[(N[(Vef / KbT), $MachinePrecision] + N[(Ev / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NdChar, -8e-148], t$95$1, If[LessEqual[NdChar, 4e-51], N[(t$95$0 + N[(NdChar / N[(1.0 + N[(Ec * N[(N[(Vef / N[(Ec * KbT), $MachinePrecision]), $MachinePrecision] + N[(-1.0 / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NdChar, 2.3e+107], N[(NdChar + t$95$0), $MachinePrecision], 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 := \frac{NdChar}{1 + e^{\frac{Vef}{KbT}}} + \frac{NaChar}{1 + e^{\frac{\left(Vef + Ev\right) - mu}{KbT}}}\\
\mathbf{if}\;NdChar \leq -1.16 \cdot 10^{+210}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{EDonor - \left(\left(Ec - Vef\right) - mu\right)}{KbT}}} + \frac{NaChar}{1 + \left(\left(1 + \left(\frac{EAccept}{KbT} + \left(\frac{Vef}{KbT} + \frac{Ev}{KbT}\right)\right)\right) - \frac{mu}{KbT}\right)}\\
\mathbf{elif}\;NdChar \leq -8 \cdot 10^{-148}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;NdChar \leq 4 \cdot 10^{-51}:\\
\;\;\;\;t\_0 + \frac{NdChar}{1 + Ec \cdot \left(\frac{Vef}{Ec \cdot KbT} + \frac{-1}{KbT}\right)}\\
\mathbf{elif}\;NdChar \leq 2.3 \cdot 10^{+107}:\\
\;\;\;\;NdChar + t\_0\\
\mathbf{else}:\\
\;\;\;\;t\_1\\
\end{array}
\end{array}
if NdChar < -1.16e210Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 88.3%
if -1.16e210 < NdChar < -7.99999999999999949e-148 or 2.3e107 < NdChar Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 74.5%
Taylor expanded in EAccept around 0 71.2%
if -7.99999999999999949e-148 < NdChar < 4e-51Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 71.1%
Taylor expanded in Ec around -inf 74.6%
mul-1-neg74.6%
*-commutative74.6%
distribute-rgt-neg-in74.6%
+-commutative74.6%
mul-1-neg74.6%
unsub-neg74.6%
associate-+r+74.6%
Simplified74.6%
Taylor expanded in Vef around inf 83.9%
*-commutative83.9%
Simplified83.9%
if 4e-51 < NdChar < 2.3e107Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 46.3%
Taylor expanded in Ec around -inf 46.4%
mul-1-neg46.4%
*-commutative46.4%
distribute-rgt-neg-in46.4%
+-commutative46.4%
mul-1-neg46.4%
unsub-neg46.4%
associate-+r+46.4%
Simplified46.4%
Taylor expanded in Vef around inf 51.0%
Taylor expanded in Vef around 0 82.1%
Final simplification78.5%
(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 -1.15e+100)
t_1
(if (<= mu -2.5e-300)
(+ t_0 (/ NdChar (+ 1.0 (exp (/ Vef KbT)))))
(if (<= mu 1.18e+122)
(+
(/ NdChar (+ 1.0 (exp (/ (- EDonor (- (- Ec Vef) mu)) KbT))))
(/ NaChar (+ 1.0 (exp (/ EAccept KbT)))))
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((mu / KbT))));
double tmp;
if (mu <= -1.15e+100) {
tmp = t_1;
} else if (mu <= -2.5e-300) {
tmp = t_0 + (NdChar / (1.0 + exp((Vef / KbT))));
} else if (mu <= 1.18e+122) {
tmp = (NdChar / (1.0 + exp(((EDonor - ((Ec - Vef) - mu)) / KbT)))) + (NaChar / (1.0 + exp((EAccept / KbT))));
} 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) :: tmp
t_0 = nachar / (1.0d0 + exp(((vef + (ev + (eaccept - mu))) / kbt)))
t_1 = t_0 + (ndchar / (1.0d0 + exp((mu / kbt))))
if (mu <= (-1.15d+100)) then
tmp = t_1
else if (mu <= (-2.5d-300)) then
tmp = t_0 + (ndchar / (1.0d0 + exp((vef / kbt))))
else if (mu <= 1.18d+122) then
tmp = (ndchar / (1.0d0 + exp(((edonor - ((ec - vef) - mu)) / kbt)))) + (nachar / (1.0d0 + exp((eaccept / kbt))))
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((mu / KbT))));
double tmp;
if (mu <= -1.15e+100) {
tmp = t_1;
} else if (mu <= -2.5e-300) {
tmp = t_0 + (NdChar / (1.0 + Math.exp((Vef / KbT))));
} else if (mu <= 1.18e+122) {
tmp = (NdChar / (1.0 + Math.exp(((EDonor - ((Ec - Vef) - mu)) / KbT)))) + (NaChar / (1.0 + Math.exp((EAccept / KbT))));
} 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((mu / KbT)))) tmp = 0 if mu <= -1.15e+100: tmp = t_1 elif mu <= -2.5e-300: tmp = t_0 + (NdChar / (1.0 + math.exp((Vef / KbT)))) elif mu <= 1.18e+122: tmp = (NdChar / (1.0 + math.exp(((EDonor - ((Ec - Vef) - mu)) / KbT)))) + (NaChar / (1.0 + math.exp((EAccept / KbT)))) 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(mu / KbT))))) tmp = 0.0 if (mu <= -1.15e+100) tmp = t_1; elseif (mu <= -2.5e-300) tmp = Float64(t_0 + Float64(NdChar / Float64(1.0 + exp(Float64(Vef / KbT))))); elseif (mu <= 1.18e+122) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(EDonor - Float64(Float64(Ec - Vef) - mu)) / KbT)))) + Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT))))); 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((mu / KbT)))); tmp = 0.0; if (mu <= -1.15e+100) tmp = t_1; elseif (mu <= -2.5e-300) tmp = t_0 + (NdChar / (1.0 + exp((Vef / KbT)))); elseif (mu <= 1.18e+122) tmp = (NdChar / (1.0 + exp(((EDonor - ((Ec - Vef) - mu)) / KbT)))) + (NaChar / (1.0 + exp((EAccept / KbT)))); 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[(mu / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[mu, -1.15e+100], t$95$1, If[LessEqual[mu, -2.5e-300], N[(t$95$0 + N[(NdChar / N[(1.0 + N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[mu, 1.18e+122], N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(EDonor - N[(N[(Ec - Vef), $MachinePrecision] - mu), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], 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{mu}{KbT}}}\\
\mathbf{if}\;mu \leq -1.15 \cdot 10^{+100}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;mu \leq -2.5 \cdot 10^{-300}:\\
\;\;\;\;t\_0 + \frac{NdChar}{1 + e^{\frac{Vef}{KbT}}}\\
\mathbf{elif}\;mu \leq 1.18 \cdot 10^{+122}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{EDonor - \left(\left(Ec - Vef\right) - mu\right)}{KbT}}} + \frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;t\_1\\
\end{array}
\end{array}
if mu < -1.14999999999999995e100 or 1.18000000000000003e122 < mu Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 87.6%
if -1.14999999999999995e100 < mu < -2.49999999999999998e-300Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 84.8%
if -2.49999999999999998e-300 < mu < 1.18000000000000003e122Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 72.4%
Final simplification81.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))))))
(if (or (<= mu -1.1e+100) (not (<= mu 4.6e+79)))
(+ t_0 (/ NdChar (+ 1.0 (exp (/ mu KbT)))))
(+ t_0 (/ NdChar (+ 1.0 (exp (/ 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(((Vef + (Ev + (EAccept - mu))) / KbT)));
double tmp;
if ((mu <= -1.1e+100) || !(mu <= 4.6e+79)) {
tmp = t_0 + (NdChar / (1.0 + exp((mu / KbT))));
} else {
tmp = t_0 + (NdChar / (1.0 + exp((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) :: tmp
t_0 = nachar / (1.0d0 + exp(((vef + (ev + (eaccept - mu))) / kbt)))
if ((mu <= (-1.1d+100)) .or. (.not. (mu <= 4.6d+79))) then
tmp = t_0 + (ndchar / (1.0d0 + exp((mu / kbt))))
else
tmp = t_0 + (ndchar / (1.0d0 + exp((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(((Vef + (Ev + (EAccept - mu))) / KbT)));
double tmp;
if ((mu <= -1.1e+100) || !(mu <= 4.6e+79)) {
tmp = t_0 + (NdChar / (1.0 + Math.exp((mu / KbT))));
} else {
tmp = t_0 + (NdChar / (1.0 + Math.exp((Vef / 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))) tmp = 0 if (mu <= -1.1e+100) or not (mu <= 4.6e+79): tmp = t_0 + (NdChar / (1.0 + math.exp((mu / KbT)))) else: tmp = t_0 + (NdChar / (1.0 + math.exp((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(Vef + Float64(Ev + Float64(EAccept - mu))) / KbT)))) tmp = 0.0 if ((mu <= -1.1e+100) || !(mu <= 4.6e+79)) tmp = Float64(t_0 + Float64(NdChar / Float64(1.0 + exp(Float64(mu / KbT))))); else tmp = Float64(t_0 + Float64(NdChar / Float64(1.0 + exp(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(((Vef + (Ev + (EAccept - mu))) / KbT))); tmp = 0.0; if ((mu <= -1.1e+100) || ~((mu <= 4.6e+79))) tmp = t_0 + (NdChar / (1.0 + exp((mu / KbT)))); else tmp = t_0 + (NdChar / (1.0 + exp((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[(Vef + N[(Ev + N[(EAccept - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[Or[LessEqual[mu, -1.1e+100], N[Not[LessEqual[mu, 4.6e+79]], $MachinePrecision]], N[(t$95$0 + N[(NdChar / N[(1.0 + N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(t$95$0 + N[(NdChar / N[(1.0 + N[Exp[N[(Vef / 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}}}\\
\mathbf{if}\;mu \leq -1.1 \cdot 10^{+100} \lor \neg \left(mu \leq 4.6 \cdot 10^{+79}\right):\\
\;\;\;\;t\_0 + \frac{NdChar}{1 + e^{\frac{mu}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;t\_0 + \frac{NdChar}{1 + e^{\frac{Vef}{KbT}}}\\
\end{array}
\end{array}
if mu < -1.1e100 or 4.6000000000000001e79 < mu Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 84.4%
if -1.1e100 < mu < 4.6000000000000001e79Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 78.7%
Final simplification80.6%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NaChar (+ 1.0 (exp (/ (+ Vef (+ Ev (- EAccept mu))) KbT))))))
(if (<= mu -1.25e+176)
(+
(/ NdChar (+ 1.0 (exp (/ mu KbT))))
(/ NaChar (+ 1.0 (exp (/ mu (- KbT))))))
(if (<= mu 9.5e+72)
(+ t_0 (/ NdChar (+ 1.0 (exp (/ Vef KbT)))))
(if (<= mu 6.1e+203)
(+
t_0
(/
NdChar
(-
(*
EDonor
(+ (+ (/ 2.0 EDonor) (/ 1.0 KbT)) (/ Vef (* EDonor KbT))))
(/ Ec KbT))))
(+ NdChar 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 = NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT)));
double tmp;
if (mu <= -1.25e+176) {
tmp = (NdChar / (1.0 + exp((mu / KbT)))) + (NaChar / (1.0 + exp((mu / -KbT))));
} else if (mu <= 9.5e+72) {
tmp = t_0 + (NdChar / (1.0 + exp((Vef / KbT))));
} else if (mu <= 6.1e+203) {
tmp = t_0 + (NdChar / ((EDonor * (((2.0 / EDonor) + (1.0 / KbT)) + (Vef / (EDonor * KbT)))) - (Ec / KbT)));
} else {
tmp = NdChar + 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 = nachar / (1.0d0 + exp(((vef + (ev + (eaccept - mu))) / kbt)))
if (mu <= (-1.25d+176)) then
tmp = (ndchar / (1.0d0 + exp((mu / kbt)))) + (nachar / (1.0d0 + exp((mu / -kbt))))
else if (mu <= 9.5d+72) then
tmp = t_0 + (ndchar / (1.0d0 + exp((vef / kbt))))
else if (mu <= 6.1d+203) then
tmp = t_0 + (ndchar / ((edonor * (((2.0d0 / edonor) + (1.0d0 / kbt)) + (vef / (edonor * kbt)))) - (ec / kbt)))
else
tmp = ndchar + 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 = NaChar / (1.0 + Math.exp(((Vef + (Ev + (EAccept - mu))) / KbT)));
double tmp;
if (mu <= -1.25e+176) {
tmp = (NdChar / (1.0 + Math.exp((mu / KbT)))) + (NaChar / (1.0 + Math.exp((mu / -KbT))));
} else if (mu <= 9.5e+72) {
tmp = t_0 + (NdChar / (1.0 + Math.exp((Vef / KbT))));
} else if (mu <= 6.1e+203) {
tmp = t_0 + (NdChar / ((EDonor * (((2.0 / EDonor) + (1.0 / KbT)) + (Vef / (EDonor * KbT)))) - (Ec / KbT)));
} else {
tmp = NdChar + t_0;
}
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))) tmp = 0 if mu <= -1.25e+176: tmp = (NdChar / (1.0 + math.exp((mu / KbT)))) + (NaChar / (1.0 + math.exp((mu / -KbT)))) elif mu <= 9.5e+72: tmp = t_0 + (NdChar / (1.0 + math.exp((Vef / KbT)))) elif mu <= 6.1e+203: tmp = t_0 + (NdChar / ((EDonor * (((2.0 / EDonor) + (1.0 / KbT)) + (Vef / (EDonor * KbT)))) - (Ec / KbT))) else: tmp = NdChar + t_0 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)))) tmp = 0.0 if (mu <= -1.25e+176) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(mu / KbT)))) + Float64(NaChar / Float64(1.0 + exp(Float64(mu / Float64(-KbT)))))); elseif (mu <= 9.5e+72) tmp = Float64(t_0 + Float64(NdChar / Float64(1.0 + exp(Float64(Vef / KbT))))); elseif (mu <= 6.1e+203) tmp = Float64(t_0 + Float64(NdChar / Float64(Float64(EDonor * Float64(Float64(Float64(2.0 / EDonor) + Float64(1.0 / KbT)) + Float64(Vef / Float64(EDonor * KbT)))) - Float64(Ec / KbT)))); else tmp = Float64(NdChar + t_0); 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))); tmp = 0.0; if (mu <= -1.25e+176) tmp = (NdChar / (1.0 + exp((mu / KbT)))) + (NaChar / (1.0 + exp((mu / -KbT)))); elseif (mu <= 9.5e+72) tmp = t_0 + (NdChar / (1.0 + exp((Vef / KbT)))); elseif (mu <= 6.1e+203) tmp = t_0 + (NdChar / ((EDonor * (((2.0 / EDonor) + (1.0 / KbT)) + (Vef / (EDonor * KbT)))) - (Ec / KbT))); else tmp = NdChar + t_0; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(Ev + N[(EAccept - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[mu, -1.25e+176], 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, 9.5e+72], N[(t$95$0 + N[(NdChar / N[(1.0 + N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[mu, 6.1e+203], N[(t$95$0 + N[(NdChar / N[(N[(EDonor * N[(N[(N[(2.0 / EDonor), $MachinePrecision] + N[(1.0 / KbT), $MachinePrecision]), $MachinePrecision] + N[(Vef / N[(EDonor * KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(NdChar + t$95$0), $MachinePrecision]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{Vef + \left(Ev + \left(EAccept - mu\right)\right)}{KbT}}}\\
\mathbf{if}\;mu \leq -1.25 \cdot 10^{+176}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{mu}{KbT}}} + \frac{NaChar}{1 + e^{\frac{mu}{-KbT}}}\\
\mathbf{elif}\;mu \leq 9.5 \cdot 10^{+72}:\\
\;\;\;\;t\_0 + \frac{NdChar}{1 + e^{\frac{Vef}{KbT}}}\\
\mathbf{elif}\;mu \leq 6.1 \cdot 10^{+203}:\\
\;\;\;\;t\_0 + \frac{NdChar}{EDonor \cdot \left(\left(\frac{2}{EDonor} + \frac{1}{KbT}\right) + \frac{Vef}{EDonor \cdot KbT}\right) - \frac{Ec}{KbT}}\\
\mathbf{else}:\\
\;\;\;\;NdChar + t\_0\\
\end{array}
\end{array}
if mu < -1.25e176Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 100.0%
Taylor expanded in mu around inf 91.3%
associate-*r/91.3%
mul-1-neg91.3%
Simplified91.3%
if -1.25e176 < mu < 9.50000000000000054e72Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 77.5%
if 9.50000000000000054e72 < mu < 6.10000000000000014e203Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 70.0%
Taylor expanded in mu around 0 70.6%
associate-+r+70.6%
Simplified70.6%
Taylor expanded in EDonor around inf 78.0%
associate-+r+78.0%
associate-*r/78.0%
metadata-eval78.0%
*-commutative78.0%
Simplified78.0%
if 6.10000000000000014e203 < mu Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 39.2%
Taylor expanded in Ec around -inf 39.5%
mul-1-neg39.5%
*-commutative39.5%
distribute-rgt-neg-in39.5%
+-commutative39.5%
mul-1-neg39.5%
unsub-neg39.5%
associate-+r+39.5%
Simplified39.5%
Taylor expanded in Vef around inf 51.4%
Taylor expanded in Vef around 0 81.7%
Final simplification79.6%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (+ (/ NaChar (+ 1.0 (exp (/ (+ Vef (+ Ev (- EAccept mu))) KbT)))) (/ NdChar (+ 1.0 (exp (/ (- EDonor (- (- Ec Vef) mu)) KbT))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT)))) + (NdChar / (1.0 + exp(((EDonor - ((Ec - Vef) - mu)) / KbT))));
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
code = (nachar / (1.0d0 + exp(((vef + (ev + (eaccept - mu))) / kbt)))) + (ndchar / (1.0d0 + exp(((edonor - ((ec - vef) - mu)) / kbt))))
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NaChar / (1.0 + Math.exp(((Vef + (Ev + (EAccept - mu))) / KbT)))) + (NdChar / (1.0 + Math.exp(((EDonor - ((Ec - Vef) - mu)) / KbT))));
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return (NaChar / (1.0 + math.exp(((Vef + (Ev + (EAccept - mu))) / KbT)))) + (NdChar / (1.0 + math.exp(((EDonor - ((Ec - Vef) - mu)) / KbT))))
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Ev + Float64(EAccept - mu))) / KbT)))) + Float64(NdChar / Float64(1.0 + exp(Float64(Float64(EDonor - Float64(Float64(Ec - Vef) - mu)) / KbT))))) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = (NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT)))) + (NdChar / (1.0 + exp(((EDonor - ((Ec - Vef) - mu)) / KbT)))); end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := 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[(N[(EDonor - N[(N[(Ec - Vef), $MachinePrecision] - mu), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{NaChar}{1 + e^{\frac{Vef + \left(Ev + \left(EAccept - mu\right)\right)}{KbT}}} + \frac{NdChar}{1 + e^{\frac{EDonor - \left(\left(Ec - Vef\right) - mu\right)}{KbT}}}
\end{array}
Initial program 100.0%
Simplified100.0%
Final simplification100.0%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (exp (/ (- EDonor (- (- Ec Vef) mu)) KbT)))
(t_1 (/ NaChar (+ 1.0 (exp (/ (+ Vef (+ Ev (- EAccept mu))) KbT)))))
(t_2
(+
t_1
(/
NdChar
(+
1.0
(-
(-
1.0
(*
EDonor
(-
(- (/ -1.0 KbT) (/ (/ Vef EDonor) KbT))
(/ mu (* EDonor KbT)))))
(/ Ec KbT))))))
(t_3
(+
(/ NdChar (+ 1.0 t_0))
(/
NaChar
(+
1.0
(-
(+ 1.0 (+ (/ EAccept KbT) (+ (/ Vef KbT) (/ Ev KbT))))
(/ mu KbT)))))))
(if (<= NdChar -9.5e+114)
t_3
(if (<= NdChar -8.2e-148)
t_2
(if (<= NdChar 3.3e-51)
(+ t_1 (/ NdChar (+ 1.0 (* Ec (+ (/ Vef (* Ec KbT)) (/ -1.0 KbT))))))
(if (<= NdChar 3.6e+141)
(+ NdChar t_1)
(if (<= NdChar 7.2e+198)
t_3
(if (<= NdChar 4.15e+282)
t_2
(-
(/ NaChar (+ 1.0 (+ 1.0 (/ Ev KbT))))
(/ NdChar (- -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(((EDonor - ((Ec - Vef) - mu)) / KbT));
double t_1 = NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT)));
double t_2 = t_1 + (NdChar / (1.0 + ((1.0 - (EDonor * (((-1.0 / KbT) - ((Vef / EDonor) / KbT)) - (mu / (EDonor * KbT))))) - (Ec / KbT))));
double t_3 = (NdChar / (1.0 + t_0)) + (NaChar / (1.0 + ((1.0 + ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) - (mu / KbT))));
double tmp;
if (NdChar <= -9.5e+114) {
tmp = t_3;
} else if (NdChar <= -8.2e-148) {
tmp = t_2;
} else if (NdChar <= 3.3e-51) {
tmp = t_1 + (NdChar / (1.0 + (Ec * ((Vef / (Ec * KbT)) + (-1.0 / KbT)))));
} else if (NdChar <= 3.6e+141) {
tmp = NdChar + t_1;
} else if (NdChar <= 7.2e+198) {
tmp = t_3;
} else if (NdChar <= 4.15e+282) {
tmp = t_2;
} else {
tmp = (NaChar / (1.0 + (1.0 + (Ev / KbT)))) - (NdChar / (-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) :: t_1
real(8) :: t_2
real(8) :: t_3
real(8) :: tmp
t_0 = exp(((edonor - ((ec - vef) - mu)) / kbt))
t_1 = nachar / (1.0d0 + exp(((vef + (ev + (eaccept - mu))) / kbt)))
t_2 = t_1 + (ndchar / (1.0d0 + ((1.0d0 - (edonor * ((((-1.0d0) / kbt) - ((vef / edonor) / kbt)) - (mu / (edonor * kbt))))) - (ec / kbt))))
t_3 = (ndchar / (1.0d0 + t_0)) + (nachar / (1.0d0 + ((1.0d0 + ((eaccept / kbt) + ((vef / kbt) + (ev / kbt)))) - (mu / kbt))))
if (ndchar <= (-9.5d+114)) then
tmp = t_3
else if (ndchar <= (-8.2d-148)) then
tmp = t_2
else if (ndchar <= 3.3d-51) then
tmp = t_1 + (ndchar / (1.0d0 + (ec * ((vef / (ec * kbt)) + ((-1.0d0) / kbt)))))
else if (ndchar <= 3.6d+141) then
tmp = ndchar + t_1
else if (ndchar <= 7.2d+198) then
tmp = t_3
else if (ndchar <= 4.15d+282) then
tmp = t_2
else
tmp = (nachar / (1.0d0 + (1.0d0 + (ev / kbt)))) - (ndchar / ((-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(((EDonor - ((Ec - Vef) - mu)) / KbT));
double t_1 = NaChar / (1.0 + Math.exp(((Vef + (Ev + (EAccept - mu))) / KbT)));
double t_2 = t_1 + (NdChar / (1.0 + ((1.0 - (EDonor * (((-1.0 / KbT) - ((Vef / EDonor) / KbT)) - (mu / (EDonor * KbT))))) - (Ec / KbT))));
double t_3 = (NdChar / (1.0 + t_0)) + (NaChar / (1.0 + ((1.0 + ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) - (mu / KbT))));
double tmp;
if (NdChar <= -9.5e+114) {
tmp = t_3;
} else if (NdChar <= -8.2e-148) {
tmp = t_2;
} else if (NdChar <= 3.3e-51) {
tmp = t_1 + (NdChar / (1.0 + (Ec * ((Vef / (Ec * KbT)) + (-1.0 / KbT)))));
} else if (NdChar <= 3.6e+141) {
tmp = NdChar + t_1;
} else if (NdChar <= 7.2e+198) {
tmp = t_3;
} else if (NdChar <= 4.15e+282) {
tmp = t_2;
} else {
tmp = (NaChar / (1.0 + (1.0 + (Ev / KbT)))) - (NdChar / (-1.0 - t_0));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = math.exp(((EDonor - ((Ec - Vef) - mu)) / KbT)) t_1 = NaChar / (1.0 + math.exp(((Vef + (Ev + (EAccept - mu))) / KbT))) t_2 = t_1 + (NdChar / (1.0 + ((1.0 - (EDonor * (((-1.0 / KbT) - ((Vef / EDonor) / KbT)) - (mu / (EDonor * KbT))))) - (Ec / KbT)))) t_3 = (NdChar / (1.0 + t_0)) + (NaChar / (1.0 + ((1.0 + ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) - (mu / KbT)))) tmp = 0 if NdChar <= -9.5e+114: tmp = t_3 elif NdChar <= -8.2e-148: tmp = t_2 elif NdChar <= 3.3e-51: tmp = t_1 + (NdChar / (1.0 + (Ec * ((Vef / (Ec * KbT)) + (-1.0 / KbT))))) elif NdChar <= 3.6e+141: tmp = NdChar + t_1 elif NdChar <= 7.2e+198: tmp = t_3 elif NdChar <= 4.15e+282: tmp = t_2 else: tmp = (NaChar / (1.0 + (1.0 + (Ev / KbT)))) - (NdChar / (-1.0 - t_0)) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = exp(Float64(Float64(EDonor - Float64(Float64(Ec - Vef) - mu)) / KbT)) t_1 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Ev + Float64(EAccept - mu))) / KbT)))) t_2 = Float64(t_1 + Float64(NdChar / Float64(1.0 + Float64(Float64(1.0 - Float64(EDonor * Float64(Float64(Float64(-1.0 / KbT) - Float64(Float64(Vef / EDonor) / KbT)) - Float64(mu / Float64(EDonor * KbT))))) - Float64(Ec / KbT))))) t_3 = Float64(Float64(NdChar / Float64(1.0 + t_0)) + Float64(NaChar / Float64(1.0 + Float64(Float64(1.0 + Float64(Float64(EAccept / KbT) + Float64(Float64(Vef / KbT) + Float64(Ev / KbT)))) - Float64(mu / KbT))))) tmp = 0.0 if (NdChar <= -9.5e+114) tmp = t_3; elseif (NdChar <= -8.2e-148) tmp = t_2; elseif (NdChar <= 3.3e-51) tmp = Float64(t_1 + Float64(NdChar / Float64(1.0 + Float64(Ec * Float64(Float64(Vef / Float64(Ec * KbT)) + Float64(-1.0 / KbT)))))); elseif (NdChar <= 3.6e+141) tmp = Float64(NdChar + t_1); elseif (NdChar <= 7.2e+198) tmp = t_3; elseif (NdChar <= 4.15e+282) tmp = t_2; else tmp = Float64(Float64(NaChar / Float64(1.0 + Float64(1.0 + Float64(Ev / KbT)))) - Float64(NdChar / 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(((EDonor - ((Ec - Vef) - mu)) / KbT)); t_1 = NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT))); t_2 = t_1 + (NdChar / (1.0 + ((1.0 - (EDonor * (((-1.0 / KbT) - ((Vef / EDonor) / KbT)) - (mu / (EDonor * KbT))))) - (Ec / KbT)))); t_3 = (NdChar / (1.0 + t_0)) + (NaChar / (1.0 + ((1.0 + ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) - (mu / KbT)))); tmp = 0.0; if (NdChar <= -9.5e+114) tmp = t_3; elseif (NdChar <= -8.2e-148) tmp = t_2; elseif (NdChar <= 3.3e-51) tmp = t_1 + (NdChar / (1.0 + (Ec * ((Vef / (Ec * KbT)) + (-1.0 / KbT))))); elseif (NdChar <= 3.6e+141) tmp = NdChar + t_1; elseif (NdChar <= 7.2e+198) tmp = t_3; elseif (NdChar <= 4.15e+282) tmp = t_2; else tmp = (NaChar / (1.0 + (1.0 + (Ev / KbT)))) - (NdChar / (-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[(N[(EDonor - N[(N[(Ec - Vef), $MachinePrecision] - mu), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = 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$2 = N[(t$95$1 + N[(NdChar / N[(1.0 + N[(N[(1.0 - N[(EDonor * N[(N[(N[(-1.0 / KbT), $MachinePrecision] - N[(N[(Vef / EDonor), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision] - N[(mu / N[(EDonor * KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$3 = N[(N[(NdChar / N[(1.0 + t$95$0), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[(N[(1.0 + N[(N[(EAccept / KbT), $MachinePrecision] + N[(N[(Vef / KbT), $MachinePrecision] + N[(Ev / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NdChar, -9.5e+114], t$95$3, If[LessEqual[NdChar, -8.2e-148], t$95$2, If[LessEqual[NdChar, 3.3e-51], N[(t$95$1 + N[(NdChar / N[(1.0 + N[(Ec * N[(N[(Vef / N[(Ec * KbT), $MachinePrecision]), $MachinePrecision] + N[(-1.0 / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NdChar, 3.6e+141], N[(NdChar + t$95$1), $MachinePrecision], If[LessEqual[NdChar, 7.2e+198], t$95$3, If[LessEqual[NdChar, 4.15e+282], t$95$2, N[(N[(NaChar / N[(1.0 + N[(1.0 + N[(Ev / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(NdChar / N[(-1.0 - t$95$0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := e^{\frac{EDonor - \left(\left(Ec - Vef\right) - mu\right)}{KbT}}\\
t_1 := \frac{NaChar}{1 + e^{\frac{Vef + \left(Ev + \left(EAccept - mu\right)\right)}{KbT}}}\\
t_2 := t\_1 + \frac{NdChar}{1 + \left(\left(1 - EDonor \cdot \left(\left(\frac{-1}{KbT} - \frac{\frac{Vef}{EDonor}}{KbT}\right) - \frac{mu}{EDonor \cdot KbT}\right)\right) - \frac{Ec}{KbT}\right)}\\
t_3 := \frac{NdChar}{1 + t\_0} + \frac{NaChar}{1 + \left(\left(1 + \left(\frac{EAccept}{KbT} + \left(\frac{Vef}{KbT} + \frac{Ev}{KbT}\right)\right)\right) - \frac{mu}{KbT}\right)}\\
\mathbf{if}\;NdChar \leq -9.5 \cdot 10^{+114}:\\
\;\;\;\;t\_3\\
\mathbf{elif}\;NdChar \leq -8.2 \cdot 10^{-148}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;NdChar \leq 3.3 \cdot 10^{-51}:\\
\;\;\;\;t\_1 + \frac{NdChar}{1 + Ec \cdot \left(\frac{Vef}{Ec \cdot KbT} + \frac{-1}{KbT}\right)}\\
\mathbf{elif}\;NdChar \leq 3.6 \cdot 10^{+141}:\\
\;\;\;\;NdChar + t\_1\\
\mathbf{elif}\;NdChar \leq 7.2 \cdot 10^{+198}:\\
\;\;\;\;t\_3\\
\mathbf{elif}\;NdChar \leq 4.15 \cdot 10^{+282}:\\
\;\;\;\;t\_2\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + \left(1 + \frac{Ev}{KbT}\right)} - \frac{NdChar}{-1 - t\_0}\\
\end{array}
\end{array}
if NdChar < -9.5000000000000001e114 or 3.6000000000000001e141 < NdChar < 7.2000000000000004e198Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 75.5%
if -9.5000000000000001e114 < NdChar < -8.2000000000000005e-148 or 7.2000000000000004e198 < NdChar < 4.14999999999999985e282Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 55.3%
Taylor expanded in EDonor around inf 63.5%
associate-+r+63.5%
associate-/r*69.7%
*-commutative69.7%
Simplified69.7%
if -8.2000000000000005e-148 < NdChar < 3.29999999999999973e-51Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 71.1%
Taylor expanded in Ec around -inf 74.6%
mul-1-neg74.6%
*-commutative74.6%
distribute-rgt-neg-in74.6%
+-commutative74.6%
mul-1-neg74.6%
unsub-neg74.6%
associate-+r+74.6%
Simplified74.6%
Taylor expanded in Vef around inf 83.9%
*-commutative83.9%
Simplified83.9%
if 3.29999999999999973e-51 < NdChar < 3.6000000000000001e141Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 46.0%
Taylor expanded in Ec around -inf 46.1%
mul-1-neg46.1%
*-commutative46.1%
distribute-rgt-neg-in46.1%
+-commutative46.1%
mul-1-neg46.1%
unsub-neg46.1%
associate-+r+46.1%
Simplified46.1%
Taylor expanded in Vef around inf 46.5%
Taylor expanded in Vef around 0 79.3%
if 4.14999999999999985e282 < NdChar Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 100.0%
Taylor expanded in Ev around 0 100.0%
Final simplification78.1%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (exp (/ (- EDonor (- (- Ec Vef) mu)) KbT)))
(t_1 (/ NaChar (+ 1.0 (exp (/ (+ Vef (+ Ev (- EAccept mu))) KbT)))))
(t_2
(+
(/ NdChar (+ 1.0 t_0))
(/
NaChar
(+
1.0
(-
(+ 1.0 (+ (/ EAccept KbT) (+ (/ Vef KbT) (/ Ev KbT))))
(/ mu KbT)))))))
(if (<= NdChar -1e+115)
t_2
(if (<= NdChar -3.5e+22)
(+
t_1
(/
NdChar
(-
(* EDonor (+ (+ (/ 2.0 EDonor) (/ 1.0 KbT)) (/ Vef (* EDonor KbT))))
(/ Ec KbT))))
(if (<= NdChar -3.2e-131)
(- (/ NaChar (+ 1.0 (+ 1.0 (/ Ev KbT)))) (/ NdChar (- -1.0 t_0)))
(if (<= NdChar -1.1e-218)
(+ t_1 (/ NdChar (+ 1.0 (/ mu KbT))))
(if (<= NdChar 2.1e-51)
(+
t_1
(/ NdChar (+ 1.0 (* Ec (+ (/ Vef (* Ec KbT)) (/ -1.0 KbT))))))
(if (<= NdChar 9.5e+142) (+ NdChar t_1) 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(((EDonor - ((Ec - Vef) - mu)) / KbT));
double t_1 = NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT)));
double t_2 = (NdChar / (1.0 + t_0)) + (NaChar / (1.0 + ((1.0 + ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) - (mu / KbT))));
double tmp;
if (NdChar <= -1e+115) {
tmp = t_2;
} else if (NdChar <= -3.5e+22) {
tmp = t_1 + (NdChar / ((EDonor * (((2.0 / EDonor) + (1.0 / KbT)) + (Vef / (EDonor * KbT)))) - (Ec / KbT)));
} else if (NdChar <= -3.2e-131) {
tmp = (NaChar / (1.0 + (1.0 + (Ev / KbT)))) - (NdChar / (-1.0 - t_0));
} else if (NdChar <= -1.1e-218) {
tmp = t_1 + (NdChar / (1.0 + (mu / KbT)));
} else if (NdChar <= 2.1e-51) {
tmp = t_1 + (NdChar / (1.0 + (Ec * ((Vef / (Ec * KbT)) + (-1.0 / KbT)))));
} else if (NdChar <= 9.5e+142) {
tmp = NdChar + t_1;
} 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) :: tmp
t_0 = exp(((edonor - ((ec - vef) - mu)) / kbt))
t_1 = nachar / (1.0d0 + exp(((vef + (ev + (eaccept - mu))) / kbt)))
t_2 = (ndchar / (1.0d0 + t_0)) + (nachar / (1.0d0 + ((1.0d0 + ((eaccept / kbt) + ((vef / kbt) + (ev / kbt)))) - (mu / kbt))))
if (ndchar <= (-1d+115)) then
tmp = t_2
else if (ndchar <= (-3.5d+22)) then
tmp = t_1 + (ndchar / ((edonor * (((2.0d0 / edonor) + (1.0d0 / kbt)) + (vef / (edonor * kbt)))) - (ec / kbt)))
else if (ndchar <= (-3.2d-131)) then
tmp = (nachar / (1.0d0 + (1.0d0 + (ev / kbt)))) - (ndchar / ((-1.0d0) - t_0))
else if (ndchar <= (-1.1d-218)) then
tmp = t_1 + (ndchar / (1.0d0 + (mu / kbt)))
else if (ndchar <= 2.1d-51) then
tmp = t_1 + (ndchar / (1.0d0 + (ec * ((vef / (ec * kbt)) + ((-1.0d0) / kbt)))))
else if (ndchar <= 9.5d+142) then
tmp = ndchar + t_1
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(((EDonor - ((Ec - Vef) - mu)) / KbT));
double t_1 = NaChar / (1.0 + Math.exp(((Vef + (Ev + (EAccept - mu))) / KbT)));
double t_2 = (NdChar / (1.0 + t_0)) + (NaChar / (1.0 + ((1.0 + ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) - (mu / KbT))));
double tmp;
if (NdChar <= -1e+115) {
tmp = t_2;
} else if (NdChar <= -3.5e+22) {
tmp = t_1 + (NdChar / ((EDonor * (((2.0 / EDonor) + (1.0 / KbT)) + (Vef / (EDonor * KbT)))) - (Ec / KbT)));
} else if (NdChar <= -3.2e-131) {
tmp = (NaChar / (1.0 + (1.0 + (Ev / KbT)))) - (NdChar / (-1.0 - t_0));
} else if (NdChar <= -1.1e-218) {
tmp = t_1 + (NdChar / (1.0 + (mu / KbT)));
} else if (NdChar <= 2.1e-51) {
tmp = t_1 + (NdChar / (1.0 + (Ec * ((Vef / (Ec * KbT)) + (-1.0 / KbT)))));
} else if (NdChar <= 9.5e+142) {
tmp = NdChar + t_1;
} else {
tmp = t_2;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = math.exp(((EDonor - ((Ec - Vef) - mu)) / KbT)) t_1 = NaChar / (1.0 + math.exp(((Vef + (Ev + (EAccept - mu))) / KbT))) t_2 = (NdChar / (1.0 + t_0)) + (NaChar / (1.0 + ((1.0 + ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) - (mu / KbT)))) tmp = 0 if NdChar <= -1e+115: tmp = t_2 elif NdChar <= -3.5e+22: tmp = t_1 + (NdChar / ((EDonor * (((2.0 / EDonor) + (1.0 / KbT)) + (Vef / (EDonor * KbT)))) - (Ec / KbT))) elif NdChar <= -3.2e-131: tmp = (NaChar / (1.0 + (1.0 + (Ev / KbT)))) - (NdChar / (-1.0 - t_0)) elif NdChar <= -1.1e-218: tmp = t_1 + (NdChar / (1.0 + (mu / KbT))) elif NdChar <= 2.1e-51: tmp = t_1 + (NdChar / (1.0 + (Ec * ((Vef / (Ec * KbT)) + (-1.0 / KbT))))) elif NdChar <= 9.5e+142: tmp = NdChar + t_1 else: tmp = t_2 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = exp(Float64(Float64(EDonor - Float64(Float64(Ec - Vef) - mu)) / KbT)) t_1 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Ev + Float64(EAccept - mu))) / KbT)))) t_2 = Float64(Float64(NdChar / Float64(1.0 + t_0)) + Float64(NaChar / Float64(1.0 + Float64(Float64(1.0 + Float64(Float64(EAccept / KbT) + Float64(Float64(Vef / KbT) + Float64(Ev / KbT)))) - Float64(mu / KbT))))) tmp = 0.0 if (NdChar <= -1e+115) tmp = t_2; elseif (NdChar <= -3.5e+22) tmp = Float64(t_1 + Float64(NdChar / Float64(Float64(EDonor * Float64(Float64(Float64(2.0 / EDonor) + Float64(1.0 / KbT)) + Float64(Vef / Float64(EDonor * KbT)))) - Float64(Ec / KbT)))); elseif (NdChar <= -3.2e-131) tmp = Float64(Float64(NaChar / Float64(1.0 + Float64(1.0 + Float64(Ev / KbT)))) - Float64(NdChar / Float64(-1.0 - t_0))); elseif (NdChar <= -1.1e-218) tmp = Float64(t_1 + Float64(NdChar / Float64(1.0 + Float64(mu / KbT)))); elseif (NdChar <= 2.1e-51) tmp = Float64(t_1 + Float64(NdChar / Float64(1.0 + Float64(Ec * Float64(Float64(Vef / Float64(Ec * KbT)) + Float64(-1.0 / KbT)))))); elseif (NdChar <= 9.5e+142) tmp = Float64(NdChar + t_1); else tmp = t_2; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = exp(((EDonor - ((Ec - Vef) - mu)) / KbT)); t_1 = NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT))); t_2 = (NdChar / (1.0 + t_0)) + (NaChar / (1.0 + ((1.0 + ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) - (mu / KbT)))); tmp = 0.0; if (NdChar <= -1e+115) tmp = t_2; elseif (NdChar <= -3.5e+22) tmp = t_1 + (NdChar / ((EDonor * (((2.0 / EDonor) + (1.0 / KbT)) + (Vef / (EDonor * KbT)))) - (Ec / KbT))); elseif (NdChar <= -3.2e-131) tmp = (NaChar / (1.0 + (1.0 + (Ev / KbT)))) - (NdChar / (-1.0 - t_0)); elseif (NdChar <= -1.1e-218) tmp = t_1 + (NdChar / (1.0 + (mu / KbT))); elseif (NdChar <= 2.1e-51) tmp = t_1 + (NdChar / (1.0 + (Ec * ((Vef / (Ec * KbT)) + (-1.0 / KbT))))); elseif (NdChar <= 9.5e+142) tmp = NdChar + t_1; 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[(EDonor - N[(N[(Ec - Vef), $MachinePrecision] - mu), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = 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$2 = N[(N[(NdChar / N[(1.0 + t$95$0), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[(N[(1.0 + N[(N[(EAccept / KbT), $MachinePrecision] + N[(N[(Vef / KbT), $MachinePrecision] + N[(Ev / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NdChar, -1e+115], t$95$2, If[LessEqual[NdChar, -3.5e+22], N[(t$95$1 + N[(NdChar / N[(N[(EDonor * N[(N[(N[(2.0 / EDonor), $MachinePrecision] + N[(1.0 / KbT), $MachinePrecision]), $MachinePrecision] + N[(Vef / N[(EDonor * KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NdChar, -3.2e-131], N[(N[(NaChar / N[(1.0 + N[(1.0 + N[(Ev / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(NdChar / N[(-1.0 - t$95$0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NdChar, -1.1e-218], N[(t$95$1 + N[(NdChar / N[(1.0 + N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NdChar, 2.1e-51], N[(t$95$1 + N[(NdChar / N[(1.0 + N[(Ec * N[(N[(Vef / N[(Ec * KbT), $MachinePrecision]), $MachinePrecision] + N[(-1.0 / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NdChar, 9.5e+142], N[(NdChar + t$95$1), $MachinePrecision], t$95$2]]]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := e^{\frac{EDonor - \left(\left(Ec - Vef\right) - mu\right)}{KbT}}\\
t_1 := \frac{NaChar}{1 + e^{\frac{Vef + \left(Ev + \left(EAccept - mu\right)\right)}{KbT}}}\\
t_2 := \frac{NdChar}{1 + t\_0} + \frac{NaChar}{1 + \left(\left(1 + \left(\frac{EAccept}{KbT} + \left(\frac{Vef}{KbT} + \frac{Ev}{KbT}\right)\right)\right) - \frac{mu}{KbT}\right)}\\
\mathbf{if}\;NdChar \leq -1 \cdot 10^{+115}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;NdChar \leq -3.5 \cdot 10^{+22}:\\
\;\;\;\;t\_1 + \frac{NdChar}{EDonor \cdot \left(\left(\frac{2}{EDonor} + \frac{1}{KbT}\right) + \frac{Vef}{EDonor \cdot KbT}\right) - \frac{Ec}{KbT}}\\
\mathbf{elif}\;NdChar \leq -3.2 \cdot 10^{-131}:\\
\;\;\;\;\frac{NaChar}{1 + \left(1 + \frac{Ev}{KbT}\right)} - \frac{NdChar}{-1 - t\_0}\\
\mathbf{elif}\;NdChar \leq -1.1 \cdot 10^{-218}:\\
\;\;\;\;t\_1 + \frac{NdChar}{1 + \frac{mu}{KbT}}\\
\mathbf{elif}\;NdChar \leq 2.1 \cdot 10^{-51}:\\
\;\;\;\;t\_1 + \frac{NdChar}{1 + Ec \cdot \left(\frac{Vef}{Ec \cdot KbT} + \frac{-1}{KbT}\right)}\\
\mathbf{elif}\;NdChar \leq 9.5 \cdot 10^{+142}:\\
\;\;\;\;NdChar + t\_1\\
\mathbf{else}:\\
\;\;\;\;t\_2\\
\end{array}
\end{array}
if NdChar < -1e115 or 9.50000000000000001e142 < NdChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 68.7%
if -1e115 < NdChar < -3.5e22Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 56.7%
Taylor expanded in mu around 0 56.7%
associate-+r+56.7%
Simplified56.7%
Taylor expanded in EDonor around inf 82.9%
associate-+r+82.9%
associate-*r/82.9%
metadata-eval82.9%
*-commutative82.9%
Simplified82.9%
if -3.5e22 < NdChar < -3.2e-131Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 87.2%
Taylor expanded in Ev around 0 73.6%
if -3.2e-131 < NdChar < -1.10000000000000003e-218Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 58.1%
Taylor expanded in Ec around -inf 58.1%
mul-1-neg58.1%
*-commutative58.1%
distribute-rgt-neg-in58.1%
+-commutative58.1%
mul-1-neg58.1%
unsub-neg58.1%
associate-+r+58.1%
Simplified58.1%
Taylor expanded in mu around inf 82.3%
if -1.10000000000000003e-218 < NdChar < 2.10000000000000002e-51Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 74.8%
Taylor expanded in Ec around -inf 78.9%
mul-1-neg78.9%
*-commutative78.9%
distribute-rgt-neg-in78.9%
+-commutative78.9%
mul-1-neg78.9%
unsub-neg78.9%
associate-+r+78.9%
Simplified78.9%
Taylor expanded in Vef around inf 86.0%
*-commutative86.0%
Simplified86.0%
if 2.10000000000000002e-51 < NdChar < 9.50000000000000001e142Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 46.0%
Taylor expanded in Ec around -inf 46.1%
mul-1-neg46.1%
*-commutative46.1%
distribute-rgt-neg-in46.1%
+-commutative46.1%
mul-1-neg46.1%
unsub-neg46.1%
associate-+r+46.1%
Simplified46.1%
Taylor expanded in Vef around inf 46.5%
Taylor expanded in Vef around 0 79.3%
Final simplification77.5%
(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 (+ NdChar t_0))
(t_2
(+
(/ NdChar (+ 1.0 (exp (/ (- EDonor (- (- Ec Vef) mu)) KbT))))
(/
NaChar
(+
1.0
(-
(+ 1.0 (+ (/ EAccept KbT) (+ (/ Vef KbT) (/ Ev KbT))))
(/ mu KbT)))))))
(if (<= NdChar -2.45e+104)
t_2
(if (<= NdChar -2.1e-160)
t_1
(if (<= NdChar 1.25e-52)
(+ t_0 (/ NdChar (+ 1.0 (* Ec (+ (/ Vef (* Ec KbT)) (/ -1.0 KbT))))))
(if (<= NdChar 2.7e+141) t_1 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 = NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT)));
double t_1 = NdChar + t_0;
double t_2 = (NdChar / (1.0 + exp(((EDonor - ((Ec - Vef) - mu)) / KbT)))) + (NaChar / (1.0 + ((1.0 + ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) - (mu / KbT))));
double tmp;
if (NdChar <= -2.45e+104) {
tmp = t_2;
} else if (NdChar <= -2.1e-160) {
tmp = t_1;
} else if (NdChar <= 1.25e-52) {
tmp = t_0 + (NdChar / (1.0 + (Ec * ((Vef / (Ec * KbT)) + (-1.0 / KbT)))));
} else if (NdChar <= 2.7e+141) {
tmp = t_1;
} 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) :: tmp
t_0 = nachar / (1.0d0 + exp(((vef + (ev + (eaccept - mu))) / kbt)))
t_1 = ndchar + t_0
t_2 = (ndchar / (1.0d0 + exp(((edonor - ((ec - vef) - mu)) / kbt)))) + (nachar / (1.0d0 + ((1.0d0 + ((eaccept / kbt) + ((vef / kbt) + (ev / kbt)))) - (mu / kbt))))
if (ndchar <= (-2.45d+104)) then
tmp = t_2
else if (ndchar <= (-2.1d-160)) then
tmp = t_1
else if (ndchar <= 1.25d-52) then
tmp = t_0 + (ndchar / (1.0d0 + (ec * ((vef / (ec * kbt)) + ((-1.0d0) / kbt)))))
else if (ndchar <= 2.7d+141) then
tmp = t_1
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 = NaChar / (1.0 + Math.exp(((Vef + (Ev + (EAccept - mu))) / KbT)));
double t_1 = NdChar + t_0;
double t_2 = (NdChar / (1.0 + Math.exp(((EDonor - ((Ec - Vef) - mu)) / KbT)))) + (NaChar / (1.0 + ((1.0 + ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) - (mu / KbT))));
double tmp;
if (NdChar <= -2.45e+104) {
tmp = t_2;
} else if (NdChar <= -2.1e-160) {
tmp = t_1;
} else if (NdChar <= 1.25e-52) {
tmp = t_0 + (NdChar / (1.0 + (Ec * ((Vef / (Ec * KbT)) + (-1.0 / KbT)))));
} else if (NdChar <= 2.7e+141) {
tmp = t_1;
} else {
tmp = t_2;
}
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 = NdChar + t_0 t_2 = (NdChar / (1.0 + math.exp(((EDonor - ((Ec - Vef) - mu)) / KbT)))) + (NaChar / (1.0 + ((1.0 + ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) - (mu / KbT)))) tmp = 0 if NdChar <= -2.45e+104: tmp = t_2 elif NdChar <= -2.1e-160: tmp = t_1 elif NdChar <= 1.25e-52: tmp = t_0 + (NdChar / (1.0 + (Ec * ((Vef / (Ec * KbT)) + (-1.0 / KbT))))) elif NdChar <= 2.7e+141: tmp = t_1 else: tmp = t_2 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(NdChar + t_0) t_2 = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(EDonor - Float64(Float64(Ec - Vef) - mu)) / KbT)))) + Float64(NaChar / Float64(1.0 + Float64(Float64(1.0 + Float64(Float64(EAccept / KbT) + Float64(Float64(Vef / KbT) + Float64(Ev / KbT)))) - Float64(mu / KbT))))) tmp = 0.0 if (NdChar <= -2.45e+104) tmp = t_2; elseif (NdChar <= -2.1e-160) tmp = t_1; elseif (NdChar <= 1.25e-52) tmp = Float64(t_0 + Float64(NdChar / Float64(1.0 + Float64(Ec * Float64(Float64(Vef / Float64(Ec * KbT)) + Float64(-1.0 / KbT)))))); elseif (NdChar <= 2.7e+141) tmp = t_1; else tmp = t_2; 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 = NdChar + t_0; t_2 = (NdChar / (1.0 + exp(((EDonor - ((Ec - Vef) - mu)) / KbT)))) + (NaChar / (1.0 + ((1.0 + ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) - (mu / KbT)))); tmp = 0.0; if (NdChar <= -2.45e+104) tmp = t_2; elseif (NdChar <= -2.1e-160) tmp = t_1; elseif (NdChar <= 1.25e-52) tmp = t_0 + (NdChar / (1.0 + (Ec * ((Vef / (Ec * KbT)) + (-1.0 / KbT))))); elseif (NdChar <= 2.7e+141) tmp = t_1; else tmp = t_2; 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[(NdChar + t$95$0), $MachinePrecision]}, Block[{t$95$2 = N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(EDonor - N[(N[(Ec - Vef), $MachinePrecision] - mu), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[(N[(1.0 + N[(N[(EAccept / KbT), $MachinePrecision] + N[(N[(Vef / KbT), $MachinePrecision] + N[(Ev / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NdChar, -2.45e+104], t$95$2, If[LessEqual[NdChar, -2.1e-160], t$95$1, If[LessEqual[NdChar, 1.25e-52], N[(t$95$0 + N[(NdChar / N[(1.0 + N[(Ec * N[(N[(Vef / N[(Ec * KbT), $MachinePrecision]), $MachinePrecision] + N[(-1.0 / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NdChar, 2.7e+141], t$95$1, t$95$2]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{Vef + \left(Ev + \left(EAccept - mu\right)\right)}{KbT}}}\\
t_1 := NdChar + t\_0\\
t_2 := \frac{NdChar}{1 + e^{\frac{EDonor - \left(\left(Ec - Vef\right) - mu\right)}{KbT}}} + \frac{NaChar}{1 + \left(\left(1 + \left(\frac{EAccept}{KbT} + \left(\frac{Vef}{KbT} + \frac{Ev}{KbT}\right)\right)\right) - \frac{mu}{KbT}\right)}\\
\mathbf{if}\;NdChar \leq -2.45 \cdot 10^{+104}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;NdChar \leq -2.1 \cdot 10^{-160}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;NdChar \leq 1.25 \cdot 10^{-52}:\\
\;\;\;\;t\_0 + \frac{NdChar}{1 + Ec \cdot \left(\frac{Vef}{Ec \cdot KbT} + \frac{-1}{KbT}\right)}\\
\mathbf{elif}\;NdChar \leq 2.7 \cdot 10^{+141}:\\
\;\;\;\;t\_1\\
\mathbf{else}:\\
\;\;\;\;t\_2\\
\end{array}
\end{array}
if NdChar < -2.44999999999999993e104 or 2.7000000000000001e141 < NdChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 68.3%
if -2.44999999999999993e104 < NdChar < -2.1e-160 or 1.25e-52 < NdChar < 2.7000000000000001e141Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 55.2%
Taylor expanded in Ec around -inf 58.3%
mul-1-neg58.3%
*-commutative58.3%
distribute-rgt-neg-in58.3%
+-commutative58.3%
mul-1-neg58.3%
unsub-neg58.3%
associate-+r+58.3%
Simplified58.3%
Taylor expanded in Vef around inf 51.6%
Taylor expanded in Vef around 0 74.5%
if -2.1e-160 < NdChar < 1.25e-52Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 71.3%
Taylor expanded in Ec around -inf 75.0%
mul-1-neg75.0%
*-commutative75.0%
distribute-rgt-neg-in75.0%
+-commutative75.0%
mul-1-neg75.0%
unsub-neg75.0%
associate-+r+75.0%
Simplified75.0%
Taylor expanded in Vef around inf 85.1%
*-commutative85.1%
Simplified85.1%
Final simplification75.8%
(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
(+
(/ NdChar (+ 1.0 (exp (/ (- EDonor (- (- Ec Vef) mu)) KbT))))
(/
NaChar
(+
1.0
(-
(+ 1.0 (+ (/ EAccept KbT) (+ (/ Vef KbT) (/ Ev KbT))))
(/ mu KbT)))))))
(if (<= NdChar -1.05e+104)
t_1
(if (<= NdChar -8e-148)
(-
t_0
(/
NdChar
(+
-1.0
(*
Ec
(+
(/ 1.0 KbT)
(/ (- (- -1.0 (/ EDonor KbT)) (+ (/ mu KbT) (/ Vef KbT))) Ec))))))
(if (<= NdChar 1.35e-52)
(+ t_0 (/ NdChar (+ 1.0 (* Ec (+ (/ Vef (* Ec KbT)) (/ -1.0 KbT))))))
(if (<= NdChar 2.2e+143) (+ NdChar t_0) 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 = (NdChar / (1.0 + exp(((EDonor - ((Ec - Vef) - mu)) / KbT)))) + (NaChar / (1.0 + ((1.0 + ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) - (mu / KbT))));
double tmp;
if (NdChar <= -1.05e+104) {
tmp = t_1;
} else if (NdChar <= -8e-148) {
tmp = t_0 - (NdChar / (-1.0 + (Ec * ((1.0 / KbT) + (((-1.0 - (EDonor / KbT)) - ((mu / KbT) + (Vef / KbT))) / Ec)))));
} else if (NdChar <= 1.35e-52) {
tmp = t_0 + (NdChar / (1.0 + (Ec * ((Vef / (Ec * KbT)) + (-1.0 / KbT)))));
} else if (NdChar <= 2.2e+143) {
tmp = NdChar + t_0;
} 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) :: tmp
t_0 = nachar / (1.0d0 + exp(((vef + (ev + (eaccept - mu))) / kbt)))
t_1 = (ndchar / (1.0d0 + exp(((edonor - ((ec - vef) - mu)) / kbt)))) + (nachar / (1.0d0 + ((1.0d0 + ((eaccept / kbt) + ((vef / kbt) + (ev / kbt)))) - (mu / kbt))))
if (ndchar <= (-1.05d+104)) then
tmp = t_1
else if (ndchar <= (-8d-148)) then
tmp = t_0 - (ndchar / ((-1.0d0) + (ec * ((1.0d0 / kbt) + ((((-1.0d0) - (edonor / kbt)) - ((mu / kbt) + (vef / kbt))) / ec)))))
else if (ndchar <= 1.35d-52) then
tmp = t_0 + (ndchar / (1.0d0 + (ec * ((vef / (ec * kbt)) + ((-1.0d0) / kbt)))))
else if (ndchar <= 2.2d+143) then
tmp = ndchar + t_0
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 = (NdChar / (1.0 + Math.exp(((EDonor - ((Ec - Vef) - mu)) / KbT)))) + (NaChar / (1.0 + ((1.0 + ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) - (mu / KbT))));
double tmp;
if (NdChar <= -1.05e+104) {
tmp = t_1;
} else if (NdChar <= -8e-148) {
tmp = t_0 - (NdChar / (-1.0 + (Ec * ((1.0 / KbT) + (((-1.0 - (EDonor / KbT)) - ((mu / KbT) + (Vef / KbT))) / Ec)))));
} else if (NdChar <= 1.35e-52) {
tmp = t_0 + (NdChar / (1.0 + (Ec * ((Vef / (Ec * KbT)) + (-1.0 / KbT)))));
} else if (NdChar <= 2.2e+143) {
tmp = NdChar + t_0;
} 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 = (NdChar / (1.0 + math.exp(((EDonor - ((Ec - Vef) - mu)) / KbT)))) + (NaChar / (1.0 + ((1.0 + ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) - (mu / KbT)))) tmp = 0 if NdChar <= -1.05e+104: tmp = t_1 elif NdChar <= -8e-148: tmp = t_0 - (NdChar / (-1.0 + (Ec * ((1.0 / KbT) + (((-1.0 - (EDonor / KbT)) - ((mu / KbT) + (Vef / KbT))) / Ec))))) elif NdChar <= 1.35e-52: tmp = t_0 + (NdChar / (1.0 + (Ec * ((Vef / (Ec * KbT)) + (-1.0 / KbT))))) elif NdChar <= 2.2e+143: tmp = NdChar + t_0 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(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(EDonor - Float64(Float64(Ec - Vef) - mu)) / KbT)))) + Float64(NaChar / Float64(1.0 + Float64(Float64(1.0 + Float64(Float64(EAccept / KbT) + Float64(Float64(Vef / KbT) + Float64(Ev / KbT)))) - Float64(mu / KbT))))) tmp = 0.0 if (NdChar <= -1.05e+104) tmp = t_1; elseif (NdChar <= -8e-148) tmp = Float64(t_0 - Float64(NdChar / Float64(-1.0 + Float64(Ec * Float64(Float64(1.0 / KbT) + Float64(Float64(Float64(-1.0 - Float64(EDonor / KbT)) - Float64(Float64(mu / KbT) + Float64(Vef / KbT))) / Ec)))))); elseif (NdChar <= 1.35e-52) tmp = Float64(t_0 + Float64(NdChar / Float64(1.0 + Float64(Ec * Float64(Float64(Vef / Float64(Ec * KbT)) + Float64(-1.0 / KbT)))))); elseif (NdChar <= 2.2e+143) tmp = Float64(NdChar + t_0); 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 = (NdChar / (1.0 + exp(((EDonor - ((Ec - Vef) - mu)) / KbT)))) + (NaChar / (1.0 + ((1.0 + ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) - (mu / KbT)))); tmp = 0.0; if (NdChar <= -1.05e+104) tmp = t_1; elseif (NdChar <= -8e-148) tmp = t_0 - (NdChar / (-1.0 + (Ec * ((1.0 / KbT) + (((-1.0 - (EDonor / KbT)) - ((mu / KbT) + (Vef / KbT))) / Ec))))); elseif (NdChar <= 1.35e-52) tmp = t_0 + (NdChar / (1.0 + (Ec * ((Vef / (Ec * KbT)) + (-1.0 / KbT))))); elseif (NdChar <= 2.2e+143) tmp = NdChar + t_0; 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[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(EDonor - N[(N[(Ec - Vef), $MachinePrecision] - mu), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[(N[(1.0 + N[(N[(EAccept / KbT), $MachinePrecision] + N[(N[(Vef / KbT), $MachinePrecision] + N[(Ev / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NdChar, -1.05e+104], t$95$1, If[LessEqual[NdChar, -8e-148], N[(t$95$0 - N[(NdChar / N[(-1.0 + N[(Ec * N[(N[(1.0 / KbT), $MachinePrecision] + N[(N[(N[(-1.0 - N[(EDonor / KbT), $MachinePrecision]), $MachinePrecision] - N[(N[(mu / KbT), $MachinePrecision] + N[(Vef / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NdChar, 1.35e-52], N[(t$95$0 + N[(NdChar / N[(1.0 + N[(Ec * N[(N[(Vef / N[(Ec * KbT), $MachinePrecision]), $MachinePrecision] + N[(-1.0 / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NdChar, 2.2e+143], N[(NdChar + t$95$0), $MachinePrecision], 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 := \frac{NdChar}{1 + e^{\frac{EDonor - \left(\left(Ec - Vef\right) - mu\right)}{KbT}}} + \frac{NaChar}{1 + \left(\left(1 + \left(\frac{EAccept}{KbT} + \left(\frac{Vef}{KbT} + \frac{Ev}{KbT}\right)\right)\right) - \frac{mu}{KbT}\right)}\\
\mathbf{if}\;NdChar \leq -1.05 \cdot 10^{+104}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;NdChar \leq -8 \cdot 10^{-148}:\\
\;\;\;\;t\_0 - \frac{NdChar}{-1 + Ec \cdot \left(\frac{1}{KbT} + \frac{\left(-1 - \frac{EDonor}{KbT}\right) - \left(\frac{mu}{KbT} + \frac{Vef}{KbT}\right)}{Ec}\right)}\\
\mathbf{elif}\;NdChar \leq 1.35 \cdot 10^{-52}:\\
\;\;\;\;t\_0 + \frac{NdChar}{1 + Ec \cdot \left(\frac{Vef}{Ec \cdot KbT} + \frac{-1}{KbT}\right)}\\
\mathbf{elif}\;NdChar \leq 2.2 \cdot 10^{+143}:\\
\;\;\;\;NdChar + t\_0\\
\mathbf{else}:\\
\;\;\;\;t\_1\\
\end{array}
\end{array}
if NdChar < -1.0499999999999999e104 or 2.20000000000000014e143 < NdChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 68.3%
if -1.0499999999999999e104 < NdChar < -7.99999999999999949e-148Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 63.9%
Taylor expanded in Ec around -inf 71.1%
mul-1-neg71.1%
*-commutative71.1%
distribute-rgt-neg-in71.1%
+-commutative71.1%
mul-1-neg71.1%
unsub-neg71.1%
associate-+r+71.1%
Simplified71.1%
if -7.99999999999999949e-148 < NdChar < 1.35000000000000005e-52Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 71.1%
Taylor expanded in Ec around -inf 74.6%
mul-1-neg74.6%
*-commutative74.6%
distribute-rgt-neg-in74.6%
+-commutative74.6%
mul-1-neg74.6%
unsub-neg74.6%
associate-+r+74.6%
Simplified74.6%
Taylor expanded in Vef around inf 83.9%
*-commutative83.9%
Simplified83.9%
if 1.35000000000000005e-52 < NdChar < 2.20000000000000014e143Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 46.0%
Taylor expanded in Ec around -inf 46.1%
mul-1-neg46.1%
*-commutative46.1%
distribute-rgt-neg-in46.1%
+-commutative46.1%
mul-1-neg46.1%
unsub-neg46.1%
associate-+r+46.1%
Simplified46.1%
Taylor expanded in Vef around inf 46.5%
Taylor expanded in Vef around 0 79.3%
Final simplification76.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
(-
(/ NaChar (+ 1.0 (+ 1.0 (/ Ev KbT))))
(/ NdChar (- -1.0 (exp (/ (- EDonor (- (- Ec Vef) mu)) KbT)))))))
(if (<= NdChar -1.1e+104)
t_1
(if (<= NdChar -8.5e-184)
(+ NdChar t_0)
(if (<= NdChar -9e-307)
(+ t_0 (/ NdChar (+ 2.0 (+ (/ Vef KbT) (/ EDonor KbT)))))
(if (<= NdChar 3.9e-159)
(+ t_0 (/ NdChar (- 1.0 (/ Ec KbT))))
(if (<= NdChar 1.12e-52)
(+ t_0 (* KbT (/ NdChar (- (+ mu (+ EDonor Vef)) Ec))))
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 = (NaChar / (1.0 + (1.0 + (Ev / KbT)))) - (NdChar / (-1.0 - exp(((EDonor - ((Ec - Vef) - mu)) / KbT))));
double tmp;
if (NdChar <= -1.1e+104) {
tmp = t_1;
} else if (NdChar <= -8.5e-184) {
tmp = NdChar + t_0;
} else if (NdChar <= -9e-307) {
tmp = t_0 + (NdChar / (2.0 + ((Vef / KbT) + (EDonor / KbT))));
} else if (NdChar <= 3.9e-159) {
tmp = t_0 + (NdChar / (1.0 - (Ec / KbT)));
} else if (NdChar <= 1.12e-52) {
tmp = t_0 + (KbT * (NdChar / ((mu + (EDonor + Vef)) - Ec)));
} 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) :: tmp
t_0 = nachar / (1.0d0 + exp(((vef + (ev + (eaccept - mu))) / kbt)))
t_1 = (nachar / (1.0d0 + (1.0d0 + (ev / kbt)))) - (ndchar / ((-1.0d0) - exp(((edonor - ((ec - vef) - mu)) / kbt))))
if (ndchar <= (-1.1d+104)) then
tmp = t_1
else if (ndchar <= (-8.5d-184)) then
tmp = ndchar + t_0
else if (ndchar <= (-9d-307)) then
tmp = t_0 + (ndchar / (2.0d0 + ((vef / kbt) + (edonor / kbt))))
else if (ndchar <= 3.9d-159) then
tmp = t_0 + (ndchar / (1.0d0 - (ec / kbt)))
else if (ndchar <= 1.12d-52) then
tmp = t_0 + (kbt * (ndchar / ((mu + (edonor + vef)) - ec)))
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 = (NaChar / (1.0 + (1.0 + (Ev / KbT)))) - (NdChar / (-1.0 - Math.exp(((EDonor - ((Ec - Vef) - mu)) / KbT))));
double tmp;
if (NdChar <= -1.1e+104) {
tmp = t_1;
} else if (NdChar <= -8.5e-184) {
tmp = NdChar + t_0;
} else if (NdChar <= -9e-307) {
tmp = t_0 + (NdChar / (2.0 + ((Vef / KbT) + (EDonor / KbT))));
} else if (NdChar <= 3.9e-159) {
tmp = t_0 + (NdChar / (1.0 - (Ec / KbT)));
} else if (NdChar <= 1.12e-52) {
tmp = t_0 + (KbT * (NdChar / ((mu + (EDonor + Vef)) - Ec)));
} 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 = (NaChar / (1.0 + (1.0 + (Ev / KbT)))) - (NdChar / (-1.0 - math.exp(((EDonor - ((Ec - Vef) - mu)) / KbT)))) tmp = 0 if NdChar <= -1.1e+104: tmp = t_1 elif NdChar <= -8.5e-184: tmp = NdChar + t_0 elif NdChar <= -9e-307: tmp = t_0 + (NdChar / (2.0 + ((Vef / KbT) + (EDonor / KbT)))) elif NdChar <= 3.9e-159: tmp = t_0 + (NdChar / (1.0 - (Ec / KbT))) elif NdChar <= 1.12e-52: tmp = t_0 + (KbT * (NdChar / ((mu + (EDonor + Vef)) - Ec))) 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(Float64(NaChar / Float64(1.0 + Float64(1.0 + Float64(Ev / KbT)))) - Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(EDonor - Float64(Float64(Ec - Vef) - mu)) / KbT))))) tmp = 0.0 if (NdChar <= -1.1e+104) tmp = t_1; elseif (NdChar <= -8.5e-184) tmp = Float64(NdChar + t_0); elseif (NdChar <= -9e-307) tmp = Float64(t_0 + Float64(NdChar / Float64(2.0 + Float64(Float64(Vef / KbT) + Float64(EDonor / KbT))))); elseif (NdChar <= 3.9e-159) tmp = Float64(t_0 + Float64(NdChar / Float64(1.0 - Float64(Ec / KbT)))); elseif (NdChar <= 1.12e-52) tmp = Float64(t_0 + Float64(KbT * Float64(NdChar / Float64(Float64(mu + Float64(EDonor + Vef)) - Ec)))); 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 = (NaChar / (1.0 + (1.0 + (Ev / KbT)))) - (NdChar / (-1.0 - exp(((EDonor - ((Ec - Vef) - mu)) / KbT)))); tmp = 0.0; if (NdChar <= -1.1e+104) tmp = t_1; elseif (NdChar <= -8.5e-184) tmp = NdChar + t_0; elseif (NdChar <= -9e-307) tmp = t_0 + (NdChar / (2.0 + ((Vef / KbT) + (EDonor / KbT)))); elseif (NdChar <= 3.9e-159) tmp = t_0 + (NdChar / (1.0 - (Ec / KbT))); elseif (NdChar <= 1.12e-52) tmp = t_0 + (KbT * (NdChar / ((mu + (EDonor + Vef)) - Ec))); 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[(N[(NaChar / N[(1.0 + N[(1.0 + N[(Ev / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(NdChar / N[(-1.0 - N[Exp[N[(N[(EDonor - N[(N[(Ec - Vef), $MachinePrecision] - mu), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NdChar, -1.1e+104], t$95$1, If[LessEqual[NdChar, -8.5e-184], N[(NdChar + t$95$0), $MachinePrecision], If[LessEqual[NdChar, -9e-307], N[(t$95$0 + N[(NdChar / N[(2.0 + N[(N[(Vef / KbT), $MachinePrecision] + N[(EDonor / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NdChar, 3.9e-159], N[(t$95$0 + N[(NdChar / N[(1.0 - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NdChar, 1.12e-52], N[(t$95$0 + N[(KbT * N[(NdChar / N[(N[(mu + N[(EDonor + Vef), $MachinePrecision]), $MachinePrecision] - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], 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 := \frac{NaChar}{1 + \left(1 + \frac{Ev}{KbT}\right)} - \frac{NdChar}{-1 - e^{\frac{EDonor - \left(\left(Ec - Vef\right) - mu\right)}{KbT}}}\\
\mathbf{if}\;NdChar \leq -1.1 \cdot 10^{+104}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;NdChar \leq -8.5 \cdot 10^{-184}:\\
\;\;\;\;NdChar + t\_0\\
\mathbf{elif}\;NdChar \leq -9 \cdot 10^{-307}:\\
\;\;\;\;t\_0 + \frac{NdChar}{2 + \left(\frac{Vef}{KbT} + \frac{EDonor}{KbT}\right)}\\
\mathbf{elif}\;NdChar \leq 3.9 \cdot 10^{-159}:\\
\;\;\;\;t\_0 + \frac{NdChar}{1 - \frac{Ec}{KbT}}\\
\mathbf{elif}\;NdChar \leq 1.12 \cdot 10^{-52}:\\
\;\;\;\;t\_0 + KbT \cdot \frac{NdChar}{\left(mu + \left(EDonor + Vef\right)\right) - Ec}\\
\mathbf{else}:\\
\;\;\;\;t\_1\\
\end{array}
\end{array}
if NdChar < -1.1e104 or 1.11999999999999994e-52 < NdChar Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 80.9%
Taylor expanded in Ev around 0 65.9%
if -1.1e104 < NdChar < -8.50000000000000036e-184Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 61.6%
Taylor expanded in Ec around -inf 67.3%
mul-1-neg67.3%
*-commutative67.3%
distribute-rgt-neg-in67.3%
+-commutative67.3%
mul-1-neg67.3%
unsub-neg67.3%
associate-+r+67.3%
Simplified67.3%
Taylor expanded in Vef around inf 54.7%
Taylor expanded in Vef around 0 70.1%
if -8.50000000000000036e-184 < NdChar < -8.99999999999999978e-307Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 89.1%
Taylor expanded in mu around 0 92.8%
associate-+r+92.8%
Simplified92.8%
Taylor expanded in Ec around 0 92.8%
+-commutative92.8%
Simplified92.8%
if -8.99999999999999978e-307 < NdChar < 3.89999999999999977e-159Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 72.4%
Taylor expanded in Ec around -inf 75.3%
mul-1-neg75.3%
*-commutative75.3%
distribute-rgt-neg-in75.3%
+-commutative75.3%
mul-1-neg75.3%
unsub-neg75.3%
associate-+r+75.3%
Simplified75.3%
Taylor expanded in Ec around inf 89.4%
mul-1-neg89.4%
distribute-frac-neg89.4%
Simplified89.4%
if 3.89999999999999977e-159 < NdChar < 1.11999999999999994e-52Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 48.5%
Taylor expanded in KbT around 0 62.4%
associate-/l*93.6%
associate-+r+93.6%
+-commutative93.6%
Simplified93.6%
Final simplification74.3%
(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
(-
(/ NaChar (+ 1.0 (+ 1.0 (/ Ev KbT))))
(/ NdChar (- -1.0 (exp (/ (- EDonor (- (- Ec Vef) mu)) KbT)))))))
(if (<= NdChar -9e+114)
t_1
(if (<= NdChar -1.5e+61)
(+ t_0 (/ NdChar (+ 1.0 (* Ec (+ (/ EDonor (* Ec KbT)) (/ -1.0 KbT))))))
(if (<= NdChar -1.1e-166)
(+ NdChar t_0)
(if (<= NdChar 1.05e-58)
(+
t_0
(/ NdChar (+ 1.0 (* Ec (+ (/ Vef (* Ec KbT)) (/ -1.0 KbT))))))
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 = (NaChar / (1.0 + (1.0 + (Ev / KbT)))) - (NdChar / (-1.0 - exp(((EDonor - ((Ec - Vef) - mu)) / KbT))));
double tmp;
if (NdChar <= -9e+114) {
tmp = t_1;
} else if (NdChar <= -1.5e+61) {
tmp = t_0 + (NdChar / (1.0 + (Ec * ((EDonor / (Ec * KbT)) + (-1.0 / KbT)))));
} else if (NdChar <= -1.1e-166) {
tmp = NdChar + t_0;
} else if (NdChar <= 1.05e-58) {
tmp = t_0 + (NdChar / (1.0 + (Ec * ((Vef / (Ec * KbT)) + (-1.0 / KbT)))));
} 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) :: tmp
t_0 = nachar / (1.0d0 + exp(((vef + (ev + (eaccept - mu))) / kbt)))
t_1 = (nachar / (1.0d0 + (1.0d0 + (ev / kbt)))) - (ndchar / ((-1.0d0) - exp(((edonor - ((ec - vef) - mu)) / kbt))))
if (ndchar <= (-9d+114)) then
tmp = t_1
else if (ndchar <= (-1.5d+61)) then
tmp = t_0 + (ndchar / (1.0d0 + (ec * ((edonor / (ec * kbt)) + ((-1.0d0) / kbt)))))
else if (ndchar <= (-1.1d-166)) then
tmp = ndchar + t_0
else if (ndchar <= 1.05d-58) then
tmp = t_0 + (ndchar / (1.0d0 + (ec * ((vef / (ec * kbt)) + ((-1.0d0) / kbt)))))
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 = (NaChar / (1.0 + (1.0 + (Ev / KbT)))) - (NdChar / (-1.0 - Math.exp(((EDonor - ((Ec - Vef) - mu)) / KbT))));
double tmp;
if (NdChar <= -9e+114) {
tmp = t_1;
} else if (NdChar <= -1.5e+61) {
tmp = t_0 + (NdChar / (1.0 + (Ec * ((EDonor / (Ec * KbT)) + (-1.0 / KbT)))));
} else if (NdChar <= -1.1e-166) {
tmp = NdChar + t_0;
} else if (NdChar <= 1.05e-58) {
tmp = t_0 + (NdChar / (1.0 + (Ec * ((Vef / (Ec * KbT)) + (-1.0 / KbT)))));
} 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 = (NaChar / (1.0 + (1.0 + (Ev / KbT)))) - (NdChar / (-1.0 - math.exp(((EDonor - ((Ec - Vef) - mu)) / KbT)))) tmp = 0 if NdChar <= -9e+114: tmp = t_1 elif NdChar <= -1.5e+61: tmp = t_0 + (NdChar / (1.0 + (Ec * ((EDonor / (Ec * KbT)) + (-1.0 / KbT))))) elif NdChar <= -1.1e-166: tmp = NdChar + t_0 elif NdChar <= 1.05e-58: tmp = t_0 + (NdChar / (1.0 + (Ec * ((Vef / (Ec * KbT)) + (-1.0 / KbT))))) 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(Float64(NaChar / Float64(1.0 + Float64(1.0 + Float64(Ev / KbT)))) - Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(EDonor - Float64(Float64(Ec - Vef) - mu)) / KbT))))) tmp = 0.0 if (NdChar <= -9e+114) tmp = t_1; elseif (NdChar <= -1.5e+61) tmp = Float64(t_0 + Float64(NdChar / Float64(1.0 + Float64(Ec * Float64(Float64(EDonor / Float64(Ec * KbT)) + Float64(-1.0 / KbT)))))); elseif (NdChar <= -1.1e-166) tmp = Float64(NdChar + t_0); elseif (NdChar <= 1.05e-58) tmp = Float64(t_0 + Float64(NdChar / Float64(1.0 + Float64(Ec * Float64(Float64(Vef / Float64(Ec * KbT)) + Float64(-1.0 / KbT)))))); 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 = (NaChar / (1.0 + (1.0 + (Ev / KbT)))) - (NdChar / (-1.0 - exp(((EDonor - ((Ec - Vef) - mu)) / KbT)))); tmp = 0.0; if (NdChar <= -9e+114) tmp = t_1; elseif (NdChar <= -1.5e+61) tmp = t_0 + (NdChar / (1.0 + (Ec * ((EDonor / (Ec * KbT)) + (-1.0 / KbT))))); elseif (NdChar <= -1.1e-166) tmp = NdChar + t_0; elseif (NdChar <= 1.05e-58) tmp = t_0 + (NdChar / (1.0 + (Ec * ((Vef / (Ec * KbT)) + (-1.0 / KbT))))); 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[(N[(NaChar / N[(1.0 + N[(1.0 + N[(Ev / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(NdChar / N[(-1.0 - N[Exp[N[(N[(EDonor - N[(N[(Ec - Vef), $MachinePrecision] - mu), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NdChar, -9e+114], t$95$1, If[LessEqual[NdChar, -1.5e+61], N[(t$95$0 + N[(NdChar / N[(1.0 + N[(Ec * N[(N[(EDonor / N[(Ec * KbT), $MachinePrecision]), $MachinePrecision] + N[(-1.0 / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NdChar, -1.1e-166], N[(NdChar + t$95$0), $MachinePrecision], If[LessEqual[NdChar, 1.05e-58], N[(t$95$0 + N[(NdChar / N[(1.0 + N[(Ec * N[(N[(Vef / N[(Ec * KbT), $MachinePrecision]), $MachinePrecision] + N[(-1.0 / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], 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 := \frac{NaChar}{1 + \left(1 + \frac{Ev}{KbT}\right)} - \frac{NdChar}{-1 - e^{\frac{EDonor - \left(\left(Ec - Vef\right) - mu\right)}{KbT}}}\\
\mathbf{if}\;NdChar \leq -9 \cdot 10^{+114}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;NdChar \leq -1.5 \cdot 10^{+61}:\\
\;\;\;\;t\_0 + \frac{NdChar}{1 + Ec \cdot \left(\frac{EDonor}{Ec \cdot KbT} + \frac{-1}{KbT}\right)}\\
\mathbf{elif}\;NdChar \leq -1.1 \cdot 10^{-166}:\\
\;\;\;\;NdChar + t\_0\\
\mathbf{elif}\;NdChar \leq 1.05 \cdot 10^{-58}:\\
\;\;\;\;t\_0 + \frac{NdChar}{1 + Ec \cdot \left(\frac{Vef}{Ec \cdot KbT} + \frac{-1}{KbT}\right)}\\
\mathbf{else}:\\
\;\;\;\;t\_1\\
\end{array}
\end{array}
if NdChar < -9.0000000000000001e114 or 1.04999999999999994e-58 < NdChar Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 80.8%
Taylor expanded in Ev around 0 66.3%
if -9.0000000000000001e114 < NdChar < -1.5e61Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 45.9%
Taylor expanded in Ec around -inf 59.0%
mul-1-neg59.0%
*-commutative59.0%
distribute-rgt-neg-in59.0%
+-commutative59.0%
mul-1-neg59.0%
unsub-neg59.0%
associate-+r+59.0%
Simplified59.0%
Taylor expanded in EDonor around inf 72.6%
*-commutative72.6%
Simplified72.6%
if -1.5e61 < NdChar < -1.1000000000000001e-166Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 64.7%
Taylor expanded in Ec around -inf 69.4%
mul-1-neg69.4%
*-commutative69.4%
distribute-rgt-neg-in69.4%
+-commutative69.4%
mul-1-neg69.4%
unsub-neg69.4%
associate-+r+69.4%
Simplified69.4%
Taylor expanded in Vef around inf 56.3%
Taylor expanded in Vef around 0 70.6%
if -1.1000000000000001e-166 < NdChar < 1.04999999999999994e-58Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 72.2%
Taylor expanded in Ec around -inf 75.9%
mul-1-neg75.9%
*-commutative75.9%
distribute-rgt-neg-in75.9%
+-commutative75.9%
mul-1-neg75.9%
unsub-neg75.9%
associate-+r+75.9%
Simplified75.9%
Taylor expanded in Vef around inf 86.1%
*-commutative86.1%
Simplified86.1%
Final simplification73.3%
(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
(-
(/ NaChar (+ 1.0 (+ 1.0 (/ Ev KbT))))
(/ NdChar (- -1.0 (exp (/ (- EDonor (- (- Ec Vef) mu)) KbT)))))))
(if (<= NdChar -2.3e+104)
t_1
(if (<= NdChar -7e-231)
(+ NdChar t_0)
(if (<= NdChar 2.5e-52)
(+ t_0 (* KbT (/ NdChar (- (+ mu (+ EDonor Vef)) Ec))))
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 = (NaChar / (1.0 + (1.0 + (Ev / KbT)))) - (NdChar / (-1.0 - exp(((EDonor - ((Ec - Vef) - mu)) / KbT))));
double tmp;
if (NdChar <= -2.3e+104) {
tmp = t_1;
} else if (NdChar <= -7e-231) {
tmp = NdChar + t_0;
} else if (NdChar <= 2.5e-52) {
tmp = t_0 + (KbT * (NdChar / ((mu + (EDonor + Vef)) - Ec)));
} 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) :: tmp
t_0 = nachar / (1.0d0 + exp(((vef + (ev + (eaccept - mu))) / kbt)))
t_1 = (nachar / (1.0d0 + (1.0d0 + (ev / kbt)))) - (ndchar / ((-1.0d0) - exp(((edonor - ((ec - vef) - mu)) / kbt))))
if (ndchar <= (-2.3d+104)) then
tmp = t_1
else if (ndchar <= (-7d-231)) then
tmp = ndchar + t_0
else if (ndchar <= 2.5d-52) then
tmp = t_0 + (kbt * (ndchar / ((mu + (edonor + vef)) - ec)))
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 = (NaChar / (1.0 + (1.0 + (Ev / KbT)))) - (NdChar / (-1.0 - Math.exp(((EDonor - ((Ec - Vef) - mu)) / KbT))));
double tmp;
if (NdChar <= -2.3e+104) {
tmp = t_1;
} else if (NdChar <= -7e-231) {
tmp = NdChar + t_0;
} else if (NdChar <= 2.5e-52) {
tmp = t_0 + (KbT * (NdChar / ((mu + (EDonor + Vef)) - Ec)));
} 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 = (NaChar / (1.0 + (1.0 + (Ev / KbT)))) - (NdChar / (-1.0 - math.exp(((EDonor - ((Ec - Vef) - mu)) / KbT)))) tmp = 0 if NdChar <= -2.3e+104: tmp = t_1 elif NdChar <= -7e-231: tmp = NdChar + t_0 elif NdChar <= 2.5e-52: tmp = t_0 + (KbT * (NdChar / ((mu + (EDonor + Vef)) - Ec))) 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(Float64(NaChar / Float64(1.0 + Float64(1.0 + Float64(Ev / KbT)))) - Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(EDonor - Float64(Float64(Ec - Vef) - mu)) / KbT))))) tmp = 0.0 if (NdChar <= -2.3e+104) tmp = t_1; elseif (NdChar <= -7e-231) tmp = Float64(NdChar + t_0); elseif (NdChar <= 2.5e-52) tmp = Float64(t_0 + Float64(KbT * Float64(NdChar / Float64(Float64(mu + Float64(EDonor + Vef)) - Ec)))); 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 = (NaChar / (1.0 + (1.0 + (Ev / KbT)))) - (NdChar / (-1.0 - exp(((EDonor - ((Ec - Vef) - mu)) / KbT)))); tmp = 0.0; if (NdChar <= -2.3e+104) tmp = t_1; elseif (NdChar <= -7e-231) tmp = NdChar + t_0; elseif (NdChar <= 2.5e-52) tmp = t_0 + (KbT * (NdChar / ((mu + (EDonor + Vef)) - Ec))); 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[(N[(NaChar / N[(1.0 + N[(1.0 + N[(Ev / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(NdChar / N[(-1.0 - N[Exp[N[(N[(EDonor - N[(N[(Ec - Vef), $MachinePrecision] - mu), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NdChar, -2.3e+104], t$95$1, If[LessEqual[NdChar, -7e-231], N[(NdChar + t$95$0), $MachinePrecision], If[LessEqual[NdChar, 2.5e-52], N[(t$95$0 + N[(KbT * N[(NdChar / N[(N[(mu + N[(EDonor + Vef), $MachinePrecision]), $MachinePrecision] - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], 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 := \frac{NaChar}{1 + \left(1 + \frac{Ev}{KbT}\right)} - \frac{NdChar}{-1 - e^{\frac{EDonor - \left(\left(Ec - Vef\right) - mu\right)}{KbT}}}\\
\mathbf{if}\;NdChar \leq -2.3 \cdot 10^{+104}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;NdChar \leq -7 \cdot 10^{-231}:\\
\;\;\;\;NdChar + t\_0\\
\mathbf{elif}\;NdChar \leq 2.5 \cdot 10^{-52}:\\
\;\;\;\;t\_0 + KbT \cdot \frac{NdChar}{\left(mu + \left(EDonor + Vef\right)\right) - Ec}\\
\mathbf{else}:\\
\;\;\;\;t\_1\\
\end{array}
\end{array}
if NdChar < -2.29999999999999985e104 or 2.5e-52 < NdChar Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 80.9%
Taylor expanded in Ev around 0 65.9%
if -2.29999999999999985e104 < NdChar < -7.0000000000000002e-231Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 63.6%
Taylor expanded in Ec around -inf 68.5%
mul-1-neg68.5%
*-commutative68.5%
distribute-rgt-neg-in68.5%
+-commutative68.5%
mul-1-neg68.5%
unsub-neg68.5%
associate-+r+68.5%
Simplified68.5%
Taylor expanded in Vef around inf 56.3%
Taylor expanded in Vef around 0 69.6%
if -7.0000000000000002e-231 < NdChar < 2.5e-52Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 73.3%
Taylor expanded in KbT around 0 79.4%
associate-/l*86.3%
associate-+r+86.3%
+-commutative86.3%
Simplified86.3%
Final simplification72.1%
(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
(-
(/ NaChar (+ 1.0 (+ 1.0 (/ Ev KbT))))
(/ NdChar (- -1.0 (exp (/ (- EDonor (- (- Ec Vef) mu)) KbT)))))))
(if (<= NdChar -3.7e-131)
t_1
(if (<= NdChar -1.6e-235)
(+ t_0 (/ NdChar (+ 1.0 (/ mu KbT))))
(if (<= NdChar 6e-68) (+ t_0 (/ NdChar (+ 1.0 (/ Vef KbT)))) 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 = (NaChar / (1.0 + (1.0 + (Ev / KbT)))) - (NdChar / (-1.0 - exp(((EDonor - ((Ec - Vef) - mu)) / KbT))));
double tmp;
if (NdChar <= -3.7e-131) {
tmp = t_1;
} else if (NdChar <= -1.6e-235) {
tmp = t_0 + (NdChar / (1.0 + (mu / KbT)));
} else if (NdChar <= 6e-68) {
tmp = t_0 + (NdChar / (1.0 + (Vef / KbT)));
} 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) :: tmp
t_0 = nachar / (1.0d0 + exp(((vef + (ev + (eaccept - mu))) / kbt)))
t_1 = (nachar / (1.0d0 + (1.0d0 + (ev / kbt)))) - (ndchar / ((-1.0d0) - exp(((edonor - ((ec - vef) - mu)) / kbt))))
if (ndchar <= (-3.7d-131)) then
tmp = t_1
else if (ndchar <= (-1.6d-235)) then
tmp = t_0 + (ndchar / (1.0d0 + (mu / kbt)))
else if (ndchar <= 6d-68) then
tmp = t_0 + (ndchar / (1.0d0 + (vef / kbt)))
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 = (NaChar / (1.0 + (1.0 + (Ev / KbT)))) - (NdChar / (-1.0 - Math.exp(((EDonor - ((Ec - Vef) - mu)) / KbT))));
double tmp;
if (NdChar <= -3.7e-131) {
tmp = t_1;
} else if (NdChar <= -1.6e-235) {
tmp = t_0 + (NdChar / (1.0 + (mu / KbT)));
} else if (NdChar <= 6e-68) {
tmp = t_0 + (NdChar / (1.0 + (Vef / KbT)));
} 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 = (NaChar / (1.0 + (1.0 + (Ev / KbT)))) - (NdChar / (-1.0 - math.exp(((EDonor - ((Ec - Vef) - mu)) / KbT)))) tmp = 0 if NdChar <= -3.7e-131: tmp = t_1 elif NdChar <= -1.6e-235: tmp = t_0 + (NdChar / (1.0 + (mu / KbT))) elif NdChar <= 6e-68: tmp = t_0 + (NdChar / (1.0 + (Vef / KbT))) 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(Float64(NaChar / Float64(1.0 + Float64(1.0 + Float64(Ev / KbT)))) - Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(EDonor - Float64(Float64(Ec - Vef) - mu)) / KbT))))) tmp = 0.0 if (NdChar <= -3.7e-131) tmp = t_1; elseif (NdChar <= -1.6e-235) tmp = Float64(t_0 + Float64(NdChar / Float64(1.0 + Float64(mu / KbT)))); elseif (NdChar <= 6e-68) tmp = Float64(t_0 + Float64(NdChar / Float64(1.0 + Float64(Vef / KbT)))); 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 = (NaChar / (1.0 + (1.0 + (Ev / KbT)))) - (NdChar / (-1.0 - exp(((EDonor - ((Ec - Vef) - mu)) / KbT)))); tmp = 0.0; if (NdChar <= -3.7e-131) tmp = t_1; elseif (NdChar <= -1.6e-235) tmp = t_0 + (NdChar / (1.0 + (mu / KbT))); elseif (NdChar <= 6e-68) tmp = t_0 + (NdChar / (1.0 + (Vef / KbT))); 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[(N[(NaChar / N[(1.0 + N[(1.0 + N[(Ev / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(NdChar / N[(-1.0 - N[Exp[N[(N[(EDonor - N[(N[(Ec - Vef), $MachinePrecision] - mu), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NdChar, -3.7e-131], t$95$1, If[LessEqual[NdChar, -1.6e-235], N[(t$95$0 + N[(NdChar / N[(1.0 + N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NdChar, 6e-68], N[(t$95$0 + N[(NdChar / N[(1.0 + N[(Vef / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], 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 := \frac{NaChar}{1 + \left(1 + \frac{Ev}{KbT}\right)} - \frac{NdChar}{-1 - e^{\frac{EDonor - \left(\left(Ec - Vef\right) - mu\right)}{KbT}}}\\
\mathbf{if}\;NdChar \leq -3.7 \cdot 10^{-131}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;NdChar \leq -1.6 \cdot 10^{-235}:\\
\;\;\;\;t\_0 + \frac{NdChar}{1 + \frac{mu}{KbT}}\\
\mathbf{elif}\;NdChar \leq 6 \cdot 10^{-68}:\\
\;\;\;\;t\_0 + \frac{NdChar}{1 + \frac{Vef}{KbT}}\\
\mathbf{else}:\\
\;\;\;\;t\_1\\
\end{array}
\end{array}
if NdChar < -3.7000000000000002e-131 or 6e-68 < NdChar Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 80.7%
Taylor expanded in Ev around 0 64.8%
if -3.7000000000000002e-131 < NdChar < -1.6000000000000001e-235Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 69.5%
Taylor expanded in Ec around -inf 69.5%
mul-1-neg69.5%
*-commutative69.5%
distribute-rgt-neg-in69.5%
+-commutative69.5%
mul-1-neg69.5%
unsub-neg69.5%
associate-+r+69.5%
Simplified69.5%
Taylor expanded in mu around inf 80.4%
if -1.6000000000000001e-235 < NdChar < 6e-68Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 74.3%
Taylor expanded in Ec around -inf 77.4%
mul-1-neg77.4%
*-commutative77.4%
distribute-rgt-neg-in77.4%
+-commutative77.4%
mul-1-neg77.4%
unsub-neg77.4%
associate-+r+77.4%
Simplified77.4%
Taylor expanded in Vef around inf 83.9%
Final simplification70.8%
(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 (+ NdChar t_0))
(t_2
(-
(/ NaChar 2.0)
(/ NdChar (- -1.0 (exp (/ (- EDonor (- (- Ec Vef) mu)) KbT)))))))
(if (<= NdChar -8.6e+156)
t_2
(if (<= NdChar -1.1e-242)
t_1
(if (<= NdChar -1e-305)
(+ t_0 (* KbT (/ NdChar Vef)))
(if (<= NdChar 4.6e+96) t_1 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 = NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT)));
double t_1 = NdChar + t_0;
double t_2 = (NaChar / 2.0) - (NdChar / (-1.0 - exp(((EDonor - ((Ec - Vef) - mu)) / KbT))));
double tmp;
if (NdChar <= -8.6e+156) {
tmp = t_2;
} else if (NdChar <= -1.1e-242) {
tmp = t_1;
} else if (NdChar <= -1e-305) {
tmp = t_0 + (KbT * (NdChar / Vef));
} else if (NdChar <= 4.6e+96) {
tmp = t_1;
} 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) :: tmp
t_0 = nachar / (1.0d0 + exp(((vef + (ev + (eaccept - mu))) / kbt)))
t_1 = ndchar + t_0
t_2 = (nachar / 2.0d0) - (ndchar / ((-1.0d0) - exp(((edonor - ((ec - vef) - mu)) / kbt))))
if (ndchar <= (-8.6d+156)) then
tmp = t_2
else if (ndchar <= (-1.1d-242)) then
tmp = t_1
else if (ndchar <= (-1d-305)) then
tmp = t_0 + (kbt * (ndchar / vef))
else if (ndchar <= 4.6d+96) then
tmp = t_1
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 = NaChar / (1.0 + Math.exp(((Vef + (Ev + (EAccept - mu))) / KbT)));
double t_1 = NdChar + t_0;
double t_2 = (NaChar / 2.0) - (NdChar / (-1.0 - Math.exp(((EDonor - ((Ec - Vef) - mu)) / KbT))));
double tmp;
if (NdChar <= -8.6e+156) {
tmp = t_2;
} else if (NdChar <= -1.1e-242) {
tmp = t_1;
} else if (NdChar <= -1e-305) {
tmp = t_0 + (KbT * (NdChar / Vef));
} else if (NdChar <= 4.6e+96) {
tmp = t_1;
} else {
tmp = t_2;
}
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 = NdChar + t_0 t_2 = (NaChar / 2.0) - (NdChar / (-1.0 - math.exp(((EDonor - ((Ec - Vef) - mu)) / KbT)))) tmp = 0 if NdChar <= -8.6e+156: tmp = t_2 elif NdChar <= -1.1e-242: tmp = t_1 elif NdChar <= -1e-305: tmp = t_0 + (KbT * (NdChar / Vef)) elif NdChar <= 4.6e+96: tmp = t_1 else: tmp = t_2 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(NdChar + t_0) t_2 = Float64(Float64(NaChar / 2.0) - Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(EDonor - Float64(Float64(Ec - Vef) - mu)) / KbT))))) tmp = 0.0 if (NdChar <= -8.6e+156) tmp = t_2; elseif (NdChar <= -1.1e-242) tmp = t_1; elseif (NdChar <= -1e-305) tmp = Float64(t_0 + Float64(KbT * Float64(NdChar / Vef))); elseif (NdChar <= 4.6e+96) tmp = t_1; else tmp = t_2; 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 = NdChar + t_0; t_2 = (NaChar / 2.0) - (NdChar / (-1.0 - exp(((EDonor - ((Ec - Vef) - mu)) / KbT)))); tmp = 0.0; if (NdChar <= -8.6e+156) tmp = t_2; elseif (NdChar <= -1.1e-242) tmp = t_1; elseif (NdChar <= -1e-305) tmp = t_0 + (KbT * (NdChar / Vef)); elseif (NdChar <= 4.6e+96) tmp = t_1; else tmp = t_2; 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[(NdChar + t$95$0), $MachinePrecision]}, Block[{t$95$2 = N[(N[(NaChar / 2.0), $MachinePrecision] - N[(NdChar / N[(-1.0 - N[Exp[N[(N[(EDonor - N[(N[(Ec - Vef), $MachinePrecision] - mu), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NdChar, -8.6e+156], t$95$2, If[LessEqual[NdChar, -1.1e-242], t$95$1, If[LessEqual[NdChar, -1e-305], N[(t$95$0 + N[(KbT * N[(NdChar / Vef), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NdChar, 4.6e+96], t$95$1, t$95$2]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{Vef + \left(Ev + \left(EAccept - mu\right)\right)}{KbT}}}\\
t_1 := NdChar + t\_0\\
t_2 := \frac{NaChar}{2} - \frac{NdChar}{-1 - e^{\frac{EDonor - \left(\left(Ec - Vef\right) - mu\right)}{KbT}}}\\
\mathbf{if}\;NdChar \leq -8.6 \cdot 10^{+156}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;NdChar \leq -1.1 \cdot 10^{-242}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;NdChar \leq -1 \cdot 10^{-305}:\\
\;\;\;\;t\_0 + KbT \cdot \frac{NdChar}{Vef}\\
\mathbf{elif}\;NdChar \leq 4.6 \cdot 10^{+96}:\\
\;\;\;\;t\_1\\
\mathbf{else}:\\
\;\;\;\;t\_2\\
\end{array}
\end{array}
if NdChar < -8.5999999999999997e156 or 4.6000000000000003e96 < NdChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 61.7%
if -8.5999999999999997e156 < NdChar < -1.10000000000000001e-242 or -9.99999999999999996e-306 < NdChar < 4.6000000000000003e96Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 58.9%
Taylor expanded in Ec around -inf 62.7%
mul-1-neg62.7%
*-commutative62.7%
distribute-rgt-neg-in62.7%
+-commutative62.7%
mul-1-neg62.7%
unsub-neg62.7%
associate-+r+62.7%
Simplified62.7%
Taylor expanded in Vef around inf 59.1%
Taylor expanded in Vef around 0 71.2%
if -1.10000000000000001e-242 < NdChar < -9.99999999999999996e-306Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 93.3%
Taylor expanded in Vef around inf 87.1%
associate-/l*87.1%
Simplified87.1%
Final simplification68.9%
(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 (+ NdChar t_0))
(t_2
(-
(/ NaChar 2.0)
(/ NdChar (- -1.0 (exp (/ (- EDonor (- (- Ec Vef) mu)) KbT)))))))
(if (<= NdChar -1.3e+152)
t_2
(if (<= NdChar -8e-234)
t_1
(if (<= NdChar -9.6e-306)
(+ t_0 (/ (* NdChar KbT) mu))
(if (<= NdChar 1.55e+96) t_1 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 = NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT)));
double t_1 = NdChar + t_0;
double t_2 = (NaChar / 2.0) - (NdChar / (-1.0 - exp(((EDonor - ((Ec - Vef) - mu)) / KbT))));
double tmp;
if (NdChar <= -1.3e+152) {
tmp = t_2;
} else if (NdChar <= -8e-234) {
tmp = t_1;
} else if (NdChar <= -9.6e-306) {
tmp = t_0 + ((NdChar * KbT) / mu);
} else if (NdChar <= 1.55e+96) {
tmp = t_1;
} 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) :: tmp
t_0 = nachar / (1.0d0 + exp(((vef + (ev + (eaccept - mu))) / kbt)))
t_1 = ndchar + t_0
t_2 = (nachar / 2.0d0) - (ndchar / ((-1.0d0) - exp(((edonor - ((ec - vef) - mu)) / kbt))))
if (ndchar <= (-1.3d+152)) then
tmp = t_2
else if (ndchar <= (-8d-234)) then
tmp = t_1
else if (ndchar <= (-9.6d-306)) then
tmp = t_0 + ((ndchar * kbt) / mu)
else if (ndchar <= 1.55d+96) then
tmp = t_1
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 = NaChar / (1.0 + Math.exp(((Vef + (Ev + (EAccept - mu))) / KbT)));
double t_1 = NdChar + t_0;
double t_2 = (NaChar / 2.0) - (NdChar / (-1.0 - Math.exp(((EDonor - ((Ec - Vef) - mu)) / KbT))));
double tmp;
if (NdChar <= -1.3e+152) {
tmp = t_2;
} else if (NdChar <= -8e-234) {
tmp = t_1;
} else if (NdChar <= -9.6e-306) {
tmp = t_0 + ((NdChar * KbT) / mu);
} else if (NdChar <= 1.55e+96) {
tmp = t_1;
} else {
tmp = t_2;
}
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 = NdChar + t_0 t_2 = (NaChar / 2.0) - (NdChar / (-1.0 - math.exp(((EDonor - ((Ec - Vef) - mu)) / KbT)))) tmp = 0 if NdChar <= -1.3e+152: tmp = t_2 elif NdChar <= -8e-234: tmp = t_1 elif NdChar <= -9.6e-306: tmp = t_0 + ((NdChar * KbT) / mu) elif NdChar <= 1.55e+96: tmp = t_1 else: tmp = t_2 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(NdChar + t_0) t_2 = Float64(Float64(NaChar / 2.0) - Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(EDonor - Float64(Float64(Ec - Vef) - mu)) / KbT))))) tmp = 0.0 if (NdChar <= -1.3e+152) tmp = t_2; elseif (NdChar <= -8e-234) tmp = t_1; elseif (NdChar <= -9.6e-306) tmp = Float64(t_0 + Float64(Float64(NdChar * KbT) / mu)); elseif (NdChar <= 1.55e+96) tmp = t_1; else tmp = t_2; 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 = NdChar + t_0; t_2 = (NaChar / 2.0) - (NdChar / (-1.0 - exp(((EDonor - ((Ec - Vef) - mu)) / KbT)))); tmp = 0.0; if (NdChar <= -1.3e+152) tmp = t_2; elseif (NdChar <= -8e-234) tmp = t_1; elseif (NdChar <= -9.6e-306) tmp = t_0 + ((NdChar * KbT) / mu); elseif (NdChar <= 1.55e+96) tmp = t_1; else tmp = t_2; 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[(NdChar + t$95$0), $MachinePrecision]}, Block[{t$95$2 = N[(N[(NaChar / 2.0), $MachinePrecision] - N[(NdChar / N[(-1.0 - N[Exp[N[(N[(EDonor - N[(N[(Ec - Vef), $MachinePrecision] - mu), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NdChar, -1.3e+152], t$95$2, If[LessEqual[NdChar, -8e-234], t$95$1, If[LessEqual[NdChar, -9.6e-306], N[(t$95$0 + N[(N[(NdChar * KbT), $MachinePrecision] / mu), $MachinePrecision]), $MachinePrecision], If[LessEqual[NdChar, 1.55e+96], t$95$1, t$95$2]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{Vef + \left(Ev + \left(EAccept - mu\right)\right)}{KbT}}}\\
t_1 := NdChar + t\_0\\
t_2 := \frac{NaChar}{2} - \frac{NdChar}{-1 - e^{\frac{EDonor - \left(\left(Ec - Vef\right) - mu\right)}{KbT}}}\\
\mathbf{if}\;NdChar \leq -1.3 \cdot 10^{+152}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;NdChar \leq -8 \cdot 10^{-234}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;NdChar \leq -9.6 \cdot 10^{-306}:\\
\;\;\;\;t\_0 + \frac{NdChar \cdot KbT}{mu}\\
\mathbf{elif}\;NdChar \leq 1.55 \cdot 10^{+96}:\\
\;\;\;\;t\_1\\
\mathbf{else}:\\
\;\;\;\;t\_2\\
\end{array}
\end{array}
if NdChar < -1.3e152 or 1.5499999999999999e96 < NdChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 61.7%
if -1.3e152 < NdChar < -7.9999999999999997e-234 or -9.5999999999999998e-306 < NdChar < 1.5499999999999999e96Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 58.4%
Taylor expanded in Ec around -inf 62.2%
mul-1-neg62.2%
*-commutative62.2%
distribute-rgt-neg-in62.2%
+-commutative62.2%
mul-1-neg62.2%
unsub-neg62.2%
associate-+r+62.2%
Simplified62.2%
Taylor expanded in Vef around inf 59.2%
Taylor expanded in Vef around 0 71.4%
if -7.9999999999999997e-234 < NdChar < -9.5999999999999998e-306Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 94.1%
Taylor expanded in KbT around 0 100.0%
associate-/l*100.0%
associate-+r+100.0%
+-commutative100.0%
Simplified100.0%
Taylor expanded in mu around inf 83.1%
Final simplification68.9%
(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 (+ NdChar t_0))
(t_2
(-
(/ NaChar 2.0)
(/ NdChar (- -1.0 (exp (/ (- EDonor (- (- Ec Vef) mu)) KbT)))))))
(if (<= NdChar -1.12e+152)
t_2
(if (<= NdChar -4.5e-110)
t_1
(if (<= NdChar 8.5e-226)
(+ t_0 (/ NdChar (+ 1.0 (/ EDonor KbT))))
(if (<= NdChar 2.2e+97) t_1 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 = NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT)));
double t_1 = NdChar + t_0;
double t_2 = (NaChar / 2.0) - (NdChar / (-1.0 - exp(((EDonor - ((Ec - Vef) - mu)) / KbT))));
double tmp;
if (NdChar <= -1.12e+152) {
tmp = t_2;
} else if (NdChar <= -4.5e-110) {
tmp = t_1;
} else if (NdChar <= 8.5e-226) {
tmp = t_0 + (NdChar / (1.0 + (EDonor / KbT)));
} else if (NdChar <= 2.2e+97) {
tmp = t_1;
} 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) :: tmp
t_0 = nachar / (1.0d0 + exp(((vef + (ev + (eaccept - mu))) / kbt)))
t_1 = ndchar + t_0
t_2 = (nachar / 2.0d0) - (ndchar / ((-1.0d0) - exp(((edonor - ((ec - vef) - mu)) / kbt))))
if (ndchar <= (-1.12d+152)) then
tmp = t_2
else if (ndchar <= (-4.5d-110)) then
tmp = t_1
else if (ndchar <= 8.5d-226) then
tmp = t_0 + (ndchar / (1.0d0 + (edonor / kbt)))
else if (ndchar <= 2.2d+97) then
tmp = t_1
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 = NaChar / (1.0 + Math.exp(((Vef + (Ev + (EAccept - mu))) / KbT)));
double t_1 = NdChar + t_0;
double t_2 = (NaChar / 2.0) - (NdChar / (-1.0 - Math.exp(((EDonor - ((Ec - Vef) - mu)) / KbT))));
double tmp;
if (NdChar <= -1.12e+152) {
tmp = t_2;
} else if (NdChar <= -4.5e-110) {
tmp = t_1;
} else if (NdChar <= 8.5e-226) {
tmp = t_0 + (NdChar / (1.0 + (EDonor / KbT)));
} else if (NdChar <= 2.2e+97) {
tmp = t_1;
} else {
tmp = t_2;
}
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 = NdChar + t_0 t_2 = (NaChar / 2.0) - (NdChar / (-1.0 - math.exp(((EDonor - ((Ec - Vef) - mu)) / KbT)))) tmp = 0 if NdChar <= -1.12e+152: tmp = t_2 elif NdChar <= -4.5e-110: tmp = t_1 elif NdChar <= 8.5e-226: tmp = t_0 + (NdChar / (1.0 + (EDonor / KbT))) elif NdChar <= 2.2e+97: tmp = t_1 else: tmp = t_2 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(NdChar + t_0) t_2 = Float64(Float64(NaChar / 2.0) - Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(EDonor - Float64(Float64(Ec - Vef) - mu)) / KbT))))) tmp = 0.0 if (NdChar <= -1.12e+152) tmp = t_2; elseif (NdChar <= -4.5e-110) tmp = t_1; elseif (NdChar <= 8.5e-226) tmp = Float64(t_0 + Float64(NdChar / Float64(1.0 + Float64(EDonor / KbT)))); elseif (NdChar <= 2.2e+97) tmp = t_1; else tmp = t_2; 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 = NdChar + t_0; t_2 = (NaChar / 2.0) - (NdChar / (-1.0 - exp(((EDonor - ((Ec - Vef) - mu)) / KbT)))); tmp = 0.0; if (NdChar <= -1.12e+152) tmp = t_2; elseif (NdChar <= -4.5e-110) tmp = t_1; elseif (NdChar <= 8.5e-226) tmp = t_0 + (NdChar / (1.0 + (EDonor / KbT))); elseif (NdChar <= 2.2e+97) tmp = t_1; else tmp = t_2; 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[(NdChar + t$95$0), $MachinePrecision]}, Block[{t$95$2 = N[(N[(NaChar / 2.0), $MachinePrecision] - N[(NdChar / N[(-1.0 - N[Exp[N[(N[(EDonor - N[(N[(Ec - Vef), $MachinePrecision] - mu), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NdChar, -1.12e+152], t$95$2, If[LessEqual[NdChar, -4.5e-110], t$95$1, If[LessEqual[NdChar, 8.5e-226], N[(t$95$0 + N[(NdChar / N[(1.0 + N[(EDonor / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NdChar, 2.2e+97], t$95$1, t$95$2]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{Vef + \left(Ev + \left(EAccept - mu\right)\right)}{KbT}}}\\
t_1 := NdChar + t\_0\\
t_2 := \frac{NaChar}{2} - \frac{NdChar}{-1 - e^{\frac{EDonor - \left(\left(Ec - Vef\right) - mu\right)}{KbT}}}\\
\mathbf{if}\;NdChar \leq -1.12 \cdot 10^{+152}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;NdChar \leq -4.5 \cdot 10^{-110}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;NdChar \leq 8.5 \cdot 10^{-226}:\\
\;\;\;\;t\_0 + \frac{NdChar}{1 + \frac{EDonor}{KbT}}\\
\mathbf{elif}\;NdChar \leq 2.2 \cdot 10^{+97}:\\
\;\;\;\;t\_1\\
\mathbf{else}:\\
\;\;\;\;t\_2\\
\end{array}
\end{array}
if NdChar < -1.11999999999999995e152 or 2.2000000000000001e97 < NdChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 61.7%
if -1.11999999999999995e152 < NdChar < -4.5000000000000001e-110 or 8.4999999999999998e-226 < NdChar < 2.2000000000000001e97Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 52.9%
Taylor expanded in Ec around -inf 58.3%
mul-1-neg58.3%
*-commutative58.3%
distribute-rgt-neg-in58.3%
+-commutative58.3%
mul-1-neg58.3%
unsub-neg58.3%
associate-+r+58.3%
Simplified58.3%
Taylor expanded in Vef around inf 54.8%
Taylor expanded in Vef around 0 70.4%
if -4.5000000000000001e-110 < NdChar < 8.4999999999999998e-226Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 77.5%
Taylor expanded in Ec around -inf 77.5%
mul-1-neg77.5%
*-commutative77.5%
distribute-rgt-neg-in77.5%
+-commutative77.5%
mul-1-neg77.5%
unsub-neg77.5%
associate-+r+77.5%
Simplified77.5%
Taylor expanded in EDonor around inf 77.6%
Final simplification69.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 (+ NdChar t_0))
(t_2
(-
(/ NaChar 2.0)
(/ NdChar (- -1.0 (exp (/ (- EDonor (- (- Ec Vef) mu)) KbT)))))))
(if (<= NdChar -1.15e+152)
t_2
(if (<= NdChar -2.8e-183)
t_1
(if (<= NdChar 1.15e-52)
(+ t_0 (/ NdChar (+ 1.0 (/ Vef KbT))))
(if (<= NdChar 1.76e+96) t_1 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 = NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT)));
double t_1 = NdChar + t_0;
double t_2 = (NaChar / 2.0) - (NdChar / (-1.0 - exp(((EDonor - ((Ec - Vef) - mu)) / KbT))));
double tmp;
if (NdChar <= -1.15e+152) {
tmp = t_2;
} else if (NdChar <= -2.8e-183) {
tmp = t_1;
} else if (NdChar <= 1.15e-52) {
tmp = t_0 + (NdChar / (1.0 + (Vef / KbT)));
} else if (NdChar <= 1.76e+96) {
tmp = t_1;
} 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) :: tmp
t_0 = nachar / (1.0d0 + exp(((vef + (ev + (eaccept - mu))) / kbt)))
t_1 = ndchar + t_0
t_2 = (nachar / 2.0d0) - (ndchar / ((-1.0d0) - exp(((edonor - ((ec - vef) - mu)) / kbt))))
if (ndchar <= (-1.15d+152)) then
tmp = t_2
else if (ndchar <= (-2.8d-183)) then
tmp = t_1
else if (ndchar <= 1.15d-52) then
tmp = t_0 + (ndchar / (1.0d0 + (vef / kbt)))
else if (ndchar <= 1.76d+96) then
tmp = t_1
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 = NaChar / (1.0 + Math.exp(((Vef + (Ev + (EAccept - mu))) / KbT)));
double t_1 = NdChar + t_0;
double t_2 = (NaChar / 2.0) - (NdChar / (-1.0 - Math.exp(((EDonor - ((Ec - Vef) - mu)) / KbT))));
double tmp;
if (NdChar <= -1.15e+152) {
tmp = t_2;
} else if (NdChar <= -2.8e-183) {
tmp = t_1;
} else if (NdChar <= 1.15e-52) {
tmp = t_0 + (NdChar / (1.0 + (Vef / KbT)));
} else if (NdChar <= 1.76e+96) {
tmp = t_1;
} else {
tmp = t_2;
}
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 = NdChar + t_0 t_2 = (NaChar / 2.0) - (NdChar / (-1.0 - math.exp(((EDonor - ((Ec - Vef) - mu)) / KbT)))) tmp = 0 if NdChar <= -1.15e+152: tmp = t_2 elif NdChar <= -2.8e-183: tmp = t_1 elif NdChar <= 1.15e-52: tmp = t_0 + (NdChar / (1.0 + (Vef / KbT))) elif NdChar <= 1.76e+96: tmp = t_1 else: tmp = t_2 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(NdChar + t_0) t_2 = Float64(Float64(NaChar / 2.0) - Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(EDonor - Float64(Float64(Ec - Vef) - mu)) / KbT))))) tmp = 0.0 if (NdChar <= -1.15e+152) tmp = t_2; elseif (NdChar <= -2.8e-183) tmp = t_1; elseif (NdChar <= 1.15e-52) tmp = Float64(t_0 + Float64(NdChar / Float64(1.0 + Float64(Vef / KbT)))); elseif (NdChar <= 1.76e+96) tmp = t_1; else tmp = t_2; 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 = NdChar + t_0; t_2 = (NaChar / 2.0) - (NdChar / (-1.0 - exp(((EDonor - ((Ec - Vef) - mu)) / KbT)))); tmp = 0.0; if (NdChar <= -1.15e+152) tmp = t_2; elseif (NdChar <= -2.8e-183) tmp = t_1; elseif (NdChar <= 1.15e-52) tmp = t_0 + (NdChar / (1.0 + (Vef / KbT))); elseif (NdChar <= 1.76e+96) tmp = t_1; else tmp = t_2; 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[(NdChar + t$95$0), $MachinePrecision]}, Block[{t$95$2 = N[(N[(NaChar / 2.0), $MachinePrecision] - N[(NdChar / N[(-1.0 - N[Exp[N[(N[(EDonor - N[(N[(Ec - Vef), $MachinePrecision] - mu), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NdChar, -1.15e+152], t$95$2, If[LessEqual[NdChar, -2.8e-183], t$95$1, If[LessEqual[NdChar, 1.15e-52], N[(t$95$0 + N[(NdChar / N[(1.0 + N[(Vef / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NdChar, 1.76e+96], t$95$1, t$95$2]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{Vef + \left(Ev + \left(EAccept - mu\right)\right)}{KbT}}}\\
t_1 := NdChar + t\_0\\
t_2 := \frac{NaChar}{2} - \frac{NdChar}{-1 - e^{\frac{EDonor - \left(\left(Ec - Vef\right) - mu\right)}{KbT}}}\\
\mathbf{if}\;NdChar \leq -1.15 \cdot 10^{+152}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;NdChar \leq -2.8 \cdot 10^{-183}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;NdChar \leq 1.15 \cdot 10^{-52}:\\
\;\;\;\;t\_0 + \frac{NdChar}{1 + \frac{Vef}{KbT}}\\
\mathbf{elif}\;NdChar \leq 1.76 \cdot 10^{+96}:\\
\;\;\;\;t\_1\\
\mathbf{else}:\\
\;\;\;\;t\_2\\
\end{array}
\end{array}
if NdChar < -1.14999999999999993e152 or 1.7599999999999999e96 < NdChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 61.7%
if -1.14999999999999993e152 < NdChar < -2.79999999999999985e-183 or 1.14999999999999997e-52 < NdChar < 1.7599999999999999e96Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 52.6%
Taylor expanded in Ec around -inf 55.7%
mul-1-neg55.7%
*-commutative55.7%
distribute-rgt-neg-in55.7%
+-commutative55.7%
mul-1-neg55.7%
unsub-neg55.7%
associate-+r+55.7%
Simplified55.7%
Taylor expanded in Vef around inf 49.3%
Taylor expanded in Vef around 0 73.2%
if -2.79999999999999985e-183 < NdChar < 1.14999999999999997e-52Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 73.6%
Taylor expanded in Ec around -inf 77.5%
mul-1-neg77.5%
*-commutative77.5%
distribute-rgt-neg-in77.5%
+-commutative77.5%
mul-1-neg77.5%
unsub-neg77.5%
associate-+r+77.5%
Simplified77.5%
Taylor expanded in Vef around inf 79.4%
Final simplification71.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))))))
(if (<= KbT -4.6e+207)
(+ (/ NdChar (+ 1.0 (exp (/ mu KbT)))) (/ NaChar 2.0))
(if (<= KbT 4.8e+155) (+ NdChar t_0) (+ t_0 (/ NdChar 2.0))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT)));
double tmp;
if (KbT <= -4.6e+207) {
tmp = (NdChar / (1.0 + exp((mu / KbT)))) + (NaChar / 2.0);
} else if (KbT <= 4.8e+155) {
tmp = NdChar + t_0;
} else {
tmp = t_0 + (NdChar / 2.0);
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: tmp
t_0 = nachar / (1.0d0 + exp(((vef + (ev + (eaccept - mu))) / kbt)))
if (kbt <= (-4.6d+207)) then
tmp = (ndchar / (1.0d0 + exp((mu / kbt)))) + (nachar / 2.0d0)
else if (kbt <= 4.8d+155) then
tmp = ndchar + t_0
else
tmp = t_0 + (ndchar / 2.0d0)
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NaChar / (1.0 + Math.exp(((Vef + (Ev + (EAccept - mu))) / KbT)));
double tmp;
if (KbT <= -4.6e+207) {
tmp = (NdChar / (1.0 + Math.exp((mu / KbT)))) + (NaChar / 2.0);
} else if (KbT <= 4.8e+155) {
tmp = NdChar + t_0;
} else {
tmp = t_0 + (NdChar / 2.0);
}
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))) tmp = 0 if KbT <= -4.6e+207: tmp = (NdChar / (1.0 + math.exp((mu / KbT)))) + (NaChar / 2.0) elif KbT <= 4.8e+155: tmp = NdChar + t_0 else: tmp = t_0 + (NdChar / 2.0) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Ev + Float64(EAccept - mu))) / KbT)))) tmp = 0.0 if (KbT <= -4.6e+207) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(mu / KbT)))) + Float64(NaChar / 2.0)); elseif (KbT <= 4.8e+155) tmp = Float64(NdChar + t_0); else tmp = Float64(t_0 + Float64(NdChar / 2.0)); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT))); tmp = 0.0; if (KbT <= -4.6e+207) tmp = (NdChar / (1.0 + exp((mu / KbT)))) + (NaChar / 2.0); elseif (KbT <= 4.8e+155) tmp = NdChar + t_0; else tmp = t_0 + (NdChar / 2.0); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(Ev + N[(EAccept - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[KbT, -4.6e+207], N[(N[(NdChar / N[(1.0 + N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / 2.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[KbT, 4.8e+155], N[(NdChar + t$95$0), $MachinePrecision], N[(t$95$0 + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{Vef + \left(Ev + \left(EAccept - mu\right)\right)}{KbT}}}\\
\mathbf{if}\;KbT \leq -4.6 \cdot 10^{+207}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{mu}{KbT}}} + \frac{NaChar}{2}\\
\mathbf{elif}\;KbT \leq 4.8 \cdot 10^{+155}:\\
\;\;\;\;NdChar + t\_0\\
\mathbf{else}:\\
\;\;\;\;t\_0 + \frac{NdChar}{2}\\
\end{array}
\end{array}
if KbT < -4.59999999999999989e207Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 95.3%
Taylor expanded in KbT around inf 91.5%
if -4.59999999999999989e207 < KbT < 4.80000000000000042e155Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 45.6%
Taylor expanded in Ec around -inf 50.7%
mul-1-neg50.7%
*-commutative50.7%
distribute-rgt-neg-in50.7%
+-commutative50.7%
mul-1-neg50.7%
unsub-neg50.7%
associate-+r+50.7%
Simplified50.7%
Taylor expanded in Vef around inf 52.0%
Taylor expanded in Vef around 0 61.3%
if 4.80000000000000042e155 < KbT Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 84.1%
Taylor expanded in Vef around 0 80.1%
Final simplification66.8%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (<= KbT -1.55e+207)
(+ (/ NdChar (+ 1.0 (exp (/ mu KbT)))) (/ NaChar 2.0))
(if (<= KbT 7.5e+211)
(+ NdChar (/ NaChar (+ 1.0 (exp (/ (+ Vef (+ Ev (- EAccept mu))) KbT)))))
(+ (/ NaChar 2.0) (/ NdChar (+ 1.0 (exp (/ (- Ec) KbT))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (KbT <= -1.55e+207) {
tmp = (NdChar / (1.0 + exp((mu / KbT)))) + (NaChar / 2.0);
} else if (KbT <= 7.5e+211) {
tmp = NdChar + (NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT))));
} else {
tmp = (NaChar / 2.0) + (NdChar / (1.0 + exp((-Ec / KbT))));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if (kbt <= (-1.55d+207)) then
tmp = (ndchar / (1.0d0 + exp((mu / kbt)))) + (nachar / 2.0d0)
else if (kbt <= 7.5d+211) then
tmp = ndchar + (nachar / (1.0d0 + exp(((vef + (ev + (eaccept - mu))) / kbt))))
else
tmp = (nachar / 2.0d0) + (ndchar / (1.0d0 + exp((-ec / kbt))))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (KbT <= -1.55e+207) {
tmp = (NdChar / (1.0 + Math.exp((mu / KbT)))) + (NaChar / 2.0);
} else if (KbT <= 7.5e+211) {
tmp = NdChar + (NaChar / (1.0 + Math.exp(((Vef + (Ev + (EAccept - mu))) / KbT))));
} else {
tmp = (NaChar / 2.0) + (NdChar / (1.0 + Math.exp((-Ec / KbT))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if KbT <= -1.55e+207: tmp = (NdChar / (1.0 + math.exp((mu / KbT)))) + (NaChar / 2.0) elif KbT <= 7.5e+211: tmp = NdChar + (NaChar / (1.0 + math.exp(((Vef + (Ev + (EAccept - mu))) / KbT)))) else: tmp = (NaChar / 2.0) + (NdChar / (1.0 + math.exp((-Ec / KbT)))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (KbT <= -1.55e+207) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(mu / KbT)))) + Float64(NaChar / 2.0)); elseif (KbT <= 7.5e+211) tmp = Float64(NdChar + Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Ev + Float64(EAccept - mu))) / KbT))))); else tmp = Float64(Float64(NaChar / 2.0) + Float64(NdChar / Float64(1.0 + exp(Float64(Float64(-Ec) / KbT))))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (KbT <= -1.55e+207) tmp = (NdChar / (1.0 + exp((mu / KbT)))) + (NaChar / 2.0); elseif (KbT <= 7.5e+211) tmp = NdChar + (NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT)))); else tmp = (NaChar / 2.0) + (NdChar / (1.0 + exp((-Ec / KbT)))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[KbT, -1.55e+207], N[(N[(NdChar / N[(1.0 + N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / 2.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[KbT, 7.5e+211], N[(NdChar + N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(Ev + N[(EAccept - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar / 2.0), $MachinePrecision] + N[(NdChar / N[(1.0 + N[Exp[N[((-Ec) / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;KbT \leq -1.55 \cdot 10^{+207}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{mu}{KbT}}} + \frac{NaChar}{2}\\
\mathbf{elif}\;KbT \leq 7.5 \cdot 10^{+211}:\\
\;\;\;\;NdChar + \frac{NaChar}{1 + e^{\frac{Vef + \left(Ev + \left(EAccept - mu\right)\right)}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{2} + \frac{NdChar}{1 + e^{\frac{-Ec}{KbT}}}\\
\end{array}
\end{array}
if KbT < -1.5500000000000001e207Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 95.3%
Taylor expanded in KbT around inf 91.5%
if -1.5500000000000001e207 < KbT < 7.5e211Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 48.2%
Taylor expanded in Ec around -inf 52.8%
mul-1-neg52.8%
*-commutative52.8%
distribute-rgt-neg-in52.8%
+-commutative52.8%
mul-1-neg52.8%
unsub-neg52.8%
associate-+r+52.8%
Simplified52.8%
Taylor expanded in Vef around inf 53.0%
Taylor expanded in Vef around 0 61.5%
if 7.5e211 < KbT Initial program 99.9%
Simplified99.9%
Taylor expanded in KbT around inf 86.9%
Taylor expanded in Ec around inf 86.9%
associate-*r/86.9%
mul-1-neg86.9%
Simplified86.9%
Final simplification66.2%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (<= EDonor -4.2e+64)
(- (/ NaChar 2.0) (/ NdChar (- -1.0 (exp (/ EDonor KbT)))))
(if (<= EDonor -1.85e-140)
(-
(/
NaChar
(+
1.0
(- (+ 1.0 (+ (/ EAccept KbT) (+ (/ Vef KbT) (/ Ev KbT)))) (/ mu KbT))))
(/
NdChar
(+
-1.0
(*
Ec
(+
(/ 1.0 KbT)
(/ (- (- -1.0 (/ EDonor KbT)) (+ (/ mu KbT) (/ Vef KbT))) Ec))))))
(+ (/ NaChar 2.0) (/ NdChar (+ 1.0 (exp (/ (- Ec) KbT))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (EDonor <= -4.2e+64) {
tmp = (NaChar / 2.0) - (NdChar / (-1.0 - exp((EDonor / KbT))));
} else if (EDonor <= -1.85e-140) {
tmp = (NaChar / (1.0 + ((1.0 + ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) - (mu / KbT)))) - (NdChar / (-1.0 + (Ec * ((1.0 / KbT) + (((-1.0 - (EDonor / KbT)) - ((mu / KbT) + (Vef / KbT))) / Ec)))));
} else {
tmp = (NaChar / 2.0) + (NdChar / (1.0 + exp((-Ec / KbT))));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if (edonor <= (-4.2d+64)) then
tmp = (nachar / 2.0d0) - (ndchar / ((-1.0d0) - exp((edonor / kbt))))
else if (edonor <= (-1.85d-140)) then
tmp = (nachar / (1.0d0 + ((1.0d0 + ((eaccept / kbt) + ((vef / kbt) + (ev / kbt)))) - (mu / kbt)))) - (ndchar / ((-1.0d0) + (ec * ((1.0d0 / kbt) + ((((-1.0d0) - (edonor / kbt)) - ((mu / kbt) + (vef / kbt))) / ec)))))
else
tmp = (nachar / 2.0d0) + (ndchar / (1.0d0 + exp((-ec / kbt))))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (EDonor <= -4.2e+64) {
tmp = (NaChar / 2.0) - (NdChar / (-1.0 - Math.exp((EDonor / KbT))));
} else if (EDonor <= -1.85e-140) {
tmp = (NaChar / (1.0 + ((1.0 + ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) - (mu / KbT)))) - (NdChar / (-1.0 + (Ec * ((1.0 / KbT) + (((-1.0 - (EDonor / KbT)) - ((mu / KbT) + (Vef / KbT))) / Ec)))));
} else {
tmp = (NaChar / 2.0) + (NdChar / (1.0 + Math.exp((-Ec / KbT))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if EDonor <= -4.2e+64: tmp = (NaChar / 2.0) - (NdChar / (-1.0 - math.exp((EDonor / KbT)))) elif EDonor <= -1.85e-140: tmp = (NaChar / (1.0 + ((1.0 + ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) - (mu / KbT)))) - (NdChar / (-1.0 + (Ec * ((1.0 / KbT) + (((-1.0 - (EDonor / KbT)) - ((mu / KbT) + (Vef / KbT))) / Ec))))) else: tmp = (NaChar / 2.0) + (NdChar / (1.0 + math.exp((-Ec / KbT)))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (EDonor <= -4.2e+64) tmp = Float64(Float64(NaChar / 2.0) - Float64(NdChar / Float64(-1.0 - exp(Float64(EDonor / KbT))))); elseif (EDonor <= -1.85e-140) tmp = Float64(Float64(NaChar / Float64(1.0 + Float64(Float64(1.0 + Float64(Float64(EAccept / KbT) + Float64(Float64(Vef / KbT) + Float64(Ev / KbT)))) - Float64(mu / KbT)))) - Float64(NdChar / Float64(-1.0 + Float64(Ec * Float64(Float64(1.0 / KbT) + Float64(Float64(Float64(-1.0 - Float64(EDonor / KbT)) - Float64(Float64(mu / KbT) + Float64(Vef / KbT))) / Ec)))))); else tmp = Float64(Float64(NaChar / 2.0) + Float64(NdChar / Float64(1.0 + exp(Float64(Float64(-Ec) / KbT))))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (EDonor <= -4.2e+64) tmp = (NaChar / 2.0) - (NdChar / (-1.0 - exp((EDonor / KbT)))); elseif (EDonor <= -1.85e-140) tmp = (NaChar / (1.0 + ((1.0 + ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) - (mu / KbT)))) - (NdChar / (-1.0 + (Ec * ((1.0 / KbT) + (((-1.0 - (EDonor / KbT)) - ((mu / KbT) + (Vef / KbT))) / Ec))))); else tmp = (NaChar / 2.0) + (NdChar / (1.0 + exp((-Ec / KbT)))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[EDonor, -4.2e+64], N[(N[(NaChar / 2.0), $MachinePrecision] - N[(NdChar / N[(-1.0 - N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[EDonor, -1.85e-140], N[(N[(NaChar / N[(1.0 + N[(N[(1.0 + N[(N[(EAccept / KbT), $MachinePrecision] + N[(N[(Vef / KbT), $MachinePrecision] + N[(Ev / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(NdChar / N[(-1.0 + N[(Ec * N[(N[(1.0 / KbT), $MachinePrecision] + N[(N[(N[(-1.0 - N[(EDonor / KbT), $MachinePrecision]), $MachinePrecision] - N[(N[(mu / KbT), $MachinePrecision] + N[(Vef / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar / 2.0), $MachinePrecision] + N[(NdChar / N[(1.0 + N[Exp[N[((-Ec) / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;EDonor \leq -4.2 \cdot 10^{+64}:\\
\;\;\;\;\frac{NaChar}{2} - \frac{NdChar}{-1 - e^{\frac{EDonor}{KbT}}}\\
\mathbf{elif}\;EDonor \leq -1.85 \cdot 10^{-140}:\\
\;\;\;\;\frac{NaChar}{1 + \left(\left(1 + \left(\frac{EAccept}{KbT} + \left(\frac{Vef}{KbT} + \frac{Ev}{KbT}\right)\right)\right) - \frac{mu}{KbT}\right)} - \frac{NdChar}{-1 + Ec \cdot \left(\frac{1}{KbT} + \frac{\left(-1 - \frac{EDonor}{KbT}\right) - \left(\frac{mu}{KbT} + \frac{Vef}{KbT}\right)}{Ec}\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{2} + \frac{NdChar}{1 + e^{\frac{-Ec}{KbT}}}\\
\end{array}
\end{array}
if EDonor < -4.2000000000000001e64Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 37.4%
Taylor expanded in EDonor around inf 35.2%
if -4.2000000000000001e64 < EDonor < -1.84999999999999989e-140Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 61.6%
Taylor expanded in Ec around -inf 69.0%
mul-1-neg69.0%
*-commutative69.0%
distribute-rgt-neg-in69.0%
+-commutative69.0%
mul-1-neg69.0%
unsub-neg69.0%
associate-+r+69.0%
Simplified69.0%
Taylor expanded in KbT around inf 45.0%
if -1.84999999999999989e-140 < EDonor Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 53.5%
Taylor expanded in Ec around inf 45.0%
associate-*r/45.0%
mul-1-neg45.0%
Simplified45.0%
Final simplification43.0%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (if (or (<= NdChar -2.45e+30) (not (<= NdChar 3.1e-164))) (- (/ NaChar 2.0) (/ NdChar (- -1.0 (exp (/ EDonor KbT))))) (+ (/ NaChar (+ 1.0 (exp (/ Ev KbT)))) (/ NdChar 2.0))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NdChar <= -2.45e+30) || !(NdChar <= 3.1e-164)) {
tmp = (NaChar / 2.0) - (NdChar / (-1.0 - exp((EDonor / KbT))));
} else {
tmp = (NaChar / (1.0 + exp((Ev / KbT)))) + (NdChar / 2.0);
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if ((ndchar <= (-2.45d+30)) .or. (.not. (ndchar <= 3.1d-164))) then
tmp = (nachar / 2.0d0) - (ndchar / ((-1.0d0) - exp((edonor / kbt))))
else
tmp = (nachar / (1.0d0 + exp((ev / kbt)))) + (ndchar / 2.0d0)
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NdChar <= -2.45e+30) || !(NdChar <= 3.1e-164)) {
tmp = (NaChar / 2.0) - (NdChar / (-1.0 - Math.exp((EDonor / KbT))));
} else {
tmp = (NaChar / (1.0 + Math.exp((Ev / KbT)))) + (NdChar / 2.0);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if (NdChar <= -2.45e+30) or not (NdChar <= 3.1e-164): tmp = (NaChar / 2.0) - (NdChar / (-1.0 - math.exp((EDonor / KbT)))) else: tmp = (NaChar / (1.0 + math.exp((Ev / KbT)))) + (NdChar / 2.0) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if ((NdChar <= -2.45e+30) || !(NdChar <= 3.1e-164)) tmp = Float64(Float64(NaChar / 2.0) - Float64(NdChar / Float64(-1.0 - exp(Float64(EDonor / KbT))))); else tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT)))) + Float64(NdChar / 2.0)); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if ((NdChar <= -2.45e+30) || ~((NdChar <= 3.1e-164))) tmp = (NaChar / 2.0) - (NdChar / (-1.0 - exp((EDonor / KbT)))); else tmp = (NaChar / (1.0 + exp((Ev / KbT)))) + (NdChar / 2.0); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[Or[LessEqual[NdChar, -2.45e+30], N[Not[LessEqual[NdChar, 3.1e-164]], $MachinePrecision]], N[(N[(NaChar / 2.0), $MachinePrecision] - N[(NdChar / N[(-1.0 - N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NdChar \leq -2.45 \cdot 10^{+30} \lor \neg \left(NdChar \leq 3.1 \cdot 10^{-164}\right):\\
\;\;\;\;\frac{NaChar}{2} - \frac{NdChar}{-1 - e^{\frac{EDonor}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Ev}{KbT}}} + \frac{NdChar}{2}\\
\end{array}
\end{array}
if NdChar < -2.44999999999999992e30 or 3.1000000000000001e-164 < NdChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 55.8%
Taylor expanded in EDonor around inf 38.7%
if -2.44999999999999992e30 < NdChar < 3.1000000000000001e-164Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 62.9%
Taylor expanded in KbT around inf 41.2%
Final simplification39.7%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (if (or (<= NdChar -1.4e-33) (not (<= NdChar 3.5e-164))) (+ (/ NdChar (+ 1.0 (exp (/ Vef KbT)))) (/ NaChar 2.0)) (+ (/ NaChar (+ 1.0 (exp (/ Ev KbT)))) (/ NdChar 2.0))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NdChar <= -1.4e-33) || !(NdChar <= 3.5e-164)) {
tmp = (NdChar / (1.0 + exp((Vef / KbT)))) + (NaChar / 2.0);
} else {
tmp = (NaChar / (1.0 + exp((Ev / KbT)))) + (NdChar / 2.0);
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if ((ndchar <= (-1.4d-33)) .or. (.not. (ndchar <= 3.5d-164))) then
tmp = (ndchar / (1.0d0 + exp((vef / kbt)))) + (nachar / 2.0d0)
else
tmp = (nachar / (1.0d0 + exp((ev / kbt)))) + (ndchar / 2.0d0)
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NdChar <= -1.4e-33) || !(NdChar <= 3.5e-164)) {
tmp = (NdChar / (1.0 + Math.exp((Vef / KbT)))) + (NaChar / 2.0);
} else {
tmp = (NaChar / (1.0 + Math.exp((Ev / KbT)))) + (NdChar / 2.0);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if (NdChar <= -1.4e-33) or not (NdChar <= 3.5e-164): tmp = (NdChar / (1.0 + math.exp((Vef / KbT)))) + (NaChar / 2.0) else: tmp = (NaChar / (1.0 + math.exp((Ev / KbT)))) + (NdChar / 2.0) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if ((NdChar <= -1.4e-33) || !(NdChar <= 3.5e-164)) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Vef / KbT)))) + Float64(NaChar / 2.0)); else tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT)))) + Float64(NdChar / 2.0)); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if ((NdChar <= -1.4e-33) || ~((NdChar <= 3.5e-164))) tmp = (NdChar / (1.0 + exp((Vef / KbT)))) + (NaChar / 2.0); else tmp = (NaChar / (1.0 + exp((Ev / KbT)))) + (NdChar / 2.0); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[Or[LessEqual[NdChar, -1.4e-33], N[Not[LessEqual[NdChar, 3.5e-164]], $MachinePrecision]], N[(N[(NdChar / N[(1.0 + N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / 2.0), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NdChar \leq -1.4 \cdot 10^{-33} \lor \neg \left(NdChar \leq 3.5 \cdot 10^{-164}\right):\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{Vef}{KbT}}} + \frac{NaChar}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Ev}{KbT}}} + \frac{NdChar}{2}\\
\end{array}
\end{array}
if NdChar < -1.4e-33 or 3.5e-164 < NdChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 56.6%
Taylor expanded in Vef around inf 41.4%
if -1.4e-33 < NdChar < 3.5e-164Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 61.3%
Taylor expanded in KbT around inf 41.1%
Final simplification41.3%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (<= NdChar -5.3e-27)
(+ (/ NdChar (+ 1.0 (exp (/ Vef KbT)))) (/ NaChar 2.0))
(if (<= NdChar 4.8e-163)
(+ (/ NaChar (+ 1.0 (exp (/ Ev KbT)))) (/ NdChar 2.0))
(+ (/ NdChar (+ 1.0 (exp (/ mu 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 (NdChar <= -5.3e-27) {
tmp = (NdChar / (1.0 + exp((Vef / KbT)))) + (NaChar / 2.0);
} else if (NdChar <= 4.8e-163) {
tmp = (NaChar / (1.0 + exp((Ev / KbT)))) + (NdChar / 2.0);
} else {
tmp = (NdChar / (1.0 + exp((mu / 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 (ndchar <= (-5.3d-27)) then
tmp = (ndchar / (1.0d0 + exp((vef / kbt)))) + (nachar / 2.0d0)
else if (ndchar <= 4.8d-163) then
tmp = (nachar / (1.0d0 + exp((ev / kbt)))) + (ndchar / 2.0d0)
else
tmp = (ndchar / (1.0d0 + exp((mu / 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 (NdChar <= -5.3e-27) {
tmp = (NdChar / (1.0 + Math.exp((Vef / KbT)))) + (NaChar / 2.0);
} else if (NdChar <= 4.8e-163) {
tmp = (NaChar / (1.0 + Math.exp((Ev / KbT)))) + (NdChar / 2.0);
} else {
tmp = (NdChar / (1.0 + Math.exp((mu / KbT)))) + (NaChar / 2.0);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if NdChar <= -5.3e-27: tmp = (NdChar / (1.0 + math.exp((Vef / KbT)))) + (NaChar / 2.0) elif NdChar <= 4.8e-163: tmp = (NaChar / (1.0 + math.exp((Ev / KbT)))) + (NdChar / 2.0) else: tmp = (NdChar / (1.0 + math.exp((mu / KbT)))) + (NaChar / 2.0) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (NdChar <= -5.3e-27) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Vef / KbT)))) + Float64(NaChar / 2.0)); elseif (NdChar <= 4.8e-163) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT)))) + Float64(NdChar / 2.0)); else tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(mu / 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 (NdChar <= -5.3e-27) tmp = (NdChar / (1.0 + exp((Vef / KbT)))) + (NaChar / 2.0); elseif (NdChar <= 4.8e-163) tmp = (NaChar / (1.0 + exp((Ev / KbT)))) + (NdChar / 2.0); else tmp = (NdChar / (1.0 + exp((mu / KbT)))) + (NaChar / 2.0); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[NdChar, -5.3e-27], N[(N[(NdChar / N[(1.0 + N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / 2.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[NdChar, 4.8e-163], N[(N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar / N[(1.0 + N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / 2.0), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NdChar \leq -5.3 \cdot 10^{-27}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{Vef}{KbT}}} + \frac{NaChar}{2}\\
\mathbf{elif}\;NdChar \leq 4.8 \cdot 10^{-163}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Ev}{KbT}}} + \frac{NdChar}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{mu}{KbT}}} + \frac{NaChar}{2}\\
\end{array}
\end{array}
if NdChar < -5.30000000000000006e-27Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 60.9%
Taylor expanded in Vef around inf 44.6%
if -5.30000000000000006e-27 < NdChar < 4.8000000000000001e-163Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 60.7%
Taylor expanded in KbT around inf 40.7%
if 4.8000000000000001e-163 < NdChar Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 65.1%
Taylor expanded in KbT around inf 40.1%
Final simplification41.3%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (+ (/ NaChar (+ 1.0 (exp (/ Ev KbT)))) (/ NdChar 2.0)))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NaChar / (1.0 + exp((Ev / KbT)))) + (NdChar / 2.0);
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
code = (nachar / (1.0d0 + exp((ev / kbt)))) + (ndchar / 2.0d0)
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NaChar / (1.0 + Math.exp((Ev / KbT)))) + (NdChar / 2.0);
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return (NaChar / (1.0 + math.exp((Ev / KbT)))) + (NdChar / 2.0)
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT)))) + Float64(NdChar / 2.0)) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = (NaChar / (1.0 + exp((Ev / KbT)))) + (NdChar / 2.0); end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{NaChar}{1 + e^{\frac{Ev}{KbT}}} + \frac{NdChar}{2}
\end{array}
Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 71.5%
Taylor expanded in KbT around inf 37.0%
Final simplification37.0%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (+ 2.0 (/ EDonor KbT)))
(t_1
(/
NaChar
(-
(+ 2.0 (+ (/ EAccept KbT) (+ (/ Vef KbT) (/ Ev KbT))))
(/ mu KbT)))))
(if (<= KbT -0.32)
(+ (/ NaChar 2.0) (/ NdChar t_0))
(if (<= KbT 6e+156)
(+ (/ NdChar (+ 1.0 (/ Vef KbT))) t_1)
(+ t_1 (/ NdChar (- (+ (/ Vef KbT) t_0) (/ Ec KbT))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = 2.0 + (EDonor / KbT);
double t_1 = NaChar / ((2.0 + ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) - (mu / KbT));
double tmp;
if (KbT <= -0.32) {
tmp = (NaChar / 2.0) + (NdChar / t_0);
} else if (KbT <= 6e+156) {
tmp = (NdChar / (1.0 + (Vef / KbT))) + t_1;
} else {
tmp = t_1 + (NdChar / (((Vef / KbT) + t_0) - (Ec / KbT)));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = 2.0d0 + (edonor / kbt)
t_1 = nachar / ((2.0d0 + ((eaccept / kbt) + ((vef / kbt) + (ev / kbt)))) - (mu / kbt))
if (kbt <= (-0.32d0)) then
tmp = (nachar / 2.0d0) + (ndchar / t_0)
else if (kbt <= 6d+156) then
tmp = (ndchar / (1.0d0 + (vef / kbt))) + t_1
else
tmp = t_1 + (ndchar / (((vef / kbt) + t_0) - (ec / kbt)))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = 2.0 + (EDonor / KbT);
double t_1 = NaChar / ((2.0 + ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) - (mu / KbT));
double tmp;
if (KbT <= -0.32) {
tmp = (NaChar / 2.0) + (NdChar / t_0);
} else if (KbT <= 6e+156) {
tmp = (NdChar / (1.0 + (Vef / KbT))) + t_1;
} else {
tmp = t_1 + (NdChar / (((Vef / KbT) + t_0) - (Ec / KbT)));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = 2.0 + (EDonor / KbT) t_1 = NaChar / ((2.0 + ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) - (mu / KbT)) tmp = 0 if KbT <= -0.32: tmp = (NaChar / 2.0) + (NdChar / t_0) elif KbT <= 6e+156: tmp = (NdChar / (1.0 + (Vef / KbT))) + t_1 else: tmp = t_1 + (NdChar / (((Vef / KbT) + t_0) - (Ec / KbT))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(2.0 + Float64(EDonor / KbT)) t_1 = Float64(NaChar / Float64(Float64(2.0 + Float64(Float64(EAccept / KbT) + Float64(Float64(Vef / KbT) + Float64(Ev / KbT)))) - Float64(mu / KbT))) tmp = 0.0 if (KbT <= -0.32) tmp = Float64(Float64(NaChar / 2.0) + Float64(NdChar / t_0)); elseif (KbT <= 6e+156) tmp = Float64(Float64(NdChar / Float64(1.0 + Float64(Vef / KbT))) + t_1); else tmp = Float64(t_1 + Float64(NdChar / Float64(Float64(Float64(Vef / KbT) + t_0) - Float64(Ec / KbT)))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = 2.0 + (EDonor / KbT); t_1 = NaChar / ((2.0 + ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) - (mu / KbT)); tmp = 0.0; if (KbT <= -0.32) tmp = (NaChar / 2.0) + (NdChar / t_0); elseif (KbT <= 6e+156) tmp = (NdChar / (1.0 + (Vef / KbT))) + t_1; else tmp = t_1 + (NdChar / (((Vef / KbT) + t_0) - (Ec / KbT))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(2.0 + N[(EDonor / KbT), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(NaChar / N[(N[(2.0 + N[(N[(EAccept / KbT), $MachinePrecision] + N[(N[(Vef / KbT), $MachinePrecision] + N[(Ev / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[KbT, -0.32], N[(N[(NaChar / 2.0), $MachinePrecision] + N[(NdChar / t$95$0), $MachinePrecision]), $MachinePrecision], If[LessEqual[KbT, 6e+156], N[(N[(NdChar / N[(1.0 + N[(Vef / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + t$95$1), $MachinePrecision], N[(t$95$1 + N[(NdChar / N[(N[(N[(Vef / KbT), $MachinePrecision] + t$95$0), $MachinePrecision] - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := 2 + \frac{EDonor}{KbT}\\
t_1 := \frac{NaChar}{\left(2 + \left(\frac{EAccept}{KbT} + \left(\frac{Vef}{KbT} + \frac{Ev}{KbT}\right)\right)\right) - \frac{mu}{KbT}}\\
\mathbf{if}\;KbT \leq -0.32:\\
\;\;\;\;\frac{NaChar}{2} + \frac{NdChar}{t\_0}\\
\mathbf{elif}\;KbT \leq 6 \cdot 10^{+156}:\\
\;\;\;\;\frac{NdChar}{1 + \frac{Vef}{KbT}} + t\_1\\
\mathbf{else}:\\
\;\;\;\;t\_1 + \frac{NdChar}{\left(\frac{Vef}{KbT} + t\_0\right) - \frac{Ec}{KbT}}\\
\end{array}
\end{array}
if KbT < -0.320000000000000007Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 57.4%
Taylor expanded in EDonor around inf 49.8%
Taylor expanded in EDonor around 0 47.4%
if -0.320000000000000007 < KbT < 5.9999999999999999e156Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 41.4%
Taylor expanded in Ec around -inf 48.1%
mul-1-neg48.1%
*-commutative48.1%
distribute-rgt-neg-in48.1%
+-commutative48.1%
mul-1-neg48.1%
unsub-neg48.1%
associate-+r+48.1%
Simplified48.1%
Taylor expanded in Vef around inf 51.3%
Taylor expanded in KbT around inf 23.7%
if 5.9999999999999999e156 < KbT Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 81.0%
Taylor expanded in mu around 0 81.4%
associate-+r+81.4%
Simplified81.4%
Taylor expanded in KbT around inf 66.8%
Final simplification36.9%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (<= KbT -0.94)
(+ (/ NaChar 2.0) (/ NdChar (+ 2.0 (/ EDonor KbT))))
(if (<= KbT 9.8e+151)
(+
(/ NdChar (+ 1.0 (/ Vef KbT)))
(/
NaChar
(- (+ 2.0 (+ (/ EAccept KbT) (+ (/ Vef KbT) (/ Ev KbT)))) (/ mu KbT))))
(+ (/ NaChar 2.0) (/ NdChar 2.0)))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (KbT <= -0.94) {
tmp = (NaChar / 2.0) + (NdChar / (2.0 + (EDonor / KbT)));
} else if (KbT <= 9.8e+151) {
tmp = (NdChar / (1.0 + (Vef / KbT))) + (NaChar / ((2.0 + ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) - (mu / KbT)));
} else {
tmp = (NaChar / 2.0) + (NdChar / 2.0);
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if (kbt <= (-0.94d0)) then
tmp = (nachar / 2.0d0) + (ndchar / (2.0d0 + (edonor / kbt)))
else if (kbt <= 9.8d+151) then
tmp = (ndchar / (1.0d0 + (vef / kbt))) + (nachar / ((2.0d0 + ((eaccept / kbt) + ((vef / kbt) + (ev / kbt)))) - (mu / kbt)))
else
tmp = (nachar / 2.0d0) + (ndchar / 2.0d0)
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (KbT <= -0.94) {
tmp = (NaChar / 2.0) + (NdChar / (2.0 + (EDonor / KbT)));
} else if (KbT <= 9.8e+151) {
tmp = (NdChar / (1.0 + (Vef / KbT))) + (NaChar / ((2.0 + ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) - (mu / KbT)));
} else {
tmp = (NaChar / 2.0) + (NdChar / 2.0);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if KbT <= -0.94: tmp = (NaChar / 2.0) + (NdChar / (2.0 + (EDonor / KbT))) elif KbT <= 9.8e+151: tmp = (NdChar / (1.0 + (Vef / KbT))) + (NaChar / ((2.0 + ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) - (mu / KbT))) else: tmp = (NaChar / 2.0) + (NdChar / 2.0) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (KbT <= -0.94) tmp = Float64(Float64(NaChar / 2.0) + Float64(NdChar / Float64(2.0 + Float64(EDonor / KbT)))); elseif (KbT <= 9.8e+151) tmp = Float64(Float64(NdChar / Float64(1.0 + Float64(Vef / KbT))) + Float64(NaChar / Float64(Float64(2.0 + Float64(Float64(EAccept / KbT) + Float64(Float64(Vef / KbT) + Float64(Ev / KbT)))) - Float64(mu / KbT)))); else tmp = Float64(Float64(NaChar / 2.0) + Float64(NdChar / 2.0)); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (KbT <= -0.94) tmp = (NaChar / 2.0) + (NdChar / (2.0 + (EDonor / KbT))); elseif (KbT <= 9.8e+151) tmp = (NdChar / (1.0 + (Vef / KbT))) + (NaChar / ((2.0 + ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) - (mu / KbT))); else tmp = (NaChar / 2.0) + (NdChar / 2.0); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[KbT, -0.94], N[(N[(NaChar / 2.0), $MachinePrecision] + N[(NdChar / N[(2.0 + N[(EDonor / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[KbT, 9.8e+151], N[(N[(NdChar / N[(1.0 + N[(Vef / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(N[(2.0 + N[(N[(EAccept / KbT), $MachinePrecision] + N[(N[(Vef / KbT), $MachinePrecision] + N[(Ev / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar / 2.0), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;KbT \leq -0.94:\\
\;\;\;\;\frac{NaChar}{2} + \frac{NdChar}{2 + \frac{EDonor}{KbT}}\\
\mathbf{elif}\;KbT \leq 9.8 \cdot 10^{+151}:\\
\;\;\;\;\frac{NdChar}{1 + \frac{Vef}{KbT}} + \frac{NaChar}{\left(2 + \left(\frac{EAccept}{KbT} + \left(\frac{Vef}{KbT} + \frac{Ev}{KbT}\right)\right)\right) - \frac{mu}{KbT}}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{2} + \frac{NdChar}{2}\\
\end{array}
\end{array}
if KbT < -0.93999999999999995Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 57.4%
Taylor expanded in EDonor around inf 49.8%
Taylor expanded in EDonor around 0 47.4%
if -0.93999999999999995 < KbT < 9.7999999999999998e151Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 41.4%
Taylor expanded in Ec around -inf 48.1%
mul-1-neg48.1%
*-commutative48.1%
distribute-rgt-neg-in48.1%
+-commutative48.1%
mul-1-neg48.1%
unsub-neg48.1%
associate-+r+48.1%
Simplified48.1%
Taylor expanded in Vef around inf 51.3%
Taylor expanded in KbT around inf 23.7%
if 9.7999999999999998e151 < KbT Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 74.2%
Taylor expanded in KbT around inf 65.4%
Final simplification36.7%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (if (or (<= KbT -9.2e+71) (not (<= KbT 1.36e+101))) (+ (/ NaChar 2.0) (/ NdChar 2.0)) (+ (/ NdChar (+ 1.0 (/ Vef 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 <= -9.2e+71) || !(KbT <= 1.36e+101)) {
tmp = (NaChar / 2.0) + (NdChar / 2.0);
} else {
tmp = (NdChar / (1.0 + (Vef / 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 <= (-9.2d+71)) .or. (.not. (kbt <= 1.36d+101))) then
tmp = (nachar / 2.0d0) + (ndchar / 2.0d0)
else
tmp = (ndchar / (1.0d0 + (vef / 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 <= -9.2e+71) || !(KbT <= 1.36e+101)) {
tmp = (NaChar / 2.0) + (NdChar / 2.0);
} else {
tmp = (NdChar / (1.0 + (Vef / KbT))) + (NaChar / 2.0);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if (KbT <= -9.2e+71) or not (KbT <= 1.36e+101): tmp = (NaChar / 2.0) + (NdChar / 2.0) else: tmp = (NdChar / (1.0 + (Vef / KbT))) + (NaChar / 2.0) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if ((KbT <= -9.2e+71) || !(KbT <= 1.36e+101)) tmp = Float64(Float64(NaChar / 2.0) + Float64(NdChar / 2.0)); else tmp = Float64(Float64(NdChar / Float64(1.0 + Float64(Vef / 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 <= -9.2e+71) || ~((KbT <= 1.36e+101))) tmp = (NaChar / 2.0) + (NdChar / 2.0); else tmp = (NdChar / (1.0 + (Vef / KbT))) + (NaChar / 2.0); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[Or[LessEqual[KbT, -9.2e+71], N[Not[LessEqual[KbT, 1.36e+101]], $MachinePrecision]], N[(N[(NaChar / 2.0), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar / N[(1.0 + N[(Vef / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / 2.0), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;KbT \leq -9.2 \cdot 10^{+71} \lor \neg \left(KbT \leq 1.36 \cdot 10^{+101}\right):\\
\;\;\;\;\frac{NaChar}{2} + \frac{NdChar}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{1 + \frac{Vef}{KbT}} + \frac{NaChar}{2}\\
\end{array}
\end{array}
if KbT < -9.200000000000001e71 or 1.35999999999999998e101 < KbT Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 70.2%
Taylor expanded in KbT around inf 59.7%
if -9.200000000000001e71 < KbT < 1.35999999999999998e101Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 43.8%
Taylor expanded in Ec around -inf 49.5%
mul-1-neg49.5%
*-commutative49.5%
distribute-rgt-neg-in49.5%
+-commutative49.5%
mul-1-neg49.5%
unsub-neg49.5%
associate-+r+49.5%
Simplified49.5%
Taylor expanded in Vef around inf 51.2%
Taylor expanded in KbT around inf 16.1%
Final simplification33.3%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (<= KbT -1.15e+71)
(+ (/ NaChar 2.0) (/ NdChar (+ 2.0 (/ EDonor KbT))))
(if (<= KbT 7.2e+99)
(+ (/ NdChar (+ 1.0 (/ Vef KbT))) (/ NaChar 2.0))
(+ (/ NaChar 2.0) (/ NdChar 2.0)))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (KbT <= -1.15e+71) {
tmp = (NaChar / 2.0) + (NdChar / (2.0 + (EDonor / KbT)));
} else if (KbT <= 7.2e+99) {
tmp = (NdChar / (1.0 + (Vef / KbT))) + (NaChar / 2.0);
} else {
tmp = (NaChar / 2.0) + (NdChar / 2.0);
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if (kbt <= (-1.15d+71)) then
tmp = (nachar / 2.0d0) + (ndchar / (2.0d0 + (edonor / kbt)))
else if (kbt <= 7.2d+99) then
tmp = (ndchar / (1.0d0 + (vef / kbt))) + (nachar / 2.0d0)
else
tmp = (nachar / 2.0d0) + (ndchar / 2.0d0)
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (KbT <= -1.15e+71) {
tmp = (NaChar / 2.0) + (NdChar / (2.0 + (EDonor / KbT)));
} else if (KbT <= 7.2e+99) {
tmp = (NdChar / (1.0 + (Vef / KbT))) + (NaChar / 2.0);
} else {
tmp = (NaChar / 2.0) + (NdChar / 2.0);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if KbT <= -1.15e+71: tmp = (NaChar / 2.0) + (NdChar / (2.0 + (EDonor / KbT))) elif KbT <= 7.2e+99: tmp = (NdChar / (1.0 + (Vef / KbT))) + (NaChar / 2.0) else: tmp = (NaChar / 2.0) + (NdChar / 2.0) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (KbT <= -1.15e+71) tmp = Float64(Float64(NaChar / 2.0) + Float64(NdChar / Float64(2.0 + Float64(EDonor / KbT)))); elseif (KbT <= 7.2e+99) tmp = Float64(Float64(NdChar / Float64(1.0 + Float64(Vef / KbT))) + Float64(NaChar / 2.0)); else tmp = Float64(Float64(NaChar / 2.0) + Float64(NdChar / 2.0)); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (KbT <= -1.15e+71) tmp = (NaChar / 2.0) + (NdChar / (2.0 + (EDonor / KbT))); elseif (KbT <= 7.2e+99) tmp = (NdChar / (1.0 + (Vef / KbT))) + (NaChar / 2.0); else tmp = (NaChar / 2.0) + (NdChar / 2.0); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[KbT, -1.15e+71], N[(N[(NaChar / 2.0), $MachinePrecision] + N[(NdChar / N[(2.0 + N[(EDonor / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[KbT, 7.2e+99], N[(N[(NdChar / N[(1.0 + N[(Vef / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / 2.0), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar / 2.0), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;KbT \leq -1.15 \cdot 10^{+71}:\\
\;\;\;\;\frac{NaChar}{2} + \frac{NdChar}{2 + \frac{EDonor}{KbT}}\\
\mathbf{elif}\;KbT \leq 7.2 \cdot 10^{+99}:\\
\;\;\;\;\frac{NdChar}{1 + \frac{Vef}{KbT}} + \frac{NaChar}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{2} + \frac{NdChar}{2}\\
\end{array}
\end{array}
if KbT < -1.1500000000000001e71Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 70.0%
Taylor expanded in EDonor around inf 59.8%
Taylor expanded in EDonor around 0 59.6%
if -1.1500000000000001e71 < KbT < 7.2000000000000003e99Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 43.8%
Taylor expanded in Ec around -inf 49.5%
mul-1-neg49.5%
*-commutative49.5%
distribute-rgt-neg-in49.5%
+-commutative49.5%
mul-1-neg49.5%
unsub-neg49.5%
associate-+r+49.5%
Simplified49.5%
Taylor expanded in Vef around inf 51.2%
Taylor expanded in KbT around inf 16.1%
if 7.2000000000000003e99 < KbT Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 70.3%
Taylor expanded in KbT around inf 60.0%
Final simplification33.3%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (+ (/ NaChar 2.0) (/ NdChar 2.0)))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NaChar / 2.0) + (NdChar / 2.0);
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
code = (nachar / 2.0d0) + (ndchar / 2.0d0)
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NaChar / 2.0) + (NdChar / 2.0);
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return (NaChar / 2.0) + (NdChar / 2.0)
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(Float64(NaChar / 2.0) + Float64(NdChar / 2.0)) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = (NaChar / 2.0) + (NdChar / 2.0); end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(N[(NaChar / 2.0), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{NaChar}{2} + \frac{NdChar}{2}
\end{array}
Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 48.5%
Taylor expanded in KbT around inf 30.1%
Final simplification30.1%
herbie shell --seed 2024078
(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))))))