
(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 28 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (+ (/ NdChar (+ 1.0 (exp (/ (- (- (- (- Ec Vef) EDonor) mu)) KbT)))) (/ NaChar (+ 1.0 (exp (/ (+ (+ (+ Ev Vef) EAccept) (- mu)) KbT))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NdChar / (1.0 + exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + exp(((((Ev + Vef) + EAccept) + -mu) / KbT))));
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
code = (ndchar / (1.0d0 + exp((-(((ec - vef) - edonor) - mu) / kbt)))) + (nachar / (1.0d0 + exp(((((ev + vef) + eaccept) + -mu) / kbt))))
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NdChar / (1.0 + Math.exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + Math.exp(((((Ev + Vef) + EAccept) + -mu) / KbT))));
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return (NdChar / (1.0 + math.exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + math.exp(((((Ev + Vef) + EAccept) + -mu) / KbT))))
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(-Float64(Float64(Float64(Ec - Vef) - EDonor) - mu)) / KbT)))) + Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(Float64(Ev + Vef) + EAccept) + Float64(-mu)) / KbT))))) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = (NdChar / (1.0 + exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + exp(((((Ev + Vef) + EAccept) + -mu) / KbT)))); end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(N[(NdChar / N[(1.0 + N[Exp[N[((-N[(N[(N[(Ec - Vef), $MachinePrecision] - EDonor), $MachinePrecision] - mu), $MachinePrecision]) / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Exp[N[(N[(N[(N[(Ev + Vef), $MachinePrecision] + EAccept), $MachinePrecision] + (-mu)), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{NdChar}{1 + e^{\frac{-\left(\left(\left(Ec - Vef\right) - EDonor\right) - mu\right)}{KbT}}} + \frac{NaChar}{1 + e^{\frac{\left(\left(Ev + Vef\right) + EAccept\right) + \left(-mu\right)}{KbT}}}
\end{array}
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (+ (/ NdChar (+ 1.0 (exp (/ (- EDonor (- (- Ec Vef) mu)) KbT)))) (/ NaChar (+ 1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NdChar / (1.0 + exp(((EDonor - ((Ec - Vef) - mu)) / KbT)))) + (NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT))));
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
code = (ndchar / (1.0d0 + exp(((edonor - ((ec - vef) - mu)) / kbt)))) + (nachar / (1.0d0 + exp(((vef - ((mu - eaccept) - ev)) / kbt))))
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NdChar / (1.0 + Math.exp(((EDonor - ((Ec - Vef) - mu)) / KbT)))) + (NaChar / (1.0 + Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT))));
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return (NdChar / (1.0 + math.exp(((EDonor - ((Ec - Vef) - mu)) / KbT)))) + (NaChar / (1.0 + math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT))))
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(EDonor - Float64(Float64(Ec - Vef) - mu)) / KbT)))) + Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT))))) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = (NdChar / (1.0 + exp(((EDonor - ((Ec - Vef) - mu)) / KbT)))) + (NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))); end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := 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[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{NdChar}{1 + e^{\frac{EDonor - \left(\left(Ec - Vef\right) - mu\right)}{KbT}}} + \frac{NaChar}{1 + e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\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
(+
(/ NdChar (+ 1.0 (exp (/ Vef KbT))))
(/ NaChar (+ 1.0 (exp (/ (- (+ Vef Ev) mu) KbT))))))
(t_1 (/ NaChar (+ 1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT)))))
(t_2 (+ t_1 (/ NdChar (+ 1.0 (exp (/ EDonor KbT)))))))
(if (<= EDonor -3e+68)
t_2
(if (<= EDonor -1.5e-125)
t_0
(if (<= EDonor -1.85e-224)
(+
t_1
(/
NdChar
(-
(-
2.0
(*
Vef
(+
(/ -1.0 KbT)
(* EDonor (/ (- (/ -1.0 KbT) (/ mu (* EDonor KbT))) Vef)))))
(/ Ec KbT))))
(if (<= EDonor 1.8e-5) t_0 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 = (NdChar / (1.0 + exp((Vef / KbT)))) + (NaChar / (1.0 + exp((((Vef + Ev) - mu) / KbT))));
double t_1 = NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)));
double t_2 = t_1 + (NdChar / (1.0 + exp((EDonor / KbT))));
double tmp;
if (EDonor <= -3e+68) {
tmp = t_2;
} else if (EDonor <= -1.5e-125) {
tmp = t_0;
} else if (EDonor <= -1.85e-224) {
tmp = t_1 + (NdChar / ((2.0 - (Vef * ((-1.0 / KbT) + (EDonor * (((-1.0 / KbT) - (mu / (EDonor * KbT))) / Vef))))) - (Ec / KbT)));
} else if (EDonor <= 1.8e-5) {
tmp = t_0;
} 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 = (ndchar / (1.0d0 + exp((vef / kbt)))) + (nachar / (1.0d0 + exp((((vef + ev) - mu) / kbt))))
t_1 = nachar / (1.0d0 + exp(((vef - ((mu - eaccept) - ev)) / kbt)))
t_2 = t_1 + (ndchar / (1.0d0 + exp((edonor / kbt))))
if (edonor <= (-3d+68)) then
tmp = t_2
else if (edonor <= (-1.5d-125)) then
tmp = t_0
else if (edonor <= (-1.85d-224)) then
tmp = t_1 + (ndchar / ((2.0d0 - (vef * (((-1.0d0) / kbt) + (edonor * ((((-1.0d0) / kbt) - (mu / (edonor * kbt))) / vef))))) - (ec / kbt)))
else if (edonor <= 1.8d-5) then
tmp = t_0
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 = (NdChar / (1.0 + Math.exp((Vef / KbT)))) + (NaChar / (1.0 + Math.exp((((Vef + Ev) - mu) / KbT))));
double t_1 = NaChar / (1.0 + Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)));
double t_2 = t_1 + (NdChar / (1.0 + Math.exp((EDonor / KbT))));
double tmp;
if (EDonor <= -3e+68) {
tmp = t_2;
} else if (EDonor <= -1.5e-125) {
tmp = t_0;
} else if (EDonor <= -1.85e-224) {
tmp = t_1 + (NdChar / ((2.0 - (Vef * ((-1.0 / KbT) + (EDonor * (((-1.0 / KbT) - (mu / (EDonor * KbT))) / Vef))))) - (Ec / KbT)));
} else if (EDonor <= 1.8e-5) {
tmp = t_0;
} else {
tmp = t_2;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = (NdChar / (1.0 + math.exp((Vef / KbT)))) + (NaChar / (1.0 + math.exp((((Vef + Ev) - mu) / KbT)))) t_1 = NaChar / (1.0 + math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT))) t_2 = t_1 + (NdChar / (1.0 + math.exp((EDonor / KbT)))) tmp = 0 if EDonor <= -3e+68: tmp = t_2 elif EDonor <= -1.5e-125: tmp = t_0 elif EDonor <= -1.85e-224: tmp = t_1 + (NdChar / ((2.0 - (Vef * ((-1.0 / KbT) + (EDonor * (((-1.0 / KbT) - (mu / (EDonor * KbT))) / Vef))))) - (Ec / KbT))) elif EDonor <= 1.8e-5: tmp = t_0 else: tmp = t_2 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Vef / KbT)))) + Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(Vef + Ev) - mu) / KbT))))) t_1 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT)))) t_2 = Float64(t_1 + Float64(NdChar / Float64(1.0 + exp(Float64(EDonor / KbT))))) tmp = 0.0 if (EDonor <= -3e+68) tmp = t_2; elseif (EDonor <= -1.5e-125) tmp = t_0; elseif (EDonor <= -1.85e-224) tmp = Float64(t_1 + Float64(NdChar / Float64(Float64(2.0 - Float64(Vef * Float64(Float64(-1.0 / KbT) + Float64(EDonor * Float64(Float64(Float64(-1.0 / KbT) - Float64(mu / Float64(EDonor * KbT))) / Vef))))) - Float64(Ec / KbT)))); elseif (EDonor <= 1.8e-5) tmp = t_0; else tmp = t_2; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = (NdChar / (1.0 + exp((Vef / KbT)))) + (NaChar / (1.0 + exp((((Vef + Ev) - mu) / KbT)))); t_1 = NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT))); t_2 = t_1 + (NdChar / (1.0 + exp((EDonor / KbT)))); tmp = 0.0; if (EDonor <= -3e+68) tmp = t_2; elseif (EDonor <= -1.5e-125) tmp = t_0; elseif (EDonor <= -1.85e-224) tmp = t_1 + (NdChar / ((2.0 - (Vef * ((-1.0 / KbT) + (EDonor * (((-1.0 / KbT) - (mu / (EDonor * KbT))) / Vef))))) - (Ec / KbT))); elseif (EDonor <= 1.8e-5) tmp = t_0; else tmp = t_2; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(NdChar / N[(1.0 + N[Exp[N[(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]}, Block[{t$95$1 = N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(t$95$1 + N[(NdChar / N[(1.0 + N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[EDonor, -3e+68], t$95$2, If[LessEqual[EDonor, -1.5e-125], t$95$0, If[LessEqual[EDonor, -1.85e-224], N[(t$95$1 + N[(NdChar / N[(N[(2.0 - N[(Vef * N[(N[(-1.0 / KbT), $MachinePrecision] + N[(EDonor * N[(N[(N[(-1.0 / KbT), $MachinePrecision] - N[(mu / N[(EDonor * KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / Vef), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[EDonor, 1.8e-5], t$95$0, t$95$2]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{1 + e^{\frac{Vef}{KbT}}} + \frac{NaChar}{1 + e^{\frac{\left(Vef + Ev\right) - mu}{KbT}}}\\
t_1 := \frac{NaChar}{1 + e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}}\\
t_2 := t\_1 + \frac{NdChar}{1 + e^{\frac{EDonor}{KbT}}}\\
\mathbf{if}\;EDonor \leq -3 \cdot 10^{+68}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;EDonor \leq -1.5 \cdot 10^{-125}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;EDonor \leq -1.85 \cdot 10^{-224}:\\
\;\;\;\;t\_1 + \frac{NdChar}{\left(2 - Vef \cdot \left(\frac{-1}{KbT} + EDonor \cdot \frac{\frac{-1}{KbT} - \frac{mu}{EDonor \cdot KbT}}{Vef}\right)\right) - \frac{Ec}{KbT}}\\
\mathbf{elif}\;EDonor \leq 1.8 \cdot 10^{-5}:\\
\;\;\;\;t\_0\\
\mathbf{else}:\\
\;\;\;\;t\_2\\
\end{array}
\end{array}
if EDonor < -3.0000000000000002e68 or 1.80000000000000005e-5 < EDonor Initial program 100.0%
Simplified100.0%
Taylor expanded in EDonor around inf 89.0%
if -3.0000000000000002e68 < EDonor < -1.49999999999999995e-125 or -1.8500000000000001e-224 < EDonor < 1.80000000000000005e-5Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 85.3%
Taylor expanded in EAccept around 0 80.6%
if -1.49999999999999995e-125 < EDonor < -1.8500000000000001e-224Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 67.6%
Taylor expanded in EDonor around inf 58.7%
associate-/r*63.0%
associate-/r*67.2%
Simplified67.2%
Taylor expanded in Vef around inf 71.5%
associate-/l*75.6%
Simplified75.6%
Final simplification83.8%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NaChar (+ 1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT))))))
(if (or (<= EDonor -2.8e+113) (not (<= EDonor 4.2e+54)))
(+ t_0 (/ NdChar (+ 1.0 (exp (/ EDonor 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 - ((mu - EAccept) - Ev)) / KbT)));
double tmp;
if ((EDonor <= -2.8e+113) || !(EDonor <= 4.2e+54)) {
tmp = t_0 + (NdChar / (1.0 + exp((EDonor / 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 - ((mu - eaccept) - ev)) / kbt)))
if ((edonor <= (-2.8d+113)) .or. (.not. (edonor <= 4.2d+54))) then
tmp = t_0 + (ndchar / (1.0d0 + exp((edonor / 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 - ((mu - EAccept) - Ev)) / KbT)));
double tmp;
if ((EDonor <= -2.8e+113) || !(EDonor <= 4.2e+54)) {
tmp = t_0 + (NdChar / (1.0 + Math.exp((EDonor / 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 - ((mu - EAccept) - Ev)) / KbT))) tmp = 0 if (EDonor <= -2.8e+113) or not (EDonor <= 4.2e+54): tmp = t_0 + (NdChar / (1.0 + math.exp((EDonor / 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(Float64(mu - EAccept) - Ev)) / KbT)))) tmp = 0.0 if ((EDonor <= -2.8e+113) || !(EDonor <= 4.2e+54)) tmp = Float64(t_0 + Float64(NdChar / Float64(1.0 + exp(Float64(EDonor / 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 - ((mu - EAccept) - Ev)) / KbT))); tmp = 0.0; if ((EDonor <= -2.8e+113) || ~((EDonor <= 4.2e+54))) tmp = t_0 + (NdChar / (1.0 + exp((EDonor / 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[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[Or[LessEqual[EDonor, -2.8e+113], N[Not[LessEqual[EDonor, 4.2e+54]], $MachinePrecision]], N[(t$95$0 + N[(NdChar / N[(1.0 + N[Exp[N[(EDonor / 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(\left(mu - EAccept\right) - Ev\right)}{KbT}}}\\
\mathbf{if}\;EDonor \leq -2.8 \cdot 10^{+113} \lor \neg \left(EDonor \leq 4.2 \cdot 10^{+54}\right):\\
\;\;\;\;t\_0 + \frac{NdChar}{1 + e^{\frac{EDonor}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;t\_0 + \frac{NdChar}{1 + e^{\frac{Vef}{KbT}}}\\
\end{array}
\end{array}
if EDonor < -2.79999999999999998e113 or 4.19999999999999972e54 < EDonor Initial program 100.0%
Simplified100.0%
Taylor expanded in EDonor around inf 93.6%
if -2.79999999999999998e113 < EDonor < 4.19999999999999972e54Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 83.9%
Final simplification87.2%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (exp (/ (- EDonor (- (- Ec Vef) mu)) KbT)))
(t_1 (- (/ NaChar (+ 2.0 (/ Ev KbT))) (/ NdChar (- -1.0 t_0))))
(t_2 (/ NaChar (+ 1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT))))))
(if (<= NaChar -6.2e+47)
(-
t_2
(/
NdChar
(*
Ec
(-
(/ 1.0 KbT)
(+
(+ (/ 2.0 Ec) (/ (/ EDonor Ec) KbT))
(+ (/ Vef (* Ec KbT)) (/ (/ mu Ec) KbT)))))))
(if (<= NaChar -210000.0)
t_1
(if (<= NaChar -4.3e-22)
(+
(/ NdChar (+ 1.0 (exp (/ mu KbT))))
(/ NaChar (+ 1.0 (exp (/ EAccept KbT)))))
(if (<= NaChar -2e-29)
(+
(/ NdChar (+ 1.0 (exp (/ Vef KbT))))
(/
NaChar
(-
(+
2.0
(- (/ EAccept KbT) (* Ev (- (/ -1.0 KbT) (/ Vef (* KbT Ev))))))
(/ mu KbT))))
(if (<= NaChar -2.6e-118)
(+ t_2 (/ NdChar (+ (/ EDonor KbT) 2.0)))
(if (<= NaChar 1.8e-193)
(-
(/ NdChar (+ 1.0 t_0))
(/
NaChar
(-
(/ mu KbT)
(+ 2.0 (+ (/ EAccept KbT) (+ (/ Vef KbT) (/ Ev KbT)))))))
(if (<= NaChar 8.5e-91)
(+ t_2 (/ NdChar (- (+ 2.0 (/ mu KbT)) (/ Ec KbT))))
(if (<= NaChar 8.8e-32)
t_1
(+
t_2
(/
NdChar
(-
(+
2.0
(*
EDonor
(+
(/ 1.0 KbT)
(+ (/ (/ Vef EDonor) KbT) (/ (/ mu EDonor) KbT)))))
(/ 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 = exp(((EDonor - ((Ec - Vef) - mu)) / KbT));
double t_1 = (NaChar / (2.0 + (Ev / KbT))) - (NdChar / (-1.0 - t_0));
double t_2 = NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)));
double tmp;
if (NaChar <= -6.2e+47) {
tmp = t_2 - (NdChar / (Ec * ((1.0 / KbT) - (((2.0 / Ec) + ((EDonor / Ec) / KbT)) + ((Vef / (Ec * KbT)) + ((mu / Ec) / KbT))))));
} else if (NaChar <= -210000.0) {
tmp = t_1;
} else if (NaChar <= -4.3e-22) {
tmp = (NdChar / (1.0 + exp((mu / KbT)))) + (NaChar / (1.0 + exp((EAccept / KbT))));
} else if (NaChar <= -2e-29) {
tmp = (NdChar / (1.0 + exp((Vef / KbT)))) + (NaChar / ((2.0 + ((EAccept / KbT) - (Ev * ((-1.0 / KbT) - (Vef / (KbT * Ev)))))) - (mu / KbT)));
} else if (NaChar <= -2.6e-118) {
tmp = t_2 + (NdChar / ((EDonor / KbT) + 2.0));
} else if (NaChar <= 1.8e-193) {
tmp = (NdChar / (1.0 + t_0)) - (NaChar / ((mu / KbT) - (2.0 + ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT))))));
} else if (NaChar <= 8.5e-91) {
tmp = t_2 + (NdChar / ((2.0 + (mu / KbT)) - (Ec / KbT)));
} else if (NaChar <= 8.8e-32) {
tmp = t_1;
} else {
tmp = t_2 + (NdChar / ((2.0 + (EDonor * ((1.0 / KbT) + (((Vef / EDonor) / KbT) + ((mu / EDonor) / KbT))))) - (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) :: t_2
real(8) :: tmp
t_0 = exp(((edonor - ((ec - vef) - mu)) / kbt))
t_1 = (nachar / (2.0d0 + (ev / kbt))) - (ndchar / ((-1.0d0) - t_0))
t_2 = nachar / (1.0d0 + exp(((vef - ((mu - eaccept) - ev)) / kbt)))
if (nachar <= (-6.2d+47)) then
tmp = t_2 - (ndchar / (ec * ((1.0d0 / kbt) - (((2.0d0 / ec) + ((edonor / ec) / kbt)) + ((vef / (ec * kbt)) + ((mu / ec) / kbt))))))
else if (nachar <= (-210000.0d0)) then
tmp = t_1
else if (nachar <= (-4.3d-22)) then
tmp = (ndchar / (1.0d0 + exp((mu / kbt)))) + (nachar / (1.0d0 + exp((eaccept / kbt))))
else if (nachar <= (-2d-29)) then
tmp = (ndchar / (1.0d0 + exp((vef / kbt)))) + (nachar / ((2.0d0 + ((eaccept / kbt) - (ev * (((-1.0d0) / kbt) - (vef / (kbt * ev)))))) - (mu / kbt)))
else if (nachar <= (-2.6d-118)) then
tmp = t_2 + (ndchar / ((edonor / kbt) + 2.0d0))
else if (nachar <= 1.8d-193) then
tmp = (ndchar / (1.0d0 + t_0)) - (nachar / ((mu / kbt) - (2.0d0 + ((eaccept / kbt) + ((vef / kbt) + (ev / kbt))))))
else if (nachar <= 8.5d-91) then
tmp = t_2 + (ndchar / ((2.0d0 + (mu / kbt)) - (ec / kbt)))
else if (nachar <= 8.8d-32) then
tmp = t_1
else
tmp = t_2 + (ndchar / ((2.0d0 + (edonor * ((1.0d0 / kbt) + (((vef / edonor) / kbt) + ((mu / edonor) / kbt))))) - (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 = Math.exp(((EDonor - ((Ec - Vef) - mu)) / KbT));
double t_1 = (NaChar / (2.0 + (Ev / KbT))) - (NdChar / (-1.0 - t_0));
double t_2 = NaChar / (1.0 + Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)));
double tmp;
if (NaChar <= -6.2e+47) {
tmp = t_2 - (NdChar / (Ec * ((1.0 / KbT) - (((2.0 / Ec) + ((EDonor / Ec) / KbT)) + ((Vef / (Ec * KbT)) + ((mu / Ec) / KbT))))));
} else if (NaChar <= -210000.0) {
tmp = t_1;
} else if (NaChar <= -4.3e-22) {
tmp = (NdChar / (1.0 + Math.exp((mu / KbT)))) + (NaChar / (1.0 + Math.exp((EAccept / KbT))));
} else if (NaChar <= -2e-29) {
tmp = (NdChar / (1.0 + Math.exp((Vef / KbT)))) + (NaChar / ((2.0 + ((EAccept / KbT) - (Ev * ((-1.0 / KbT) - (Vef / (KbT * Ev)))))) - (mu / KbT)));
} else if (NaChar <= -2.6e-118) {
tmp = t_2 + (NdChar / ((EDonor / KbT) + 2.0));
} else if (NaChar <= 1.8e-193) {
tmp = (NdChar / (1.0 + t_0)) - (NaChar / ((mu / KbT) - (2.0 + ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT))))));
} else if (NaChar <= 8.5e-91) {
tmp = t_2 + (NdChar / ((2.0 + (mu / KbT)) - (Ec / KbT)));
} else if (NaChar <= 8.8e-32) {
tmp = t_1;
} else {
tmp = t_2 + (NdChar / ((2.0 + (EDonor * ((1.0 / KbT) + (((Vef / EDonor) / KbT) + ((mu / EDonor) / KbT))))) - (Ec / KbT)));
}
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 / (2.0 + (Ev / KbT))) - (NdChar / (-1.0 - t_0)) t_2 = NaChar / (1.0 + math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT))) tmp = 0 if NaChar <= -6.2e+47: tmp = t_2 - (NdChar / (Ec * ((1.0 / KbT) - (((2.0 / Ec) + ((EDonor / Ec) / KbT)) + ((Vef / (Ec * KbT)) + ((mu / Ec) / KbT)))))) elif NaChar <= -210000.0: tmp = t_1 elif NaChar <= -4.3e-22: tmp = (NdChar / (1.0 + math.exp((mu / KbT)))) + (NaChar / (1.0 + math.exp((EAccept / KbT)))) elif NaChar <= -2e-29: tmp = (NdChar / (1.0 + math.exp((Vef / KbT)))) + (NaChar / ((2.0 + ((EAccept / KbT) - (Ev * ((-1.0 / KbT) - (Vef / (KbT * Ev)))))) - (mu / KbT))) elif NaChar <= -2.6e-118: tmp = t_2 + (NdChar / ((EDonor / KbT) + 2.0)) elif NaChar <= 1.8e-193: tmp = (NdChar / (1.0 + t_0)) - (NaChar / ((mu / KbT) - (2.0 + ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))))) elif NaChar <= 8.5e-91: tmp = t_2 + (NdChar / ((2.0 + (mu / KbT)) - (Ec / KbT))) elif NaChar <= 8.8e-32: tmp = t_1 else: tmp = t_2 + (NdChar / ((2.0 + (EDonor * ((1.0 / KbT) + (((Vef / EDonor) / KbT) + ((mu / EDonor) / KbT))))) - (Ec / KbT))) 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(Float64(NaChar / Float64(2.0 + Float64(Ev / KbT))) - Float64(NdChar / Float64(-1.0 - t_0))) t_2 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT)))) tmp = 0.0 if (NaChar <= -6.2e+47) tmp = Float64(t_2 - Float64(NdChar / Float64(Ec * Float64(Float64(1.0 / KbT) - Float64(Float64(Float64(2.0 / Ec) + Float64(Float64(EDonor / Ec) / KbT)) + Float64(Float64(Vef / Float64(Ec * KbT)) + Float64(Float64(mu / Ec) / KbT))))))); elseif (NaChar <= -210000.0) tmp = t_1; elseif (NaChar <= -4.3e-22) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(mu / KbT)))) + Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT))))); elseif (NaChar <= -2e-29) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Vef / KbT)))) + Float64(NaChar / Float64(Float64(2.0 + Float64(Float64(EAccept / KbT) - Float64(Ev * Float64(Float64(-1.0 / KbT) - Float64(Vef / Float64(KbT * Ev)))))) - Float64(mu / KbT)))); elseif (NaChar <= -2.6e-118) tmp = Float64(t_2 + Float64(NdChar / Float64(Float64(EDonor / KbT) + 2.0))); elseif (NaChar <= 1.8e-193) tmp = Float64(Float64(NdChar / Float64(1.0 + t_0)) - Float64(NaChar / Float64(Float64(mu / KbT) - Float64(2.0 + Float64(Float64(EAccept / KbT) + Float64(Float64(Vef / KbT) + Float64(Ev / KbT))))))); elseif (NaChar <= 8.5e-91) tmp = Float64(t_2 + Float64(NdChar / Float64(Float64(2.0 + Float64(mu / KbT)) - Float64(Ec / KbT)))); elseif (NaChar <= 8.8e-32) tmp = t_1; else tmp = Float64(t_2 + Float64(NdChar / Float64(Float64(2.0 + Float64(EDonor * Float64(Float64(1.0 / KbT) + Float64(Float64(Float64(Vef / EDonor) / KbT) + Float64(Float64(mu / EDonor) / KbT))))) - Float64(Ec / KbT)))); 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 / (2.0 + (Ev / KbT))) - (NdChar / (-1.0 - t_0)); t_2 = NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT))); tmp = 0.0; if (NaChar <= -6.2e+47) tmp = t_2 - (NdChar / (Ec * ((1.0 / KbT) - (((2.0 / Ec) + ((EDonor / Ec) / KbT)) + ((Vef / (Ec * KbT)) + ((mu / Ec) / KbT)))))); elseif (NaChar <= -210000.0) tmp = t_1; elseif (NaChar <= -4.3e-22) tmp = (NdChar / (1.0 + exp((mu / KbT)))) + (NaChar / (1.0 + exp((EAccept / KbT)))); elseif (NaChar <= -2e-29) tmp = (NdChar / (1.0 + exp((Vef / KbT)))) + (NaChar / ((2.0 + ((EAccept / KbT) - (Ev * ((-1.0 / KbT) - (Vef / (KbT * Ev)))))) - (mu / KbT))); elseif (NaChar <= -2.6e-118) tmp = t_2 + (NdChar / ((EDonor / KbT) + 2.0)); elseif (NaChar <= 1.8e-193) tmp = (NdChar / (1.0 + t_0)) - (NaChar / ((mu / KbT) - (2.0 + ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))))); elseif (NaChar <= 8.5e-91) tmp = t_2 + (NdChar / ((2.0 + (mu / KbT)) - (Ec / KbT))); elseif (NaChar <= 8.8e-32) tmp = t_1; else tmp = t_2 + (NdChar / ((2.0 + (EDonor * ((1.0 / KbT) + (((Vef / EDonor) / KbT) + ((mu / EDonor) / KbT))))) - (Ec / KbT))); 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[(N[(NaChar / N[(2.0 + N[(Ev / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(NdChar / N[(-1.0 - t$95$0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -6.2e+47], N[(t$95$2 - N[(NdChar / N[(Ec * N[(N[(1.0 / KbT), $MachinePrecision] - N[(N[(N[(2.0 / Ec), $MachinePrecision] + N[(N[(EDonor / Ec), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision] + N[(N[(Vef / N[(Ec * KbT), $MachinePrecision]), $MachinePrecision] + N[(N[(mu / Ec), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, -210000.0], t$95$1, If[LessEqual[NaChar, -4.3e-22], N[(N[(NdChar / N[(1.0 + N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, -2e-29], N[(N[(NdChar / N[(1.0 + N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(N[(2.0 + N[(N[(EAccept / KbT), $MachinePrecision] - N[(Ev * N[(N[(-1.0 / KbT), $MachinePrecision] - N[(Vef / N[(KbT * Ev), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, -2.6e-118], N[(t$95$2 + N[(NdChar / N[(N[(EDonor / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 1.8e-193], N[(N[(NdChar / N[(1.0 + t$95$0), $MachinePrecision]), $MachinePrecision] - N[(NaChar / N[(N[(mu / KbT), $MachinePrecision] - N[(2.0 + N[(N[(EAccept / KbT), $MachinePrecision] + N[(N[(Vef / KbT), $MachinePrecision] + N[(Ev / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 8.5e-91], N[(t$95$2 + N[(NdChar / N[(N[(2.0 + N[(mu / KbT), $MachinePrecision]), $MachinePrecision] - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 8.8e-32], t$95$1, N[(t$95$2 + N[(NdChar / N[(N[(2.0 + N[(EDonor * N[(N[(1.0 / KbT), $MachinePrecision] + N[(N[(N[(Vef / EDonor), $MachinePrecision] / KbT), $MachinePrecision] + N[(N[(mu / EDonor), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(Ec / KbT), $MachinePrecision]), $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}{2 + \frac{Ev}{KbT}} - \frac{NdChar}{-1 - t\_0}\\
t_2 := \frac{NaChar}{1 + e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}}\\
\mathbf{if}\;NaChar \leq -6.2 \cdot 10^{+47}:\\
\;\;\;\;t\_2 - \frac{NdChar}{Ec \cdot \left(\frac{1}{KbT} - \left(\left(\frac{2}{Ec} + \frac{\frac{EDonor}{Ec}}{KbT}\right) + \left(\frac{Vef}{Ec \cdot KbT} + \frac{\frac{mu}{Ec}}{KbT}\right)\right)\right)}\\
\mathbf{elif}\;NaChar \leq -210000:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;NaChar \leq -4.3 \cdot 10^{-22}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{mu}{KbT}}} + \frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}}\\
\mathbf{elif}\;NaChar \leq -2 \cdot 10^{-29}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{Vef}{KbT}}} + \frac{NaChar}{\left(2 + \left(\frac{EAccept}{KbT} - Ev \cdot \left(\frac{-1}{KbT} - \frac{Vef}{KbT \cdot Ev}\right)\right)\right) - \frac{mu}{KbT}}\\
\mathbf{elif}\;NaChar \leq -2.6 \cdot 10^{-118}:\\
\;\;\;\;t\_2 + \frac{NdChar}{\frac{EDonor}{KbT} + 2}\\
\mathbf{elif}\;NaChar \leq 1.8 \cdot 10^{-193}:\\
\;\;\;\;\frac{NdChar}{1 + t\_0} - \frac{NaChar}{\frac{mu}{KbT} - \left(2 + \left(\frac{EAccept}{KbT} + \left(\frac{Vef}{KbT} + \frac{Ev}{KbT}\right)\right)\right)}\\
\mathbf{elif}\;NaChar \leq 8.5 \cdot 10^{-91}:\\
\;\;\;\;t\_2 + \frac{NdChar}{\left(2 + \frac{mu}{KbT}\right) - \frac{Ec}{KbT}}\\
\mathbf{elif}\;NaChar \leq 8.8 \cdot 10^{-32}:\\
\;\;\;\;t\_1\\
\mathbf{else}:\\
\;\;\;\;t\_2 + \frac{NdChar}{\left(2 + EDonor \cdot \left(\frac{1}{KbT} + \left(\frac{\frac{Vef}{EDonor}}{KbT} + \frac{\frac{mu}{EDonor}}{KbT}\right)\right)\right) - \frac{Ec}{KbT}}\\
\end{array}
\end{array}
if NaChar < -6.2000000000000001e47Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 62.1%
Taylor expanded in Ec around inf 72.3%
sub-neg72.3%
associate-+r+72.3%
associate-*r/72.3%
metadata-eval72.3%
associate-/r*72.3%
*-commutative72.3%
associate-/r*72.3%
distribute-neg-frac72.3%
metadata-eval72.3%
Simplified72.3%
if -6.2000000000000001e47 < NaChar < -2.1e5 or 8.49999999999999985e-91 < NaChar < 8.7999999999999999e-32Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 75.8%
Taylor expanded in Ev around 0 76.2%
if -2.1e5 < NaChar < -4.30000000000000037e-22Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 88.1%
Taylor expanded in EAccept around inf 67.5%
if -4.30000000000000037e-22 < NaChar < -1.99999999999999989e-29Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 100.0%
Taylor expanded in KbT around inf 68.8%
Taylor expanded in Ev around inf 100.0%
*-commutative100.0%
Simplified100.0%
if -1.99999999999999989e-29 < NaChar < -2.6e-118Initial program 100.0%
Simplified100.0%
Taylor expanded in EDonor around inf 82.4%
Taylor expanded in EDonor around 0 76.9%
if -2.6e-118 < NaChar < 1.7999999999999999e-193Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 76.6%
if 1.7999999999999999e-193 < NaChar < 8.49999999999999985e-91Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 54.2%
Taylor expanded in EDonor around inf 53.8%
associate-/r*67.0%
associate-/r*60.3%
Simplified60.3%
Taylor expanded in mu around inf 68.6%
if 8.7999999999999999e-32 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 71.6%
Taylor expanded in EDonor around inf 76.7%
associate-/r*79.2%
associate-/r*79.2%
Simplified79.2%
Final simplification76.1%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (or (<= mu -6.6e+212) (not (<= mu 8.5e+201)))
(-
(/ NaChar (+ 1.0 (exp (/ mu (- KbT)))))
(/ NdChar (- -1.0 (exp (/ mu KbT)))))
(+
(/ NdChar (+ 1.0 (exp (/ Vef KbT))))
(/ NaChar (+ 1.0 (exp (/ (- (+ Vef Ev) mu) KbT)))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((mu <= -6.6e+212) || !(mu <= 8.5e+201)) {
tmp = (NaChar / (1.0 + exp((mu / -KbT)))) - (NdChar / (-1.0 - exp((mu / KbT))));
} else {
tmp = (NdChar / (1.0 + exp((Vef / KbT)))) + (NaChar / (1.0 + exp((((Vef + Ev) - mu) / KbT))));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if ((mu <= (-6.6d+212)) .or. (.not. (mu <= 8.5d+201))) then
tmp = (nachar / (1.0d0 + exp((mu / -kbt)))) - (ndchar / ((-1.0d0) - exp((mu / kbt))))
else
tmp = (ndchar / (1.0d0 + exp((vef / kbt)))) + (nachar / (1.0d0 + exp((((vef + ev) - mu) / kbt))))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((mu <= -6.6e+212) || !(mu <= 8.5e+201)) {
tmp = (NaChar / (1.0 + Math.exp((mu / -KbT)))) - (NdChar / (-1.0 - Math.exp((mu / KbT))));
} else {
tmp = (NdChar / (1.0 + Math.exp((Vef / KbT)))) + (NaChar / (1.0 + Math.exp((((Vef + Ev) - mu) / KbT))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if (mu <= -6.6e+212) or not (mu <= 8.5e+201): tmp = (NaChar / (1.0 + math.exp((mu / -KbT)))) - (NdChar / (-1.0 - math.exp((mu / KbT)))) else: tmp = (NdChar / (1.0 + math.exp((Vef / KbT)))) + (NaChar / (1.0 + math.exp((((Vef + Ev) - mu) / KbT)))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if ((mu <= -6.6e+212) || !(mu <= 8.5e+201)) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(mu / Float64(-KbT))))) - Float64(NdChar / Float64(-1.0 - exp(Float64(mu / KbT))))); else tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Vef / KbT)))) + Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(Vef + Ev) - mu) / KbT))))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if ((mu <= -6.6e+212) || ~((mu <= 8.5e+201))) tmp = (NaChar / (1.0 + exp((mu / -KbT)))) - (NdChar / (-1.0 - exp((mu / KbT)))); else tmp = (NdChar / (1.0 + exp((Vef / KbT)))) + (NaChar / (1.0 + exp((((Vef + Ev) - mu) / KbT)))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[Or[LessEqual[mu, -6.6e+212], N[Not[LessEqual[mu, 8.5e+201]], $MachinePrecision]], N[(N[(NaChar / N[(1.0 + N[Exp[N[(mu / (-KbT)), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(NdChar / N[(-1.0 - N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], 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]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;mu \leq -6.6 \cdot 10^{+212} \lor \neg \left(mu \leq 8.5 \cdot 10^{+201}\right):\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{mu}{-KbT}}} - \frac{NdChar}{-1 - e^{\frac{mu}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{Vef}{KbT}}} + \frac{NaChar}{1 + e^{\frac{\left(Vef + Ev\right) - mu}{KbT}}}\\
\end{array}
\end{array}
if mu < -6.6e212 or 8.5e201 < mu Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 85.0%
Taylor expanded in mu around inf 78.1%
associate-*r/78.1%
mul-1-neg78.1%
Simplified78.1%
if -6.6e212 < mu < 8.5e201Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 82.5%
Taylor expanded in EAccept around 0 76.0%
Final simplification76.3%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (exp (/ (- EDonor (- (- Ec Vef) mu)) KbT)))
(t_1 (/ NdChar (- -1.0 t_0)))
(t_2 (/ NaChar (+ 1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT))))))
(if (<= NaChar -2.9e+97)
(-
t_2
(/
NdChar
(*
Ec
(-
(/ 1.0 KbT)
(+
(+ (/ 2.0 Ec) (/ (/ EDonor Ec) KbT))
(+ (/ Vef (* Ec KbT)) (/ (/ mu Ec) KbT)))))))
(if (<= NaChar -6e+29)
(- (/ NaChar (+ 2.0 (/ EAccept KbT))) t_1)
(if (<= NaChar -3e-123)
(+
t_2
(/
NdChar
(-
(-
2.0
(*
Vef
(+
(/ -1.0 KbT)
(* EDonor (/ (- (/ -1.0 KbT) (/ mu (* EDonor KbT))) Vef)))))
(/ Ec KbT))))
(if (<= NaChar 4.1e-187)
(-
(/ NdChar (+ 1.0 t_0))
(/
NaChar
(-
(/ mu KbT)
(+ 2.0 (+ (/ EAccept KbT) (+ (/ Vef KbT) (/ Ev KbT)))))))
(if (<= NaChar 2.8e-88)
(+ t_2 (/ NdChar (- (+ 2.0 (/ mu KbT)) (/ Ec KbT))))
(if (<= NaChar 1.9e-32)
(- (/ NaChar (+ 2.0 (/ Ev KbT))) t_1)
(+
t_2
(/
NdChar
(-
(+
2.0
(*
EDonor
(+
(/ 1.0 KbT)
(+ (/ (/ Vef EDonor) KbT) (/ (/ mu EDonor) KbT)))))
(/ 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 = exp(((EDonor - ((Ec - Vef) - mu)) / KbT));
double t_1 = NdChar / (-1.0 - t_0);
double t_2 = NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)));
double tmp;
if (NaChar <= -2.9e+97) {
tmp = t_2 - (NdChar / (Ec * ((1.0 / KbT) - (((2.0 / Ec) + ((EDonor / Ec) / KbT)) + ((Vef / (Ec * KbT)) + ((mu / Ec) / KbT))))));
} else if (NaChar <= -6e+29) {
tmp = (NaChar / (2.0 + (EAccept / KbT))) - t_1;
} else if (NaChar <= -3e-123) {
tmp = t_2 + (NdChar / ((2.0 - (Vef * ((-1.0 / KbT) + (EDonor * (((-1.0 / KbT) - (mu / (EDonor * KbT))) / Vef))))) - (Ec / KbT)));
} else if (NaChar <= 4.1e-187) {
tmp = (NdChar / (1.0 + t_0)) - (NaChar / ((mu / KbT) - (2.0 + ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT))))));
} else if (NaChar <= 2.8e-88) {
tmp = t_2 + (NdChar / ((2.0 + (mu / KbT)) - (Ec / KbT)));
} else if (NaChar <= 1.9e-32) {
tmp = (NaChar / (2.0 + (Ev / KbT))) - t_1;
} else {
tmp = t_2 + (NdChar / ((2.0 + (EDonor * ((1.0 / KbT) + (((Vef / EDonor) / KbT) + ((mu / EDonor) / KbT))))) - (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) :: t_2
real(8) :: tmp
t_0 = exp(((edonor - ((ec - vef) - mu)) / kbt))
t_1 = ndchar / ((-1.0d0) - t_0)
t_2 = nachar / (1.0d0 + exp(((vef - ((mu - eaccept) - ev)) / kbt)))
if (nachar <= (-2.9d+97)) then
tmp = t_2 - (ndchar / (ec * ((1.0d0 / kbt) - (((2.0d0 / ec) + ((edonor / ec) / kbt)) + ((vef / (ec * kbt)) + ((mu / ec) / kbt))))))
else if (nachar <= (-6d+29)) then
tmp = (nachar / (2.0d0 + (eaccept / kbt))) - t_1
else if (nachar <= (-3d-123)) then
tmp = t_2 + (ndchar / ((2.0d0 - (vef * (((-1.0d0) / kbt) + (edonor * ((((-1.0d0) / kbt) - (mu / (edonor * kbt))) / vef))))) - (ec / kbt)))
else if (nachar <= 4.1d-187) then
tmp = (ndchar / (1.0d0 + t_0)) - (nachar / ((mu / kbt) - (2.0d0 + ((eaccept / kbt) + ((vef / kbt) + (ev / kbt))))))
else if (nachar <= 2.8d-88) then
tmp = t_2 + (ndchar / ((2.0d0 + (mu / kbt)) - (ec / kbt)))
else if (nachar <= 1.9d-32) then
tmp = (nachar / (2.0d0 + (ev / kbt))) - t_1
else
tmp = t_2 + (ndchar / ((2.0d0 + (edonor * ((1.0d0 / kbt) + (((vef / edonor) / kbt) + ((mu / edonor) / kbt))))) - (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 = Math.exp(((EDonor - ((Ec - Vef) - mu)) / KbT));
double t_1 = NdChar / (-1.0 - t_0);
double t_2 = NaChar / (1.0 + Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)));
double tmp;
if (NaChar <= -2.9e+97) {
tmp = t_2 - (NdChar / (Ec * ((1.0 / KbT) - (((2.0 / Ec) + ((EDonor / Ec) / KbT)) + ((Vef / (Ec * KbT)) + ((mu / Ec) / KbT))))));
} else if (NaChar <= -6e+29) {
tmp = (NaChar / (2.0 + (EAccept / KbT))) - t_1;
} else if (NaChar <= -3e-123) {
tmp = t_2 + (NdChar / ((2.0 - (Vef * ((-1.0 / KbT) + (EDonor * (((-1.0 / KbT) - (mu / (EDonor * KbT))) / Vef))))) - (Ec / KbT)));
} else if (NaChar <= 4.1e-187) {
tmp = (NdChar / (1.0 + t_0)) - (NaChar / ((mu / KbT) - (2.0 + ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT))))));
} else if (NaChar <= 2.8e-88) {
tmp = t_2 + (NdChar / ((2.0 + (mu / KbT)) - (Ec / KbT)));
} else if (NaChar <= 1.9e-32) {
tmp = (NaChar / (2.0 + (Ev / KbT))) - t_1;
} else {
tmp = t_2 + (NdChar / ((2.0 + (EDonor * ((1.0 / KbT) + (((Vef / EDonor) / KbT) + ((mu / EDonor) / KbT))))) - (Ec / KbT)));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = math.exp(((EDonor - ((Ec - Vef) - mu)) / KbT)) t_1 = NdChar / (-1.0 - t_0) t_2 = NaChar / (1.0 + math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT))) tmp = 0 if NaChar <= -2.9e+97: tmp = t_2 - (NdChar / (Ec * ((1.0 / KbT) - (((2.0 / Ec) + ((EDonor / Ec) / KbT)) + ((Vef / (Ec * KbT)) + ((mu / Ec) / KbT)))))) elif NaChar <= -6e+29: tmp = (NaChar / (2.0 + (EAccept / KbT))) - t_1 elif NaChar <= -3e-123: tmp = t_2 + (NdChar / ((2.0 - (Vef * ((-1.0 / KbT) + (EDonor * (((-1.0 / KbT) - (mu / (EDonor * KbT))) / Vef))))) - (Ec / KbT))) elif NaChar <= 4.1e-187: tmp = (NdChar / (1.0 + t_0)) - (NaChar / ((mu / KbT) - (2.0 + ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))))) elif NaChar <= 2.8e-88: tmp = t_2 + (NdChar / ((2.0 + (mu / KbT)) - (Ec / KbT))) elif NaChar <= 1.9e-32: tmp = (NaChar / (2.0 + (Ev / KbT))) - t_1 else: tmp = t_2 + (NdChar / ((2.0 + (EDonor * ((1.0 / KbT) + (((Vef / EDonor) / KbT) + ((mu / EDonor) / KbT))))) - (Ec / KbT))) 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(NdChar / Float64(-1.0 - t_0)) t_2 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT)))) tmp = 0.0 if (NaChar <= -2.9e+97) tmp = Float64(t_2 - Float64(NdChar / Float64(Ec * Float64(Float64(1.0 / KbT) - Float64(Float64(Float64(2.0 / Ec) + Float64(Float64(EDonor / Ec) / KbT)) + Float64(Float64(Vef / Float64(Ec * KbT)) + Float64(Float64(mu / Ec) / KbT))))))); elseif (NaChar <= -6e+29) tmp = Float64(Float64(NaChar / Float64(2.0 + Float64(EAccept / KbT))) - t_1); elseif (NaChar <= -3e-123) tmp = Float64(t_2 + Float64(NdChar / Float64(Float64(2.0 - Float64(Vef * Float64(Float64(-1.0 / KbT) + Float64(EDonor * Float64(Float64(Float64(-1.0 / KbT) - Float64(mu / Float64(EDonor * KbT))) / Vef))))) - Float64(Ec / KbT)))); elseif (NaChar <= 4.1e-187) tmp = Float64(Float64(NdChar / Float64(1.0 + t_0)) - Float64(NaChar / Float64(Float64(mu / KbT) - Float64(2.0 + Float64(Float64(EAccept / KbT) + Float64(Float64(Vef / KbT) + Float64(Ev / KbT))))))); elseif (NaChar <= 2.8e-88) tmp = Float64(t_2 + Float64(NdChar / Float64(Float64(2.0 + Float64(mu / KbT)) - Float64(Ec / KbT)))); elseif (NaChar <= 1.9e-32) tmp = Float64(Float64(NaChar / Float64(2.0 + Float64(Ev / KbT))) - t_1); else tmp = Float64(t_2 + Float64(NdChar / Float64(Float64(2.0 + Float64(EDonor * Float64(Float64(1.0 / KbT) + Float64(Float64(Float64(Vef / EDonor) / KbT) + Float64(Float64(mu / EDonor) / KbT))))) - Float64(Ec / KbT)))); 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 = NdChar / (-1.0 - t_0); t_2 = NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT))); tmp = 0.0; if (NaChar <= -2.9e+97) tmp = t_2 - (NdChar / (Ec * ((1.0 / KbT) - (((2.0 / Ec) + ((EDonor / Ec) / KbT)) + ((Vef / (Ec * KbT)) + ((mu / Ec) / KbT)))))); elseif (NaChar <= -6e+29) tmp = (NaChar / (2.0 + (EAccept / KbT))) - t_1; elseif (NaChar <= -3e-123) tmp = t_2 + (NdChar / ((2.0 - (Vef * ((-1.0 / KbT) + (EDonor * (((-1.0 / KbT) - (mu / (EDonor * KbT))) / Vef))))) - (Ec / KbT))); elseif (NaChar <= 4.1e-187) tmp = (NdChar / (1.0 + t_0)) - (NaChar / ((mu / KbT) - (2.0 + ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))))); elseif (NaChar <= 2.8e-88) tmp = t_2 + (NdChar / ((2.0 + (mu / KbT)) - (Ec / KbT))); elseif (NaChar <= 1.9e-32) tmp = (NaChar / (2.0 + (Ev / KbT))) - t_1; else tmp = t_2 + (NdChar / ((2.0 + (EDonor * ((1.0 / KbT) + (((Vef / EDonor) / KbT) + ((mu / EDonor) / KbT))))) - (Ec / KbT))); 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[(NdChar / N[(-1.0 - t$95$0), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -2.9e+97], N[(t$95$2 - N[(NdChar / N[(Ec * N[(N[(1.0 / KbT), $MachinePrecision] - N[(N[(N[(2.0 / Ec), $MachinePrecision] + N[(N[(EDonor / Ec), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision] + N[(N[(Vef / N[(Ec * KbT), $MachinePrecision]), $MachinePrecision] + N[(N[(mu / Ec), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, -6e+29], N[(N[(NaChar / N[(2.0 + N[(EAccept / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - t$95$1), $MachinePrecision], If[LessEqual[NaChar, -3e-123], N[(t$95$2 + N[(NdChar / N[(N[(2.0 - N[(Vef * N[(N[(-1.0 / KbT), $MachinePrecision] + N[(EDonor * N[(N[(N[(-1.0 / KbT), $MachinePrecision] - N[(mu / N[(EDonor * KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / Vef), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 4.1e-187], N[(N[(NdChar / N[(1.0 + t$95$0), $MachinePrecision]), $MachinePrecision] - N[(NaChar / N[(N[(mu / KbT), $MachinePrecision] - N[(2.0 + N[(N[(EAccept / KbT), $MachinePrecision] + N[(N[(Vef / KbT), $MachinePrecision] + N[(Ev / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 2.8e-88], N[(t$95$2 + N[(NdChar / N[(N[(2.0 + N[(mu / KbT), $MachinePrecision]), $MachinePrecision] - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 1.9e-32], N[(N[(NaChar / N[(2.0 + N[(Ev / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - t$95$1), $MachinePrecision], N[(t$95$2 + N[(NdChar / N[(N[(2.0 + N[(EDonor * N[(N[(1.0 / KbT), $MachinePrecision] + N[(N[(N[(Vef / EDonor), $MachinePrecision] / KbT), $MachinePrecision] + N[(N[(mu / EDonor), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(Ec / KbT), $MachinePrecision]), $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{NdChar}{-1 - t\_0}\\
t_2 := \frac{NaChar}{1 + e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}}\\
\mathbf{if}\;NaChar \leq -2.9 \cdot 10^{+97}:\\
\;\;\;\;t\_2 - \frac{NdChar}{Ec \cdot \left(\frac{1}{KbT} - \left(\left(\frac{2}{Ec} + \frac{\frac{EDonor}{Ec}}{KbT}\right) + \left(\frac{Vef}{Ec \cdot KbT} + \frac{\frac{mu}{Ec}}{KbT}\right)\right)\right)}\\
\mathbf{elif}\;NaChar \leq -6 \cdot 10^{+29}:\\
\;\;\;\;\frac{NaChar}{2 + \frac{EAccept}{KbT}} - t\_1\\
\mathbf{elif}\;NaChar \leq -3 \cdot 10^{-123}:\\
\;\;\;\;t\_2 + \frac{NdChar}{\left(2 - Vef \cdot \left(\frac{-1}{KbT} + EDonor \cdot \frac{\frac{-1}{KbT} - \frac{mu}{EDonor \cdot KbT}}{Vef}\right)\right) - \frac{Ec}{KbT}}\\
\mathbf{elif}\;NaChar \leq 4.1 \cdot 10^{-187}:\\
\;\;\;\;\frac{NdChar}{1 + t\_0} - \frac{NaChar}{\frac{mu}{KbT} - \left(2 + \left(\frac{EAccept}{KbT} + \left(\frac{Vef}{KbT} + \frac{Ev}{KbT}\right)\right)\right)}\\
\mathbf{elif}\;NaChar \leq 2.8 \cdot 10^{-88}:\\
\;\;\;\;t\_2 + \frac{NdChar}{\left(2 + \frac{mu}{KbT}\right) - \frac{Ec}{KbT}}\\
\mathbf{elif}\;NaChar \leq 1.9 \cdot 10^{-32}:\\
\;\;\;\;\frac{NaChar}{2 + \frac{Ev}{KbT}} - t\_1\\
\mathbf{else}:\\
\;\;\;\;t\_2 + \frac{NdChar}{\left(2 + EDonor \cdot \left(\frac{1}{KbT} + \left(\frac{\frac{Vef}{EDonor}}{KbT} + \frac{\frac{mu}{EDonor}}{KbT}\right)\right)\right) - \frac{Ec}{KbT}}\\
\end{array}
\end{array}
if NaChar < -2.89999999999999987e97Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 65.5%
Taylor expanded in Ec around inf 77.4%
sub-neg77.4%
associate-+r+77.4%
associate-*r/77.4%
metadata-eval77.4%
associate-/r*77.4%
*-commutative77.4%
associate-/r*77.4%
distribute-neg-frac77.4%
metadata-eval77.4%
Simplified77.4%
if -2.89999999999999987e97 < NaChar < -5.9999999999999998e29Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 71.7%
Taylor expanded in EAccept around 0 69.8%
if -5.9999999999999998e29 < NaChar < -2.99999999999999984e-123Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 62.9%
Taylor expanded in EDonor around inf 59.8%
associate-/r*65.8%
associate-/r*65.8%
Simplified65.8%
Taylor expanded in Vef around inf 65.9%
associate-/l*68.6%
Simplified68.6%
if -2.99999999999999984e-123 < NaChar < 4.1000000000000002e-187Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 76.6%
if 4.1000000000000002e-187 < NaChar < 2.79999999999999976e-88Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 54.2%
Taylor expanded in EDonor around inf 53.8%
associate-/r*67.0%
associate-/r*60.3%
Simplified60.3%
Taylor expanded in mu around inf 68.6%
if 2.79999999999999976e-88 < NaChar < 1.90000000000000004e-32Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 82.5%
Taylor expanded in Ev around 0 74.2%
if 1.90000000000000004e-32 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 71.6%
Taylor expanded in EDonor around inf 76.7%
associate-/r*79.2%
associate-/r*79.2%
Simplified79.2%
Final simplification75.3%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NaChar (+ 1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT)))))
(t_1 (+ t_0 (/ NdChar (- (+ 2.0 (/ mu KbT)) (/ Ec KbT)))))
(t_2 (exp (/ (- EDonor (- (- Ec Vef) mu)) KbT)))
(t_3 (/ NdChar (- -1.0 t_2))))
(if (<= NaChar -5.4e+107)
t_1
(if (<= NaChar -5.9e+30)
(- (/ NaChar (+ 2.0 (/ EAccept KbT))) t_3)
(if (<= NaChar -2.15e-113)
(+
t_0
(/ NdChar (- (+ (/ Vef KbT) (+ (/ EDonor KbT) 2.0)) (/ Ec KbT))))
(if (<= NaChar 4.4e-187)
(-
(/ NdChar (+ 1.0 t_2))
(/
NaChar
(-
(/ mu KbT)
(+ 2.0 (+ (/ EAccept KbT) (+ (/ Vef KbT) (/ Ev KbT)))))))
(if (<= NaChar 2.4e-91)
t_1
(if (<= NaChar 1.7e-32)
(- (/ NaChar (+ 2.0 (/ Ev KbT))) t_3)
(+
t_0
(/
NdChar
(-
(+ 2.0 (* EDonor (+ (/ 1.0 KbT) (/ Vef (* EDonor KbT)))))
(/ Ec KbT))))))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)));
double t_1 = t_0 + (NdChar / ((2.0 + (mu / KbT)) - (Ec / KbT)));
double t_2 = exp(((EDonor - ((Ec - Vef) - mu)) / KbT));
double t_3 = NdChar / (-1.0 - t_2);
double tmp;
if (NaChar <= -5.4e+107) {
tmp = t_1;
} else if (NaChar <= -5.9e+30) {
tmp = (NaChar / (2.0 + (EAccept / KbT))) - t_3;
} else if (NaChar <= -2.15e-113) {
tmp = t_0 + (NdChar / (((Vef / KbT) + ((EDonor / KbT) + 2.0)) - (Ec / KbT)));
} else if (NaChar <= 4.4e-187) {
tmp = (NdChar / (1.0 + t_2)) - (NaChar / ((mu / KbT) - (2.0 + ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT))))));
} else if (NaChar <= 2.4e-91) {
tmp = t_1;
} else if (NaChar <= 1.7e-32) {
tmp = (NaChar / (2.0 + (Ev / KbT))) - t_3;
} else {
tmp = t_0 + (NdChar / ((2.0 + (EDonor * ((1.0 / KbT) + (Vef / (EDonor * KbT))))) - (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) :: t_2
real(8) :: t_3
real(8) :: tmp
t_0 = nachar / (1.0d0 + exp(((vef - ((mu - eaccept) - ev)) / kbt)))
t_1 = t_0 + (ndchar / ((2.0d0 + (mu / kbt)) - (ec / kbt)))
t_2 = exp(((edonor - ((ec - vef) - mu)) / kbt))
t_3 = ndchar / ((-1.0d0) - t_2)
if (nachar <= (-5.4d+107)) then
tmp = t_1
else if (nachar <= (-5.9d+30)) then
tmp = (nachar / (2.0d0 + (eaccept / kbt))) - t_3
else if (nachar <= (-2.15d-113)) then
tmp = t_0 + (ndchar / (((vef / kbt) + ((edonor / kbt) + 2.0d0)) - (ec / kbt)))
else if (nachar <= 4.4d-187) then
tmp = (ndchar / (1.0d0 + t_2)) - (nachar / ((mu / kbt) - (2.0d0 + ((eaccept / kbt) + ((vef / kbt) + (ev / kbt))))))
else if (nachar <= 2.4d-91) then
tmp = t_1
else if (nachar <= 1.7d-32) then
tmp = (nachar / (2.0d0 + (ev / kbt))) - t_3
else
tmp = t_0 + (ndchar / ((2.0d0 + (edonor * ((1.0d0 / kbt) + (vef / (edonor * kbt))))) - (ec / kbt)))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NaChar / (1.0 + Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)));
double t_1 = t_0 + (NdChar / ((2.0 + (mu / KbT)) - (Ec / KbT)));
double t_2 = Math.exp(((EDonor - ((Ec - Vef) - mu)) / KbT));
double t_3 = NdChar / (-1.0 - t_2);
double tmp;
if (NaChar <= -5.4e+107) {
tmp = t_1;
} else if (NaChar <= -5.9e+30) {
tmp = (NaChar / (2.0 + (EAccept / KbT))) - t_3;
} else if (NaChar <= -2.15e-113) {
tmp = t_0 + (NdChar / (((Vef / KbT) + ((EDonor / KbT) + 2.0)) - (Ec / KbT)));
} else if (NaChar <= 4.4e-187) {
tmp = (NdChar / (1.0 + t_2)) - (NaChar / ((mu / KbT) - (2.0 + ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT))))));
} else if (NaChar <= 2.4e-91) {
tmp = t_1;
} else if (NaChar <= 1.7e-32) {
tmp = (NaChar / (2.0 + (Ev / KbT))) - t_3;
} else {
tmp = t_0 + (NdChar / ((2.0 + (EDonor * ((1.0 / KbT) + (Vef / (EDonor * KbT))))) - (Ec / KbT)));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NaChar / (1.0 + math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT))) t_1 = t_0 + (NdChar / ((2.0 + (mu / KbT)) - (Ec / KbT))) t_2 = math.exp(((EDonor - ((Ec - Vef) - mu)) / KbT)) t_3 = NdChar / (-1.0 - t_2) tmp = 0 if NaChar <= -5.4e+107: tmp = t_1 elif NaChar <= -5.9e+30: tmp = (NaChar / (2.0 + (EAccept / KbT))) - t_3 elif NaChar <= -2.15e-113: tmp = t_0 + (NdChar / (((Vef / KbT) + ((EDonor / KbT) + 2.0)) - (Ec / KbT))) elif NaChar <= 4.4e-187: tmp = (NdChar / (1.0 + t_2)) - (NaChar / ((mu / KbT) - (2.0 + ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))))) elif NaChar <= 2.4e-91: tmp = t_1 elif NaChar <= 1.7e-32: tmp = (NaChar / (2.0 + (Ev / KbT))) - t_3 else: tmp = t_0 + (NdChar / ((2.0 + (EDonor * ((1.0 / KbT) + (Vef / (EDonor * KbT))))) - (Ec / 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(Float64(mu - EAccept) - Ev)) / KbT)))) t_1 = Float64(t_0 + Float64(NdChar / Float64(Float64(2.0 + Float64(mu / KbT)) - Float64(Ec / KbT)))) t_2 = exp(Float64(Float64(EDonor - Float64(Float64(Ec - Vef) - mu)) / KbT)) t_3 = Float64(NdChar / Float64(-1.0 - t_2)) tmp = 0.0 if (NaChar <= -5.4e+107) tmp = t_1; elseif (NaChar <= -5.9e+30) tmp = Float64(Float64(NaChar / Float64(2.0 + Float64(EAccept / KbT))) - t_3); elseif (NaChar <= -2.15e-113) tmp = Float64(t_0 + Float64(NdChar / Float64(Float64(Float64(Vef / KbT) + Float64(Float64(EDonor / KbT) + 2.0)) - Float64(Ec / KbT)))); elseif (NaChar <= 4.4e-187) tmp = Float64(Float64(NdChar / Float64(1.0 + t_2)) - Float64(NaChar / Float64(Float64(mu / KbT) - Float64(2.0 + Float64(Float64(EAccept / KbT) + Float64(Float64(Vef / KbT) + Float64(Ev / KbT))))))); elseif (NaChar <= 2.4e-91) tmp = t_1; elseif (NaChar <= 1.7e-32) tmp = Float64(Float64(NaChar / Float64(2.0 + Float64(Ev / KbT))) - t_3); else tmp = Float64(t_0 + Float64(NdChar / Float64(Float64(2.0 + Float64(EDonor * Float64(Float64(1.0 / KbT) + Float64(Vef / Float64(EDonor * KbT))))) - Float64(Ec / KbT)))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT))); t_1 = t_0 + (NdChar / ((2.0 + (mu / KbT)) - (Ec / KbT))); t_2 = exp(((EDonor - ((Ec - Vef) - mu)) / KbT)); t_3 = NdChar / (-1.0 - t_2); tmp = 0.0; if (NaChar <= -5.4e+107) tmp = t_1; elseif (NaChar <= -5.9e+30) tmp = (NaChar / (2.0 + (EAccept / KbT))) - t_3; elseif (NaChar <= -2.15e-113) tmp = t_0 + (NdChar / (((Vef / KbT) + ((EDonor / KbT) + 2.0)) - (Ec / KbT))); elseif (NaChar <= 4.4e-187) tmp = (NdChar / (1.0 + t_2)) - (NaChar / ((mu / KbT) - (2.0 + ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))))); elseif (NaChar <= 2.4e-91) tmp = t_1; elseif (NaChar <= 1.7e-32) tmp = (NaChar / (2.0 + (Ev / KbT))) - t_3; else tmp = t_0 + (NdChar / ((2.0 + (EDonor * ((1.0 / KbT) + (Vef / (EDonor * KbT))))) - (Ec / 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[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(t$95$0 + N[(NdChar / N[(N[(2.0 + N[(mu / KbT), $MachinePrecision]), $MachinePrecision] - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[Exp[N[(N[(EDonor - N[(N[(Ec - Vef), $MachinePrecision] - mu), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$3 = N[(NdChar / N[(-1.0 - t$95$2), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -5.4e+107], t$95$1, If[LessEqual[NaChar, -5.9e+30], N[(N[(NaChar / N[(2.0 + N[(EAccept / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - t$95$3), $MachinePrecision], If[LessEqual[NaChar, -2.15e-113], N[(t$95$0 + N[(NdChar / N[(N[(N[(Vef / KbT), $MachinePrecision] + N[(N[(EDonor / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision] - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 4.4e-187], N[(N[(NdChar / N[(1.0 + t$95$2), $MachinePrecision]), $MachinePrecision] - N[(NaChar / N[(N[(mu / KbT), $MachinePrecision] - N[(2.0 + N[(N[(EAccept / KbT), $MachinePrecision] + N[(N[(Vef / KbT), $MachinePrecision] + N[(Ev / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 2.4e-91], t$95$1, If[LessEqual[NaChar, 1.7e-32], N[(N[(NaChar / N[(2.0 + N[(Ev / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - t$95$3), $MachinePrecision], N[(t$95$0 + N[(NdChar / N[(N[(2.0 + N[(EDonor * N[(N[(1.0 / KbT), $MachinePrecision] + N[(Vef / N[(EDonor * KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}}\\
t_1 := t\_0 + \frac{NdChar}{\left(2 + \frac{mu}{KbT}\right) - \frac{Ec}{KbT}}\\
t_2 := e^{\frac{EDonor - \left(\left(Ec - Vef\right) - mu\right)}{KbT}}\\
t_3 := \frac{NdChar}{-1 - t\_2}\\
\mathbf{if}\;NaChar \leq -5.4 \cdot 10^{+107}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;NaChar \leq -5.9 \cdot 10^{+30}:\\
\;\;\;\;\frac{NaChar}{2 + \frac{EAccept}{KbT}} - t\_3\\
\mathbf{elif}\;NaChar \leq -2.15 \cdot 10^{-113}:\\
\;\;\;\;t\_0 + \frac{NdChar}{\left(\frac{Vef}{KbT} + \left(\frac{EDonor}{KbT} + 2\right)\right) - \frac{Ec}{KbT}}\\
\mathbf{elif}\;NaChar \leq 4.4 \cdot 10^{-187}:\\
\;\;\;\;\frac{NdChar}{1 + t\_2} - \frac{NaChar}{\frac{mu}{KbT} - \left(2 + \left(\frac{EAccept}{KbT} + \left(\frac{Vef}{KbT} + \frac{Ev}{KbT}\right)\right)\right)}\\
\mathbf{elif}\;NaChar \leq 2.4 \cdot 10^{-91}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;NaChar \leq 1.7 \cdot 10^{-32}:\\
\;\;\;\;\frac{NaChar}{2 + \frac{Ev}{KbT}} - t\_3\\
\mathbf{else}:\\
\;\;\;\;t\_0 + \frac{NdChar}{\left(2 + EDonor \cdot \left(\frac{1}{KbT} + \frac{Vef}{EDonor \cdot KbT}\right)\right) - \frac{Ec}{KbT}}\\
\end{array}
\end{array}
if NaChar < -5.4000000000000003e107 or 4.40000000000000016e-187 < NaChar < 2.40000000000000011e-91Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 62.1%
Taylor expanded in EDonor around inf 58.1%
associate-/r*62.2%
associate-/r*57.8%
Simplified57.8%
Taylor expanded in mu around inf 70.6%
if -5.4000000000000003e107 < NaChar < -5.90000000000000015e30Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 71.7%
Taylor expanded in EAccept around 0 69.8%
if -5.90000000000000015e30 < NaChar < -2.15e-113Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 62.9%
Taylor expanded in mu around 0 66.4%
associate-+r+66.4%
Simplified66.4%
if -2.15e-113 < NaChar < 4.40000000000000016e-187Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 76.6%
if 2.40000000000000011e-91 < NaChar < 1.69999999999999989e-32Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 82.5%
Taylor expanded in Ev around 0 74.2%
if 1.69999999999999989e-32 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 71.6%
Taylor expanded in EDonor around inf 76.7%
associate-/r*79.2%
associate-/r*79.2%
Simplified79.2%
Taylor expanded in mu around 0 78.2%
Final simplification73.9%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0
(-
(/ NaChar (+ 2.0 (/ EAccept KbT)))
(/ NdChar (- -1.0 (exp (/ (- EDonor (- (- Ec Vef) mu)) KbT))))))
(t_1 (/ NaChar (+ 1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT))))))
(if (<= NaChar -2.7e+97)
(-
t_1
(/
NdChar
(*
Ec
(-
(/ 1.0 KbT)
(/ (+ (+ (/ EDonor KbT) 2.0) (+ (/ Vef KbT) (/ mu KbT))) Ec)))))
(if (<= NaChar -9.2e+27)
t_0
(if (<= NaChar -2.3e-212)
(+
t_1
(/
NdChar
(-
(-
2.0
(*
Vef
(+
(/ -1.0 KbT)
(* EDonor (/ (- (/ -1.0 KbT) (/ mu (* EDonor KbT))) Vef)))))
(/ Ec KbT))))
(if (<= NaChar 8.2e-27)
t_0
(+
t_1
(/
NdChar
(-
(+
2.0
(*
EDonor
(+
(/ 1.0 KbT)
(+ (/ (/ Vef EDonor) KbT) (/ (/ mu EDonor) KbT)))))
(/ Ec KbT))))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar / (2.0 + (EAccept / KbT))) - (NdChar / (-1.0 - exp(((EDonor - ((Ec - Vef) - mu)) / KbT))));
double t_1 = NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)));
double tmp;
if (NaChar <= -2.7e+97) {
tmp = t_1 - (NdChar / (Ec * ((1.0 / KbT) - ((((EDonor / KbT) + 2.0) + ((Vef / KbT) + (mu / KbT))) / Ec))));
} else if (NaChar <= -9.2e+27) {
tmp = t_0;
} else if (NaChar <= -2.3e-212) {
tmp = t_1 + (NdChar / ((2.0 - (Vef * ((-1.0 / KbT) + (EDonor * (((-1.0 / KbT) - (mu / (EDonor * KbT))) / Vef))))) - (Ec / KbT)));
} else if (NaChar <= 8.2e-27) {
tmp = t_0;
} else {
tmp = t_1 + (NdChar / ((2.0 + (EDonor * ((1.0 / KbT) + (((Vef / EDonor) / KbT) + ((mu / EDonor) / KbT))))) - (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 = (nachar / (2.0d0 + (eaccept / kbt))) - (ndchar / ((-1.0d0) - exp(((edonor - ((ec - vef) - mu)) / kbt))))
t_1 = nachar / (1.0d0 + exp(((vef - ((mu - eaccept) - ev)) / kbt)))
if (nachar <= (-2.7d+97)) then
tmp = t_1 - (ndchar / (ec * ((1.0d0 / kbt) - ((((edonor / kbt) + 2.0d0) + ((vef / kbt) + (mu / kbt))) / ec))))
else if (nachar <= (-9.2d+27)) then
tmp = t_0
else if (nachar <= (-2.3d-212)) then
tmp = t_1 + (ndchar / ((2.0d0 - (vef * (((-1.0d0) / kbt) + (edonor * ((((-1.0d0) / kbt) - (mu / (edonor * kbt))) / vef))))) - (ec / kbt)))
else if (nachar <= 8.2d-27) then
tmp = t_0
else
tmp = t_1 + (ndchar / ((2.0d0 + (edonor * ((1.0d0 / kbt) + (((vef / edonor) / kbt) + ((mu / edonor) / kbt))))) - (ec / kbt)))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar / (2.0 + (EAccept / KbT))) - (NdChar / (-1.0 - Math.exp(((EDonor - ((Ec - Vef) - mu)) / KbT))));
double t_1 = NaChar / (1.0 + Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)));
double tmp;
if (NaChar <= -2.7e+97) {
tmp = t_1 - (NdChar / (Ec * ((1.0 / KbT) - ((((EDonor / KbT) + 2.0) + ((Vef / KbT) + (mu / KbT))) / Ec))));
} else if (NaChar <= -9.2e+27) {
tmp = t_0;
} else if (NaChar <= -2.3e-212) {
tmp = t_1 + (NdChar / ((2.0 - (Vef * ((-1.0 / KbT) + (EDonor * (((-1.0 / KbT) - (mu / (EDonor * KbT))) / Vef))))) - (Ec / KbT)));
} else if (NaChar <= 8.2e-27) {
tmp = t_0;
} else {
tmp = t_1 + (NdChar / ((2.0 + (EDonor * ((1.0 / KbT) + (((Vef / EDonor) / KbT) + ((mu / EDonor) / KbT))))) - (Ec / KbT)));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = (NaChar / (2.0 + (EAccept / KbT))) - (NdChar / (-1.0 - math.exp(((EDonor - ((Ec - Vef) - mu)) / KbT)))) t_1 = NaChar / (1.0 + math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT))) tmp = 0 if NaChar <= -2.7e+97: tmp = t_1 - (NdChar / (Ec * ((1.0 / KbT) - ((((EDonor / KbT) + 2.0) + ((Vef / KbT) + (mu / KbT))) / Ec)))) elif NaChar <= -9.2e+27: tmp = t_0 elif NaChar <= -2.3e-212: tmp = t_1 + (NdChar / ((2.0 - (Vef * ((-1.0 / KbT) + (EDonor * (((-1.0 / KbT) - (mu / (EDonor * KbT))) / Vef))))) - (Ec / KbT))) elif NaChar <= 8.2e-27: tmp = t_0 else: tmp = t_1 + (NdChar / ((2.0 + (EDonor * ((1.0 / KbT) + (((Vef / EDonor) / KbT) + ((mu / EDonor) / KbT))))) - (Ec / KbT))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(NaChar / Float64(2.0 + Float64(EAccept / KbT))) - Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(EDonor - Float64(Float64(Ec - Vef) - mu)) / KbT))))) t_1 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT)))) tmp = 0.0 if (NaChar <= -2.7e+97) tmp = Float64(t_1 - Float64(NdChar / Float64(Ec * Float64(Float64(1.0 / KbT) - Float64(Float64(Float64(Float64(EDonor / KbT) + 2.0) + Float64(Float64(Vef / KbT) + Float64(mu / KbT))) / Ec))))); elseif (NaChar <= -9.2e+27) tmp = t_0; elseif (NaChar <= -2.3e-212) tmp = Float64(t_1 + Float64(NdChar / Float64(Float64(2.0 - Float64(Vef * Float64(Float64(-1.0 / KbT) + Float64(EDonor * Float64(Float64(Float64(-1.0 / KbT) - Float64(mu / Float64(EDonor * KbT))) / Vef))))) - Float64(Ec / KbT)))); elseif (NaChar <= 8.2e-27) tmp = t_0; else tmp = Float64(t_1 + Float64(NdChar / Float64(Float64(2.0 + Float64(EDonor * Float64(Float64(1.0 / KbT) + Float64(Float64(Float64(Vef / EDonor) / KbT) + Float64(Float64(mu / EDonor) / KbT))))) - Float64(Ec / KbT)))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = (NaChar / (2.0 + (EAccept / KbT))) - (NdChar / (-1.0 - exp(((EDonor - ((Ec - Vef) - mu)) / KbT)))); t_1 = NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT))); tmp = 0.0; if (NaChar <= -2.7e+97) tmp = t_1 - (NdChar / (Ec * ((1.0 / KbT) - ((((EDonor / KbT) + 2.0) + ((Vef / KbT) + (mu / KbT))) / Ec)))); elseif (NaChar <= -9.2e+27) tmp = t_0; elseif (NaChar <= -2.3e-212) tmp = t_1 + (NdChar / ((2.0 - (Vef * ((-1.0 / KbT) + (EDonor * (((-1.0 / KbT) - (mu / (EDonor * KbT))) / Vef))))) - (Ec / KbT))); elseif (NaChar <= 8.2e-27) tmp = t_0; else tmp = t_1 + (NdChar / ((2.0 + (EDonor * ((1.0 / KbT) + (((Vef / EDonor) / KbT) + ((mu / EDonor) / KbT))))) - (Ec / KbT))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(NaChar / N[(2.0 + N[(EAccept / KbT), $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]}, Block[{t$95$1 = N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -2.7e+97], N[(t$95$1 - N[(NdChar / N[(Ec * N[(N[(1.0 / KbT), $MachinePrecision] - N[(N[(N[(N[(EDonor / KbT), $MachinePrecision] + 2.0), $MachinePrecision] + N[(N[(Vef / KbT), $MachinePrecision] + N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, -9.2e+27], t$95$0, If[LessEqual[NaChar, -2.3e-212], N[(t$95$1 + N[(NdChar / N[(N[(2.0 - N[(Vef * N[(N[(-1.0 / KbT), $MachinePrecision] + N[(EDonor * N[(N[(N[(-1.0 / KbT), $MachinePrecision] - N[(mu / N[(EDonor * KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / Vef), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 8.2e-27], t$95$0, N[(t$95$1 + N[(NdChar / N[(N[(2.0 + N[(EDonor * N[(N[(1.0 / KbT), $MachinePrecision] + N[(N[(N[(Vef / EDonor), $MachinePrecision] / KbT), $MachinePrecision] + N[(N[(mu / EDonor), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{2 + \frac{EAccept}{KbT}} - \frac{NdChar}{-1 - e^{\frac{EDonor - \left(\left(Ec - Vef\right) - mu\right)}{KbT}}}\\
t_1 := \frac{NaChar}{1 + e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}}\\
\mathbf{if}\;NaChar \leq -2.7 \cdot 10^{+97}:\\
\;\;\;\;t\_1 - \frac{NdChar}{Ec \cdot \left(\frac{1}{KbT} - \frac{\left(\frac{EDonor}{KbT} + 2\right) + \left(\frac{Vef}{KbT} + \frac{mu}{KbT}\right)}{Ec}\right)}\\
\mathbf{elif}\;NaChar \leq -9.2 \cdot 10^{+27}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;NaChar \leq -2.3 \cdot 10^{-212}:\\
\;\;\;\;t\_1 + \frac{NdChar}{\left(2 - Vef \cdot \left(\frac{-1}{KbT} + EDonor \cdot \frac{\frac{-1}{KbT} - \frac{mu}{EDonor \cdot KbT}}{Vef}\right)\right) - \frac{Ec}{KbT}}\\
\mathbf{elif}\;NaChar \leq 8.2 \cdot 10^{-27}:\\
\;\;\;\;t\_0\\
\mathbf{else}:\\
\;\;\;\;t\_1 + \frac{NdChar}{\left(2 + EDonor \cdot \left(\frac{1}{KbT} + \left(\frac{\frac{Vef}{EDonor}}{KbT} + \frac{\frac{mu}{EDonor}}{KbT}\right)\right)\right) - \frac{Ec}{KbT}}\\
\end{array}
\end{array}
if NaChar < -2.69999999999999993e97Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 65.5%
Taylor expanded in Ec around -inf 74.4%
associate-*r*74.4%
mul-1-neg74.4%
+-commutative74.4%
mul-1-neg74.4%
unsub-neg74.4%
associate-+r+74.4%
+-commutative74.4%
Simplified74.4%
if -2.69999999999999993e97 < NaChar < -9.2000000000000002e27 or -2.3000000000000001e-212 < NaChar < 8.1999999999999997e-27Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 72.4%
Taylor expanded in EAccept around 0 69.5%
if -9.2000000000000002e27 < NaChar < -2.3000000000000001e-212Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 56.3%
Taylor expanded in EDonor around inf 58.1%
associate-/r*62.0%
associate-/r*62.1%
Simplified62.1%
Taylor expanded in Vef around inf 63.9%
associate-/l*65.7%
Simplified65.7%
if 8.1999999999999997e-27 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 73.2%
Taylor expanded in EDonor around inf 78.5%
associate-/r*81.1%
associate-/r*81.1%
Simplified81.1%
Final simplification72.6%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0
(-
(/ NaChar (+ 2.0 (/ EAccept KbT)))
(/ NdChar (- -1.0 (exp (/ (- EDonor (- (- Ec Vef) mu)) KbT))))))
(t_1 (/ NaChar (+ 1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT))))))
(if (<= NaChar -5e+98)
(-
t_1
(/
NdChar
(*
Ec
(-
(/ 1.0 KbT)
(/ (+ (+ (/ EDonor KbT) 2.0) (+ (/ Vef KbT) (/ mu KbT))) Ec)))))
(if (<= NaChar -4.1e+27)
t_0
(if (<= NaChar -6.5e-131)
(+
t_1
(/
NdChar
(-
(+
2.0
(- (/ EDonor KbT) (* Vef (- (/ -1.0 KbT) (/ mu (* Vef KbT))))))
(/ Ec KbT))))
(if (<= NaChar 1.42e-25)
t_0
(+
t_1
(/
NdChar
(-
(+
2.0
(*
EDonor
(+
(/ 1.0 KbT)
(+ (/ (/ Vef EDonor) KbT) (/ (/ mu EDonor) KbT)))))
(/ Ec KbT))))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar / (2.0 + (EAccept / KbT))) - (NdChar / (-1.0 - exp(((EDonor - ((Ec - Vef) - mu)) / KbT))));
double t_1 = NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)));
double tmp;
if (NaChar <= -5e+98) {
tmp = t_1 - (NdChar / (Ec * ((1.0 / KbT) - ((((EDonor / KbT) + 2.0) + ((Vef / KbT) + (mu / KbT))) / Ec))));
} else if (NaChar <= -4.1e+27) {
tmp = t_0;
} else if (NaChar <= -6.5e-131) {
tmp = t_1 + (NdChar / ((2.0 + ((EDonor / KbT) - (Vef * ((-1.0 / KbT) - (mu / (Vef * KbT)))))) - (Ec / KbT)));
} else if (NaChar <= 1.42e-25) {
tmp = t_0;
} else {
tmp = t_1 + (NdChar / ((2.0 + (EDonor * ((1.0 / KbT) + (((Vef / EDonor) / KbT) + ((mu / EDonor) / KbT))))) - (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 = (nachar / (2.0d0 + (eaccept / kbt))) - (ndchar / ((-1.0d0) - exp(((edonor - ((ec - vef) - mu)) / kbt))))
t_1 = nachar / (1.0d0 + exp(((vef - ((mu - eaccept) - ev)) / kbt)))
if (nachar <= (-5d+98)) then
tmp = t_1 - (ndchar / (ec * ((1.0d0 / kbt) - ((((edonor / kbt) + 2.0d0) + ((vef / kbt) + (mu / kbt))) / ec))))
else if (nachar <= (-4.1d+27)) then
tmp = t_0
else if (nachar <= (-6.5d-131)) then
tmp = t_1 + (ndchar / ((2.0d0 + ((edonor / kbt) - (vef * (((-1.0d0) / kbt) - (mu / (vef * kbt)))))) - (ec / kbt)))
else if (nachar <= 1.42d-25) then
tmp = t_0
else
tmp = t_1 + (ndchar / ((2.0d0 + (edonor * ((1.0d0 / kbt) + (((vef / edonor) / kbt) + ((mu / edonor) / kbt))))) - (ec / kbt)))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar / (2.0 + (EAccept / KbT))) - (NdChar / (-1.0 - Math.exp(((EDonor - ((Ec - Vef) - mu)) / KbT))));
double t_1 = NaChar / (1.0 + Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)));
double tmp;
if (NaChar <= -5e+98) {
tmp = t_1 - (NdChar / (Ec * ((1.0 / KbT) - ((((EDonor / KbT) + 2.0) + ((Vef / KbT) + (mu / KbT))) / Ec))));
} else if (NaChar <= -4.1e+27) {
tmp = t_0;
} else if (NaChar <= -6.5e-131) {
tmp = t_1 + (NdChar / ((2.0 + ((EDonor / KbT) - (Vef * ((-1.0 / KbT) - (mu / (Vef * KbT)))))) - (Ec / KbT)));
} else if (NaChar <= 1.42e-25) {
tmp = t_0;
} else {
tmp = t_1 + (NdChar / ((2.0 + (EDonor * ((1.0 / KbT) + (((Vef / EDonor) / KbT) + ((mu / EDonor) / KbT))))) - (Ec / KbT)));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = (NaChar / (2.0 + (EAccept / KbT))) - (NdChar / (-1.0 - math.exp(((EDonor - ((Ec - Vef) - mu)) / KbT)))) t_1 = NaChar / (1.0 + math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT))) tmp = 0 if NaChar <= -5e+98: tmp = t_1 - (NdChar / (Ec * ((1.0 / KbT) - ((((EDonor / KbT) + 2.0) + ((Vef / KbT) + (mu / KbT))) / Ec)))) elif NaChar <= -4.1e+27: tmp = t_0 elif NaChar <= -6.5e-131: tmp = t_1 + (NdChar / ((2.0 + ((EDonor / KbT) - (Vef * ((-1.0 / KbT) - (mu / (Vef * KbT)))))) - (Ec / KbT))) elif NaChar <= 1.42e-25: tmp = t_0 else: tmp = t_1 + (NdChar / ((2.0 + (EDonor * ((1.0 / KbT) + (((Vef / EDonor) / KbT) + ((mu / EDonor) / KbT))))) - (Ec / KbT))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(NaChar / Float64(2.0 + Float64(EAccept / KbT))) - Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(EDonor - Float64(Float64(Ec - Vef) - mu)) / KbT))))) t_1 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT)))) tmp = 0.0 if (NaChar <= -5e+98) tmp = Float64(t_1 - Float64(NdChar / Float64(Ec * Float64(Float64(1.0 / KbT) - Float64(Float64(Float64(Float64(EDonor / KbT) + 2.0) + Float64(Float64(Vef / KbT) + Float64(mu / KbT))) / Ec))))); elseif (NaChar <= -4.1e+27) tmp = t_0; elseif (NaChar <= -6.5e-131) tmp = Float64(t_1 + Float64(NdChar / Float64(Float64(2.0 + Float64(Float64(EDonor / KbT) - Float64(Vef * Float64(Float64(-1.0 / KbT) - Float64(mu / Float64(Vef * KbT)))))) - Float64(Ec / KbT)))); elseif (NaChar <= 1.42e-25) tmp = t_0; else tmp = Float64(t_1 + Float64(NdChar / Float64(Float64(2.0 + Float64(EDonor * Float64(Float64(1.0 / KbT) + Float64(Float64(Float64(Vef / EDonor) / KbT) + Float64(Float64(mu / EDonor) / KbT))))) - Float64(Ec / KbT)))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = (NaChar / (2.0 + (EAccept / KbT))) - (NdChar / (-1.0 - exp(((EDonor - ((Ec - Vef) - mu)) / KbT)))); t_1 = NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT))); tmp = 0.0; if (NaChar <= -5e+98) tmp = t_1 - (NdChar / (Ec * ((1.0 / KbT) - ((((EDonor / KbT) + 2.0) + ((Vef / KbT) + (mu / KbT))) / Ec)))); elseif (NaChar <= -4.1e+27) tmp = t_0; elseif (NaChar <= -6.5e-131) tmp = t_1 + (NdChar / ((2.0 + ((EDonor / KbT) - (Vef * ((-1.0 / KbT) - (mu / (Vef * KbT)))))) - (Ec / KbT))); elseif (NaChar <= 1.42e-25) tmp = t_0; else tmp = t_1 + (NdChar / ((2.0 + (EDonor * ((1.0 / KbT) + (((Vef / EDonor) / KbT) + ((mu / EDonor) / KbT))))) - (Ec / KbT))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(NaChar / N[(2.0 + N[(EAccept / KbT), $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]}, Block[{t$95$1 = N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -5e+98], N[(t$95$1 - N[(NdChar / N[(Ec * N[(N[(1.0 / KbT), $MachinePrecision] - N[(N[(N[(N[(EDonor / KbT), $MachinePrecision] + 2.0), $MachinePrecision] + N[(N[(Vef / KbT), $MachinePrecision] + N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, -4.1e+27], t$95$0, If[LessEqual[NaChar, -6.5e-131], N[(t$95$1 + N[(NdChar / N[(N[(2.0 + N[(N[(EDonor / KbT), $MachinePrecision] - N[(Vef * N[(N[(-1.0 / KbT), $MachinePrecision] - N[(mu / N[(Vef * KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 1.42e-25], t$95$0, N[(t$95$1 + N[(NdChar / N[(N[(2.0 + N[(EDonor * N[(N[(1.0 / KbT), $MachinePrecision] + N[(N[(N[(Vef / EDonor), $MachinePrecision] / KbT), $MachinePrecision] + N[(N[(mu / EDonor), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{2 + \frac{EAccept}{KbT}} - \frac{NdChar}{-1 - e^{\frac{EDonor - \left(\left(Ec - Vef\right) - mu\right)}{KbT}}}\\
t_1 := \frac{NaChar}{1 + e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}}\\
\mathbf{if}\;NaChar \leq -5 \cdot 10^{+98}:\\
\;\;\;\;t\_1 - \frac{NdChar}{Ec \cdot \left(\frac{1}{KbT} - \frac{\left(\frac{EDonor}{KbT} + 2\right) + \left(\frac{Vef}{KbT} + \frac{mu}{KbT}\right)}{Ec}\right)}\\
\mathbf{elif}\;NaChar \leq -4.1 \cdot 10^{+27}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;NaChar \leq -6.5 \cdot 10^{-131}:\\
\;\;\;\;t\_1 + \frac{NdChar}{\left(2 + \left(\frac{EDonor}{KbT} - Vef \cdot \left(\frac{-1}{KbT} - \frac{mu}{Vef \cdot KbT}\right)\right)\right) - \frac{Ec}{KbT}}\\
\mathbf{elif}\;NaChar \leq 1.42 \cdot 10^{-25}:\\
\;\;\;\;t\_0\\
\mathbf{else}:\\
\;\;\;\;t\_1 + \frac{NdChar}{\left(2 + EDonor \cdot \left(\frac{1}{KbT} + \left(\frac{\frac{Vef}{EDonor}}{KbT} + \frac{\frac{mu}{EDonor}}{KbT}\right)\right)\right) - \frac{Ec}{KbT}}\\
\end{array}
\end{array}
if NaChar < -4.9999999999999998e98Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 65.5%
Taylor expanded in Ec around -inf 74.4%
associate-*r*74.4%
mul-1-neg74.4%
+-commutative74.4%
mul-1-neg74.4%
unsub-neg74.4%
associate-+r+74.4%
+-commutative74.4%
Simplified74.4%
if -4.9999999999999998e98 < NaChar < -4.1000000000000002e27 or -6.5000000000000002e-131 < NaChar < 1.4200000000000001e-25Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 72.4%
Taylor expanded in EAccept around 0 68.2%
if -4.1000000000000002e27 < NaChar < -6.5000000000000002e-131Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 64.0%
Taylor expanded in Vef around inf 69.5%
*-commutative69.5%
Simplified69.5%
if 1.4200000000000001e-25 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 73.2%
Taylor expanded in EDonor around inf 78.5%
associate-/r*81.1%
associate-/r*81.1%
Simplified81.1%
Final simplification72.8%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0
(-
(/ NaChar (+ 2.0 (/ EAccept KbT)))
(/ NdChar (- -1.0 (exp (/ (- EDonor (- (- Ec Vef) mu)) KbT))))))
(t_1 (/ NaChar (+ 1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT))))))
(if (<= NaChar -1.65e+96)
(-
t_1
(/
NdChar
(*
Ec
(-
(/ 1.0 KbT)
(/ (+ (+ (/ EDonor KbT) 2.0) (+ (/ Vef KbT) (/ mu KbT))) Ec)))))
(if (<= NaChar -1.16e+30)
t_0
(if (<= NaChar -2.1e-131)
(+
t_1
(/
NdChar
(-
(+
2.0
(- (/ EDonor KbT) (* Vef (- (/ -1.0 KbT) (/ mu (* Vef KbT))))))
(/ Ec KbT))))
(if (<= NaChar 1.7e-26)
t_0
(+
t_1
(/
NdChar
(-
(+ 2.0 (* EDonor (+ (/ 1.0 KbT) (/ Vef (* EDonor KbT)))))
(/ Ec KbT))))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar / (2.0 + (EAccept / KbT))) - (NdChar / (-1.0 - exp(((EDonor - ((Ec - Vef) - mu)) / KbT))));
double t_1 = NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)));
double tmp;
if (NaChar <= -1.65e+96) {
tmp = t_1 - (NdChar / (Ec * ((1.0 / KbT) - ((((EDonor / KbT) + 2.0) + ((Vef / KbT) + (mu / KbT))) / Ec))));
} else if (NaChar <= -1.16e+30) {
tmp = t_0;
} else if (NaChar <= -2.1e-131) {
tmp = t_1 + (NdChar / ((2.0 + ((EDonor / KbT) - (Vef * ((-1.0 / KbT) - (mu / (Vef * KbT)))))) - (Ec / KbT)));
} else if (NaChar <= 1.7e-26) {
tmp = t_0;
} else {
tmp = t_1 + (NdChar / ((2.0 + (EDonor * ((1.0 / KbT) + (Vef / (EDonor * KbT))))) - (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 = (nachar / (2.0d0 + (eaccept / kbt))) - (ndchar / ((-1.0d0) - exp(((edonor - ((ec - vef) - mu)) / kbt))))
t_1 = nachar / (1.0d0 + exp(((vef - ((mu - eaccept) - ev)) / kbt)))
if (nachar <= (-1.65d+96)) then
tmp = t_1 - (ndchar / (ec * ((1.0d0 / kbt) - ((((edonor / kbt) + 2.0d0) + ((vef / kbt) + (mu / kbt))) / ec))))
else if (nachar <= (-1.16d+30)) then
tmp = t_0
else if (nachar <= (-2.1d-131)) then
tmp = t_1 + (ndchar / ((2.0d0 + ((edonor / kbt) - (vef * (((-1.0d0) / kbt) - (mu / (vef * kbt)))))) - (ec / kbt)))
else if (nachar <= 1.7d-26) then
tmp = t_0
else
tmp = t_1 + (ndchar / ((2.0d0 + (edonor * ((1.0d0 / kbt) + (vef / (edonor * kbt))))) - (ec / kbt)))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar / (2.0 + (EAccept / KbT))) - (NdChar / (-1.0 - Math.exp(((EDonor - ((Ec - Vef) - mu)) / KbT))));
double t_1 = NaChar / (1.0 + Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)));
double tmp;
if (NaChar <= -1.65e+96) {
tmp = t_1 - (NdChar / (Ec * ((1.0 / KbT) - ((((EDonor / KbT) + 2.0) + ((Vef / KbT) + (mu / KbT))) / Ec))));
} else if (NaChar <= -1.16e+30) {
tmp = t_0;
} else if (NaChar <= -2.1e-131) {
tmp = t_1 + (NdChar / ((2.0 + ((EDonor / KbT) - (Vef * ((-1.0 / KbT) - (mu / (Vef * KbT)))))) - (Ec / KbT)));
} else if (NaChar <= 1.7e-26) {
tmp = t_0;
} else {
tmp = t_1 + (NdChar / ((2.0 + (EDonor * ((1.0 / KbT) + (Vef / (EDonor * KbT))))) - (Ec / KbT)));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = (NaChar / (2.0 + (EAccept / KbT))) - (NdChar / (-1.0 - math.exp(((EDonor - ((Ec - Vef) - mu)) / KbT)))) t_1 = NaChar / (1.0 + math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT))) tmp = 0 if NaChar <= -1.65e+96: tmp = t_1 - (NdChar / (Ec * ((1.0 / KbT) - ((((EDonor / KbT) + 2.0) + ((Vef / KbT) + (mu / KbT))) / Ec)))) elif NaChar <= -1.16e+30: tmp = t_0 elif NaChar <= -2.1e-131: tmp = t_1 + (NdChar / ((2.0 + ((EDonor / KbT) - (Vef * ((-1.0 / KbT) - (mu / (Vef * KbT)))))) - (Ec / KbT))) elif NaChar <= 1.7e-26: tmp = t_0 else: tmp = t_1 + (NdChar / ((2.0 + (EDonor * ((1.0 / KbT) + (Vef / (EDonor * KbT))))) - (Ec / KbT))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(NaChar / Float64(2.0 + Float64(EAccept / KbT))) - Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(EDonor - Float64(Float64(Ec - Vef) - mu)) / KbT))))) t_1 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT)))) tmp = 0.0 if (NaChar <= -1.65e+96) tmp = Float64(t_1 - Float64(NdChar / Float64(Ec * Float64(Float64(1.0 / KbT) - Float64(Float64(Float64(Float64(EDonor / KbT) + 2.0) + Float64(Float64(Vef / KbT) + Float64(mu / KbT))) / Ec))))); elseif (NaChar <= -1.16e+30) tmp = t_0; elseif (NaChar <= -2.1e-131) tmp = Float64(t_1 + Float64(NdChar / Float64(Float64(2.0 + Float64(Float64(EDonor / KbT) - Float64(Vef * Float64(Float64(-1.0 / KbT) - Float64(mu / Float64(Vef * KbT)))))) - Float64(Ec / KbT)))); elseif (NaChar <= 1.7e-26) tmp = t_0; else tmp = Float64(t_1 + Float64(NdChar / Float64(Float64(2.0 + Float64(EDonor * Float64(Float64(1.0 / KbT) + Float64(Vef / Float64(EDonor * KbT))))) - Float64(Ec / KbT)))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = (NaChar / (2.0 + (EAccept / KbT))) - (NdChar / (-1.0 - exp(((EDonor - ((Ec - Vef) - mu)) / KbT)))); t_1 = NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT))); tmp = 0.0; if (NaChar <= -1.65e+96) tmp = t_1 - (NdChar / (Ec * ((1.0 / KbT) - ((((EDonor / KbT) + 2.0) + ((Vef / KbT) + (mu / KbT))) / Ec)))); elseif (NaChar <= -1.16e+30) tmp = t_0; elseif (NaChar <= -2.1e-131) tmp = t_1 + (NdChar / ((2.0 + ((EDonor / KbT) - (Vef * ((-1.0 / KbT) - (mu / (Vef * KbT)))))) - (Ec / KbT))); elseif (NaChar <= 1.7e-26) tmp = t_0; else tmp = t_1 + (NdChar / ((2.0 + (EDonor * ((1.0 / KbT) + (Vef / (EDonor * KbT))))) - (Ec / KbT))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(NaChar / N[(2.0 + N[(EAccept / KbT), $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]}, Block[{t$95$1 = N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -1.65e+96], N[(t$95$1 - N[(NdChar / N[(Ec * N[(N[(1.0 / KbT), $MachinePrecision] - N[(N[(N[(N[(EDonor / KbT), $MachinePrecision] + 2.0), $MachinePrecision] + N[(N[(Vef / KbT), $MachinePrecision] + N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, -1.16e+30], t$95$0, If[LessEqual[NaChar, -2.1e-131], N[(t$95$1 + N[(NdChar / N[(N[(2.0 + N[(N[(EDonor / KbT), $MachinePrecision] - N[(Vef * N[(N[(-1.0 / KbT), $MachinePrecision] - N[(mu / N[(Vef * KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 1.7e-26], t$95$0, N[(t$95$1 + N[(NdChar / N[(N[(2.0 + N[(EDonor * N[(N[(1.0 / KbT), $MachinePrecision] + N[(Vef / N[(EDonor * KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{2 + \frac{EAccept}{KbT}} - \frac{NdChar}{-1 - e^{\frac{EDonor - \left(\left(Ec - Vef\right) - mu\right)}{KbT}}}\\
t_1 := \frac{NaChar}{1 + e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}}\\
\mathbf{if}\;NaChar \leq -1.65 \cdot 10^{+96}:\\
\;\;\;\;t\_1 - \frac{NdChar}{Ec \cdot \left(\frac{1}{KbT} - \frac{\left(\frac{EDonor}{KbT} + 2\right) + \left(\frac{Vef}{KbT} + \frac{mu}{KbT}\right)}{Ec}\right)}\\
\mathbf{elif}\;NaChar \leq -1.16 \cdot 10^{+30}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;NaChar \leq -2.1 \cdot 10^{-131}:\\
\;\;\;\;t\_1 + \frac{NdChar}{\left(2 + \left(\frac{EDonor}{KbT} - Vef \cdot \left(\frac{-1}{KbT} - \frac{mu}{Vef \cdot KbT}\right)\right)\right) - \frac{Ec}{KbT}}\\
\mathbf{elif}\;NaChar \leq 1.7 \cdot 10^{-26}:\\
\;\;\;\;t\_0\\
\mathbf{else}:\\
\;\;\;\;t\_1 + \frac{NdChar}{\left(2 + EDonor \cdot \left(\frac{1}{KbT} + \frac{Vef}{EDonor \cdot KbT}\right)\right) - \frac{Ec}{KbT}}\\
\end{array}
\end{array}
if NaChar < -1.64999999999999992e96Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 65.5%
Taylor expanded in Ec around -inf 74.4%
associate-*r*74.4%
mul-1-neg74.4%
+-commutative74.4%
mul-1-neg74.4%
unsub-neg74.4%
associate-+r+74.4%
+-commutative74.4%
Simplified74.4%
if -1.64999999999999992e96 < NaChar < -1.16e30 or -2.09999999999999997e-131 < NaChar < 1.70000000000000007e-26Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 72.4%
Taylor expanded in EAccept around 0 68.2%
if -1.16e30 < NaChar < -2.09999999999999997e-131Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 64.0%
Taylor expanded in Vef around inf 69.5%
*-commutative69.5%
Simplified69.5%
if 1.70000000000000007e-26 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 73.2%
Taylor expanded in EDonor around inf 78.5%
associate-/r*81.1%
associate-/r*81.1%
Simplified81.1%
Taylor expanded in mu around 0 80.0%
Final simplification72.5%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0
(-
(/ NaChar (+ 2.0 (/ EAccept KbT)))
(/ NdChar (- -1.0 (exp (/ (- EDonor (- (- Ec Vef) mu)) KbT))))))
(t_1 (/ NaChar (+ 1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT))))))
(if (<= NaChar -2.35e+101)
(+ t_1 (/ NdChar (- (+ 2.0 (/ mu KbT)) (/ Ec KbT))))
(if (<= NaChar -2.4e+22)
t_0
(if (<= NaChar -1.2e-133)
(+
t_1
(/
NdChar
(-
(+
2.0
(- (/ EDonor KbT) (* Vef (- (/ -1.0 KbT) (/ mu (* Vef KbT))))))
(/ Ec KbT))))
(if (<= NaChar 2.05e-23)
t_0
(+
t_1
(/
NdChar
(-
(+ 2.0 (* EDonor (+ (/ 1.0 KbT) (/ Vef (* EDonor KbT)))))
(/ Ec KbT))))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar / (2.0 + (EAccept / KbT))) - (NdChar / (-1.0 - exp(((EDonor - ((Ec - Vef) - mu)) / KbT))));
double t_1 = NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)));
double tmp;
if (NaChar <= -2.35e+101) {
tmp = t_1 + (NdChar / ((2.0 + (mu / KbT)) - (Ec / KbT)));
} else if (NaChar <= -2.4e+22) {
tmp = t_0;
} else if (NaChar <= -1.2e-133) {
tmp = t_1 + (NdChar / ((2.0 + ((EDonor / KbT) - (Vef * ((-1.0 / KbT) - (mu / (Vef * KbT)))))) - (Ec / KbT)));
} else if (NaChar <= 2.05e-23) {
tmp = t_0;
} else {
tmp = t_1 + (NdChar / ((2.0 + (EDonor * ((1.0 / KbT) + (Vef / (EDonor * KbT))))) - (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 = (nachar / (2.0d0 + (eaccept / kbt))) - (ndchar / ((-1.0d0) - exp(((edonor - ((ec - vef) - mu)) / kbt))))
t_1 = nachar / (1.0d0 + exp(((vef - ((mu - eaccept) - ev)) / kbt)))
if (nachar <= (-2.35d+101)) then
tmp = t_1 + (ndchar / ((2.0d0 + (mu / kbt)) - (ec / kbt)))
else if (nachar <= (-2.4d+22)) then
tmp = t_0
else if (nachar <= (-1.2d-133)) then
tmp = t_1 + (ndchar / ((2.0d0 + ((edonor / kbt) - (vef * (((-1.0d0) / kbt) - (mu / (vef * kbt)))))) - (ec / kbt)))
else if (nachar <= 2.05d-23) then
tmp = t_0
else
tmp = t_1 + (ndchar / ((2.0d0 + (edonor * ((1.0d0 / kbt) + (vef / (edonor * kbt))))) - (ec / kbt)))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar / (2.0 + (EAccept / KbT))) - (NdChar / (-1.0 - Math.exp(((EDonor - ((Ec - Vef) - mu)) / KbT))));
double t_1 = NaChar / (1.0 + Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)));
double tmp;
if (NaChar <= -2.35e+101) {
tmp = t_1 + (NdChar / ((2.0 + (mu / KbT)) - (Ec / KbT)));
} else if (NaChar <= -2.4e+22) {
tmp = t_0;
} else if (NaChar <= -1.2e-133) {
tmp = t_1 + (NdChar / ((2.0 + ((EDonor / KbT) - (Vef * ((-1.0 / KbT) - (mu / (Vef * KbT)))))) - (Ec / KbT)));
} else if (NaChar <= 2.05e-23) {
tmp = t_0;
} else {
tmp = t_1 + (NdChar / ((2.0 + (EDonor * ((1.0 / KbT) + (Vef / (EDonor * KbT))))) - (Ec / KbT)));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = (NaChar / (2.0 + (EAccept / KbT))) - (NdChar / (-1.0 - math.exp(((EDonor - ((Ec - Vef) - mu)) / KbT)))) t_1 = NaChar / (1.0 + math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT))) tmp = 0 if NaChar <= -2.35e+101: tmp = t_1 + (NdChar / ((2.0 + (mu / KbT)) - (Ec / KbT))) elif NaChar <= -2.4e+22: tmp = t_0 elif NaChar <= -1.2e-133: tmp = t_1 + (NdChar / ((2.0 + ((EDonor / KbT) - (Vef * ((-1.0 / KbT) - (mu / (Vef * KbT)))))) - (Ec / KbT))) elif NaChar <= 2.05e-23: tmp = t_0 else: tmp = t_1 + (NdChar / ((2.0 + (EDonor * ((1.0 / KbT) + (Vef / (EDonor * KbT))))) - (Ec / KbT))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(NaChar / Float64(2.0 + Float64(EAccept / KbT))) - Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(EDonor - Float64(Float64(Ec - Vef) - mu)) / KbT))))) t_1 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT)))) tmp = 0.0 if (NaChar <= -2.35e+101) tmp = Float64(t_1 + Float64(NdChar / Float64(Float64(2.0 + Float64(mu / KbT)) - Float64(Ec / KbT)))); elseif (NaChar <= -2.4e+22) tmp = t_0; elseif (NaChar <= -1.2e-133) tmp = Float64(t_1 + Float64(NdChar / Float64(Float64(2.0 + Float64(Float64(EDonor / KbT) - Float64(Vef * Float64(Float64(-1.0 / KbT) - Float64(mu / Float64(Vef * KbT)))))) - Float64(Ec / KbT)))); elseif (NaChar <= 2.05e-23) tmp = t_0; else tmp = Float64(t_1 + Float64(NdChar / Float64(Float64(2.0 + Float64(EDonor * Float64(Float64(1.0 / KbT) + Float64(Vef / Float64(EDonor * KbT))))) - Float64(Ec / KbT)))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = (NaChar / (2.0 + (EAccept / KbT))) - (NdChar / (-1.0 - exp(((EDonor - ((Ec - Vef) - mu)) / KbT)))); t_1 = NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT))); tmp = 0.0; if (NaChar <= -2.35e+101) tmp = t_1 + (NdChar / ((2.0 + (mu / KbT)) - (Ec / KbT))); elseif (NaChar <= -2.4e+22) tmp = t_0; elseif (NaChar <= -1.2e-133) tmp = t_1 + (NdChar / ((2.0 + ((EDonor / KbT) - (Vef * ((-1.0 / KbT) - (mu / (Vef * KbT)))))) - (Ec / KbT))); elseif (NaChar <= 2.05e-23) tmp = t_0; else tmp = t_1 + (NdChar / ((2.0 + (EDonor * ((1.0 / KbT) + (Vef / (EDonor * KbT))))) - (Ec / KbT))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(NaChar / N[(2.0 + N[(EAccept / KbT), $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]}, Block[{t$95$1 = N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -2.35e+101], N[(t$95$1 + N[(NdChar / N[(N[(2.0 + N[(mu / KbT), $MachinePrecision]), $MachinePrecision] - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, -2.4e+22], t$95$0, If[LessEqual[NaChar, -1.2e-133], N[(t$95$1 + N[(NdChar / N[(N[(2.0 + N[(N[(EDonor / KbT), $MachinePrecision] - N[(Vef * N[(N[(-1.0 / KbT), $MachinePrecision] - N[(mu / N[(Vef * KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 2.05e-23], t$95$0, N[(t$95$1 + N[(NdChar / N[(N[(2.0 + N[(EDonor * N[(N[(1.0 / KbT), $MachinePrecision] + N[(Vef / N[(EDonor * KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{2 + \frac{EAccept}{KbT}} - \frac{NdChar}{-1 - e^{\frac{EDonor - \left(\left(Ec - Vef\right) - mu\right)}{KbT}}}\\
t_1 := \frac{NaChar}{1 + e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}}\\
\mathbf{if}\;NaChar \leq -2.35 \cdot 10^{+101}:\\
\;\;\;\;t\_1 + \frac{NdChar}{\left(2 + \frac{mu}{KbT}\right) - \frac{Ec}{KbT}}\\
\mathbf{elif}\;NaChar \leq -2.4 \cdot 10^{+22}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;NaChar \leq -1.2 \cdot 10^{-133}:\\
\;\;\;\;t\_1 + \frac{NdChar}{\left(2 + \left(\frac{EDonor}{KbT} - Vef \cdot \left(\frac{-1}{KbT} - \frac{mu}{Vef \cdot KbT}\right)\right)\right) - \frac{Ec}{KbT}}\\
\mathbf{elif}\;NaChar \leq 2.05 \cdot 10^{-23}:\\
\;\;\;\;t\_0\\
\mathbf{else}:\\
\;\;\;\;t\_1 + \frac{NdChar}{\left(2 + EDonor \cdot \left(\frac{1}{KbT} + \frac{Vef}{EDonor \cdot KbT}\right)\right) - \frac{Ec}{KbT}}\\
\end{array}
\end{array}
if NaChar < -2.34999999999999985e101Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 65.5%
Taylor expanded in EDonor around inf 60.0%
associate-/r*60.1%
associate-/r*56.7%
Simplified56.7%
Taylor expanded in mu around inf 71.5%
if -2.34999999999999985e101 < NaChar < -2.4e22 or -1.2e-133 < NaChar < 2.05000000000000015e-23Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 72.4%
Taylor expanded in EAccept around 0 68.2%
if -2.4e22 < NaChar < -1.2e-133Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 64.0%
Taylor expanded in Vef around inf 69.5%
*-commutative69.5%
Simplified69.5%
if 2.05000000000000015e-23 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 73.2%
Taylor expanded in EDonor around inf 78.5%
associate-/r*81.1%
associate-/r*81.1%
Simplified81.1%
Taylor expanded in mu around 0 80.0%
Final simplification72.1%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (<= NaChar -2.2e+147)
(+ (/ NdChar 2.0) (/ NaChar (+ 1.0 (exp (/ (- (+ Vef EAccept) mu) KbT)))))
(if (or (<= NaChar -1.65e+26)
(and (not (<= NaChar -6.2e-132)) (<= NaChar 2.15e-32)))
(-
(/ NaChar (+ 2.0 (/ EAccept KbT)))
(/ NdChar (- -1.0 (exp (/ (- EDonor (- (- Ec Vef) mu)) KbT)))))
(+
(/ NaChar (+ 1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT))))
(/ NdChar (+ (/ EDonor KbT) 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 (NaChar <= -2.2e+147) {
tmp = (NdChar / 2.0) + (NaChar / (1.0 + exp((((Vef + EAccept) - mu) / KbT))));
} else if ((NaChar <= -1.65e+26) || (!(NaChar <= -6.2e-132) && (NaChar <= 2.15e-32))) {
tmp = (NaChar / (2.0 + (EAccept / KbT))) - (NdChar / (-1.0 - exp(((EDonor - ((Ec - Vef) - mu)) / KbT))));
} else {
tmp = (NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / ((EDonor / KbT) + 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 (nachar <= (-2.2d+147)) then
tmp = (ndchar / 2.0d0) + (nachar / (1.0d0 + exp((((vef + eaccept) - mu) / kbt))))
else if ((nachar <= (-1.65d+26)) .or. (.not. (nachar <= (-6.2d-132))) .and. (nachar <= 2.15d-32)) then
tmp = (nachar / (2.0d0 + (eaccept / kbt))) - (ndchar / ((-1.0d0) - exp(((edonor - ((ec - vef) - mu)) / kbt))))
else
tmp = (nachar / (1.0d0 + exp(((vef - ((mu - eaccept) - ev)) / kbt)))) + (ndchar / ((edonor / kbt) + 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 (NaChar <= -2.2e+147) {
tmp = (NdChar / 2.0) + (NaChar / (1.0 + Math.exp((((Vef + EAccept) - mu) / KbT))));
} else if ((NaChar <= -1.65e+26) || (!(NaChar <= -6.2e-132) && (NaChar <= 2.15e-32))) {
tmp = (NaChar / (2.0 + (EAccept / KbT))) - (NdChar / (-1.0 - Math.exp(((EDonor - ((Ec - Vef) - mu)) / KbT))));
} else {
tmp = (NaChar / (1.0 + Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / ((EDonor / KbT) + 2.0));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if NaChar <= -2.2e+147: tmp = (NdChar / 2.0) + (NaChar / (1.0 + math.exp((((Vef + EAccept) - mu) / KbT)))) elif (NaChar <= -1.65e+26) or (not (NaChar <= -6.2e-132) and (NaChar <= 2.15e-32)): tmp = (NaChar / (2.0 + (EAccept / KbT))) - (NdChar / (-1.0 - math.exp(((EDonor - ((Ec - Vef) - mu)) / KbT)))) else: tmp = (NaChar / (1.0 + math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / ((EDonor / KbT) + 2.0)) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (NaChar <= -2.2e+147) tmp = Float64(Float64(NdChar / 2.0) + Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(Vef + EAccept) - mu) / KbT))))); elseif ((NaChar <= -1.65e+26) || (!(NaChar <= -6.2e-132) && (NaChar <= 2.15e-32))) tmp = Float64(Float64(NaChar / Float64(2.0 + Float64(EAccept / KbT))) - Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(EDonor - Float64(Float64(Ec - Vef) - mu)) / KbT))))); else tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT)))) + Float64(NdChar / Float64(Float64(EDonor / KbT) + 2.0))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (NaChar <= -2.2e+147) tmp = (NdChar / 2.0) + (NaChar / (1.0 + exp((((Vef + EAccept) - mu) / KbT)))); elseif ((NaChar <= -1.65e+26) || (~((NaChar <= -6.2e-132)) && (NaChar <= 2.15e-32))) tmp = (NaChar / (2.0 + (EAccept / KbT))) - (NdChar / (-1.0 - exp(((EDonor - ((Ec - Vef) - mu)) / KbT)))); else tmp = (NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / ((EDonor / KbT) + 2.0)); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[NaChar, -2.2e+147], N[(N[(NdChar / 2.0), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Exp[N[(N[(N[(Vef + EAccept), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[Or[LessEqual[NaChar, -1.65e+26], And[N[Not[LessEqual[NaChar, -6.2e-132]], $MachinePrecision], LessEqual[NaChar, 2.15e-32]]], N[(N[(NaChar / N[(2.0 + N[(EAccept / KbT), $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], N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(N[(EDonor / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NaChar \leq -2.2 \cdot 10^{+147}:\\
\;\;\;\;\frac{NdChar}{2} + \frac{NaChar}{1 + e^{\frac{\left(Vef + EAccept\right) - mu}{KbT}}}\\
\mathbf{elif}\;NaChar \leq -1.65 \cdot 10^{+26} \lor \neg \left(NaChar \leq -6.2 \cdot 10^{-132}\right) \land NaChar \leq 2.15 \cdot 10^{-32}:\\
\;\;\;\;\frac{NaChar}{2 + \frac{EAccept}{KbT}} - \frac{NdChar}{-1 - e^{\frac{EDonor - \left(\left(Ec - Vef\right) - mu\right)}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}} + \frac{NdChar}{\frac{EDonor}{KbT} + 2}\\
\end{array}
\end{array}
if NaChar < -2.2000000000000002e147Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 80.6%
Taylor expanded in Vef around 0 68.8%
Taylor expanded in Ev around 0 68.3%
if -2.2000000000000002e147 < NaChar < -1.64999999999999997e26 or -6.20000000000000016e-132 < NaChar < 2.14999999999999995e-32Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 72.9%
Taylor expanded in EAccept around 0 68.8%
if -1.64999999999999997e26 < NaChar < -6.20000000000000016e-132 or 2.14999999999999995e-32 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in EDonor around inf 76.6%
Taylor expanded in EDonor around 0 68.2%
Final simplification68.5%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NdChar (- -1.0 (exp (/ (- EDonor (- (- Ec Vef) mu)) KbT))))))
(if (<= NaChar -2.4e+145)
(+ (/ NdChar 2.0) (/ NaChar (+ 1.0 (exp (/ (- (+ Vef EAccept) mu) KbT)))))
(if (<= NaChar -9.5e-64)
(- (/ NaChar (+ 2.0 (/ EAccept KbT))) t_0)
(if (or (<= NaChar -2.7e-112) (not (<= NaChar 6.2e-31)))
(+
(/ NaChar (+ 1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT))))
(/ NdChar 2.0))
(- (/ NaChar (+ 2.0 (/ Ev KbT))) t_0))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (-1.0 - exp(((EDonor - ((Ec - Vef) - mu)) / KbT)));
double tmp;
if (NaChar <= -2.4e+145) {
tmp = (NdChar / 2.0) + (NaChar / (1.0 + exp((((Vef + EAccept) - mu) / KbT))));
} else if (NaChar <= -9.5e-64) {
tmp = (NaChar / (2.0 + (EAccept / KbT))) - t_0;
} else if ((NaChar <= -2.7e-112) || !(NaChar <= 6.2e-31)) {
tmp = (NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / 2.0);
} else {
tmp = (NaChar / (2.0 + (Ev / KbT))) - t_0;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: tmp
t_0 = ndchar / ((-1.0d0) - exp(((edonor - ((ec - vef) - mu)) / kbt)))
if (nachar <= (-2.4d+145)) then
tmp = (ndchar / 2.0d0) + (nachar / (1.0d0 + exp((((vef + eaccept) - mu) / kbt))))
else if (nachar <= (-9.5d-64)) then
tmp = (nachar / (2.0d0 + (eaccept / kbt))) - t_0
else if ((nachar <= (-2.7d-112)) .or. (.not. (nachar <= 6.2d-31))) then
tmp = (nachar / (1.0d0 + exp(((vef - ((mu - eaccept) - ev)) / kbt)))) + (ndchar / 2.0d0)
else
tmp = (nachar / (2.0d0 + (ev / kbt))) - t_0
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (-1.0 - Math.exp(((EDonor - ((Ec - Vef) - mu)) / KbT)));
double tmp;
if (NaChar <= -2.4e+145) {
tmp = (NdChar / 2.0) + (NaChar / (1.0 + Math.exp((((Vef + EAccept) - mu) / KbT))));
} else if (NaChar <= -9.5e-64) {
tmp = (NaChar / (2.0 + (EAccept / KbT))) - t_0;
} else if ((NaChar <= -2.7e-112) || !(NaChar <= 6.2e-31)) {
tmp = (NaChar / (1.0 + Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / 2.0);
} else {
tmp = (NaChar / (2.0 + (Ev / KbT))) - t_0;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NdChar / (-1.0 - math.exp(((EDonor - ((Ec - Vef) - mu)) / KbT))) tmp = 0 if NaChar <= -2.4e+145: tmp = (NdChar / 2.0) + (NaChar / (1.0 + math.exp((((Vef + EAccept) - mu) / KbT)))) elif NaChar <= -9.5e-64: tmp = (NaChar / (2.0 + (EAccept / KbT))) - t_0 elif (NaChar <= -2.7e-112) or not (NaChar <= 6.2e-31): tmp = (NaChar / (1.0 + math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / 2.0) else: tmp = (NaChar / (2.0 + (Ev / KbT))) - t_0 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(EDonor - Float64(Float64(Ec - Vef) - mu)) / KbT)))) tmp = 0.0 if (NaChar <= -2.4e+145) tmp = Float64(Float64(NdChar / 2.0) + Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(Vef + EAccept) - mu) / KbT))))); elseif (NaChar <= -9.5e-64) tmp = Float64(Float64(NaChar / Float64(2.0 + Float64(EAccept / KbT))) - t_0); elseif ((NaChar <= -2.7e-112) || !(NaChar <= 6.2e-31)) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT)))) + Float64(NdChar / 2.0)); else tmp = Float64(Float64(NaChar / Float64(2.0 + Float64(Ev / KbT))) - t_0); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NdChar / (-1.0 - exp(((EDonor - ((Ec - Vef) - mu)) / KbT))); tmp = 0.0; if (NaChar <= -2.4e+145) tmp = (NdChar / 2.0) + (NaChar / (1.0 + exp((((Vef + EAccept) - mu) / KbT)))); elseif (NaChar <= -9.5e-64) tmp = (NaChar / (2.0 + (EAccept / KbT))) - t_0; elseif ((NaChar <= -2.7e-112) || ~((NaChar <= 6.2e-31))) tmp = (NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / 2.0); else tmp = (NaChar / (2.0 + (Ev / KbT))) - t_0; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NdChar / N[(-1.0 - N[Exp[N[(N[(EDonor - N[(N[(Ec - Vef), $MachinePrecision] - mu), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -2.4e+145], N[(N[(NdChar / 2.0), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Exp[N[(N[(N[(Vef + EAccept), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, -9.5e-64], N[(N[(NaChar / N[(2.0 + N[(EAccept / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - t$95$0), $MachinePrecision], If[Or[LessEqual[NaChar, -2.7e-112], N[Not[LessEqual[NaChar, 6.2e-31]], $MachinePrecision]], N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar / N[(2.0 + N[(Ev / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - t$95$0), $MachinePrecision]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{-1 - e^{\frac{EDonor - \left(\left(Ec - Vef\right) - mu\right)}{KbT}}}\\
\mathbf{if}\;NaChar \leq -2.4 \cdot 10^{+145}:\\
\;\;\;\;\frac{NdChar}{2} + \frac{NaChar}{1 + e^{\frac{\left(Vef + EAccept\right) - mu}{KbT}}}\\
\mathbf{elif}\;NaChar \leq -9.5 \cdot 10^{-64}:\\
\;\;\;\;\frac{NaChar}{2 + \frac{EAccept}{KbT}} - t\_0\\
\mathbf{elif}\;NaChar \leq -2.7 \cdot 10^{-112} \lor \neg \left(NaChar \leq 6.2 \cdot 10^{-31}\right):\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}} + \frac{NdChar}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{2 + \frac{Ev}{KbT}} - t\_0\\
\end{array}
\end{array}
if NaChar < -2.39999999999999992e145Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 80.6%
Taylor expanded in Vef around 0 68.8%
Taylor expanded in Ev around 0 68.3%
if -2.39999999999999992e145 < NaChar < -9.50000000000000043e-64Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 70.4%
Taylor expanded in EAccept around 0 60.7%
if -9.50000000000000043e-64 < NaChar < -2.7000000000000001e-112 or 6.19999999999999999e-31 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 85.8%
Taylor expanded in Vef around 0 64.7%
if -2.7000000000000001e-112 < NaChar < 6.19999999999999999e-31Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 74.6%
Taylor expanded in Ev around 0 65.8%
Final simplification64.8%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (<= NaChar -1.5e+145)
(+ (/ NdChar 2.0) (/ NaChar (+ 1.0 (exp (/ (- (+ Vef EAccept) mu) KbT)))))
(if (or (<= NaChar -7.5e-61)
(and (not (<= NaChar -2.3e-126)) (<= NaChar 1.15e-30)))
(-
(/ NaChar (+ 2.0 (/ EAccept KbT)))
(/ NdChar (- -1.0 (exp (/ (- EDonor (- (- Ec Vef) mu)) KbT)))))
(+
(/ NaChar (+ 1.0 (exp (/ (- Vef (- (- mu EAccept) 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 (NaChar <= -1.5e+145) {
tmp = (NdChar / 2.0) + (NaChar / (1.0 + exp((((Vef + EAccept) - mu) / KbT))));
} else if ((NaChar <= -7.5e-61) || (!(NaChar <= -2.3e-126) && (NaChar <= 1.15e-30))) {
tmp = (NaChar / (2.0 + (EAccept / KbT))) - (NdChar / (-1.0 - exp(((EDonor - ((Ec - Vef) - mu)) / KbT))));
} else {
tmp = (NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - 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 (nachar <= (-1.5d+145)) then
tmp = (ndchar / 2.0d0) + (nachar / (1.0d0 + exp((((vef + eaccept) - mu) / kbt))))
else if ((nachar <= (-7.5d-61)) .or. (.not. (nachar <= (-2.3d-126))) .and. (nachar <= 1.15d-30)) then
tmp = (nachar / (2.0d0 + (eaccept / kbt))) - (ndchar / ((-1.0d0) - exp(((edonor - ((ec - vef) - mu)) / kbt))))
else
tmp = (nachar / (1.0d0 + exp(((vef - ((mu - eaccept) - 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 (NaChar <= -1.5e+145) {
tmp = (NdChar / 2.0) + (NaChar / (1.0 + Math.exp((((Vef + EAccept) - mu) / KbT))));
} else if ((NaChar <= -7.5e-61) || (!(NaChar <= -2.3e-126) && (NaChar <= 1.15e-30))) {
tmp = (NaChar / (2.0 + (EAccept / KbT))) - (NdChar / (-1.0 - Math.exp(((EDonor - ((Ec - Vef) - mu)) / KbT))));
} else {
tmp = (NaChar / (1.0 + Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / 2.0);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if NaChar <= -1.5e+145: tmp = (NdChar / 2.0) + (NaChar / (1.0 + math.exp((((Vef + EAccept) - mu) / KbT)))) elif (NaChar <= -7.5e-61) or (not (NaChar <= -2.3e-126) and (NaChar <= 1.15e-30)): tmp = (NaChar / (2.0 + (EAccept / KbT))) - (NdChar / (-1.0 - math.exp(((EDonor - ((Ec - Vef) - mu)) / KbT)))) else: tmp = (NaChar / (1.0 + math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / 2.0) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (NaChar <= -1.5e+145) tmp = Float64(Float64(NdChar / 2.0) + Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(Vef + EAccept) - mu) / KbT))))); elseif ((NaChar <= -7.5e-61) || (!(NaChar <= -2.3e-126) && (NaChar <= 1.15e-30))) tmp = Float64(Float64(NaChar / Float64(2.0 + Float64(EAccept / KbT))) - Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(EDonor - Float64(Float64(Ec - Vef) - mu)) / KbT))))); else tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - 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 (NaChar <= -1.5e+145) tmp = (NdChar / 2.0) + (NaChar / (1.0 + exp((((Vef + EAccept) - mu) / KbT)))); elseif ((NaChar <= -7.5e-61) || (~((NaChar <= -2.3e-126)) && (NaChar <= 1.15e-30))) tmp = (NaChar / (2.0 + (EAccept / KbT))) - (NdChar / (-1.0 - exp(((EDonor - ((Ec - Vef) - mu)) / KbT)))); else tmp = (NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / 2.0); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[NaChar, -1.5e+145], N[(N[(NdChar / 2.0), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Exp[N[(N[(N[(Vef + EAccept), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[Or[LessEqual[NaChar, -7.5e-61], And[N[Not[LessEqual[NaChar, -2.3e-126]], $MachinePrecision], LessEqual[NaChar, 1.15e-30]]], N[(N[(NaChar / N[(2.0 + N[(EAccept / KbT), $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], N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NaChar \leq -1.5 \cdot 10^{+145}:\\
\;\;\;\;\frac{NdChar}{2} + \frac{NaChar}{1 + e^{\frac{\left(Vef + EAccept\right) - mu}{KbT}}}\\
\mathbf{elif}\;NaChar \leq -7.5 \cdot 10^{-61} \lor \neg \left(NaChar \leq -2.3 \cdot 10^{-126}\right) \land NaChar \leq 1.15 \cdot 10^{-30}:\\
\;\;\;\;\frac{NaChar}{2 + \frac{EAccept}{KbT}} - \frac{NdChar}{-1 - e^{\frac{EDonor - \left(\left(Ec - Vef\right) - mu\right)}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}} + \frac{NdChar}{2}\\
\end{array}
\end{array}
if NaChar < -1.5000000000000001e145Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 80.6%
Taylor expanded in Vef around 0 68.8%
Taylor expanded in Ev around 0 68.3%
if -1.5000000000000001e145 < NaChar < -7.50000000000000047e-61 or -2.30000000000000011e-126 < NaChar < 1.14999999999999992e-30Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 72.7%
Taylor expanded in EAccept around 0 67.1%
if -7.50000000000000047e-61 < NaChar < -2.30000000000000011e-126 or 1.14999999999999992e-30 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 85.8%
Taylor expanded in Vef around 0 64.7%
Final simplification66.4%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (or (<= NdChar -7e+145) (not (<= NdChar 3.4e-30)))
(-
(/ NaChar (+ 2.0 (/ EAccept KbT)))
(/ NdChar (- -1.0 (exp (/ (- EDonor (- (- Ec Vef) mu)) KbT)))))
(+
(/ NaChar (+ 1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT))))
(/ NdChar (- (+ (/ Vef KbT) (+ (/ EDonor KbT) 2.0)) (/ 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 ((NdChar <= -7e+145) || !(NdChar <= 3.4e-30)) {
tmp = (NaChar / (2.0 + (EAccept / KbT))) - (NdChar / (-1.0 - exp(((EDonor - ((Ec - Vef) - mu)) / KbT))));
} else {
tmp = (NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / (((Vef / KbT) + ((EDonor / KbT) + 2.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) :: tmp
if ((ndchar <= (-7d+145)) .or. (.not. (ndchar <= 3.4d-30))) then
tmp = (nachar / (2.0d0 + (eaccept / kbt))) - (ndchar / ((-1.0d0) - exp(((edonor - ((ec - vef) - mu)) / kbt))))
else
tmp = (nachar / (1.0d0 + exp(((vef - ((mu - eaccept) - ev)) / kbt)))) + (ndchar / (((vef / kbt) + ((edonor / kbt) + 2.0d0)) - (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 ((NdChar <= -7e+145) || !(NdChar <= 3.4e-30)) {
tmp = (NaChar / (2.0 + (EAccept / KbT))) - (NdChar / (-1.0 - Math.exp(((EDonor - ((Ec - Vef) - mu)) / KbT))));
} else {
tmp = (NaChar / (1.0 + Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / (((Vef / KbT) + ((EDonor / KbT) + 2.0)) - (Ec / KbT)));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if (NdChar <= -7e+145) or not (NdChar <= 3.4e-30): tmp = (NaChar / (2.0 + (EAccept / KbT))) - (NdChar / (-1.0 - math.exp(((EDonor - ((Ec - Vef) - mu)) / KbT)))) else: tmp = (NaChar / (1.0 + math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / (((Vef / KbT) + ((EDonor / KbT) + 2.0)) - (Ec / KbT))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if ((NdChar <= -7e+145) || !(NdChar <= 3.4e-30)) tmp = Float64(Float64(NaChar / Float64(2.0 + Float64(EAccept / KbT))) - Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(EDonor - Float64(Float64(Ec - Vef) - mu)) / KbT))))); else tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT)))) + Float64(NdChar / Float64(Float64(Float64(Vef / KbT) + Float64(Float64(EDonor / KbT) + 2.0)) - Float64(Ec / KbT)))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if ((NdChar <= -7e+145) || ~((NdChar <= 3.4e-30))) tmp = (NaChar / (2.0 + (EAccept / KbT))) - (NdChar / (-1.0 - exp(((EDonor - ((Ec - Vef) - mu)) / KbT)))); else tmp = (NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / (((Vef / KbT) + ((EDonor / KbT) + 2.0)) - (Ec / KbT))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[Or[LessEqual[NdChar, -7e+145], N[Not[LessEqual[NdChar, 3.4e-30]], $MachinePrecision]], N[(N[(NaChar / N[(2.0 + N[(EAccept / KbT), $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], N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(N[(N[(Vef / KbT), $MachinePrecision] + N[(N[(EDonor / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision] - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NdChar \leq -7 \cdot 10^{+145} \lor \neg \left(NdChar \leq 3.4 \cdot 10^{-30}\right):\\
\;\;\;\;\frac{NaChar}{2 + \frac{EAccept}{KbT}} - \frac{NdChar}{-1 - e^{\frac{EDonor - \left(\left(Ec - Vef\right) - mu\right)}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}} + \frac{NdChar}{\left(\frac{Vef}{KbT} + \left(\frac{EDonor}{KbT} + 2\right)\right) - \frac{Ec}{KbT}}\\
\end{array}
\end{array}
if NdChar < -7.0000000000000002e145 or 3.4000000000000003e-30 < NdChar Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 71.2%
Taylor expanded in EAccept around 0 60.3%
if -7.0000000000000002e145 < NdChar < 3.4000000000000003e-30Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 67.2%
Taylor expanded in mu around 0 70.5%
associate-+r+70.5%
Simplified70.5%
Final simplification66.5%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (exp (/ (- EDonor (- (- Ec Vef) mu)) KbT))))
(if (<= NdChar -2.4e+162)
(-
(/ NdChar (+ 1.0 t_0))
(/
NaChar
(- (/ mu KbT) (+ 2.0 (+ (/ EAccept KbT) (+ (/ Vef KbT) (/ Ev KbT)))))))
(if (<= NdChar 1.12e-29)
(+
(/ NaChar (+ 1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT))))
(/ NdChar (- (+ (/ Vef KbT) (+ (/ EDonor KbT) 2.0)) (/ Ec KbT))))
(- (/ NaChar (+ 2.0 (/ EAccept 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 tmp;
if (NdChar <= -2.4e+162) {
tmp = (NdChar / (1.0 + t_0)) - (NaChar / ((mu / KbT) - (2.0 + ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT))))));
} else if (NdChar <= 1.12e-29) {
tmp = (NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / (((Vef / KbT) + ((EDonor / KbT) + 2.0)) - (Ec / KbT)));
} else {
tmp = (NaChar / (2.0 + (EAccept / 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) :: tmp
t_0 = exp(((edonor - ((ec - vef) - mu)) / kbt))
if (ndchar <= (-2.4d+162)) then
tmp = (ndchar / (1.0d0 + t_0)) - (nachar / ((mu / kbt) - (2.0d0 + ((eaccept / kbt) + ((vef / kbt) + (ev / kbt))))))
else if (ndchar <= 1.12d-29) then
tmp = (nachar / (1.0d0 + exp(((vef - ((mu - eaccept) - ev)) / kbt)))) + (ndchar / (((vef / kbt) + ((edonor / kbt) + 2.0d0)) - (ec / kbt)))
else
tmp = (nachar / (2.0d0 + (eaccept / 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 tmp;
if (NdChar <= -2.4e+162) {
tmp = (NdChar / (1.0 + t_0)) - (NaChar / ((mu / KbT) - (2.0 + ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT))))));
} else if (NdChar <= 1.12e-29) {
tmp = (NaChar / (1.0 + Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / (((Vef / KbT) + ((EDonor / KbT) + 2.0)) - (Ec / KbT)));
} else {
tmp = (NaChar / (2.0 + (EAccept / 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)) tmp = 0 if NdChar <= -2.4e+162: tmp = (NdChar / (1.0 + t_0)) - (NaChar / ((mu / KbT) - (2.0 + ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))))) elif NdChar <= 1.12e-29: tmp = (NaChar / (1.0 + math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / (((Vef / KbT) + ((EDonor / KbT) + 2.0)) - (Ec / KbT))) else: tmp = (NaChar / (2.0 + (EAccept / 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)) tmp = 0.0 if (NdChar <= -2.4e+162) tmp = Float64(Float64(NdChar / Float64(1.0 + t_0)) - Float64(NaChar / Float64(Float64(mu / KbT) - Float64(2.0 + Float64(Float64(EAccept / KbT) + Float64(Float64(Vef / KbT) + Float64(Ev / KbT))))))); elseif (NdChar <= 1.12e-29) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT)))) + Float64(NdChar / Float64(Float64(Float64(Vef / KbT) + Float64(Float64(EDonor / KbT) + 2.0)) - Float64(Ec / KbT)))); else tmp = Float64(Float64(NaChar / Float64(2.0 + Float64(EAccept / 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)); tmp = 0.0; if (NdChar <= -2.4e+162) tmp = (NdChar / (1.0 + t_0)) - (NaChar / ((mu / KbT) - (2.0 + ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))))); elseif (NdChar <= 1.12e-29) tmp = (NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / (((Vef / KbT) + ((EDonor / KbT) + 2.0)) - (Ec / KbT))); else tmp = (NaChar / (2.0 + (EAccept / 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]}, If[LessEqual[NdChar, -2.4e+162], N[(N[(NdChar / N[(1.0 + t$95$0), $MachinePrecision]), $MachinePrecision] - N[(NaChar / N[(N[(mu / KbT), $MachinePrecision] - N[(2.0 + N[(N[(EAccept / KbT), $MachinePrecision] + N[(N[(Vef / KbT), $MachinePrecision] + N[(Ev / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NdChar, 1.12e-29], N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(N[(N[(Vef / KbT), $MachinePrecision] + N[(N[(EDonor / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision] - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar / N[(2.0 + N[(EAccept / KbT), $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}}\\
\mathbf{if}\;NdChar \leq -2.4 \cdot 10^{+162}:\\
\;\;\;\;\frac{NdChar}{1 + t\_0} - \frac{NaChar}{\frac{mu}{KbT} - \left(2 + \left(\frac{EAccept}{KbT} + \left(\frac{Vef}{KbT} + \frac{Ev}{KbT}\right)\right)\right)}\\
\mathbf{elif}\;NdChar \leq 1.12 \cdot 10^{-29}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}} + \frac{NdChar}{\left(\frac{Vef}{KbT} + \left(\frac{EDonor}{KbT} + 2\right)\right) - \frac{Ec}{KbT}}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{2 + \frac{EAccept}{KbT}} - \frac{NdChar}{-1 - t\_0}\\
\end{array}
\end{array}
if NdChar < -2.40000000000000009e162Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 64.7%
if -2.40000000000000009e162 < NdChar < 1.11999999999999995e-29Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 66.6%
Taylor expanded in mu around 0 69.8%
associate-+r+69.8%
Simplified69.8%
if 1.11999999999999995e-29 < NdChar Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 74.6%
Taylor expanded in EAccept around 0 63.2%
Final simplification67.4%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (<= NaChar -5.8e+116)
(+ (/ NdChar 2.0) (/ NaChar (+ 1.0 (exp (/ (- (+ Vef EAccept) mu) KbT)))))
(if (or (<= NaChar -1.1e-62)
(and (not (<= NaChar -9e-133)) (<= NaChar 4.8e-30)))
(-
(/ NaChar 2.0)
(/ NdChar (- -1.0 (exp (/ (- EDonor (- (- Ec Vef) mu)) KbT)))))
(+
(/ NaChar (+ 1.0 (exp (/ (- Vef (- (- mu EAccept) 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 (NaChar <= -5.8e+116) {
tmp = (NdChar / 2.0) + (NaChar / (1.0 + exp((((Vef + EAccept) - mu) / KbT))));
} else if ((NaChar <= -1.1e-62) || (!(NaChar <= -9e-133) && (NaChar <= 4.8e-30))) {
tmp = (NaChar / 2.0) - (NdChar / (-1.0 - exp(((EDonor - ((Ec - Vef) - mu)) / KbT))));
} else {
tmp = (NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - 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 (nachar <= (-5.8d+116)) then
tmp = (ndchar / 2.0d0) + (nachar / (1.0d0 + exp((((vef + eaccept) - mu) / kbt))))
else if ((nachar <= (-1.1d-62)) .or. (.not. (nachar <= (-9d-133))) .and. (nachar <= 4.8d-30)) then
tmp = (nachar / 2.0d0) - (ndchar / ((-1.0d0) - exp(((edonor - ((ec - vef) - mu)) / kbt))))
else
tmp = (nachar / (1.0d0 + exp(((vef - ((mu - eaccept) - 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 (NaChar <= -5.8e+116) {
tmp = (NdChar / 2.0) + (NaChar / (1.0 + Math.exp((((Vef + EAccept) - mu) / KbT))));
} else if ((NaChar <= -1.1e-62) || (!(NaChar <= -9e-133) && (NaChar <= 4.8e-30))) {
tmp = (NaChar / 2.0) - (NdChar / (-1.0 - Math.exp(((EDonor - ((Ec - Vef) - mu)) / KbT))));
} else {
tmp = (NaChar / (1.0 + Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / 2.0);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if NaChar <= -5.8e+116: tmp = (NdChar / 2.0) + (NaChar / (1.0 + math.exp((((Vef + EAccept) - mu) / KbT)))) elif (NaChar <= -1.1e-62) or (not (NaChar <= -9e-133) and (NaChar <= 4.8e-30)): tmp = (NaChar / 2.0) - (NdChar / (-1.0 - math.exp(((EDonor - ((Ec - Vef) - mu)) / KbT)))) else: tmp = (NaChar / (1.0 + math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / 2.0) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (NaChar <= -5.8e+116) tmp = Float64(Float64(NdChar / 2.0) + Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(Vef + EAccept) - mu) / KbT))))); elseif ((NaChar <= -1.1e-62) || (!(NaChar <= -9e-133) && (NaChar <= 4.8e-30))) tmp = Float64(Float64(NaChar / 2.0) - Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(EDonor - Float64(Float64(Ec - Vef) - mu)) / KbT))))); else tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - 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 (NaChar <= -5.8e+116) tmp = (NdChar / 2.0) + (NaChar / (1.0 + exp((((Vef + EAccept) - mu) / KbT)))); elseif ((NaChar <= -1.1e-62) || (~((NaChar <= -9e-133)) && (NaChar <= 4.8e-30))) tmp = (NaChar / 2.0) - (NdChar / (-1.0 - exp(((EDonor - ((Ec - Vef) - mu)) / KbT)))); else tmp = (NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / 2.0); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[NaChar, -5.8e+116], N[(N[(NdChar / 2.0), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Exp[N[(N[(N[(Vef + EAccept), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[Or[LessEqual[NaChar, -1.1e-62], And[N[Not[LessEqual[NaChar, -9e-133]], $MachinePrecision], LessEqual[NaChar, 4.8e-30]]], 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], N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NaChar \leq -5.8 \cdot 10^{+116}:\\
\;\;\;\;\frac{NdChar}{2} + \frac{NaChar}{1 + e^{\frac{\left(Vef + EAccept\right) - mu}{KbT}}}\\
\mathbf{elif}\;NaChar \leq -1.1 \cdot 10^{-62} \lor \neg \left(NaChar \leq -9 \cdot 10^{-133}\right) \land NaChar \leq 4.8 \cdot 10^{-30}:\\
\;\;\;\;\frac{NaChar}{2} - \frac{NdChar}{-1 - e^{\frac{EDonor - \left(\left(Ec - Vef\right) - mu\right)}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}} + \frac{NdChar}{2}\\
\end{array}
\end{array}
if NaChar < -5.8000000000000003e116Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 80.0%
Taylor expanded in Vef around 0 67.1%
Taylor expanded in Ev around 0 66.6%
if -5.8000000000000003e116 < NaChar < -1.10000000000000009e-62 or -9.00000000000000019e-133 < NaChar < 4.7999999999999997e-30Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 55.9%
if -1.10000000000000009e-62 < NaChar < -9.00000000000000019e-133 or 4.7999999999999997e-30 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 84.8%
Taylor expanded in Vef around 0 64.0%
Final simplification60.1%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (or (<= NdChar -4.4e+144) (not (<= NdChar 7.6e-30)))
(-
(/ NaChar (+ 2.0 (/ EAccept KbT)))
(/ NdChar (- -1.0 (exp (/ (- EDonor (- (- Ec Vef) mu)) KbT)))))
(+
(/ NaChar (+ 1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT))))
(/ NdChar (- (+ 2.0 (/ mu KbT)) (/ 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 ((NdChar <= -4.4e+144) || !(NdChar <= 7.6e-30)) {
tmp = (NaChar / (2.0 + (EAccept / KbT))) - (NdChar / (-1.0 - exp(((EDonor - ((Ec - Vef) - mu)) / KbT))));
} else {
tmp = (NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / ((2.0 + (mu / KbT)) - (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 ((ndchar <= (-4.4d+144)) .or. (.not. (ndchar <= 7.6d-30))) then
tmp = (nachar / (2.0d0 + (eaccept / kbt))) - (ndchar / ((-1.0d0) - exp(((edonor - ((ec - vef) - mu)) / kbt))))
else
tmp = (nachar / (1.0d0 + exp(((vef - ((mu - eaccept) - ev)) / kbt)))) + (ndchar / ((2.0d0 + (mu / kbt)) - (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 ((NdChar <= -4.4e+144) || !(NdChar <= 7.6e-30)) {
tmp = (NaChar / (2.0 + (EAccept / KbT))) - (NdChar / (-1.0 - Math.exp(((EDonor - ((Ec - Vef) - mu)) / KbT))));
} else {
tmp = (NaChar / (1.0 + Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / ((2.0 + (mu / KbT)) - (Ec / KbT)));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if (NdChar <= -4.4e+144) or not (NdChar <= 7.6e-30): tmp = (NaChar / (2.0 + (EAccept / KbT))) - (NdChar / (-1.0 - math.exp(((EDonor - ((Ec - Vef) - mu)) / KbT)))) else: tmp = (NaChar / (1.0 + math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / ((2.0 + (mu / KbT)) - (Ec / KbT))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if ((NdChar <= -4.4e+144) || !(NdChar <= 7.6e-30)) tmp = Float64(Float64(NaChar / Float64(2.0 + Float64(EAccept / KbT))) - Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(EDonor - Float64(Float64(Ec - Vef) - mu)) / KbT))))); else tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT)))) + Float64(NdChar / Float64(Float64(2.0 + Float64(mu / KbT)) - Float64(Ec / KbT)))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if ((NdChar <= -4.4e+144) || ~((NdChar <= 7.6e-30))) tmp = (NaChar / (2.0 + (EAccept / KbT))) - (NdChar / (-1.0 - exp(((EDonor - ((Ec - Vef) - mu)) / KbT)))); else tmp = (NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / ((2.0 + (mu / KbT)) - (Ec / KbT))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[Or[LessEqual[NdChar, -4.4e+144], N[Not[LessEqual[NdChar, 7.6e-30]], $MachinePrecision]], N[(N[(NaChar / N[(2.0 + N[(EAccept / KbT), $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], N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(N[(2.0 + N[(mu / KbT), $MachinePrecision]), $MachinePrecision] - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NdChar \leq -4.4 \cdot 10^{+144} \lor \neg \left(NdChar \leq 7.6 \cdot 10^{-30}\right):\\
\;\;\;\;\frac{NaChar}{2 + \frac{EAccept}{KbT}} - \frac{NdChar}{-1 - e^{\frac{EDonor - \left(\left(Ec - Vef\right) - mu\right)}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}} + \frac{NdChar}{\left(2 + \frac{mu}{KbT}\right) - \frac{Ec}{KbT}}\\
\end{array}
\end{array}
if NdChar < -4.39999999999999976e144 or 7.6000000000000006e-30 < NdChar Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 71.2%
Taylor expanded in EAccept around 0 60.3%
if -4.39999999999999976e144 < NdChar < 7.6000000000000006e-30Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 67.2%
Taylor expanded in EDonor around inf 68.2%
associate-/r*70.7%
associate-/r*70.2%
Simplified70.2%
Taylor expanded in mu around inf 69.9%
Final simplification66.1%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NdChar (+ 1.0 (exp (/ Vef KbT))))))
(if (<= KbT -1.8e-92)
(+ (/ NaChar (+ 1.0 (exp (/ EAccept KbT)))) (/ NdChar 2.0))
(if (<= KbT 5.8e-295)
(+ t_0 (/ NaChar (/ Ev KbT)))
(if (or (<= KbT 7e-198) (not (<= KbT 1.36e-152)))
(+ (* NdChar 0.5) (/ NaChar (+ 1.0 (exp (/ Ev KbT)))))
(+ t_0 (/ (* KbT NaChar) Vef)))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (1.0 + exp((Vef / KbT)));
double tmp;
if (KbT <= -1.8e-92) {
tmp = (NaChar / (1.0 + exp((EAccept / KbT)))) + (NdChar / 2.0);
} else if (KbT <= 5.8e-295) {
tmp = t_0 + (NaChar / (Ev / KbT));
} else if ((KbT <= 7e-198) || !(KbT <= 1.36e-152)) {
tmp = (NdChar * 0.5) + (NaChar / (1.0 + exp((Ev / KbT))));
} else {
tmp = t_0 + ((KbT * NaChar) / Vef);
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: tmp
t_0 = ndchar / (1.0d0 + exp((vef / kbt)))
if (kbt <= (-1.8d-92)) then
tmp = (nachar / (1.0d0 + exp((eaccept / kbt)))) + (ndchar / 2.0d0)
else if (kbt <= 5.8d-295) then
tmp = t_0 + (nachar / (ev / kbt))
else if ((kbt <= 7d-198) .or. (.not. (kbt <= 1.36d-152))) then
tmp = (ndchar * 0.5d0) + (nachar / (1.0d0 + exp((ev / kbt))))
else
tmp = t_0 + ((kbt * nachar) / vef)
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (1.0 + Math.exp((Vef / KbT)));
double tmp;
if (KbT <= -1.8e-92) {
tmp = (NaChar / (1.0 + Math.exp((EAccept / KbT)))) + (NdChar / 2.0);
} else if (KbT <= 5.8e-295) {
tmp = t_0 + (NaChar / (Ev / KbT));
} else if ((KbT <= 7e-198) || !(KbT <= 1.36e-152)) {
tmp = (NdChar * 0.5) + (NaChar / (1.0 + Math.exp((Ev / KbT))));
} else {
tmp = t_0 + ((KbT * NaChar) / Vef);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NdChar / (1.0 + math.exp((Vef / KbT))) tmp = 0 if KbT <= -1.8e-92: tmp = (NaChar / (1.0 + math.exp((EAccept / KbT)))) + (NdChar / 2.0) elif KbT <= 5.8e-295: tmp = t_0 + (NaChar / (Ev / KbT)) elif (KbT <= 7e-198) or not (KbT <= 1.36e-152): tmp = (NdChar * 0.5) + (NaChar / (1.0 + math.exp((Ev / KbT)))) else: tmp = t_0 + ((KbT * NaChar) / Vef) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NdChar / Float64(1.0 + exp(Float64(Vef / KbT)))) tmp = 0.0 if (KbT <= -1.8e-92) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT)))) + Float64(NdChar / 2.0)); elseif (KbT <= 5.8e-295) tmp = Float64(t_0 + Float64(NaChar / Float64(Ev / KbT))); elseif ((KbT <= 7e-198) || !(KbT <= 1.36e-152)) tmp = Float64(Float64(NdChar * 0.5) + Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT))))); else tmp = Float64(t_0 + Float64(Float64(KbT * NaChar) / Vef)); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NdChar / (1.0 + exp((Vef / KbT))); tmp = 0.0; if (KbT <= -1.8e-92) tmp = (NaChar / (1.0 + exp((EAccept / KbT)))) + (NdChar / 2.0); elseif (KbT <= 5.8e-295) tmp = t_0 + (NaChar / (Ev / KbT)); elseif ((KbT <= 7e-198) || ~((KbT <= 1.36e-152))) tmp = (NdChar * 0.5) + (NaChar / (1.0 + exp((Ev / KbT)))); else tmp = t_0 + ((KbT * NaChar) / Vef); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NdChar / N[(1.0 + N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[KbT, -1.8e-92], N[(N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[KbT, 5.8e-295], N[(t$95$0 + N[(NaChar / N[(Ev / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[Or[LessEqual[KbT, 7e-198], N[Not[LessEqual[KbT, 1.36e-152]], $MachinePrecision]], N[(N[(NdChar * 0.5), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(t$95$0 + N[(N[(KbT * NaChar), $MachinePrecision] / Vef), $MachinePrecision]), $MachinePrecision]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{1 + e^{\frac{Vef}{KbT}}}\\
\mathbf{if}\;KbT \leq -1.8 \cdot 10^{-92}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}} + \frac{NdChar}{2}\\
\mathbf{elif}\;KbT \leq 5.8 \cdot 10^{-295}:\\
\;\;\;\;t\_0 + \frac{NaChar}{\frac{Ev}{KbT}}\\
\mathbf{elif}\;KbT \leq 7 \cdot 10^{-198} \lor \neg \left(KbT \leq 1.36 \cdot 10^{-152}\right):\\
\;\;\;\;NdChar \cdot 0.5 + \frac{NaChar}{1 + e^{\frac{Ev}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;t\_0 + \frac{KbT \cdot NaChar}{Vef}\\
\end{array}
\end{array}
if KbT < -1.80000000000000008e-92Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 88.1%
Taylor expanded in Vef around 0 64.0%
Taylor expanded in EAccept around inf 48.7%
if -1.80000000000000008e-92 < KbT < 5.8000000000000003e-295Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 70.0%
Taylor expanded in KbT around inf 33.8%
Taylor expanded in Ev around inf 43.3%
if 5.8000000000000003e-295 < KbT < 7.0000000000000005e-198 or 1.3599999999999999e-152 < KbT Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 69.5%
Taylor expanded in KbT around inf 40.6%
if 7.0000000000000005e-198 < KbT < 1.3599999999999999e-152Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 76.5%
Taylor expanded in KbT around inf 40.8%
Taylor expanded in Vef around inf 50.7%
Final simplification44.1%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NdChar (+ 1.0 (exp (/ Vef KbT)))))
(t_1 (/ NaChar (+ 1.0 (exp (/ EAccept KbT))))))
(if (<= KbT -3.6e-92)
(+ t_1 (/ NdChar 2.0))
(if (<= KbT -5.6e-303)
(+ t_0 (/ NaChar (/ Ev KbT)))
(if (<= KbT 7e-199)
(- t_1 (/ (* NdChar KbT) Ec))
(if (<= KbT 6.8e-151)
(+ t_0 (/ (* KbT NaChar) Vef))
(+ (* NdChar 0.5) (/ NaChar (+ 1.0 (exp (/ Ev KbT)))))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (1.0 + exp((Vef / KbT)));
double t_1 = NaChar / (1.0 + exp((EAccept / KbT)));
double tmp;
if (KbT <= -3.6e-92) {
tmp = t_1 + (NdChar / 2.0);
} else if (KbT <= -5.6e-303) {
tmp = t_0 + (NaChar / (Ev / KbT));
} else if (KbT <= 7e-199) {
tmp = t_1 - ((NdChar * KbT) / Ec);
} else if (KbT <= 6.8e-151) {
tmp = t_0 + ((KbT * NaChar) / Vef);
} else {
tmp = (NdChar * 0.5) + (NaChar / (1.0 + exp((Ev / KbT))));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = ndchar / (1.0d0 + exp((vef / kbt)))
t_1 = nachar / (1.0d0 + exp((eaccept / kbt)))
if (kbt <= (-3.6d-92)) then
tmp = t_1 + (ndchar / 2.0d0)
else if (kbt <= (-5.6d-303)) then
tmp = t_0 + (nachar / (ev / kbt))
else if (kbt <= 7d-199) then
tmp = t_1 - ((ndchar * kbt) / ec)
else if (kbt <= 6.8d-151) then
tmp = t_0 + ((kbt * nachar) / vef)
else
tmp = (ndchar * 0.5d0) + (nachar / (1.0d0 + exp((ev / kbt))))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (1.0 + Math.exp((Vef / KbT)));
double t_1 = NaChar / (1.0 + Math.exp((EAccept / KbT)));
double tmp;
if (KbT <= -3.6e-92) {
tmp = t_1 + (NdChar / 2.0);
} else if (KbT <= -5.6e-303) {
tmp = t_0 + (NaChar / (Ev / KbT));
} else if (KbT <= 7e-199) {
tmp = t_1 - ((NdChar * KbT) / Ec);
} else if (KbT <= 6.8e-151) {
tmp = t_0 + ((KbT * NaChar) / Vef);
} else {
tmp = (NdChar * 0.5) + (NaChar / (1.0 + Math.exp((Ev / KbT))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NdChar / (1.0 + math.exp((Vef / KbT))) t_1 = NaChar / (1.0 + math.exp((EAccept / KbT))) tmp = 0 if KbT <= -3.6e-92: tmp = t_1 + (NdChar / 2.0) elif KbT <= -5.6e-303: tmp = t_0 + (NaChar / (Ev / KbT)) elif KbT <= 7e-199: tmp = t_1 - ((NdChar * KbT) / Ec) elif KbT <= 6.8e-151: tmp = t_0 + ((KbT * NaChar) / Vef) else: tmp = (NdChar * 0.5) + (NaChar / (1.0 + math.exp((Ev / KbT)))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NdChar / Float64(1.0 + exp(Float64(Vef / KbT)))) t_1 = Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT)))) tmp = 0.0 if (KbT <= -3.6e-92) tmp = Float64(t_1 + Float64(NdChar / 2.0)); elseif (KbT <= -5.6e-303) tmp = Float64(t_0 + Float64(NaChar / Float64(Ev / KbT))); elseif (KbT <= 7e-199) tmp = Float64(t_1 - Float64(Float64(NdChar * KbT) / Ec)); elseif (KbT <= 6.8e-151) tmp = Float64(t_0 + Float64(Float64(KbT * NaChar) / Vef)); else tmp = Float64(Float64(NdChar * 0.5) + Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT))))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NdChar / (1.0 + exp((Vef / KbT))); t_1 = NaChar / (1.0 + exp((EAccept / KbT))); tmp = 0.0; if (KbT <= -3.6e-92) tmp = t_1 + (NdChar / 2.0); elseif (KbT <= -5.6e-303) tmp = t_0 + (NaChar / (Ev / KbT)); elseif (KbT <= 7e-199) tmp = t_1 - ((NdChar * KbT) / Ec); elseif (KbT <= 6.8e-151) tmp = t_0 + ((KbT * NaChar) / Vef); else tmp = (NdChar * 0.5) + (NaChar / (1.0 + exp((Ev / KbT)))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NdChar / N[(1.0 + N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[KbT, -3.6e-92], N[(t$95$1 + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[KbT, -5.6e-303], N[(t$95$0 + N[(NaChar / N[(Ev / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[KbT, 7e-199], N[(t$95$1 - N[(N[(NdChar * KbT), $MachinePrecision] / Ec), $MachinePrecision]), $MachinePrecision], If[LessEqual[KbT, 6.8e-151], N[(t$95$0 + N[(N[(KbT * NaChar), $MachinePrecision] / Vef), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar * 0.5), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{1 + e^{\frac{Vef}{KbT}}}\\
t_1 := \frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}}\\
\mathbf{if}\;KbT \leq -3.6 \cdot 10^{-92}:\\
\;\;\;\;t\_1 + \frac{NdChar}{2}\\
\mathbf{elif}\;KbT \leq -5.6 \cdot 10^{-303}:\\
\;\;\;\;t\_0 + \frac{NaChar}{\frac{Ev}{KbT}}\\
\mathbf{elif}\;KbT \leq 7 \cdot 10^{-199}:\\
\;\;\;\;t\_1 - \frac{NdChar \cdot KbT}{Ec}\\
\mathbf{elif}\;KbT \leq 6.8 \cdot 10^{-151}:\\
\;\;\;\;t\_0 + \frac{KbT \cdot NaChar}{Vef}\\
\mathbf{else}:\\
\;\;\;\;NdChar \cdot 0.5 + \frac{NaChar}{1 + e^{\frac{Ev}{KbT}}}\\
\end{array}
\end{array}
if KbT < -3.60000000000000016e-92Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 88.1%
Taylor expanded in Vef around 0 64.0%
Taylor expanded in EAccept around inf 48.7%
if -3.60000000000000016e-92 < KbT < -5.6e-303Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 68.5%
Taylor expanded in KbT around inf 35.0%
Taylor expanded in Ev around inf 45.0%
if -5.6e-303 < KbT < 6.9999999999999998e-199Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 50.5%
Taylor expanded in EDonor around inf 50.2%
associate-/r*54.4%
associate-/r*54.4%
Simplified54.4%
Taylor expanded in Ec around inf 55.8%
associate-*r/55.8%
mul-1-neg55.8%
*-commutative55.8%
Simplified55.8%
Taylor expanded in EAccept around inf 43.5%
if 6.9999999999999998e-199 < KbT < 6.8000000000000005e-151Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 76.5%
Taylor expanded in KbT around inf 40.8%
Taylor expanded in Vef around inf 50.7%
if 6.8000000000000005e-151 < KbT Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 68.4%
Taylor expanded in KbT around inf 41.3%
Final simplification44.9%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0
(+
(/ NaChar (+ 1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT))))
(/ NdChar 2.0))))
(if (<= NaChar -3.1e-213)
t_0
(if (<= NaChar 7.5e-302)
(+ (/ NdChar (+ 1.0 (exp (/ EDonor KbT)))) (/ NaChar 2.0))
(if (<= NaChar 9.8e-33)
(+ (/ NdChar (+ 1.0 (exp (/ Vef KbT)))) (* KbT (/ NaChar Vef)))
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 - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / 2.0);
double tmp;
if (NaChar <= -3.1e-213) {
tmp = t_0;
} else if (NaChar <= 7.5e-302) {
tmp = (NdChar / (1.0 + exp((EDonor / KbT)))) + (NaChar / 2.0);
} else if (NaChar <= 9.8e-33) {
tmp = (NdChar / (1.0 + exp((Vef / KbT)))) + (KbT * (NaChar / Vef));
} else {
tmp = t_0;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: tmp
t_0 = (nachar / (1.0d0 + exp(((vef - ((mu - eaccept) - ev)) / kbt)))) + (ndchar / 2.0d0)
if (nachar <= (-3.1d-213)) then
tmp = t_0
else if (nachar <= 7.5d-302) then
tmp = (ndchar / (1.0d0 + exp((edonor / kbt)))) + (nachar / 2.0d0)
else if (nachar <= 9.8d-33) then
tmp = (ndchar / (1.0d0 + exp((vef / kbt)))) + (kbt * (nachar / vef))
else
tmp = t_0
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar / (1.0 + Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / 2.0);
double tmp;
if (NaChar <= -3.1e-213) {
tmp = t_0;
} else if (NaChar <= 7.5e-302) {
tmp = (NdChar / (1.0 + Math.exp((EDonor / KbT)))) + (NaChar / 2.0);
} else if (NaChar <= 9.8e-33) {
tmp = (NdChar / (1.0 + Math.exp((Vef / KbT)))) + (KbT * (NaChar / Vef));
} else {
tmp = t_0;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = (NaChar / (1.0 + math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / 2.0) tmp = 0 if NaChar <= -3.1e-213: tmp = t_0 elif NaChar <= 7.5e-302: tmp = (NdChar / (1.0 + math.exp((EDonor / KbT)))) + (NaChar / 2.0) elif NaChar <= 9.8e-33: tmp = (NdChar / (1.0 + math.exp((Vef / KbT)))) + (KbT * (NaChar / Vef)) else: tmp = t_0 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT)))) + Float64(NdChar / 2.0)) tmp = 0.0 if (NaChar <= -3.1e-213) tmp = t_0; elseif (NaChar <= 7.5e-302) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(EDonor / KbT)))) + Float64(NaChar / 2.0)); elseif (NaChar <= 9.8e-33) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Vef / KbT)))) + Float64(KbT * Float64(NaChar / Vef))); else tmp = 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 - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / 2.0); tmp = 0.0; if (NaChar <= -3.1e-213) tmp = t_0; elseif (NaChar <= 7.5e-302) tmp = (NdChar / (1.0 + exp((EDonor / KbT)))) + (NaChar / 2.0); elseif (NaChar <= 9.8e-33) tmp = (NdChar / (1.0 + exp((Vef / KbT)))) + (KbT * (NaChar / Vef)); else tmp = t_0; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -3.1e-213], t$95$0, If[LessEqual[NaChar, 7.5e-302], N[(N[(NdChar / N[(1.0 + N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / 2.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 9.8e-33], N[(N[(NdChar / N[(1.0 + N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(KbT * N[(NaChar / Vef), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$0]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}} + \frac{NdChar}{2}\\
\mathbf{if}\;NaChar \leq -3.1 \cdot 10^{-213}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;NaChar \leq 7.5 \cdot 10^{-302}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{EDonor}{KbT}}} + \frac{NaChar}{2}\\
\mathbf{elif}\;NaChar \leq 9.8 \cdot 10^{-33}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{Vef}{KbT}}} + KbT \cdot \frac{NaChar}{Vef}\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if NaChar < -3.0999999999999998e-213 or 9.7999999999999996e-33 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 80.7%
Taylor expanded in Vef around 0 56.3%
if -3.0999999999999998e-213 < NaChar < 7.49999999999999998e-302Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 74.0%
Taylor expanded in EDonor around inf 59.7%
if 7.49999999999999998e-302 < NaChar < 9.7999999999999996e-33Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 71.3%
Taylor expanded in KbT around inf 48.9%
Taylor expanded in Vef around inf 47.6%
associate-/l*49.5%
Simplified49.5%
Final simplification55.2%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0
(+
(/ NdChar 2.0)
(/ NaChar (+ 1.0 (exp (/ (- (+ Vef EAccept) mu) KbT)))))))
(if (<= NaChar -6.6e-212)
t_0
(if (<= NaChar 1.9e-302)
(+ (/ NdChar (+ 1.0 (exp (/ EDonor KbT)))) (/ NaChar 2.0))
(if (<= NaChar 1.22e-32)
(+ (/ NdChar (+ 1.0 (exp (/ Vef KbT)))) (* KbT (/ NaChar Vef)))
t_0)))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NdChar / 2.0) + (NaChar / (1.0 + exp((((Vef + EAccept) - mu) / KbT))));
double tmp;
if (NaChar <= -6.6e-212) {
tmp = t_0;
} else if (NaChar <= 1.9e-302) {
tmp = (NdChar / (1.0 + exp((EDonor / KbT)))) + (NaChar / 2.0);
} else if (NaChar <= 1.22e-32) {
tmp = (NdChar / (1.0 + exp((Vef / KbT)))) + (KbT * (NaChar / Vef));
} else {
tmp = t_0;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: tmp
t_0 = (ndchar / 2.0d0) + (nachar / (1.0d0 + exp((((vef + eaccept) - mu) / kbt))))
if (nachar <= (-6.6d-212)) then
tmp = t_0
else if (nachar <= 1.9d-302) then
tmp = (ndchar / (1.0d0 + exp((edonor / kbt)))) + (nachar / 2.0d0)
else if (nachar <= 1.22d-32) then
tmp = (ndchar / (1.0d0 + exp((vef / kbt)))) + (kbt * (nachar / vef))
else
tmp = t_0
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NdChar / 2.0) + (NaChar / (1.0 + Math.exp((((Vef + EAccept) - mu) / KbT))));
double tmp;
if (NaChar <= -6.6e-212) {
tmp = t_0;
} else if (NaChar <= 1.9e-302) {
tmp = (NdChar / (1.0 + Math.exp((EDonor / KbT)))) + (NaChar / 2.0);
} else if (NaChar <= 1.22e-32) {
tmp = (NdChar / (1.0 + Math.exp((Vef / KbT)))) + (KbT * (NaChar / Vef));
} else {
tmp = t_0;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = (NdChar / 2.0) + (NaChar / (1.0 + math.exp((((Vef + EAccept) - mu) / KbT)))) tmp = 0 if NaChar <= -6.6e-212: tmp = t_0 elif NaChar <= 1.9e-302: tmp = (NdChar / (1.0 + math.exp((EDonor / KbT)))) + (NaChar / 2.0) elif NaChar <= 1.22e-32: tmp = (NdChar / (1.0 + math.exp((Vef / KbT)))) + (KbT * (NaChar / Vef)) else: tmp = t_0 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(NdChar / 2.0) + Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(Vef + EAccept) - mu) / KbT))))) tmp = 0.0 if (NaChar <= -6.6e-212) tmp = t_0; elseif (NaChar <= 1.9e-302) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(EDonor / KbT)))) + Float64(NaChar / 2.0)); elseif (NaChar <= 1.22e-32) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Vef / KbT)))) + Float64(KbT * Float64(NaChar / Vef))); else tmp = t_0; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = (NdChar / 2.0) + (NaChar / (1.0 + exp((((Vef + EAccept) - mu) / KbT)))); tmp = 0.0; if (NaChar <= -6.6e-212) tmp = t_0; elseif (NaChar <= 1.9e-302) tmp = (NdChar / (1.0 + exp((EDonor / KbT)))) + (NaChar / 2.0); elseif (NaChar <= 1.22e-32) tmp = (NdChar / (1.0 + exp((Vef / KbT)))) + (KbT * (NaChar / Vef)); else tmp = t_0; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(NdChar / 2.0), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Exp[N[(N[(N[(Vef + EAccept), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -6.6e-212], t$95$0, If[LessEqual[NaChar, 1.9e-302], N[(N[(NdChar / N[(1.0 + N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / 2.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 1.22e-32], N[(N[(NdChar / N[(1.0 + N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(KbT * N[(NaChar / Vef), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$0]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{2} + \frac{NaChar}{1 + e^{\frac{\left(Vef + EAccept\right) - mu}{KbT}}}\\
\mathbf{if}\;NaChar \leq -6.6 \cdot 10^{-212}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;NaChar \leq 1.9 \cdot 10^{-302}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{EDonor}{KbT}}} + \frac{NaChar}{2}\\
\mathbf{elif}\;NaChar \leq 1.22 \cdot 10^{-32}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{Vef}{KbT}}} + KbT \cdot \frac{NaChar}{Vef}\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if NaChar < -6.6000000000000004e-212 or 1.22e-32 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 80.7%
Taylor expanded in Vef around 0 56.3%
Taylor expanded in Ev around 0 50.7%
if -6.6000000000000004e-212 < NaChar < 1.9e-302Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 74.0%
Taylor expanded in EDonor around inf 59.7%
if 1.9e-302 < NaChar < 1.22e-32Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 71.3%
Taylor expanded in KbT around inf 48.9%
Taylor expanded in Vef around inf 47.6%
associate-/l*49.5%
Simplified49.5%
Final simplification51.3%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (<= KbT -3.8e-92)
(+ (/ NaChar (+ 1.0 (exp (/ EAccept KbT)))) (/ NdChar 2.0))
(if (<= KbT 7.1e-295)
(+ (/ NdChar (+ 1.0 (exp (/ Vef KbT)))) (/ NaChar (/ Ev KbT)))
(+ (* NdChar 0.5) (/ NaChar (+ 1.0 (exp (/ Ev KbT))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (KbT <= -3.8e-92) {
tmp = (NaChar / (1.0 + exp((EAccept / KbT)))) + (NdChar / 2.0);
} else if (KbT <= 7.1e-295) {
tmp = (NdChar / (1.0 + exp((Vef / KbT)))) + (NaChar / (Ev / KbT));
} else {
tmp = (NdChar * 0.5) + (NaChar / (1.0 + exp((Ev / KbT))));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if (kbt <= (-3.8d-92)) then
tmp = (nachar / (1.0d0 + exp((eaccept / kbt)))) + (ndchar / 2.0d0)
else if (kbt <= 7.1d-295) then
tmp = (ndchar / (1.0d0 + exp((vef / kbt)))) + (nachar / (ev / kbt))
else
tmp = (ndchar * 0.5d0) + (nachar / (1.0d0 + exp((ev / kbt))))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (KbT <= -3.8e-92) {
tmp = (NaChar / (1.0 + Math.exp((EAccept / KbT)))) + (NdChar / 2.0);
} else if (KbT <= 7.1e-295) {
tmp = (NdChar / (1.0 + Math.exp((Vef / KbT)))) + (NaChar / (Ev / KbT));
} else {
tmp = (NdChar * 0.5) + (NaChar / (1.0 + Math.exp((Ev / KbT))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if KbT <= -3.8e-92: tmp = (NaChar / (1.0 + math.exp((EAccept / KbT)))) + (NdChar / 2.0) elif KbT <= 7.1e-295: tmp = (NdChar / (1.0 + math.exp((Vef / KbT)))) + (NaChar / (Ev / KbT)) else: tmp = (NdChar * 0.5) + (NaChar / (1.0 + math.exp((Ev / KbT)))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (KbT <= -3.8e-92) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT)))) + Float64(NdChar / 2.0)); elseif (KbT <= 7.1e-295) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Vef / KbT)))) + Float64(NaChar / Float64(Ev / KbT))); else tmp = Float64(Float64(NdChar * 0.5) + Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT))))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (KbT <= -3.8e-92) tmp = (NaChar / (1.0 + exp((EAccept / KbT)))) + (NdChar / 2.0); elseif (KbT <= 7.1e-295) tmp = (NdChar / (1.0 + exp((Vef / KbT)))) + (NaChar / (Ev / KbT)); else tmp = (NdChar * 0.5) + (NaChar / (1.0 + exp((Ev / KbT)))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[KbT, -3.8e-92], N[(N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[KbT, 7.1e-295], N[(N[(NdChar / N[(1.0 + N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(Ev / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar * 0.5), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;KbT \leq -3.8 \cdot 10^{-92}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}} + \frac{NdChar}{2}\\
\mathbf{elif}\;KbT \leq 7.1 \cdot 10^{-295}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{Vef}{KbT}}} + \frac{NaChar}{\frac{Ev}{KbT}}\\
\mathbf{else}:\\
\;\;\;\;NdChar \cdot 0.5 + \frac{NaChar}{1 + e^{\frac{Ev}{KbT}}}\\
\end{array}
\end{array}
if KbT < -3.8000000000000001e-92Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 88.1%
Taylor expanded in Vef around 0 64.0%
Taylor expanded in EAccept around inf 48.7%
if -3.8000000000000001e-92 < KbT < 7.09999999999999958e-295Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 70.0%
Taylor expanded in KbT around inf 33.8%
Taylor expanded in Ev around inf 43.3%
if 7.09999999999999958e-295 < KbT Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 69.1%
Taylor expanded in KbT around inf 37.9%
Final simplification42.3%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (<= KbT -1.3e-91)
(+ (/ NaChar (+ 1.0 (exp (/ EAccept KbT)))) (/ NdChar 2.0))
(if (<= KbT 1.2e-295)
(+ (/ NdChar (+ 1.0 (exp (/ Vef KbT)))) (* KbT (/ NaChar Ev)))
(+ (* NdChar 0.5) (/ NaChar (+ 1.0 (exp (/ Ev KbT))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (KbT <= -1.3e-91) {
tmp = (NaChar / (1.0 + exp((EAccept / KbT)))) + (NdChar / 2.0);
} else if (KbT <= 1.2e-295) {
tmp = (NdChar / (1.0 + exp((Vef / KbT)))) + (KbT * (NaChar / Ev));
} else {
tmp = (NdChar * 0.5) + (NaChar / (1.0 + exp((Ev / KbT))));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if (kbt <= (-1.3d-91)) then
tmp = (nachar / (1.0d0 + exp((eaccept / kbt)))) + (ndchar / 2.0d0)
else if (kbt <= 1.2d-295) then
tmp = (ndchar / (1.0d0 + exp((vef / kbt)))) + (kbt * (nachar / ev))
else
tmp = (ndchar * 0.5d0) + (nachar / (1.0d0 + exp((ev / kbt))))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (KbT <= -1.3e-91) {
tmp = (NaChar / (1.0 + Math.exp((EAccept / KbT)))) + (NdChar / 2.0);
} else if (KbT <= 1.2e-295) {
tmp = (NdChar / (1.0 + Math.exp((Vef / KbT)))) + (KbT * (NaChar / Ev));
} else {
tmp = (NdChar * 0.5) + (NaChar / (1.0 + Math.exp((Ev / KbT))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if KbT <= -1.3e-91: tmp = (NaChar / (1.0 + math.exp((EAccept / KbT)))) + (NdChar / 2.0) elif KbT <= 1.2e-295: tmp = (NdChar / (1.0 + math.exp((Vef / KbT)))) + (KbT * (NaChar / Ev)) else: tmp = (NdChar * 0.5) + (NaChar / (1.0 + math.exp((Ev / KbT)))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (KbT <= -1.3e-91) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT)))) + Float64(NdChar / 2.0)); elseif (KbT <= 1.2e-295) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Vef / KbT)))) + Float64(KbT * Float64(NaChar / Ev))); else tmp = Float64(Float64(NdChar * 0.5) + Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT))))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (KbT <= -1.3e-91) tmp = (NaChar / (1.0 + exp((EAccept / KbT)))) + (NdChar / 2.0); elseif (KbT <= 1.2e-295) tmp = (NdChar / (1.0 + exp((Vef / KbT)))) + (KbT * (NaChar / Ev)); else tmp = (NdChar * 0.5) + (NaChar / (1.0 + exp((Ev / KbT)))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[KbT, -1.3e-91], N[(N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[KbT, 1.2e-295], N[(N[(NdChar / N[(1.0 + N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(KbT * N[(NaChar / Ev), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar * 0.5), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;KbT \leq -1.3 \cdot 10^{-91}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}} + \frac{NdChar}{2}\\
\mathbf{elif}\;KbT \leq 1.2 \cdot 10^{-295}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{Vef}{KbT}}} + KbT \cdot \frac{NaChar}{Ev}\\
\mathbf{else}:\\
\;\;\;\;NdChar \cdot 0.5 + \frac{NaChar}{1 + e^{\frac{Ev}{KbT}}}\\
\end{array}
\end{array}
if KbT < -1.30000000000000007e-91Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 88.1%
Taylor expanded in Vef around 0 64.0%
Taylor expanded in EAccept around inf 48.7%
if -1.30000000000000007e-91 < KbT < 1.1999999999999999e-295Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 70.0%
Taylor expanded in KbT around inf 33.8%
Taylor expanded in Ev around inf 43.3%
associate-/l*41.1%
Simplified41.1%
if 1.1999999999999999e-295 < KbT Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 69.1%
Taylor expanded in KbT around inf 37.9%
Final simplification42.0%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (<= Ev -2.4e+114)
(+ (* NdChar 0.5) (/ NaChar (+ 1.0 (exp (/ Ev KbT)))))
(if (<= Ev -3e-139)
(+ (/ NdChar (+ 1.0 (exp (/ Vef KbT)))) (/ NaChar 2.0))
(+ (/ NaChar (+ 1.0 (exp (/ EAccept 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 (Ev <= -2.4e+114) {
tmp = (NdChar * 0.5) + (NaChar / (1.0 + exp((Ev / KbT))));
} else if (Ev <= -3e-139) {
tmp = (NdChar / (1.0 + exp((Vef / KbT)))) + (NaChar / 2.0);
} else {
tmp = (NaChar / (1.0 + exp((EAccept / 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 (ev <= (-2.4d+114)) then
tmp = (ndchar * 0.5d0) + (nachar / (1.0d0 + exp((ev / kbt))))
else if (ev <= (-3d-139)) then
tmp = (ndchar / (1.0d0 + exp((vef / kbt)))) + (nachar / 2.0d0)
else
tmp = (nachar / (1.0d0 + exp((eaccept / 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 (Ev <= -2.4e+114) {
tmp = (NdChar * 0.5) + (NaChar / (1.0 + Math.exp((Ev / KbT))));
} else if (Ev <= -3e-139) {
tmp = (NdChar / (1.0 + Math.exp((Vef / KbT)))) + (NaChar / 2.0);
} else {
tmp = (NaChar / (1.0 + Math.exp((EAccept / KbT)))) + (NdChar / 2.0);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if Ev <= -2.4e+114: tmp = (NdChar * 0.5) + (NaChar / (1.0 + math.exp((Ev / KbT)))) elif Ev <= -3e-139: tmp = (NdChar / (1.0 + math.exp((Vef / KbT)))) + (NaChar / 2.0) else: tmp = (NaChar / (1.0 + math.exp((EAccept / KbT)))) + (NdChar / 2.0) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (Ev <= -2.4e+114) tmp = Float64(Float64(NdChar * 0.5) + Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT))))); elseif (Ev <= -3e-139) 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(EAccept / 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 (Ev <= -2.4e+114) tmp = (NdChar * 0.5) + (NaChar / (1.0 + exp((Ev / KbT)))); elseif (Ev <= -3e-139) tmp = (NdChar / (1.0 + exp((Vef / KbT)))) + (NaChar / 2.0); else tmp = (NaChar / (1.0 + exp((EAccept / KbT)))) + (NdChar / 2.0); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[Ev, -2.4e+114], N[(N[(NdChar * 0.5), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[Ev, -3e-139], 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[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;Ev \leq -2.4 \cdot 10^{+114}:\\
\;\;\;\;NdChar \cdot 0.5 + \frac{NaChar}{1 + e^{\frac{Ev}{KbT}}}\\
\mathbf{elif}\;Ev \leq -3 \cdot 10^{-139}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{Vef}{KbT}}} + \frac{NaChar}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}} + \frac{NdChar}{2}\\
\end{array}
\end{array}
if Ev < -2.4e114Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 86.5%
Taylor expanded in KbT around inf 50.3%
if -2.4e114 < Ev < -2.9999999999999999e-139Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 81.9%
Taylor expanded in KbT around inf 36.9%
if -2.9999999999999999e-139 < Ev Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 75.1%
Taylor expanded in Vef around 0 48.1%
Taylor expanded in EAccept around inf 37.7%
Final simplification39.2%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (if (<= Ev -6.6e+64) (+ (* NdChar 0.5) (/ NaChar (+ 1.0 (exp (/ Ev KbT))))) (+ (/ NaChar (+ 1.0 (exp (/ EAccept 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 (Ev <= -6.6e+64) {
tmp = (NdChar * 0.5) + (NaChar / (1.0 + exp((Ev / KbT))));
} else {
tmp = (NaChar / (1.0 + exp((EAccept / 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 (ev <= (-6.6d+64)) then
tmp = (ndchar * 0.5d0) + (nachar / (1.0d0 + exp((ev / kbt))))
else
tmp = (nachar / (1.0d0 + exp((eaccept / 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 (Ev <= -6.6e+64) {
tmp = (NdChar * 0.5) + (NaChar / (1.0 + Math.exp((Ev / KbT))));
} else {
tmp = (NaChar / (1.0 + Math.exp((EAccept / KbT)))) + (NdChar / 2.0);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if Ev <= -6.6e+64: tmp = (NdChar * 0.5) + (NaChar / (1.0 + math.exp((Ev / KbT)))) else: tmp = (NaChar / (1.0 + math.exp((EAccept / KbT)))) + (NdChar / 2.0) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (Ev <= -6.6e+64) tmp = Float64(Float64(NdChar * 0.5) + Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT))))); else tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / 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 (Ev <= -6.6e+64) tmp = (NdChar * 0.5) + (NaChar / (1.0 + exp((Ev / KbT)))); else tmp = (NaChar / (1.0 + exp((EAccept / KbT)))) + (NdChar / 2.0); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[Ev, -6.6e+64], N[(N[(NdChar * 0.5), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;Ev \leq -6.6 \cdot 10^{+64}:\\
\;\;\;\;NdChar \cdot 0.5 + \frac{NaChar}{1 + e^{\frac{Ev}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}} + \frac{NdChar}{2}\\
\end{array}
\end{array}
if Ev < -6.59999999999999976e64Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 89.5%
Taylor expanded in KbT around inf 54.1%
if -6.59999999999999976e64 < Ev Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 75.6%
Taylor expanded in Vef around 0 47.0%
Taylor expanded in EAccept around inf 36.5%
Final simplification39.6%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (+ (* NdChar 0.5) (/ NaChar (+ 1.0 (exp (/ Ev KbT))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NdChar * 0.5) + (NaChar / (1.0 + exp((Ev / 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 * 0.5d0) + (nachar / (1.0d0 + exp((ev / 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 * 0.5) + (NaChar / (1.0 + Math.exp((Ev / KbT))));
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return (NdChar * 0.5) + (NaChar / (1.0 + math.exp((Ev / KbT))))
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(Float64(NdChar * 0.5) + Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT))))) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = (NdChar * 0.5) + (NaChar / (1.0 + exp((Ev / KbT)))); end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(N[(NdChar * 0.5), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
NdChar \cdot 0.5 + \frac{NaChar}{1 + e^{\frac{Ev}{KbT}}}
\end{array}
Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 67.3%
Taylor expanded in KbT around inf 37.6%
Final simplification37.6%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (+ (/ NaChar 2.0) (* NdChar 0.5)))
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 * 0.5);
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
code = (nachar / 2.0d0) + (ndchar * 0.5d0)
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NaChar / 2.0) + (NdChar * 0.5);
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return (NaChar / 2.0) + (NdChar * 0.5)
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(Float64(NaChar / 2.0) + Float64(NdChar * 0.5)) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = (NaChar / 2.0) + (NdChar * 0.5); end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(N[(NaChar / 2.0), $MachinePrecision] + N[(NdChar * 0.5), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{NaChar}{2} + NdChar \cdot 0.5
\end{array}
Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 43.3%
Taylor expanded in KbT around inf 27.8%
Final simplification27.8%
herbie shell --seed 2024090
(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))))))