
(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 27 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (+ (/ NdChar (+ 1.0 (exp (/ (- (- (- (- Ec Vef) EDonor) mu)) KbT)))) (/ NaChar (+ 1.0 (exp (/ (+ (+ (+ Ev Vef) EAccept) (- mu)) KbT))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NdChar / (1.0 + exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + exp(((((Ev + Vef) + EAccept) + -mu) / KbT))));
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
code = (ndchar / (1.0d0 + exp((-(((ec - vef) - edonor) - mu) / kbt)))) + (nachar / (1.0d0 + exp(((((ev + vef) + eaccept) + -mu) / kbt))))
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NdChar / (1.0 + Math.exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + Math.exp(((((Ev + Vef) + EAccept) + -mu) / KbT))));
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return (NdChar / (1.0 + math.exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + math.exp(((((Ev + Vef) + EAccept) + -mu) / KbT))))
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(-Float64(Float64(Float64(Ec - Vef) - EDonor) - mu)) / KbT)))) + Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(Float64(Ev + Vef) + EAccept) + Float64(-mu)) / KbT))))) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = (NdChar / (1.0 + exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + exp(((((Ev + Vef) + EAccept) + -mu) / KbT)))); end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(N[(NdChar / N[(1.0 + N[Exp[N[((-N[(N[(N[(Ec - Vef), $MachinePrecision] - EDonor), $MachinePrecision] - mu), $MachinePrecision]) / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Exp[N[(N[(N[(N[(Ev + Vef), $MachinePrecision] + EAccept), $MachinePrecision] + (-mu)), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{NdChar}{1 + e^{\frac{-\left(\left(\left(Ec - Vef\right) - EDonor\right) - mu\right)}{KbT}}} + \frac{NaChar}{1 + e^{\frac{\left(\left(Ev + Vef\right) + EAccept\right) + \left(-mu\right)}{KbT}}}
\end{array}
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (+ (/ NdChar (+ 1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT)))) (/ NaChar (+ 1.0 (pow E (/ (+ Vef (+ EAccept (- Ev mu))) KbT))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + pow(((double) M_E), ((Vef + (EAccept + (Ev - mu))) / KbT))));
}
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NdChar / (1.0 + Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + Math.pow(Math.E, ((Vef + (EAccept + (Ev - mu))) / KbT))));
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return (NdChar / (1.0 + math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + math.pow(math.e, ((Vef + (EAccept + (Ev - mu))) / KbT))))
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) + Float64(NaChar / Float64(1.0 + (exp(1) ^ Float64(Float64(Vef + Float64(EAccept + Float64(Ev - mu))) / KbT))))) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + (2.71828182845904523536 ^ ((Vef + (EAccept + (Ev - mu))) / KbT)))); end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Power[E, N[(N[(Vef + N[(EAccept + N[(Ev - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{NdChar}{1 + e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}} + \frac{NaChar}{1 + {e}^{\left(\frac{Vef + \left(EAccept + \left(Ev - mu\right)\right)}{KbT}\right)}}
\end{array}
Initial program 99.9%
Simplified99.9%
*-un-lft-identity99.9%
exp-prod99.9%
*-un-lft-identity99.9%
*-un-lft-identity99.9%
+-commutative99.9%
associate-+l-99.9%
Applied egg-rr99.9%
Final simplification99.9%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0
(+
(/ NaChar (+ 1.0 (exp (/ EAccept KbT))))
(/ NdChar (+ 1.0 (exp (/ (- (+ mu Vef) Ec) KbT)))))))
(if (<= EAccept -2.1e-187)
t_0
(if (<= EAccept 2.4e-173)
(+
(/ NaChar (+ 1.0 (exp (/ (+ Vef (+ Ev (- EAccept mu))) KbT))))
(/
NdChar
(+
1.0
(*
EDonor
(+
(/ 1.0 KbT)
(*
Ec
(/
(+
(+ (/ Vef (* Ec KbT)) (+ (/ mu (* Ec KbT)) (/ 1.0 Ec)))
(/ -1.0 KbT))
EDonor)))))))
(if (<= EAccept 1.55e+16)
(+
(/ NdChar (+ 1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT))))
(/
NaChar
(+
1.0
(-
(+ 1.0 (+ (/ EAccept KbT) (+ (/ Ev KbT) (/ Vef KbT))))
(/ mu 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 = (NaChar / (1.0 + exp((EAccept / KbT)))) + (NdChar / (1.0 + exp((((mu + Vef) - Ec) / KbT))));
double tmp;
if (EAccept <= -2.1e-187) {
tmp = t_0;
} else if (EAccept <= 2.4e-173) {
tmp = (NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT)))) + (NdChar / (1.0 + (EDonor * ((1.0 / KbT) + (Ec * ((((Vef / (Ec * KbT)) + ((mu / (Ec * KbT)) + (1.0 / Ec))) + (-1.0 / KbT)) / EDonor))))));
} else if (EAccept <= 1.55e+16) {
tmp = (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + ((1.0 + ((EAccept / KbT) + ((Ev / KbT) + (Vef / KbT)))) - (mu / KbT))));
} else {
tmp = t_0;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: tmp
t_0 = (nachar / (1.0d0 + exp((eaccept / kbt)))) + (ndchar / (1.0d0 + exp((((mu + vef) - ec) / kbt))))
if (eaccept <= (-2.1d-187)) then
tmp = t_0
else if (eaccept <= 2.4d-173) then
tmp = (nachar / (1.0d0 + exp(((vef + (ev + (eaccept - mu))) / kbt)))) + (ndchar / (1.0d0 + (edonor * ((1.0d0 / kbt) + (ec * ((((vef / (ec * kbt)) + ((mu / (ec * kbt)) + (1.0d0 / ec))) + ((-1.0d0) / kbt)) / edonor))))))
else if (eaccept <= 1.55d+16) then
tmp = (ndchar / (1.0d0 + exp(((edonor + (mu + (vef - ec))) / kbt)))) + (nachar / (1.0d0 + ((1.0d0 + ((eaccept / kbt) + ((ev / kbt) + (vef / kbt)))) - (mu / kbt))))
else
tmp = t_0
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar / (1.0 + Math.exp((EAccept / KbT)))) + (NdChar / (1.0 + Math.exp((((mu + Vef) - Ec) / KbT))));
double tmp;
if (EAccept <= -2.1e-187) {
tmp = t_0;
} else if (EAccept <= 2.4e-173) {
tmp = (NaChar / (1.0 + Math.exp(((Vef + (Ev + (EAccept - mu))) / KbT)))) + (NdChar / (1.0 + (EDonor * ((1.0 / KbT) + (Ec * ((((Vef / (Ec * KbT)) + ((mu / (Ec * KbT)) + (1.0 / Ec))) + (-1.0 / KbT)) / EDonor))))));
} else if (EAccept <= 1.55e+16) {
tmp = (NdChar / (1.0 + Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + ((1.0 + ((EAccept / KbT) + ((Ev / KbT) + (Vef / KbT)))) - (mu / KbT))));
} else {
tmp = t_0;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = (NaChar / (1.0 + math.exp((EAccept / KbT)))) + (NdChar / (1.0 + math.exp((((mu + Vef) - Ec) / KbT)))) tmp = 0 if EAccept <= -2.1e-187: tmp = t_0 elif EAccept <= 2.4e-173: tmp = (NaChar / (1.0 + math.exp(((Vef + (Ev + (EAccept - mu))) / KbT)))) + (NdChar / (1.0 + (EDonor * ((1.0 / KbT) + (Ec * ((((Vef / (Ec * KbT)) + ((mu / (Ec * KbT)) + (1.0 / Ec))) + (-1.0 / KbT)) / EDonor)))))) elif EAccept <= 1.55e+16: tmp = (NdChar / (1.0 + math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + ((1.0 + ((EAccept / KbT) + ((Ev / KbT) + (Vef / KbT)))) - (mu / KbT)))) 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(EAccept / KbT)))) + Float64(NdChar / Float64(1.0 + exp(Float64(Float64(Float64(mu + Vef) - Ec) / KbT))))) tmp = 0.0 if (EAccept <= -2.1e-187) tmp = t_0; elseif (EAccept <= 2.4e-173) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Ev + Float64(EAccept - mu))) / KbT)))) + Float64(NdChar / Float64(1.0 + Float64(EDonor * Float64(Float64(1.0 / KbT) + Float64(Ec * Float64(Float64(Float64(Float64(Vef / Float64(Ec * KbT)) + Float64(Float64(mu / Float64(Ec * KbT)) + Float64(1.0 / Ec))) + Float64(-1.0 / KbT)) / EDonor))))))); elseif (EAccept <= 1.55e+16) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) + Float64(NaChar / Float64(1.0 + Float64(Float64(1.0 + Float64(Float64(EAccept / KbT) + Float64(Float64(Ev / KbT) + Float64(Vef / KbT)))) - Float64(mu / KbT))))); 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((EAccept / KbT)))) + (NdChar / (1.0 + exp((((mu + Vef) - Ec) / KbT)))); tmp = 0.0; if (EAccept <= -2.1e-187) tmp = t_0; elseif (EAccept <= 2.4e-173) tmp = (NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT)))) + (NdChar / (1.0 + (EDonor * ((1.0 / KbT) + (Ec * ((((Vef / (Ec * KbT)) + ((mu / (Ec * KbT)) + (1.0 / Ec))) + (-1.0 / KbT)) / EDonor)))))); elseif (EAccept <= 1.55e+16) tmp = (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + ((1.0 + ((EAccept / KbT) + ((Ev / KbT) + (Vef / KbT)))) - (mu / KbT)))); else tmp = t_0; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(1.0 + N[Exp[N[(N[(N[(mu + Vef), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[EAccept, -2.1e-187], t$95$0, If[LessEqual[EAccept, 2.4e-173], N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(Ev + N[(EAccept - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(1.0 + N[(EDonor * N[(N[(1.0 / KbT), $MachinePrecision] + N[(Ec * N[(N[(N[(N[(Vef / N[(Ec * KbT), $MachinePrecision]), $MachinePrecision] + N[(N[(mu / N[(Ec * KbT), $MachinePrecision]), $MachinePrecision] + N[(1.0 / Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(-1.0 / KbT), $MachinePrecision]), $MachinePrecision] / EDonor), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[EAccept, 1.55e+16], N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[(N[(1.0 + N[(N[(EAccept / KbT), $MachinePrecision] + N[(N[(Ev / KbT), $MachinePrecision] + N[(Vef / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$0]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}} + \frac{NdChar}{1 + e^{\frac{\left(mu + Vef\right) - Ec}{KbT}}}\\
\mathbf{if}\;EAccept \leq -2.1 \cdot 10^{-187}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;EAccept \leq 2.4 \cdot 10^{-173}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Vef + \left(Ev + \left(EAccept - mu\right)\right)}{KbT}}} + \frac{NdChar}{1 + EDonor \cdot \left(\frac{1}{KbT} + Ec \cdot \frac{\left(\frac{Vef}{Ec \cdot KbT} + \left(\frac{mu}{Ec \cdot KbT} + \frac{1}{Ec}\right)\right) + \frac{-1}{KbT}}{EDonor}\right)}\\
\mathbf{elif}\;EAccept \leq 1.55 \cdot 10^{+16}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}} + \frac{NaChar}{1 + \left(\left(1 + \left(\frac{EAccept}{KbT} + \left(\frac{Ev}{KbT} + \frac{Vef}{KbT}\right)\right)\right) - \frac{mu}{KbT}\right)}\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if EAccept < -2.09999999999999992e-187 or 1.55e16 < EAccept Initial program 99.9%
Simplified99.9%
Taylor expanded in EAccept around inf 79.8%
Taylor expanded in EDonor around 0 73.7%
if -2.09999999999999992e-187 < EAccept < 2.40000000000000017e-173Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 53.7%
Taylor expanded in Ec around -inf 62.0%
Taylor expanded in EDonor around -inf 72.1%
mul-1-neg72.1%
distribute-rgt-neg-in72.1%
+-commutative72.1%
mul-1-neg72.1%
unsub-neg72.1%
associate-/l*70.2%
Simplified70.2%
if 2.40000000000000017e-173 < EAccept < 1.55e16Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 61.8%
Final simplification71.0%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (+ (/ NdChar (+ 1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT)))) (/ NaChar (+ 1.0 (exp (/ (+ Vef (+ Ev (- EAccept mu))) KbT))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT))));
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
code = (ndchar / (1.0d0 + exp(((edonor + (mu + (vef - ec))) / kbt)))) + (nachar / (1.0d0 + exp(((vef + (ev + (eaccept - mu))) / kbt))))
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NdChar / (1.0 + Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + Math.exp(((Vef + (Ev + (EAccept - mu))) / KbT))));
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return (NdChar / (1.0 + math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + math.exp(((Vef + (Ev + (EAccept - mu))) / KbT))))
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) + Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Ev + Float64(EAccept - mu))) / KbT))))) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT)))); end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(Ev + N[(EAccept - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{NdChar}{1 + e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}} + \frac{NaChar}{1 + e^{\frac{Vef + \left(Ev + \left(EAccept - mu\right)\right)}{KbT}}}
\end{array}
Initial program 99.9%
Simplified99.9%
Final simplification99.9%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (<= Ev -7.2e+77)
(+
(/ NaChar (+ 1.0 (exp (/ Ev KbT))))
(/ NdChar (+ 1.0 (exp (/ (- (+ mu Vef) Ec) KbT)))))
(+
(/ NdChar (+ 1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT))))
(/ NaChar (+ 1.0 (exp (/ EAccept KbT)))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (Ev <= -7.2e+77) {
tmp = (NaChar / (1.0 + exp((Ev / KbT)))) + (NdChar / (1.0 + exp((((mu + Vef) - Ec) / KbT))));
} else {
tmp = (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + exp((EAccept / KbT))));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if (ev <= (-7.2d+77)) then
tmp = (nachar / (1.0d0 + exp((ev / kbt)))) + (ndchar / (1.0d0 + exp((((mu + vef) - ec) / kbt))))
else
tmp = (ndchar / (1.0d0 + exp(((edonor + (mu + (vef - ec))) / kbt)))) + (nachar / (1.0d0 + exp((eaccept / kbt))))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (Ev <= -7.2e+77) {
tmp = (NaChar / (1.0 + Math.exp((Ev / KbT)))) + (NdChar / (1.0 + Math.exp((((mu + Vef) - Ec) / KbT))));
} else {
tmp = (NdChar / (1.0 + Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + Math.exp((EAccept / KbT))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if Ev <= -7.2e+77: tmp = (NaChar / (1.0 + math.exp((Ev / KbT)))) + (NdChar / (1.0 + math.exp((((mu + Vef) - Ec) / KbT)))) else: tmp = (NdChar / (1.0 + math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + math.exp((EAccept / KbT)))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (Ev <= -7.2e+77) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT)))) + Float64(NdChar / Float64(1.0 + exp(Float64(Float64(Float64(mu + Vef) - Ec) / KbT))))); else tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) + Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT))))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (Ev <= -7.2e+77) tmp = (NaChar / (1.0 + exp((Ev / KbT)))) + (NdChar / (1.0 + exp((((mu + Vef) - Ec) / KbT)))); else tmp = (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + exp((EAccept / KbT)))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[Ev, -7.2e+77], N[(N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(1.0 + N[Exp[N[(N[(N[(mu + Vef), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;Ev \leq -7.2 \cdot 10^{+77}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Ev}{KbT}}} + \frac{NdChar}{1 + e^{\frac{\left(mu + Vef\right) - Ec}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}} + \frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}}\\
\end{array}
\end{array}
if Ev < -7.1999999999999996e77Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 85.1%
Taylor expanded in EDonor around 0 75.7%
if -7.1999999999999996e77 < Ev Initial program 99.9%
Simplified99.9%
Taylor expanded in EAccept around inf 73.3%
Final simplification73.8%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NdChar (+ 1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT))))))
(if (<= EAccept 3e+21)
(+ t_0 (/ NaChar (+ 1.0 (exp (/ Ev KbT)))))
(+ t_0 (/ NaChar (+ 1.0 (exp (/ EAccept KbT))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)));
double tmp;
if (EAccept <= 3e+21) {
tmp = t_0 + (NaChar / (1.0 + exp((Ev / KbT))));
} else {
tmp = t_0 + (NaChar / (1.0 + exp((EAccept / KbT))));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: tmp
t_0 = ndchar / (1.0d0 + exp(((edonor + (mu + (vef - ec))) / kbt)))
if (eaccept <= 3d+21) then
tmp = t_0 + (nachar / (1.0d0 + exp((ev / kbt))))
else
tmp = t_0 + (nachar / (1.0d0 + exp((eaccept / kbt))))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (1.0 + Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)));
double tmp;
if (EAccept <= 3e+21) {
tmp = t_0 + (NaChar / (1.0 + Math.exp((Ev / KbT))));
} else {
tmp = t_0 + (NaChar / (1.0 + Math.exp((EAccept / KbT))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NdChar / (1.0 + math.exp(((EDonor + (mu + (Vef - Ec))) / KbT))) tmp = 0 if EAccept <= 3e+21: tmp = t_0 + (NaChar / (1.0 + math.exp((Ev / KbT)))) else: tmp = t_0 + (NaChar / (1.0 + math.exp((EAccept / KbT)))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NdChar / Float64(1.0 + exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) tmp = 0.0 if (EAccept <= 3e+21) tmp = Float64(t_0 + Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT))))); else tmp = Float64(t_0 + Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT))))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT))); tmp = 0.0; if (EAccept <= 3e+21) tmp = t_0 + (NaChar / (1.0 + exp((Ev / KbT)))); else tmp = t_0 + (NaChar / (1.0 + exp((EAccept / KbT)))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NdChar / N[(1.0 + N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[EAccept, 3e+21], N[(t$95$0 + N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(t$95$0 + N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{1 + e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}}\\
\mathbf{if}\;EAccept \leq 3 \cdot 10^{+21}:\\
\;\;\;\;t\_0 + \frac{NaChar}{1 + e^{\frac{Ev}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;t\_0 + \frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}}\\
\end{array}
\end{array}
if EAccept < 3e21Initial program 99.9%
Simplified99.9%
Taylor expanded in Ev around inf 76.2%
if 3e21 < EAccept Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 83.4%
Final simplification77.9%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NaChar (+ 1.0 (exp (/ (+ Vef (+ Ev (- EAccept mu))) KbT))))))
(if (<= NaChar -3.5e+70)
(+ t_0 (/ NdChar (+ 1.0 (* Ec (+ (/ Vef (* Ec KbT)) (/ -1.0 KbT))))))
(if (<= NaChar -1.66e-35)
(+
(/ NaChar (+ 1.0 (exp (/ Ev KbT))))
(/ NdChar (+ 1.0 (exp (/ mu KbT)))))
(if (<= NaChar -1.6e-83)
(+
t_0
(/
NdChar
(+
1.0
(-
(+
1.0
(+ (/ EDonor KbT) (* mu (+ (/ 1.0 KbT) (/ Vef (* mu KbT))))))
(/ Ec KbT)))))
(if (<= NaChar 1.8e-143)
(+
(/ NdChar (+ 1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT))))
(/ NaChar (+ (/ EAccept KbT) 2.0)))
(if (<= NaChar 2.3e+64)
(+ t_0 (/ NdChar (+ 1.0 (/ EDonor KbT))))
(+
t_0
(/
NdChar
(+
1.0
(*
Vef
(+
(/ 1.0 KbT)
(/
(- (+ 1.0 (+ (/ mu KbT) (/ EDonor KbT))) (/ Ec KbT))
Vef)))))))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT)));
double tmp;
if (NaChar <= -3.5e+70) {
tmp = t_0 + (NdChar / (1.0 + (Ec * ((Vef / (Ec * KbT)) + (-1.0 / KbT)))));
} else if (NaChar <= -1.66e-35) {
tmp = (NaChar / (1.0 + exp((Ev / KbT)))) + (NdChar / (1.0 + exp((mu / KbT))));
} else if (NaChar <= -1.6e-83) {
tmp = t_0 + (NdChar / (1.0 + ((1.0 + ((EDonor / KbT) + (mu * ((1.0 / KbT) + (Vef / (mu * KbT)))))) - (Ec / KbT))));
} else if (NaChar <= 1.8e-143) {
tmp = (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / ((EAccept / KbT) + 2.0));
} else if (NaChar <= 2.3e+64) {
tmp = t_0 + (NdChar / (1.0 + (EDonor / KbT)));
} else {
tmp = t_0 + (NdChar / (1.0 + (Vef * ((1.0 / KbT) + (((1.0 + ((mu / KbT) + (EDonor / KbT))) - (Ec / KbT)) / 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 = nachar / (1.0d0 + exp(((vef + (ev + (eaccept - mu))) / kbt)))
if (nachar <= (-3.5d+70)) then
tmp = t_0 + (ndchar / (1.0d0 + (ec * ((vef / (ec * kbt)) + ((-1.0d0) / kbt)))))
else if (nachar <= (-1.66d-35)) then
tmp = (nachar / (1.0d0 + exp((ev / kbt)))) + (ndchar / (1.0d0 + exp((mu / kbt))))
else if (nachar <= (-1.6d-83)) then
tmp = t_0 + (ndchar / (1.0d0 + ((1.0d0 + ((edonor / kbt) + (mu * ((1.0d0 / kbt) + (vef / (mu * kbt)))))) - (ec / kbt))))
else if (nachar <= 1.8d-143) then
tmp = (ndchar / (1.0d0 + exp(((edonor + (mu + (vef - ec))) / kbt)))) + (nachar / ((eaccept / kbt) + 2.0d0))
else if (nachar <= 2.3d+64) then
tmp = t_0 + (ndchar / (1.0d0 + (edonor / kbt)))
else
tmp = t_0 + (ndchar / (1.0d0 + (vef * ((1.0d0 / kbt) + (((1.0d0 + ((mu / kbt) + (edonor / kbt))) - (ec / kbt)) / 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 = NaChar / (1.0 + Math.exp(((Vef + (Ev + (EAccept - mu))) / KbT)));
double tmp;
if (NaChar <= -3.5e+70) {
tmp = t_0 + (NdChar / (1.0 + (Ec * ((Vef / (Ec * KbT)) + (-1.0 / KbT)))));
} else if (NaChar <= -1.66e-35) {
tmp = (NaChar / (1.0 + Math.exp((Ev / KbT)))) + (NdChar / (1.0 + Math.exp((mu / KbT))));
} else if (NaChar <= -1.6e-83) {
tmp = t_0 + (NdChar / (1.0 + ((1.0 + ((EDonor / KbT) + (mu * ((1.0 / KbT) + (Vef / (mu * KbT)))))) - (Ec / KbT))));
} else if (NaChar <= 1.8e-143) {
tmp = (NdChar / (1.0 + Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / ((EAccept / KbT) + 2.0));
} else if (NaChar <= 2.3e+64) {
tmp = t_0 + (NdChar / (1.0 + (EDonor / KbT)));
} else {
tmp = t_0 + (NdChar / (1.0 + (Vef * ((1.0 / KbT) + (((1.0 + ((mu / KbT) + (EDonor / KbT))) - (Ec / KbT)) / Vef)))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NaChar / (1.0 + math.exp(((Vef + (Ev + (EAccept - mu))) / KbT))) tmp = 0 if NaChar <= -3.5e+70: tmp = t_0 + (NdChar / (1.0 + (Ec * ((Vef / (Ec * KbT)) + (-1.0 / KbT))))) elif NaChar <= -1.66e-35: tmp = (NaChar / (1.0 + math.exp((Ev / KbT)))) + (NdChar / (1.0 + math.exp((mu / KbT)))) elif NaChar <= -1.6e-83: tmp = t_0 + (NdChar / (1.0 + ((1.0 + ((EDonor / KbT) + (mu * ((1.0 / KbT) + (Vef / (mu * KbT)))))) - (Ec / KbT)))) elif NaChar <= 1.8e-143: tmp = (NdChar / (1.0 + math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / ((EAccept / KbT) + 2.0)) elif NaChar <= 2.3e+64: tmp = t_0 + (NdChar / (1.0 + (EDonor / KbT))) else: tmp = t_0 + (NdChar / (1.0 + (Vef * ((1.0 / KbT) + (((1.0 + ((mu / KbT) + (EDonor / KbT))) - (Ec / KbT)) / Vef))))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Ev + Float64(EAccept - mu))) / KbT)))) tmp = 0.0 if (NaChar <= -3.5e+70) tmp = Float64(t_0 + Float64(NdChar / Float64(1.0 + Float64(Ec * Float64(Float64(Vef / Float64(Ec * KbT)) + Float64(-1.0 / KbT)))))); elseif (NaChar <= -1.66e-35) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT)))) + Float64(NdChar / Float64(1.0 + exp(Float64(mu / KbT))))); elseif (NaChar <= -1.6e-83) tmp = Float64(t_0 + Float64(NdChar / Float64(1.0 + Float64(Float64(1.0 + Float64(Float64(EDonor / KbT) + Float64(mu * Float64(Float64(1.0 / KbT) + Float64(Vef / Float64(mu * KbT)))))) - Float64(Ec / KbT))))); elseif (NaChar <= 1.8e-143) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) + Float64(NaChar / Float64(Float64(EAccept / KbT) + 2.0))); elseif (NaChar <= 2.3e+64) tmp = Float64(t_0 + Float64(NdChar / Float64(1.0 + Float64(EDonor / KbT)))); else tmp = Float64(t_0 + Float64(NdChar / Float64(1.0 + Float64(Vef * Float64(Float64(1.0 / KbT) + Float64(Float64(Float64(1.0 + Float64(Float64(mu / KbT) + Float64(EDonor / KbT))) - Float64(Ec / KbT)) / Vef)))))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT))); tmp = 0.0; if (NaChar <= -3.5e+70) tmp = t_0 + (NdChar / (1.0 + (Ec * ((Vef / (Ec * KbT)) + (-1.0 / KbT))))); elseif (NaChar <= -1.66e-35) tmp = (NaChar / (1.0 + exp((Ev / KbT)))) + (NdChar / (1.0 + exp((mu / KbT)))); elseif (NaChar <= -1.6e-83) tmp = t_0 + (NdChar / (1.0 + ((1.0 + ((EDonor / KbT) + (mu * ((1.0 / KbT) + (Vef / (mu * KbT)))))) - (Ec / KbT)))); elseif (NaChar <= 1.8e-143) tmp = (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / ((EAccept / KbT) + 2.0)); elseif (NaChar <= 2.3e+64) tmp = t_0 + (NdChar / (1.0 + (EDonor / KbT))); else tmp = t_0 + (NdChar / (1.0 + (Vef * ((1.0 / KbT) + (((1.0 + ((mu / KbT) + (EDonor / KbT))) - (Ec / KbT)) / Vef))))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(Ev + N[(EAccept - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -3.5e+70], N[(t$95$0 + N[(NdChar / N[(1.0 + N[(Ec * N[(N[(Vef / N[(Ec * KbT), $MachinePrecision]), $MachinePrecision] + N[(-1.0 / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, -1.66e-35], N[(N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(1.0 + N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, -1.6e-83], N[(t$95$0 + N[(NdChar / N[(1.0 + N[(N[(1.0 + N[(N[(EDonor / KbT), $MachinePrecision] + N[(mu * N[(N[(1.0 / KbT), $MachinePrecision] + N[(Vef / N[(mu * KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 1.8e-143], N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(N[(EAccept / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 2.3e+64], N[(t$95$0 + N[(NdChar / N[(1.0 + N[(EDonor / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(t$95$0 + N[(NdChar / N[(1.0 + N[(Vef * N[(N[(1.0 / KbT), $MachinePrecision] + N[(N[(N[(1.0 + N[(N[(mu / KbT), $MachinePrecision] + N[(EDonor / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision] / Vef), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{Vef + \left(Ev + \left(EAccept - mu\right)\right)}{KbT}}}\\
\mathbf{if}\;NaChar \leq -3.5 \cdot 10^{+70}:\\
\;\;\;\;t\_0 + \frac{NdChar}{1 + Ec \cdot \left(\frac{Vef}{Ec \cdot KbT} + \frac{-1}{KbT}\right)}\\
\mathbf{elif}\;NaChar \leq -1.66 \cdot 10^{-35}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Ev}{KbT}}} + \frac{NdChar}{1 + e^{\frac{mu}{KbT}}}\\
\mathbf{elif}\;NaChar \leq -1.6 \cdot 10^{-83}:\\
\;\;\;\;t\_0 + \frac{NdChar}{1 + \left(\left(1 + \left(\frac{EDonor}{KbT} + mu \cdot \left(\frac{1}{KbT} + \frac{Vef}{mu \cdot KbT}\right)\right)\right) - \frac{Ec}{KbT}\right)}\\
\mathbf{elif}\;NaChar \leq 1.8 \cdot 10^{-143}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}} + \frac{NaChar}{\frac{EAccept}{KbT} + 2}\\
\mathbf{elif}\;NaChar \leq 2.3 \cdot 10^{+64}:\\
\;\;\;\;t\_0 + \frac{NdChar}{1 + \frac{EDonor}{KbT}}\\
\mathbf{else}:\\
\;\;\;\;t\_0 + \frac{NdChar}{1 + Vef \cdot \left(\frac{1}{KbT} + \frac{\left(1 + \left(\frac{mu}{KbT} + \frac{EDonor}{KbT}\right)\right) - \frac{Ec}{KbT}}{Vef}\right)}\\
\end{array}
\end{array}
if NaChar < -3.50000000000000002e70Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 68.8%
Taylor expanded in Ec around -inf 75.4%
Taylor expanded in Vef around inf 82.4%
*-commutative82.4%
Simplified82.4%
if -3.50000000000000002e70 < NaChar < -1.65999999999999999e-35Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 76.8%
Taylor expanded in mu around inf 64.1%
if -1.65999999999999999e-35 < NaChar < -1.6000000000000001e-83Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 71.4%
Taylor expanded in mu around inf 80.9%
*-commutative80.9%
Simplified80.9%
if -1.6000000000000001e-83 < NaChar < 1.7999999999999999e-143Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 77.0%
Taylor expanded in EAccept around 0 73.7%
if 1.7999999999999999e-143 < NaChar < 2.3e64Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 51.2%
Taylor expanded in Ec around -inf 54.8%
Taylor expanded in EDonor around inf 74.0%
associate-*r/74.0%
mul-1-neg74.0%
Simplified74.0%
if 2.3e64 < NaChar Initial program 99.8%
Simplified99.8%
Taylor expanded in KbT around inf 67.2%
Taylor expanded in Vef around -inf 72.2%
Final simplification74.1%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NdChar (+ 1.0 (exp (/ (- (+ mu Vef) Ec) KbT))))))
(if (<= Ev -7.8e+77)
(+ (/ NaChar (+ 1.0 (exp (/ Ev KbT)))) t_0)
(+ (/ NaChar (+ 1.0 (exp (/ EAccept KbT)))) t_0))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (1.0 + exp((((mu + Vef) - Ec) / KbT)));
double tmp;
if (Ev <= -7.8e+77) {
tmp = (NaChar / (1.0 + exp((Ev / KbT)))) + t_0;
} else {
tmp = (NaChar / (1.0 + exp((EAccept / 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((((mu + vef) - ec) / kbt)))
if (ev <= (-7.8d+77)) then
tmp = (nachar / (1.0d0 + exp((ev / kbt)))) + t_0
else
tmp = (nachar / (1.0d0 + exp((eaccept / 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((((mu + Vef) - Ec) / KbT)));
double tmp;
if (Ev <= -7.8e+77) {
tmp = (NaChar / (1.0 + Math.exp((Ev / KbT)))) + t_0;
} else {
tmp = (NaChar / (1.0 + Math.exp((EAccept / KbT)))) + t_0;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NdChar / (1.0 + math.exp((((mu + Vef) - Ec) / KbT))) tmp = 0 if Ev <= -7.8e+77: tmp = (NaChar / (1.0 + math.exp((Ev / KbT)))) + t_0 else: tmp = (NaChar / (1.0 + math.exp((EAccept / 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(Float64(mu + Vef) - Ec) / KbT)))) tmp = 0.0 if (Ev <= -7.8e+77) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT)))) + t_0); else tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / 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((((mu + Vef) - Ec) / KbT))); tmp = 0.0; if (Ev <= -7.8e+77) tmp = (NaChar / (1.0 + exp((Ev / KbT)))) + t_0; else tmp = (NaChar / (1.0 + exp((EAccept / 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[(N[(mu + Vef), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[Ev, -7.8e+77], N[(N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + t$95$0), $MachinePrecision], N[(N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + t$95$0), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{1 + e^{\frac{\left(mu + Vef\right) - Ec}{KbT}}}\\
\mathbf{if}\;Ev \leq -7.8 \cdot 10^{+77}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Ev}{KbT}}} + t\_0\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}} + t\_0\\
\end{array}
\end{array}
if Ev < -7.7999999999999995e77Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 85.1%
Taylor expanded in EDonor around 0 75.7%
if -7.7999999999999995e77 < Ev Initial program 99.9%
Simplified99.9%
Taylor expanded in EAccept around inf 73.3%
Taylor expanded in EDonor around 0 66.7%
Final simplification68.5%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NdChar (+ 1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT)))))
(t_1 (/ NaChar (+ 1.0 (exp (/ (+ Vef (+ Ev (- EAccept mu))) KbT))))))
(if (<= NaChar -4.1e+60)
(+ t_1 (/ NdChar (+ 1.0 (* Ec (+ (/ Vef (* Ec KbT)) (/ -1.0 KbT))))))
(if (<= NaChar -2.2e-36)
(+ t_0 (/ NaChar (+ 1.0 (+ 1.0 (/ Ev KbT)))))
(if (<= NaChar -7.5e-67)
(+
t_1
(/
NdChar
(+
1.0
(-
(+
1.0
(+ (/ EDonor KbT) (* mu (+ (/ 1.0 KbT) (/ Vef (* mu KbT))))))
(/ Ec KbT)))))
(if (<= NaChar 1.7e-143)
(+
t_0
(/
NaChar
(+
1.0
(-
(+ 1.0 (+ (/ EAccept KbT) (+ (/ Ev KbT) (/ Vef KbT))))
(/ mu KbT)))))
(if (<= NaChar 1.4e+64)
(+ t_1 (/ NdChar (+ 1.0 (/ EDonor KbT))))
(-
t_1
(/
NdChar
(+
-1.0
(+
(/ Ec KbT)
(+
-1.0
(*
EDonor
(-
(/ -1.0 KbT)
(+
(/ Vef (* EDonor KbT))
(/ mu (* EDonor KbT)))))))))))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)));
double t_1 = NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT)));
double tmp;
if (NaChar <= -4.1e+60) {
tmp = t_1 + (NdChar / (1.0 + (Ec * ((Vef / (Ec * KbT)) + (-1.0 / KbT)))));
} else if (NaChar <= -2.2e-36) {
tmp = t_0 + (NaChar / (1.0 + (1.0 + (Ev / KbT))));
} else if (NaChar <= -7.5e-67) {
tmp = t_1 + (NdChar / (1.0 + ((1.0 + ((EDonor / KbT) + (mu * ((1.0 / KbT) + (Vef / (mu * KbT)))))) - (Ec / KbT))));
} else if (NaChar <= 1.7e-143) {
tmp = t_0 + (NaChar / (1.0 + ((1.0 + ((EAccept / KbT) + ((Ev / KbT) + (Vef / KbT)))) - (mu / KbT))));
} else if (NaChar <= 1.4e+64) {
tmp = t_1 + (NdChar / (1.0 + (EDonor / KbT)));
} else {
tmp = t_1 - (NdChar / (-1.0 + ((Ec / KbT) + (-1.0 + (EDonor * ((-1.0 / KbT) - ((Vef / (EDonor * KbT)) + (mu / (EDonor * KbT)))))))));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = ndchar / (1.0d0 + exp(((edonor + (mu + (vef - ec))) / kbt)))
t_1 = nachar / (1.0d0 + exp(((vef + (ev + (eaccept - mu))) / kbt)))
if (nachar <= (-4.1d+60)) then
tmp = t_1 + (ndchar / (1.0d0 + (ec * ((vef / (ec * kbt)) + ((-1.0d0) / kbt)))))
else if (nachar <= (-2.2d-36)) then
tmp = t_0 + (nachar / (1.0d0 + (1.0d0 + (ev / kbt))))
else if (nachar <= (-7.5d-67)) then
tmp = t_1 + (ndchar / (1.0d0 + ((1.0d0 + ((edonor / kbt) + (mu * ((1.0d0 / kbt) + (vef / (mu * kbt)))))) - (ec / kbt))))
else if (nachar <= 1.7d-143) then
tmp = t_0 + (nachar / (1.0d0 + ((1.0d0 + ((eaccept / kbt) + ((ev / kbt) + (vef / kbt)))) - (mu / kbt))))
else if (nachar <= 1.4d+64) then
tmp = t_1 + (ndchar / (1.0d0 + (edonor / kbt)))
else
tmp = t_1 - (ndchar / ((-1.0d0) + ((ec / kbt) + ((-1.0d0) + (edonor * (((-1.0d0) / kbt) - ((vef / (edonor * kbt)) + (mu / (edonor * kbt)))))))))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (1.0 + Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)));
double t_1 = NaChar / (1.0 + Math.exp(((Vef + (Ev + (EAccept - mu))) / KbT)));
double tmp;
if (NaChar <= -4.1e+60) {
tmp = t_1 + (NdChar / (1.0 + (Ec * ((Vef / (Ec * KbT)) + (-1.0 / KbT)))));
} else if (NaChar <= -2.2e-36) {
tmp = t_0 + (NaChar / (1.0 + (1.0 + (Ev / KbT))));
} else if (NaChar <= -7.5e-67) {
tmp = t_1 + (NdChar / (1.0 + ((1.0 + ((EDonor / KbT) + (mu * ((1.0 / KbT) + (Vef / (mu * KbT)))))) - (Ec / KbT))));
} else if (NaChar <= 1.7e-143) {
tmp = t_0 + (NaChar / (1.0 + ((1.0 + ((EAccept / KbT) + ((Ev / KbT) + (Vef / KbT)))) - (mu / KbT))));
} else if (NaChar <= 1.4e+64) {
tmp = t_1 + (NdChar / (1.0 + (EDonor / KbT)));
} else {
tmp = t_1 - (NdChar / (-1.0 + ((Ec / KbT) + (-1.0 + (EDonor * ((-1.0 / KbT) - ((Vef / (EDonor * KbT)) + (mu / (EDonor * KbT)))))))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NdChar / (1.0 + math.exp(((EDonor + (mu + (Vef - Ec))) / KbT))) t_1 = NaChar / (1.0 + math.exp(((Vef + (Ev + (EAccept - mu))) / KbT))) tmp = 0 if NaChar <= -4.1e+60: tmp = t_1 + (NdChar / (1.0 + (Ec * ((Vef / (Ec * KbT)) + (-1.0 / KbT))))) elif NaChar <= -2.2e-36: tmp = t_0 + (NaChar / (1.0 + (1.0 + (Ev / KbT)))) elif NaChar <= -7.5e-67: tmp = t_1 + (NdChar / (1.0 + ((1.0 + ((EDonor / KbT) + (mu * ((1.0 / KbT) + (Vef / (mu * KbT)))))) - (Ec / KbT)))) elif NaChar <= 1.7e-143: tmp = t_0 + (NaChar / (1.0 + ((1.0 + ((EAccept / KbT) + ((Ev / KbT) + (Vef / KbT)))) - (mu / KbT)))) elif NaChar <= 1.4e+64: tmp = t_1 + (NdChar / (1.0 + (EDonor / KbT))) else: tmp = t_1 - (NdChar / (-1.0 + ((Ec / KbT) + (-1.0 + (EDonor * ((-1.0 / KbT) - ((Vef / (EDonor * KbT)) + (mu / (EDonor * KbT))))))))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NdChar / Float64(1.0 + exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) t_1 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Ev + Float64(EAccept - mu))) / KbT)))) tmp = 0.0 if (NaChar <= -4.1e+60) tmp = Float64(t_1 + Float64(NdChar / Float64(1.0 + Float64(Ec * Float64(Float64(Vef / Float64(Ec * KbT)) + Float64(-1.0 / KbT)))))); elseif (NaChar <= -2.2e-36) tmp = Float64(t_0 + Float64(NaChar / Float64(1.0 + Float64(1.0 + Float64(Ev / KbT))))); elseif (NaChar <= -7.5e-67) tmp = Float64(t_1 + Float64(NdChar / Float64(1.0 + Float64(Float64(1.0 + Float64(Float64(EDonor / KbT) + Float64(mu * Float64(Float64(1.0 / KbT) + Float64(Vef / Float64(mu * KbT)))))) - Float64(Ec / KbT))))); elseif (NaChar <= 1.7e-143) tmp = Float64(t_0 + Float64(NaChar / Float64(1.0 + Float64(Float64(1.0 + Float64(Float64(EAccept / KbT) + Float64(Float64(Ev / KbT) + Float64(Vef / KbT)))) - Float64(mu / KbT))))); elseif (NaChar <= 1.4e+64) tmp = Float64(t_1 + Float64(NdChar / Float64(1.0 + Float64(EDonor / KbT)))); else tmp = Float64(t_1 - Float64(NdChar / Float64(-1.0 + Float64(Float64(Ec / KbT) + Float64(-1.0 + Float64(EDonor * Float64(Float64(-1.0 / KbT) - Float64(Float64(Vef / Float64(EDonor * KbT)) + Float64(mu / Float64(EDonor * KbT)))))))))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT))); t_1 = NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT))); tmp = 0.0; if (NaChar <= -4.1e+60) tmp = t_1 + (NdChar / (1.0 + (Ec * ((Vef / (Ec * KbT)) + (-1.0 / KbT))))); elseif (NaChar <= -2.2e-36) tmp = t_0 + (NaChar / (1.0 + (1.0 + (Ev / KbT)))); elseif (NaChar <= -7.5e-67) tmp = t_1 + (NdChar / (1.0 + ((1.0 + ((EDonor / KbT) + (mu * ((1.0 / KbT) + (Vef / (mu * KbT)))))) - (Ec / KbT)))); elseif (NaChar <= 1.7e-143) tmp = t_0 + (NaChar / (1.0 + ((1.0 + ((EAccept / KbT) + ((Ev / KbT) + (Vef / KbT)))) - (mu / KbT)))); elseif (NaChar <= 1.4e+64) tmp = t_1 + (NdChar / (1.0 + (EDonor / KbT))); else tmp = t_1 - (NdChar / (-1.0 + ((Ec / KbT) + (-1.0 + (EDonor * ((-1.0 / KbT) - ((Vef / (EDonor * KbT)) + (mu / (EDonor * KbT))))))))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NdChar / N[(1.0 + N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(Ev + N[(EAccept - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -4.1e+60], N[(t$95$1 + N[(NdChar / N[(1.0 + N[(Ec * N[(N[(Vef / N[(Ec * KbT), $MachinePrecision]), $MachinePrecision] + N[(-1.0 / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, -2.2e-36], N[(t$95$0 + N[(NaChar / N[(1.0 + N[(1.0 + N[(Ev / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, -7.5e-67], N[(t$95$1 + N[(NdChar / N[(1.0 + N[(N[(1.0 + N[(N[(EDonor / KbT), $MachinePrecision] + N[(mu * N[(N[(1.0 / KbT), $MachinePrecision] + N[(Vef / N[(mu * KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 1.7e-143], N[(t$95$0 + N[(NaChar / N[(1.0 + N[(N[(1.0 + N[(N[(EAccept / KbT), $MachinePrecision] + N[(N[(Ev / KbT), $MachinePrecision] + N[(Vef / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 1.4e+64], N[(t$95$1 + N[(NdChar / N[(1.0 + N[(EDonor / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(t$95$1 - N[(NdChar / N[(-1.0 + N[(N[(Ec / KbT), $MachinePrecision] + N[(-1.0 + N[(EDonor * N[(N[(-1.0 / KbT), $MachinePrecision] - N[(N[(Vef / N[(EDonor * KbT), $MachinePrecision]), $MachinePrecision] + N[(mu / N[(EDonor * KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{1 + e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}}\\
t_1 := \frac{NaChar}{1 + e^{\frac{Vef + \left(Ev + \left(EAccept - mu\right)\right)}{KbT}}}\\
\mathbf{if}\;NaChar \leq -4.1 \cdot 10^{+60}:\\
\;\;\;\;t\_1 + \frac{NdChar}{1 + Ec \cdot \left(\frac{Vef}{Ec \cdot KbT} + \frac{-1}{KbT}\right)}\\
\mathbf{elif}\;NaChar \leq -2.2 \cdot 10^{-36}:\\
\;\;\;\;t\_0 + \frac{NaChar}{1 + \left(1 + \frac{Ev}{KbT}\right)}\\
\mathbf{elif}\;NaChar \leq -7.5 \cdot 10^{-67}:\\
\;\;\;\;t\_1 + \frac{NdChar}{1 + \left(\left(1 + \left(\frac{EDonor}{KbT} + mu \cdot \left(\frac{1}{KbT} + \frac{Vef}{mu \cdot KbT}\right)\right)\right) - \frac{Ec}{KbT}\right)}\\
\mathbf{elif}\;NaChar \leq 1.7 \cdot 10^{-143}:\\
\;\;\;\;t\_0 + \frac{NaChar}{1 + \left(\left(1 + \left(\frac{EAccept}{KbT} + \left(\frac{Ev}{KbT} + \frac{Vef}{KbT}\right)\right)\right) - \frac{mu}{KbT}\right)}\\
\mathbf{elif}\;NaChar \leq 1.4 \cdot 10^{+64}:\\
\;\;\;\;t\_1 + \frac{NdChar}{1 + \frac{EDonor}{KbT}}\\
\mathbf{else}:\\
\;\;\;\;t\_1 - \frac{NdChar}{-1 + \left(\frac{Ec}{KbT} + \left(-1 + EDonor \cdot \left(\frac{-1}{KbT} - \left(\frac{Vef}{EDonor \cdot KbT} + \frac{mu}{EDonor \cdot KbT}\right)\right)\right)\right)}\\
\end{array}
\end{array}
if NaChar < -4.1e60Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 68.0%
Taylor expanded in Ec around -inf 74.3%
Taylor expanded in Vef around inf 83.2%
*-commutative83.2%
Simplified83.2%
if -4.1e60 < NaChar < -2.1999999999999999e-36Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 75.0%
Taylor expanded in Ev around 0 59.0%
+-commutative59.0%
Simplified59.0%
if -2.1999999999999999e-36 < NaChar < -7.5000000000000005e-67Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 67.9%
Taylor expanded in mu around inf 83.8%
*-commutative83.8%
Simplified83.8%
if -7.5000000000000005e-67 < NaChar < 1.69999999999999992e-143Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 77.0%
if 1.69999999999999992e-143 < NaChar < 1.40000000000000012e64Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 51.2%
Taylor expanded in Ec around -inf 54.8%
Taylor expanded in EDonor around inf 74.0%
associate-*r/74.0%
mul-1-neg74.0%
Simplified74.0%
if 1.40000000000000012e64 < NaChar Initial program 99.8%
Simplified99.8%
Taylor expanded in KbT around inf 67.2%
Taylor expanded in EDonor around inf 72.1%
*-commutative72.1%
*-commutative72.1%
Simplified72.1%
Final simplification74.9%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NdChar (+ 1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT)))))
(t_1
(+
t_0
(/
NaChar
(+
1.0
(-
(+ 1.0 (+ (/ EAccept KbT) (+ (/ Ev KbT) (/ Vef KbT))))
(/ mu KbT))))))
(t_2 (/ NaChar (+ 1.0 (exp (/ (+ Vef (+ Ev (- EAccept mu))) KbT))))))
(if (<= NaChar -1.6e+63)
(+ t_2 (/ NdChar (+ 1.0 (* Ec (+ (/ Vef (* Ec KbT)) (/ -1.0 KbT))))))
(if (<= NaChar -3.6e-7)
t_1
(if (<= NaChar -2.65e-64)
(+ t_2 (/ NdChar (- 1.0 (/ Ec KbT))))
(if (<= NaChar -1.45e-192)
(+ t_0 (/ NaChar (+ (/ EAccept KbT) 2.0)))
(if (<= NaChar 1.8e-143)
t_1
(+
t_2
(/
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 t_0 = NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)));
double t_1 = t_0 + (NaChar / (1.0 + ((1.0 + ((EAccept / KbT) + ((Ev / KbT) + (Vef / KbT)))) - (mu / KbT))));
double t_2 = NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT)));
double tmp;
if (NaChar <= -1.6e+63) {
tmp = t_2 + (NdChar / (1.0 + (Ec * ((Vef / (Ec * KbT)) + (-1.0 / KbT)))));
} else if (NaChar <= -3.6e-7) {
tmp = t_1;
} else if (NaChar <= -2.65e-64) {
tmp = t_2 + (NdChar / (1.0 - (Ec / KbT)));
} else if (NaChar <= -1.45e-192) {
tmp = t_0 + (NaChar / ((EAccept / KbT) + 2.0));
} else if (NaChar <= 1.8e-143) {
tmp = t_1;
} else {
tmp = t_2 + (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) :: t_0
real(8) :: t_1
real(8) :: t_2
real(8) :: tmp
t_0 = ndchar / (1.0d0 + exp(((edonor + (mu + (vef - ec))) / kbt)))
t_1 = t_0 + (nachar / (1.0d0 + ((1.0d0 + ((eaccept / kbt) + ((ev / kbt) + (vef / kbt)))) - (mu / kbt))))
t_2 = nachar / (1.0d0 + exp(((vef + (ev + (eaccept - mu))) / kbt)))
if (nachar <= (-1.6d+63)) then
tmp = t_2 + (ndchar / (1.0d0 + (ec * ((vef / (ec * kbt)) + ((-1.0d0) / kbt)))))
else if (nachar <= (-3.6d-7)) then
tmp = t_1
else if (nachar <= (-2.65d-64)) then
tmp = t_2 + (ndchar / (1.0d0 - (ec / kbt)))
else if (nachar <= (-1.45d-192)) then
tmp = t_0 + (nachar / ((eaccept / kbt) + 2.0d0))
else if (nachar <= 1.8d-143) then
tmp = t_1
else
tmp = t_2 + (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 t_0 = NdChar / (1.0 + Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)));
double t_1 = t_0 + (NaChar / (1.0 + ((1.0 + ((EAccept / KbT) + ((Ev / KbT) + (Vef / KbT)))) - (mu / KbT))));
double t_2 = NaChar / (1.0 + Math.exp(((Vef + (Ev + (EAccept - mu))) / KbT)));
double tmp;
if (NaChar <= -1.6e+63) {
tmp = t_2 + (NdChar / (1.0 + (Ec * ((Vef / (Ec * KbT)) + (-1.0 / KbT)))));
} else if (NaChar <= -3.6e-7) {
tmp = t_1;
} else if (NaChar <= -2.65e-64) {
tmp = t_2 + (NdChar / (1.0 - (Ec / KbT)));
} else if (NaChar <= -1.45e-192) {
tmp = t_0 + (NaChar / ((EAccept / KbT) + 2.0));
} else if (NaChar <= 1.8e-143) {
tmp = t_1;
} else {
tmp = t_2 + (NdChar / (((Vef / KbT) + ((EDonor / KbT) + 2.0)) - (Ec / KbT)));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NdChar / (1.0 + math.exp(((EDonor + (mu + (Vef - Ec))) / KbT))) t_1 = t_0 + (NaChar / (1.0 + ((1.0 + ((EAccept / KbT) + ((Ev / KbT) + (Vef / KbT)))) - (mu / KbT)))) t_2 = NaChar / (1.0 + math.exp(((Vef + (Ev + (EAccept - mu))) / KbT))) tmp = 0 if NaChar <= -1.6e+63: tmp = t_2 + (NdChar / (1.0 + (Ec * ((Vef / (Ec * KbT)) + (-1.0 / KbT))))) elif NaChar <= -3.6e-7: tmp = t_1 elif NaChar <= -2.65e-64: tmp = t_2 + (NdChar / (1.0 - (Ec / KbT))) elif NaChar <= -1.45e-192: tmp = t_0 + (NaChar / ((EAccept / KbT) + 2.0)) elif NaChar <= 1.8e-143: tmp = t_1 else: tmp = t_2 + (NdChar / (((Vef / KbT) + ((EDonor / KbT) + 2.0)) - (Ec / KbT))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NdChar / Float64(1.0 + exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) t_1 = Float64(t_0 + Float64(NaChar / Float64(1.0 + Float64(Float64(1.0 + Float64(Float64(EAccept / KbT) + Float64(Float64(Ev / KbT) + Float64(Vef / KbT)))) - Float64(mu / KbT))))) t_2 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Ev + Float64(EAccept - mu))) / KbT)))) tmp = 0.0 if (NaChar <= -1.6e+63) tmp = Float64(t_2 + Float64(NdChar / Float64(1.0 + Float64(Ec * Float64(Float64(Vef / Float64(Ec * KbT)) + Float64(-1.0 / KbT)))))); elseif (NaChar <= -3.6e-7) tmp = t_1; elseif (NaChar <= -2.65e-64) tmp = Float64(t_2 + Float64(NdChar / Float64(1.0 - Float64(Ec / KbT)))); elseif (NaChar <= -1.45e-192) tmp = Float64(t_0 + Float64(NaChar / Float64(Float64(EAccept / KbT) + 2.0))); elseif (NaChar <= 1.8e-143) tmp = t_1; else tmp = Float64(t_2 + 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) t_0 = NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT))); t_1 = t_0 + (NaChar / (1.0 + ((1.0 + ((EAccept / KbT) + ((Ev / KbT) + (Vef / KbT)))) - (mu / KbT)))); t_2 = NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT))); tmp = 0.0; if (NaChar <= -1.6e+63) tmp = t_2 + (NdChar / (1.0 + (Ec * ((Vef / (Ec * KbT)) + (-1.0 / KbT))))); elseif (NaChar <= -3.6e-7) tmp = t_1; elseif (NaChar <= -2.65e-64) tmp = t_2 + (NdChar / (1.0 - (Ec / KbT))); elseif (NaChar <= -1.45e-192) tmp = t_0 + (NaChar / ((EAccept / KbT) + 2.0)); elseif (NaChar <= 1.8e-143) tmp = t_1; else tmp = t_2 + (NdChar / (((Vef / KbT) + ((EDonor / KbT) + 2.0)) - (Ec / KbT))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NdChar / N[(1.0 + N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(t$95$0 + N[(NaChar / N[(1.0 + N[(N[(1.0 + N[(N[(EAccept / KbT), $MachinePrecision] + N[(N[(Ev / KbT), $MachinePrecision] + N[(Vef / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(Ev + N[(EAccept - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -1.6e+63], N[(t$95$2 + N[(NdChar / N[(1.0 + N[(Ec * N[(N[(Vef / N[(Ec * KbT), $MachinePrecision]), $MachinePrecision] + N[(-1.0 / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, -3.6e-7], t$95$1, If[LessEqual[NaChar, -2.65e-64], N[(t$95$2 + N[(NdChar / N[(1.0 - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, -1.45e-192], N[(t$95$0 + N[(NaChar / N[(N[(EAccept / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 1.8e-143], t$95$1, N[(t$95$2 + 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}
t_0 := \frac{NdChar}{1 + e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}}\\
t_1 := t\_0 + \frac{NaChar}{1 + \left(\left(1 + \left(\frac{EAccept}{KbT} + \left(\frac{Ev}{KbT} + \frac{Vef}{KbT}\right)\right)\right) - \frac{mu}{KbT}\right)}\\
t_2 := \frac{NaChar}{1 + e^{\frac{Vef + \left(Ev + \left(EAccept - mu\right)\right)}{KbT}}}\\
\mathbf{if}\;NaChar \leq -1.6 \cdot 10^{+63}:\\
\;\;\;\;t\_2 + \frac{NdChar}{1 + Ec \cdot \left(\frac{Vef}{Ec \cdot KbT} + \frac{-1}{KbT}\right)}\\
\mathbf{elif}\;NaChar \leq -3.6 \cdot 10^{-7}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;NaChar \leq -2.65 \cdot 10^{-64}:\\
\;\;\;\;t\_2 + \frac{NdChar}{1 - \frac{Ec}{KbT}}\\
\mathbf{elif}\;NaChar \leq -1.45 \cdot 10^{-192}:\\
\;\;\;\;t\_0 + \frac{NaChar}{\frac{EAccept}{KbT} + 2}\\
\mathbf{elif}\;NaChar \leq 1.8 \cdot 10^{-143}:\\
\;\;\;\;t\_1\\
\mathbf{else}:\\
\;\;\;\;t\_2 + \frac{NdChar}{\left(\frac{Vef}{KbT} + \left(\frac{EDonor}{KbT} + 2\right)\right) - \frac{Ec}{KbT}}\\
\end{array}
\end{array}
if NaChar < -1.60000000000000006e63Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 68.0%
Taylor expanded in Ec around -inf 74.3%
Taylor expanded in Vef around inf 83.2%
*-commutative83.2%
Simplified83.2%
if -1.60000000000000006e63 < NaChar < -3.59999999999999994e-7 or -1.45000000000000008e-192 < NaChar < 1.7999999999999999e-143Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 80.0%
if -3.59999999999999994e-7 < NaChar < -2.6500000000000001e-64Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 58.1%
Taylor expanded in Ec around -inf 58.1%
Taylor expanded in Ec around inf 65.8%
if -2.6500000000000001e-64 < NaChar < -1.45000000000000008e-192Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 66.8%
Taylor expanded in EAccept around 0 63.5%
if 1.7999999999999999e-143 < NaChar Initial program 99.8%
Simplified99.8%
Taylor expanded in KbT around inf 61.7%
Taylor expanded in mu around 0 67.9%
associate-+r+67.9%
Simplified67.9%
Final simplification73.6%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NdChar (+ 1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT)))))
(t_1 (/ NaChar (+ 1.0 (exp (/ (+ Vef (+ Ev (- EAccept mu))) KbT))))))
(if (<= NaChar -2.05e+63)
(+ t_1 (/ NdChar (+ 1.0 (* Ec (+ (/ Vef (* Ec KbT)) (/ -1.0 KbT))))))
(if (<= NaChar -2.35e-35)
(+ t_0 (/ NaChar (+ 1.0 (+ 1.0 (/ Ev KbT)))))
(if (<= NaChar -2.4e-66)
(+
t_1
(/
NdChar
(+
1.0
(-
(+
1.0
(+ (/ EDonor KbT) (* mu (+ (/ 1.0 KbT) (/ Vef (* mu KbT))))))
(/ Ec KbT)))))
(if (<= NaChar 1.75e-143)
(+
t_0
(/
NaChar
(+
1.0
(-
(+ 1.0 (+ (/ EAccept KbT) (+ (/ Ev KbT) (/ Vef KbT))))
(/ mu KbT)))))
(+
t_1
(/
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 t_0 = NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)));
double t_1 = NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT)));
double tmp;
if (NaChar <= -2.05e+63) {
tmp = t_1 + (NdChar / (1.0 + (Ec * ((Vef / (Ec * KbT)) + (-1.0 / KbT)))));
} else if (NaChar <= -2.35e-35) {
tmp = t_0 + (NaChar / (1.0 + (1.0 + (Ev / KbT))));
} else if (NaChar <= -2.4e-66) {
tmp = t_1 + (NdChar / (1.0 + ((1.0 + ((EDonor / KbT) + (mu * ((1.0 / KbT) + (Vef / (mu * KbT)))))) - (Ec / KbT))));
} else if (NaChar <= 1.75e-143) {
tmp = t_0 + (NaChar / (1.0 + ((1.0 + ((EAccept / KbT) + ((Ev / KbT) + (Vef / KbT)))) - (mu / KbT))));
} else {
tmp = t_1 + (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) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = ndchar / (1.0d0 + exp(((edonor + (mu + (vef - ec))) / kbt)))
t_1 = nachar / (1.0d0 + exp(((vef + (ev + (eaccept - mu))) / kbt)))
if (nachar <= (-2.05d+63)) then
tmp = t_1 + (ndchar / (1.0d0 + (ec * ((vef / (ec * kbt)) + ((-1.0d0) / kbt)))))
else if (nachar <= (-2.35d-35)) then
tmp = t_0 + (nachar / (1.0d0 + (1.0d0 + (ev / kbt))))
else if (nachar <= (-2.4d-66)) then
tmp = t_1 + (ndchar / (1.0d0 + ((1.0d0 + ((edonor / kbt) + (mu * ((1.0d0 / kbt) + (vef / (mu * kbt)))))) - (ec / kbt))))
else if (nachar <= 1.75d-143) then
tmp = t_0 + (nachar / (1.0d0 + ((1.0d0 + ((eaccept / kbt) + ((ev / kbt) + (vef / kbt)))) - (mu / kbt))))
else
tmp = t_1 + (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 t_0 = NdChar / (1.0 + Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)));
double t_1 = NaChar / (1.0 + Math.exp(((Vef + (Ev + (EAccept - mu))) / KbT)));
double tmp;
if (NaChar <= -2.05e+63) {
tmp = t_1 + (NdChar / (1.0 + (Ec * ((Vef / (Ec * KbT)) + (-1.0 / KbT)))));
} else if (NaChar <= -2.35e-35) {
tmp = t_0 + (NaChar / (1.0 + (1.0 + (Ev / KbT))));
} else if (NaChar <= -2.4e-66) {
tmp = t_1 + (NdChar / (1.0 + ((1.0 + ((EDonor / KbT) + (mu * ((1.0 / KbT) + (Vef / (mu * KbT)))))) - (Ec / KbT))));
} else if (NaChar <= 1.75e-143) {
tmp = t_0 + (NaChar / (1.0 + ((1.0 + ((EAccept / KbT) + ((Ev / KbT) + (Vef / KbT)))) - (mu / KbT))));
} else {
tmp = t_1 + (NdChar / (((Vef / KbT) + ((EDonor / KbT) + 2.0)) - (Ec / KbT)));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NdChar / (1.0 + math.exp(((EDonor + (mu + (Vef - Ec))) / KbT))) t_1 = NaChar / (1.0 + math.exp(((Vef + (Ev + (EAccept - mu))) / KbT))) tmp = 0 if NaChar <= -2.05e+63: tmp = t_1 + (NdChar / (1.0 + (Ec * ((Vef / (Ec * KbT)) + (-1.0 / KbT))))) elif NaChar <= -2.35e-35: tmp = t_0 + (NaChar / (1.0 + (1.0 + (Ev / KbT)))) elif NaChar <= -2.4e-66: tmp = t_1 + (NdChar / (1.0 + ((1.0 + ((EDonor / KbT) + (mu * ((1.0 / KbT) + (Vef / (mu * KbT)))))) - (Ec / KbT)))) elif NaChar <= 1.75e-143: tmp = t_0 + (NaChar / (1.0 + ((1.0 + ((EAccept / KbT) + ((Ev / KbT) + (Vef / KbT)))) - (mu / KbT)))) else: tmp = t_1 + (NdChar / (((Vef / KbT) + ((EDonor / KbT) + 2.0)) - (Ec / KbT))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NdChar / Float64(1.0 + exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) t_1 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Ev + Float64(EAccept - mu))) / KbT)))) tmp = 0.0 if (NaChar <= -2.05e+63) tmp = Float64(t_1 + Float64(NdChar / Float64(1.0 + Float64(Ec * Float64(Float64(Vef / Float64(Ec * KbT)) + Float64(-1.0 / KbT)))))); elseif (NaChar <= -2.35e-35) tmp = Float64(t_0 + Float64(NaChar / Float64(1.0 + Float64(1.0 + Float64(Ev / KbT))))); elseif (NaChar <= -2.4e-66) tmp = Float64(t_1 + Float64(NdChar / Float64(1.0 + Float64(Float64(1.0 + Float64(Float64(EDonor / KbT) + Float64(mu * Float64(Float64(1.0 / KbT) + Float64(Vef / Float64(mu * KbT)))))) - Float64(Ec / KbT))))); elseif (NaChar <= 1.75e-143) tmp = Float64(t_0 + Float64(NaChar / Float64(1.0 + Float64(Float64(1.0 + Float64(Float64(EAccept / KbT) + Float64(Float64(Ev / KbT) + Float64(Vef / KbT)))) - Float64(mu / KbT))))); else tmp = Float64(t_1 + 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) t_0 = NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT))); t_1 = NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT))); tmp = 0.0; if (NaChar <= -2.05e+63) tmp = t_1 + (NdChar / (1.0 + (Ec * ((Vef / (Ec * KbT)) + (-1.0 / KbT))))); elseif (NaChar <= -2.35e-35) tmp = t_0 + (NaChar / (1.0 + (1.0 + (Ev / KbT)))); elseif (NaChar <= -2.4e-66) tmp = t_1 + (NdChar / (1.0 + ((1.0 + ((EDonor / KbT) + (mu * ((1.0 / KbT) + (Vef / (mu * KbT)))))) - (Ec / KbT)))); elseif (NaChar <= 1.75e-143) tmp = t_0 + (NaChar / (1.0 + ((1.0 + ((EAccept / KbT) + ((Ev / KbT) + (Vef / KbT)))) - (mu / KbT)))); else tmp = t_1 + (NdChar / (((Vef / KbT) + ((EDonor / KbT) + 2.0)) - (Ec / KbT))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NdChar / N[(1.0 + N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(Ev + N[(EAccept - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -2.05e+63], N[(t$95$1 + N[(NdChar / N[(1.0 + N[(Ec * N[(N[(Vef / N[(Ec * KbT), $MachinePrecision]), $MachinePrecision] + N[(-1.0 / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, -2.35e-35], N[(t$95$0 + N[(NaChar / N[(1.0 + N[(1.0 + N[(Ev / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, -2.4e-66], N[(t$95$1 + N[(NdChar / N[(1.0 + N[(N[(1.0 + N[(N[(EDonor / KbT), $MachinePrecision] + N[(mu * N[(N[(1.0 / KbT), $MachinePrecision] + N[(Vef / N[(mu * KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 1.75e-143], N[(t$95$0 + N[(NaChar / N[(1.0 + N[(N[(1.0 + N[(N[(EAccept / KbT), $MachinePrecision] + N[(N[(Ev / KbT), $MachinePrecision] + N[(Vef / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(t$95$1 + 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}
t_0 := \frac{NdChar}{1 + e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}}\\
t_1 := \frac{NaChar}{1 + e^{\frac{Vef + \left(Ev + \left(EAccept - mu\right)\right)}{KbT}}}\\
\mathbf{if}\;NaChar \leq -2.05 \cdot 10^{+63}:\\
\;\;\;\;t\_1 + \frac{NdChar}{1 + Ec \cdot \left(\frac{Vef}{Ec \cdot KbT} + \frac{-1}{KbT}\right)}\\
\mathbf{elif}\;NaChar \leq -2.35 \cdot 10^{-35}:\\
\;\;\;\;t\_0 + \frac{NaChar}{1 + \left(1 + \frac{Ev}{KbT}\right)}\\
\mathbf{elif}\;NaChar \leq -2.4 \cdot 10^{-66}:\\
\;\;\;\;t\_1 + \frac{NdChar}{1 + \left(\left(1 + \left(\frac{EDonor}{KbT} + mu \cdot \left(\frac{1}{KbT} + \frac{Vef}{mu \cdot KbT}\right)\right)\right) - \frac{Ec}{KbT}\right)}\\
\mathbf{elif}\;NaChar \leq 1.75 \cdot 10^{-143}:\\
\;\;\;\;t\_0 + \frac{NaChar}{1 + \left(\left(1 + \left(\frac{EAccept}{KbT} + \left(\frac{Ev}{KbT} + \frac{Vef}{KbT}\right)\right)\right) - \frac{mu}{KbT}\right)}\\
\mathbf{else}:\\
\;\;\;\;t\_1 + \frac{NdChar}{\left(\frac{Vef}{KbT} + \left(\frac{EDonor}{KbT} + 2\right)\right) - \frac{Ec}{KbT}}\\
\end{array}
\end{array}
if NaChar < -2.04999999999999996e63Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 68.0%
Taylor expanded in Ec around -inf 74.3%
Taylor expanded in Vef around inf 83.2%
*-commutative83.2%
Simplified83.2%
if -2.04999999999999996e63 < NaChar < -2.35e-35Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 75.0%
Taylor expanded in Ev around 0 59.0%
+-commutative59.0%
Simplified59.0%
if -2.35e-35 < NaChar < -2.40000000000000026e-66Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 67.9%
Taylor expanded in mu around inf 83.8%
*-commutative83.8%
Simplified83.8%
if -2.40000000000000026e-66 < NaChar < 1.75000000000000003e-143Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 77.0%
if 1.75000000000000003e-143 < NaChar Initial program 99.8%
Simplified99.8%
Taylor expanded in KbT around inf 61.7%
Taylor expanded in mu around 0 67.9%
associate-+r+67.9%
Simplified67.9%
Final simplification73.2%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NdChar (+ 1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT)))))
(t_1 (/ NaChar (+ 1.0 (exp (/ (+ Vef (+ Ev (- EAccept mu))) KbT)))))
(t_2 (+ t_0 (/ NaChar (+ 1.0 (+ 1.0 (/ Ev KbT))))))
(t_3
(+
t_1
(/ NdChar (- (+ (/ Vef KbT) (+ (/ EDonor KbT) 2.0)) (/ Ec KbT))))))
(if (<= NaChar -9e+61)
(+ t_1 (/ NdChar (- 1.0 (/ Ec KbT))))
(if (<= NaChar -2.55e-36)
t_2
(if (<= NaChar -2.8e-83)
t_3
(if (<= NaChar -3e-190)
(+ t_0 (/ NaChar (+ (/ EAccept KbT) 2.0)))
(if (<= NaChar 1.8e-143) t_2 t_3)))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)));
double t_1 = NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT)));
double t_2 = t_0 + (NaChar / (1.0 + (1.0 + (Ev / KbT))));
double t_3 = t_1 + (NdChar / (((Vef / KbT) + ((EDonor / KbT) + 2.0)) - (Ec / KbT)));
double tmp;
if (NaChar <= -9e+61) {
tmp = t_1 + (NdChar / (1.0 - (Ec / KbT)));
} else if (NaChar <= -2.55e-36) {
tmp = t_2;
} else if (NaChar <= -2.8e-83) {
tmp = t_3;
} else if (NaChar <= -3e-190) {
tmp = t_0 + (NaChar / ((EAccept / KbT) + 2.0));
} else if (NaChar <= 1.8e-143) {
tmp = t_2;
} else {
tmp = t_3;
}
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 = ndchar / (1.0d0 + exp(((edonor + (mu + (vef - ec))) / kbt)))
t_1 = nachar / (1.0d0 + exp(((vef + (ev + (eaccept - mu))) / kbt)))
t_2 = t_0 + (nachar / (1.0d0 + (1.0d0 + (ev / kbt))))
t_3 = t_1 + (ndchar / (((vef / kbt) + ((edonor / kbt) + 2.0d0)) - (ec / kbt)))
if (nachar <= (-9d+61)) then
tmp = t_1 + (ndchar / (1.0d0 - (ec / kbt)))
else if (nachar <= (-2.55d-36)) then
tmp = t_2
else if (nachar <= (-2.8d-83)) then
tmp = t_3
else if (nachar <= (-3d-190)) then
tmp = t_0 + (nachar / ((eaccept / kbt) + 2.0d0))
else if (nachar <= 1.8d-143) then
tmp = t_2
else
tmp = t_3
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (1.0 + Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)));
double t_1 = NaChar / (1.0 + Math.exp(((Vef + (Ev + (EAccept - mu))) / KbT)));
double t_2 = t_0 + (NaChar / (1.0 + (1.0 + (Ev / KbT))));
double t_3 = t_1 + (NdChar / (((Vef / KbT) + ((EDonor / KbT) + 2.0)) - (Ec / KbT)));
double tmp;
if (NaChar <= -9e+61) {
tmp = t_1 + (NdChar / (1.0 - (Ec / KbT)));
} else if (NaChar <= -2.55e-36) {
tmp = t_2;
} else if (NaChar <= -2.8e-83) {
tmp = t_3;
} else if (NaChar <= -3e-190) {
tmp = t_0 + (NaChar / ((EAccept / KbT) + 2.0));
} else if (NaChar <= 1.8e-143) {
tmp = t_2;
} else {
tmp = t_3;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NdChar / (1.0 + math.exp(((EDonor + (mu + (Vef - Ec))) / KbT))) t_1 = NaChar / (1.0 + math.exp(((Vef + (Ev + (EAccept - mu))) / KbT))) t_2 = t_0 + (NaChar / (1.0 + (1.0 + (Ev / KbT)))) t_3 = t_1 + (NdChar / (((Vef / KbT) + ((EDonor / KbT) + 2.0)) - (Ec / KbT))) tmp = 0 if NaChar <= -9e+61: tmp = t_1 + (NdChar / (1.0 - (Ec / KbT))) elif NaChar <= -2.55e-36: tmp = t_2 elif NaChar <= -2.8e-83: tmp = t_3 elif NaChar <= -3e-190: tmp = t_0 + (NaChar / ((EAccept / KbT) + 2.0)) elif NaChar <= 1.8e-143: tmp = t_2 else: tmp = t_3 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NdChar / Float64(1.0 + exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) t_1 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Ev + Float64(EAccept - mu))) / KbT)))) t_2 = Float64(t_0 + Float64(NaChar / Float64(1.0 + Float64(1.0 + Float64(Ev / KbT))))) t_3 = Float64(t_1 + Float64(NdChar / Float64(Float64(Float64(Vef / KbT) + Float64(Float64(EDonor / KbT) + 2.0)) - Float64(Ec / KbT)))) tmp = 0.0 if (NaChar <= -9e+61) tmp = Float64(t_1 + Float64(NdChar / Float64(1.0 - Float64(Ec / KbT)))); elseif (NaChar <= -2.55e-36) tmp = t_2; elseif (NaChar <= -2.8e-83) tmp = t_3; elseif (NaChar <= -3e-190) tmp = Float64(t_0 + Float64(NaChar / Float64(Float64(EAccept / KbT) + 2.0))); elseif (NaChar <= 1.8e-143) tmp = t_2; else tmp = t_3; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT))); t_1 = NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT))); t_2 = t_0 + (NaChar / (1.0 + (1.0 + (Ev / KbT)))); t_3 = t_1 + (NdChar / (((Vef / KbT) + ((EDonor / KbT) + 2.0)) - (Ec / KbT))); tmp = 0.0; if (NaChar <= -9e+61) tmp = t_1 + (NdChar / (1.0 - (Ec / KbT))); elseif (NaChar <= -2.55e-36) tmp = t_2; elseif (NaChar <= -2.8e-83) tmp = t_3; elseif (NaChar <= -3e-190) tmp = t_0 + (NaChar / ((EAccept / KbT) + 2.0)); elseif (NaChar <= 1.8e-143) tmp = t_2; else tmp = t_3; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NdChar / N[(1.0 + N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(Ev + N[(EAccept - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(t$95$0 + N[(NaChar / N[(1.0 + N[(1.0 + N[(Ev / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$3 = N[(t$95$1 + 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, -9e+61], N[(t$95$1 + N[(NdChar / N[(1.0 - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, -2.55e-36], t$95$2, If[LessEqual[NaChar, -2.8e-83], t$95$3, If[LessEqual[NaChar, -3e-190], N[(t$95$0 + N[(NaChar / N[(N[(EAccept / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 1.8e-143], t$95$2, t$95$3]]]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{1 + e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}}\\
t_1 := \frac{NaChar}{1 + e^{\frac{Vef + \left(Ev + \left(EAccept - mu\right)\right)}{KbT}}}\\
t_2 := t\_0 + \frac{NaChar}{1 + \left(1 + \frac{Ev}{KbT}\right)}\\
t_3 := t\_1 + \frac{NdChar}{\left(\frac{Vef}{KbT} + \left(\frac{EDonor}{KbT} + 2\right)\right) - \frac{Ec}{KbT}}\\
\mathbf{if}\;NaChar \leq -9 \cdot 10^{+61}:\\
\;\;\;\;t\_1 + \frac{NdChar}{1 - \frac{Ec}{KbT}}\\
\mathbf{elif}\;NaChar \leq -2.55 \cdot 10^{-36}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;NaChar \leq -2.8 \cdot 10^{-83}:\\
\;\;\;\;t\_3\\
\mathbf{elif}\;NaChar \leq -3 \cdot 10^{-190}:\\
\;\;\;\;t\_0 + \frac{NaChar}{\frac{EAccept}{KbT} + 2}\\
\mathbf{elif}\;NaChar \leq 1.8 \cdot 10^{-143}:\\
\;\;\;\;t\_2\\
\mathbf{else}:\\
\;\;\;\;t\_3\\
\end{array}
\end{array}
if NaChar < -9e61Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 68.0%
Taylor expanded in Ec around -inf 74.3%
Taylor expanded in Ec around inf 76.9%
if -9e61 < NaChar < -2.54999999999999987e-36 or -2.9999999999999998e-190 < NaChar < 1.7999999999999999e-143Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 83.2%
Taylor expanded in Ev around 0 76.0%
+-commutative76.0%
Simplified76.0%
if -2.54999999999999987e-36 < NaChar < -2.8000000000000001e-83 or 1.7999999999999999e-143 < NaChar Initial program 99.9%
Simplified99.9%
Taylor expanded in KbT around inf 62.7%
Taylor expanded in mu around 0 68.2%
associate-+r+68.2%
Simplified68.2%
if -2.8000000000000001e-83 < NaChar < -2.9999999999999998e-190Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 67.4%
Taylor expanded in EAccept around 0 63.3%
Final simplification72.0%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NaChar (+ 1.0 (exp (/ (+ Vef (+ Ev (- EAccept mu))) KbT))))))
(if (<= NaChar -3.4e+60)
(+ t_0 (/ NdChar (+ 1.0 (* Ec (+ (/ Vef (* Ec KbT)) (/ -1.0 KbT))))))
(if (<= NaChar 1.55e-143)
(+
(/ NdChar (+ 1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT))))
(/
NaChar
(+
1.0
(-
(+ 1.0 (+ (/ EAccept KbT) (+ (/ Ev KbT) (/ Vef KbT))))
(/ mu KbT)))))
(if (<= NaChar 3e+64)
(+ t_0 (/ NdChar (+ 1.0 (/ EDonor KbT))))
(+
t_0
(/
NdChar
(+
1.0
(*
Vef
(+
(/ 1.0 KbT)
(/
(- (+ 1.0 (+ (/ mu KbT) (/ EDonor KbT))) (/ Ec KbT))
Vef)))))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT)));
double tmp;
if (NaChar <= -3.4e+60) {
tmp = t_0 + (NdChar / (1.0 + (Ec * ((Vef / (Ec * KbT)) + (-1.0 / KbT)))));
} else if (NaChar <= 1.55e-143) {
tmp = (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + ((1.0 + ((EAccept / KbT) + ((Ev / KbT) + (Vef / KbT)))) - (mu / KbT))));
} else if (NaChar <= 3e+64) {
tmp = t_0 + (NdChar / (1.0 + (EDonor / KbT)));
} else {
tmp = t_0 + (NdChar / (1.0 + (Vef * ((1.0 / KbT) + (((1.0 + ((mu / KbT) + (EDonor / KbT))) - (Ec / KbT)) / 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 = nachar / (1.0d0 + exp(((vef + (ev + (eaccept - mu))) / kbt)))
if (nachar <= (-3.4d+60)) then
tmp = t_0 + (ndchar / (1.0d0 + (ec * ((vef / (ec * kbt)) + ((-1.0d0) / kbt)))))
else if (nachar <= 1.55d-143) then
tmp = (ndchar / (1.0d0 + exp(((edonor + (mu + (vef - ec))) / kbt)))) + (nachar / (1.0d0 + ((1.0d0 + ((eaccept / kbt) + ((ev / kbt) + (vef / kbt)))) - (mu / kbt))))
else if (nachar <= 3d+64) then
tmp = t_0 + (ndchar / (1.0d0 + (edonor / kbt)))
else
tmp = t_0 + (ndchar / (1.0d0 + (vef * ((1.0d0 / kbt) + (((1.0d0 + ((mu / kbt) + (edonor / kbt))) - (ec / kbt)) / 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 = NaChar / (1.0 + Math.exp(((Vef + (Ev + (EAccept - mu))) / KbT)));
double tmp;
if (NaChar <= -3.4e+60) {
tmp = t_0 + (NdChar / (1.0 + (Ec * ((Vef / (Ec * KbT)) + (-1.0 / KbT)))));
} else if (NaChar <= 1.55e-143) {
tmp = (NdChar / (1.0 + Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + ((1.0 + ((EAccept / KbT) + ((Ev / KbT) + (Vef / KbT)))) - (mu / KbT))));
} else if (NaChar <= 3e+64) {
tmp = t_0 + (NdChar / (1.0 + (EDonor / KbT)));
} else {
tmp = t_0 + (NdChar / (1.0 + (Vef * ((1.0 / KbT) + (((1.0 + ((mu / KbT) + (EDonor / KbT))) - (Ec / KbT)) / Vef)))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NaChar / (1.0 + math.exp(((Vef + (Ev + (EAccept - mu))) / KbT))) tmp = 0 if NaChar <= -3.4e+60: tmp = t_0 + (NdChar / (1.0 + (Ec * ((Vef / (Ec * KbT)) + (-1.0 / KbT))))) elif NaChar <= 1.55e-143: tmp = (NdChar / (1.0 + math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + ((1.0 + ((EAccept / KbT) + ((Ev / KbT) + (Vef / KbT)))) - (mu / KbT)))) elif NaChar <= 3e+64: tmp = t_0 + (NdChar / (1.0 + (EDonor / KbT))) else: tmp = t_0 + (NdChar / (1.0 + (Vef * ((1.0 / KbT) + (((1.0 + ((mu / KbT) + (EDonor / KbT))) - (Ec / KbT)) / Vef))))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Ev + Float64(EAccept - mu))) / KbT)))) tmp = 0.0 if (NaChar <= -3.4e+60) tmp = Float64(t_0 + Float64(NdChar / Float64(1.0 + Float64(Ec * Float64(Float64(Vef / Float64(Ec * KbT)) + Float64(-1.0 / KbT)))))); elseif (NaChar <= 1.55e-143) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) + Float64(NaChar / Float64(1.0 + Float64(Float64(1.0 + Float64(Float64(EAccept / KbT) + Float64(Float64(Ev / KbT) + Float64(Vef / KbT)))) - Float64(mu / KbT))))); elseif (NaChar <= 3e+64) tmp = Float64(t_0 + Float64(NdChar / Float64(1.0 + Float64(EDonor / KbT)))); else tmp = Float64(t_0 + Float64(NdChar / Float64(1.0 + Float64(Vef * Float64(Float64(1.0 / KbT) + Float64(Float64(Float64(1.0 + Float64(Float64(mu / KbT) + Float64(EDonor / KbT))) - Float64(Ec / KbT)) / Vef)))))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT))); tmp = 0.0; if (NaChar <= -3.4e+60) tmp = t_0 + (NdChar / (1.0 + (Ec * ((Vef / (Ec * KbT)) + (-1.0 / KbT))))); elseif (NaChar <= 1.55e-143) tmp = (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + ((1.0 + ((EAccept / KbT) + ((Ev / KbT) + (Vef / KbT)))) - (mu / KbT)))); elseif (NaChar <= 3e+64) tmp = t_0 + (NdChar / (1.0 + (EDonor / KbT))); else tmp = t_0 + (NdChar / (1.0 + (Vef * ((1.0 / KbT) + (((1.0 + ((mu / KbT) + (EDonor / KbT))) - (Ec / KbT)) / Vef))))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(Ev + N[(EAccept - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -3.4e+60], N[(t$95$0 + N[(NdChar / N[(1.0 + N[(Ec * N[(N[(Vef / N[(Ec * KbT), $MachinePrecision]), $MachinePrecision] + N[(-1.0 / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 1.55e-143], N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[(N[(1.0 + N[(N[(EAccept / KbT), $MachinePrecision] + N[(N[(Ev / KbT), $MachinePrecision] + N[(Vef / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 3e+64], N[(t$95$0 + N[(NdChar / N[(1.0 + N[(EDonor / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(t$95$0 + N[(NdChar / N[(1.0 + N[(Vef * N[(N[(1.0 / KbT), $MachinePrecision] + N[(N[(N[(1.0 + N[(N[(mu / KbT), $MachinePrecision] + N[(EDonor / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision] / Vef), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{Vef + \left(Ev + \left(EAccept - mu\right)\right)}{KbT}}}\\
\mathbf{if}\;NaChar \leq -3.4 \cdot 10^{+60}:\\
\;\;\;\;t\_0 + \frac{NdChar}{1 + Ec \cdot \left(\frac{Vef}{Ec \cdot KbT} + \frac{-1}{KbT}\right)}\\
\mathbf{elif}\;NaChar \leq 1.55 \cdot 10^{-143}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}} + \frac{NaChar}{1 + \left(\left(1 + \left(\frac{EAccept}{KbT} + \left(\frac{Ev}{KbT} + \frac{Vef}{KbT}\right)\right)\right) - \frac{mu}{KbT}\right)}\\
\mathbf{elif}\;NaChar \leq 3 \cdot 10^{+64}:\\
\;\;\;\;t\_0 + \frac{NdChar}{1 + \frac{EDonor}{KbT}}\\
\mathbf{else}:\\
\;\;\;\;t\_0 + \frac{NdChar}{1 + Vef \cdot \left(\frac{1}{KbT} + \frac{\left(1 + \left(\frac{mu}{KbT} + \frac{EDonor}{KbT}\right)\right) - \frac{Ec}{KbT}}{Vef}\right)}\\
\end{array}
\end{array}
if NaChar < -3.4e60Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 68.0%
Taylor expanded in Ec around -inf 74.3%
Taylor expanded in Vef around inf 83.2%
*-commutative83.2%
Simplified83.2%
if -3.4e60 < NaChar < 1.55000000000000004e-143Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 71.3%
if 1.55000000000000004e-143 < NaChar < 3.0000000000000002e64Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 51.2%
Taylor expanded in Ec around -inf 54.8%
Taylor expanded in EDonor around inf 74.0%
associate-*r/74.0%
mul-1-neg74.0%
Simplified74.0%
if 3.0000000000000002e64 < NaChar Initial program 99.8%
Simplified99.8%
Taylor expanded in KbT around inf 67.2%
Taylor expanded in Vef around -inf 72.2%
Final simplification73.9%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NaChar (+ 1.0 (exp (/ (+ Vef (+ Ev (- EAccept mu))) KbT)))))
(t_1 (/ NdChar (+ 1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT)))))
(t_2 (+ t_1 (/ NaChar (+ 1.0 (+ 1.0 (/ Ev KbT)))))))
(if (<= NdChar -1.15e+57)
t_2
(if (<= NdChar -1.45e-87)
(+ t_0 (* (/ KbT Ec) (/ NdChar (+ 1.0 (/ (+ mu (+ EDonor Vef)) Ec)))))
(if (<= NdChar -9e-123)
(+ t_1 (/ NaChar (+ (/ EAccept KbT) 2.0)))
(if (<= NdChar 7.2e+58)
(+ t_0 (/ NdChar (- 1.0 (/ Ec KbT))))
t_2))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT)));
double t_1 = NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)));
double t_2 = t_1 + (NaChar / (1.0 + (1.0 + (Ev / KbT))));
double tmp;
if (NdChar <= -1.15e+57) {
tmp = t_2;
} else if (NdChar <= -1.45e-87) {
tmp = t_0 + ((KbT / Ec) * (NdChar / (1.0 + ((mu + (EDonor + Vef)) / Ec))));
} else if (NdChar <= -9e-123) {
tmp = t_1 + (NaChar / ((EAccept / KbT) + 2.0));
} else if (NdChar <= 7.2e+58) {
tmp = t_0 + (NdChar / (1.0 - (Ec / KbT)));
} else {
tmp = t_2;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: t_2
real(8) :: tmp
t_0 = nachar / (1.0d0 + exp(((vef + (ev + (eaccept - mu))) / kbt)))
t_1 = ndchar / (1.0d0 + exp(((edonor + (mu + (vef - ec))) / kbt)))
t_2 = t_1 + (nachar / (1.0d0 + (1.0d0 + (ev / kbt))))
if (ndchar <= (-1.15d+57)) then
tmp = t_2
else if (ndchar <= (-1.45d-87)) then
tmp = t_0 + ((kbt / ec) * (ndchar / (1.0d0 + ((mu + (edonor + vef)) / ec))))
else if (ndchar <= (-9d-123)) then
tmp = t_1 + (nachar / ((eaccept / kbt) + 2.0d0))
else if (ndchar <= 7.2d+58) then
tmp = t_0 + (ndchar / (1.0d0 - (ec / kbt)))
else
tmp = t_2
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NaChar / (1.0 + Math.exp(((Vef + (Ev + (EAccept - mu))) / KbT)));
double t_1 = NdChar / (1.0 + Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)));
double t_2 = t_1 + (NaChar / (1.0 + (1.0 + (Ev / KbT))));
double tmp;
if (NdChar <= -1.15e+57) {
tmp = t_2;
} else if (NdChar <= -1.45e-87) {
tmp = t_0 + ((KbT / Ec) * (NdChar / (1.0 + ((mu + (EDonor + Vef)) / Ec))));
} else if (NdChar <= -9e-123) {
tmp = t_1 + (NaChar / ((EAccept / KbT) + 2.0));
} else if (NdChar <= 7.2e+58) {
tmp = t_0 + (NdChar / (1.0 - (Ec / KbT)));
} else {
tmp = t_2;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NaChar / (1.0 + math.exp(((Vef + (Ev + (EAccept - mu))) / KbT))) t_1 = NdChar / (1.0 + math.exp(((EDonor + (mu + (Vef - Ec))) / KbT))) t_2 = t_1 + (NaChar / (1.0 + (1.0 + (Ev / KbT)))) tmp = 0 if NdChar <= -1.15e+57: tmp = t_2 elif NdChar <= -1.45e-87: tmp = t_0 + ((KbT / Ec) * (NdChar / (1.0 + ((mu + (EDonor + Vef)) / Ec)))) elif NdChar <= -9e-123: tmp = t_1 + (NaChar / ((EAccept / KbT) + 2.0)) elif NdChar <= 7.2e+58: tmp = t_0 + (NdChar / (1.0 - (Ec / KbT))) else: tmp = t_2 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Ev + Float64(EAccept - mu))) / KbT)))) t_1 = Float64(NdChar / Float64(1.0 + exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) t_2 = Float64(t_1 + Float64(NaChar / Float64(1.0 + Float64(1.0 + Float64(Ev / KbT))))) tmp = 0.0 if (NdChar <= -1.15e+57) tmp = t_2; elseif (NdChar <= -1.45e-87) tmp = Float64(t_0 + Float64(Float64(KbT / Ec) * Float64(NdChar / Float64(1.0 + Float64(Float64(mu + Float64(EDonor + Vef)) / Ec))))); elseif (NdChar <= -9e-123) tmp = Float64(t_1 + Float64(NaChar / Float64(Float64(EAccept / KbT) + 2.0))); elseif (NdChar <= 7.2e+58) tmp = Float64(t_0 + Float64(NdChar / Float64(1.0 - Float64(Ec / KbT)))); else tmp = t_2; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT))); t_1 = NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT))); t_2 = t_1 + (NaChar / (1.0 + (1.0 + (Ev / KbT)))); tmp = 0.0; if (NdChar <= -1.15e+57) tmp = t_2; elseif (NdChar <= -1.45e-87) tmp = t_0 + ((KbT / Ec) * (NdChar / (1.0 + ((mu + (EDonor + Vef)) / Ec)))); elseif (NdChar <= -9e-123) tmp = t_1 + (NaChar / ((EAccept / KbT) + 2.0)); elseif (NdChar <= 7.2e+58) tmp = t_0 + (NdChar / (1.0 - (Ec / KbT))); else tmp = t_2; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(Ev + N[(EAccept - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(NdChar / N[(1.0 + N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(t$95$1 + N[(NaChar / N[(1.0 + N[(1.0 + N[(Ev / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NdChar, -1.15e+57], t$95$2, If[LessEqual[NdChar, -1.45e-87], N[(t$95$0 + N[(N[(KbT / Ec), $MachinePrecision] * N[(NdChar / N[(1.0 + N[(N[(mu + N[(EDonor + Vef), $MachinePrecision]), $MachinePrecision] / Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NdChar, -9e-123], N[(t$95$1 + N[(NaChar / N[(N[(EAccept / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NdChar, 7.2e+58], N[(t$95$0 + N[(NdChar / N[(1.0 - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$2]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{Vef + \left(Ev + \left(EAccept - mu\right)\right)}{KbT}}}\\
t_1 := \frac{NdChar}{1 + e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}}\\
t_2 := t\_1 + \frac{NaChar}{1 + \left(1 + \frac{Ev}{KbT}\right)}\\
\mathbf{if}\;NdChar \leq -1.15 \cdot 10^{+57}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;NdChar \leq -1.45 \cdot 10^{-87}:\\
\;\;\;\;t\_0 + \frac{KbT}{Ec} \cdot \frac{NdChar}{1 + \frac{mu + \left(EDonor + Vef\right)}{Ec}}\\
\mathbf{elif}\;NdChar \leq -9 \cdot 10^{-123}:\\
\;\;\;\;t\_1 + \frac{NaChar}{\frac{EAccept}{KbT} + 2}\\
\mathbf{elif}\;NdChar \leq 7.2 \cdot 10^{+58}:\\
\;\;\;\;t\_0 + \frac{NdChar}{1 - \frac{Ec}{KbT}}\\
\mathbf{else}:\\
\;\;\;\;t\_2\\
\end{array}
\end{array}
if NdChar < -1.1499999999999999e57 or 7.19999999999999993e58 < NdChar Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 79.9%
Taylor expanded in Ev around 0 70.0%
+-commutative70.0%
Simplified70.0%
if -1.1499999999999999e57 < NdChar < -1.45e-87Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 62.4%
Taylor expanded in Ec around -inf 71.5%
Taylor expanded in KbT around 0 66.6%
associate-*r/66.6%
associate-*r*66.6%
mul-1-neg66.6%
mul-1-neg66.6%
Simplified66.6%
times-frac69.7%
add-sqr-sqrt34.5%
sqrt-unprod68.9%
sqr-neg68.9%
sqrt-unprod35.4%
add-sqr-sqrt69.9%
add-sqr-sqrt45.1%
sqrt-unprod72.7%
sqr-neg72.7%
sqrt-unprod24.6%
add-sqr-sqrt69.7%
associate-+r+69.7%
Applied egg-rr69.7%
if -1.45e-87 < NdChar < -8.99999999999999986e-123Initial program 99.8%
Simplified99.8%
Taylor expanded in EAccept around inf 80.0%
Taylor expanded in EAccept around 0 80.0%
if -8.99999999999999986e-123 < NdChar < 7.19999999999999993e58Initial program 99.9%
Simplified99.9%
Taylor expanded in KbT around inf 58.8%
Taylor expanded in Ec around -inf 60.5%
Taylor expanded in Ec around inf 72.7%
Final simplification71.5%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0
(+
(/ NdChar (+ 1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT))))
(/ NaChar (+ (/ EAccept KbT) 2.0))))
(t_1 (/ NaChar (+ 1.0 (exp (/ (+ Vef (+ Ev (- EAccept mu))) KbT)))))
(t_2 (+ t_1 (* NdChar 0.5))))
(if (<= NaChar -5e-82)
t_2
(if (<= NaChar 4.2e-13)
t_0
(if (<= NaChar 1.15e+38)
(+ t_1 (* KbT (/ NdChar EDonor)))
(if (<= NaChar 2.2e+107) 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(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / ((EAccept / KbT) + 2.0));
double t_1 = NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT)));
double t_2 = t_1 + (NdChar * 0.5);
double tmp;
if (NaChar <= -5e-82) {
tmp = t_2;
} else if (NaChar <= 4.2e-13) {
tmp = t_0;
} else if (NaChar <= 1.15e+38) {
tmp = t_1 + (KbT * (NdChar / EDonor));
} else if (NaChar <= 2.2e+107) {
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(((edonor + (mu + (vef - ec))) / kbt)))) + (nachar / ((eaccept / kbt) + 2.0d0))
t_1 = nachar / (1.0d0 + exp(((vef + (ev + (eaccept - mu))) / kbt)))
t_2 = t_1 + (ndchar * 0.5d0)
if (nachar <= (-5d-82)) then
tmp = t_2
else if (nachar <= 4.2d-13) then
tmp = t_0
else if (nachar <= 1.15d+38) then
tmp = t_1 + (kbt * (ndchar / edonor))
else if (nachar <= 2.2d+107) 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(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / ((EAccept / KbT) + 2.0));
double t_1 = NaChar / (1.0 + Math.exp(((Vef + (Ev + (EAccept - mu))) / KbT)));
double t_2 = t_1 + (NdChar * 0.5);
double tmp;
if (NaChar <= -5e-82) {
tmp = t_2;
} else if (NaChar <= 4.2e-13) {
tmp = t_0;
} else if (NaChar <= 1.15e+38) {
tmp = t_1 + (KbT * (NdChar / EDonor));
} else if (NaChar <= 2.2e+107) {
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(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / ((EAccept / KbT) + 2.0)) t_1 = NaChar / (1.0 + math.exp(((Vef + (Ev + (EAccept - mu))) / KbT))) t_2 = t_1 + (NdChar * 0.5) tmp = 0 if NaChar <= -5e-82: tmp = t_2 elif NaChar <= 4.2e-13: tmp = t_0 elif NaChar <= 1.15e+38: tmp = t_1 + (KbT * (NdChar / EDonor)) elif NaChar <= 2.2e+107: 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(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) + Float64(NaChar / Float64(Float64(EAccept / KbT) + 2.0))) t_1 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Ev + Float64(EAccept - mu))) / KbT)))) t_2 = Float64(t_1 + Float64(NdChar * 0.5)) tmp = 0.0 if (NaChar <= -5e-82) tmp = t_2; elseif (NaChar <= 4.2e-13) tmp = t_0; elseif (NaChar <= 1.15e+38) tmp = Float64(t_1 + Float64(KbT * Float64(NdChar / EDonor))); elseif (NaChar <= 2.2e+107) 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(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / ((EAccept / KbT) + 2.0)); t_1 = NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT))); t_2 = t_1 + (NdChar * 0.5); tmp = 0.0; if (NaChar <= -5e-82) tmp = t_2; elseif (NaChar <= 4.2e-13) tmp = t_0; elseif (NaChar <= 1.15e+38) tmp = t_1 + (KbT * (NdChar / EDonor)); elseif (NaChar <= 2.2e+107) 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[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(N[(EAccept / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(Ev + N[(EAccept - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(t$95$1 + N[(NdChar * 0.5), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -5e-82], t$95$2, If[LessEqual[NaChar, 4.2e-13], t$95$0, If[LessEqual[NaChar, 1.15e+38], N[(t$95$1 + N[(KbT * N[(NdChar / EDonor), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 2.2e+107], t$95$0, t$95$2]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{1 + e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}} + \frac{NaChar}{\frac{EAccept}{KbT} + 2}\\
t_1 := \frac{NaChar}{1 + e^{\frac{Vef + \left(Ev + \left(EAccept - mu\right)\right)}{KbT}}}\\
t_2 := t\_1 + NdChar \cdot 0.5\\
\mathbf{if}\;NaChar \leq -5 \cdot 10^{-82}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;NaChar \leq 4.2 \cdot 10^{-13}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;NaChar \leq 1.15 \cdot 10^{+38}:\\
\;\;\;\;t\_1 + KbT \cdot \frac{NdChar}{EDonor}\\
\mathbf{elif}\;NaChar \leq 2.2 \cdot 10^{+107}:\\
\;\;\;\;t\_0\\
\mathbf{else}:\\
\;\;\;\;t\_2\\
\end{array}
\end{array}
if NaChar < -4.9999999999999998e-82 or 2.2e107 < NaChar Initial program 99.9%
Simplified99.9%
Taylor expanded in KbT around inf 66.9%
Taylor expanded in Ec around -inf 69.1%
Taylor expanded in KbT around inf 61.6%
if -4.9999999999999998e-82 < NaChar < 4.19999999999999977e-13 or 1.1500000000000001e38 < NaChar < 2.2e107Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 76.6%
Taylor expanded in EAccept around 0 67.7%
if 4.19999999999999977e-13 < NaChar < 1.1500000000000001e38Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 39.1%
Taylor expanded in EDonor around inf 96.2%
associate-/l*96.2%
Simplified96.2%
Final simplification65.3%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NdChar (+ 1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT)))))
(t_1 (/ NaChar (+ 1.0 (exp (/ (+ Vef (+ Ev (- EAccept mu))) KbT)))))
(t_2 (+ t_1 (* NdChar 0.5))))
(if (<= NaChar -5.6e+41)
t_2
(if (<= NaChar 1.65e-11)
(+ t_0 (/ NaChar (+ 1.0 (+ 1.0 (/ Ev KbT)))))
(if (<= NaChar 9e+43)
(+ t_1 (* KbT (/ NdChar EDonor)))
(if (<= NaChar 2.2e+107)
(+ t_0 (/ NaChar (+ (/ EAccept KbT) 2.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(((EDonor + (mu + (Vef - Ec))) / KbT)));
double t_1 = NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT)));
double t_2 = t_1 + (NdChar * 0.5);
double tmp;
if (NaChar <= -5.6e+41) {
tmp = t_2;
} else if (NaChar <= 1.65e-11) {
tmp = t_0 + (NaChar / (1.0 + (1.0 + (Ev / KbT))));
} else if (NaChar <= 9e+43) {
tmp = t_1 + (KbT * (NdChar / EDonor));
} else if (NaChar <= 2.2e+107) {
tmp = t_0 + (NaChar / ((EAccept / KbT) + 2.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(((edonor + (mu + (vef - ec))) / kbt)))
t_1 = nachar / (1.0d0 + exp(((vef + (ev + (eaccept - mu))) / kbt)))
t_2 = t_1 + (ndchar * 0.5d0)
if (nachar <= (-5.6d+41)) then
tmp = t_2
else if (nachar <= 1.65d-11) then
tmp = t_0 + (nachar / (1.0d0 + (1.0d0 + (ev / kbt))))
else if (nachar <= 9d+43) then
tmp = t_1 + (kbt * (ndchar / edonor))
else if (nachar <= 2.2d+107) then
tmp = t_0 + (nachar / ((eaccept / kbt) + 2.0d0))
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(((EDonor + (mu + (Vef - Ec))) / KbT)));
double t_1 = NaChar / (1.0 + Math.exp(((Vef + (Ev + (EAccept - mu))) / KbT)));
double t_2 = t_1 + (NdChar * 0.5);
double tmp;
if (NaChar <= -5.6e+41) {
tmp = t_2;
} else if (NaChar <= 1.65e-11) {
tmp = t_0 + (NaChar / (1.0 + (1.0 + (Ev / KbT))));
} else if (NaChar <= 9e+43) {
tmp = t_1 + (KbT * (NdChar / EDonor));
} else if (NaChar <= 2.2e+107) {
tmp = t_0 + (NaChar / ((EAccept / KbT) + 2.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(((EDonor + (mu + (Vef - Ec))) / KbT))) t_1 = NaChar / (1.0 + math.exp(((Vef + (Ev + (EAccept - mu))) / KbT))) t_2 = t_1 + (NdChar * 0.5) tmp = 0 if NaChar <= -5.6e+41: tmp = t_2 elif NaChar <= 1.65e-11: tmp = t_0 + (NaChar / (1.0 + (1.0 + (Ev / KbT)))) elif NaChar <= 9e+43: tmp = t_1 + (KbT * (NdChar / EDonor)) elif NaChar <= 2.2e+107: tmp = t_0 + (NaChar / ((EAccept / KbT) + 2.0)) else: tmp = t_2 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NdChar / Float64(1.0 + exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) t_1 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Ev + Float64(EAccept - mu))) / KbT)))) t_2 = Float64(t_1 + Float64(NdChar * 0.5)) tmp = 0.0 if (NaChar <= -5.6e+41) tmp = t_2; elseif (NaChar <= 1.65e-11) tmp = Float64(t_0 + Float64(NaChar / Float64(1.0 + Float64(1.0 + Float64(Ev / KbT))))); elseif (NaChar <= 9e+43) tmp = Float64(t_1 + Float64(KbT * Float64(NdChar / EDonor))); elseif (NaChar <= 2.2e+107) tmp = Float64(t_0 + Float64(NaChar / Float64(Float64(EAccept / KbT) + 2.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(((EDonor + (mu + (Vef - Ec))) / KbT))); t_1 = NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT))); t_2 = t_1 + (NdChar * 0.5); tmp = 0.0; if (NaChar <= -5.6e+41) tmp = t_2; elseif (NaChar <= 1.65e-11) tmp = t_0 + (NaChar / (1.0 + (1.0 + (Ev / KbT)))); elseif (NaChar <= 9e+43) tmp = t_1 + (KbT * (NdChar / EDonor)); elseif (NaChar <= 2.2e+107) tmp = t_0 + (NaChar / ((EAccept / KbT) + 2.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[(NdChar / N[(1.0 + N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(Ev + N[(EAccept - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(t$95$1 + N[(NdChar * 0.5), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -5.6e+41], t$95$2, If[LessEqual[NaChar, 1.65e-11], N[(t$95$0 + N[(NaChar / N[(1.0 + N[(1.0 + N[(Ev / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 9e+43], N[(t$95$1 + N[(KbT * N[(NdChar / EDonor), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 2.2e+107], N[(t$95$0 + N[(NaChar / N[(N[(EAccept / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$2]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{1 + e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}}\\
t_1 := \frac{NaChar}{1 + e^{\frac{Vef + \left(Ev + \left(EAccept - mu\right)\right)}{KbT}}}\\
t_2 := t\_1 + NdChar \cdot 0.5\\
\mathbf{if}\;NaChar \leq -5.6 \cdot 10^{+41}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;NaChar \leq 1.65 \cdot 10^{-11}:\\
\;\;\;\;t\_0 + \frac{NaChar}{1 + \left(1 + \frac{Ev}{KbT}\right)}\\
\mathbf{elif}\;NaChar \leq 9 \cdot 10^{+43}:\\
\;\;\;\;t\_1 + KbT \cdot \frac{NdChar}{EDonor}\\
\mathbf{elif}\;NaChar \leq 2.2 \cdot 10^{+107}:\\
\;\;\;\;t\_0 + \frac{NaChar}{\frac{EAccept}{KbT} + 2}\\
\mathbf{else}:\\
\;\;\;\;t\_2\\
\end{array}
\end{array}
if NaChar < -5.5999999999999999e41 or 2.2e107 < NaChar Initial program 99.9%
Simplified99.9%
Taylor expanded in KbT around inf 70.9%
Taylor expanded in Ec around -inf 73.8%
Taylor expanded in KbT around inf 64.6%
if -5.5999999999999999e41 < NaChar < 1.6500000000000001e-11Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 83.4%
Taylor expanded in Ev around 0 70.0%
+-commutative70.0%
Simplified70.0%
if 1.6500000000000001e-11 < NaChar < 9e43Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 39.1%
Taylor expanded in EDonor around inf 96.2%
associate-/l*96.2%
Simplified96.2%
if 9e43 < NaChar < 2.2e107Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 83.7%
Taylor expanded in EAccept around 0 59.0%
Final simplification68.1%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NaChar (+ 1.0 (exp (/ (+ Vef (+ Ev (- EAccept mu))) KbT))))))
(if (<= NaChar -2.7e+60)
(+ t_0 (/ NdChar (+ 1.0 (* Ec (+ (/ Vef (* Ec KbT)) (/ -1.0 KbT))))))
(if (<= NaChar 7.2e-144)
(+
(/ NdChar (+ 1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT))))
(/ NaChar (+ 1.0 (+ 1.0 (/ Ev KbT)))))
(+
t_0
(/ 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 t_0 = NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT)));
double tmp;
if (NaChar <= -2.7e+60) {
tmp = t_0 + (NdChar / (1.0 + (Ec * ((Vef / (Ec * KbT)) + (-1.0 / KbT)))));
} else if (NaChar <= 7.2e-144) {
tmp = (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + (1.0 + (Ev / KbT))));
} else {
tmp = t_0 + (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) :: t_0
real(8) :: tmp
t_0 = nachar / (1.0d0 + exp(((vef + (ev + (eaccept - mu))) / kbt)))
if (nachar <= (-2.7d+60)) then
tmp = t_0 + (ndchar / (1.0d0 + (ec * ((vef / (ec * kbt)) + ((-1.0d0) / kbt)))))
else if (nachar <= 7.2d-144) then
tmp = (ndchar / (1.0d0 + exp(((edonor + (mu + (vef - ec))) / kbt)))) + (nachar / (1.0d0 + (1.0d0 + (ev / kbt))))
else
tmp = t_0 + (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 t_0 = NaChar / (1.0 + Math.exp(((Vef + (Ev + (EAccept - mu))) / KbT)));
double tmp;
if (NaChar <= -2.7e+60) {
tmp = t_0 + (NdChar / (1.0 + (Ec * ((Vef / (Ec * KbT)) + (-1.0 / KbT)))));
} else if (NaChar <= 7.2e-144) {
tmp = (NdChar / (1.0 + Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + (1.0 + (Ev / KbT))));
} else {
tmp = t_0 + (NdChar / (((Vef / KbT) + ((EDonor / KbT) + 2.0)) - (Ec / KbT)));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NaChar / (1.0 + math.exp(((Vef + (Ev + (EAccept - mu))) / KbT))) tmp = 0 if NaChar <= -2.7e+60: tmp = t_0 + (NdChar / (1.0 + (Ec * ((Vef / (Ec * KbT)) + (-1.0 / KbT))))) elif NaChar <= 7.2e-144: tmp = (NdChar / (1.0 + math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + (1.0 + (Ev / KbT)))) else: tmp = t_0 + (NdChar / (((Vef / KbT) + ((EDonor / KbT) + 2.0)) - (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(Ev + Float64(EAccept - mu))) / KbT)))) tmp = 0.0 if (NaChar <= -2.7e+60) tmp = Float64(t_0 + Float64(NdChar / Float64(1.0 + Float64(Ec * Float64(Float64(Vef / Float64(Ec * KbT)) + Float64(-1.0 / KbT)))))); elseif (NaChar <= 7.2e-144) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) + Float64(NaChar / Float64(1.0 + Float64(1.0 + Float64(Ev / KbT))))); else tmp = Float64(t_0 + 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) t_0 = NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT))); tmp = 0.0; if (NaChar <= -2.7e+60) tmp = t_0 + (NdChar / (1.0 + (Ec * ((Vef / (Ec * KbT)) + (-1.0 / KbT))))); elseif (NaChar <= 7.2e-144) tmp = (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + (1.0 + (Ev / KbT)))); else tmp = t_0 + (NdChar / (((Vef / KbT) + ((EDonor / KbT) + 2.0)) - (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[(Ev + N[(EAccept - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -2.7e+60], N[(t$95$0 + N[(NdChar / N[(1.0 + N[(Ec * N[(N[(Vef / N[(Ec * KbT), $MachinePrecision]), $MachinePrecision] + N[(-1.0 / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 7.2e-144], N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[(1.0 + N[(Ev / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], 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]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{Vef + \left(Ev + \left(EAccept - mu\right)\right)}{KbT}}}\\
\mathbf{if}\;NaChar \leq -2.7 \cdot 10^{+60}:\\
\;\;\;\;t\_0 + \frac{NdChar}{1 + Ec \cdot \left(\frac{Vef}{Ec \cdot KbT} + \frac{-1}{KbT}\right)}\\
\mathbf{elif}\;NaChar \leq 7.2 \cdot 10^{-144}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}} + \frac{NaChar}{1 + \left(1 + \frac{Ev}{KbT}\right)}\\
\mathbf{else}:\\
\;\;\;\;t\_0 + \frac{NdChar}{\left(\frac{Vef}{KbT} + \left(\frac{EDonor}{KbT} + 2\right)\right) - \frac{Ec}{KbT}}\\
\end{array}
\end{array}
if NaChar < -2.6999999999999999e60Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 68.0%
Taylor expanded in Ec around -inf 74.3%
Taylor expanded in Vef around inf 83.2%
*-commutative83.2%
Simplified83.2%
if -2.6999999999999999e60 < NaChar < 7.2000000000000001e-144Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 83.2%
Taylor expanded in Ev around 0 72.0%
+-commutative72.0%
Simplified72.0%
if 7.2000000000000001e-144 < NaChar Initial program 99.8%
Simplified99.8%
Taylor expanded in KbT around inf 61.7%
Taylor expanded in mu around 0 67.9%
associate-+r+67.9%
Simplified67.9%
Final simplification72.5%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0
(+
(/ NdChar (+ 1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT))))
(* NaChar 0.5)))
(t_1 (/ NaChar (+ 1.0 (exp (/ (+ Vef (+ Ev (- EAccept mu))) KbT)))))
(t_2 (+ t_1 (* NdChar 0.5))))
(if (<= NaChar -5e-82)
t_2
(if (<= NaChar 6.8e-12)
t_0
(if (<= NaChar 8.5e+33)
(+ t_1 (* KbT (/ NdChar EDonor)))
(if (<= NaChar 2.2e+107) 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(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar * 0.5);
double t_1 = NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT)));
double t_2 = t_1 + (NdChar * 0.5);
double tmp;
if (NaChar <= -5e-82) {
tmp = t_2;
} else if (NaChar <= 6.8e-12) {
tmp = t_0;
} else if (NaChar <= 8.5e+33) {
tmp = t_1 + (KbT * (NdChar / EDonor));
} else if (NaChar <= 2.2e+107) {
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(((edonor + (mu + (vef - ec))) / kbt)))) + (nachar * 0.5d0)
t_1 = nachar / (1.0d0 + exp(((vef + (ev + (eaccept - mu))) / kbt)))
t_2 = t_1 + (ndchar * 0.5d0)
if (nachar <= (-5d-82)) then
tmp = t_2
else if (nachar <= 6.8d-12) then
tmp = t_0
else if (nachar <= 8.5d+33) then
tmp = t_1 + (kbt * (ndchar / edonor))
else if (nachar <= 2.2d+107) 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(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar * 0.5);
double t_1 = NaChar / (1.0 + Math.exp(((Vef + (Ev + (EAccept - mu))) / KbT)));
double t_2 = t_1 + (NdChar * 0.5);
double tmp;
if (NaChar <= -5e-82) {
tmp = t_2;
} else if (NaChar <= 6.8e-12) {
tmp = t_0;
} else if (NaChar <= 8.5e+33) {
tmp = t_1 + (KbT * (NdChar / EDonor));
} else if (NaChar <= 2.2e+107) {
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(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar * 0.5) t_1 = NaChar / (1.0 + math.exp(((Vef + (Ev + (EAccept - mu))) / KbT))) t_2 = t_1 + (NdChar * 0.5) tmp = 0 if NaChar <= -5e-82: tmp = t_2 elif NaChar <= 6.8e-12: tmp = t_0 elif NaChar <= 8.5e+33: tmp = t_1 + (KbT * (NdChar / EDonor)) elif NaChar <= 2.2e+107: 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(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) + Float64(NaChar * 0.5)) t_1 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Ev + Float64(EAccept - mu))) / KbT)))) t_2 = Float64(t_1 + Float64(NdChar * 0.5)) tmp = 0.0 if (NaChar <= -5e-82) tmp = t_2; elseif (NaChar <= 6.8e-12) tmp = t_0; elseif (NaChar <= 8.5e+33) tmp = Float64(t_1 + Float64(KbT * Float64(NdChar / EDonor))); elseif (NaChar <= 2.2e+107) 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(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar * 0.5); t_1 = NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT))); t_2 = t_1 + (NdChar * 0.5); tmp = 0.0; if (NaChar <= -5e-82) tmp = t_2; elseif (NaChar <= 6.8e-12) tmp = t_0; elseif (NaChar <= 8.5e+33) tmp = t_1 + (KbT * (NdChar / EDonor)); elseif (NaChar <= 2.2e+107) 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[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar * 0.5), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(Ev + N[(EAccept - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(t$95$1 + N[(NdChar * 0.5), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -5e-82], t$95$2, If[LessEqual[NaChar, 6.8e-12], t$95$0, If[LessEqual[NaChar, 8.5e+33], N[(t$95$1 + N[(KbT * N[(NdChar / EDonor), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 2.2e+107], t$95$0, t$95$2]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{1 + e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}} + NaChar \cdot 0.5\\
t_1 := \frac{NaChar}{1 + e^{\frac{Vef + \left(Ev + \left(EAccept - mu\right)\right)}{KbT}}}\\
t_2 := t\_1 + NdChar \cdot 0.5\\
\mathbf{if}\;NaChar \leq -5 \cdot 10^{-82}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;NaChar \leq 6.8 \cdot 10^{-12}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;NaChar \leq 8.5 \cdot 10^{+33}:\\
\;\;\;\;t\_1 + KbT \cdot \frac{NdChar}{EDonor}\\
\mathbf{elif}\;NaChar \leq 2.2 \cdot 10^{+107}:\\
\;\;\;\;t\_0\\
\mathbf{else}:\\
\;\;\;\;t\_2\\
\end{array}
\end{array}
if NaChar < -4.9999999999999998e-82 or 2.2e107 < NaChar Initial program 99.9%
Simplified99.9%
Taylor expanded in KbT around inf 66.9%
Taylor expanded in Ec around -inf 69.1%
Taylor expanded in KbT around inf 61.6%
if -4.9999999999999998e-82 < NaChar < 6.8000000000000001e-12 or 8.4999999999999998e33 < NaChar < 2.2e107Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 63.7%
if 6.8000000000000001e-12 < NaChar < 8.4999999999999998e33Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 39.1%
Taylor expanded in EDonor around inf 96.2%
associate-/l*96.2%
Simplified96.2%
Final simplification63.5%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (or (<= NdChar -1.15e+57) (not (<= NdChar 1.18e+58)))
(+
(/ NdChar (+ 1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT))))
(/ NaChar (+ 1.0 (+ 1.0 (/ Ev KbT)))))
(+
(/ NaChar (+ 1.0 (exp (/ (+ Vef (+ Ev (- EAccept mu))) KbT))))
(/ NdChar (- 1.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 <= -1.15e+57) || !(NdChar <= 1.18e+58)) {
tmp = (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + (1.0 + (Ev / KbT))));
} else {
tmp = (NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT)))) + (NdChar / (1.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 <= (-1.15d+57)) .or. (.not. (ndchar <= 1.18d+58))) then
tmp = (ndchar / (1.0d0 + exp(((edonor + (mu + (vef - ec))) / kbt)))) + (nachar / (1.0d0 + (1.0d0 + (ev / kbt))))
else
tmp = (nachar / (1.0d0 + exp(((vef + (ev + (eaccept - mu))) / kbt)))) + (ndchar / (1.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 <= -1.15e+57) || !(NdChar <= 1.18e+58)) {
tmp = (NdChar / (1.0 + Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + (1.0 + (Ev / KbT))));
} else {
tmp = (NaChar / (1.0 + Math.exp(((Vef + (Ev + (EAccept - mu))) / KbT)))) + (NdChar / (1.0 - (Ec / KbT)));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if (NdChar <= -1.15e+57) or not (NdChar <= 1.18e+58): tmp = (NdChar / (1.0 + math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + (1.0 + (Ev / KbT)))) else: tmp = (NaChar / (1.0 + math.exp(((Vef + (Ev + (EAccept - mu))) / KbT)))) + (NdChar / (1.0 - (Ec / KbT))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if ((NdChar <= -1.15e+57) || !(NdChar <= 1.18e+58)) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) + Float64(NaChar / Float64(1.0 + Float64(1.0 + Float64(Ev / KbT))))); else tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Ev + Float64(EAccept - mu))) / KbT)))) + Float64(NdChar / Float64(1.0 - Float64(Ec / KbT)))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if ((NdChar <= -1.15e+57) || ~((NdChar <= 1.18e+58))) tmp = (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + (1.0 + (Ev / KbT)))); else tmp = (NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT)))) + (NdChar / (1.0 - (Ec / KbT))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[Or[LessEqual[NdChar, -1.15e+57], N[Not[LessEqual[NdChar, 1.18e+58]], $MachinePrecision]], N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[(1.0 + N[(Ev / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(Ev + N[(EAccept - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(1.0 - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NdChar \leq -1.15 \cdot 10^{+57} \lor \neg \left(NdChar \leq 1.18 \cdot 10^{+58}\right):\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}} + \frac{NaChar}{1 + \left(1 + \frac{Ev}{KbT}\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Vef + \left(Ev + \left(EAccept - mu\right)\right)}{KbT}}} + \frac{NdChar}{1 - \frac{Ec}{KbT}}\\
\end{array}
\end{array}
if NdChar < -1.1499999999999999e57 or 1.18000000000000003e58 < NdChar Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 79.9%
Taylor expanded in Ev around 0 70.0%
+-commutative70.0%
Simplified70.0%
if -1.1499999999999999e57 < NdChar < 1.18000000000000003e58Initial program 99.9%
Simplified99.9%
Taylor expanded in KbT around inf 60.4%
Taylor expanded in Ec around -inf 63.6%
Taylor expanded in Ec around inf 68.6%
Final simplification69.2%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0
(+
(/ NdChar (+ 1.0 (exp (/ (- (+ mu Vef) Ec) KbT))))
(* NaChar 0.5))))
(if (<= KbT -2.8e-25)
t_0
(if (<= KbT -7.5e-240)
(+ (/ NaChar (+ 1.0 (exp (/ EAccept KbT)))) (* NdChar 0.5))
(if (<= KbT 1.6e-245)
(+ (* KbT (/ NdChar EDonor)) (/ NaChar (+ 1.0 (exp (/ mu (- KbT))))))
t_0)))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NdChar / (1.0 + exp((((mu + Vef) - Ec) / KbT)))) + (NaChar * 0.5);
double tmp;
if (KbT <= -2.8e-25) {
tmp = t_0;
} else if (KbT <= -7.5e-240) {
tmp = (NaChar / (1.0 + exp((EAccept / KbT)))) + (NdChar * 0.5);
} else if (KbT <= 1.6e-245) {
tmp = (KbT * (NdChar / EDonor)) + (NaChar / (1.0 + exp((mu / -KbT))));
} else {
tmp = t_0;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: tmp
t_0 = (ndchar / (1.0d0 + exp((((mu + vef) - ec) / kbt)))) + (nachar * 0.5d0)
if (kbt <= (-2.8d-25)) then
tmp = t_0
else if (kbt <= (-7.5d-240)) then
tmp = (nachar / (1.0d0 + exp((eaccept / kbt)))) + (ndchar * 0.5d0)
else if (kbt <= 1.6d-245) then
tmp = (kbt * (ndchar / edonor)) + (nachar / (1.0d0 + exp((mu / -kbt))))
else
tmp = t_0
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NdChar / (1.0 + Math.exp((((mu + Vef) - Ec) / KbT)))) + (NaChar * 0.5);
double tmp;
if (KbT <= -2.8e-25) {
tmp = t_0;
} else if (KbT <= -7.5e-240) {
tmp = (NaChar / (1.0 + Math.exp((EAccept / KbT)))) + (NdChar * 0.5);
} else if (KbT <= 1.6e-245) {
tmp = (KbT * (NdChar / EDonor)) + (NaChar / (1.0 + Math.exp((mu / -KbT))));
} else {
tmp = t_0;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = (NdChar / (1.0 + math.exp((((mu + Vef) - Ec) / KbT)))) + (NaChar * 0.5) tmp = 0 if KbT <= -2.8e-25: tmp = t_0 elif KbT <= -7.5e-240: tmp = (NaChar / (1.0 + math.exp((EAccept / KbT)))) + (NdChar * 0.5) elif KbT <= 1.6e-245: tmp = (KbT * (NdChar / EDonor)) + (NaChar / (1.0 + math.exp((mu / -KbT)))) else: tmp = t_0 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(Float64(mu + Vef) - Ec) / KbT)))) + Float64(NaChar * 0.5)) tmp = 0.0 if (KbT <= -2.8e-25) tmp = t_0; elseif (KbT <= -7.5e-240) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT)))) + Float64(NdChar * 0.5)); elseif (KbT <= 1.6e-245) tmp = Float64(Float64(KbT * Float64(NdChar / EDonor)) + Float64(NaChar / Float64(1.0 + exp(Float64(mu / Float64(-KbT)))))); else tmp = t_0; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = (NdChar / (1.0 + exp((((mu + Vef) - Ec) / KbT)))) + (NaChar * 0.5); tmp = 0.0; if (KbT <= -2.8e-25) tmp = t_0; elseif (KbT <= -7.5e-240) tmp = (NaChar / (1.0 + exp((EAccept / KbT)))) + (NdChar * 0.5); elseif (KbT <= 1.6e-245) tmp = (KbT * (NdChar / EDonor)) + (NaChar / (1.0 + exp((mu / -KbT)))); else tmp = t_0; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(N[(mu + Vef), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar * 0.5), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[KbT, -2.8e-25], t$95$0, If[LessEqual[KbT, -7.5e-240], N[(N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar * 0.5), $MachinePrecision]), $MachinePrecision], If[LessEqual[KbT, 1.6e-245], N[(N[(KbT * N[(NdChar / EDonor), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Exp[N[(mu / (-KbT)), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$0]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{1 + e^{\frac{\left(mu + Vef\right) - Ec}{KbT}}} + NaChar \cdot 0.5\\
\mathbf{if}\;KbT \leq -2.8 \cdot 10^{-25}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;KbT \leq -7.5 \cdot 10^{-240}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}} + NdChar \cdot 0.5\\
\mathbf{elif}\;KbT \leq 1.6 \cdot 10^{-245}:\\
\;\;\;\;KbT \cdot \frac{NdChar}{EDonor} + \frac{NaChar}{1 + e^{\frac{mu}{-KbT}}}\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if KbT < -2.79999999999999988e-25 or 1.59999999999999993e-245 < KbT Initial program 99.9%
Simplified99.9%
Taylor expanded in KbT around inf 56.1%
Taylor expanded in EDonor around 0 52.4%
if -2.79999999999999988e-25 < KbT < -7.4999999999999995e-240Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 73.4%
Taylor expanded in KbT around inf 31.6%
if -7.4999999999999995e-240 < KbT < 1.59999999999999993e-245Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 41.7%
Taylor expanded in EDonor around inf 67.0%
associate-/l*67.0%
Simplified67.0%
Taylor expanded in mu around inf 57.4%
associate-*r/57.4%
mul-1-neg57.4%
Simplified57.4%
Final simplification48.9%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (or (<= NaChar -1.35e-83) (not (<= NaChar 8e-77)))
(+
(/ NaChar (+ 1.0 (exp (/ (+ Vef (+ Ev (- EAccept mu))) KbT))))
(* NdChar 0.5))
(+ (/ NdChar (+ 1.0 (exp (/ (- (+ mu Vef) Ec) KbT)))) (* NaChar 0.5))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NaChar <= -1.35e-83) || !(NaChar <= 8e-77)) {
tmp = (NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT)))) + (NdChar * 0.5);
} else {
tmp = (NdChar / (1.0 + exp((((mu + Vef) - Ec) / KbT)))) + (NaChar * 0.5);
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if ((nachar <= (-1.35d-83)) .or. (.not. (nachar <= 8d-77))) then
tmp = (nachar / (1.0d0 + exp(((vef + (ev + (eaccept - mu))) / kbt)))) + (ndchar * 0.5d0)
else
tmp = (ndchar / (1.0d0 + exp((((mu + vef) - ec) / kbt)))) + (nachar * 0.5d0)
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NaChar <= -1.35e-83) || !(NaChar <= 8e-77)) {
tmp = (NaChar / (1.0 + Math.exp(((Vef + (Ev + (EAccept - mu))) / KbT)))) + (NdChar * 0.5);
} else {
tmp = (NdChar / (1.0 + Math.exp((((mu + Vef) - Ec) / KbT)))) + (NaChar * 0.5);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if (NaChar <= -1.35e-83) or not (NaChar <= 8e-77): tmp = (NaChar / (1.0 + math.exp(((Vef + (Ev + (EAccept - mu))) / KbT)))) + (NdChar * 0.5) else: tmp = (NdChar / (1.0 + math.exp((((mu + Vef) - Ec) / KbT)))) + (NaChar * 0.5) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if ((NaChar <= -1.35e-83) || !(NaChar <= 8e-77)) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Ev + Float64(EAccept - mu))) / KbT)))) + Float64(NdChar * 0.5)); else tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(Float64(mu + Vef) - Ec) / KbT)))) + Float64(NaChar * 0.5)); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if ((NaChar <= -1.35e-83) || ~((NaChar <= 8e-77))) tmp = (NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT)))) + (NdChar * 0.5); else tmp = (NdChar / (1.0 + exp((((mu + Vef) - Ec) / KbT)))) + (NaChar * 0.5); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[Or[LessEqual[NaChar, -1.35e-83], N[Not[LessEqual[NaChar, 8e-77]], $MachinePrecision]], N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(Ev + N[(EAccept - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar * 0.5), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(N[(mu + Vef), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar * 0.5), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NaChar \leq -1.35 \cdot 10^{-83} \lor \neg \left(NaChar \leq 8 \cdot 10^{-77}\right):\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Vef + \left(Ev + \left(EAccept - mu\right)\right)}{KbT}}} + NdChar \cdot 0.5\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{\left(mu + Vef\right) - Ec}{KbT}}} + NaChar \cdot 0.5\\
\end{array}
\end{array}
if NaChar < -1.34999999999999996e-83 or 7.9999999999999994e-77 < NaChar Initial program 99.9%
Simplified99.9%
Taylor expanded in KbT around inf 62.0%
Taylor expanded in Ec around -inf 65.1%
Taylor expanded in KbT around inf 59.0%
if -1.34999999999999996e-83 < NaChar < 7.9999999999999994e-77Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 66.2%
Taylor expanded in EDonor around 0 58.8%
Final simplification59.0%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (or (<= NaChar -2.2e-82) (not (<= NaChar 1.8e-13)))
(+
(/ NaChar (+ 1.0 (exp (/ (+ Vef (+ Ev (- EAccept mu))) KbT))))
(* NdChar 0.5))
(+
(/ NdChar (+ 1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT))))
(* NaChar 0.5))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NaChar <= -2.2e-82) || !(NaChar <= 1.8e-13)) {
tmp = (NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT)))) + (NdChar * 0.5);
} else {
tmp = (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar * 0.5);
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if ((nachar <= (-2.2d-82)) .or. (.not. (nachar <= 1.8d-13))) then
tmp = (nachar / (1.0d0 + exp(((vef + (ev + (eaccept - mu))) / kbt)))) + (ndchar * 0.5d0)
else
tmp = (ndchar / (1.0d0 + exp(((edonor + (mu + (vef - ec))) / kbt)))) + (nachar * 0.5d0)
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NaChar <= -2.2e-82) || !(NaChar <= 1.8e-13)) {
tmp = (NaChar / (1.0 + Math.exp(((Vef + (Ev + (EAccept - mu))) / KbT)))) + (NdChar * 0.5);
} else {
tmp = (NdChar / (1.0 + Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar * 0.5);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if (NaChar <= -2.2e-82) or not (NaChar <= 1.8e-13): tmp = (NaChar / (1.0 + math.exp(((Vef + (Ev + (EAccept - mu))) / KbT)))) + (NdChar * 0.5) else: tmp = (NdChar / (1.0 + math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar * 0.5) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if ((NaChar <= -2.2e-82) || !(NaChar <= 1.8e-13)) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Ev + Float64(EAccept - mu))) / KbT)))) + Float64(NdChar * 0.5)); else tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) + Float64(NaChar * 0.5)); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if ((NaChar <= -2.2e-82) || ~((NaChar <= 1.8e-13))) tmp = (NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT)))) + (NdChar * 0.5); else tmp = (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar * 0.5); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[Or[LessEqual[NaChar, -2.2e-82], N[Not[LessEqual[NaChar, 1.8e-13]], $MachinePrecision]], N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(Ev + N[(EAccept - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar * 0.5), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar * 0.5), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NaChar \leq -2.2 \cdot 10^{-82} \lor \neg \left(NaChar \leq 1.8 \cdot 10^{-13}\right):\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Vef + \left(Ev + \left(EAccept - mu\right)\right)}{KbT}}} + NdChar \cdot 0.5\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}} + NaChar \cdot 0.5\\
\end{array}
\end{array}
if NaChar < -2.19999999999999986e-82 or 1.7999999999999999e-13 < NaChar Initial program 99.9%
Simplified99.9%
Taylor expanded in KbT around inf 63.2%
Taylor expanded in Ec around -inf 66.4%
Taylor expanded in KbT around inf 59.9%
if -2.19999999999999986e-82 < NaChar < 1.7999999999999999e-13Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 64.7%
Final simplification61.8%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (<= NaChar -1.05e-24)
(+ (/ NaChar (+ 1.0 (exp (/ Ev KbT)))) (/ NdChar 2.0))
(if (<= NaChar -3.1e-204)
(+ (/ NdChar (+ 1.0 (exp (/ mu KbT)))) (* NaChar 0.5))
(if (<= NaChar 1.35e-16)
(+ (* NaChar 0.5) (/ NdChar (+ 1.0 (exp (/ EDonor KbT)))))
(+ (/ NaChar (+ 1.0 (exp (/ EAccept KbT)))) (* NdChar 0.5))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (NaChar <= -1.05e-24) {
tmp = (NaChar / (1.0 + exp((Ev / KbT)))) + (NdChar / 2.0);
} else if (NaChar <= -3.1e-204) {
tmp = (NdChar / (1.0 + exp((mu / KbT)))) + (NaChar * 0.5);
} else if (NaChar <= 1.35e-16) {
tmp = (NaChar * 0.5) + (NdChar / (1.0 + exp((EDonor / KbT))));
} else {
tmp = (NaChar / (1.0 + exp((EAccept / KbT)))) + (NdChar * 0.5);
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if (nachar <= (-1.05d-24)) then
tmp = (nachar / (1.0d0 + exp((ev / kbt)))) + (ndchar / 2.0d0)
else if (nachar <= (-3.1d-204)) then
tmp = (ndchar / (1.0d0 + exp((mu / kbt)))) + (nachar * 0.5d0)
else if (nachar <= 1.35d-16) then
tmp = (nachar * 0.5d0) + (ndchar / (1.0d0 + exp((edonor / kbt))))
else
tmp = (nachar / (1.0d0 + exp((eaccept / kbt)))) + (ndchar * 0.5d0)
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (NaChar <= -1.05e-24) {
tmp = (NaChar / (1.0 + Math.exp((Ev / KbT)))) + (NdChar / 2.0);
} else if (NaChar <= -3.1e-204) {
tmp = (NdChar / (1.0 + Math.exp((mu / KbT)))) + (NaChar * 0.5);
} else if (NaChar <= 1.35e-16) {
tmp = (NaChar * 0.5) + (NdChar / (1.0 + Math.exp((EDonor / KbT))));
} else {
tmp = (NaChar / (1.0 + Math.exp((EAccept / KbT)))) + (NdChar * 0.5);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if NaChar <= -1.05e-24: tmp = (NaChar / (1.0 + math.exp((Ev / KbT)))) + (NdChar / 2.0) elif NaChar <= -3.1e-204: tmp = (NdChar / (1.0 + math.exp((mu / KbT)))) + (NaChar * 0.5) elif NaChar <= 1.35e-16: tmp = (NaChar * 0.5) + (NdChar / (1.0 + math.exp((EDonor / KbT)))) else: tmp = (NaChar / (1.0 + math.exp((EAccept / KbT)))) + (NdChar * 0.5) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (NaChar <= -1.05e-24) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT)))) + Float64(NdChar / 2.0)); elseif (NaChar <= -3.1e-204) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(mu / KbT)))) + Float64(NaChar * 0.5)); elseif (NaChar <= 1.35e-16) tmp = Float64(Float64(NaChar * 0.5) + Float64(NdChar / Float64(1.0 + exp(Float64(EDonor / KbT))))); else tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT)))) + Float64(NdChar * 0.5)); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (NaChar <= -1.05e-24) tmp = (NaChar / (1.0 + exp((Ev / KbT)))) + (NdChar / 2.0); elseif (NaChar <= -3.1e-204) tmp = (NdChar / (1.0 + exp((mu / KbT)))) + (NaChar * 0.5); elseif (NaChar <= 1.35e-16) tmp = (NaChar * 0.5) + (NdChar / (1.0 + exp((EDonor / KbT)))); else tmp = (NaChar / (1.0 + exp((EAccept / KbT)))) + (NdChar * 0.5); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[NaChar, -1.05e-24], N[(N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, -3.1e-204], N[(N[(NdChar / N[(1.0 + N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar * 0.5), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 1.35e-16], N[(N[(NaChar * 0.5), $MachinePrecision] + N[(NdChar / N[(1.0 + N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar * 0.5), $MachinePrecision]), $MachinePrecision]]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NaChar \leq -1.05 \cdot 10^{-24}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Ev}{KbT}}} + \frac{NdChar}{2}\\
\mathbf{elif}\;NaChar \leq -3.1 \cdot 10^{-204}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{mu}{KbT}}} + NaChar \cdot 0.5\\
\mathbf{elif}\;NaChar \leq 1.35 \cdot 10^{-16}:\\
\;\;\;\;NaChar \cdot 0.5 + \frac{NdChar}{1 + e^{\frac{EDonor}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}} + NdChar \cdot 0.5\\
\end{array}
\end{array}
if NaChar < -1.05e-24Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 65.6%
Taylor expanded in KbT around inf 41.6%
if -1.05e-24 < NaChar < -3.0999999999999999e-204Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 53.2%
Taylor expanded in mu around inf 45.3%
if -3.0999999999999999e-204 < NaChar < 1.35e-16Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 64.9%
Taylor expanded in EDonor around inf 50.8%
if 1.35e-16 < NaChar Initial program 99.8%
Simplified99.8%
Taylor expanded in EAccept around inf 66.4%
Taylor expanded in KbT around inf 44.7%
Final simplification45.9%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (if (or (<= NaChar -4.2e-85) (not (<= NaChar 8.2e-16))) (+ (/ NaChar (+ 1.0 (exp (/ EAccept KbT)))) (* NdChar 0.5)) (+ (* NaChar 0.5) (/ NdChar (+ 1.0 (exp (/ EDonor KbT)))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NaChar <= -4.2e-85) || !(NaChar <= 8.2e-16)) {
tmp = (NaChar / (1.0 + exp((EAccept / KbT)))) + (NdChar * 0.5);
} else {
tmp = (NaChar * 0.5) + (NdChar / (1.0 + exp((EDonor / KbT))));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if ((nachar <= (-4.2d-85)) .or. (.not. (nachar <= 8.2d-16))) then
tmp = (nachar / (1.0d0 + exp((eaccept / kbt)))) + (ndchar * 0.5d0)
else
tmp = (nachar * 0.5d0) + (ndchar / (1.0d0 + exp((edonor / kbt))))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NaChar <= -4.2e-85) || !(NaChar <= 8.2e-16)) {
tmp = (NaChar / (1.0 + Math.exp((EAccept / KbT)))) + (NdChar * 0.5);
} else {
tmp = (NaChar * 0.5) + (NdChar / (1.0 + Math.exp((EDonor / KbT))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if (NaChar <= -4.2e-85) or not (NaChar <= 8.2e-16): tmp = (NaChar / (1.0 + math.exp((EAccept / KbT)))) + (NdChar * 0.5) else: tmp = (NaChar * 0.5) + (NdChar / (1.0 + math.exp((EDonor / KbT)))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if ((NaChar <= -4.2e-85) || !(NaChar <= 8.2e-16)) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT)))) + Float64(NdChar * 0.5)); else tmp = Float64(Float64(NaChar * 0.5) + Float64(NdChar / Float64(1.0 + exp(Float64(EDonor / KbT))))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if ((NaChar <= -4.2e-85) || ~((NaChar <= 8.2e-16))) tmp = (NaChar / (1.0 + exp((EAccept / KbT)))) + (NdChar * 0.5); else tmp = (NaChar * 0.5) + (NdChar / (1.0 + exp((EDonor / KbT)))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[Or[LessEqual[NaChar, -4.2e-85], N[Not[LessEqual[NaChar, 8.2e-16]], $MachinePrecision]], N[(N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar * 0.5), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar * 0.5), $MachinePrecision] + N[(NdChar / N[(1.0 + N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NaChar \leq -4.2 \cdot 10^{-85} \lor \neg \left(NaChar \leq 8.2 \cdot 10^{-16}\right):\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}} + NdChar \cdot 0.5\\
\mathbf{else}:\\
\;\;\;\;NaChar \cdot 0.5 + \frac{NdChar}{1 + e^{\frac{EDonor}{KbT}}}\\
\end{array}
\end{array}
if NaChar < -4.2e-85 or 8.20000000000000012e-16 < NaChar Initial program 99.9%
Simplified99.9%
Taylor expanded in EAccept around inf 67.3%
Taylor expanded in KbT around inf 43.7%
if -4.2e-85 < NaChar < 8.20000000000000012e-16Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 64.3%
Taylor expanded in EDonor around inf 47.6%
Final simplification45.3%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (if (<= EAccept 1.85e-20) (+ (/ NaChar (+ 1.0 (exp (/ Ev KbT)))) (/ NdChar 2.0)) (+ (/ NaChar (+ 1.0 (exp (/ EAccept KbT)))) (* NdChar 0.5))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (EAccept <= 1.85e-20) {
tmp = (NaChar / (1.0 + exp((Ev / KbT)))) + (NdChar / 2.0);
} else {
tmp = (NaChar / (1.0 + exp((EAccept / KbT)))) + (NdChar * 0.5);
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if (eaccept <= 1.85d-20) then
tmp = (nachar / (1.0d0 + exp((ev / kbt)))) + (ndchar / 2.0d0)
else
tmp = (nachar / (1.0d0 + exp((eaccept / kbt)))) + (ndchar * 0.5d0)
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (EAccept <= 1.85e-20) {
tmp = (NaChar / (1.0 + Math.exp((Ev / KbT)))) + (NdChar / 2.0);
} else {
tmp = (NaChar / (1.0 + Math.exp((EAccept / KbT)))) + (NdChar * 0.5);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if EAccept <= 1.85e-20: tmp = (NaChar / (1.0 + math.exp((Ev / KbT)))) + (NdChar / 2.0) else: tmp = (NaChar / (1.0 + math.exp((EAccept / KbT)))) + (NdChar * 0.5) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (EAccept <= 1.85e-20) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT)))) + Float64(NdChar / 2.0)); else tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT)))) + Float64(NdChar * 0.5)); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (EAccept <= 1.85e-20) tmp = (NaChar / (1.0 + exp((Ev / KbT)))) + (NdChar / 2.0); else tmp = (NaChar / (1.0 + exp((EAccept / KbT)))) + (NdChar * 0.5); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[EAccept, 1.85e-20], N[(N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar * 0.5), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;EAccept \leq 1.85 \cdot 10^{-20}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Ev}{KbT}}} + \frac{NdChar}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}} + NdChar \cdot 0.5\\
\end{array}
\end{array}
if EAccept < 1.85e-20Initial program 99.9%
Simplified99.9%
Taylor expanded in Ev around inf 75.8%
Taylor expanded in KbT around inf 37.7%
if 1.85e-20 < EAccept Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 80.8%
Taylor expanded in KbT around inf 43.9%
Final simplification39.3%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (+ (/ NaChar (+ 1.0 (exp (/ EAccept KbT)))) (* 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 / (1.0 + exp((EAccept / KbT)))) + (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 / (1.0d0 + exp((eaccept / kbt)))) + (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 / (1.0 + Math.exp((EAccept / KbT)))) + (NdChar * 0.5);
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return (NaChar / (1.0 + math.exp((EAccept / KbT)))) + (NdChar * 0.5)
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT)))) + Float64(NdChar * 0.5)) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = (NaChar / (1.0 + exp((EAccept / KbT)))) + (NdChar * 0.5); end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar * 0.5), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}} + NdChar \cdot 0.5
\end{array}
Initial program 99.9%
Simplified99.9%
Taylor expanded in EAccept around inf 70.7%
Taylor expanded in KbT around inf 38.2%
Final simplification38.2%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (+ (* NaChar 0.5) (/ NdChar 2.0)))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NaChar * 0.5) + (NdChar / 2.0);
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
code = (nachar * 0.5d0) + (ndchar / 2.0d0)
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NaChar * 0.5) + (NdChar / 2.0);
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return (NaChar * 0.5) + (NdChar / 2.0)
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(Float64(NaChar * 0.5) + Float64(NdChar / 2.0)) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = (NaChar * 0.5) + (NdChar / 2.0); end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(N[(NaChar * 0.5), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
NaChar \cdot 0.5 + \frac{NdChar}{2}
\end{array}
Initial program 99.9%
Simplified99.9%
Taylor expanded in KbT around inf 48.5%
Taylor expanded in KbT around inf 27.5%
Final simplification27.5%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (* KbT (/ NdChar EDonor)))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return KbT * (NdChar / EDonor);
}
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 = kbt * (ndchar / edonor)
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 KbT * (NdChar / EDonor);
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return KbT * (NdChar / EDonor)
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(KbT * Float64(NdChar / EDonor)) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = KbT * (NdChar / EDonor); end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(KbT * N[(NdChar / EDonor), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
KbT \cdot \frac{NdChar}{EDonor}
\end{array}
Initial program 99.9%
Simplified99.9%
Taylor expanded in KbT around inf 54.0%
Taylor expanded in EDonor around inf 31.9%
associate-/l*34.1%
Simplified34.1%
Taylor expanded in KbT around inf 10.6%
Taylor expanded in KbT around inf 7.7%
associate-/l*8.1%
Simplified8.1%
Final simplification8.1%
herbie shell --seed 2024066
(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))))))