
(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 29 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 (- (/ NaChar (+ 1.0 (pow E (/ (+ (+ Vef EAccept) (- Ev mu)) KbT)))) (/ NdChar (- -1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NaChar / (1.0 + pow(((double) M_E), (((Vef + EAccept) + (Ev - mu)) / KbT)))) - (NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT))));
}
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.pow(Math.E, (((Vef + EAccept) + (Ev - mu)) / KbT)))) - (NdChar / (-1.0 - Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT))));
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return (NaChar / (1.0 + math.pow(math.e, (((Vef + EAccept) + (Ev - mu)) / KbT)))) - (NdChar / (-1.0 - math.exp(((EDonor + (mu + (Vef - Ec))) / KbT))))
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(Float64(NaChar / Float64(1.0 + (exp(1) ^ Float64(Float64(Float64(Vef + EAccept) + Float64(Ev - mu)) / KbT)))) - Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT))))) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = (NaChar / (1.0 + (2.71828182845904523536 ^ (((Vef + EAccept) + (Ev - mu)) / KbT)))) - (NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT)))); end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(N[(NaChar / N[(1.0 + N[Power[E, N[(N[(N[(Vef + EAccept), $MachinePrecision] + N[(Ev - mu), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(NdChar / N[(-1.0 - N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{NaChar}{1 + {e}^{\left(\frac{\left(Vef + EAccept\right) + \left(Ev - mu\right)}{KbT}\right)}} - \frac{NdChar}{-1 - e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}}
\end{array}
Initial program 100.0%
Simplified100.0%
*-un-lft-identity100.0%
exp-prod100.0%
Applied egg-rr100.0%
exp-1-e100.0%
+-commutative100.0%
associate-+l-100.0%
unsub-neg100.0%
mul-1-neg100.0%
associate--l+100.0%
mul-1-neg100.0%
unsub-neg100.0%
Simplified100.0%
Final simplification100.0%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (+ 1.0 (exp (/ Vef KbT))))
(t_1
(-
(/ NdChar (+ 1.0 (exp (/ EDonor KbT))))
(/ NaChar (- -1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT))))))
(t_2 (+ (/ NdChar t_0) (/ NaChar t_0))))
(if (<= Vef -1.15e+139)
t_2
(if (<= Vef -1.6e+32)
t_1
(if (<= Vef -1.65e-38)
(+
(/ NdChar (+ 1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT))))
(/
NaChar
(-
1.0
(*
mu
(+
(/ 1.0 KbT)
(/
(- -1.0 (+ (/ EAccept KbT) (+ (/ Vef KbT) (/ Ev KbT))))
mu))))))
(if (<= Vef -6.8e-193)
t_1
(if (<= Vef 3.9e-224)
(+
(/ NdChar (+ 1.0 (exp (/ mu KbT))))
(/ NaChar (+ 1.0 (exp (/ mu (- KbT))))))
(if (<= Vef 3.7e+193) t_1 t_2))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = 1.0 + exp((Vef / KbT));
double t_1 = (NdChar / (1.0 + exp((EDonor / KbT)))) - (NaChar / (-1.0 - exp(((Vef - ((mu - EAccept) - Ev)) / KbT))));
double t_2 = (NdChar / t_0) + (NaChar / t_0);
double tmp;
if (Vef <= -1.15e+139) {
tmp = t_2;
} else if (Vef <= -1.6e+32) {
tmp = t_1;
} else if (Vef <= -1.65e-38) {
tmp = (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 - (mu * ((1.0 / KbT) + ((-1.0 - ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) / mu)))));
} else if (Vef <= -6.8e-193) {
tmp = t_1;
} else if (Vef <= 3.9e-224) {
tmp = (NdChar / (1.0 + exp((mu / KbT)))) + (NaChar / (1.0 + exp((mu / -KbT))));
} else if (Vef <= 3.7e+193) {
tmp = t_1;
} else {
tmp = t_2;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: t_2
real(8) :: tmp
t_0 = 1.0d0 + exp((vef / kbt))
t_1 = (ndchar / (1.0d0 + exp((edonor / kbt)))) - (nachar / ((-1.0d0) - exp(((vef - ((mu - eaccept) - ev)) / kbt))))
t_2 = (ndchar / t_0) + (nachar / t_0)
if (vef <= (-1.15d+139)) then
tmp = t_2
else if (vef <= (-1.6d+32)) then
tmp = t_1
else if (vef <= (-1.65d-38)) then
tmp = (ndchar / (1.0d0 + exp(((edonor + (mu + (vef - ec))) / kbt)))) + (nachar / (1.0d0 - (mu * ((1.0d0 / kbt) + (((-1.0d0) - ((eaccept / kbt) + ((vef / kbt) + (ev / kbt)))) / mu)))))
else if (vef <= (-6.8d-193)) then
tmp = t_1
else if (vef <= 3.9d-224) then
tmp = (ndchar / (1.0d0 + exp((mu / kbt)))) + (nachar / (1.0d0 + exp((mu / -kbt))))
else if (vef <= 3.7d+193) then
tmp = t_1
else
tmp = t_2
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = 1.0 + Math.exp((Vef / KbT));
double t_1 = (NdChar / (1.0 + Math.exp((EDonor / KbT)))) - (NaChar / (-1.0 - Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT))));
double t_2 = (NdChar / t_0) + (NaChar / t_0);
double tmp;
if (Vef <= -1.15e+139) {
tmp = t_2;
} else if (Vef <= -1.6e+32) {
tmp = t_1;
} else if (Vef <= -1.65e-38) {
tmp = (NdChar / (1.0 + Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 - (mu * ((1.0 / KbT) + ((-1.0 - ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) / mu)))));
} else if (Vef <= -6.8e-193) {
tmp = t_1;
} else if (Vef <= 3.9e-224) {
tmp = (NdChar / (1.0 + Math.exp((mu / KbT)))) + (NaChar / (1.0 + Math.exp((mu / -KbT))));
} else if (Vef <= 3.7e+193) {
tmp = t_1;
} else {
tmp = t_2;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = 1.0 + math.exp((Vef / KbT)) t_1 = (NdChar / (1.0 + math.exp((EDonor / KbT)))) - (NaChar / (-1.0 - math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) t_2 = (NdChar / t_0) + (NaChar / t_0) tmp = 0 if Vef <= -1.15e+139: tmp = t_2 elif Vef <= -1.6e+32: tmp = t_1 elif Vef <= -1.65e-38: tmp = (NdChar / (1.0 + math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 - (mu * ((1.0 / KbT) + ((-1.0 - ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) / mu))))) elif Vef <= -6.8e-193: tmp = t_1 elif Vef <= 3.9e-224: tmp = (NdChar / (1.0 + math.exp((mu / KbT)))) + (NaChar / (1.0 + math.exp((mu / -KbT)))) elif Vef <= 3.7e+193: tmp = t_1 else: tmp = t_2 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(1.0 + exp(Float64(Vef / KbT))) t_1 = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(EDonor / KbT)))) - Float64(NaChar / Float64(-1.0 - exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT))))) t_2 = Float64(Float64(NdChar / t_0) + Float64(NaChar / t_0)) tmp = 0.0 if (Vef <= -1.15e+139) tmp = t_2; elseif (Vef <= -1.6e+32) tmp = t_1; elseif (Vef <= -1.65e-38) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) + Float64(NaChar / Float64(1.0 - Float64(mu * Float64(Float64(1.0 / KbT) + Float64(Float64(-1.0 - Float64(Float64(EAccept / KbT) + Float64(Float64(Vef / KbT) + Float64(Ev / KbT)))) / mu)))))); elseif (Vef <= -6.8e-193) tmp = t_1; elseif (Vef <= 3.9e-224) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(mu / KbT)))) + Float64(NaChar / Float64(1.0 + exp(Float64(mu / Float64(-KbT)))))); elseif (Vef <= 3.7e+193) tmp = t_1; else tmp = t_2; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = 1.0 + exp((Vef / KbT)); t_1 = (NdChar / (1.0 + exp((EDonor / KbT)))) - (NaChar / (-1.0 - exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))); t_2 = (NdChar / t_0) + (NaChar / t_0); tmp = 0.0; if (Vef <= -1.15e+139) tmp = t_2; elseif (Vef <= -1.6e+32) tmp = t_1; elseif (Vef <= -1.65e-38) tmp = (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 - (mu * ((1.0 / KbT) + ((-1.0 - ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) / mu))))); elseif (Vef <= -6.8e-193) tmp = t_1; elseif (Vef <= 3.9e-224) tmp = (NdChar / (1.0 + exp((mu / KbT)))) + (NaChar / (1.0 + exp((mu / -KbT)))); elseif (Vef <= 3.7e+193) tmp = t_1; else tmp = t_2; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(1.0 + N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NdChar / N[(1.0 + N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(NaChar / N[(-1.0 - N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(N[(NdChar / t$95$0), $MachinePrecision] + N[(NaChar / t$95$0), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[Vef, -1.15e+139], t$95$2, If[LessEqual[Vef, -1.6e+32], t$95$1, If[LessEqual[Vef, -1.65e-38], N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 - N[(mu * N[(N[(1.0 / KbT), $MachinePrecision] + N[(N[(-1.0 - N[(N[(EAccept / KbT), $MachinePrecision] + N[(N[(Vef / KbT), $MachinePrecision] + N[(Ev / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[Vef, -6.8e-193], t$95$1, If[LessEqual[Vef, 3.9e-224], N[(N[(NdChar / N[(1.0 + N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Exp[N[(mu / (-KbT)), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[Vef, 3.7e+193], t$95$1, t$95$2]]]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := 1 + e^{\frac{Vef}{KbT}}\\
t_1 := \frac{NdChar}{1 + e^{\frac{EDonor}{KbT}}} - \frac{NaChar}{-1 - e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}}\\
t_2 := \frac{NdChar}{t\_0} + \frac{NaChar}{t\_0}\\
\mathbf{if}\;Vef \leq -1.15 \cdot 10^{+139}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;Vef \leq -1.6 \cdot 10^{+32}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;Vef \leq -1.65 \cdot 10^{-38}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}} + \frac{NaChar}{1 - mu \cdot \left(\frac{1}{KbT} + \frac{-1 - \left(\frac{EAccept}{KbT} + \left(\frac{Vef}{KbT} + \frac{Ev}{KbT}\right)\right)}{mu}\right)}\\
\mathbf{elif}\;Vef \leq -6.8 \cdot 10^{-193}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;Vef \leq 3.9 \cdot 10^{-224}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{mu}{KbT}}} + \frac{NaChar}{1 + e^{\frac{mu}{-KbT}}}\\
\mathbf{elif}\;Vef \leq 3.7 \cdot 10^{+193}:\\
\;\;\;\;t\_1\\
\mathbf{else}:\\
\;\;\;\;t\_2\\
\end{array}
\end{array}
if Vef < -1.15e139 or 3.7000000000000003e193 < Vef Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 93.1%
Taylor expanded in Vef around inf 85.8%
if -1.15e139 < Vef < -1.5999999999999999e32 or -1.6500000000000001e-38 < Vef < -6.8000000000000004e-193 or 3.8999999999999998e-224 < Vef < 3.7000000000000003e193Initial program 100.0%
Simplified100.0%
Taylor expanded in EDonor around inf 75.1%
if -1.5999999999999999e32 < Vef < -1.6500000000000001e-38Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 76.1%
+-commutative76.1%
Simplified76.1%
Taylor expanded in mu around -inf 83.8%
associate-*r*83.8%
mul-1-neg83.8%
+-commutative83.8%
mul-1-neg83.8%
unsub-neg83.8%
Simplified83.8%
if -6.8000000000000004e-193 < Vef < 3.8999999999999998e-224Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 86.9%
Taylor expanded in mu around inf 86.2%
neg-mul-186.2%
distribute-neg-frac286.2%
Simplified86.2%
Final simplification79.8%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT)))
(t_1 (/ NaChar (- -1.0 t_0)))
(t_2 (- (/ NdChar (+ 1.0 (exp (/ Ec (- KbT))))) t_1))
(t_3 (+ (/ NaChar (+ 1.0 t_0)) (/ NdChar (+ 1.0 (exp (/ Vef KbT)))))))
(if (<= Vef -6.9e+146)
t_3
(if (<= Vef -5.4e-204)
t_2
(if (<= Vef 4.1e-193)
(- (/ NdChar (+ 1.0 (exp (/ mu KbT)))) t_1)
(if (<= Vef 6.2e-129)
t_2
(if (<= Vef 2e+113)
(- (/ NdChar (+ 1.0 (exp (/ EDonor KbT)))) t_1)
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 = exp(((Vef - ((mu - EAccept) - Ev)) / KbT));
double t_1 = NaChar / (-1.0 - t_0);
double t_2 = (NdChar / (1.0 + exp((Ec / -KbT)))) - t_1;
double t_3 = (NaChar / (1.0 + t_0)) + (NdChar / (1.0 + exp((Vef / KbT))));
double tmp;
if (Vef <= -6.9e+146) {
tmp = t_3;
} else if (Vef <= -5.4e-204) {
tmp = t_2;
} else if (Vef <= 4.1e-193) {
tmp = (NdChar / (1.0 + exp((mu / KbT)))) - t_1;
} else if (Vef <= 6.2e-129) {
tmp = t_2;
} else if (Vef <= 2e+113) {
tmp = (NdChar / (1.0 + exp((EDonor / KbT)))) - t_1;
} 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 = exp(((vef - ((mu - eaccept) - ev)) / kbt))
t_1 = nachar / ((-1.0d0) - t_0)
t_2 = (ndchar / (1.0d0 + exp((ec / -kbt)))) - t_1
t_3 = (nachar / (1.0d0 + t_0)) + (ndchar / (1.0d0 + exp((vef / kbt))))
if (vef <= (-6.9d+146)) then
tmp = t_3
else if (vef <= (-5.4d-204)) then
tmp = t_2
else if (vef <= 4.1d-193) then
tmp = (ndchar / (1.0d0 + exp((mu / kbt)))) - t_1
else if (vef <= 6.2d-129) then
tmp = t_2
else if (vef <= 2d+113) then
tmp = (ndchar / (1.0d0 + exp((edonor / kbt)))) - t_1
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 = Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT));
double t_1 = NaChar / (-1.0 - t_0);
double t_2 = (NdChar / (1.0 + Math.exp((Ec / -KbT)))) - t_1;
double t_3 = (NaChar / (1.0 + t_0)) + (NdChar / (1.0 + Math.exp((Vef / KbT))));
double tmp;
if (Vef <= -6.9e+146) {
tmp = t_3;
} else if (Vef <= -5.4e-204) {
tmp = t_2;
} else if (Vef <= 4.1e-193) {
tmp = (NdChar / (1.0 + Math.exp((mu / KbT)))) - t_1;
} else if (Vef <= 6.2e-129) {
tmp = t_2;
} else if (Vef <= 2e+113) {
tmp = (NdChar / (1.0 + Math.exp((EDonor / KbT)))) - t_1;
} else {
tmp = t_3;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)) t_1 = NaChar / (-1.0 - t_0) t_2 = (NdChar / (1.0 + math.exp((Ec / -KbT)))) - t_1 t_3 = (NaChar / (1.0 + t_0)) + (NdChar / (1.0 + math.exp((Vef / KbT)))) tmp = 0 if Vef <= -6.9e+146: tmp = t_3 elif Vef <= -5.4e-204: tmp = t_2 elif Vef <= 4.1e-193: tmp = (NdChar / (1.0 + math.exp((mu / KbT)))) - t_1 elif Vef <= 6.2e-129: tmp = t_2 elif Vef <= 2e+113: tmp = (NdChar / (1.0 + math.exp((EDonor / KbT)))) - t_1 else: tmp = t_3 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT)) t_1 = Float64(NaChar / Float64(-1.0 - t_0)) t_2 = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Ec / Float64(-KbT))))) - t_1) t_3 = Float64(Float64(NaChar / Float64(1.0 + t_0)) + Float64(NdChar / Float64(1.0 + exp(Float64(Vef / KbT))))) tmp = 0.0 if (Vef <= -6.9e+146) tmp = t_3; elseif (Vef <= -5.4e-204) tmp = t_2; elseif (Vef <= 4.1e-193) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(mu / KbT)))) - t_1); elseif (Vef <= 6.2e-129) tmp = t_2; elseif (Vef <= 2e+113) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(EDonor / KbT)))) - t_1); else tmp = t_3; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = exp(((Vef - ((mu - EAccept) - Ev)) / KbT)); t_1 = NaChar / (-1.0 - t_0); t_2 = (NdChar / (1.0 + exp((Ec / -KbT)))) - t_1; t_3 = (NaChar / (1.0 + t_0)) + (NdChar / (1.0 + exp((Vef / KbT)))); tmp = 0.0; if (Vef <= -6.9e+146) tmp = t_3; elseif (Vef <= -5.4e-204) tmp = t_2; elseif (Vef <= 4.1e-193) tmp = (NdChar / (1.0 + exp((mu / KbT)))) - t_1; elseif (Vef <= 6.2e-129) tmp = t_2; elseif (Vef <= 2e+113) tmp = (NdChar / (1.0 + exp((EDonor / KbT)))) - t_1; else tmp = t_3; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[(NaChar / N[(-1.0 - t$95$0), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(N[(NdChar / N[(1.0 + N[Exp[N[(Ec / (-KbT)), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - t$95$1), $MachinePrecision]}, Block[{t$95$3 = N[(N[(NaChar / N[(1.0 + t$95$0), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(1.0 + N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[Vef, -6.9e+146], t$95$3, If[LessEqual[Vef, -5.4e-204], t$95$2, If[LessEqual[Vef, 4.1e-193], N[(N[(NdChar / N[(1.0 + N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - t$95$1), $MachinePrecision], If[LessEqual[Vef, 6.2e-129], t$95$2, If[LessEqual[Vef, 2e+113], N[(N[(NdChar / N[(1.0 + N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - t$95$1), $MachinePrecision], t$95$3]]]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}\\
t_1 := \frac{NaChar}{-1 - t\_0}\\
t_2 := \frac{NdChar}{1 + e^{\frac{Ec}{-KbT}}} - t\_1\\
t_3 := \frac{NaChar}{1 + t\_0} + \frac{NdChar}{1 + e^{\frac{Vef}{KbT}}}\\
\mathbf{if}\;Vef \leq -6.9 \cdot 10^{+146}:\\
\;\;\;\;t\_3\\
\mathbf{elif}\;Vef \leq -5.4 \cdot 10^{-204}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;Vef \leq 4.1 \cdot 10^{-193}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{mu}{KbT}}} - t\_1\\
\mathbf{elif}\;Vef \leq 6.2 \cdot 10^{-129}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;Vef \leq 2 \cdot 10^{+113}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{EDonor}{KbT}}} - t\_1\\
\mathbf{else}:\\
\;\;\;\;t\_3\\
\end{array}
\end{array}
if Vef < -6.89999999999999956e146 or 2e113 < Vef Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 92.9%
if -6.89999999999999956e146 < Vef < -5.39999999999999983e-204 or 4.10000000000000003e-193 < Vef < 6.2000000000000001e-129Initial program 100.0%
Simplified100.0%
Taylor expanded in Ec around inf 79.1%
associate-*r/79.1%
mul-1-neg79.1%
Simplified79.1%
if -5.39999999999999983e-204 < Vef < 4.10000000000000003e-193Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 85.3%
if 6.2000000000000001e-129 < Vef < 2e113Initial program 100.0%
Simplified100.0%
Taylor expanded in EDonor around inf 75.6%
Final simplification83.0%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT)))
(t_1 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT)))
(t_2 (/ NaChar (- -1.0 t_1)))
(t_3 (- (/ NdChar (+ 1.0 (exp (/ mu KbT)))) t_2)))
(if (<= mu -4.4e+95)
t_3
(if (<= mu -6.6e-42)
(+ (/ NaChar (+ 1.0 t_1)) (/ NdChar (+ 1.0 (exp (/ Vef KbT)))))
(if (<= mu 7.5e-130)
(+
(/ NdChar (+ 1.0 t_0))
(/
NaChar
(-
1.0
(*
mu
(+
(/ 1.0 KbT)
(/
(- -1.0 (+ (/ EAccept KbT) (+ (/ Vef KbT) (/ Ev KbT))))
mu))))))
(if (<= mu 850000000000.0)
(- (/ NdChar (+ 1.0 (exp (/ EDonor KbT)))) t_2)
(if (<= mu 8e+48)
(-
(/
NaChar
(-
(- 2.0 (* Ev (- (/ -1.0 KbT) (/ Vef (* KbT Ev)))))
(/ mu KbT)))
(/ NdChar (- -1.0 t_0)))
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 = exp(((EDonor + (mu + (Vef - Ec))) / KbT));
double t_1 = exp(((Vef - ((mu - EAccept) - Ev)) / KbT));
double t_2 = NaChar / (-1.0 - t_1);
double t_3 = (NdChar / (1.0 + exp((mu / KbT)))) - t_2;
double tmp;
if (mu <= -4.4e+95) {
tmp = t_3;
} else if (mu <= -6.6e-42) {
tmp = (NaChar / (1.0 + t_1)) + (NdChar / (1.0 + exp((Vef / KbT))));
} else if (mu <= 7.5e-130) {
tmp = (NdChar / (1.0 + t_0)) + (NaChar / (1.0 - (mu * ((1.0 / KbT) + ((-1.0 - ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) / mu)))));
} else if (mu <= 850000000000.0) {
tmp = (NdChar / (1.0 + exp((EDonor / KbT)))) - t_2;
} else if (mu <= 8e+48) {
tmp = (NaChar / ((2.0 - (Ev * ((-1.0 / KbT) - (Vef / (KbT * Ev))))) - (mu / KbT))) - (NdChar / (-1.0 - t_0));
} 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 = exp(((edonor + (mu + (vef - ec))) / kbt))
t_1 = exp(((vef - ((mu - eaccept) - ev)) / kbt))
t_2 = nachar / ((-1.0d0) - t_1)
t_3 = (ndchar / (1.0d0 + exp((mu / kbt)))) - t_2
if (mu <= (-4.4d+95)) then
tmp = t_3
else if (mu <= (-6.6d-42)) then
tmp = (nachar / (1.0d0 + t_1)) + (ndchar / (1.0d0 + exp((vef / kbt))))
else if (mu <= 7.5d-130) then
tmp = (ndchar / (1.0d0 + t_0)) + (nachar / (1.0d0 - (mu * ((1.0d0 / kbt) + (((-1.0d0) - ((eaccept / kbt) + ((vef / kbt) + (ev / kbt)))) / mu)))))
else if (mu <= 850000000000.0d0) then
tmp = (ndchar / (1.0d0 + exp((edonor / kbt)))) - t_2
else if (mu <= 8d+48) then
tmp = (nachar / ((2.0d0 - (ev * (((-1.0d0) / kbt) - (vef / (kbt * ev))))) - (mu / kbt))) - (ndchar / ((-1.0d0) - t_0))
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 = Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT));
double t_1 = Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT));
double t_2 = NaChar / (-1.0 - t_1);
double t_3 = (NdChar / (1.0 + Math.exp((mu / KbT)))) - t_2;
double tmp;
if (mu <= -4.4e+95) {
tmp = t_3;
} else if (mu <= -6.6e-42) {
tmp = (NaChar / (1.0 + t_1)) + (NdChar / (1.0 + Math.exp((Vef / KbT))));
} else if (mu <= 7.5e-130) {
tmp = (NdChar / (1.0 + t_0)) + (NaChar / (1.0 - (mu * ((1.0 / KbT) + ((-1.0 - ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) / mu)))));
} else if (mu <= 850000000000.0) {
tmp = (NdChar / (1.0 + Math.exp((EDonor / KbT)))) - t_2;
} else if (mu <= 8e+48) {
tmp = (NaChar / ((2.0 - (Ev * ((-1.0 / KbT) - (Vef / (KbT * Ev))))) - (mu / KbT))) - (NdChar / (-1.0 - t_0));
} else {
tmp = t_3;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)) t_1 = math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)) t_2 = NaChar / (-1.0 - t_1) t_3 = (NdChar / (1.0 + math.exp((mu / KbT)))) - t_2 tmp = 0 if mu <= -4.4e+95: tmp = t_3 elif mu <= -6.6e-42: tmp = (NaChar / (1.0 + t_1)) + (NdChar / (1.0 + math.exp((Vef / KbT)))) elif mu <= 7.5e-130: tmp = (NdChar / (1.0 + t_0)) + (NaChar / (1.0 - (mu * ((1.0 / KbT) + ((-1.0 - ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) / mu))))) elif mu <= 850000000000.0: tmp = (NdChar / (1.0 + math.exp((EDonor / KbT)))) - t_2 elif mu <= 8e+48: tmp = (NaChar / ((2.0 - (Ev * ((-1.0 / KbT) - (Vef / (KbT * Ev))))) - (mu / KbT))) - (NdChar / (-1.0 - t_0)) else: tmp = t_3 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)) t_1 = exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT)) t_2 = Float64(NaChar / Float64(-1.0 - t_1)) t_3 = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(mu / KbT)))) - t_2) tmp = 0.0 if (mu <= -4.4e+95) tmp = t_3; elseif (mu <= -6.6e-42) tmp = Float64(Float64(NaChar / Float64(1.0 + t_1)) + Float64(NdChar / Float64(1.0 + exp(Float64(Vef / KbT))))); elseif (mu <= 7.5e-130) tmp = Float64(Float64(NdChar / Float64(1.0 + t_0)) + Float64(NaChar / Float64(1.0 - Float64(mu * Float64(Float64(1.0 / KbT) + Float64(Float64(-1.0 - Float64(Float64(EAccept / KbT) + Float64(Float64(Vef / KbT) + Float64(Ev / KbT)))) / mu)))))); elseif (mu <= 850000000000.0) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(EDonor / KbT)))) - t_2); elseif (mu <= 8e+48) tmp = Float64(Float64(NaChar / Float64(Float64(2.0 - Float64(Ev * Float64(Float64(-1.0 / KbT) - Float64(Vef / Float64(KbT * Ev))))) - Float64(mu / KbT))) - Float64(NdChar / Float64(-1.0 - t_0))); else tmp = t_3; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = exp(((EDonor + (mu + (Vef - Ec))) / KbT)); t_1 = exp(((Vef - ((mu - EAccept) - Ev)) / KbT)); t_2 = NaChar / (-1.0 - t_1); t_3 = (NdChar / (1.0 + exp((mu / KbT)))) - t_2; tmp = 0.0; if (mu <= -4.4e+95) tmp = t_3; elseif (mu <= -6.6e-42) tmp = (NaChar / (1.0 + t_1)) + (NdChar / (1.0 + exp((Vef / KbT)))); elseif (mu <= 7.5e-130) tmp = (NdChar / (1.0 + t_0)) + (NaChar / (1.0 - (mu * ((1.0 / KbT) + ((-1.0 - ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) / mu))))); elseif (mu <= 850000000000.0) tmp = (NdChar / (1.0 + exp((EDonor / KbT)))) - t_2; elseif (mu <= 8e+48) tmp = (NaChar / ((2.0 - (Ev * ((-1.0 / KbT) - (Vef / (KbT * Ev))))) - (mu / KbT))) - (NdChar / (-1.0 - t_0)); else tmp = t_3; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$2 = N[(NaChar / N[(-1.0 - t$95$1), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$3 = N[(N[(NdChar / N[(1.0 + N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - t$95$2), $MachinePrecision]}, If[LessEqual[mu, -4.4e+95], t$95$3, If[LessEqual[mu, -6.6e-42], N[(N[(NaChar / N[(1.0 + t$95$1), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(1.0 + N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[mu, 7.5e-130], N[(N[(NdChar / N[(1.0 + t$95$0), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 - N[(mu * N[(N[(1.0 / KbT), $MachinePrecision] + N[(N[(-1.0 - N[(N[(EAccept / KbT), $MachinePrecision] + N[(N[(Vef / KbT), $MachinePrecision] + N[(Ev / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[mu, 850000000000.0], N[(N[(NdChar / N[(1.0 + N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - t$95$2), $MachinePrecision], If[LessEqual[mu, 8e+48], N[(N[(NaChar / N[(N[(2.0 - N[(Ev * N[(N[(-1.0 / KbT), $MachinePrecision] - N[(Vef / N[(KbT * Ev), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(NdChar / N[(-1.0 - t$95$0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$3]]]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}\\
t_1 := e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}\\
t_2 := \frac{NaChar}{-1 - t\_1}\\
t_3 := \frac{NdChar}{1 + e^{\frac{mu}{KbT}}} - t\_2\\
\mathbf{if}\;mu \leq -4.4 \cdot 10^{+95}:\\
\;\;\;\;t\_3\\
\mathbf{elif}\;mu \leq -6.6 \cdot 10^{-42}:\\
\;\;\;\;\frac{NaChar}{1 + t\_1} + \frac{NdChar}{1 + e^{\frac{Vef}{KbT}}}\\
\mathbf{elif}\;mu \leq 7.5 \cdot 10^{-130}:\\
\;\;\;\;\frac{NdChar}{1 + t\_0} + \frac{NaChar}{1 - mu \cdot \left(\frac{1}{KbT} + \frac{-1 - \left(\frac{EAccept}{KbT} + \left(\frac{Vef}{KbT} + \frac{Ev}{KbT}\right)\right)}{mu}\right)}\\
\mathbf{elif}\;mu \leq 850000000000:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{EDonor}{KbT}}} - t\_2\\
\mathbf{elif}\;mu \leq 8 \cdot 10^{+48}:\\
\;\;\;\;\frac{NaChar}{\left(2 - Ev \cdot \left(\frac{-1}{KbT} - \frac{Vef}{KbT \cdot Ev}\right)\right) - \frac{mu}{KbT}} - \frac{NdChar}{-1 - t\_0}\\
\mathbf{else}:\\
\;\;\;\;t\_3\\
\end{array}
\end{array}
if mu < -4.3999999999999998e95 or 8.00000000000000035e48 < mu Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 84.3%
if -4.3999999999999998e95 < mu < -6.6000000000000005e-42Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 74.1%
if -6.6000000000000005e-42 < mu < 7.4999999999999994e-130Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 63.2%
+-commutative63.2%
Simplified63.2%
Taylor expanded in mu around -inf 77.7%
associate-*r*77.7%
mul-1-neg77.7%
+-commutative77.7%
mul-1-neg77.7%
unsub-neg77.7%
Simplified77.7%
if 7.4999999999999994e-130 < mu < 8.5e11Initial program 99.9%
Simplified99.9%
Taylor expanded in EDonor around inf 80.4%
if 8.5e11 < mu < 8.00000000000000035e48Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 80.4%
+-commutative80.4%
Simplified80.4%
Taylor expanded in Ev around inf 90.4%
Taylor expanded in EAccept around 0 81.2%
Final simplification80.5%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT)))
(t_1 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT)))
(t_2 (+ (/ NaChar (+ 1.0 t_1)) (/ NdChar (+ 1.0 (exp (/ Vef KbT))))))
(t_3
(- (/ NdChar (+ 1.0 (exp (/ EDonor KbT)))) (/ NaChar (- -1.0 t_1)))))
(if (<= EDonor -4.2e+118)
t_3
(if (<= EDonor 2e-233)
t_2
(if (<= EDonor 4e-99)
(+
(/ NdChar (+ 1.0 t_0))
(/
NaChar
(-
1.0
(*
mu
(+
(/ 1.0 KbT)
(/
(- -1.0 (+ (/ EAccept KbT) (+ (/ Vef KbT) (/ Ev KbT))))
mu))))))
(if (<= EDonor 6e-72)
t_2
(if (<= EDonor 1.1e+23)
(-
(/
NaChar
(+
1.0
(-
(- 1.0 (/ (- (* Ev (- -1.0 (/ Vef Ev))) EAccept) KbT))
(/ mu KbT))))
(/ NdChar (- -1.0 t_0)))
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 = exp(((EDonor + (mu + (Vef - Ec))) / KbT));
double t_1 = exp(((Vef - ((mu - EAccept) - Ev)) / KbT));
double t_2 = (NaChar / (1.0 + t_1)) + (NdChar / (1.0 + exp((Vef / KbT))));
double t_3 = (NdChar / (1.0 + exp((EDonor / KbT)))) - (NaChar / (-1.0 - t_1));
double tmp;
if (EDonor <= -4.2e+118) {
tmp = t_3;
} else if (EDonor <= 2e-233) {
tmp = t_2;
} else if (EDonor <= 4e-99) {
tmp = (NdChar / (1.0 + t_0)) + (NaChar / (1.0 - (mu * ((1.0 / KbT) + ((-1.0 - ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) / mu)))));
} else if (EDonor <= 6e-72) {
tmp = t_2;
} else if (EDonor <= 1.1e+23) {
tmp = (NaChar / (1.0 + ((1.0 - (((Ev * (-1.0 - (Vef / Ev))) - EAccept) / KbT)) - (mu / KbT)))) - (NdChar / (-1.0 - t_0));
} 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 = exp(((edonor + (mu + (vef - ec))) / kbt))
t_1 = exp(((vef - ((mu - eaccept) - ev)) / kbt))
t_2 = (nachar / (1.0d0 + t_1)) + (ndchar / (1.0d0 + exp((vef / kbt))))
t_3 = (ndchar / (1.0d0 + exp((edonor / kbt)))) - (nachar / ((-1.0d0) - t_1))
if (edonor <= (-4.2d+118)) then
tmp = t_3
else if (edonor <= 2d-233) then
tmp = t_2
else if (edonor <= 4d-99) then
tmp = (ndchar / (1.0d0 + t_0)) + (nachar / (1.0d0 - (mu * ((1.0d0 / kbt) + (((-1.0d0) - ((eaccept / kbt) + ((vef / kbt) + (ev / kbt)))) / mu)))))
else if (edonor <= 6d-72) then
tmp = t_2
else if (edonor <= 1.1d+23) then
tmp = (nachar / (1.0d0 + ((1.0d0 - (((ev * ((-1.0d0) - (vef / ev))) - eaccept) / kbt)) - (mu / kbt)))) - (ndchar / ((-1.0d0) - t_0))
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 = Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT));
double t_1 = Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT));
double t_2 = (NaChar / (1.0 + t_1)) + (NdChar / (1.0 + Math.exp((Vef / KbT))));
double t_3 = (NdChar / (1.0 + Math.exp((EDonor / KbT)))) - (NaChar / (-1.0 - t_1));
double tmp;
if (EDonor <= -4.2e+118) {
tmp = t_3;
} else if (EDonor <= 2e-233) {
tmp = t_2;
} else if (EDonor <= 4e-99) {
tmp = (NdChar / (1.0 + t_0)) + (NaChar / (1.0 - (mu * ((1.0 / KbT) + ((-1.0 - ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) / mu)))));
} else if (EDonor <= 6e-72) {
tmp = t_2;
} else if (EDonor <= 1.1e+23) {
tmp = (NaChar / (1.0 + ((1.0 - (((Ev * (-1.0 - (Vef / Ev))) - EAccept) / KbT)) - (mu / KbT)))) - (NdChar / (-1.0 - t_0));
} else {
tmp = t_3;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)) t_1 = math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)) t_2 = (NaChar / (1.0 + t_1)) + (NdChar / (1.0 + math.exp((Vef / KbT)))) t_3 = (NdChar / (1.0 + math.exp((EDonor / KbT)))) - (NaChar / (-1.0 - t_1)) tmp = 0 if EDonor <= -4.2e+118: tmp = t_3 elif EDonor <= 2e-233: tmp = t_2 elif EDonor <= 4e-99: tmp = (NdChar / (1.0 + t_0)) + (NaChar / (1.0 - (mu * ((1.0 / KbT) + ((-1.0 - ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) / mu))))) elif EDonor <= 6e-72: tmp = t_2 elif EDonor <= 1.1e+23: tmp = (NaChar / (1.0 + ((1.0 - (((Ev * (-1.0 - (Vef / Ev))) - EAccept) / KbT)) - (mu / KbT)))) - (NdChar / (-1.0 - t_0)) else: tmp = t_3 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)) t_1 = exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT)) t_2 = Float64(Float64(NaChar / Float64(1.0 + t_1)) + Float64(NdChar / Float64(1.0 + exp(Float64(Vef / KbT))))) t_3 = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(EDonor / KbT)))) - Float64(NaChar / Float64(-1.0 - t_1))) tmp = 0.0 if (EDonor <= -4.2e+118) tmp = t_3; elseif (EDonor <= 2e-233) tmp = t_2; elseif (EDonor <= 4e-99) tmp = Float64(Float64(NdChar / Float64(1.0 + t_0)) + Float64(NaChar / Float64(1.0 - Float64(mu * Float64(Float64(1.0 / KbT) + Float64(Float64(-1.0 - Float64(Float64(EAccept / KbT) + Float64(Float64(Vef / KbT) + Float64(Ev / KbT)))) / mu)))))); elseif (EDonor <= 6e-72) tmp = t_2; elseif (EDonor <= 1.1e+23) tmp = Float64(Float64(NaChar / Float64(1.0 + Float64(Float64(1.0 - Float64(Float64(Float64(Ev * Float64(-1.0 - Float64(Vef / Ev))) - EAccept) / KbT)) - Float64(mu / KbT)))) - Float64(NdChar / Float64(-1.0 - t_0))); else tmp = t_3; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = exp(((EDonor + (mu + (Vef - Ec))) / KbT)); t_1 = exp(((Vef - ((mu - EAccept) - Ev)) / KbT)); t_2 = (NaChar / (1.0 + t_1)) + (NdChar / (1.0 + exp((Vef / KbT)))); t_3 = (NdChar / (1.0 + exp((EDonor / KbT)))) - (NaChar / (-1.0 - t_1)); tmp = 0.0; if (EDonor <= -4.2e+118) tmp = t_3; elseif (EDonor <= 2e-233) tmp = t_2; elseif (EDonor <= 4e-99) tmp = (NdChar / (1.0 + t_0)) + (NaChar / (1.0 - (mu * ((1.0 / KbT) + ((-1.0 - ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) / mu))))); elseif (EDonor <= 6e-72) tmp = t_2; elseif (EDonor <= 1.1e+23) tmp = (NaChar / (1.0 + ((1.0 - (((Ev * (-1.0 - (Vef / Ev))) - EAccept) / KbT)) - (mu / KbT)))) - (NdChar / (-1.0 - t_0)); else tmp = t_3; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$2 = N[(N[(NaChar / N[(1.0 + t$95$1), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(1.0 + N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$3 = N[(N[(NdChar / N[(1.0 + N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(NaChar / N[(-1.0 - t$95$1), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[EDonor, -4.2e+118], t$95$3, If[LessEqual[EDonor, 2e-233], t$95$2, If[LessEqual[EDonor, 4e-99], N[(N[(NdChar / N[(1.0 + t$95$0), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 - N[(mu * N[(N[(1.0 / KbT), $MachinePrecision] + N[(N[(-1.0 - N[(N[(EAccept / KbT), $MachinePrecision] + N[(N[(Vef / KbT), $MachinePrecision] + N[(Ev / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[EDonor, 6e-72], t$95$2, If[LessEqual[EDonor, 1.1e+23], N[(N[(NaChar / N[(1.0 + N[(N[(1.0 - N[(N[(N[(Ev * N[(-1.0 - N[(Vef / Ev), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - EAccept), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision] - N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(NdChar / N[(-1.0 - t$95$0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$3]]]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}\\
t_1 := e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}\\
t_2 := \frac{NaChar}{1 + t\_1} + \frac{NdChar}{1 + e^{\frac{Vef}{KbT}}}\\
t_3 := \frac{NdChar}{1 + e^{\frac{EDonor}{KbT}}} - \frac{NaChar}{-1 - t\_1}\\
\mathbf{if}\;EDonor \leq -4.2 \cdot 10^{+118}:\\
\;\;\;\;t\_3\\
\mathbf{elif}\;EDonor \leq 2 \cdot 10^{-233}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;EDonor \leq 4 \cdot 10^{-99}:\\
\;\;\;\;\frac{NdChar}{1 + t\_0} + \frac{NaChar}{1 - mu \cdot \left(\frac{1}{KbT} + \frac{-1 - \left(\frac{EAccept}{KbT} + \left(\frac{Vef}{KbT} + \frac{Ev}{KbT}\right)\right)}{mu}\right)}\\
\mathbf{elif}\;EDonor \leq 6 \cdot 10^{-72}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;EDonor \leq 1.1 \cdot 10^{+23}:\\
\;\;\;\;\frac{NaChar}{1 + \left(\left(1 - \frac{Ev \cdot \left(-1 - \frac{Vef}{Ev}\right) - EAccept}{KbT}\right) - \frac{mu}{KbT}\right)} - \frac{NdChar}{-1 - t\_0}\\
\mathbf{else}:\\
\;\;\;\;t\_3\\
\end{array}
\end{array}
if EDonor < -4.2e118 or 1.10000000000000004e23 < EDonor Initial program 100.0%
Simplified100.0%
Taylor expanded in EDonor around inf 82.6%
if -4.2e118 < EDonor < 1.99999999999999992e-233 or 4.0000000000000001e-99 < EDonor < 6e-72Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 75.4%
if 1.99999999999999992e-233 < EDonor < 4.0000000000000001e-99Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 78.1%
+-commutative78.1%
Simplified78.1%
Taylor expanded in mu around -inf 84.2%
associate-*r*84.2%
mul-1-neg84.2%
+-commutative84.2%
mul-1-neg84.2%
unsub-neg84.2%
Simplified84.2%
if 6e-72 < EDonor < 1.10000000000000004e23Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 82.6%
+-commutative82.6%
Simplified82.6%
Taylor expanded in Ev around inf 76.7%
Taylor expanded in KbT around 0 88.5%
Final simplification79.9%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (+ 1.0 (exp (/ Vef KbT))))
(t_1
(+
(/ NdChar (+ 1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT))))
(/
NaChar
(-
1.0
(*
mu
(+
(/ 1.0 KbT)
(/
(- -1.0 (+ (/ EAccept KbT) (+ (/ Vef KbT) (/ Ev KbT))))
mu)))))))
(t_2 (+ (/ NdChar t_0) (/ NaChar t_0))))
(if (<= Vef -9.5e+138)
t_2
(if (<= Vef -4e+58)
(-
(/ NdChar (+ (/ Vef KbT) 2.0))
(/ NaChar (- -1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT)))))
(if (<= Vef -2.5e-38)
t_1
(if (<= Vef -1.85e-136)
(+
(/ NdChar (+ 1.0 (exp (/ EDonor KbT))))
(/ NaChar (+ 1.0 (exp (/ Ev KbT)))))
(if (<= Vef 8e+74) t_1 t_2)))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = 1.0 + exp((Vef / KbT));
double t_1 = (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 - (mu * ((1.0 / KbT) + ((-1.0 - ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) / mu)))));
double t_2 = (NdChar / t_0) + (NaChar / t_0);
double tmp;
if (Vef <= -9.5e+138) {
tmp = t_2;
} else if (Vef <= -4e+58) {
tmp = (NdChar / ((Vef / KbT) + 2.0)) - (NaChar / (-1.0 - exp(((Vef - ((mu - EAccept) - Ev)) / KbT))));
} else if (Vef <= -2.5e-38) {
tmp = t_1;
} else if (Vef <= -1.85e-136) {
tmp = (NdChar / (1.0 + exp((EDonor / KbT)))) + (NaChar / (1.0 + exp((Ev / KbT))));
} else if (Vef <= 8e+74) {
tmp = t_1;
} else {
tmp = t_2;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: t_2
real(8) :: tmp
t_0 = 1.0d0 + exp((vef / kbt))
t_1 = (ndchar / (1.0d0 + exp(((edonor + (mu + (vef - ec))) / kbt)))) + (nachar / (1.0d0 - (mu * ((1.0d0 / kbt) + (((-1.0d0) - ((eaccept / kbt) + ((vef / kbt) + (ev / kbt)))) / mu)))))
t_2 = (ndchar / t_0) + (nachar / t_0)
if (vef <= (-9.5d+138)) then
tmp = t_2
else if (vef <= (-4d+58)) then
tmp = (ndchar / ((vef / kbt) + 2.0d0)) - (nachar / ((-1.0d0) - exp(((vef - ((mu - eaccept) - ev)) / kbt))))
else if (vef <= (-2.5d-38)) then
tmp = t_1
else if (vef <= (-1.85d-136)) then
tmp = (ndchar / (1.0d0 + exp((edonor / kbt)))) + (nachar / (1.0d0 + exp((ev / kbt))))
else if (vef <= 8d+74) then
tmp = t_1
else
tmp = t_2
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = 1.0 + Math.exp((Vef / KbT));
double t_1 = (NdChar / (1.0 + Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 - (mu * ((1.0 / KbT) + ((-1.0 - ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) / mu)))));
double t_2 = (NdChar / t_0) + (NaChar / t_0);
double tmp;
if (Vef <= -9.5e+138) {
tmp = t_2;
} else if (Vef <= -4e+58) {
tmp = (NdChar / ((Vef / KbT) + 2.0)) - (NaChar / (-1.0 - Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT))));
} else if (Vef <= -2.5e-38) {
tmp = t_1;
} else if (Vef <= -1.85e-136) {
tmp = (NdChar / (1.0 + Math.exp((EDonor / KbT)))) + (NaChar / (1.0 + Math.exp((Ev / KbT))));
} else if (Vef <= 8e+74) {
tmp = t_1;
} else {
tmp = t_2;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = 1.0 + math.exp((Vef / KbT)) t_1 = (NdChar / (1.0 + math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 - (mu * ((1.0 / KbT) + ((-1.0 - ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) / mu))))) t_2 = (NdChar / t_0) + (NaChar / t_0) tmp = 0 if Vef <= -9.5e+138: tmp = t_2 elif Vef <= -4e+58: tmp = (NdChar / ((Vef / KbT) + 2.0)) - (NaChar / (-1.0 - math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) elif Vef <= -2.5e-38: tmp = t_1 elif Vef <= -1.85e-136: tmp = (NdChar / (1.0 + math.exp((EDonor / KbT)))) + (NaChar / (1.0 + math.exp((Ev / KbT)))) elif Vef <= 8e+74: tmp = t_1 else: tmp = t_2 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(1.0 + exp(Float64(Vef / KbT))) t_1 = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) + Float64(NaChar / Float64(1.0 - Float64(mu * Float64(Float64(1.0 / KbT) + Float64(Float64(-1.0 - Float64(Float64(EAccept / KbT) + Float64(Float64(Vef / KbT) + Float64(Ev / KbT)))) / mu)))))) t_2 = Float64(Float64(NdChar / t_0) + Float64(NaChar / t_0)) tmp = 0.0 if (Vef <= -9.5e+138) tmp = t_2; elseif (Vef <= -4e+58) tmp = Float64(Float64(NdChar / Float64(Float64(Vef / KbT) + 2.0)) - Float64(NaChar / Float64(-1.0 - exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT))))); elseif (Vef <= -2.5e-38) tmp = t_1; elseif (Vef <= -1.85e-136) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(EDonor / KbT)))) + Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT))))); elseif (Vef <= 8e+74) tmp = t_1; else tmp = t_2; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = 1.0 + exp((Vef / KbT)); t_1 = (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 - (mu * ((1.0 / KbT) + ((-1.0 - ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) / mu))))); t_2 = (NdChar / t_0) + (NaChar / t_0); tmp = 0.0; if (Vef <= -9.5e+138) tmp = t_2; elseif (Vef <= -4e+58) tmp = (NdChar / ((Vef / KbT) + 2.0)) - (NaChar / (-1.0 - exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))); elseif (Vef <= -2.5e-38) tmp = t_1; elseif (Vef <= -1.85e-136) tmp = (NdChar / (1.0 + exp((EDonor / KbT)))) + (NaChar / (1.0 + exp((Ev / KbT)))); elseif (Vef <= 8e+74) tmp = t_1; else tmp = t_2; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(1.0 + N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 - N[(mu * N[(N[(1.0 / KbT), $MachinePrecision] + N[(N[(-1.0 - N[(N[(EAccept / KbT), $MachinePrecision] + N[(N[(Vef / KbT), $MachinePrecision] + N[(Ev / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(N[(NdChar / t$95$0), $MachinePrecision] + N[(NaChar / t$95$0), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[Vef, -9.5e+138], t$95$2, If[LessEqual[Vef, -4e+58], N[(N[(NdChar / N[(N[(Vef / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision] - N[(NaChar / N[(-1.0 - N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[Vef, -2.5e-38], t$95$1, If[LessEqual[Vef, -1.85e-136], N[(N[(NdChar / N[(1.0 + N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[Vef, 8e+74], t$95$1, t$95$2]]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := 1 + e^{\frac{Vef}{KbT}}\\
t_1 := \frac{NdChar}{1 + e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}} + \frac{NaChar}{1 - mu \cdot \left(\frac{1}{KbT} + \frac{-1 - \left(\frac{EAccept}{KbT} + \left(\frac{Vef}{KbT} + \frac{Ev}{KbT}\right)\right)}{mu}\right)}\\
t_2 := \frac{NdChar}{t\_0} + \frac{NaChar}{t\_0}\\
\mathbf{if}\;Vef \leq -9.5 \cdot 10^{+138}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;Vef \leq -4 \cdot 10^{+58}:\\
\;\;\;\;\frac{NdChar}{\frac{Vef}{KbT} + 2} - \frac{NaChar}{-1 - e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}}\\
\mathbf{elif}\;Vef \leq -2.5 \cdot 10^{-38}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;Vef \leq -1.85 \cdot 10^{-136}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{EDonor}{KbT}}} + \frac{NaChar}{1 + e^{\frac{Ev}{KbT}}}\\
\mathbf{elif}\;Vef \leq 8 \cdot 10^{+74}:\\
\;\;\;\;t\_1\\
\mathbf{else}:\\
\;\;\;\;t\_2\\
\end{array}
\end{array}
if Vef < -9.49999999999999998e138 or 7.99999999999999961e74 < Vef Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 89.0%
Taylor expanded in Vef around inf 78.0%
if -9.49999999999999998e138 < Vef < -3.99999999999999978e58Initial program 99.9%
Simplified99.9%
Taylor expanded in Vef around inf 69.7%
Taylor expanded in Vef around 0 75.8%
+-commutative75.8%
Simplified75.8%
if -3.99999999999999978e58 < Vef < -2.50000000000000017e-38 or -1.85e-136 < Vef < 7.99999999999999961e74Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 60.5%
+-commutative60.5%
Simplified60.5%
Taylor expanded in mu around -inf 67.8%
associate-*r*67.8%
mul-1-neg67.8%
+-commutative67.8%
mul-1-neg67.8%
unsub-neg67.8%
Simplified67.8%
if -2.50000000000000017e-38 < Vef < -1.85e-136Initial program 100.0%
Simplified100.0%
Taylor expanded in EDonor around inf 94.4%
Taylor expanded in Ev around inf 68.8%
Final simplification71.4%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0
(+
(/ NdChar (+ 1.0 (exp (/ mu KbT))))
(/ NaChar (+ 1.0 (exp (/ mu (- KbT))))))))
(if (<= mu -2.4e+109)
t_0
(if (<= mu -7e-42)
(+
(/ NaChar (+ 1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT))))
(/
NdChar
(+
1.0
(-
(+ 1.0 (+ (/ EDonor KbT) (+ (/ Vef KbT) (/ mu KbT))))
(/ Ec KbT)))))
(if (<= mu 2e-52)
(+
(/ NdChar (+ 1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT))))
(/
NaChar
(-
1.0
(*
mu
(+
(/ 1.0 KbT)
(/
(- -1.0 (+ (/ EAccept KbT) (+ (/ Vef KbT) (/ Ev KbT))))
mu))))))
(if (<= mu 2.9e+94)
(-
(/ NaChar (+ 1.0 (exp (/ Ev KbT))))
(/ NdChar (- -1.0 (exp (/ Ec (- KbT))))))
t_0))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NdChar / (1.0 + exp((mu / KbT)))) + (NaChar / (1.0 + exp((mu / -KbT))));
double tmp;
if (mu <= -2.4e+109) {
tmp = t_0;
} else if (mu <= -7e-42) {
tmp = (NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / (1.0 + ((1.0 + ((EDonor / KbT) + ((Vef / KbT) + (mu / KbT)))) - (Ec / KbT))));
} else if (mu <= 2e-52) {
tmp = (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 - (mu * ((1.0 / KbT) + ((-1.0 - ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) / mu)))));
} else if (mu <= 2.9e+94) {
tmp = (NaChar / (1.0 + exp((Ev / KbT)))) - (NdChar / (-1.0 - exp((Ec / -KbT))));
} else {
tmp = t_0;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: tmp
t_0 = (ndchar / (1.0d0 + exp((mu / kbt)))) + (nachar / (1.0d0 + exp((mu / -kbt))))
if (mu <= (-2.4d+109)) then
tmp = t_0
else if (mu <= (-7d-42)) then
tmp = (nachar / (1.0d0 + exp(((vef - ((mu - eaccept) - ev)) / kbt)))) + (ndchar / (1.0d0 + ((1.0d0 + ((edonor / kbt) + ((vef / kbt) + (mu / kbt)))) - (ec / kbt))))
else if (mu <= 2d-52) then
tmp = (ndchar / (1.0d0 + exp(((edonor + (mu + (vef - ec))) / kbt)))) + (nachar / (1.0d0 - (mu * ((1.0d0 / kbt) + (((-1.0d0) - ((eaccept / kbt) + ((vef / kbt) + (ev / kbt)))) / mu)))))
else if (mu <= 2.9d+94) then
tmp = (nachar / (1.0d0 + exp((ev / kbt)))) - (ndchar / ((-1.0d0) - exp((ec / -kbt))))
else
tmp = t_0
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NdChar / (1.0 + Math.exp((mu / KbT)))) + (NaChar / (1.0 + Math.exp((mu / -KbT))));
double tmp;
if (mu <= -2.4e+109) {
tmp = t_0;
} else if (mu <= -7e-42) {
tmp = (NaChar / (1.0 + Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / (1.0 + ((1.0 + ((EDonor / KbT) + ((Vef / KbT) + (mu / KbT)))) - (Ec / KbT))));
} else if (mu <= 2e-52) {
tmp = (NdChar / (1.0 + Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 - (mu * ((1.0 / KbT) + ((-1.0 - ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) / mu)))));
} else if (mu <= 2.9e+94) {
tmp = (NaChar / (1.0 + Math.exp((Ev / KbT)))) - (NdChar / (-1.0 - Math.exp((Ec / -KbT))));
} else {
tmp = t_0;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = (NdChar / (1.0 + math.exp((mu / KbT)))) + (NaChar / (1.0 + math.exp((mu / -KbT)))) tmp = 0 if mu <= -2.4e+109: tmp = t_0 elif mu <= -7e-42: tmp = (NaChar / (1.0 + math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / (1.0 + ((1.0 + ((EDonor / KbT) + ((Vef / KbT) + (mu / KbT)))) - (Ec / KbT)))) elif mu <= 2e-52: tmp = (NdChar / (1.0 + math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 - (mu * ((1.0 / KbT) + ((-1.0 - ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) / mu))))) elif mu <= 2.9e+94: tmp = (NaChar / (1.0 + math.exp((Ev / KbT)))) - (NdChar / (-1.0 - math.exp((Ec / -KbT)))) else: tmp = t_0 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(mu / KbT)))) + Float64(NaChar / Float64(1.0 + exp(Float64(mu / Float64(-KbT)))))) tmp = 0.0 if (mu <= -2.4e+109) tmp = t_0; elseif (mu <= -7e-42) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT)))) + Float64(NdChar / Float64(1.0 + Float64(Float64(1.0 + Float64(Float64(EDonor / KbT) + Float64(Float64(Vef / KbT) + Float64(mu / KbT)))) - Float64(Ec / KbT))))); elseif (mu <= 2e-52) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) + Float64(NaChar / Float64(1.0 - Float64(mu * Float64(Float64(1.0 / KbT) + Float64(Float64(-1.0 - Float64(Float64(EAccept / KbT) + Float64(Float64(Vef / KbT) + Float64(Ev / KbT)))) / mu)))))); elseif (mu <= 2.9e+94) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT)))) - Float64(NdChar / Float64(-1.0 - exp(Float64(Ec / 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 / KbT)))) + (NaChar / (1.0 + exp((mu / -KbT)))); tmp = 0.0; if (mu <= -2.4e+109) tmp = t_0; elseif (mu <= -7e-42) tmp = (NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / (1.0 + ((1.0 + ((EDonor / KbT) + ((Vef / KbT) + (mu / KbT)))) - (Ec / KbT)))); elseif (mu <= 2e-52) tmp = (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 - (mu * ((1.0 / KbT) + ((-1.0 - ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) / mu))))); elseif (mu <= 2.9e+94) tmp = (NaChar / (1.0 + exp((Ev / KbT)))) - (NdChar / (-1.0 - exp((Ec / -KbT)))); else tmp = t_0; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(NdChar / N[(1.0 + N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Exp[N[(mu / (-KbT)), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[mu, -2.4e+109], t$95$0, If[LessEqual[mu, -7e-42], N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(1.0 + N[(N[(1.0 + N[(N[(EDonor / KbT), $MachinePrecision] + N[(N[(Vef / KbT), $MachinePrecision] + N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[mu, 2e-52], N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 - N[(mu * N[(N[(1.0 / KbT), $MachinePrecision] + N[(N[(-1.0 - N[(N[(EAccept / KbT), $MachinePrecision] + N[(N[(Vef / KbT), $MachinePrecision] + N[(Ev / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[mu, 2.9e+94], N[(N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(NdChar / N[(-1.0 - N[Exp[N[(Ec / (-KbT)), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$0]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{1 + e^{\frac{mu}{KbT}}} + \frac{NaChar}{1 + e^{\frac{mu}{-KbT}}}\\
\mathbf{if}\;mu \leq -2.4 \cdot 10^{+109}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;mu \leq -7 \cdot 10^{-42}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}} + \frac{NdChar}{1 + \left(\left(1 + \left(\frac{EDonor}{KbT} + \left(\frac{Vef}{KbT} + \frac{mu}{KbT}\right)\right)\right) - \frac{Ec}{KbT}\right)}\\
\mathbf{elif}\;mu \leq 2 \cdot 10^{-52}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}} + \frac{NaChar}{1 - mu \cdot \left(\frac{1}{KbT} + \frac{-1 - \left(\frac{EAccept}{KbT} + \left(\frac{Vef}{KbT} + \frac{Ev}{KbT}\right)\right)}{mu}\right)}\\
\mathbf{elif}\;mu \leq 2.9 \cdot 10^{+94}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Ev}{KbT}}} - \frac{NdChar}{-1 - e^{\frac{Ec}{-KbT}}}\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if mu < -2.39999999999999987e109 or 2.8999999999999998e94 < mu Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 84.1%
Taylor expanded in mu around inf 77.8%
neg-mul-177.8%
distribute-neg-frac277.8%
Simplified77.8%
if -2.39999999999999987e109 < mu < -7.0000000000000004e-42Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 69.6%
if -7.0000000000000004e-42 < mu < 2e-52Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 63.4%
+-commutative63.4%
Simplified63.4%
Taylor expanded in mu around -inf 75.2%
associate-*r*75.2%
mul-1-neg75.2%
+-commutative75.2%
mul-1-neg75.2%
unsub-neg75.2%
Simplified75.2%
if 2e-52 < mu < 2.8999999999999998e94Initial program 100.0%
Simplified100.0%
Taylor expanded in Ec around inf 91.1%
associate-*r/91.1%
mul-1-neg91.1%
Simplified91.1%
Taylor expanded in Ev around inf 71.4%
Final simplification75.0%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0
(+
(/ NdChar (+ 1.0 (exp (/ mu KbT))))
(/ NaChar (+ 1.0 (exp (/ mu (- KbT))))))))
(if (<= mu -2e+109)
t_0
(if (<= mu -1.02e-41)
(+
(/ NaChar (+ 1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT))))
(/
NdChar
(+
1.0
(-
(+ 1.0 (+ (/ EDonor KbT) (+ (/ Vef KbT) (/ mu KbT))))
(/ Ec KbT)))))
(if (<= mu 7e+94)
(+
(/ NdChar (+ 1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT))))
(/
NaChar
(-
1.0
(*
mu
(+
(/ 1.0 KbT)
(/
(- -1.0 (+ (/ EAccept KbT) (+ (/ Vef KbT) (/ Ev KbT))))
mu))))))
t_0)))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NdChar / (1.0 + exp((mu / KbT)))) + (NaChar / (1.0 + exp((mu / -KbT))));
double tmp;
if (mu <= -2e+109) {
tmp = t_0;
} else if (mu <= -1.02e-41) {
tmp = (NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / (1.0 + ((1.0 + ((EDonor / KbT) + ((Vef / KbT) + (mu / KbT)))) - (Ec / KbT))));
} else if (mu <= 7e+94) {
tmp = (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 - (mu * ((1.0 / KbT) + ((-1.0 - ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) / mu)))));
} else {
tmp = t_0;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: tmp
t_0 = (ndchar / (1.0d0 + exp((mu / kbt)))) + (nachar / (1.0d0 + exp((mu / -kbt))))
if (mu <= (-2d+109)) then
tmp = t_0
else if (mu <= (-1.02d-41)) then
tmp = (nachar / (1.0d0 + exp(((vef - ((mu - eaccept) - ev)) / kbt)))) + (ndchar / (1.0d0 + ((1.0d0 + ((edonor / kbt) + ((vef / kbt) + (mu / kbt)))) - (ec / kbt))))
else if (mu <= 7d+94) then
tmp = (ndchar / (1.0d0 + exp(((edonor + (mu + (vef - ec))) / kbt)))) + (nachar / (1.0d0 - (mu * ((1.0d0 / kbt) + (((-1.0d0) - ((eaccept / kbt) + ((vef / kbt) + (ev / kbt)))) / mu)))))
else
tmp = t_0
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NdChar / (1.0 + Math.exp((mu / KbT)))) + (NaChar / (1.0 + Math.exp((mu / -KbT))));
double tmp;
if (mu <= -2e+109) {
tmp = t_0;
} else if (mu <= -1.02e-41) {
tmp = (NaChar / (1.0 + Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / (1.0 + ((1.0 + ((EDonor / KbT) + ((Vef / KbT) + (mu / KbT)))) - (Ec / KbT))));
} else if (mu <= 7e+94) {
tmp = (NdChar / (1.0 + Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 - (mu * ((1.0 / KbT) + ((-1.0 - ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) / mu)))));
} else {
tmp = t_0;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = (NdChar / (1.0 + math.exp((mu / KbT)))) + (NaChar / (1.0 + math.exp((mu / -KbT)))) tmp = 0 if mu <= -2e+109: tmp = t_0 elif mu <= -1.02e-41: tmp = (NaChar / (1.0 + math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / (1.0 + ((1.0 + ((EDonor / KbT) + ((Vef / KbT) + (mu / KbT)))) - (Ec / KbT)))) elif mu <= 7e+94: tmp = (NdChar / (1.0 + math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 - (mu * ((1.0 / KbT) + ((-1.0 - ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) / mu))))) else: tmp = t_0 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(mu / KbT)))) + Float64(NaChar / Float64(1.0 + exp(Float64(mu / Float64(-KbT)))))) tmp = 0.0 if (mu <= -2e+109) tmp = t_0; elseif (mu <= -1.02e-41) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT)))) + Float64(NdChar / Float64(1.0 + Float64(Float64(1.0 + Float64(Float64(EDonor / KbT) + Float64(Float64(Vef / KbT) + Float64(mu / KbT)))) - Float64(Ec / KbT))))); elseif (mu <= 7e+94) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) + Float64(NaChar / Float64(1.0 - Float64(mu * Float64(Float64(1.0 / KbT) + Float64(Float64(-1.0 - Float64(Float64(EAccept / KbT) + Float64(Float64(Vef / KbT) + Float64(Ev / KbT)))) / mu)))))); else tmp = t_0; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = (NdChar / (1.0 + exp((mu / KbT)))) + (NaChar / (1.0 + exp((mu / -KbT)))); tmp = 0.0; if (mu <= -2e+109) tmp = t_0; elseif (mu <= -1.02e-41) tmp = (NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / (1.0 + ((1.0 + ((EDonor / KbT) + ((Vef / KbT) + (mu / KbT)))) - (Ec / KbT)))); elseif (mu <= 7e+94) tmp = (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 - (mu * ((1.0 / KbT) + ((-1.0 - ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) / mu))))); else tmp = t_0; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(NdChar / N[(1.0 + N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Exp[N[(mu / (-KbT)), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[mu, -2e+109], t$95$0, If[LessEqual[mu, -1.02e-41], N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(1.0 + N[(N[(1.0 + N[(N[(EDonor / KbT), $MachinePrecision] + N[(N[(Vef / KbT), $MachinePrecision] + N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[mu, 7e+94], N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 - N[(mu * N[(N[(1.0 / KbT), $MachinePrecision] + N[(N[(-1.0 - N[(N[(EAccept / KbT), $MachinePrecision] + N[(N[(Vef / KbT), $MachinePrecision] + N[(Ev / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$0]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{1 + e^{\frac{mu}{KbT}}} + \frac{NaChar}{1 + e^{\frac{mu}{-KbT}}}\\
\mathbf{if}\;mu \leq -2 \cdot 10^{+109}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;mu \leq -1.02 \cdot 10^{-41}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}} + \frac{NdChar}{1 + \left(\left(1 + \left(\frac{EDonor}{KbT} + \left(\frac{Vef}{KbT} + \frac{mu}{KbT}\right)\right)\right) - \frac{Ec}{KbT}\right)}\\
\mathbf{elif}\;mu \leq 7 \cdot 10^{+94}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}} + \frac{NaChar}{1 - mu \cdot \left(\frac{1}{KbT} + \frac{-1 - \left(\frac{EAccept}{KbT} + \left(\frac{Vef}{KbT} + \frac{Ev}{KbT}\right)\right)}{mu}\right)}\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if mu < -1.99999999999999996e109 or 6.9999999999999994e94 < mu Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 84.1%
Taylor expanded in mu around inf 77.8%
neg-mul-177.8%
distribute-neg-frac277.8%
Simplified77.8%
if -1.99999999999999996e109 < mu < -1.02e-41Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 69.6%
if -1.02e-41 < mu < 6.9999999999999994e94Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 63.4%
+-commutative63.4%
Simplified63.4%
Taylor expanded in mu around -inf 72.3%
associate-*r*72.3%
mul-1-neg72.3%
+-commutative72.3%
mul-1-neg72.3%
unsub-neg72.3%
Simplified72.3%
Final simplification74.0%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (- (/ NaChar (+ 1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT)))) (/ NdChar (- -1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) - (NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT))));
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
code = (nachar / (1.0d0 + exp(((vef - ((mu - eaccept) - ev)) / kbt)))) - (ndchar / ((-1.0d0) - exp(((edonor + (mu + (vef - ec))) / kbt))))
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NaChar / (1.0 + Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) - (NdChar / (-1.0 - Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT))));
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return (NaChar / (1.0 + math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) - (NdChar / (-1.0 - math.exp(((EDonor + (mu + (Vef - Ec))) / KbT))))
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT)))) - Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT))))) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = (NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) - (NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT)))); end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(NdChar / N[(-1.0 - N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{NaChar}{1 + e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}} - \frac{NdChar}{-1 - e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}}
\end{array}
Initial program 100.0%
Simplified100.0%
Final simplification100.0%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NdChar (- -1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT)))))
(t_1 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT))))
(if (<= NdChar -3.7)
(- (/ NaChar (+ (+ (/ EAccept KbT) (+ (/ Vef KbT) (/ Ev KbT))) 2.0)) t_0)
(if (<= NdChar 3.2e-193)
(- (/ NdChar (+ (/ Vef KbT) 2.0)) (/ NaChar (- -1.0 t_1)))
(if (<= NdChar 2.5e-178)
(-
(/ (* KbT NaChar) (- (- EAccept (* Ev (- -1.0 (/ Vef Ev)))) mu))
t_0)
(if (or (<= NdChar 6.4e-37)
(and (not (<= NdChar 2.85e+80)) (<= NdChar 1.28e+154)))
(+ (/ NaChar (+ 1.0 t_1)) (/ NdChar (+ 1.0 (- 1.0 (/ Ec KbT)))))
(-
(/
NaChar
(- (- 2.0 (* Ev (- (/ -1.0 KbT) (/ Vef (* KbT Ev))))) (/ 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(((EDonor + (mu + (Vef - Ec))) / KbT)));
double t_1 = exp(((Vef - ((mu - EAccept) - Ev)) / KbT));
double tmp;
if (NdChar <= -3.7) {
tmp = (NaChar / (((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT))) + 2.0)) - t_0;
} else if (NdChar <= 3.2e-193) {
tmp = (NdChar / ((Vef / KbT) + 2.0)) - (NaChar / (-1.0 - t_1));
} else if (NdChar <= 2.5e-178) {
tmp = ((KbT * NaChar) / ((EAccept - (Ev * (-1.0 - (Vef / Ev)))) - mu)) - t_0;
} else if ((NdChar <= 6.4e-37) || (!(NdChar <= 2.85e+80) && (NdChar <= 1.28e+154))) {
tmp = (NaChar / (1.0 + t_1)) + (NdChar / (1.0 + (1.0 - (Ec / KbT))));
} else {
tmp = (NaChar / ((2.0 - (Ev * ((-1.0 / KbT) - (Vef / (KbT * Ev))))) - (mu / 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) :: t_1
real(8) :: tmp
t_0 = ndchar / ((-1.0d0) - exp(((edonor + (mu + (vef - ec))) / kbt)))
t_1 = exp(((vef - ((mu - eaccept) - ev)) / kbt))
if (ndchar <= (-3.7d0)) then
tmp = (nachar / (((eaccept / kbt) + ((vef / kbt) + (ev / kbt))) + 2.0d0)) - t_0
else if (ndchar <= 3.2d-193) then
tmp = (ndchar / ((vef / kbt) + 2.0d0)) - (nachar / ((-1.0d0) - t_1))
else if (ndchar <= 2.5d-178) then
tmp = ((kbt * nachar) / ((eaccept - (ev * ((-1.0d0) - (vef / ev)))) - mu)) - t_0
else if ((ndchar <= 6.4d-37) .or. (.not. (ndchar <= 2.85d+80)) .and. (ndchar <= 1.28d+154)) then
tmp = (nachar / (1.0d0 + t_1)) + (ndchar / (1.0d0 + (1.0d0 - (ec / kbt))))
else
tmp = (nachar / ((2.0d0 - (ev * (((-1.0d0) / kbt) - (vef / (kbt * ev))))) - (mu / kbt))) - t_0
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (-1.0 - Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)));
double t_1 = Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT));
double tmp;
if (NdChar <= -3.7) {
tmp = (NaChar / (((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT))) + 2.0)) - t_0;
} else if (NdChar <= 3.2e-193) {
tmp = (NdChar / ((Vef / KbT) + 2.0)) - (NaChar / (-1.0 - t_1));
} else if (NdChar <= 2.5e-178) {
tmp = ((KbT * NaChar) / ((EAccept - (Ev * (-1.0 - (Vef / Ev)))) - mu)) - t_0;
} else if ((NdChar <= 6.4e-37) || (!(NdChar <= 2.85e+80) && (NdChar <= 1.28e+154))) {
tmp = (NaChar / (1.0 + t_1)) + (NdChar / (1.0 + (1.0 - (Ec / KbT))));
} else {
tmp = (NaChar / ((2.0 - (Ev * ((-1.0 / KbT) - (Vef / (KbT * Ev))))) - (mu / KbT))) - t_0;
}
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 = math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)) tmp = 0 if NdChar <= -3.7: tmp = (NaChar / (((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT))) + 2.0)) - t_0 elif NdChar <= 3.2e-193: tmp = (NdChar / ((Vef / KbT) + 2.0)) - (NaChar / (-1.0 - t_1)) elif NdChar <= 2.5e-178: tmp = ((KbT * NaChar) / ((EAccept - (Ev * (-1.0 - (Vef / Ev)))) - mu)) - t_0 elif (NdChar <= 6.4e-37) or (not (NdChar <= 2.85e+80) and (NdChar <= 1.28e+154)): tmp = (NaChar / (1.0 + t_1)) + (NdChar / (1.0 + (1.0 - (Ec / KbT)))) else: tmp = (NaChar / ((2.0 - (Ev * ((-1.0 / KbT) - (Vef / (KbT * Ev))))) - (mu / KbT))) - t_0 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) t_1 = exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT)) tmp = 0.0 if (NdChar <= -3.7) tmp = Float64(Float64(NaChar / Float64(Float64(Float64(EAccept / KbT) + Float64(Float64(Vef / KbT) + Float64(Ev / KbT))) + 2.0)) - t_0); elseif (NdChar <= 3.2e-193) tmp = Float64(Float64(NdChar / Float64(Float64(Vef / KbT) + 2.0)) - Float64(NaChar / Float64(-1.0 - t_1))); elseif (NdChar <= 2.5e-178) tmp = Float64(Float64(Float64(KbT * NaChar) / Float64(Float64(EAccept - Float64(Ev * Float64(-1.0 - Float64(Vef / Ev)))) - mu)) - t_0); elseif ((NdChar <= 6.4e-37) || (!(NdChar <= 2.85e+80) && (NdChar <= 1.28e+154))) tmp = Float64(Float64(NaChar / Float64(1.0 + t_1)) + Float64(NdChar / Float64(1.0 + Float64(1.0 - Float64(Ec / KbT))))); else tmp = Float64(Float64(NaChar / Float64(Float64(2.0 - Float64(Ev * Float64(Float64(-1.0 / KbT) - Float64(Vef / Float64(KbT * Ev))))) - Float64(mu / KbT))) - t_0); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT))); t_1 = exp(((Vef - ((mu - EAccept) - Ev)) / KbT)); tmp = 0.0; if (NdChar <= -3.7) tmp = (NaChar / (((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT))) + 2.0)) - t_0; elseif (NdChar <= 3.2e-193) tmp = (NdChar / ((Vef / KbT) + 2.0)) - (NaChar / (-1.0 - t_1)); elseif (NdChar <= 2.5e-178) tmp = ((KbT * NaChar) / ((EAccept - (Ev * (-1.0 - (Vef / Ev)))) - mu)) - t_0; elseif ((NdChar <= 6.4e-37) || (~((NdChar <= 2.85e+80)) && (NdChar <= 1.28e+154))) tmp = (NaChar / (1.0 + t_1)) + (NdChar / (1.0 + (1.0 - (Ec / KbT)))); else tmp = (NaChar / ((2.0 - (Ev * ((-1.0 / KbT) - (Vef / (KbT * Ev))))) - (mu / KbT))) - t_0; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NdChar / N[(-1.0 - N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]}, If[LessEqual[NdChar, -3.7], N[(N[(NaChar / N[(N[(N[(EAccept / KbT), $MachinePrecision] + N[(N[(Vef / KbT), $MachinePrecision] + N[(Ev / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision] - t$95$0), $MachinePrecision], If[LessEqual[NdChar, 3.2e-193], N[(N[(NdChar / N[(N[(Vef / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision] - N[(NaChar / N[(-1.0 - t$95$1), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NdChar, 2.5e-178], N[(N[(N[(KbT * NaChar), $MachinePrecision] / N[(N[(EAccept - N[(Ev * N[(-1.0 - N[(Vef / Ev), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision]), $MachinePrecision] - t$95$0), $MachinePrecision], If[Or[LessEqual[NdChar, 6.4e-37], And[N[Not[LessEqual[NdChar, 2.85e+80]], $MachinePrecision], LessEqual[NdChar, 1.28e+154]]], N[(N[(NaChar / N[(1.0 + t$95$1), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(1.0 + N[(1.0 - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar / N[(N[(2.0 - N[(Ev * N[(N[(-1.0 / KbT), $MachinePrecision] - N[(Vef / N[(KbT * Ev), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - t$95$0), $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 := e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}\\
\mathbf{if}\;NdChar \leq -3.7:\\
\;\;\;\;\frac{NaChar}{\left(\frac{EAccept}{KbT} + \left(\frac{Vef}{KbT} + \frac{Ev}{KbT}\right)\right) + 2} - t\_0\\
\mathbf{elif}\;NdChar \leq 3.2 \cdot 10^{-193}:\\
\;\;\;\;\frac{NdChar}{\frac{Vef}{KbT} + 2} - \frac{NaChar}{-1 - t\_1}\\
\mathbf{elif}\;NdChar \leq 2.5 \cdot 10^{-178}:\\
\;\;\;\;\frac{KbT \cdot NaChar}{\left(EAccept - Ev \cdot \left(-1 - \frac{Vef}{Ev}\right)\right) - mu} - t\_0\\
\mathbf{elif}\;NdChar \leq 6.4 \cdot 10^{-37} \lor \neg \left(NdChar \leq 2.85 \cdot 10^{+80}\right) \land NdChar \leq 1.28 \cdot 10^{+154}:\\
\;\;\;\;\frac{NaChar}{1 + t\_1} + \frac{NdChar}{1 + \left(1 - \frac{Ec}{KbT}\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{\left(2 - Ev \cdot \left(\frac{-1}{KbT} - \frac{Vef}{KbT \cdot Ev}\right)\right) - \frac{mu}{KbT}} - t\_0\\
\end{array}
\end{array}
if NdChar < -3.7000000000000002Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 66.5%
+-commutative66.5%
Simplified66.5%
Taylor expanded in mu around 0 71.8%
if -3.7000000000000002 < NdChar < 3.20000000000000006e-193Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 83.5%
Taylor expanded in Vef around 0 68.8%
+-commutative68.8%
Simplified68.8%
if 3.20000000000000006e-193 < NdChar < 2.49999999999999988e-178Initial program 99.8%
Simplified99.8%
Taylor expanded in KbT around inf 64.2%
+-commutative64.2%
Simplified64.2%
Taylor expanded in Ev around inf 64.2%
Taylor expanded in KbT around 0 75.8%
if 2.49999999999999988e-178 < NdChar < 6.3999999999999998e-37 or 2.84999999999999985e80 < NdChar < 1.2800000000000001e154Initial program 100.0%
Simplified100.0%
Taylor expanded in Ec around inf 68.8%
associate-*r/68.8%
mul-1-neg68.8%
Simplified68.8%
Taylor expanded in Ec around 0 67.5%
neg-mul-167.5%
unsub-neg67.5%
Simplified67.5%
if 6.3999999999999998e-37 < NdChar < 2.84999999999999985e80 or 1.2800000000000001e154 < NdChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 64.9%
+-commutative64.9%
Simplified64.9%
Taylor expanded in Ev around inf 70.8%
Taylor expanded in EAccept around 0 73.0%
Final simplification70.4%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT)))
(t_1 (/ NdChar (- -1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT))))))
(if (<= EAccept -7.6e-206)
(+ (/ NaChar (+ 1.0 t_0)) (/ NdChar (+ 1.0 (- 1.0 (/ Ec KbT)))))
(if (<= EAccept 1.1e-39)
(-
(/
NaChar
(-
1.0
(-
(/ mu KbT)
(-
1.0
(- (* Vef (- (/ -1.0 KbT) (/ Ev (* Vef KbT)))) (/ EAccept KbT))))))
t_1)
(if (or (<= EAccept 2.7e+149) (not (<= EAccept 5e+245)))
(- (/ NdChar (+ (/ Vef KbT) 2.0)) (/ NaChar (- -1.0 t_0)))
(-
(/
NaChar
(+
1.0
(-
(- 1.0 (/ (- (* Ev (- -1.0 (/ Vef Ev))) EAccept) KbT))
(/ mu KbT))))
t_1))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = exp(((Vef - ((mu - EAccept) - Ev)) / KbT));
double t_1 = NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT)));
double tmp;
if (EAccept <= -7.6e-206) {
tmp = (NaChar / (1.0 + t_0)) + (NdChar / (1.0 + (1.0 - (Ec / KbT))));
} else if (EAccept <= 1.1e-39) {
tmp = (NaChar / (1.0 - ((mu / KbT) - (1.0 - ((Vef * ((-1.0 / KbT) - (Ev / (Vef * KbT)))) - (EAccept / KbT)))))) - t_1;
} else if ((EAccept <= 2.7e+149) || !(EAccept <= 5e+245)) {
tmp = (NdChar / ((Vef / KbT) + 2.0)) - (NaChar / (-1.0 - t_0));
} else {
tmp = (NaChar / (1.0 + ((1.0 - (((Ev * (-1.0 - (Vef / Ev))) - EAccept) / KbT)) - (mu / KbT)))) - t_1;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = exp(((vef - ((mu - eaccept) - ev)) / kbt))
t_1 = ndchar / ((-1.0d0) - exp(((edonor + (mu + (vef - ec))) / kbt)))
if (eaccept <= (-7.6d-206)) then
tmp = (nachar / (1.0d0 + t_0)) + (ndchar / (1.0d0 + (1.0d0 - (ec / kbt))))
else if (eaccept <= 1.1d-39) then
tmp = (nachar / (1.0d0 - ((mu / kbt) - (1.0d0 - ((vef * (((-1.0d0) / kbt) - (ev / (vef * kbt)))) - (eaccept / kbt)))))) - t_1
else if ((eaccept <= 2.7d+149) .or. (.not. (eaccept <= 5d+245))) then
tmp = (ndchar / ((vef / kbt) + 2.0d0)) - (nachar / ((-1.0d0) - t_0))
else
tmp = (nachar / (1.0d0 + ((1.0d0 - (((ev * ((-1.0d0) - (vef / ev))) - eaccept) / kbt)) - (mu / kbt)))) - t_1
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT));
double t_1 = NdChar / (-1.0 - Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)));
double tmp;
if (EAccept <= -7.6e-206) {
tmp = (NaChar / (1.0 + t_0)) + (NdChar / (1.0 + (1.0 - (Ec / KbT))));
} else if (EAccept <= 1.1e-39) {
tmp = (NaChar / (1.0 - ((mu / KbT) - (1.0 - ((Vef * ((-1.0 / KbT) - (Ev / (Vef * KbT)))) - (EAccept / KbT)))))) - t_1;
} else if ((EAccept <= 2.7e+149) || !(EAccept <= 5e+245)) {
tmp = (NdChar / ((Vef / KbT) + 2.0)) - (NaChar / (-1.0 - t_0));
} else {
tmp = (NaChar / (1.0 + ((1.0 - (((Ev * (-1.0 - (Vef / Ev))) - EAccept) / KbT)) - (mu / KbT)))) - t_1;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)) t_1 = NdChar / (-1.0 - math.exp(((EDonor + (mu + (Vef - Ec))) / KbT))) tmp = 0 if EAccept <= -7.6e-206: tmp = (NaChar / (1.0 + t_0)) + (NdChar / (1.0 + (1.0 - (Ec / KbT)))) elif EAccept <= 1.1e-39: tmp = (NaChar / (1.0 - ((mu / KbT) - (1.0 - ((Vef * ((-1.0 / KbT) - (Ev / (Vef * KbT)))) - (EAccept / KbT)))))) - t_1 elif (EAccept <= 2.7e+149) or not (EAccept <= 5e+245): tmp = (NdChar / ((Vef / KbT) + 2.0)) - (NaChar / (-1.0 - t_0)) else: tmp = (NaChar / (1.0 + ((1.0 - (((Ev * (-1.0 - (Vef / Ev))) - EAccept) / KbT)) - (mu / KbT)))) - t_1 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT)) t_1 = Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) tmp = 0.0 if (EAccept <= -7.6e-206) tmp = Float64(Float64(NaChar / Float64(1.0 + t_0)) + Float64(NdChar / Float64(1.0 + Float64(1.0 - Float64(Ec / KbT))))); elseif (EAccept <= 1.1e-39) tmp = Float64(Float64(NaChar / Float64(1.0 - Float64(Float64(mu / KbT) - Float64(1.0 - Float64(Float64(Vef * Float64(Float64(-1.0 / KbT) - Float64(Ev / Float64(Vef * KbT)))) - Float64(EAccept / KbT)))))) - t_1); elseif ((EAccept <= 2.7e+149) || !(EAccept <= 5e+245)) tmp = Float64(Float64(NdChar / Float64(Float64(Vef / KbT) + 2.0)) - Float64(NaChar / Float64(-1.0 - t_0))); else tmp = Float64(Float64(NaChar / Float64(1.0 + Float64(Float64(1.0 - Float64(Float64(Float64(Ev * Float64(-1.0 - Float64(Vef / Ev))) - EAccept) / KbT)) - Float64(mu / KbT)))) - t_1); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = exp(((Vef - ((mu - EAccept) - Ev)) / KbT)); t_1 = NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT))); tmp = 0.0; if (EAccept <= -7.6e-206) tmp = (NaChar / (1.0 + t_0)) + (NdChar / (1.0 + (1.0 - (Ec / KbT)))); elseif (EAccept <= 1.1e-39) tmp = (NaChar / (1.0 - ((mu / KbT) - (1.0 - ((Vef * ((-1.0 / KbT) - (Ev / (Vef * KbT)))) - (EAccept / KbT)))))) - t_1; elseif ((EAccept <= 2.7e+149) || ~((EAccept <= 5e+245))) tmp = (NdChar / ((Vef / KbT) + 2.0)) - (NaChar / (-1.0 - t_0)); else tmp = (NaChar / (1.0 + ((1.0 - (((Ev * (-1.0 - (Vef / Ev))) - EAccept) / KbT)) - (mu / KbT)))) - t_1; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[(NdChar / N[(-1.0 - N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[EAccept, -7.6e-206], N[(N[(NaChar / N[(1.0 + t$95$0), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(1.0 + N[(1.0 - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[EAccept, 1.1e-39], N[(N[(NaChar / N[(1.0 - N[(N[(mu / KbT), $MachinePrecision] - N[(1.0 - N[(N[(Vef * N[(N[(-1.0 / KbT), $MachinePrecision] - N[(Ev / N[(Vef * KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(EAccept / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - t$95$1), $MachinePrecision], If[Or[LessEqual[EAccept, 2.7e+149], N[Not[LessEqual[EAccept, 5e+245]], $MachinePrecision]], N[(N[(NdChar / N[(N[(Vef / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision] - N[(NaChar / N[(-1.0 - t$95$0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar / N[(1.0 + N[(N[(1.0 - N[(N[(N[(Ev * N[(-1.0 - N[(Vef / Ev), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - EAccept), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision] - N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - t$95$1), $MachinePrecision]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}\\
t_1 := \frac{NdChar}{-1 - e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}}\\
\mathbf{if}\;EAccept \leq -7.6 \cdot 10^{-206}:\\
\;\;\;\;\frac{NaChar}{1 + t\_0} + \frac{NdChar}{1 + \left(1 - \frac{Ec}{KbT}\right)}\\
\mathbf{elif}\;EAccept \leq 1.1 \cdot 10^{-39}:\\
\;\;\;\;\frac{NaChar}{1 - \left(\frac{mu}{KbT} - \left(1 - \left(Vef \cdot \left(\frac{-1}{KbT} - \frac{Ev}{Vef \cdot KbT}\right) - \frac{EAccept}{KbT}\right)\right)\right)} - t\_1\\
\mathbf{elif}\;EAccept \leq 2.7 \cdot 10^{+149} \lor \neg \left(EAccept \leq 5 \cdot 10^{+245}\right):\\
\;\;\;\;\frac{NdChar}{\frac{Vef}{KbT} + 2} - \frac{NaChar}{-1 - t\_0}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + \left(\left(1 - \frac{Ev \cdot \left(-1 - \frac{Vef}{Ev}\right) - EAccept}{KbT}\right) - \frac{mu}{KbT}\right)} - t\_1\\
\end{array}
\end{array}
if EAccept < -7.60000000000000005e-206Initial program 100.0%
Simplified100.0%
Taylor expanded in Ec around inf 75.5%
associate-*r/75.5%
mul-1-neg75.5%
Simplified75.5%
Taylor expanded in Ec around 0 55.6%
neg-mul-155.6%
unsub-neg55.6%
Simplified55.6%
if -7.60000000000000005e-206 < EAccept < 1.1e-39Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 62.0%
+-commutative62.0%
Simplified62.0%
Taylor expanded in Vef around inf 67.4%
if 1.1e-39 < EAccept < 2.7000000000000001e149 or 5.00000000000000034e245 < EAccept Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 75.8%
Taylor expanded in Vef around 0 60.7%
+-commutative60.7%
Simplified60.7%
if 2.7000000000000001e149 < EAccept < 5.00000000000000034e245Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 71.4%
+-commutative71.4%
Simplified71.4%
Taylor expanded in Ev around inf 65.5%
Taylor expanded in KbT around 0 77.1%
Final simplification62.1%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT))))
(if (<= EAccept -9e-206)
(+ (/ NaChar (+ 1.0 t_0)) (/ NdChar (+ 1.0 (- 1.0 (/ Ec KbT)))))
(if (or (<= EAccept 1.16e-38)
(and (not (<= EAccept 1e+149)) (<= EAccept 4.6e+245)))
(-
(/
NaChar
(+
1.0
(-
(- 1.0 (/ (- (* Ev (- -1.0 (/ Vef Ev))) EAccept) KbT))
(/ mu KbT))))
(/ NdChar (- -1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT)))))
(- (/ NdChar (+ (/ Vef KbT) 2.0)) (/ NaChar (- -1.0 t_0)))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = exp(((Vef - ((mu - EAccept) - Ev)) / KbT));
double tmp;
if (EAccept <= -9e-206) {
tmp = (NaChar / (1.0 + t_0)) + (NdChar / (1.0 + (1.0 - (Ec / KbT))));
} else if ((EAccept <= 1.16e-38) || (!(EAccept <= 1e+149) && (EAccept <= 4.6e+245))) {
tmp = (NaChar / (1.0 + ((1.0 - (((Ev * (-1.0 - (Vef / Ev))) - EAccept) / KbT)) - (mu / KbT)))) - (NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT))));
} else {
tmp = (NdChar / ((Vef / KbT) + 2.0)) - (NaChar / (-1.0 - t_0));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: tmp
t_0 = exp(((vef - ((mu - eaccept) - ev)) / kbt))
if (eaccept <= (-9d-206)) then
tmp = (nachar / (1.0d0 + t_0)) + (ndchar / (1.0d0 + (1.0d0 - (ec / kbt))))
else if ((eaccept <= 1.16d-38) .or. (.not. (eaccept <= 1d+149)) .and. (eaccept <= 4.6d+245)) then
tmp = (nachar / (1.0d0 + ((1.0d0 - (((ev * ((-1.0d0) - (vef / ev))) - eaccept) / kbt)) - (mu / kbt)))) - (ndchar / ((-1.0d0) - exp(((edonor + (mu + (vef - ec))) / kbt))))
else
tmp = (ndchar / ((vef / kbt) + 2.0d0)) - (nachar / ((-1.0d0) - t_0))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT));
double tmp;
if (EAccept <= -9e-206) {
tmp = (NaChar / (1.0 + t_0)) + (NdChar / (1.0 + (1.0 - (Ec / KbT))));
} else if ((EAccept <= 1.16e-38) || (!(EAccept <= 1e+149) && (EAccept <= 4.6e+245))) {
tmp = (NaChar / (1.0 + ((1.0 - (((Ev * (-1.0 - (Vef / Ev))) - EAccept) / KbT)) - (mu / KbT)))) - (NdChar / (-1.0 - Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT))));
} else {
tmp = (NdChar / ((Vef / KbT) + 2.0)) - (NaChar / (-1.0 - t_0));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)) tmp = 0 if EAccept <= -9e-206: tmp = (NaChar / (1.0 + t_0)) + (NdChar / (1.0 + (1.0 - (Ec / KbT)))) elif (EAccept <= 1.16e-38) or (not (EAccept <= 1e+149) and (EAccept <= 4.6e+245)): tmp = (NaChar / (1.0 + ((1.0 - (((Ev * (-1.0 - (Vef / Ev))) - EAccept) / KbT)) - (mu / KbT)))) - (NdChar / (-1.0 - math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) else: tmp = (NdChar / ((Vef / KbT) + 2.0)) - (NaChar / (-1.0 - t_0)) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT)) tmp = 0.0 if (EAccept <= -9e-206) tmp = Float64(Float64(NaChar / Float64(1.0 + t_0)) + Float64(NdChar / Float64(1.0 + Float64(1.0 - Float64(Ec / KbT))))); elseif ((EAccept <= 1.16e-38) || (!(EAccept <= 1e+149) && (EAccept <= 4.6e+245))) tmp = Float64(Float64(NaChar / Float64(1.0 + Float64(Float64(1.0 - Float64(Float64(Float64(Ev * Float64(-1.0 - Float64(Vef / Ev))) - EAccept) / KbT)) - Float64(mu / KbT)))) - Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT))))); else tmp = Float64(Float64(NdChar / Float64(Float64(Vef / KbT) + 2.0)) - Float64(NaChar / Float64(-1.0 - t_0))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = exp(((Vef - ((mu - EAccept) - Ev)) / KbT)); tmp = 0.0; if (EAccept <= -9e-206) tmp = (NaChar / (1.0 + t_0)) + (NdChar / (1.0 + (1.0 - (Ec / KbT)))); elseif ((EAccept <= 1.16e-38) || (~((EAccept <= 1e+149)) && (EAccept <= 4.6e+245))) tmp = (NaChar / (1.0 + ((1.0 - (((Ev * (-1.0 - (Vef / Ev))) - EAccept) / KbT)) - (mu / KbT)))) - (NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT)))); else tmp = (NdChar / ((Vef / KbT) + 2.0)) - (NaChar / (-1.0 - t_0)); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]}, If[LessEqual[EAccept, -9e-206], N[(N[(NaChar / N[(1.0 + t$95$0), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(1.0 + N[(1.0 - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[Or[LessEqual[EAccept, 1.16e-38], And[N[Not[LessEqual[EAccept, 1e+149]], $MachinePrecision], LessEqual[EAccept, 4.6e+245]]], N[(N[(NaChar / N[(1.0 + N[(N[(1.0 - N[(N[(N[(Ev * N[(-1.0 - N[(Vef / Ev), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - EAccept), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision] - N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(NdChar / N[(-1.0 - N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar / N[(N[(Vef / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision] - N[(NaChar / N[(-1.0 - t$95$0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}\\
\mathbf{if}\;EAccept \leq -9 \cdot 10^{-206}:\\
\;\;\;\;\frac{NaChar}{1 + t\_0} + \frac{NdChar}{1 + \left(1 - \frac{Ec}{KbT}\right)}\\
\mathbf{elif}\;EAccept \leq 1.16 \cdot 10^{-38} \lor \neg \left(EAccept \leq 10^{+149}\right) \land EAccept \leq 4.6 \cdot 10^{+245}:\\
\;\;\;\;\frac{NaChar}{1 + \left(\left(1 - \frac{Ev \cdot \left(-1 - \frac{Vef}{Ev}\right) - EAccept}{KbT}\right) - \frac{mu}{KbT}\right)} - \frac{NdChar}{-1 - e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{\frac{Vef}{KbT} + 2} - \frac{NaChar}{-1 - t\_0}\\
\end{array}
\end{array}
if EAccept < -8.9999999999999996e-206Initial program 100.0%
Simplified100.0%
Taylor expanded in Ec around inf 75.5%
associate-*r/75.5%
mul-1-neg75.5%
Simplified75.5%
Taylor expanded in Ec around 0 55.6%
neg-mul-155.6%
unsub-neg55.6%
Simplified55.6%
if -8.9999999999999996e-206 < EAccept < 1.15999999999999995e-38 or 1.00000000000000005e149 < EAccept < 4.5999999999999999e245Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 63.0%
+-commutative63.0%
Simplified63.0%
Taylor expanded in Ev around inf 62.3%
Taylor expanded in KbT around 0 68.6%
if 1.15999999999999995e-38 < EAccept < 1.00000000000000005e149 or 4.5999999999999999e245 < EAccept Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 75.3%
Taylor expanded in Vef around 0 59.8%
+-commutative59.8%
Simplified59.8%
Final simplification61.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
(-
(/ NaChar (+ (+ (/ EAccept KbT) (+ (/ Vef KbT) (/ Ev KbT))) 2.0))
t_0))
(t_2 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT)))
(t_3 (+ (/ NaChar (+ 1.0 t_2)) (/ NdChar (+ 1.0 (- 1.0 (/ Ec KbT)))))))
(if (<= NdChar -2.9e-8)
t_1
(if (<= NdChar 3.4e-193)
(- (/ NdChar (+ (/ Vef KbT) 2.0)) (/ NaChar (- -1.0 t_2)))
(if (<= NdChar 2.5e-178)
(-
(/ (* KbT NaChar) (- (- EAccept (* Ev (- -1.0 (/ Vef Ev)))) mu))
t_0)
(if (<= NdChar 1.3e-36)
t_3
(if (<= NdChar 1.35e+98)
t_1
(if (<= NdChar 3e+154) t_3 (- (* NaChar 0.5) t_0)))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT)));
double t_1 = (NaChar / (((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT))) + 2.0)) - t_0;
double t_2 = exp(((Vef - ((mu - EAccept) - Ev)) / KbT));
double t_3 = (NaChar / (1.0 + t_2)) + (NdChar / (1.0 + (1.0 - (Ec / KbT))));
double tmp;
if (NdChar <= -2.9e-8) {
tmp = t_1;
} else if (NdChar <= 3.4e-193) {
tmp = (NdChar / ((Vef / KbT) + 2.0)) - (NaChar / (-1.0 - t_2));
} else if (NdChar <= 2.5e-178) {
tmp = ((KbT * NaChar) / ((EAccept - (Ev * (-1.0 - (Vef / Ev)))) - mu)) - t_0;
} else if (NdChar <= 1.3e-36) {
tmp = t_3;
} else if (NdChar <= 1.35e+98) {
tmp = t_1;
} else if (NdChar <= 3e+154) {
tmp = t_3;
} else {
tmp = (NaChar * 0.5) - t_0;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: t_2
real(8) :: t_3
real(8) :: tmp
t_0 = ndchar / ((-1.0d0) - exp(((edonor + (mu + (vef - ec))) / kbt)))
t_1 = (nachar / (((eaccept / kbt) + ((vef / kbt) + (ev / kbt))) + 2.0d0)) - t_0
t_2 = exp(((vef - ((mu - eaccept) - ev)) / kbt))
t_3 = (nachar / (1.0d0 + t_2)) + (ndchar / (1.0d0 + (1.0d0 - (ec / kbt))))
if (ndchar <= (-2.9d-8)) then
tmp = t_1
else if (ndchar <= 3.4d-193) then
tmp = (ndchar / ((vef / kbt) + 2.0d0)) - (nachar / ((-1.0d0) - t_2))
else if (ndchar <= 2.5d-178) then
tmp = ((kbt * nachar) / ((eaccept - (ev * ((-1.0d0) - (vef / ev)))) - mu)) - t_0
else if (ndchar <= 1.3d-36) then
tmp = t_3
else if (ndchar <= 1.35d+98) then
tmp = t_1
else if (ndchar <= 3d+154) then
tmp = t_3
else
tmp = (nachar * 0.5d0) - t_0
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (-1.0 - Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)));
double t_1 = (NaChar / (((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT))) + 2.0)) - t_0;
double t_2 = Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT));
double t_3 = (NaChar / (1.0 + t_2)) + (NdChar / (1.0 + (1.0 - (Ec / KbT))));
double tmp;
if (NdChar <= -2.9e-8) {
tmp = t_1;
} else if (NdChar <= 3.4e-193) {
tmp = (NdChar / ((Vef / KbT) + 2.0)) - (NaChar / (-1.0 - t_2));
} else if (NdChar <= 2.5e-178) {
tmp = ((KbT * NaChar) / ((EAccept - (Ev * (-1.0 - (Vef / Ev)))) - mu)) - t_0;
} else if (NdChar <= 1.3e-36) {
tmp = t_3;
} else if (NdChar <= 1.35e+98) {
tmp = t_1;
} else if (NdChar <= 3e+154) {
tmp = t_3;
} else {
tmp = (NaChar * 0.5) - t_0;
}
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 / (((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT))) + 2.0)) - t_0 t_2 = math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)) t_3 = (NaChar / (1.0 + t_2)) + (NdChar / (1.0 + (1.0 - (Ec / KbT)))) tmp = 0 if NdChar <= -2.9e-8: tmp = t_1 elif NdChar <= 3.4e-193: tmp = (NdChar / ((Vef / KbT) + 2.0)) - (NaChar / (-1.0 - t_2)) elif NdChar <= 2.5e-178: tmp = ((KbT * NaChar) / ((EAccept - (Ev * (-1.0 - (Vef / Ev)))) - mu)) - t_0 elif NdChar <= 1.3e-36: tmp = t_3 elif NdChar <= 1.35e+98: tmp = t_1 elif NdChar <= 3e+154: tmp = t_3 else: tmp = (NaChar * 0.5) - t_0 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) t_1 = Float64(Float64(NaChar / Float64(Float64(Float64(EAccept / KbT) + Float64(Float64(Vef / KbT) + Float64(Ev / KbT))) + 2.0)) - t_0) t_2 = exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT)) t_3 = Float64(Float64(NaChar / Float64(1.0 + t_2)) + Float64(NdChar / Float64(1.0 + Float64(1.0 - Float64(Ec / KbT))))) tmp = 0.0 if (NdChar <= -2.9e-8) tmp = t_1; elseif (NdChar <= 3.4e-193) tmp = Float64(Float64(NdChar / Float64(Float64(Vef / KbT) + 2.0)) - Float64(NaChar / Float64(-1.0 - t_2))); elseif (NdChar <= 2.5e-178) tmp = Float64(Float64(Float64(KbT * NaChar) / Float64(Float64(EAccept - Float64(Ev * Float64(-1.0 - Float64(Vef / Ev)))) - mu)) - t_0); elseif (NdChar <= 1.3e-36) tmp = t_3; elseif (NdChar <= 1.35e+98) tmp = t_1; elseif (NdChar <= 3e+154) tmp = t_3; else tmp = Float64(Float64(NaChar * 0.5) - t_0); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT))); t_1 = (NaChar / (((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT))) + 2.0)) - t_0; t_2 = exp(((Vef - ((mu - EAccept) - Ev)) / KbT)); t_3 = (NaChar / (1.0 + t_2)) + (NdChar / (1.0 + (1.0 - (Ec / KbT)))); tmp = 0.0; if (NdChar <= -2.9e-8) tmp = t_1; elseif (NdChar <= 3.4e-193) tmp = (NdChar / ((Vef / KbT) + 2.0)) - (NaChar / (-1.0 - t_2)); elseif (NdChar <= 2.5e-178) tmp = ((KbT * NaChar) / ((EAccept - (Ev * (-1.0 - (Vef / Ev)))) - mu)) - t_0; elseif (NdChar <= 1.3e-36) tmp = t_3; elseif (NdChar <= 1.35e+98) tmp = t_1; elseif (NdChar <= 3e+154) tmp = t_3; else tmp = (NaChar * 0.5) - t_0; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NdChar / N[(-1.0 - N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NaChar / N[(N[(N[(EAccept / KbT), $MachinePrecision] + N[(N[(Vef / KbT), $MachinePrecision] + N[(Ev / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision] - t$95$0), $MachinePrecision]}, Block[{t$95$2 = N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$3 = N[(N[(NaChar / N[(1.0 + t$95$2), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(1.0 + N[(1.0 - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NdChar, -2.9e-8], t$95$1, If[LessEqual[NdChar, 3.4e-193], N[(N[(NdChar / N[(N[(Vef / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision] - N[(NaChar / N[(-1.0 - t$95$2), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NdChar, 2.5e-178], N[(N[(N[(KbT * NaChar), $MachinePrecision] / N[(N[(EAccept - N[(Ev * N[(-1.0 - N[(Vef / Ev), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision]), $MachinePrecision] - t$95$0), $MachinePrecision], If[LessEqual[NdChar, 1.3e-36], t$95$3, If[LessEqual[NdChar, 1.35e+98], t$95$1, If[LessEqual[NdChar, 3e+154], t$95$3, N[(N[(NaChar * 0.5), $MachinePrecision] - t$95$0), $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}{\left(\frac{EAccept}{KbT} + \left(\frac{Vef}{KbT} + \frac{Ev}{KbT}\right)\right) + 2} - t\_0\\
t_2 := e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}\\
t_3 := \frac{NaChar}{1 + t\_2} + \frac{NdChar}{1 + \left(1 - \frac{Ec}{KbT}\right)}\\
\mathbf{if}\;NdChar \leq -2.9 \cdot 10^{-8}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;NdChar \leq 3.4 \cdot 10^{-193}:\\
\;\;\;\;\frac{NdChar}{\frac{Vef}{KbT} + 2} - \frac{NaChar}{-1 - t\_2}\\
\mathbf{elif}\;NdChar \leq 2.5 \cdot 10^{-178}:\\
\;\;\;\;\frac{KbT \cdot NaChar}{\left(EAccept - Ev \cdot \left(-1 - \frac{Vef}{Ev}\right)\right) - mu} - t\_0\\
\mathbf{elif}\;NdChar \leq 1.3 \cdot 10^{-36}:\\
\;\;\;\;t\_3\\
\mathbf{elif}\;NdChar \leq 1.35 \cdot 10^{+98}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;NdChar \leq 3 \cdot 10^{+154}:\\
\;\;\;\;t\_3\\
\mathbf{else}:\\
\;\;\;\;NaChar \cdot 0.5 - t\_0\\
\end{array}
\end{array}
if NdChar < -2.9000000000000002e-8 or 1.3e-36 < NdChar < 1.35e98Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 66.8%
+-commutative66.8%
Simplified66.8%
Taylor expanded in mu around 0 70.9%
if -2.9000000000000002e-8 < NdChar < 3.4000000000000002e-193Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 83.5%
Taylor expanded in Vef around 0 68.8%
+-commutative68.8%
Simplified68.8%
if 3.4000000000000002e-193 < NdChar < 2.49999999999999988e-178Initial program 99.8%
Simplified99.8%
Taylor expanded in KbT around inf 64.2%
+-commutative64.2%
Simplified64.2%
Taylor expanded in Ev around inf 64.2%
Taylor expanded in KbT around 0 75.8%
if 2.49999999999999988e-178 < NdChar < 1.3e-36 or 1.35e98 < NdChar < 3.00000000000000026e154Initial program 100.0%
Simplified100.0%
Taylor expanded in Ec around inf 73.5%
associate-*r/73.5%
mul-1-neg73.5%
Simplified73.5%
Taylor expanded in Ec around 0 69.7%
neg-mul-169.7%
unsub-neg69.7%
Simplified69.7%
if 3.00000000000000026e154 < NdChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 58.8%
+-commutative58.8%
Simplified58.8%
Taylor expanded in Ev around inf 62.6%
Taylor expanded in KbT around inf 63.1%
Final simplification69.3%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT))))
(if (<= mu -6.2e+88)
(+ (/ NaChar (+ 1.0 t_0)) (/ NdChar (+ 1.0 (- 1.0 (/ Ec KbT)))))
(if (<= mu 1.36e+218)
(+
(/ NdChar (+ 1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT))))
(/
NaChar
(-
1.0
(*
mu
(+
(/ 1.0 KbT)
(/ (- -1.0 (+ (/ EAccept KbT) (+ (/ Vef KbT) (/ Ev KbT)))) mu))))))
(-
(/ NdChar (- 1.0 (- -1.0 (/ EDonor KbT))))
(/ NaChar (- -1.0 t_0)))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = exp(((Vef - ((mu - EAccept) - Ev)) / KbT));
double tmp;
if (mu <= -6.2e+88) {
tmp = (NaChar / (1.0 + t_0)) + (NdChar / (1.0 + (1.0 - (Ec / KbT))));
} else if (mu <= 1.36e+218) {
tmp = (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 - (mu * ((1.0 / KbT) + ((-1.0 - ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) / mu)))));
} else {
tmp = (NdChar / (1.0 - (-1.0 - (EDonor / KbT)))) - (NaChar / (-1.0 - t_0));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: tmp
t_0 = exp(((vef - ((mu - eaccept) - ev)) / kbt))
if (mu <= (-6.2d+88)) then
tmp = (nachar / (1.0d0 + t_0)) + (ndchar / (1.0d0 + (1.0d0 - (ec / kbt))))
else if (mu <= 1.36d+218) then
tmp = (ndchar / (1.0d0 + exp(((edonor + (mu + (vef - ec))) / kbt)))) + (nachar / (1.0d0 - (mu * ((1.0d0 / kbt) + (((-1.0d0) - ((eaccept / kbt) + ((vef / kbt) + (ev / kbt)))) / mu)))))
else
tmp = (ndchar / (1.0d0 - ((-1.0d0) - (edonor / kbt)))) - (nachar / ((-1.0d0) - t_0))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT));
double tmp;
if (mu <= -6.2e+88) {
tmp = (NaChar / (1.0 + t_0)) + (NdChar / (1.0 + (1.0 - (Ec / KbT))));
} else if (mu <= 1.36e+218) {
tmp = (NdChar / (1.0 + Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 - (mu * ((1.0 / KbT) + ((-1.0 - ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) / mu)))));
} else {
tmp = (NdChar / (1.0 - (-1.0 - (EDonor / KbT)))) - (NaChar / (-1.0 - t_0));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)) tmp = 0 if mu <= -6.2e+88: tmp = (NaChar / (1.0 + t_0)) + (NdChar / (1.0 + (1.0 - (Ec / KbT)))) elif mu <= 1.36e+218: tmp = (NdChar / (1.0 + math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 - (mu * ((1.0 / KbT) + ((-1.0 - ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) / mu))))) else: tmp = (NdChar / (1.0 - (-1.0 - (EDonor / KbT)))) - (NaChar / (-1.0 - t_0)) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT)) tmp = 0.0 if (mu <= -6.2e+88) tmp = Float64(Float64(NaChar / Float64(1.0 + t_0)) + Float64(NdChar / Float64(1.0 + Float64(1.0 - Float64(Ec / KbT))))); elseif (mu <= 1.36e+218) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) + Float64(NaChar / Float64(1.0 - Float64(mu * Float64(Float64(1.0 / KbT) + Float64(Float64(-1.0 - Float64(Float64(EAccept / KbT) + Float64(Float64(Vef / KbT) + Float64(Ev / KbT)))) / mu)))))); else tmp = Float64(Float64(NdChar / Float64(1.0 - Float64(-1.0 - Float64(EDonor / KbT)))) - Float64(NaChar / Float64(-1.0 - t_0))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = exp(((Vef - ((mu - EAccept) - Ev)) / KbT)); tmp = 0.0; if (mu <= -6.2e+88) tmp = (NaChar / (1.0 + t_0)) + (NdChar / (1.0 + (1.0 - (Ec / KbT)))); elseif (mu <= 1.36e+218) tmp = (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 - (mu * ((1.0 / KbT) + ((-1.0 - ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) / mu))))); else tmp = (NdChar / (1.0 - (-1.0 - (EDonor / KbT)))) - (NaChar / (-1.0 - t_0)); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]}, If[LessEqual[mu, -6.2e+88], N[(N[(NaChar / N[(1.0 + t$95$0), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(1.0 + N[(1.0 - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[mu, 1.36e+218], N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 - N[(mu * N[(N[(1.0 / KbT), $MachinePrecision] + N[(N[(-1.0 - N[(N[(EAccept / KbT), $MachinePrecision] + N[(N[(Vef / KbT), $MachinePrecision] + N[(Ev / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar / N[(1.0 - N[(-1.0 - N[(EDonor / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(NaChar / N[(-1.0 - t$95$0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}\\
\mathbf{if}\;mu \leq -6.2 \cdot 10^{+88}:\\
\;\;\;\;\frac{NaChar}{1 + t\_0} + \frac{NdChar}{1 + \left(1 - \frac{Ec}{KbT}\right)}\\
\mathbf{elif}\;mu \leq 1.36 \cdot 10^{+218}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}} + \frac{NaChar}{1 - mu \cdot \left(\frac{1}{KbT} + \frac{-1 - \left(\frac{EAccept}{KbT} + \left(\frac{Vef}{KbT} + \frac{Ev}{KbT}\right)\right)}{mu}\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{1 - \left(-1 - \frac{EDonor}{KbT}\right)} - \frac{NaChar}{-1 - t\_0}\\
\end{array}
\end{array}
if mu < -6.2000000000000003e88Initial program 99.9%
Simplified99.9%
Taylor expanded in Ec around inf 70.7%
associate-*r/70.7%
mul-1-neg70.7%
Simplified70.7%
Taylor expanded in Ec around 0 59.6%
neg-mul-159.6%
unsub-neg59.6%
Simplified59.6%
if -6.2000000000000003e88 < mu < 1.36e218Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 62.3%
+-commutative62.3%
Simplified62.3%
Taylor expanded in mu around -inf 68.8%
associate-*r*68.8%
mul-1-neg68.8%
+-commutative68.8%
mul-1-neg68.8%
unsub-neg68.8%
Simplified68.8%
if 1.36e218 < mu Initial program 100.0%
Simplified100.0%
Taylor expanded in EDonor around inf 57.2%
Taylor expanded in EDonor around 0 58.4%
Final simplification66.0%
(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 (+ (+ (/ EAccept KbT) (+ (/ Vef KbT) (/ Ev KbT))) 2.0))
t_0))
(t_2 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT))))
(if (<= NdChar -2.4e-6)
t_1
(if (<= NdChar 2.5e-36)
(- (/ NdChar (+ (/ Vef KbT) 2.0)) (/ NaChar (- -1.0 t_2)))
(if (<= NdChar 2.6e+98)
t_1
(if (<= NdChar 8.8e+154)
(+ (/ NaChar (+ 1.0 t_2)) (/ NdChar (+ 1.0 (- 1.0 (/ Ec KbT)))))
(- (* NaChar 0.5) t_0)))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT)));
double t_1 = (NaChar / (((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT))) + 2.0)) - t_0;
double t_2 = exp(((Vef - ((mu - EAccept) - Ev)) / KbT));
double tmp;
if (NdChar <= -2.4e-6) {
tmp = t_1;
} else if (NdChar <= 2.5e-36) {
tmp = (NdChar / ((Vef / KbT) + 2.0)) - (NaChar / (-1.0 - t_2));
} else if (NdChar <= 2.6e+98) {
tmp = t_1;
} else if (NdChar <= 8.8e+154) {
tmp = (NaChar / (1.0 + t_2)) + (NdChar / (1.0 + (1.0 - (Ec / KbT))));
} else {
tmp = (NaChar * 0.5) - t_0;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: t_2
real(8) :: tmp
t_0 = ndchar / ((-1.0d0) - exp(((edonor + (mu + (vef - ec))) / kbt)))
t_1 = (nachar / (((eaccept / kbt) + ((vef / kbt) + (ev / kbt))) + 2.0d0)) - t_0
t_2 = exp(((vef - ((mu - eaccept) - ev)) / kbt))
if (ndchar <= (-2.4d-6)) then
tmp = t_1
else if (ndchar <= 2.5d-36) then
tmp = (ndchar / ((vef / kbt) + 2.0d0)) - (nachar / ((-1.0d0) - t_2))
else if (ndchar <= 2.6d+98) then
tmp = t_1
else if (ndchar <= 8.8d+154) then
tmp = (nachar / (1.0d0 + t_2)) + (ndchar / (1.0d0 + (1.0d0 - (ec / kbt))))
else
tmp = (nachar * 0.5d0) - t_0
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (-1.0 - Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)));
double t_1 = (NaChar / (((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT))) + 2.0)) - t_0;
double t_2 = Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT));
double tmp;
if (NdChar <= -2.4e-6) {
tmp = t_1;
} else if (NdChar <= 2.5e-36) {
tmp = (NdChar / ((Vef / KbT) + 2.0)) - (NaChar / (-1.0 - t_2));
} else if (NdChar <= 2.6e+98) {
tmp = t_1;
} else if (NdChar <= 8.8e+154) {
tmp = (NaChar / (1.0 + t_2)) + (NdChar / (1.0 + (1.0 - (Ec / KbT))));
} else {
tmp = (NaChar * 0.5) - t_0;
}
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 / (((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT))) + 2.0)) - t_0 t_2 = math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)) tmp = 0 if NdChar <= -2.4e-6: tmp = t_1 elif NdChar <= 2.5e-36: tmp = (NdChar / ((Vef / KbT) + 2.0)) - (NaChar / (-1.0 - t_2)) elif NdChar <= 2.6e+98: tmp = t_1 elif NdChar <= 8.8e+154: tmp = (NaChar / (1.0 + t_2)) + (NdChar / (1.0 + (1.0 - (Ec / KbT)))) else: tmp = (NaChar * 0.5) - t_0 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) t_1 = Float64(Float64(NaChar / Float64(Float64(Float64(EAccept / KbT) + Float64(Float64(Vef / KbT) + Float64(Ev / KbT))) + 2.0)) - t_0) t_2 = exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT)) tmp = 0.0 if (NdChar <= -2.4e-6) tmp = t_1; elseif (NdChar <= 2.5e-36) tmp = Float64(Float64(NdChar / Float64(Float64(Vef / KbT) + 2.0)) - Float64(NaChar / Float64(-1.0 - t_2))); elseif (NdChar <= 2.6e+98) tmp = t_1; elseif (NdChar <= 8.8e+154) tmp = Float64(Float64(NaChar / Float64(1.0 + t_2)) + Float64(NdChar / Float64(1.0 + Float64(1.0 - Float64(Ec / KbT))))); else tmp = Float64(Float64(NaChar * 0.5) - t_0); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT))); t_1 = (NaChar / (((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT))) + 2.0)) - t_0; t_2 = exp(((Vef - ((mu - EAccept) - Ev)) / KbT)); tmp = 0.0; if (NdChar <= -2.4e-6) tmp = t_1; elseif (NdChar <= 2.5e-36) tmp = (NdChar / ((Vef / KbT) + 2.0)) - (NaChar / (-1.0 - t_2)); elseif (NdChar <= 2.6e+98) tmp = t_1; elseif (NdChar <= 8.8e+154) tmp = (NaChar / (1.0 + t_2)) + (NdChar / (1.0 + (1.0 - (Ec / KbT)))); else tmp = (NaChar * 0.5) - t_0; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NdChar / N[(-1.0 - N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NaChar / N[(N[(N[(EAccept / KbT), $MachinePrecision] + N[(N[(Vef / KbT), $MachinePrecision] + N[(Ev / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision] - t$95$0), $MachinePrecision]}, Block[{t$95$2 = N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]}, If[LessEqual[NdChar, -2.4e-6], t$95$1, If[LessEqual[NdChar, 2.5e-36], N[(N[(NdChar / N[(N[(Vef / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision] - N[(NaChar / N[(-1.0 - t$95$2), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NdChar, 2.6e+98], t$95$1, If[LessEqual[NdChar, 8.8e+154], N[(N[(NaChar / N[(1.0 + t$95$2), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(1.0 + N[(1.0 - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar * 0.5), $MachinePrecision] - t$95$0), $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}{\left(\frac{EAccept}{KbT} + \left(\frac{Vef}{KbT} + \frac{Ev}{KbT}\right)\right) + 2} - t\_0\\
t_2 := e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}\\
\mathbf{if}\;NdChar \leq -2.4 \cdot 10^{-6}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;NdChar \leq 2.5 \cdot 10^{-36}:\\
\;\;\;\;\frac{NdChar}{\frac{Vef}{KbT} + 2} - \frac{NaChar}{-1 - t\_2}\\
\mathbf{elif}\;NdChar \leq 2.6 \cdot 10^{+98}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;NdChar \leq 8.8 \cdot 10^{+154}:\\
\;\;\;\;\frac{NaChar}{1 + t\_2} + \frac{NdChar}{1 + \left(1 - \frac{Ec}{KbT}\right)}\\
\mathbf{else}:\\
\;\;\;\;NaChar \cdot 0.5 - t\_0\\
\end{array}
\end{array}
if NdChar < -2.3999999999999999e-6 or 2.50000000000000002e-36 < NdChar < 2.6e98Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 66.8%
+-commutative66.8%
Simplified66.8%
Taylor expanded in mu around 0 70.9%
if -2.3999999999999999e-6 < NdChar < 2.50000000000000002e-36Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 76.0%
Taylor expanded in Vef around 0 64.0%
+-commutative64.0%
Simplified64.0%
if 2.6e98 < NdChar < 8.8000000000000004e154Initial program 100.0%
Simplified100.0%
Taylor expanded in Ec around inf 68.3%
associate-*r/68.3%
mul-1-neg68.3%
Simplified68.3%
Taylor expanded in Ec around 0 76.5%
neg-mul-176.5%
unsub-neg76.5%
Simplified76.5%
if 8.8000000000000004e154 < NdChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 58.8%
+-commutative58.8%
Simplified58.8%
Taylor expanded in Ev around inf 62.6%
Taylor expanded in KbT around inf 63.1%
Final simplification66.9%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0
(-
(/ NdChar (+ (/ Vef KbT) 2.0))
(/ NaChar (- -1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT))))))
(t_1 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT)))
(t_2 (- (* NaChar 0.5) (/ NdChar (- -1.0 t_1)))))
(if (<= NdChar -1.16e-16)
t_2
(if (<= NdChar 1.2e-36)
t_0
(if (<= NdChar 40000000000000.0)
(+ (/ NdChar (+ 1.0 t_1)) (+ (- 1.0 (* KbT (/ NaChar mu))) -1.0))
(if (<= NdChar 2.7e+40) 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 / ((Vef / KbT) + 2.0)) - (NaChar / (-1.0 - exp(((Vef - ((mu - EAccept) - Ev)) / KbT))));
double t_1 = exp(((EDonor + (mu + (Vef - Ec))) / KbT));
double t_2 = (NaChar * 0.5) - (NdChar / (-1.0 - t_1));
double tmp;
if (NdChar <= -1.16e-16) {
tmp = t_2;
} else if (NdChar <= 1.2e-36) {
tmp = t_0;
} else if (NdChar <= 40000000000000.0) {
tmp = (NdChar / (1.0 + t_1)) + ((1.0 - (KbT * (NaChar / mu))) + -1.0);
} else if (NdChar <= 2.7e+40) {
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 / ((vef / kbt) + 2.0d0)) - (nachar / ((-1.0d0) - exp(((vef - ((mu - eaccept) - ev)) / kbt))))
t_1 = exp(((edonor + (mu + (vef - ec))) / kbt))
t_2 = (nachar * 0.5d0) - (ndchar / ((-1.0d0) - t_1))
if (ndchar <= (-1.16d-16)) then
tmp = t_2
else if (ndchar <= 1.2d-36) then
tmp = t_0
else if (ndchar <= 40000000000000.0d0) then
tmp = (ndchar / (1.0d0 + t_1)) + ((1.0d0 - (kbt * (nachar / mu))) + (-1.0d0))
else if (ndchar <= 2.7d+40) 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 / ((Vef / KbT) + 2.0)) - (NaChar / (-1.0 - Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT))));
double t_1 = Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT));
double t_2 = (NaChar * 0.5) - (NdChar / (-1.0 - t_1));
double tmp;
if (NdChar <= -1.16e-16) {
tmp = t_2;
} else if (NdChar <= 1.2e-36) {
tmp = t_0;
} else if (NdChar <= 40000000000000.0) {
tmp = (NdChar / (1.0 + t_1)) + ((1.0 - (KbT * (NaChar / mu))) + -1.0);
} else if (NdChar <= 2.7e+40) {
tmp = t_0;
} else {
tmp = t_2;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = (NdChar / ((Vef / KbT) + 2.0)) - (NaChar / (-1.0 - math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) t_1 = math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)) t_2 = (NaChar * 0.5) - (NdChar / (-1.0 - t_1)) tmp = 0 if NdChar <= -1.16e-16: tmp = t_2 elif NdChar <= 1.2e-36: tmp = t_0 elif NdChar <= 40000000000000.0: tmp = (NdChar / (1.0 + t_1)) + ((1.0 - (KbT * (NaChar / mu))) + -1.0) elif NdChar <= 2.7e+40: 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(Float64(Vef / KbT) + 2.0)) - Float64(NaChar / Float64(-1.0 - exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT))))) t_1 = exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)) t_2 = Float64(Float64(NaChar * 0.5) - Float64(NdChar / Float64(-1.0 - t_1))) tmp = 0.0 if (NdChar <= -1.16e-16) tmp = t_2; elseif (NdChar <= 1.2e-36) tmp = t_0; elseif (NdChar <= 40000000000000.0) tmp = Float64(Float64(NdChar / Float64(1.0 + t_1)) + Float64(Float64(1.0 - Float64(KbT * Float64(NaChar / mu))) + -1.0)); elseif (NdChar <= 2.7e+40) 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 / ((Vef / KbT) + 2.0)) - (NaChar / (-1.0 - exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))); t_1 = exp(((EDonor + (mu + (Vef - Ec))) / KbT)); t_2 = (NaChar * 0.5) - (NdChar / (-1.0 - t_1)); tmp = 0.0; if (NdChar <= -1.16e-16) tmp = t_2; elseif (NdChar <= 1.2e-36) tmp = t_0; elseif (NdChar <= 40000000000000.0) tmp = (NdChar / (1.0 + t_1)) + ((1.0 - (KbT * (NaChar / mu))) + -1.0); elseif (NdChar <= 2.7e+40) 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[(N[(Vef / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision] - N[(NaChar / N[(-1.0 - N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$2 = N[(N[(NaChar * 0.5), $MachinePrecision] - N[(NdChar / N[(-1.0 - t$95$1), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NdChar, -1.16e-16], t$95$2, If[LessEqual[NdChar, 1.2e-36], t$95$0, If[LessEqual[NdChar, 40000000000000.0], N[(N[(NdChar / N[(1.0 + t$95$1), $MachinePrecision]), $MachinePrecision] + N[(N[(1.0 - N[(KbT * N[(NaChar / mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + -1.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[NdChar, 2.7e+40], t$95$0, t$95$2]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{\frac{Vef}{KbT} + 2} - \frac{NaChar}{-1 - e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}}\\
t_1 := e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}\\
t_2 := NaChar \cdot 0.5 - \frac{NdChar}{-1 - t\_1}\\
\mathbf{if}\;NdChar \leq -1.16 \cdot 10^{-16}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;NdChar \leq 1.2 \cdot 10^{-36}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;NdChar \leq 40000000000000:\\
\;\;\;\;\frac{NdChar}{1 + t\_1} + \left(\left(1 - KbT \cdot \frac{NaChar}{mu}\right) + -1\right)\\
\mathbf{elif}\;NdChar \leq 2.7 \cdot 10^{+40}:\\
\;\;\;\;t\_0\\
\mathbf{else}:\\
\;\;\;\;t\_2\\
\end{array}
\end{array}
if NdChar < -1.1600000000000001e-16 or 2.70000000000000009e40 < NdChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 62.7%
+-commutative62.7%
Simplified62.7%
Taylor expanded in Ev around inf 60.4%
Taylor expanded in KbT around inf 61.3%
if -1.1600000000000001e-16 < NdChar < 1.2e-36 or 4e13 < NdChar < 2.70000000000000009e40Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 76.4%
Taylor expanded in Vef around 0 64.5%
+-commutative64.5%
Simplified64.5%
if 1.2e-36 < NdChar < 4e13Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 64.4%
+-commutative64.4%
Simplified64.4%
Taylor expanded in mu around inf 47.1%
associate-*r/47.1%
mul-1-neg47.1%
distribute-rgt-neg-in47.1%
Simplified47.1%
expm1-log1p-u46.7%
expm1-undefine72.7%
associate-/l*72.7%
Applied egg-rr72.7%
sub-neg72.7%
log1p-undefine72.7%
rem-exp-log73.0%
associate-*r/73.1%
distribute-rgt-neg-out73.1%
distribute-frac-neg73.1%
unsub-neg73.1%
associate-/l*73.0%
metadata-eval73.0%
Simplified73.0%
Final simplification63.4%
(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 0.5) t_0))
(t_2
(-
(/ NdChar (+ (/ Vef KbT) 2.0))
(/ NaChar (- -1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT)))))))
(if (<= NdChar -1.1e-15)
t_1
(if (<= NdChar 5.3e-36)
t_2
(if (<= NdChar 62000.0)
(- (/ (* KbT NaChar) EAccept) t_0)
(if (<= NdChar 7.5e+41) t_2 t_1))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT)));
double t_1 = (NaChar * 0.5) - t_0;
double t_2 = (NdChar / ((Vef / KbT) + 2.0)) - (NaChar / (-1.0 - exp(((Vef - ((mu - EAccept) - Ev)) / KbT))));
double tmp;
if (NdChar <= -1.1e-15) {
tmp = t_1;
} else if (NdChar <= 5.3e-36) {
tmp = t_2;
} else if (NdChar <= 62000.0) {
tmp = ((KbT * NaChar) / EAccept) - t_0;
} else if (NdChar <= 7.5e+41) {
tmp = t_2;
} else {
tmp = t_1;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: t_2
real(8) :: tmp
t_0 = ndchar / ((-1.0d0) - exp(((edonor + (mu + (vef - ec))) / kbt)))
t_1 = (nachar * 0.5d0) - t_0
t_2 = (ndchar / ((vef / kbt) + 2.0d0)) - (nachar / ((-1.0d0) - exp(((vef - ((mu - eaccept) - ev)) / kbt))))
if (ndchar <= (-1.1d-15)) then
tmp = t_1
else if (ndchar <= 5.3d-36) then
tmp = t_2
else if (ndchar <= 62000.0d0) then
tmp = ((kbt * nachar) / eaccept) - t_0
else if (ndchar <= 7.5d+41) then
tmp = t_2
else
tmp = t_1
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (-1.0 - Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)));
double t_1 = (NaChar * 0.5) - t_0;
double t_2 = (NdChar / ((Vef / KbT) + 2.0)) - (NaChar / (-1.0 - Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT))));
double tmp;
if (NdChar <= -1.1e-15) {
tmp = t_1;
} else if (NdChar <= 5.3e-36) {
tmp = t_2;
} else if (NdChar <= 62000.0) {
tmp = ((KbT * NaChar) / EAccept) - t_0;
} else if (NdChar <= 7.5e+41) {
tmp = t_2;
} else {
tmp = t_1;
}
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 * 0.5) - t_0 t_2 = (NdChar / ((Vef / KbT) + 2.0)) - (NaChar / (-1.0 - math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) tmp = 0 if NdChar <= -1.1e-15: tmp = t_1 elif NdChar <= 5.3e-36: tmp = t_2 elif NdChar <= 62000.0: tmp = ((KbT * NaChar) / EAccept) - t_0 elif NdChar <= 7.5e+41: tmp = t_2 else: tmp = t_1 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(Float64(NaChar * 0.5) - t_0) t_2 = Float64(Float64(NdChar / Float64(Float64(Vef / KbT) + 2.0)) - Float64(NaChar / Float64(-1.0 - exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT))))) tmp = 0.0 if (NdChar <= -1.1e-15) tmp = t_1; elseif (NdChar <= 5.3e-36) tmp = t_2; elseif (NdChar <= 62000.0) tmp = Float64(Float64(Float64(KbT * NaChar) / EAccept) - t_0); elseif (NdChar <= 7.5e+41) tmp = t_2; else tmp = t_1; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT))); t_1 = (NaChar * 0.5) - t_0; t_2 = (NdChar / ((Vef / KbT) + 2.0)) - (NaChar / (-1.0 - exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))); tmp = 0.0; if (NdChar <= -1.1e-15) tmp = t_1; elseif (NdChar <= 5.3e-36) tmp = t_2; elseif (NdChar <= 62000.0) tmp = ((KbT * NaChar) / EAccept) - t_0; elseif (NdChar <= 7.5e+41) tmp = t_2; else tmp = t_1; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(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[(N[(NaChar * 0.5), $MachinePrecision] - t$95$0), $MachinePrecision]}, Block[{t$95$2 = N[(N[(NdChar / N[(N[(Vef / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision] - N[(NaChar / N[(-1.0 - N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NdChar, -1.1e-15], t$95$1, If[LessEqual[NdChar, 5.3e-36], t$95$2, If[LessEqual[NdChar, 62000.0], N[(N[(N[(KbT * NaChar), $MachinePrecision] / EAccept), $MachinePrecision] - t$95$0), $MachinePrecision], If[LessEqual[NdChar, 7.5e+41], t$95$2, t$95$1]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{-1 - e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}}\\
t_1 := NaChar \cdot 0.5 - t\_0\\
t_2 := \frac{NdChar}{\frac{Vef}{KbT} + 2} - \frac{NaChar}{-1 - e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}}\\
\mathbf{if}\;NdChar \leq -1.1 \cdot 10^{-15}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;NdChar \leq 5.3 \cdot 10^{-36}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;NdChar \leq 62000:\\
\;\;\;\;\frac{KbT \cdot NaChar}{EAccept} - t\_0\\
\mathbf{elif}\;NdChar \leq 7.5 \cdot 10^{+41}:\\
\;\;\;\;t\_2\\
\mathbf{else}:\\
\;\;\;\;t\_1\\
\end{array}
\end{array}
if NdChar < -1.09999999999999993e-15 or 7.50000000000000072e41 < NdChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 62.7%
+-commutative62.7%
Simplified62.7%
Taylor expanded in Ev around inf 60.4%
Taylor expanded in KbT around inf 61.3%
if -1.09999999999999993e-15 < NdChar < 5.2999999999999998e-36 or 62000 < NdChar < 7.50000000000000072e41Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 76.4%
Taylor expanded in Vef around 0 64.5%
+-commutative64.5%
Simplified64.5%
if 5.2999999999999998e-36 < NdChar < 62000Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 64.4%
+-commutative64.4%
Simplified64.4%
Taylor expanded in EAccept around inf 47.0%
Final simplification62.3%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0
(-
(* NdChar 0.5)
(/ NaChar (- -1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT)))))))
(if (<= NaChar -2.9e-258)
t_0
(if (<= NaChar 2.3e-156)
(- (* KbT (/ NaChar Vef)) (/ NdChar (- -1.0 (exp (/ Vef KbT)))))
(if (<= NaChar 1.48e+19)
(+ (/ NdChar (+ 1.0 (exp (/ mu KbT)))) (/ NaChar 2.0))
t_0)))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NdChar * 0.5) - (NaChar / (-1.0 - exp(((Vef - ((mu - EAccept) - Ev)) / KbT))));
double tmp;
if (NaChar <= -2.9e-258) {
tmp = t_0;
} else if (NaChar <= 2.3e-156) {
tmp = (KbT * (NaChar / Vef)) - (NdChar / (-1.0 - exp((Vef / KbT))));
} else if (NaChar <= 1.48e+19) {
tmp = (NdChar / (1.0 + exp((mu / KbT)))) + (NaChar / 2.0);
} 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 * 0.5d0) - (nachar / ((-1.0d0) - exp(((vef - ((mu - eaccept) - ev)) / kbt))))
if (nachar <= (-2.9d-258)) then
tmp = t_0
else if (nachar <= 2.3d-156) then
tmp = (kbt * (nachar / vef)) - (ndchar / ((-1.0d0) - exp((vef / kbt))))
else if (nachar <= 1.48d+19) then
tmp = (ndchar / (1.0d0 + exp((mu / kbt)))) + (nachar / 2.0d0)
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 * 0.5) - (NaChar / (-1.0 - Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT))));
double tmp;
if (NaChar <= -2.9e-258) {
tmp = t_0;
} else if (NaChar <= 2.3e-156) {
tmp = (KbT * (NaChar / Vef)) - (NdChar / (-1.0 - Math.exp((Vef / KbT))));
} else if (NaChar <= 1.48e+19) {
tmp = (NdChar / (1.0 + Math.exp((mu / KbT)))) + (NaChar / 2.0);
} else {
tmp = t_0;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = (NdChar * 0.5) - (NaChar / (-1.0 - math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) tmp = 0 if NaChar <= -2.9e-258: tmp = t_0 elif NaChar <= 2.3e-156: tmp = (KbT * (NaChar / Vef)) - (NdChar / (-1.0 - math.exp((Vef / KbT)))) elif NaChar <= 1.48e+19: tmp = (NdChar / (1.0 + math.exp((mu / KbT)))) + (NaChar / 2.0) else: tmp = t_0 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(NdChar * 0.5) - Float64(NaChar / Float64(-1.0 - exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT))))) tmp = 0.0 if (NaChar <= -2.9e-258) tmp = t_0; elseif (NaChar <= 2.3e-156) tmp = Float64(Float64(KbT * Float64(NaChar / Vef)) - Float64(NdChar / Float64(-1.0 - exp(Float64(Vef / KbT))))); elseif (NaChar <= 1.48e+19) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(mu / KbT)))) + Float64(NaChar / 2.0)); else tmp = t_0; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = (NdChar * 0.5) - (NaChar / (-1.0 - exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))); tmp = 0.0; if (NaChar <= -2.9e-258) tmp = t_0; elseif (NaChar <= 2.3e-156) tmp = (KbT * (NaChar / Vef)) - (NdChar / (-1.0 - exp((Vef / KbT)))); elseif (NaChar <= 1.48e+19) tmp = (NdChar / (1.0 + exp((mu / KbT)))) + (NaChar / 2.0); 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 * 0.5), $MachinePrecision] - N[(NaChar / N[(-1.0 - N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -2.9e-258], t$95$0, If[LessEqual[NaChar, 2.3e-156], N[(N[(KbT * N[(NaChar / Vef), $MachinePrecision]), $MachinePrecision] - N[(NdChar / N[(-1.0 - N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 1.48e+19], N[(N[(NdChar / N[(1.0 + N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / 2.0), $MachinePrecision]), $MachinePrecision], t$95$0]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := NdChar \cdot 0.5 - \frac{NaChar}{-1 - e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}}\\
\mathbf{if}\;NaChar \leq -2.9 \cdot 10^{-258}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;NaChar \leq 2.3 \cdot 10^{-156}:\\
\;\;\;\;KbT \cdot \frac{NaChar}{Vef} - \frac{NdChar}{-1 - e^{\frac{Vef}{KbT}}}\\
\mathbf{elif}\;NaChar \leq 1.48 \cdot 10^{+19}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{mu}{KbT}}} + \frac{NaChar}{2}\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if NaChar < -2.9e-258 or 1.48e19 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 49.4%
if -2.9e-258 < NaChar < 2.3e-156Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 69.8%
+-commutative69.8%
Simplified69.8%
Taylor expanded in Vef around inf 69.9%
associate-/l*67.3%
Simplified67.3%
Taylor expanded in Vef around inf 51.9%
if 2.3e-156 < NaChar < 1.48e19Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 70.0%
Taylor expanded in KbT around inf 57.4%
Final simplification50.9%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (or (<= NaChar -0.155) (not (<= NaChar 1.26e+82)))
(-
(* NdChar 0.5)
(/ NaChar (- -1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT)))))
(-
(* NaChar 0.5)
(/ NdChar (- -1.0 (exp (/ (+ EDonor (+ mu (- Vef 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 ((NaChar <= -0.155) || !(NaChar <= 1.26e+82)) {
tmp = (NdChar * 0.5) - (NaChar / (-1.0 - exp(((Vef - ((mu - EAccept) - Ev)) / KbT))));
} else {
tmp = (NaChar * 0.5) - (NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - 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 ((nachar <= (-0.155d0)) .or. (.not. (nachar <= 1.26d+82))) then
tmp = (ndchar * 0.5d0) - (nachar / ((-1.0d0) - exp(((vef - ((mu - eaccept) - ev)) / kbt))))
else
tmp = (nachar * 0.5d0) - (ndchar / ((-1.0d0) - exp(((edonor + (mu + (vef - 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 ((NaChar <= -0.155) || !(NaChar <= 1.26e+82)) {
tmp = (NdChar * 0.5) - (NaChar / (-1.0 - Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT))));
} else {
tmp = (NaChar * 0.5) - (NdChar / (-1.0 - Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if (NaChar <= -0.155) or not (NaChar <= 1.26e+82): tmp = (NdChar * 0.5) - (NaChar / (-1.0 - math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) else: tmp = (NaChar * 0.5) - (NdChar / (-1.0 - math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if ((NaChar <= -0.155) || !(NaChar <= 1.26e+82)) tmp = Float64(Float64(NdChar * 0.5) - Float64(NaChar / Float64(-1.0 - exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT))))); else tmp = Float64(Float64(NaChar * 0.5) - Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT))))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if ((NaChar <= -0.155) || ~((NaChar <= 1.26e+82))) tmp = (NdChar * 0.5) - (NaChar / (-1.0 - exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))); else tmp = (NaChar * 0.5) - (NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT)))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[Or[LessEqual[NaChar, -0.155], N[Not[LessEqual[NaChar, 1.26e+82]], $MachinePrecision]], N[(N[(NdChar * 0.5), $MachinePrecision] - N[(NaChar / N[(-1.0 - N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar * 0.5), $MachinePrecision] - N[(NdChar / N[(-1.0 - N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NaChar \leq -0.155 \lor \neg \left(NaChar \leq 1.26 \cdot 10^{+82}\right):\\
\;\;\;\;NdChar \cdot 0.5 - \frac{NaChar}{-1 - e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;NaChar \cdot 0.5 - \frac{NdChar}{-1 - e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}}\\
\end{array}
\end{array}
if NaChar < -0.154999999999999999 or 1.2600000000000001e82 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 51.6%
if -0.154999999999999999 < NaChar < 1.2600000000000001e82Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 63.6%
+-commutative63.6%
Simplified63.6%
Taylor expanded in Ev around inf 63.8%
Taylor expanded in KbT around inf 59.6%
Final simplification55.8%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (<= NaChar -0.3)
(-
(* NdChar 0.5)
(/ NaChar (- -1.0 (pow E (/ (+ (+ Vef EAccept) (- Ev mu)) KbT)))))
(if (<= NaChar 3.2e+81)
(-
(* NaChar 0.5)
(/ NdChar (- -1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT)))))
(-
(* NdChar 0.5)
(/ NaChar (- -1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (NaChar <= -0.3) {
tmp = (NdChar * 0.5) - (NaChar / (-1.0 - pow(((double) M_E), (((Vef + EAccept) + (Ev - mu)) / KbT))));
} else if (NaChar <= 3.2e+81) {
tmp = (NaChar * 0.5) - (NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT))));
} else {
tmp = (NdChar * 0.5) - (NaChar / (-1.0 - exp(((Vef - ((mu - EAccept) - Ev)) / KbT))));
}
return tmp;
}
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 <= -0.3) {
tmp = (NdChar * 0.5) - (NaChar / (-1.0 - Math.pow(Math.E, (((Vef + EAccept) + (Ev - mu)) / KbT))));
} else if (NaChar <= 3.2e+81) {
tmp = (NaChar * 0.5) - (NdChar / (-1.0 - Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT))));
} else {
tmp = (NdChar * 0.5) - (NaChar / (-1.0 - Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if NaChar <= -0.3: tmp = (NdChar * 0.5) - (NaChar / (-1.0 - math.pow(math.e, (((Vef + EAccept) + (Ev - mu)) / KbT)))) elif NaChar <= 3.2e+81: tmp = (NaChar * 0.5) - (NdChar / (-1.0 - math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) else: tmp = (NdChar * 0.5) - (NaChar / (-1.0 - math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (NaChar <= -0.3) tmp = Float64(Float64(NdChar * 0.5) - Float64(NaChar / Float64(-1.0 - (exp(1) ^ Float64(Float64(Float64(Vef + EAccept) + Float64(Ev - mu)) / KbT))))); elseif (NaChar <= 3.2e+81) tmp = Float64(Float64(NaChar * 0.5) - Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT))))); else tmp = Float64(Float64(NdChar * 0.5) - Float64(NaChar / Float64(-1.0 - exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT))))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (NaChar <= -0.3) tmp = (NdChar * 0.5) - (NaChar / (-1.0 - (2.71828182845904523536 ^ (((Vef + EAccept) + (Ev - mu)) / KbT)))); elseif (NaChar <= 3.2e+81) tmp = (NaChar * 0.5) - (NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT)))); else tmp = (NdChar * 0.5) - (NaChar / (-1.0 - exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[NaChar, -0.3], N[(N[(NdChar * 0.5), $MachinePrecision] - N[(NaChar / N[(-1.0 - N[Power[E, N[(N[(N[(Vef + EAccept), $MachinePrecision] + N[(Ev - mu), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 3.2e+81], N[(N[(NaChar * 0.5), $MachinePrecision] - N[(NdChar / N[(-1.0 - N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar * 0.5), $MachinePrecision] - N[(NaChar / N[(-1.0 - N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NaChar \leq -0.3:\\
\;\;\;\;NdChar \cdot 0.5 - \frac{NaChar}{-1 - {e}^{\left(\frac{\left(Vef + EAccept\right) + \left(Ev - mu\right)}{KbT}\right)}}\\
\mathbf{elif}\;NaChar \leq 3.2 \cdot 10^{+81}:\\
\;\;\;\;NaChar \cdot 0.5 - \frac{NdChar}{-1 - e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;NdChar \cdot 0.5 - \frac{NaChar}{-1 - e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}}\\
\end{array}
\end{array}
if NaChar < -0.299999999999999989Initial program 100.0%
Simplified100.0%
*-un-lft-identity100.0%
exp-prod100.0%
Applied egg-rr100.0%
exp-1-e100.0%
+-commutative100.0%
associate-+l-100.0%
unsub-neg100.0%
mul-1-neg100.0%
associate--l+100.0%
mul-1-neg100.0%
unsub-neg100.0%
Simplified100.0%
Taylor expanded in KbT around inf 53.5%
if -0.299999999999999989 < NaChar < 3.2e81Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 63.6%
+-commutative63.6%
Simplified63.6%
Taylor expanded in Ev around inf 63.8%
Taylor expanded in KbT around inf 59.6%
if 3.2e81 < NaChar Initial program 99.9%
Simplified99.9%
Taylor expanded in KbT around inf 48.7%
Final simplification55.8%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (<= NdChar -0.042)
(+ (/ NdChar (+ 1.0 (exp (/ mu KbT)))) (/ NaChar 2.0))
(if (<= NdChar 4.2e+22)
(+ (/ NaChar (+ 1.0 (exp (/ mu (- KbT))))) (* NdChar 0.5))
(+ (/ NdChar (+ 1.0 (exp (/ EDonor KbT)))) (/ NaChar 2.0)))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (NdChar <= -0.042) {
tmp = (NdChar / (1.0 + exp((mu / KbT)))) + (NaChar / 2.0);
} else if (NdChar <= 4.2e+22) {
tmp = (NaChar / (1.0 + exp((mu / -KbT)))) + (NdChar * 0.5);
} else {
tmp = (NdChar / (1.0 + exp((EDonor / KbT)))) + (NaChar / 2.0);
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if (ndchar <= (-0.042d0)) then
tmp = (ndchar / (1.0d0 + exp((mu / kbt)))) + (nachar / 2.0d0)
else if (ndchar <= 4.2d+22) then
tmp = (nachar / (1.0d0 + exp((mu / -kbt)))) + (ndchar * 0.5d0)
else
tmp = (ndchar / (1.0d0 + exp((edonor / kbt)))) + (nachar / 2.0d0)
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (NdChar <= -0.042) {
tmp = (NdChar / (1.0 + Math.exp((mu / KbT)))) + (NaChar / 2.0);
} else if (NdChar <= 4.2e+22) {
tmp = (NaChar / (1.0 + Math.exp((mu / -KbT)))) + (NdChar * 0.5);
} else {
tmp = (NdChar / (1.0 + Math.exp((EDonor / KbT)))) + (NaChar / 2.0);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if NdChar <= -0.042: tmp = (NdChar / (1.0 + math.exp((mu / KbT)))) + (NaChar / 2.0) elif NdChar <= 4.2e+22: tmp = (NaChar / (1.0 + math.exp((mu / -KbT)))) + (NdChar * 0.5) else: tmp = (NdChar / (1.0 + math.exp((EDonor / KbT)))) + (NaChar / 2.0) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (NdChar <= -0.042) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(mu / KbT)))) + Float64(NaChar / 2.0)); elseif (NdChar <= 4.2e+22) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(mu / Float64(-KbT))))) + Float64(NdChar * 0.5)); else tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(EDonor / KbT)))) + Float64(NaChar / 2.0)); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (NdChar <= -0.042) tmp = (NdChar / (1.0 + exp((mu / KbT)))) + (NaChar / 2.0); elseif (NdChar <= 4.2e+22) tmp = (NaChar / (1.0 + exp((mu / -KbT)))) + (NdChar * 0.5); else tmp = (NdChar / (1.0 + exp((EDonor / KbT)))) + (NaChar / 2.0); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[NdChar, -0.042], N[(N[(NdChar / N[(1.0 + N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / 2.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[NdChar, 4.2e+22], N[(N[(NaChar / N[(1.0 + N[Exp[N[(mu / (-KbT)), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar * 0.5), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar / N[(1.0 + N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / 2.0), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NdChar \leq -0.042:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{mu}{KbT}}} + \frac{NaChar}{2}\\
\mathbf{elif}\;NdChar \leq 4.2 \cdot 10^{+22}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{mu}{-KbT}}} + NdChar \cdot 0.5\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{EDonor}{KbT}}} + \frac{NaChar}{2}\\
\end{array}
\end{array}
if NdChar < -0.0420000000000000026Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 64.5%
Taylor expanded in KbT around inf 49.1%
if -0.0420000000000000026 < NdChar < 4.1999999999999996e22Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 50.4%
Taylor expanded in mu around inf 38.9%
neg-mul-151.0%
distribute-neg-frac251.0%
Simplified38.9%
if 4.1999999999999996e22 < NdChar Initial program 100.0%
Simplified100.0%
Taylor expanded in EDonor around inf 63.1%
Taylor expanded in KbT around inf 41.4%
Final simplification42.0%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (<= Vef -1.18e-222)
(- (* NdChar 0.5) (/ NaChar (- -1.0 (exp (/ Ev KbT)))))
(if (<= Vef 2.4e+64)
(+ (/ NdChar (+ 1.0 (exp (/ mu KbT)))) (/ NaChar 2.0))
(- (* NdChar 0.5) (/ NaChar (- -1.0 (exp (/ Vef KbT))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (Vef <= -1.18e-222) {
tmp = (NdChar * 0.5) - (NaChar / (-1.0 - exp((Ev / KbT))));
} else if (Vef <= 2.4e+64) {
tmp = (NdChar / (1.0 + exp((mu / KbT)))) + (NaChar / 2.0);
} else {
tmp = (NdChar * 0.5) - (NaChar / (-1.0 - exp((Vef / KbT))));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if (vef <= (-1.18d-222)) then
tmp = (ndchar * 0.5d0) - (nachar / ((-1.0d0) - exp((ev / kbt))))
else if (vef <= 2.4d+64) then
tmp = (ndchar / (1.0d0 + exp((mu / kbt)))) + (nachar / 2.0d0)
else
tmp = (ndchar * 0.5d0) - (nachar / ((-1.0d0) - exp((vef / kbt))))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (Vef <= -1.18e-222) {
tmp = (NdChar * 0.5) - (NaChar / (-1.0 - Math.exp((Ev / KbT))));
} else if (Vef <= 2.4e+64) {
tmp = (NdChar / (1.0 + Math.exp((mu / KbT)))) + (NaChar / 2.0);
} else {
tmp = (NdChar * 0.5) - (NaChar / (-1.0 - Math.exp((Vef / KbT))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if Vef <= -1.18e-222: tmp = (NdChar * 0.5) - (NaChar / (-1.0 - math.exp((Ev / KbT)))) elif Vef <= 2.4e+64: tmp = (NdChar / (1.0 + math.exp((mu / KbT)))) + (NaChar / 2.0) else: tmp = (NdChar * 0.5) - (NaChar / (-1.0 - math.exp((Vef / KbT)))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (Vef <= -1.18e-222) tmp = Float64(Float64(NdChar * 0.5) - Float64(NaChar / Float64(-1.0 - exp(Float64(Ev / KbT))))); elseif (Vef <= 2.4e+64) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(mu / KbT)))) + Float64(NaChar / 2.0)); else tmp = Float64(Float64(NdChar * 0.5) - Float64(NaChar / Float64(-1.0 - exp(Float64(Vef / KbT))))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (Vef <= -1.18e-222) tmp = (NdChar * 0.5) - (NaChar / (-1.0 - exp((Ev / KbT)))); elseif (Vef <= 2.4e+64) tmp = (NdChar / (1.0 + exp((mu / KbT)))) + (NaChar / 2.0); else tmp = (NdChar * 0.5) - (NaChar / (-1.0 - exp((Vef / KbT)))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[Vef, -1.18e-222], N[(N[(NdChar * 0.5), $MachinePrecision] - N[(NaChar / N[(-1.0 - N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[Vef, 2.4e+64], N[(N[(NdChar / N[(1.0 + N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / 2.0), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar * 0.5), $MachinePrecision] - N[(NaChar / N[(-1.0 - N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;Vef \leq -1.18 \cdot 10^{-222}:\\
\;\;\;\;NdChar \cdot 0.5 - \frac{NaChar}{-1 - e^{\frac{Ev}{KbT}}}\\
\mathbf{elif}\;Vef \leq 2.4 \cdot 10^{+64}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{mu}{KbT}}} + \frac{NaChar}{2}\\
\mathbf{else}:\\
\;\;\;\;NdChar \cdot 0.5 - \frac{NaChar}{-1 - e^{\frac{Vef}{KbT}}}\\
\end{array}
\end{array}
if Vef < -1.18000000000000007e-222Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 41.9%
Taylor expanded in Ev around inf 32.5%
if -1.18000000000000007e-222 < Vef < 2.39999999999999999e64Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 75.4%
Taylor expanded in KbT around inf 46.8%
if 2.39999999999999999e64 < Vef Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 44.9%
Taylor expanded in Vef around inf 38.6%
Final simplification39.7%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (<= Vef -5.2e-283)
(- (* NdChar 0.5) (/ NaChar (- -1.0 (exp (/ Ev KbT)))))
(if (<= Vef 9.6e+59)
(+ (/ NdChar (+ 1.0 (exp (/ EDonor KbT)))) (/ NaChar 2.0))
(- (* NdChar 0.5) (/ NaChar (- -1.0 (exp (/ Vef KbT))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (Vef <= -5.2e-283) {
tmp = (NdChar * 0.5) - (NaChar / (-1.0 - exp((Ev / KbT))));
} else if (Vef <= 9.6e+59) {
tmp = (NdChar / (1.0 + exp((EDonor / KbT)))) + (NaChar / 2.0);
} else {
tmp = (NdChar * 0.5) - (NaChar / (-1.0 - exp((Vef / KbT))));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if (vef <= (-5.2d-283)) then
tmp = (ndchar * 0.5d0) - (nachar / ((-1.0d0) - exp((ev / kbt))))
else if (vef <= 9.6d+59) then
tmp = (ndchar / (1.0d0 + exp((edonor / kbt)))) + (nachar / 2.0d0)
else
tmp = (ndchar * 0.5d0) - (nachar / ((-1.0d0) - exp((vef / kbt))))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (Vef <= -5.2e-283) {
tmp = (NdChar * 0.5) - (NaChar / (-1.0 - Math.exp((Ev / KbT))));
} else if (Vef <= 9.6e+59) {
tmp = (NdChar / (1.0 + Math.exp((EDonor / KbT)))) + (NaChar / 2.0);
} else {
tmp = (NdChar * 0.5) - (NaChar / (-1.0 - Math.exp((Vef / KbT))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if Vef <= -5.2e-283: tmp = (NdChar * 0.5) - (NaChar / (-1.0 - math.exp((Ev / KbT)))) elif Vef <= 9.6e+59: tmp = (NdChar / (1.0 + math.exp((EDonor / KbT)))) + (NaChar / 2.0) else: tmp = (NdChar * 0.5) - (NaChar / (-1.0 - math.exp((Vef / KbT)))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (Vef <= -5.2e-283) tmp = Float64(Float64(NdChar * 0.5) - Float64(NaChar / Float64(-1.0 - exp(Float64(Ev / KbT))))); elseif (Vef <= 9.6e+59) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(EDonor / KbT)))) + Float64(NaChar / 2.0)); else tmp = Float64(Float64(NdChar * 0.5) - Float64(NaChar / Float64(-1.0 - exp(Float64(Vef / KbT))))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (Vef <= -5.2e-283) tmp = (NdChar * 0.5) - (NaChar / (-1.0 - exp((Ev / KbT)))); elseif (Vef <= 9.6e+59) tmp = (NdChar / (1.0 + exp((EDonor / KbT)))) + (NaChar / 2.0); else tmp = (NdChar * 0.5) - (NaChar / (-1.0 - exp((Vef / KbT)))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[Vef, -5.2e-283], N[(N[(NdChar * 0.5), $MachinePrecision] - N[(NaChar / N[(-1.0 - N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[Vef, 9.6e+59], N[(N[(NdChar / N[(1.0 + N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / 2.0), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar * 0.5), $MachinePrecision] - N[(NaChar / N[(-1.0 - N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;Vef \leq -5.2 \cdot 10^{-283}:\\
\;\;\;\;NdChar \cdot 0.5 - \frac{NaChar}{-1 - e^{\frac{Ev}{KbT}}}\\
\mathbf{elif}\;Vef \leq 9.6 \cdot 10^{+59}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{EDonor}{KbT}}} + \frac{NaChar}{2}\\
\mathbf{else}:\\
\;\;\;\;NdChar \cdot 0.5 - \frac{NaChar}{-1 - e^{\frac{Vef}{KbT}}}\\
\end{array}
\end{array}
if Vef < -5.2000000000000002e-283Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 42.3%
Taylor expanded in Ev around inf 32.9%
if -5.2000000000000002e-283 < Vef < 9.6000000000000008e59Initial program 100.0%
Simplified100.0%
Taylor expanded in EDonor around inf 73.0%
Taylor expanded in KbT around inf 43.2%
if 9.6000000000000008e59 < Vef Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 44.9%
Taylor expanded in Vef around inf 38.6%
Final simplification37.9%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (if (<= Vef 5.1e-17) (- (* NdChar 0.5) (/ NaChar (- -1.0 (exp (/ Ev KbT))))) (- (* NdChar 0.5) (/ NaChar (- -1.0 (exp (/ Vef KbT)))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (Vef <= 5.1e-17) {
tmp = (NdChar * 0.5) - (NaChar / (-1.0 - exp((Ev / KbT))));
} else {
tmp = (NdChar * 0.5) - (NaChar / (-1.0 - exp((Vef / KbT))));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if (vef <= 5.1d-17) then
tmp = (ndchar * 0.5d0) - (nachar / ((-1.0d0) - exp((ev / kbt))))
else
tmp = (ndchar * 0.5d0) - (nachar / ((-1.0d0) - exp((vef / kbt))))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (Vef <= 5.1e-17) {
tmp = (NdChar * 0.5) - (NaChar / (-1.0 - Math.exp((Ev / KbT))));
} else {
tmp = (NdChar * 0.5) - (NaChar / (-1.0 - Math.exp((Vef / KbT))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if Vef <= 5.1e-17: tmp = (NdChar * 0.5) - (NaChar / (-1.0 - math.exp((Ev / KbT)))) else: tmp = (NdChar * 0.5) - (NaChar / (-1.0 - math.exp((Vef / KbT)))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (Vef <= 5.1e-17) tmp = Float64(Float64(NdChar * 0.5) - Float64(NaChar / Float64(-1.0 - exp(Float64(Ev / KbT))))); else tmp = Float64(Float64(NdChar * 0.5) - Float64(NaChar / Float64(-1.0 - exp(Float64(Vef / KbT))))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (Vef <= 5.1e-17) tmp = (NdChar * 0.5) - (NaChar / (-1.0 - exp((Ev / KbT)))); else tmp = (NdChar * 0.5) - (NaChar / (-1.0 - exp((Vef / KbT)))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[Vef, 5.1e-17], N[(N[(NdChar * 0.5), $MachinePrecision] - N[(NaChar / N[(-1.0 - N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar * 0.5), $MachinePrecision] - N[(NaChar / N[(-1.0 - N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;Vef \leq 5.1 \cdot 10^{-17}:\\
\;\;\;\;NdChar \cdot 0.5 - \frac{NaChar}{-1 - e^{\frac{Ev}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;NdChar \cdot 0.5 - \frac{NaChar}{-1 - e^{\frac{Vef}{KbT}}}\\
\end{array}
\end{array}
if Vef < 5.1000000000000003e-17Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 44.3%
Taylor expanded in Ev around inf 35.4%
if 5.1000000000000003e-17 < Vef Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 44.3%
Taylor expanded in Vef around inf 37.4%
Final simplification35.9%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (if (<= EAccept 3.05e-115) (- (* NdChar 0.5) (/ NaChar (- -1.0 (exp (/ Ev KbT))))) (- (* NdChar 0.5) (/ NaChar (- -1.0 (exp (/ EAccept KbT)))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (EAccept <= 3.05e-115) {
tmp = (NdChar * 0.5) - (NaChar / (-1.0 - exp((Ev / KbT))));
} else {
tmp = (NdChar * 0.5) - (NaChar / (-1.0 - exp((EAccept / KbT))));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if (eaccept <= 3.05d-115) then
tmp = (ndchar * 0.5d0) - (nachar / ((-1.0d0) - exp((ev / kbt))))
else
tmp = (ndchar * 0.5d0) - (nachar / ((-1.0d0) - exp((eaccept / kbt))))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (EAccept <= 3.05e-115) {
tmp = (NdChar * 0.5) - (NaChar / (-1.0 - Math.exp((Ev / KbT))));
} else {
tmp = (NdChar * 0.5) - (NaChar / (-1.0 - Math.exp((EAccept / KbT))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if EAccept <= 3.05e-115: tmp = (NdChar * 0.5) - (NaChar / (-1.0 - math.exp((Ev / KbT)))) else: tmp = (NdChar * 0.5) - (NaChar / (-1.0 - math.exp((EAccept / KbT)))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (EAccept <= 3.05e-115) tmp = Float64(Float64(NdChar * 0.5) - Float64(NaChar / Float64(-1.0 - exp(Float64(Ev / KbT))))); else tmp = Float64(Float64(NdChar * 0.5) - Float64(NaChar / Float64(-1.0 - exp(Float64(EAccept / KbT))))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (EAccept <= 3.05e-115) tmp = (NdChar * 0.5) - (NaChar / (-1.0 - exp((Ev / KbT)))); else tmp = (NdChar * 0.5) - (NaChar / (-1.0 - exp((EAccept / KbT)))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[EAccept, 3.05e-115], N[(N[(NdChar * 0.5), $MachinePrecision] - N[(NaChar / N[(-1.0 - N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar * 0.5), $MachinePrecision] - N[(NaChar / N[(-1.0 - N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;EAccept \leq 3.05 \cdot 10^{-115}:\\
\;\;\;\;NdChar \cdot 0.5 - \frac{NaChar}{-1 - e^{\frac{Ev}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;NdChar \cdot 0.5 - \frac{NaChar}{-1 - e^{\frac{EAccept}{KbT}}}\\
\end{array}
\end{array}
if EAccept < 3.0499999999999999e-115Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 42.6%
Taylor expanded in Ev around inf 31.1%
if 3.0499999999999999e-115 < EAccept Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 48.1%
Taylor expanded in EAccept around inf 43.3%
Final simplification34.8%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (- (* NdChar 0.5) (/ 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) {
return (NdChar * 0.5) - (NaChar / (-1.0 - exp((EAccept / KbT))));
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
code = (ndchar * 0.5d0) - (nachar / ((-1.0d0) - exp((eaccept / kbt))))
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NdChar * 0.5) - (NaChar / (-1.0 - Math.exp((EAccept / KbT))));
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return (NdChar * 0.5) - (NaChar / (-1.0 - math.exp((EAccept / KbT))))
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(Float64(NdChar * 0.5) - Float64(NaChar / Float64(-1.0 - exp(Float64(EAccept / KbT))))) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = (NdChar * 0.5) - (NaChar / (-1.0 - exp((EAccept / KbT)))); end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(N[(NdChar * 0.5), $MachinePrecision] - N[(NaChar / N[(-1.0 - N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
NdChar \cdot 0.5 - \frac{NaChar}{-1 - e^{\frac{EAccept}{KbT}}}
\end{array}
Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 44.3%
Taylor expanded in EAccept around inf 34.3%
Final simplification34.3%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (- EAccept (- (- mu Vef) Ev))))
(if (<= Ev -1.42e-139)
(-
(* NdChar 0.5)
(/
NaChar
(-
(/ (+ (* -0.5 (* t_0 (/ t_0 KbT))) (- (- mu Vef) (+ EAccept Ev))) KbT)
2.0)))
(+
(/
NdChar
(+
1.0
(- (+ 1.0 (+ (/ EDonor KbT) (+ (/ Vef KbT) (/ mu KbT)))) (/ Ec KbT))))
(/
NaChar
(-
1.0
(+
(/ mu KbT)
(+
-1.0
(-
(* Ev (- (/ -1.0 KbT) (/ Vef (* KbT Ev))))
(/ 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 = EAccept - ((mu - Vef) - Ev);
double tmp;
if (Ev <= -1.42e-139) {
tmp = (NdChar * 0.5) - (NaChar / ((((-0.5 * (t_0 * (t_0 / KbT))) + ((mu - Vef) - (EAccept + Ev))) / KbT) - 2.0));
} else {
tmp = (NdChar / (1.0 + ((1.0 + ((EDonor / KbT) + ((Vef / KbT) + (mu / KbT)))) - (Ec / KbT)))) + (NaChar / (1.0 - ((mu / KbT) + (-1.0 + ((Ev * ((-1.0 / KbT) - (Vef / (KbT * Ev)))) - (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 = eaccept - ((mu - vef) - ev)
if (ev <= (-1.42d-139)) then
tmp = (ndchar * 0.5d0) - (nachar / (((((-0.5d0) * (t_0 * (t_0 / kbt))) + ((mu - vef) - (eaccept + ev))) / kbt) - 2.0d0))
else
tmp = (ndchar / (1.0d0 + ((1.0d0 + ((edonor / kbt) + ((vef / kbt) + (mu / kbt)))) - (ec / kbt)))) + (nachar / (1.0d0 - ((mu / kbt) + ((-1.0d0) + ((ev * (((-1.0d0) / kbt) - (vef / (kbt * ev)))) - (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 = EAccept - ((mu - Vef) - Ev);
double tmp;
if (Ev <= -1.42e-139) {
tmp = (NdChar * 0.5) - (NaChar / ((((-0.5 * (t_0 * (t_0 / KbT))) + ((mu - Vef) - (EAccept + Ev))) / KbT) - 2.0));
} else {
tmp = (NdChar / (1.0 + ((1.0 + ((EDonor / KbT) + ((Vef / KbT) + (mu / KbT)))) - (Ec / KbT)))) + (NaChar / (1.0 - ((mu / KbT) + (-1.0 + ((Ev * ((-1.0 / KbT) - (Vef / (KbT * Ev)))) - (EAccept / KbT))))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = EAccept - ((mu - Vef) - Ev) tmp = 0 if Ev <= -1.42e-139: tmp = (NdChar * 0.5) - (NaChar / ((((-0.5 * (t_0 * (t_0 / KbT))) + ((mu - Vef) - (EAccept + Ev))) / KbT) - 2.0)) else: tmp = (NdChar / (1.0 + ((1.0 + ((EDonor / KbT) + ((Vef / KbT) + (mu / KbT)))) - (Ec / KbT)))) + (NaChar / (1.0 - ((mu / KbT) + (-1.0 + ((Ev * ((-1.0 / KbT) - (Vef / (KbT * Ev)))) - (EAccept / KbT)))))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(EAccept - Float64(Float64(mu - Vef) - Ev)) tmp = 0.0 if (Ev <= -1.42e-139) tmp = Float64(Float64(NdChar * 0.5) - Float64(NaChar / Float64(Float64(Float64(Float64(-0.5 * Float64(t_0 * Float64(t_0 / KbT))) + Float64(Float64(mu - Vef) - Float64(EAccept + Ev))) / KbT) - 2.0))); else tmp = Float64(Float64(NdChar / Float64(1.0 + Float64(Float64(1.0 + Float64(Float64(EDonor / KbT) + Float64(Float64(Vef / KbT) + Float64(mu / KbT)))) - Float64(Ec / KbT)))) + Float64(NaChar / Float64(1.0 - Float64(Float64(mu / KbT) + Float64(-1.0 + Float64(Float64(Ev * Float64(Float64(-1.0 / KbT) - Float64(Vef / Float64(KbT * Ev)))) - Float64(EAccept / KbT))))))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = EAccept - ((mu - Vef) - Ev); tmp = 0.0; if (Ev <= -1.42e-139) tmp = (NdChar * 0.5) - (NaChar / ((((-0.5 * (t_0 * (t_0 / KbT))) + ((mu - Vef) - (EAccept + Ev))) / KbT) - 2.0)); else tmp = (NdChar / (1.0 + ((1.0 + ((EDonor / KbT) + ((Vef / KbT) + (mu / KbT)))) - (Ec / KbT)))) + (NaChar / (1.0 - ((mu / KbT) + (-1.0 + ((Ev * ((-1.0 / KbT) - (Vef / (KbT * Ev)))) - (EAccept / KbT)))))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(EAccept - N[(N[(mu - Vef), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[Ev, -1.42e-139], N[(N[(NdChar * 0.5), $MachinePrecision] - N[(NaChar / N[(N[(N[(N[(-0.5 * N[(t$95$0 * N[(t$95$0 / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(N[(mu - Vef), $MachinePrecision] - N[(EAccept + Ev), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision] - 2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar / N[(1.0 + N[(N[(1.0 + N[(N[(EDonor / KbT), $MachinePrecision] + N[(N[(Vef / KbT), $MachinePrecision] + N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 - N[(N[(mu / KbT), $MachinePrecision] + N[(-1.0 + N[(N[(Ev * N[(N[(-1.0 / KbT), $MachinePrecision] - N[(Vef / N[(KbT * Ev), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(EAccept / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := EAccept - \left(\left(mu - Vef\right) - Ev\right)\\
\mathbf{if}\;Ev \leq -1.42 \cdot 10^{-139}:\\
\;\;\;\;NdChar \cdot 0.5 - \frac{NaChar}{\frac{-0.5 \cdot \left(t\_0 \cdot \frac{t\_0}{KbT}\right) + \left(\left(mu - Vef\right) - \left(EAccept + Ev\right)\right)}{KbT} - 2}\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{1 + \left(\left(1 + \left(\frac{EDonor}{KbT} + \left(\frac{Vef}{KbT} + \frac{mu}{KbT}\right)\right)\right) - \frac{Ec}{KbT}\right)} + \frac{NaChar}{1 - \left(\frac{mu}{KbT} + \left(-1 + \left(Ev \cdot \left(\frac{-1}{KbT} - \frac{Vef}{KbT \cdot Ev}\right) - \frac{EAccept}{KbT}\right)\right)\right)}\\
\end{array}
\end{array}
if Ev < -1.41999999999999997e-139Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 46.3%
Taylor expanded in KbT around -inf 25.5%
mul-1-neg25.5%
unsub-neg25.5%
Simplified25.5%
unpow225.5%
*-un-lft-identity25.5%
times-frac29.9%
associate-+l+29.9%
associate-+l+29.9%
Applied egg-rr29.9%
if -1.41999999999999997e-139 < Ev Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 55.7%
+-commutative55.7%
Simplified55.7%
Taylor expanded in Ev around inf 56.5%
Taylor expanded in KbT around inf 30.0%
Final simplification30.0%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (- EAccept (- (- mu Vef) Ev))))
(-
(* NdChar 0.5)
(/
NaChar
(-
(/ (+ (* -0.5 (* t_0 (/ t_0 KbT))) (- (- mu Vef) (+ EAccept Ev))) KbT)
2.0)))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = EAccept - ((mu - Vef) - Ev);
return (NdChar * 0.5) - (NaChar / ((((-0.5 * (t_0 * (t_0 / KbT))) + ((mu - Vef) - (EAccept + Ev))) / KbT) - 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
real(8) :: t_0
t_0 = eaccept - ((mu - vef) - ev)
code = (ndchar * 0.5d0) - (nachar / (((((-0.5d0) * (t_0 * (t_0 / kbt))) + ((mu - vef) - (eaccept + ev))) / kbt) - 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) {
double t_0 = EAccept - ((mu - Vef) - Ev);
return (NdChar * 0.5) - (NaChar / ((((-0.5 * (t_0 * (t_0 / KbT))) + ((mu - Vef) - (EAccept + Ev))) / KbT) - 2.0));
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = EAccept - ((mu - Vef) - Ev) return (NdChar * 0.5) - (NaChar / ((((-0.5 * (t_0 * (t_0 / KbT))) + ((mu - Vef) - (EAccept + Ev))) / KbT) - 2.0))
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(EAccept - Float64(Float64(mu - Vef) - Ev)) return Float64(Float64(NdChar * 0.5) - Float64(NaChar / Float64(Float64(Float64(Float64(-0.5 * Float64(t_0 * Float64(t_0 / KbT))) + Float64(Float64(mu - Vef) - Float64(EAccept + Ev))) / KbT) - 2.0))) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = EAccept - ((mu - Vef) - Ev); tmp = (NdChar * 0.5) - (NaChar / ((((-0.5 * (t_0 * (t_0 / KbT))) + ((mu - Vef) - (EAccept + Ev))) / KbT) - 2.0)); end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(EAccept - N[(N[(mu - Vef), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision]}, N[(N[(NdChar * 0.5), $MachinePrecision] - N[(NaChar / N[(N[(N[(N[(-0.5 * N[(t$95$0 * N[(t$95$0 / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(N[(mu - Vef), $MachinePrecision] - N[(EAccept + Ev), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision] - 2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := EAccept - \left(\left(mu - Vef\right) - Ev\right)\\
NdChar \cdot 0.5 - \frac{NaChar}{\frac{-0.5 \cdot \left(t\_0 \cdot \frac{t\_0}{KbT}\right) + \left(\left(mu - Vef\right) - \left(EAccept + Ev\right)\right)}{KbT} - 2}
\end{array}
\end{array}
Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 44.3%
Taylor expanded in KbT around -inf 24.7%
mul-1-neg24.7%
unsub-neg24.7%
Simplified24.7%
unpow224.7%
*-un-lft-identity24.7%
times-frac28.1%
associate-+l+28.1%
associate-+l+28.1%
Applied egg-rr28.1%
Final simplification28.1%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (+ (* NdChar 0.5) (/ NaChar 2.0)))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NdChar * 0.5) + (NaChar / 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 = (ndchar * 0.5d0) + (nachar / 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 (NdChar * 0.5) + (NaChar / 2.0);
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return (NdChar * 0.5) + (NaChar / 2.0)
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(Float64(NdChar * 0.5) + Float64(NaChar / 2.0)) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = (NdChar * 0.5) + (NaChar / 2.0); end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(N[(NdChar * 0.5), $MachinePrecision] + N[(NaChar / 2.0), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
NdChar \cdot 0.5 + \frac{NaChar}{2}
\end{array}
Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 44.3%
Taylor expanded in KbT around inf 26.9%
Final simplification26.9%
herbie shell --seed 2024094
(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))))))