
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (+ (/ NdChar (+ 1.0 (exp (/ (- (- (- (- Ec Vef) EDonor) mu)) KbT)))) (/ NaChar (+ 1.0 (exp (/ (+ (+ (+ Ev Vef) EAccept) (- mu)) KbT))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NdChar / (1.0 + exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + exp(((((Ev + Vef) + EAccept) + -mu) / KbT))));
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
code = (ndchar / (1.0d0 + exp((-(((ec - vef) - edonor) - mu) / kbt)))) + (nachar / (1.0d0 + exp(((((ev + vef) + eaccept) + -mu) / kbt))))
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NdChar / (1.0 + Math.exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + Math.exp(((((Ev + Vef) + EAccept) + -mu) / KbT))));
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return (NdChar / (1.0 + math.exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + math.exp(((((Ev + Vef) + EAccept) + -mu) / KbT))))
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(-Float64(Float64(Float64(Ec - Vef) - EDonor) - mu)) / KbT)))) + Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(Float64(Ev + Vef) + EAccept) + Float64(-mu)) / KbT))))) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = (NdChar / (1.0 + exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + exp(((((Ev + Vef) + EAccept) + -mu) / KbT)))); end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(N[(NdChar / N[(1.0 + N[Exp[N[((-N[(N[(N[(Ec - Vef), $MachinePrecision] - EDonor), $MachinePrecision] - mu), $MachinePrecision]) / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Exp[N[(N[(N[(N[(Ev + Vef), $MachinePrecision] + EAccept), $MachinePrecision] + (-mu)), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{NdChar}{1 + e^{\frac{-\left(\left(\left(Ec - Vef\right) - EDonor\right) - mu\right)}{KbT}}} + \frac{NaChar}{1 + e^{\frac{\left(\left(Ev + Vef\right) + EAccept\right) + \left(-mu\right)}{KbT}}}
\end{array}
Sampling outcomes in binary64 precision:
Herbie found 28 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (+ (/ NdChar (+ 1.0 (exp (/ (- (- (- (- Ec Vef) EDonor) mu)) KbT)))) (/ NaChar (+ 1.0 (exp (/ (+ (+ (+ Ev Vef) EAccept) (- mu)) KbT))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NdChar / (1.0 + exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + exp(((((Ev + Vef) + EAccept) + -mu) / KbT))));
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
code = (ndchar / (1.0d0 + exp((-(((ec - vef) - edonor) - mu) / kbt)))) + (nachar / (1.0d0 + exp(((((ev + vef) + eaccept) + -mu) / kbt))))
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NdChar / (1.0 + Math.exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + Math.exp(((((Ev + Vef) + EAccept) + -mu) / KbT))));
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return (NdChar / (1.0 + math.exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + math.exp(((((Ev + Vef) + EAccept) + -mu) / KbT))))
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(-Float64(Float64(Float64(Ec - Vef) - EDonor) - mu)) / KbT)))) + Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(Float64(Ev + Vef) + EAccept) + Float64(-mu)) / KbT))))) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = (NdChar / (1.0 + exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + exp(((((Ev + Vef) + EAccept) + -mu) / KbT)))); end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(N[(NdChar / N[(1.0 + N[Exp[N[((-N[(N[(N[(Ec - Vef), $MachinePrecision] - EDonor), $MachinePrecision] - mu), $MachinePrecision]) / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Exp[N[(N[(N[(N[(Ev + Vef), $MachinePrecision] + EAccept), $MachinePrecision] + (-mu)), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{NdChar}{1 + e^{\frac{-\left(\left(\left(Ec - Vef\right) - EDonor\right) - mu\right)}{KbT}}} + \frac{NaChar}{1 + e^{\frac{\left(\left(Ev + Vef\right) + EAccept\right) + \left(-mu\right)}{KbT}}}
\end{array}
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (+ (/ NdChar (+ 1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT)))) (/ NaChar (+ 1.0 (exp (/ (+ Vef (- Ev (- mu EAccept))) KbT))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + exp(((Vef + (Ev - (mu - 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 / (1.0d0 + exp(((edonor + (mu + (vef - ec))) / kbt)))) + (nachar / (1.0d0 + exp(((vef + (ev - (mu - 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 / (1.0 + Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + Math.exp(((Vef + (Ev - (mu - EAccept))) / KbT))));
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return (NdChar / (1.0 + math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + math.exp(((Vef + (Ev - (mu - EAccept))) / KbT))))
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) + Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Ev - Float64(mu - EAccept))) / KbT))))) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + exp(((Vef + (Ev - (mu - EAccept))) / KbT)))); end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(Ev - N[(mu - EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{NdChar}{1 + e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}} + \frac{NaChar}{1 + e^{\frac{Vef + \left(Ev - \left(mu - EAccept\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 (+ (/ Vef KbT) (/ mu KbT)))
(t_2 (/ NaChar (+ 1.0 (exp (/ (+ Vef (- Ev (- mu EAccept))) KbT))))))
(if (<= NaChar -1.95e+86)
(+
t_2
(/ NdChar (* Ec (+ (/ (+ 2.0 (+ (/ EDonor KbT) t_1)) Ec) (/ -1.0 KbT)))))
(if (<= NaChar -1.7e-15)
(- (/ 1.0 (/ (+ 2.0 (/ Vef KbT)) NaChar)) t_0)
(if (<= NaChar -7e-73)
(+
t_2
(/
NdChar
(*
Vef
(+
(/ 1.0 KbT)
(-
(+ (+ (/ mu (* Vef KbT)) (/ EDonor (* Vef KbT))) (/ 2.0 Vef))
(/ Ec (* Vef KbT)))))))
(if (<= NaChar -1.6e-123)
(-
(/ -1.0 (* Vef (- (/ -1.0 (* KbT NaChar)) (/ 2.0 (* Vef NaChar)))))
t_0)
(if (<= NaChar 2.55)
(+
(/ NaChar (+ 1.0 (exp (/ Ev KbT))))
(/ NdChar (+ 1.0 (exp (/ (- (+ mu Vef) Ec) KbT)))))
(+
t_2
(/
NdChar
(*
EDonor
(+ (/ 1.0 KbT) (/ (- (+ 2.0 t_1) (/ Ec KbT)) EDonor))))))))))))
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 = (Vef / KbT) + (mu / KbT);
double t_2 = NaChar / (1.0 + exp(((Vef + (Ev - (mu - EAccept))) / KbT)));
double tmp;
if (NaChar <= -1.95e+86) {
tmp = t_2 + (NdChar / (Ec * (((2.0 + ((EDonor / KbT) + t_1)) / Ec) + (-1.0 / KbT))));
} else if (NaChar <= -1.7e-15) {
tmp = (1.0 / ((2.0 + (Vef / KbT)) / NaChar)) - t_0;
} else if (NaChar <= -7e-73) {
tmp = t_2 + (NdChar / (Vef * ((1.0 / KbT) + ((((mu / (Vef * KbT)) + (EDonor / (Vef * KbT))) + (2.0 / Vef)) - (Ec / (Vef * KbT))))));
} else if (NaChar <= -1.6e-123) {
tmp = (-1.0 / (Vef * ((-1.0 / (KbT * NaChar)) - (2.0 / (Vef * NaChar))))) - t_0;
} else if (NaChar <= 2.55) {
tmp = (NaChar / (1.0 + exp((Ev / KbT)))) + (NdChar / (1.0 + exp((((mu + Vef) - Ec) / KbT))));
} else {
tmp = t_2 + (NdChar / (EDonor * ((1.0 / KbT) + (((2.0 + t_1) - (Ec / KbT)) / EDonor))));
}
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 = (vef / kbt) + (mu / kbt)
t_2 = nachar / (1.0d0 + exp(((vef + (ev - (mu - eaccept))) / kbt)))
if (nachar <= (-1.95d+86)) then
tmp = t_2 + (ndchar / (ec * (((2.0d0 + ((edonor / kbt) + t_1)) / ec) + ((-1.0d0) / kbt))))
else if (nachar <= (-1.7d-15)) then
tmp = (1.0d0 / ((2.0d0 + (vef / kbt)) / nachar)) - t_0
else if (nachar <= (-7d-73)) then
tmp = t_2 + (ndchar / (vef * ((1.0d0 / kbt) + ((((mu / (vef * kbt)) + (edonor / (vef * kbt))) + (2.0d0 / vef)) - (ec / (vef * kbt))))))
else if (nachar <= (-1.6d-123)) then
tmp = ((-1.0d0) / (vef * (((-1.0d0) / (kbt * nachar)) - (2.0d0 / (vef * nachar))))) - t_0
else if (nachar <= 2.55d0) then
tmp = (nachar / (1.0d0 + exp((ev / kbt)))) + (ndchar / (1.0d0 + exp((((mu + vef) - ec) / kbt))))
else
tmp = t_2 + (ndchar / (edonor * ((1.0d0 / kbt) + (((2.0d0 + t_1) - (ec / kbt)) / edonor))))
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 = (Vef / KbT) + (mu / KbT);
double t_2 = NaChar / (1.0 + Math.exp(((Vef + (Ev - (mu - EAccept))) / KbT)));
double tmp;
if (NaChar <= -1.95e+86) {
tmp = t_2 + (NdChar / (Ec * (((2.0 + ((EDonor / KbT) + t_1)) / Ec) + (-1.0 / KbT))));
} else if (NaChar <= -1.7e-15) {
tmp = (1.0 / ((2.0 + (Vef / KbT)) / NaChar)) - t_0;
} else if (NaChar <= -7e-73) {
tmp = t_2 + (NdChar / (Vef * ((1.0 / KbT) + ((((mu / (Vef * KbT)) + (EDonor / (Vef * KbT))) + (2.0 / Vef)) - (Ec / (Vef * KbT))))));
} else if (NaChar <= -1.6e-123) {
tmp = (-1.0 / (Vef * ((-1.0 / (KbT * NaChar)) - (2.0 / (Vef * NaChar))))) - t_0;
} else if (NaChar <= 2.55) {
tmp = (NaChar / (1.0 + Math.exp((Ev / KbT)))) + (NdChar / (1.0 + Math.exp((((mu + Vef) - Ec) / KbT))));
} else {
tmp = t_2 + (NdChar / (EDonor * ((1.0 / KbT) + (((2.0 + t_1) - (Ec / KbT)) / EDonor))));
}
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 = (Vef / KbT) + (mu / KbT) t_2 = NaChar / (1.0 + math.exp(((Vef + (Ev - (mu - EAccept))) / KbT))) tmp = 0 if NaChar <= -1.95e+86: tmp = t_2 + (NdChar / (Ec * (((2.0 + ((EDonor / KbT) + t_1)) / Ec) + (-1.0 / KbT)))) elif NaChar <= -1.7e-15: tmp = (1.0 / ((2.0 + (Vef / KbT)) / NaChar)) - t_0 elif NaChar <= -7e-73: tmp = t_2 + (NdChar / (Vef * ((1.0 / KbT) + ((((mu / (Vef * KbT)) + (EDonor / (Vef * KbT))) + (2.0 / Vef)) - (Ec / (Vef * KbT)))))) elif NaChar <= -1.6e-123: tmp = (-1.0 / (Vef * ((-1.0 / (KbT * NaChar)) - (2.0 / (Vef * NaChar))))) - t_0 elif NaChar <= 2.55: tmp = (NaChar / (1.0 + math.exp((Ev / KbT)))) + (NdChar / (1.0 + math.exp((((mu + Vef) - Ec) / KbT)))) else: tmp = t_2 + (NdChar / (EDonor * ((1.0 / KbT) + (((2.0 + t_1) - (Ec / KbT)) / EDonor)))) 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(Vef / KbT) + Float64(mu / KbT)) t_2 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Ev - Float64(mu - EAccept))) / KbT)))) tmp = 0.0 if (NaChar <= -1.95e+86) tmp = Float64(t_2 + Float64(NdChar / Float64(Ec * Float64(Float64(Float64(2.0 + Float64(Float64(EDonor / KbT) + t_1)) / Ec) + Float64(-1.0 / KbT))))); elseif (NaChar <= -1.7e-15) tmp = Float64(Float64(1.0 / Float64(Float64(2.0 + Float64(Vef / KbT)) / NaChar)) - t_0); elseif (NaChar <= -7e-73) tmp = Float64(t_2 + Float64(NdChar / Float64(Vef * Float64(Float64(1.0 / KbT) + Float64(Float64(Float64(Float64(mu / Float64(Vef * KbT)) + Float64(EDonor / Float64(Vef * KbT))) + Float64(2.0 / Vef)) - Float64(Ec / Float64(Vef * KbT))))))); elseif (NaChar <= -1.6e-123) tmp = Float64(Float64(-1.0 / Float64(Vef * Float64(Float64(-1.0 / Float64(KbT * NaChar)) - Float64(2.0 / Float64(Vef * NaChar))))) - t_0); elseif (NaChar <= 2.55) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT)))) + Float64(NdChar / Float64(1.0 + exp(Float64(Float64(Float64(mu + Vef) - Ec) / KbT))))); else tmp = Float64(t_2 + Float64(NdChar / Float64(EDonor * Float64(Float64(1.0 / KbT) + Float64(Float64(Float64(2.0 + t_1) - Float64(Ec / KbT)) / EDonor))))); 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 = (Vef / KbT) + (mu / KbT); t_2 = NaChar / (1.0 + exp(((Vef + (Ev - (mu - EAccept))) / KbT))); tmp = 0.0; if (NaChar <= -1.95e+86) tmp = t_2 + (NdChar / (Ec * (((2.0 + ((EDonor / KbT) + t_1)) / Ec) + (-1.0 / KbT)))); elseif (NaChar <= -1.7e-15) tmp = (1.0 / ((2.0 + (Vef / KbT)) / NaChar)) - t_0; elseif (NaChar <= -7e-73) tmp = t_2 + (NdChar / (Vef * ((1.0 / KbT) + ((((mu / (Vef * KbT)) + (EDonor / (Vef * KbT))) + (2.0 / Vef)) - (Ec / (Vef * KbT)))))); elseif (NaChar <= -1.6e-123) tmp = (-1.0 / (Vef * ((-1.0 / (KbT * NaChar)) - (2.0 / (Vef * NaChar))))) - t_0; elseif (NaChar <= 2.55) tmp = (NaChar / (1.0 + exp((Ev / KbT)))) + (NdChar / (1.0 + exp((((mu + Vef) - Ec) / KbT)))); else tmp = t_2 + (NdChar / (EDonor * ((1.0 / KbT) + (((2.0 + t_1) - (Ec / KbT)) / EDonor)))); 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[(Vef / KbT), $MachinePrecision] + N[(mu / KbT), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(Ev - N[(mu - EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -1.95e+86], N[(t$95$2 + N[(NdChar / N[(Ec * N[(N[(N[(2.0 + N[(N[(EDonor / KbT), $MachinePrecision] + t$95$1), $MachinePrecision]), $MachinePrecision] / Ec), $MachinePrecision] + N[(-1.0 / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, -1.7e-15], N[(N[(1.0 / N[(N[(2.0 + N[(Vef / KbT), $MachinePrecision]), $MachinePrecision] / NaChar), $MachinePrecision]), $MachinePrecision] - t$95$0), $MachinePrecision], If[LessEqual[NaChar, -7e-73], N[(t$95$2 + N[(NdChar / N[(Vef * N[(N[(1.0 / KbT), $MachinePrecision] + N[(N[(N[(N[(mu / N[(Vef * KbT), $MachinePrecision]), $MachinePrecision] + N[(EDonor / N[(Vef * KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(2.0 / Vef), $MachinePrecision]), $MachinePrecision] - N[(Ec / N[(Vef * KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, -1.6e-123], N[(N[(-1.0 / N[(Vef * N[(N[(-1.0 / N[(KbT * NaChar), $MachinePrecision]), $MachinePrecision] - N[(2.0 / N[(Vef * NaChar), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - t$95$0), $MachinePrecision], If[LessEqual[NaChar, 2.55], N[(N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(1.0 + N[Exp[N[(N[(N[(mu + Vef), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(t$95$2 + N[(NdChar / N[(EDonor * N[(N[(1.0 / KbT), $MachinePrecision] + N[(N[(N[(2.0 + t$95$1), $MachinePrecision] - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision] / EDonor), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{-1 - e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}}\\
t_1 := \frac{Vef}{KbT} + \frac{mu}{KbT}\\
t_2 := \frac{NaChar}{1 + e^{\frac{Vef + \left(Ev - \left(mu - EAccept\right)\right)}{KbT}}}\\
\mathbf{if}\;NaChar \leq -1.95 \cdot 10^{+86}:\\
\;\;\;\;t\_2 + \frac{NdChar}{Ec \cdot \left(\frac{2 + \left(\frac{EDonor}{KbT} + t\_1\right)}{Ec} + \frac{-1}{KbT}\right)}\\
\mathbf{elif}\;NaChar \leq -1.7 \cdot 10^{-15}:\\
\;\;\;\;\frac{1}{\frac{2 + \frac{Vef}{KbT}}{NaChar}} - t\_0\\
\mathbf{elif}\;NaChar \leq -7 \cdot 10^{-73}:\\
\;\;\;\;t\_2 + \frac{NdChar}{Vef \cdot \left(\frac{1}{KbT} + \left(\left(\left(\frac{mu}{Vef \cdot KbT} + \frac{EDonor}{Vef \cdot KbT}\right) + \frac{2}{Vef}\right) - \frac{Ec}{Vef \cdot KbT}\right)\right)}\\
\mathbf{elif}\;NaChar \leq -1.6 \cdot 10^{-123}:\\
\;\;\;\;\frac{-1}{Vef \cdot \left(\frac{-1}{KbT \cdot NaChar} - \frac{2}{Vef \cdot NaChar}\right)} - t\_0\\
\mathbf{elif}\;NaChar \leq 2.55:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Ev}{KbT}}} + \frac{NdChar}{1 + e^{\frac{\left(mu + Vef\right) - Ec}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;t\_2 + \frac{NdChar}{EDonor \cdot \left(\frac{1}{KbT} + \frac{\left(2 + t\_1\right) - \frac{Ec}{KbT}}{EDonor}\right)}\\
\end{array}
\end{array}
if NaChar < -1.9500000000000001e86Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 75.0%
Taylor expanded in Ec around -inf 77.2%
mul-1-neg77.2%
*-commutative77.2%
distribute-rgt-neg-in77.2%
+-commutative77.2%
mul-1-neg77.2%
unsub-neg77.2%
Simplified77.2%
if -1.9500000000000001e86 < NaChar < -1.7e-15Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 73.4%
Taylor expanded in Vef around 0 82.9%
clear-num82.9%
inv-pow82.9%
associate-+r+82.9%
metadata-eval82.9%
Applied egg-rr82.9%
unpow-182.9%
Simplified82.9%
if -1.7e-15 < NaChar < -6.9999999999999995e-73Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 56.1%
Taylor expanded in Vef around inf 62.3%
associate--l+62.3%
+-commutative62.3%
*-commutative62.3%
*-commutative62.3%
associate-*r/62.3%
metadata-eval62.3%
*-commutative62.3%
Simplified62.3%
if -6.9999999999999995e-73 < NaChar < -1.59999999999999989e-123Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 76.0%
Taylor expanded in Vef around 0 68.5%
clear-num68.3%
inv-pow68.3%
associate-+r+68.3%
metadata-eval68.3%
Applied egg-rr68.3%
unpow-168.3%
Simplified68.3%
Taylor expanded in Vef around inf 92.2%
associate-*r/92.2%
metadata-eval92.2%
Simplified92.2%
if -1.59999999999999989e-123 < NaChar < 2.5499999999999998Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 77.4%
Taylor expanded in EDonor around 0 70.5%
if 2.5499999999999998 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 71.8%
Taylor expanded in EDonor around -inf 84.3%
Final simplification75.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 (+ 1.0 (exp (/ Ev KbT)))) t_0))
(t_2
(+
(/ NaChar (+ 1.0 (exp (/ mu (- KbT)))))
(/ NdChar (+ 1.0 (exp (/ (- (+ mu Vef) Ec) KbT)))))))
(if (<= EAccept 2.4e-304)
t_1
(if (<= EAccept 3.2e-107)
t_2
(if (<= EAccept 5.6e-64)
t_1
(if (<= EAccept 3e+180)
t_2
(- (/ NaChar (+ 1.0 (exp (/ EAccept KbT)))) t_0)))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT)));
double t_1 = (NaChar / (1.0 + exp((Ev / KbT)))) - t_0;
double t_2 = (NaChar / (1.0 + exp((mu / -KbT)))) + (NdChar / (1.0 + exp((((mu + Vef) - Ec) / KbT))));
double tmp;
if (EAccept <= 2.4e-304) {
tmp = t_1;
} else if (EAccept <= 3.2e-107) {
tmp = t_2;
} else if (EAccept <= 5.6e-64) {
tmp = t_1;
} else if (EAccept <= 3e+180) {
tmp = t_2;
} else {
tmp = (NaChar / (1.0 + exp((EAccept / KbT)))) - t_0;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: t_2
real(8) :: tmp
t_0 = ndchar / ((-1.0d0) - exp(((edonor + (mu + (vef - ec))) / kbt)))
t_1 = (nachar / (1.0d0 + exp((ev / kbt)))) - t_0
t_2 = (nachar / (1.0d0 + exp((mu / -kbt)))) + (ndchar / (1.0d0 + exp((((mu + vef) - ec) / kbt))))
if (eaccept <= 2.4d-304) then
tmp = t_1
else if (eaccept <= 3.2d-107) then
tmp = t_2
else if (eaccept <= 5.6d-64) then
tmp = t_1
else if (eaccept <= 3d+180) then
tmp = t_2
else
tmp = (nachar / (1.0d0 + exp((eaccept / kbt)))) - t_0
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (-1.0 - Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)));
double t_1 = (NaChar / (1.0 + Math.exp((Ev / KbT)))) - t_0;
double t_2 = (NaChar / (1.0 + Math.exp((mu / -KbT)))) + (NdChar / (1.0 + Math.exp((((mu + Vef) - Ec) / KbT))));
double tmp;
if (EAccept <= 2.4e-304) {
tmp = t_1;
} else if (EAccept <= 3.2e-107) {
tmp = t_2;
} else if (EAccept <= 5.6e-64) {
tmp = t_1;
} else if (EAccept <= 3e+180) {
tmp = t_2;
} else {
tmp = (NaChar / (1.0 + Math.exp((EAccept / KbT)))) - t_0;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NdChar / (-1.0 - math.exp(((EDonor + (mu + (Vef - Ec))) / KbT))) t_1 = (NaChar / (1.0 + math.exp((Ev / KbT)))) - t_0 t_2 = (NaChar / (1.0 + math.exp((mu / -KbT)))) + (NdChar / (1.0 + math.exp((((mu + Vef) - Ec) / KbT)))) tmp = 0 if EAccept <= 2.4e-304: tmp = t_1 elif EAccept <= 3.2e-107: tmp = t_2 elif EAccept <= 5.6e-64: tmp = t_1 elif EAccept <= 3e+180: tmp = t_2 else: tmp = (NaChar / (1.0 + math.exp((EAccept / KbT)))) - t_0 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) t_1 = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT)))) - t_0) t_2 = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(mu / Float64(-KbT))))) + Float64(NdChar / Float64(1.0 + exp(Float64(Float64(Float64(mu + Vef) - Ec) / KbT))))) tmp = 0.0 if (EAccept <= 2.4e-304) tmp = t_1; elseif (EAccept <= 3.2e-107) tmp = t_2; elseif (EAccept <= 5.6e-64) tmp = t_1; elseif (EAccept <= 3e+180) tmp = t_2; else tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT)))) - t_0); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT))); t_1 = (NaChar / (1.0 + exp((Ev / KbT)))) - t_0; t_2 = (NaChar / (1.0 + exp((mu / -KbT)))) + (NdChar / (1.0 + exp((((mu + Vef) - Ec) / KbT)))); tmp = 0.0; if (EAccept <= 2.4e-304) tmp = t_1; elseif (EAccept <= 3.2e-107) tmp = t_2; elseif (EAccept <= 5.6e-64) tmp = t_1; elseif (EAccept <= 3e+180) tmp = t_2; else tmp = (NaChar / (1.0 + exp((EAccept / KbT)))) - t_0; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NdChar / N[(-1.0 - N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - t$95$0), $MachinePrecision]}, Block[{t$95$2 = N[(N[(NaChar / N[(1.0 + N[Exp[N[(mu / (-KbT)), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(1.0 + N[Exp[N[(N[(N[(mu + Vef), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[EAccept, 2.4e-304], t$95$1, If[LessEqual[EAccept, 3.2e-107], t$95$2, If[LessEqual[EAccept, 5.6e-64], t$95$1, If[LessEqual[EAccept, 3e+180], t$95$2, N[(N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - t$95$0), $MachinePrecision]]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{-1 - e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}}\\
t_1 := \frac{NaChar}{1 + e^{\frac{Ev}{KbT}}} - t\_0\\
t_2 := \frac{NaChar}{1 + e^{\frac{mu}{-KbT}}} + \frac{NdChar}{1 + e^{\frac{\left(mu + Vef\right) - Ec}{KbT}}}\\
\mathbf{if}\;EAccept \leq 2.4 \cdot 10^{-304}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;EAccept \leq 3.2 \cdot 10^{-107}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;EAccept \leq 5.6 \cdot 10^{-64}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;EAccept \leq 3 \cdot 10^{+180}:\\
\;\;\;\;t\_2\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}} - t\_0\\
\end{array}
\end{array}
if EAccept < 2.4000000000000001e-304 or 3.20000000000000013e-107 < EAccept < 5.60000000000000008e-64Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 72.2%
if 2.4000000000000001e-304 < EAccept < 3.20000000000000013e-107 or 5.60000000000000008e-64 < EAccept < 3.00000000000000003e180Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 74.4%
associate-*r/74.4%
mul-1-neg74.4%
Simplified74.4%
Taylor expanded in EDonor around 0 72.6%
if 3.00000000000000003e180 < EAccept Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 88.9%
Final simplification74.5%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NdChar (- -1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT)))))
(t_1 (- (/ NaChar (+ 1.0 (exp (/ Vef KbT)))) t_0)))
(if (<= EAccept 8e-302)
(- (/ NaChar (+ 1.0 (exp (/ Ev KbT)))) t_0)
(if (<= EAccept 9e+24)
t_1
(if (<= EAccept 1.15e+73)
(+
(/ NaChar (+ 1.0 (exp (/ mu (- KbT)))))
(/ NdChar (+ 1.0 (exp (/ (- (+ mu Vef) Ec) KbT)))))
(if (<= EAccept 3e+180)
t_1
(- (/ NaChar (+ 1.0 (exp (/ EAccept KbT)))) t_0)))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT)));
double t_1 = (NaChar / (1.0 + exp((Vef / KbT)))) - t_0;
double tmp;
if (EAccept <= 8e-302) {
tmp = (NaChar / (1.0 + exp((Ev / KbT)))) - t_0;
} else if (EAccept <= 9e+24) {
tmp = t_1;
} else if (EAccept <= 1.15e+73) {
tmp = (NaChar / (1.0 + exp((mu / -KbT)))) + (NdChar / (1.0 + exp((((mu + Vef) - Ec) / KbT))));
} else if (EAccept <= 3e+180) {
tmp = t_1;
} else {
tmp = (NaChar / (1.0 + exp((EAccept / KbT)))) - t_0;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = ndchar / ((-1.0d0) - exp(((edonor + (mu + (vef - ec))) / kbt)))
t_1 = (nachar / (1.0d0 + exp((vef / kbt)))) - t_0
if (eaccept <= 8d-302) then
tmp = (nachar / (1.0d0 + exp((ev / kbt)))) - t_0
else if (eaccept <= 9d+24) then
tmp = t_1
else if (eaccept <= 1.15d+73) then
tmp = (nachar / (1.0d0 + exp((mu / -kbt)))) + (ndchar / (1.0d0 + exp((((mu + vef) - ec) / kbt))))
else if (eaccept <= 3d+180) then
tmp = t_1
else
tmp = (nachar / (1.0d0 + exp((eaccept / kbt)))) - t_0
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (-1.0 - Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)));
double t_1 = (NaChar / (1.0 + Math.exp((Vef / KbT)))) - t_0;
double tmp;
if (EAccept <= 8e-302) {
tmp = (NaChar / (1.0 + Math.exp((Ev / KbT)))) - t_0;
} else if (EAccept <= 9e+24) {
tmp = t_1;
} else if (EAccept <= 1.15e+73) {
tmp = (NaChar / (1.0 + Math.exp((mu / -KbT)))) + (NdChar / (1.0 + Math.exp((((mu + Vef) - Ec) / KbT))));
} else if (EAccept <= 3e+180) {
tmp = t_1;
} else {
tmp = (NaChar / (1.0 + Math.exp((EAccept / KbT)))) - t_0;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NdChar / (-1.0 - math.exp(((EDonor + (mu + (Vef - Ec))) / KbT))) t_1 = (NaChar / (1.0 + math.exp((Vef / KbT)))) - t_0 tmp = 0 if EAccept <= 8e-302: tmp = (NaChar / (1.0 + math.exp((Ev / KbT)))) - t_0 elif EAccept <= 9e+24: tmp = t_1 elif EAccept <= 1.15e+73: tmp = (NaChar / (1.0 + math.exp((mu / -KbT)))) + (NdChar / (1.0 + math.exp((((mu + Vef) - Ec) / KbT)))) elif EAccept <= 3e+180: tmp = t_1 else: tmp = (NaChar / (1.0 + math.exp((EAccept / KbT)))) - t_0 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) t_1 = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Vef / KbT)))) - t_0) tmp = 0.0 if (EAccept <= 8e-302) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT)))) - t_0); elseif (EAccept <= 9e+24) tmp = t_1; elseif (EAccept <= 1.15e+73) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(mu / Float64(-KbT))))) + Float64(NdChar / Float64(1.0 + exp(Float64(Float64(Float64(mu + Vef) - Ec) / KbT))))); elseif (EAccept <= 3e+180) tmp = t_1; else tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT)))) - t_0); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT))); t_1 = (NaChar / (1.0 + exp((Vef / KbT)))) - t_0; tmp = 0.0; if (EAccept <= 8e-302) tmp = (NaChar / (1.0 + exp((Ev / KbT)))) - t_0; elseif (EAccept <= 9e+24) tmp = t_1; elseif (EAccept <= 1.15e+73) tmp = (NaChar / (1.0 + exp((mu / -KbT)))) + (NdChar / (1.0 + exp((((mu + Vef) - Ec) / KbT)))); elseif (EAccept <= 3e+180) tmp = t_1; else tmp = (NaChar / (1.0 + exp((EAccept / KbT)))) - t_0; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NdChar / N[(-1.0 - N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NaChar / N[(1.0 + N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - t$95$0), $MachinePrecision]}, If[LessEqual[EAccept, 8e-302], N[(N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - t$95$0), $MachinePrecision], If[LessEqual[EAccept, 9e+24], t$95$1, If[LessEqual[EAccept, 1.15e+73], N[(N[(NaChar / N[(1.0 + N[Exp[N[(mu / (-KbT)), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(1.0 + N[Exp[N[(N[(N[(mu + Vef), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[EAccept, 3e+180], t$95$1, N[(N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - t$95$0), $MachinePrecision]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{-1 - e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}}\\
t_1 := \frac{NaChar}{1 + e^{\frac{Vef}{KbT}}} - t\_0\\
\mathbf{if}\;EAccept \leq 8 \cdot 10^{-302}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Ev}{KbT}}} - t\_0\\
\mathbf{elif}\;EAccept \leq 9 \cdot 10^{+24}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;EAccept \leq 1.15 \cdot 10^{+73}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{mu}{-KbT}}} + \frac{NdChar}{1 + e^{\frac{\left(mu + Vef\right) - Ec}{KbT}}}\\
\mathbf{elif}\;EAccept \leq 3 \cdot 10^{+180}:\\
\;\;\;\;t\_1\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}} - t\_0\\
\end{array}
\end{array}
if EAccept < 7.9999999999999997e-302Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 71.9%
if 7.9999999999999997e-302 < EAccept < 9.00000000000000039e24 or 1.15e73 < EAccept < 3.00000000000000003e180Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 71.6%
if 9.00000000000000039e24 < EAccept < 1.15e73Initial program 99.8%
Simplified99.8%
Taylor expanded in mu around inf 78.0%
associate-*r/78.0%
mul-1-neg78.0%
Simplified78.0%
Taylor expanded in EDonor around 0 78.0%
if 3.00000000000000003e180 < EAccept Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 88.9%
Final simplification74.2%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (exp (/ EAccept KbT)))
(t_1
(+
(/ NaChar (+ 1.0 (exp (/ mu (- KbT)))))
(/ NdChar (+ 1.0 (exp (/ (- (+ mu Vef) Ec) KbT)))))))
(if (<= mu -9.6e+95)
t_1
(if (<= mu 1.18e-39)
(-
(/ NaChar (+ 1.0 t_0))
(/ NdChar (- -1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT)))))
(if (<= mu 3.2e+35)
(+
(/ NaChar (+ 1.0 (exp (/ (+ Vef (- Ev (- mu EAccept))) KbT))))
(/
NdChar
(-
(+
2.0
(+ (/ EDonor KbT) (* Vef (+ (/ 1.0 KbT) (/ mu (* Vef KbT))))))
(/ Ec KbT))))
(if (<= mu 6e+139)
(- (/ NdChar (+ 1.0 (exp (/ Vef KbT)))) (/ NaChar (- -1.0 t_0)))
t_1))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = exp((EAccept / KbT));
double t_1 = (NaChar / (1.0 + exp((mu / -KbT)))) + (NdChar / (1.0 + exp((((mu + Vef) - Ec) / KbT))));
double tmp;
if (mu <= -9.6e+95) {
tmp = t_1;
} else if (mu <= 1.18e-39) {
tmp = (NaChar / (1.0 + t_0)) - (NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT))));
} else if (mu <= 3.2e+35) {
tmp = (NaChar / (1.0 + exp(((Vef + (Ev - (mu - EAccept))) / KbT)))) + (NdChar / ((2.0 + ((EDonor / KbT) + (Vef * ((1.0 / KbT) + (mu / (Vef * KbT)))))) - (Ec / KbT)));
} else if (mu <= 6e+139) {
tmp = (NdChar / (1.0 + exp((Vef / KbT)))) - (NaChar / (-1.0 - t_0));
} else {
tmp = t_1;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = exp((eaccept / kbt))
t_1 = (nachar / (1.0d0 + exp((mu / -kbt)))) + (ndchar / (1.0d0 + exp((((mu + vef) - ec) / kbt))))
if (mu <= (-9.6d+95)) then
tmp = t_1
else if (mu <= 1.18d-39) then
tmp = (nachar / (1.0d0 + t_0)) - (ndchar / ((-1.0d0) - exp(((edonor + (mu + (vef - ec))) / kbt))))
else if (mu <= 3.2d+35) then
tmp = (nachar / (1.0d0 + exp(((vef + (ev - (mu - eaccept))) / kbt)))) + (ndchar / ((2.0d0 + ((edonor / kbt) + (vef * ((1.0d0 / kbt) + (mu / (vef * kbt)))))) - (ec / kbt)))
else if (mu <= 6d+139) then
tmp = (ndchar / (1.0d0 + exp((vef / kbt)))) - (nachar / ((-1.0d0) - t_0))
else
tmp = t_1
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = Math.exp((EAccept / KbT));
double t_1 = (NaChar / (1.0 + Math.exp((mu / -KbT)))) + (NdChar / (1.0 + Math.exp((((mu + Vef) - Ec) / KbT))));
double tmp;
if (mu <= -9.6e+95) {
tmp = t_1;
} else if (mu <= 1.18e-39) {
tmp = (NaChar / (1.0 + t_0)) - (NdChar / (-1.0 - Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT))));
} else if (mu <= 3.2e+35) {
tmp = (NaChar / (1.0 + Math.exp(((Vef + (Ev - (mu - EAccept))) / KbT)))) + (NdChar / ((2.0 + ((EDonor / KbT) + (Vef * ((1.0 / KbT) + (mu / (Vef * KbT)))))) - (Ec / KbT)));
} else if (mu <= 6e+139) {
tmp = (NdChar / (1.0 + Math.exp((Vef / KbT)))) - (NaChar / (-1.0 - t_0));
} else {
tmp = t_1;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = math.exp((EAccept / KbT)) t_1 = (NaChar / (1.0 + math.exp((mu / -KbT)))) + (NdChar / (1.0 + math.exp((((mu + Vef) - Ec) / KbT)))) tmp = 0 if mu <= -9.6e+95: tmp = t_1 elif mu <= 1.18e-39: tmp = (NaChar / (1.0 + t_0)) - (NdChar / (-1.0 - math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) elif mu <= 3.2e+35: tmp = (NaChar / (1.0 + math.exp(((Vef + (Ev - (mu - EAccept))) / KbT)))) + (NdChar / ((2.0 + ((EDonor / KbT) + (Vef * ((1.0 / KbT) + (mu / (Vef * KbT)))))) - (Ec / KbT))) elif mu <= 6e+139: tmp = (NdChar / (1.0 + math.exp((Vef / KbT)))) - (NaChar / (-1.0 - t_0)) else: tmp = t_1 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = exp(Float64(EAccept / KbT)) t_1 = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(mu / Float64(-KbT))))) + Float64(NdChar / Float64(1.0 + exp(Float64(Float64(Float64(mu + Vef) - Ec) / KbT))))) tmp = 0.0 if (mu <= -9.6e+95) tmp = t_1; elseif (mu <= 1.18e-39) tmp = Float64(Float64(NaChar / Float64(1.0 + t_0)) - Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT))))); elseif (mu <= 3.2e+35) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Ev - Float64(mu - EAccept))) / KbT)))) + Float64(NdChar / Float64(Float64(2.0 + Float64(Float64(EDonor / KbT) + Float64(Vef * Float64(Float64(1.0 / KbT) + Float64(mu / Float64(Vef * KbT)))))) - Float64(Ec / KbT)))); elseif (mu <= 6e+139) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Vef / KbT)))) - Float64(NaChar / Float64(-1.0 - t_0))); else tmp = t_1; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = exp((EAccept / KbT)); t_1 = (NaChar / (1.0 + exp((mu / -KbT)))) + (NdChar / (1.0 + exp((((mu + Vef) - Ec) / KbT)))); tmp = 0.0; if (mu <= -9.6e+95) tmp = t_1; elseif (mu <= 1.18e-39) tmp = (NaChar / (1.0 + t_0)) - (NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT)))); elseif (mu <= 3.2e+35) tmp = (NaChar / (1.0 + exp(((Vef + (Ev - (mu - EAccept))) / KbT)))) + (NdChar / ((2.0 + ((EDonor / KbT) + (Vef * ((1.0 / KbT) + (mu / (Vef * KbT)))))) - (Ec / KbT))); elseif (mu <= 6e+139) tmp = (NdChar / (1.0 + exp((Vef / KbT)))) - (NaChar / (-1.0 - t_0)); else tmp = t_1; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[(N[(NaChar / N[(1.0 + N[Exp[N[(mu / (-KbT)), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(1.0 + N[Exp[N[(N[(N[(mu + Vef), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[mu, -9.6e+95], t$95$1, If[LessEqual[mu, 1.18e-39], N[(N[(NaChar / N[(1.0 + t$95$0), $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], If[LessEqual[mu, 3.2e+35], N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(Ev - N[(mu - EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(N[(2.0 + N[(N[(EDonor / KbT), $MachinePrecision] + N[(Vef * N[(N[(1.0 / KbT), $MachinePrecision] + N[(mu / N[(Vef * KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[mu, 6e+139], N[(N[(NdChar / N[(1.0 + N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(NaChar / N[(-1.0 - t$95$0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$1]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := e^{\frac{EAccept}{KbT}}\\
t_1 := \frac{NaChar}{1 + e^{\frac{mu}{-KbT}}} + \frac{NdChar}{1 + e^{\frac{\left(mu + Vef\right) - Ec}{KbT}}}\\
\mathbf{if}\;mu \leq -9.6 \cdot 10^{+95}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;mu \leq 1.18 \cdot 10^{-39}:\\
\;\;\;\;\frac{NaChar}{1 + t\_0} - \frac{NdChar}{-1 - e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}}\\
\mathbf{elif}\;mu \leq 3.2 \cdot 10^{+35}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Vef + \left(Ev - \left(mu - EAccept\right)\right)}{KbT}}} + \frac{NdChar}{\left(2 + \left(\frac{EDonor}{KbT} + Vef \cdot \left(\frac{1}{KbT} + \frac{mu}{Vef \cdot KbT}\right)\right)\right) - \frac{Ec}{KbT}}\\
\mathbf{elif}\;mu \leq 6 \cdot 10^{+139}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{Vef}{KbT}}} - \frac{NaChar}{-1 - t\_0}\\
\mathbf{else}:\\
\;\;\;\;t\_1\\
\end{array}
\end{array}
if mu < -9.6000000000000002e95 or 5.9999999999999999e139 < mu Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 89.8%
associate-*r/89.8%
mul-1-neg89.8%
Simplified89.8%
Taylor expanded in EDonor around 0 87.7%
if -9.6000000000000002e95 < mu < 1.17999999999999993e-39Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 73.6%
if 1.17999999999999993e-39 < mu < 3.19999999999999983e35Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 84.6%
Taylor expanded in Vef around inf 89.8%
*-commutative89.8%
Simplified89.8%
if 3.19999999999999983e35 < mu < 5.9999999999999999e139Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 78.3%
Taylor expanded in Vef around inf 78.3%
Final simplification80.1%
(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 (+ (/ Vef KbT) (/ mu KbT)))
(t_2 (/ NaChar (+ 1.0 (exp (/ (+ Vef (- Ev (- mu EAccept))) KbT))))))
(if (<= NaChar -5e+167)
(+
t_2
(/ NdChar (* Ec (+ (/ (+ 2.0 (+ (/ EDonor KbT) t_1)) Ec) (/ -1.0 KbT)))))
(if (<= NaChar -2.3e-307)
(- (/ NaChar (+ 1.0 (exp (/ mu (- KbT))))) t_0)
(if (<= NaChar 2.0)
(- (/ NaChar (+ 1.0 (exp (/ Ev KbT)))) t_0)
(+
t_2
(/
NdChar
(*
EDonor
(+ (/ 1.0 KbT) (/ (- (+ 2.0 t_1) (/ Ec KbT)) EDonor))))))))))
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 = (Vef / KbT) + (mu / KbT);
double t_2 = NaChar / (1.0 + exp(((Vef + (Ev - (mu - EAccept))) / KbT)));
double tmp;
if (NaChar <= -5e+167) {
tmp = t_2 + (NdChar / (Ec * (((2.0 + ((EDonor / KbT) + t_1)) / Ec) + (-1.0 / KbT))));
} else if (NaChar <= -2.3e-307) {
tmp = (NaChar / (1.0 + exp((mu / -KbT)))) - t_0;
} else if (NaChar <= 2.0) {
tmp = (NaChar / (1.0 + exp((Ev / KbT)))) - t_0;
} else {
tmp = t_2 + (NdChar / (EDonor * ((1.0 / KbT) + (((2.0 + t_1) - (Ec / KbT)) / EDonor))));
}
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 = (vef / kbt) + (mu / kbt)
t_2 = nachar / (1.0d0 + exp(((vef + (ev - (mu - eaccept))) / kbt)))
if (nachar <= (-5d+167)) then
tmp = t_2 + (ndchar / (ec * (((2.0d0 + ((edonor / kbt) + t_1)) / ec) + ((-1.0d0) / kbt))))
else if (nachar <= (-2.3d-307)) then
tmp = (nachar / (1.0d0 + exp((mu / -kbt)))) - t_0
else if (nachar <= 2.0d0) then
tmp = (nachar / (1.0d0 + exp((ev / kbt)))) - t_0
else
tmp = t_2 + (ndchar / (edonor * ((1.0d0 / kbt) + (((2.0d0 + t_1) - (ec / kbt)) / edonor))))
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 = (Vef / KbT) + (mu / KbT);
double t_2 = NaChar / (1.0 + Math.exp(((Vef + (Ev - (mu - EAccept))) / KbT)));
double tmp;
if (NaChar <= -5e+167) {
tmp = t_2 + (NdChar / (Ec * (((2.0 + ((EDonor / KbT) + t_1)) / Ec) + (-1.0 / KbT))));
} else if (NaChar <= -2.3e-307) {
tmp = (NaChar / (1.0 + Math.exp((mu / -KbT)))) - t_0;
} else if (NaChar <= 2.0) {
tmp = (NaChar / (1.0 + Math.exp((Ev / KbT)))) - t_0;
} else {
tmp = t_2 + (NdChar / (EDonor * ((1.0 / KbT) + (((2.0 + t_1) - (Ec / KbT)) / EDonor))));
}
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 = (Vef / KbT) + (mu / KbT) t_2 = NaChar / (1.0 + math.exp(((Vef + (Ev - (mu - EAccept))) / KbT))) tmp = 0 if NaChar <= -5e+167: tmp = t_2 + (NdChar / (Ec * (((2.0 + ((EDonor / KbT) + t_1)) / Ec) + (-1.0 / KbT)))) elif NaChar <= -2.3e-307: tmp = (NaChar / (1.0 + math.exp((mu / -KbT)))) - t_0 elif NaChar <= 2.0: tmp = (NaChar / (1.0 + math.exp((Ev / KbT)))) - t_0 else: tmp = t_2 + (NdChar / (EDonor * ((1.0 / KbT) + (((2.0 + t_1) - (Ec / KbT)) / EDonor)))) 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(Vef / KbT) + Float64(mu / KbT)) t_2 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Ev - Float64(mu - EAccept))) / KbT)))) tmp = 0.0 if (NaChar <= -5e+167) tmp = Float64(t_2 + Float64(NdChar / Float64(Ec * Float64(Float64(Float64(2.0 + Float64(Float64(EDonor / KbT) + t_1)) / Ec) + Float64(-1.0 / KbT))))); elseif (NaChar <= -2.3e-307) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(mu / Float64(-KbT))))) - t_0); elseif (NaChar <= 2.0) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT)))) - t_0); else tmp = Float64(t_2 + Float64(NdChar / Float64(EDonor * Float64(Float64(1.0 / KbT) + Float64(Float64(Float64(2.0 + t_1) - Float64(Ec / KbT)) / EDonor))))); 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 = (Vef / KbT) + (mu / KbT); t_2 = NaChar / (1.0 + exp(((Vef + (Ev - (mu - EAccept))) / KbT))); tmp = 0.0; if (NaChar <= -5e+167) tmp = t_2 + (NdChar / (Ec * (((2.0 + ((EDonor / KbT) + t_1)) / Ec) + (-1.0 / KbT)))); elseif (NaChar <= -2.3e-307) tmp = (NaChar / (1.0 + exp((mu / -KbT)))) - t_0; elseif (NaChar <= 2.0) tmp = (NaChar / (1.0 + exp((Ev / KbT)))) - t_0; else tmp = t_2 + (NdChar / (EDonor * ((1.0 / KbT) + (((2.0 + t_1) - (Ec / KbT)) / EDonor)))); 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[(Vef / KbT), $MachinePrecision] + N[(mu / KbT), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(Ev - N[(mu - EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -5e+167], N[(t$95$2 + N[(NdChar / N[(Ec * N[(N[(N[(2.0 + N[(N[(EDonor / KbT), $MachinePrecision] + t$95$1), $MachinePrecision]), $MachinePrecision] / Ec), $MachinePrecision] + N[(-1.0 / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, -2.3e-307], N[(N[(NaChar / N[(1.0 + N[Exp[N[(mu / (-KbT)), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - t$95$0), $MachinePrecision], If[LessEqual[NaChar, 2.0], N[(N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - t$95$0), $MachinePrecision], N[(t$95$2 + N[(NdChar / N[(EDonor * N[(N[(1.0 / KbT), $MachinePrecision] + N[(N[(N[(2.0 + t$95$1), $MachinePrecision] - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision] / EDonor), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{-1 - e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}}\\
t_1 := \frac{Vef}{KbT} + \frac{mu}{KbT}\\
t_2 := \frac{NaChar}{1 + e^{\frac{Vef + \left(Ev - \left(mu - EAccept\right)\right)}{KbT}}}\\
\mathbf{if}\;NaChar \leq -5 \cdot 10^{+167}:\\
\;\;\;\;t\_2 + \frac{NdChar}{Ec \cdot \left(\frac{2 + \left(\frac{EDonor}{KbT} + t\_1\right)}{Ec} + \frac{-1}{KbT}\right)}\\
\mathbf{elif}\;NaChar \leq -2.3 \cdot 10^{-307}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{mu}{-KbT}}} - t\_0\\
\mathbf{elif}\;NaChar \leq 2:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Ev}{KbT}}} - t\_0\\
\mathbf{else}:\\
\;\;\;\;t\_2 + \frac{NdChar}{EDonor \cdot \left(\frac{1}{KbT} + \frac{\left(2 + t\_1\right) - \frac{Ec}{KbT}}{EDonor}\right)}\\
\end{array}
\end{array}
if NaChar < -4.9999999999999997e167Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 80.0%
Taylor expanded in Ec around -inf 83.2%
mul-1-neg83.2%
*-commutative83.2%
distribute-rgt-neg-in83.2%
+-commutative83.2%
mul-1-neg83.2%
unsub-neg83.2%
Simplified83.2%
if -4.9999999999999997e167 < NaChar < -2.2999999999999999e-307Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 78.9%
associate-*r/78.9%
mul-1-neg78.9%
Simplified78.9%
if -2.2999999999999999e-307 < NaChar < 2Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 81.4%
if 2 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 71.8%
Taylor expanded in EDonor around -inf 84.3%
Final simplification81.4%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NdChar (+ 1.0 (exp (/ (- (+ mu Vef) Ec) KbT)))))
(t_1 (+ (/ Vef KbT) (/ mu KbT)))
(t_2 (/ NaChar (+ 1.0 (exp (/ (+ Vef (- Ev (- mu EAccept))) KbT))))))
(if (<= NaChar -1.9e+164)
(+
t_2
(/ NdChar (* Ec (+ (/ (+ 2.0 (+ (/ EDonor KbT) t_1)) Ec) (/ -1.0 KbT)))))
(if (<= NaChar 4.8e-305)
(+ (/ NaChar (+ 1.0 (exp (/ mu (- KbT))))) t_0)
(if (<= NaChar 8.5)
(+ (/ NaChar (+ 1.0 (exp (/ Ev KbT)))) t_0)
(+
t_2
(/
NdChar
(*
EDonor
(+ (/ 1.0 KbT) (/ (- (+ 2.0 t_1) (/ Ec KbT)) EDonor))))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (1.0 + exp((((mu + Vef) - Ec) / KbT)));
double t_1 = (Vef / KbT) + (mu / KbT);
double t_2 = NaChar / (1.0 + exp(((Vef + (Ev - (mu - EAccept))) / KbT)));
double tmp;
if (NaChar <= -1.9e+164) {
tmp = t_2 + (NdChar / (Ec * (((2.0 + ((EDonor / KbT) + t_1)) / Ec) + (-1.0 / KbT))));
} else if (NaChar <= 4.8e-305) {
tmp = (NaChar / (1.0 + exp((mu / -KbT)))) + t_0;
} else if (NaChar <= 8.5) {
tmp = (NaChar / (1.0 + exp((Ev / KbT)))) + t_0;
} else {
tmp = t_2 + (NdChar / (EDonor * ((1.0 / KbT) + (((2.0 + t_1) - (Ec / KbT)) / EDonor))));
}
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((((mu + vef) - ec) / kbt)))
t_1 = (vef / kbt) + (mu / kbt)
t_2 = nachar / (1.0d0 + exp(((vef + (ev - (mu - eaccept))) / kbt)))
if (nachar <= (-1.9d+164)) then
tmp = t_2 + (ndchar / (ec * (((2.0d0 + ((edonor / kbt) + t_1)) / ec) + ((-1.0d0) / kbt))))
else if (nachar <= 4.8d-305) then
tmp = (nachar / (1.0d0 + exp((mu / -kbt)))) + t_0
else if (nachar <= 8.5d0) then
tmp = (nachar / (1.0d0 + exp((ev / kbt)))) + t_0
else
tmp = t_2 + (ndchar / (edonor * ((1.0d0 / kbt) + (((2.0d0 + t_1) - (ec / kbt)) / edonor))))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (1.0 + Math.exp((((mu + Vef) - Ec) / KbT)));
double t_1 = (Vef / KbT) + (mu / KbT);
double t_2 = NaChar / (1.0 + Math.exp(((Vef + (Ev - (mu - EAccept))) / KbT)));
double tmp;
if (NaChar <= -1.9e+164) {
tmp = t_2 + (NdChar / (Ec * (((2.0 + ((EDonor / KbT) + t_1)) / Ec) + (-1.0 / KbT))));
} else if (NaChar <= 4.8e-305) {
tmp = (NaChar / (1.0 + Math.exp((mu / -KbT)))) + t_0;
} else if (NaChar <= 8.5) {
tmp = (NaChar / (1.0 + Math.exp((Ev / KbT)))) + t_0;
} else {
tmp = t_2 + (NdChar / (EDonor * ((1.0 / KbT) + (((2.0 + t_1) - (Ec / KbT)) / EDonor))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NdChar / (1.0 + math.exp((((mu + Vef) - Ec) / KbT))) t_1 = (Vef / KbT) + (mu / KbT) t_2 = NaChar / (1.0 + math.exp(((Vef + (Ev - (mu - EAccept))) / KbT))) tmp = 0 if NaChar <= -1.9e+164: tmp = t_2 + (NdChar / (Ec * (((2.0 + ((EDonor / KbT) + t_1)) / Ec) + (-1.0 / KbT)))) elif NaChar <= 4.8e-305: tmp = (NaChar / (1.0 + math.exp((mu / -KbT)))) + t_0 elif NaChar <= 8.5: tmp = (NaChar / (1.0 + math.exp((Ev / KbT)))) + t_0 else: tmp = t_2 + (NdChar / (EDonor * ((1.0 / KbT) + (((2.0 + t_1) - (Ec / KbT)) / EDonor)))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NdChar / Float64(1.0 + exp(Float64(Float64(Float64(mu + Vef) - Ec) / KbT)))) t_1 = Float64(Float64(Vef / KbT) + Float64(mu / KbT)) t_2 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Ev - Float64(mu - EAccept))) / KbT)))) tmp = 0.0 if (NaChar <= -1.9e+164) tmp = Float64(t_2 + Float64(NdChar / Float64(Ec * Float64(Float64(Float64(2.0 + Float64(Float64(EDonor / KbT) + t_1)) / Ec) + Float64(-1.0 / KbT))))); elseif (NaChar <= 4.8e-305) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(mu / Float64(-KbT))))) + t_0); elseif (NaChar <= 8.5) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT)))) + t_0); else tmp = Float64(t_2 + Float64(NdChar / Float64(EDonor * Float64(Float64(1.0 / KbT) + Float64(Float64(Float64(2.0 + t_1) - Float64(Ec / KbT)) / EDonor))))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NdChar / (1.0 + exp((((mu + Vef) - Ec) / KbT))); t_1 = (Vef / KbT) + (mu / KbT); t_2 = NaChar / (1.0 + exp(((Vef + (Ev - (mu - EAccept))) / KbT))); tmp = 0.0; if (NaChar <= -1.9e+164) tmp = t_2 + (NdChar / (Ec * (((2.0 + ((EDonor / KbT) + t_1)) / Ec) + (-1.0 / KbT)))); elseif (NaChar <= 4.8e-305) tmp = (NaChar / (1.0 + exp((mu / -KbT)))) + t_0; elseif (NaChar <= 8.5) tmp = (NaChar / (1.0 + exp((Ev / KbT)))) + t_0; else tmp = t_2 + (NdChar / (EDonor * ((1.0 / KbT) + (((2.0 + t_1) - (Ec / KbT)) / EDonor)))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NdChar / N[(1.0 + N[Exp[N[(N[(N[(mu + Vef), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[(Vef / KbT), $MachinePrecision] + N[(mu / KbT), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(Ev - N[(mu - EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -1.9e+164], N[(t$95$2 + N[(NdChar / N[(Ec * N[(N[(N[(2.0 + N[(N[(EDonor / KbT), $MachinePrecision] + t$95$1), $MachinePrecision]), $MachinePrecision] / Ec), $MachinePrecision] + N[(-1.0 / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 4.8e-305], N[(N[(NaChar / N[(1.0 + N[Exp[N[(mu / (-KbT)), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + t$95$0), $MachinePrecision], If[LessEqual[NaChar, 8.5], N[(N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + t$95$0), $MachinePrecision], N[(t$95$2 + N[(NdChar / N[(EDonor * N[(N[(1.0 / KbT), $MachinePrecision] + N[(N[(N[(2.0 + t$95$1), $MachinePrecision] - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision] / EDonor), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{1 + e^{\frac{\left(mu + Vef\right) - Ec}{KbT}}}\\
t_1 := \frac{Vef}{KbT} + \frac{mu}{KbT}\\
t_2 := \frac{NaChar}{1 + e^{\frac{Vef + \left(Ev - \left(mu - EAccept\right)\right)}{KbT}}}\\
\mathbf{if}\;NaChar \leq -1.9 \cdot 10^{+164}:\\
\;\;\;\;t\_2 + \frac{NdChar}{Ec \cdot \left(\frac{2 + \left(\frac{EDonor}{KbT} + t\_1\right)}{Ec} + \frac{-1}{KbT}\right)}\\
\mathbf{elif}\;NaChar \leq 4.8 \cdot 10^{-305}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{mu}{-KbT}}} + t\_0\\
\mathbf{elif}\;NaChar \leq 8.5:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Ev}{KbT}}} + t\_0\\
\mathbf{else}:\\
\;\;\;\;t\_2 + \frac{NdChar}{EDonor \cdot \left(\frac{1}{KbT} + \frac{\left(2 + t\_1\right) - \frac{Ec}{KbT}}{EDonor}\right)}\\
\end{array}
\end{array}
if NaChar < -1.90000000000000011e164Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 80.0%
Taylor expanded in Ec around -inf 83.2%
mul-1-neg83.2%
*-commutative83.2%
distribute-rgt-neg-in83.2%
+-commutative83.2%
mul-1-neg83.2%
unsub-neg83.2%
Simplified83.2%
if -1.90000000000000011e164 < NaChar < 4.80000000000000039e-305Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 78.9%
associate-*r/78.9%
mul-1-neg78.9%
Simplified78.9%
Taylor expanded in EDonor around 0 71.8%
if 4.80000000000000039e-305 < NaChar < 8.5Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 81.4%
Taylor expanded in EDonor around 0 75.8%
if 8.5 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 71.8%
Taylor expanded in EDonor around -inf 84.3%
Final simplification77.3%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NdChar (- -1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT)))))
(t_1 (/ NaChar (+ 1.0 (exp (/ (+ Vef (- Ev (- mu EAccept))) KbT))))))
(if (<= NaChar -1.9e+86)
(+
t_1
(/
NdChar
(*
Ec
(+
(/ (+ 2.0 (+ (/ EDonor KbT) (+ (/ Vef KbT) (/ mu KbT)))) Ec)
(/ -1.0 KbT)))))
(if (<= NaChar -2.3e-15)
(- (/ 1.0 (/ (+ 2.0 (/ Vef KbT)) NaChar)) t_0)
(if (<= NaChar -1.85e-75)
(+ t_1 (/ NdChar (+ 2.0 (/ (- (+ EDonor (+ mu Vef)) Ec) KbT))))
(if (<= NaChar 1.48e-12)
(-
(/ -1.0 (* Vef (- (/ -1.0 (* KbT NaChar)) (/ 2.0 (* Vef NaChar)))))
t_0)
(+
t_1
(/
NdChar
(-
(+
2.0
(*
EDonor
(+
(/ 1.0 KbT)
(+ (/ (/ Vef EDonor) KbT) (/ (/ mu EDonor) KbT)))))
(/ Ec KbT))))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT)));
double t_1 = NaChar / (1.0 + exp(((Vef + (Ev - (mu - EAccept))) / KbT)));
double tmp;
if (NaChar <= -1.9e+86) {
tmp = t_1 + (NdChar / (Ec * (((2.0 + ((EDonor / KbT) + ((Vef / KbT) + (mu / KbT)))) / Ec) + (-1.0 / KbT))));
} else if (NaChar <= -2.3e-15) {
tmp = (1.0 / ((2.0 + (Vef / KbT)) / NaChar)) - t_0;
} else if (NaChar <= -1.85e-75) {
tmp = t_1 + (NdChar / (2.0 + (((EDonor + (mu + Vef)) - Ec) / KbT)));
} else if (NaChar <= 1.48e-12) {
tmp = (-1.0 / (Vef * ((-1.0 / (KbT * NaChar)) - (2.0 / (Vef * NaChar))))) - t_0;
} else {
tmp = t_1 + (NdChar / ((2.0 + (EDonor * ((1.0 / KbT) + (((Vef / EDonor) / KbT) + ((mu / EDonor) / KbT))))) - (Ec / KbT)));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = ndchar / ((-1.0d0) - exp(((edonor + (mu + (vef - ec))) / kbt)))
t_1 = nachar / (1.0d0 + exp(((vef + (ev - (mu - eaccept))) / kbt)))
if (nachar <= (-1.9d+86)) then
tmp = t_1 + (ndchar / (ec * (((2.0d0 + ((edonor / kbt) + ((vef / kbt) + (mu / kbt)))) / ec) + ((-1.0d0) / kbt))))
else if (nachar <= (-2.3d-15)) then
tmp = (1.0d0 / ((2.0d0 + (vef / kbt)) / nachar)) - t_0
else if (nachar <= (-1.85d-75)) then
tmp = t_1 + (ndchar / (2.0d0 + (((edonor + (mu + vef)) - ec) / kbt)))
else if (nachar <= 1.48d-12) then
tmp = ((-1.0d0) / (vef * (((-1.0d0) / (kbt * nachar)) - (2.0d0 / (vef * nachar))))) - t_0
else
tmp = t_1 + (ndchar / ((2.0d0 + (edonor * ((1.0d0 / kbt) + (((vef / edonor) / kbt) + ((mu / edonor) / kbt))))) - (ec / kbt)))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (-1.0 - Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)));
double t_1 = NaChar / (1.0 + Math.exp(((Vef + (Ev - (mu - EAccept))) / KbT)));
double tmp;
if (NaChar <= -1.9e+86) {
tmp = t_1 + (NdChar / (Ec * (((2.0 + ((EDonor / KbT) + ((Vef / KbT) + (mu / KbT)))) / Ec) + (-1.0 / KbT))));
} else if (NaChar <= -2.3e-15) {
tmp = (1.0 / ((2.0 + (Vef / KbT)) / NaChar)) - t_0;
} else if (NaChar <= -1.85e-75) {
tmp = t_1 + (NdChar / (2.0 + (((EDonor + (mu + Vef)) - Ec) / KbT)));
} else if (NaChar <= 1.48e-12) {
tmp = (-1.0 / (Vef * ((-1.0 / (KbT * NaChar)) - (2.0 / (Vef * NaChar))))) - t_0;
} else {
tmp = t_1 + (NdChar / ((2.0 + (EDonor * ((1.0 / KbT) + (((Vef / EDonor) / KbT) + ((mu / EDonor) / KbT))))) - (Ec / KbT)));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NdChar / (-1.0 - math.exp(((EDonor + (mu + (Vef - Ec))) / KbT))) t_1 = NaChar / (1.0 + math.exp(((Vef + (Ev - (mu - EAccept))) / KbT))) tmp = 0 if NaChar <= -1.9e+86: tmp = t_1 + (NdChar / (Ec * (((2.0 + ((EDonor / KbT) + ((Vef / KbT) + (mu / KbT)))) / Ec) + (-1.0 / KbT)))) elif NaChar <= -2.3e-15: tmp = (1.0 / ((2.0 + (Vef / KbT)) / NaChar)) - t_0 elif NaChar <= -1.85e-75: tmp = t_1 + (NdChar / (2.0 + (((EDonor + (mu + Vef)) - Ec) / KbT))) elif NaChar <= 1.48e-12: tmp = (-1.0 / (Vef * ((-1.0 / (KbT * NaChar)) - (2.0 / (Vef * NaChar))))) - t_0 else: tmp = t_1 + (NdChar / ((2.0 + (EDonor * ((1.0 / KbT) + (((Vef / EDonor) / KbT) + ((mu / EDonor) / KbT))))) - (Ec / KbT))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) t_1 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Ev - Float64(mu - EAccept))) / KbT)))) tmp = 0.0 if (NaChar <= -1.9e+86) tmp = Float64(t_1 + Float64(NdChar / Float64(Ec * Float64(Float64(Float64(2.0 + Float64(Float64(EDonor / KbT) + Float64(Float64(Vef / KbT) + Float64(mu / KbT)))) / Ec) + Float64(-1.0 / KbT))))); elseif (NaChar <= -2.3e-15) tmp = Float64(Float64(1.0 / Float64(Float64(2.0 + Float64(Vef / KbT)) / NaChar)) - t_0); elseif (NaChar <= -1.85e-75) tmp = Float64(t_1 + Float64(NdChar / Float64(2.0 + Float64(Float64(Float64(EDonor + Float64(mu + Vef)) - Ec) / KbT)))); elseif (NaChar <= 1.48e-12) tmp = Float64(Float64(-1.0 / Float64(Vef * Float64(Float64(-1.0 / Float64(KbT * NaChar)) - Float64(2.0 / Float64(Vef * NaChar))))) - t_0); else tmp = Float64(t_1 + Float64(NdChar / Float64(Float64(2.0 + Float64(EDonor * Float64(Float64(1.0 / KbT) + Float64(Float64(Float64(Vef / EDonor) / KbT) + Float64(Float64(mu / EDonor) / KbT))))) - Float64(Ec / KbT)))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT))); t_1 = NaChar / (1.0 + exp(((Vef + (Ev - (mu - EAccept))) / KbT))); tmp = 0.0; if (NaChar <= -1.9e+86) tmp = t_1 + (NdChar / (Ec * (((2.0 + ((EDonor / KbT) + ((Vef / KbT) + (mu / KbT)))) / Ec) + (-1.0 / KbT)))); elseif (NaChar <= -2.3e-15) tmp = (1.0 / ((2.0 + (Vef / KbT)) / NaChar)) - t_0; elseif (NaChar <= -1.85e-75) tmp = t_1 + (NdChar / (2.0 + (((EDonor + (mu + Vef)) - Ec) / KbT))); elseif (NaChar <= 1.48e-12) tmp = (-1.0 / (Vef * ((-1.0 / (KbT * NaChar)) - (2.0 / (Vef * NaChar))))) - t_0; else tmp = t_1 + (NdChar / ((2.0 + (EDonor * ((1.0 / KbT) + (((Vef / EDonor) / KbT) + ((mu / EDonor) / KbT))))) - (Ec / KbT))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NdChar / N[(-1.0 - N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(Ev - N[(mu - EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -1.9e+86], N[(t$95$1 + N[(NdChar / N[(Ec * N[(N[(N[(2.0 + N[(N[(EDonor / KbT), $MachinePrecision] + N[(N[(Vef / KbT), $MachinePrecision] + N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / Ec), $MachinePrecision] + N[(-1.0 / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, -2.3e-15], N[(N[(1.0 / N[(N[(2.0 + N[(Vef / KbT), $MachinePrecision]), $MachinePrecision] / NaChar), $MachinePrecision]), $MachinePrecision] - t$95$0), $MachinePrecision], If[LessEqual[NaChar, -1.85e-75], N[(t$95$1 + N[(NdChar / N[(2.0 + N[(N[(N[(EDonor + N[(mu + Vef), $MachinePrecision]), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 1.48e-12], N[(N[(-1.0 / N[(Vef * N[(N[(-1.0 / N[(KbT * NaChar), $MachinePrecision]), $MachinePrecision] - N[(2.0 / N[(Vef * NaChar), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - t$95$0), $MachinePrecision], N[(t$95$1 + N[(NdChar / N[(N[(2.0 + N[(EDonor * N[(N[(1.0 / KbT), $MachinePrecision] + N[(N[(N[(Vef / EDonor), $MachinePrecision] / KbT), $MachinePrecision] + N[(N[(mu / EDonor), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{-1 - e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}}\\
t_1 := \frac{NaChar}{1 + e^{\frac{Vef + \left(Ev - \left(mu - EAccept\right)\right)}{KbT}}}\\
\mathbf{if}\;NaChar \leq -1.9 \cdot 10^{+86}:\\
\;\;\;\;t\_1 + \frac{NdChar}{Ec \cdot \left(\frac{2 + \left(\frac{EDonor}{KbT} + \left(\frac{Vef}{KbT} + \frac{mu}{KbT}\right)\right)}{Ec} + \frac{-1}{KbT}\right)}\\
\mathbf{elif}\;NaChar \leq -2.3 \cdot 10^{-15}:\\
\;\;\;\;\frac{1}{\frac{2 + \frac{Vef}{KbT}}{NaChar}} - t\_0\\
\mathbf{elif}\;NaChar \leq -1.85 \cdot 10^{-75}:\\
\;\;\;\;t\_1 + \frac{NdChar}{2 + \frac{\left(EDonor + \left(mu + Vef\right)\right) - Ec}{KbT}}\\
\mathbf{elif}\;NaChar \leq 1.48 \cdot 10^{-12}:\\
\;\;\;\;\frac{-1}{Vef \cdot \left(\frac{-1}{KbT \cdot NaChar} - \frac{2}{Vef \cdot NaChar}\right)} - t\_0\\
\mathbf{else}:\\
\;\;\;\;t\_1 + \frac{NdChar}{\left(2 + EDonor \cdot \left(\frac{1}{KbT} + \left(\frac{\frac{Vef}{EDonor}}{KbT} + \frac{\frac{mu}{EDonor}}{KbT}\right)\right)\right) - \frac{Ec}{KbT}}\\
\end{array}
\end{array}
if NaChar < -1.89999999999999989e86Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 75.0%
Taylor expanded in Ec around -inf 77.2%
mul-1-neg77.2%
*-commutative77.2%
distribute-rgt-neg-in77.2%
+-commutative77.2%
mul-1-neg77.2%
unsub-neg77.2%
Simplified77.2%
if -1.89999999999999989e86 < NaChar < -2.2999999999999999e-15Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 73.4%
Taylor expanded in Vef around 0 82.9%
clear-num82.9%
inv-pow82.9%
associate-+r+82.9%
metadata-eval82.9%
Applied egg-rr82.9%
unpow-182.9%
Simplified82.9%
if -2.2999999999999999e-15 < NaChar < -1.85000000000000012e-75Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 56.1%
Taylor expanded in KbT around -inf 61.6%
mul-1-neg61.6%
unsub-neg61.6%
Simplified61.6%
if -1.85000000000000012e-75 < NaChar < 1.47999999999999995e-12Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 72.5%
Taylor expanded in Vef around 0 69.4%
clear-num69.4%
inv-pow69.4%
associate-+r+69.4%
metadata-eval69.4%
Applied egg-rr69.4%
unpow-169.4%
Simplified69.4%
Taylor expanded in Vef around inf 71.6%
associate-*r/71.6%
metadata-eval71.6%
Simplified71.6%
if 1.47999999999999995e-12 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 71.2%
Taylor expanded in EDonor around inf 80.4%
associate-/r*80.4%
associate-/r*78.6%
Simplified78.6%
Final simplification74.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 (+ (/ Vef KbT) (/ mu KbT)))
(t_2 (/ NaChar (+ 1.0 (exp (/ (+ Vef (- Ev (- mu EAccept))) KbT))))))
(if (<= NaChar -1.9e+86)
(+
t_2
(/ NdChar (* Ec (+ (/ (+ 2.0 (+ (/ EDonor KbT) t_1)) Ec) (/ -1.0 KbT)))))
(if (<= NaChar -3.2e-15)
(- (/ 1.0 (/ (+ 2.0 (/ Vef KbT)) NaChar)) t_0)
(if (<= NaChar -3.5e-72)
(+
t_2
(/
NdChar
(*
Vef
(+
(/ 1.0 KbT)
(-
(+ (+ (/ mu (* Vef KbT)) (/ EDonor (* Vef KbT))) (/ 2.0 Vef))
(/ Ec (* Vef KbT)))))))
(if (<= NaChar 2.7e-12)
(-
(/ -1.0 (* Vef (- (/ -1.0 (* KbT NaChar)) (/ 2.0 (* Vef NaChar)))))
t_0)
(+
t_2
(/
NdChar
(*
EDonor
(+ (/ 1.0 KbT) (/ (- (+ 2.0 t_1) (/ Ec KbT)) EDonor)))))))))))
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 = (Vef / KbT) + (mu / KbT);
double t_2 = NaChar / (1.0 + exp(((Vef + (Ev - (mu - EAccept))) / KbT)));
double tmp;
if (NaChar <= -1.9e+86) {
tmp = t_2 + (NdChar / (Ec * (((2.0 + ((EDonor / KbT) + t_1)) / Ec) + (-1.0 / KbT))));
} else if (NaChar <= -3.2e-15) {
tmp = (1.0 / ((2.0 + (Vef / KbT)) / NaChar)) - t_0;
} else if (NaChar <= -3.5e-72) {
tmp = t_2 + (NdChar / (Vef * ((1.0 / KbT) + ((((mu / (Vef * KbT)) + (EDonor / (Vef * KbT))) + (2.0 / Vef)) - (Ec / (Vef * KbT))))));
} else if (NaChar <= 2.7e-12) {
tmp = (-1.0 / (Vef * ((-1.0 / (KbT * NaChar)) - (2.0 / (Vef * NaChar))))) - t_0;
} else {
tmp = t_2 + (NdChar / (EDonor * ((1.0 / KbT) + (((2.0 + t_1) - (Ec / KbT)) / EDonor))));
}
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 = (vef / kbt) + (mu / kbt)
t_2 = nachar / (1.0d0 + exp(((vef + (ev - (mu - eaccept))) / kbt)))
if (nachar <= (-1.9d+86)) then
tmp = t_2 + (ndchar / (ec * (((2.0d0 + ((edonor / kbt) + t_1)) / ec) + ((-1.0d0) / kbt))))
else if (nachar <= (-3.2d-15)) then
tmp = (1.0d0 / ((2.0d0 + (vef / kbt)) / nachar)) - t_0
else if (nachar <= (-3.5d-72)) then
tmp = t_2 + (ndchar / (vef * ((1.0d0 / kbt) + ((((mu / (vef * kbt)) + (edonor / (vef * kbt))) + (2.0d0 / vef)) - (ec / (vef * kbt))))))
else if (nachar <= 2.7d-12) then
tmp = ((-1.0d0) / (vef * (((-1.0d0) / (kbt * nachar)) - (2.0d0 / (vef * nachar))))) - t_0
else
tmp = t_2 + (ndchar / (edonor * ((1.0d0 / kbt) + (((2.0d0 + t_1) - (ec / kbt)) / edonor))))
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 = (Vef / KbT) + (mu / KbT);
double t_2 = NaChar / (1.0 + Math.exp(((Vef + (Ev - (mu - EAccept))) / KbT)));
double tmp;
if (NaChar <= -1.9e+86) {
tmp = t_2 + (NdChar / (Ec * (((2.0 + ((EDonor / KbT) + t_1)) / Ec) + (-1.0 / KbT))));
} else if (NaChar <= -3.2e-15) {
tmp = (1.0 / ((2.0 + (Vef / KbT)) / NaChar)) - t_0;
} else if (NaChar <= -3.5e-72) {
tmp = t_2 + (NdChar / (Vef * ((1.0 / KbT) + ((((mu / (Vef * KbT)) + (EDonor / (Vef * KbT))) + (2.0 / Vef)) - (Ec / (Vef * KbT))))));
} else if (NaChar <= 2.7e-12) {
tmp = (-1.0 / (Vef * ((-1.0 / (KbT * NaChar)) - (2.0 / (Vef * NaChar))))) - t_0;
} else {
tmp = t_2 + (NdChar / (EDonor * ((1.0 / KbT) + (((2.0 + t_1) - (Ec / KbT)) / EDonor))));
}
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 = (Vef / KbT) + (mu / KbT) t_2 = NaChar / (1.0 + math.exp(((Vef + (Ev - (mu - EAccept))) / KbT))) tmp = 0 if NaChar <= -1.9e+86: tmp = t_2 + (NdChar / (Ec * (((2.0 + ((EDonor / KbT) + t_1)) / Ec) + (-1.0 / KbT)))) elif NaChar <= -3.2e-15: tmp = (1.0 / ((2.0 + (Vef / KbT)) / NaChar)) - t_0 elif NaChar <= -3.5e-72: tmp = t_2 + (NdChar / (Vef * ((1.0 / KbT) + ((((mu / (Vef * KbT)) + (EDonor / (Vef * KbT))) + (2.0 / Vef)) - (Ec / (Vef * KbT)))))) elif NaChar <= 2.7e-12: tmp = (-1.0 / (Vef * ((-1.0 / (KbT * NaChar)) - (2.0 / (Vef * NaChar))))) - t_0 else: tmp = t_2 + (NdChar / (EDonor * ((1.0 / KbT) + (((2.0 + t_1) - (Ec / KbT)) / EDonor)))) 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(Vef / KbT) + Float64(mu / KbT)) t_2 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Ev - Float64(mu - EAccept))) / KbT)))) tmp = 0.0 if (NaChar <= -1.9e+86) tmp = Float64(t_2 + Float64(NdChar / Float64(Ec * Float64(Float64(Float64(2.0 + Float64(Float64(EDonor / KbT) + t_1)) / Ec) + Float64(-1.0 / KbT))))); elseif (NaChar <= -3.2e-15) tmp = Float64(Float64(1.0 / Float64(Float64(2.0 + Float64(Vef / KbT)) / NaChar)) - t_0); elseif (NaChar <= -3.5e-72) tmp = Float64(t_2 + Float64(NdChar / Float64(Vef * Float64(Float64(1.0 / KbT) + Float64(Float64(Float64(Float64(mu / Float64(Vef * KbT)) + Float64(EDonor / Float64(Vef * KbT))) + Float64(2.0 / Vef)) - Float64(Ec / Float64(Vef * KbT))))))); elseif (NaChar <= 2.7e-12) tmp = Float64(Float64(-1.0 / Float64(Vef * Float64(Float64(-1.0 / Float64(KbT * NaChar)) - Float64(2.0 / Float64(Vef * NaChar))))) - t_0); else tmp = Float64(t_2 + Float64(NdChar / Float64(EDonor * Float64(Float64(1.0 / KbT) + Float64(Float64(Float64(2.0 + t_1) - Float64(Ec / KbT)) / EDonor))))); 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 = (Vef / KbT) + (mu / KbT); t_2 = NaChar / (1.0 + exp(((Vef + (Ev - (mu - EAccept))) / KbT))); tmp = 0.0; if (NaChar <= -1.9e+86) tmp = t_2 + (NdChar / (Ec * (((2.0 + ((EDonor / KbT) + t_1)) / Ec) + (-1.0 / KbT)))); elseif (NaChar <= -3.2e-15) tmp = (1.0 / ((2.0 + (Vef / KbT)) / NaChar)) - t_0; elseif (NaChar <= -3.5e-72) tmp = t_2 + (NdChar / (Vef * ((1.0 / KbT) + ((((mu / (Vef * KbT)) + (EDonor / (Vef * KbT))) + (2.0 / Vef)) - (Ec / (Vef * KbT)))))); elseif (NaChar <= 2.7e-12) tmp = (-1.0 / (Vef * ((-1.0 / (KbT * NaChar)) - (2.0 / (Vef * NaChar))))) - t_0; else tmp = t_2 + (NdChar / (EDonor * ((1.0 / KbT) + (((2.0 + t_1) - (Ec / KbT)) / EDonor)))); 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[(Vef / KbT), $MachinePrecision] + N[(mu / KbT), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(Ev - N[(mu - EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -1.9e+86], N[(t$95$2 + N[(NdChar / N[(Ec * N[(N[(N[(2.0 + N[(N[(EDonor / KbT), $MachinePrecision] + t$95$1), $MachinePrecision]), $MachinePrecision] / Ec), $MachinePrecision] + N[(-1.0 / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, -3.2e-15], N[(N[(1.0 / N[(N[(2.0 + N[(Vef / KbT), $MachinePrecision]), $MachinePrecision] / NaChar), $MachinePrecision]), $MachinePrecision] - t$95$0), $MachinePrecision], If[LessEqual[NaChar, -3.5e-72], N[(t$95$2 + N[(NdChar / N[(Vef * N[(N[(1.0 / KbT), $MachinePrecision] + N[(N[(N[(N[(mu / N[(Vef * KbT), $MachinePrecision]), $MachinePrecision] + N[(EDonor / N[(Vef * KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(2.0 / Vef), $MachinePrecision]), $MachinePrecision] - N[(Ec / N[(Vef * KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 2.7e-12], N[(N[(-1.0 / N[(Vef * N[(N[(-1.0 / N[(KbT * NaChar), $MachinePrecision]), $MachinePrecision] - N[(2.0 / N[(Vef * NaChar), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - t$95$0), $MachinePrecision], N[(t$95$2 + N[(NdChar / N[(EDonor * N[(N[(1.0 / KbT), $MachinePrecision] + N[(N[(N[(2.0 + t$95$1), $MachinePrecision] - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision] / EDonor), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{-1 - e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}}\\
t_1 := \frac{Vef}{KbT} + \frac{mu}{KbT}\\
t_2 := \frac{NaChar}{1 + e^{\frac{Vef + \left(Ev - \left(mu - EAccept\right)\right)}{KbT}}}\\
\mathbf{if}\;NaChar \leq -1.9 \cdot 10^{+86}:\\
\;\;\;\;t\_2 + \frac{NdChar}{Ec \cdot \left(\frac{2 + \left(\frac{EDonor}{KbT} + t\_1\right)}{Ec} + \frac{-1}{KbT}\right)}\\
\mathbf{elif}\;NaChar \leq -3.2 \cdot 10^{-15}:\\
\;\;\;\;\frac{1}{\frac{2 + \frac{Vef}{KbT}}{NaChar}} - t\_0\\
\mathbf{elif}\;NaChar \leq -3.5 \cdot 10^{-72}:\\
\;\;\;\;t\_2 + \frac{NdChar}{Vef \cdot \left(\frac{1}{KbT} + \left(\left(\left(\frac{mu}{Vef \cdot KbT} + \frac{EDonor}{Vef \cdot KbT}\right) + \frac{2}{Vef}\right) - \frac{Ec}{Vef \cdot KbT}\right)\right)}\\
\mathbf{elif}\;NaChar \leq 2.7 \cdot 10^{-12}:\\
\;\;\;\;\frac{-1}{Vef \cdot \left(\frac{-1}{KbT \cdot NaChar} - \frac{2}{Vef \cdot NaChar}\right)} - t\_0\\
\mathbf{else}:\\
\;\;\;\;t\_2 + \frac{NdChar}{EDonor \cdot \left(\frac{1}{KbT} + \frac{\left(2 + t\_1\right) - \frac{Ec}{KbT}}{EDonor}\right)}\\
\end{array}
\end{array}
if NaChar < -1.89999999999999989e86Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 75.0%
Taylor expanded in Ec around -inf 77.2%
mul-1-neg77.2%
*-commutative77.2%
distribute-rgt-neg-in77.2%
+-commutative77.2%
mul-1-neg77.2%
unsub-neg77.2%
Simplified77.2%
if -1.89999999999999989e86 < NaChar < -3.1999999999999999e-15Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 73.4%
Taylor expanded in Vef around 0 82.9%
clear-num82.9%
inv-pow82.9%
associate-+r+82.9%
metadata-eval82.9%
Applied egg-rr82.9%
unpow-182.9%
Simplified82.9%
if -3.1999999999999999e-15 < NaChar < -3.5e-72Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 56.1%
Taylor expanded in Vef around inf 62.3%
associate--l+62.3%
+-commutative62.3%
*-commutative62.3%
*-commutative62.3%
associate-*r/62.3%
metadata-eval62.3%
*-commutative62.3%
Simplified62.3%
if -3.5e-72 < NaChar < 2.6999999999999998e-12Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 72.5%
Taylor expanded in Vef around 0 69.4%
clear-num69.4%
inv-pow69.4%
associate-+r+69.4%
metadata-eval69.4%
Applied egg-rr69.4%
unpow-169.4%
Simplified69.4%
Taylor expanded in Vef around inf 71.6%
associate-*r/71.6%
metadata-eval71.6%
Simplified71.6%
if 2.6999999999999998e-12 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 71.2%
Taylor expanded in EDonor around -inf 83.3%
Final simplification75.2%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NdChar (- -1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT)))))
(t_1 (+ (/ Vef KbT) (/ mu KbT)))
(t_2 (/ NaChar (+ 1.0 (exp (/ (+ Vef (- Ev (- mu EAccept))) KbT))))))
(if (<= NaChar -6.8e+87)
(+
t_2
(/ NdChar (* Ec (+ (/ (+ 2.0 (+ (/ EDonor KbT) t_1)) Ec) (/ -1.0 KbT)))))
(if (<= NaChar -3.2e-15)
(- (/ 1.0 (/ (+ 2.0 (/ Vef KbT)) NaChar)) t_0)
(if (<= NaChar -1.85e-75)
(+ t_2 (/ NdChar (+ 2.0 (/ (- (+ EDonor (+ mu Vef)) Ec) KbT))))
(if (<= NaChar 1.26e-11)
(-
(/ -1.0 (* Vef (- (/ -1.0 (* KbT NaChar)) (/ 2.0 (* Vef NaChar)))))
t_0)
(+
t_2
(/
NdChar
(*
EDonor
(+ (/ 1.0 KbT) (/ (- (+ 2.0 t_1) (/ Ec KbT)) EDonor)))))))))))
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 = (Vef / KbT) + (mu / KbT);
double t_2 = NaChar / (1.0 + exp(((Vef + (Ev - (mu - EAccept))) / KbT)));
double tmp;
if (NaChar <= -6.8e+87) {
tmp = t_2 + (NdChar / (Ec * (((2.0 + ((EDonor / KbT) + t_1)) / Ec) + (-1.0 / KbT))));
} else if (NaChar <= -3.2e-15) {
tmp = (1.0 / ((2.0 + (Vef / KbT)) / NaChar)) - t_0;
} else if (NaChar <= -1.85e-75) {
tmp = t_2 + (NdChar / (2.0 + (((EDonor + (mu + Vef)) - Ec) / KbT)));
} else if (NaChar <= 1.26e-11) {
tmp = (-1.0 / (Vef * ((-1.0 / (KbT * NaChar)) - (2.0 / (Vef * NaChar))))) - t_0;
} else {
tmp = t_2 + (NdChar / (EDonor * ((1.0 / KbT) + (((2.0 + t_1) - (Ec / KbT)) / EDonor))));
}
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 = (vef / kbt) + (mu / kbt)
t_2 = nachar / (1.0d0 + exp(((vef + (ev - (mu - eaccept))) / kbt)))
if (nachar <= (-6.8d+87)) then
tmp = t_2 + (ndchar / (ec * (((2.0d0 + ((edonor / kbt) + t_1)) / ec) + ((-1.0d0) / kbt))))
else if (nachar <= (-3.2d-15)) then
tmp = (1.0d0 / ((2.0d0 + (vef / kbt)) / nachar)) - t_0
else if (nachar <= (-1.85d-75)) then
tmp = t_2 + (ndchar / (2.0d0 + (((edonor + (mu + vef)) - ec) / kbt)))
else if (nachar <= 1.26d-11) then
tmp = ((-1.0d0) / (vef * (((-1.0d0) / (kbt * nachar)) - (2.0d0 / (vef * nachar))))) - t_0
else
tmp = t_2 + (ndchar / (edonor * ((1.0d0 / kbt) + (((2.0d0 + t_1) - (ec / kbt)) / edonor))))
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 = (Vef / KbT) + (mu / KbT);
double t_2 = NaChar / (1.0 + Math.exp(((Vef + (Ev - (mu - EAccept))) / KbT)));
double tmp;
if (NaChar <= -6.8e+87) {
tmp = t_2 + (NdChar / (Ec * (((2.0 + ((EDonor / KbT) + t_1)) / Ec) + (-1.0 / KbT))));
} else if (NaChar <= -3.2e-15) {
tmp = (1.0 / ((2.0 + (Vef / KbT)) / NaChar)) - t_0;
} else if (NaChar <= -1.85e-75) {
tmp = t_2 + (NdChar / (2.0 + (((EDonor + (mu + Vef)) - Ec) / KbT)));
} else if (NaChar <= 1.26e-11) {
tmp = (-1.0 / (Vef * ((-1.0 / (KbT * NaChar)) - (2.0 / (Vef * NaChar))))) - t_0;
} else {
tmp = t_2 + (NdChar / (EDonor * ((1.0 / KbT) + (((2.0 + t_1) - (Ec / KbT)) / EDonor))));
}
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 = (Vef / KbT) + (mu / KbT) t_2 = NaChar / (1.0 + math.exp(((Vef + (Ev - (mu - EAccept))) / KbT))) tmp = 0 if NaChar <= -6.8e+87: tmp = t_2 + (NdChar / (Ec * (((2.0 + ((EDonor / KbT) + t_1)) / Ec) + (-1.0 / KbT)))) elif NaChar <= -3.2e-15: tmp = (1.0 / ((2.0 + (Vef / KbT)) / NaChar)) - t_0 elif NaChar <= -1.85e-75: tmp = t_2 + (NdChar / (2.0 + (((EDonor + (mu + Vef)) - Ec) / KbT))) elif NaChar <= 1.26e-11: tmp = (-1.0 / (Vef * ((-1.0 / (KbT * NaChar)) - (2.0 / (Vef * NaChar))))) - t_0 else: tmp = t_2 + (NdChar / (EDonor * ((1.0 / KbT) + (((2.0 + t_1) - (Ec / KbT)) / EDonor)))) 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(Vef / KbT) + Float64(mu / KbT)) t_2 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Ev - Float64(mu - EAccept))) / KbT)))) tmp = 0.0 if (NaChar <= -6.8e+87) tmp = Float64(t_2 + Float64(NdChar / Float64(Ec * Float64(Float64(Float64(2.0 + Float64(Float64(EDonor / KbT) + t_1)) / Ec) + Float64(-1.0 / KbT))))); elseif (NaChar <= -3.2e-15) tmp = Float64(Float64(1.0 / Float64(Float64(2.0 + Float64(Vef / KbT)) / NaChar)) - t_0); elseif (NaChar <= -1.85e-75) tmp = Float64(t_2 + Float64(NdChar / Float64(2.0 + Float64(Float64(Float64(EDonor + Float64(mu + Vef)) - Ec) / KbT)))); elseif (NaChar <= 1.26e-11) tmp = Float64(Float64(-1.0 / Float64(Vef * Float64(Float64(-1.0 / Float64(KbT * NaChar)) - Float64(2.0 / Float64(Vef * NaChar))))) - t_0); else tmp = Float64(t_2 + Float64(NdChar / Float64(EDonor * Float64(Float64(1.0 / KbT) + Float64(Float64(Float64(2.0 + t_1) - Float64(Ec / KbT)) / EDonor))))); 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 = (Vef / KbT) + (mu / KbT); t_2 = NaChar / (1.0 + exp(((Vef + (Ev - (mu - EAccept))) / KbT))); tmp = 0.0; if (NaChar <= -6.8e+87) tmp = t_2 + (NdChar / (Ec * (((2.0 + ((EDonor / KbT) + t_1)) / Ec) + (-1.0 / KbT)))); elseif (NaChar <= -3.2e-15) tmp = (1.0 / ((2.0 + (Vef / KbT)) / NaChar)) - t_0; elseif (NaChar <= -1.85e-75) tmp = t_2 + (NdChar / (2.0 + (((EDonor + (mu + Vef)) - Ec) / KbT))); elseif (NaChar <= 1.26e-11) tmp = (-1.0 / (Vef * ((-1.0 / (KbT * NaChar)) - (2.0 / (Vef * NaChar))))) - t_0; else tmp = t_2 + (NdChar / (EDonor * ((1.0 / KbT) + (((2.0 + t_1) - (Ec / KbT)) / EDonor)))); 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[(Vef / KbT), $MachinePrecision] + N[(mu / KbT), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(Ev - N[(mu - EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -6.8e+87], N[(t$95$2 + N[(NdChar / N[(Ec * N[(N[(N[(2.0 + N[(N[(EDonor / KbT), $MachinePrecision] + t$95$1), $MachinePrecision]), $MachinePrecision] / Ec), $MachinePrecision] + N[(-1.0 / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, -3.2e-15], N[(N[(1.0 / N[(N[(2.0 + N[(Vef / KbT), $MachinePrecision]), $MachinePrecision] / NaChar), $MachinePrecision]), $MachinePrecision] - t$95$0), $MachinePrecision], If[LessEqual[NaChar, -1.85e-75], N[(t$95$2 + N[(NdChar / N[(2.0 + N[(N[(N[(EDonor + N[(mu + Vef), $MachinePrecision]), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 1.26e-11], N[(N[(-1.0 / N[(Vef * N[(N[(-1.0 / N[(KbT * NaChar), $MachinePrecision]), $MachinePrecision] - N[(2.0 / N[(Vef * NaChar), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - t$95$0), $MachinePrecision], N[(t$95$2 + N[(NdChar / N[(EDonor * N[(N[(1.0 / KbT), $MachinePrecision] + N[(N[(N[(2.0 + t$95$1), $MachinePrecision] - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision] / EDonor), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{-1 - e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}}\\
t_1 := \frac{Vef}{KbT} + \frac{mu}{KbT}\\
t_2 := \frac{NaChar}{1 + e^{\frac{Vef + \left(Ev - \left(mu - EAccept\right)\right)}{KbT}}}\\
\mathbf{if}\;NaChar \leq -6.8 \cdot 10^{+87}:\\
\;\;\;\;t\_2 + \frac{NdChar}{Ec \cdot \left(\frac{2 + \left(\frac{EDonor}{KbT} + t\_1\right)}{Ec} + \frac{-1}{KbT}\right)}\\
\mathbf{elif}\;NaChar \leq -3.2 \cdot 10^{-15}:\\
\;\;\;\;\frac{1}{\frac{2 + \frac{Vef}{KbT}}{NaChar}} - t\_0\\
\mathbf{elif}\;NaChar \leq -1.85 \cdot 10^{-75}:\\
\;\;\;\;t\_2 + \frac{NdChar}{2 + \frac{\left(EDonor + \left(mu + Vef\right)\right) - Ec}{KbT}}\\
\mathbf{elif}\;NaChar \leq 1.26 \cdot 10^{-11}:\\
\;\;\;\;\frac{-1}{Vef \cdot \left(\frac{-1}{KbT \cdot NaChar} - \frac{2}{Vef \cdot NaChar}\right)} - t\_0\\
\mathbf{else}:\\
\;\;\;\;t\_2 + \frac{NdChar}{EDonor \cdot \left(\frac{1}{KbT} + \frac{\left(2 + t\_1\right) - \frac{Ec}{KbT}}{EDonor}\right)}\\
\end{array}
\end{array}
if NaChar < -6.8000000000000004e87Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 75.0%
Taylor expanded in Ec around -inf 77.2%
mul-1-neg77.2%
*-commutative77.2%
distribute-rgt-neg-in77.2%
+-commutative77.2%
mul-1-neg77.2%
unsub-neg77.2%
Simplified77.2%
if -6.8000000000000004e87 < NaChar < -3.1999999999999999e-15Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 73.4%
Taylor expanded in Vef around 0 82.9%
clear-num82.9%
inv-pow82.9%
associate-+r+82.9%
metadata-eval82.9%
Applied egg-rr82.9%
unpow-182.9%
Simplified82.9%
if -3.1999999999999999e-15 < NaChar < -1.85000000000000012e-75Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 56.1%
Taylor expanded in KbT around -inf 61.6%
mul-1-neg61.6%
unsub-neg61.6%
Simplified61.6%
if -1.85000000000000012e-75 < NaChar < 1.26e-11Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 72.5%
Taylor expanded in Vef around 0 69.4%
clear-num69.4%
inv-pow69.4%
associate-+r+69.4%
metadata-eval69.4%
Applied egg-rr69.4%
unpow-169.4%
Simplified69.4%
Taylor expanded in Vef around inf 71.6%
associate-*r/71.6%
metadata-eval71.6%
Simplified71.6%
if 1.26e-11 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 71.2%
Taylor expanded in EDonor around -inf 83.3%
Final simplification75.2%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0
(+
(/ NaChar (+ 1.0 (exp (/ (+ Vef (- Ev (- mu EAccept))) KbT))))
(/ NdChar 2.0)))
(t_1 (/ NdChar (- -1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT)))))
(t_2 (- (* NaChar 0.5) t_1))
(t_3 (- (* KbT (/ NaChar Vef)) t_1)))
(if (<= NaChar -1.38e+163)
t_0
(if (<= NaChar -2.1e-21)
t_2
(if (<= NaChar -3e-38)
t_0
(if (<= NaChar -1.16e-205)
t_3
(if (<= NaChar -5.8e-290)
t_2
(if (<= NaChar 1.02e-218)
t_3
(if (<= NaChar 8e-38) t_2 t_0)))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar / (1.0 + exp(((Vef + (Ev - (mu - EAccept))) / KbT)))) + (NdChar / 2.0);
double t_1 = NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT)));
double t_2 = (NaChar * 0.5) - t_1;
double t_3 = (KbT * (NaChar / Vef)) - t_1;
double tmp;
if (NaChar <= -1.38e+163) {
tmp = t_0;
} else if (NaChar <= -2.1e-21) {
tmp = t_2;
} else if (NaChar <= -3e-38) {
tmp = t_0;
} else if (NaChar <= -1.16e-205) {
tmp = t_3;
} else if (NaChar <= -5.8e-290) {
tmp = t_2;
} else if (NaChar <= 1.02e-218) {
tmp = t_3;
} else if (NaChar <= 8e-38) {
tmp = t_2;
} 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) :: t_1
real(8) :: t_2
real(8) :: t_3
real(8) :: tmp
t_0 = (nachar / (1.0d0 + exp(((vef + (ev - (mu - eaccept))) / kbt)))) + (ndchar / 2.0d0)
t_1 = ndchar / ((-1.0d0) - exp(((edonor + (mu + (vef - ec))) / kbt)))
t_2 = (nachar * 0.5d0) - t_1
t_3 = (kbt * (nachar / vef)) - t_1
if (nachar <= (-1.38d+163)) then
tmp = t_0
else if (nachar <= (-2.1d-21)) then
tmp = t_2
else if (nachar <= (-3d-38)) then
tmp = t_0
else if (nachar <= (-1.16d-205)) then
tmp = t_3
else if (nachar <= (-5.8d-290)) then
tmp = t_2
else if (nachar <= 1.02d-218) then
tmp = t_3
else if (nachar <= 8d-38) then
tmp = t_2
else
tmp = t_0
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar / (1.0 + Math.exp(((Vef + (Ev - (mu - EAccept))) / KbT)))) + (NdChar / 2.0);
double t_1 = NdChar / (-1.0 - Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)));
double t_2 = (NaChar * 0.5) - t_1;
double t_3 = (KbT * (NaChar / Vef)) - t_1;
double tmp;
if (NaChar <= -1.38e+163) {
tmp = t_0;
} else if (NaChar <= -2.1e-21) {
tmp = t_2;
} else if (NaChar <= -3e-38) {
tmp = t_0;
} else if (NaChar <= -1.16e-205) {
tmp = t_3;
} else if (NaChar <= -5.8e-290) {
tmp = t_2;
} else if (NaChar <= 1.02e-218) {
tmp = t_3;
} else if (NaChar <= 8e-38) {
tmp = t_2;
} else {
tmp = t_0;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = (NaChar / (1.0 + math.exp(((Vef + (Ev - (mu - EAccept))) / KbT)))) + (NdChar / 2.0) t_1 = NdChar / (-1.0 - math.exp(((EDonor + (mu + (Vef - Ec))) / KbT))) t_2 = (NaChar * 0.5) - t_1 t_3 = (KbT * (NaChar / Vef)) - t_1 tmp = 0 if NaChar <= -1.38e+163: tmp = t_0 elif NaChar <= -2.1e-21: tmp = t_2 elif NaChar <= -3e-38: tmp = t_0 elif NaChar <= -1.16e-205: tmp = t_3 elif NaChar <= -5.8e-290: tmp = t_2 elif NaChar <= 1.02e-218: tmp = t_3 elif NaChar <= 8e-38: tmp = t_2 else: tmp = t_0 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Ev - Float64(mu - EAccept))) / KbT)))) + Float64(NdChar / 2.0)) t_1 = Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) t_2 = Float64(Float64(NaChar * 0.5) - t_1) t_3 = Float64(Float64(KbT * Float64(NaChar / Vef)) - t_1) tmp = 0.0 if (NaChar <= -1.38e+163) tmp = t_0; elseif (NaChar <= -2.1e-21) tmp = t_2; elseif (NaChar <= -3e-38) tmp = t_0; elseif (NaChar <= -1.16e-205) tmp = t_3; elseif (NaChar <= -5.8e-290) tmp = t_2; elseif (NaChar <= 1.02e-218) tmp = t_3; elseif (NaChar <= 8e-38) tmp = t_2; else tmp = t_0; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = (NaChar / (1.0 + exp(((Vef + (Ev - (mu - EAccept))) / KbT)))) + (NdChar / 2.0); t_1 = NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT))); t_2 = (NaChar * 0.5) - t_1; t_3 = (KbT * (NaChar / Vef)) - t_1; tmp = 0.0; if (NaChar <= -1.38e+163) tmp = t_0; elseif (NaChar <= -2.1e-21) tmp = t_2; elseif (NaChar <= -3e-38) tmp = t_0; elseif (NaChar <= -1.16e-205) tmp = t_3; elseif (NaChar <= -5.8e-290) tmp = t_2; elseif (NaChar <= 1.02e-218) tmp = t_3; elseif (NaChar <= 8e-38) tmp = t_2; else tmp = t_0; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(Ev - N[(mu - EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(NdChar / N[(-1.0 - N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(N[(NaChar * 0.5), $MachinePrecision] - t$95$1), $MachinePrecision]}, Block[{t$95$3 = N[(N[(KbT * N[(NaChar / Vef), $MachinePrecision]), $MachinePrecision] - t$95$1), $MachinePrecision]}, If[LessEqual[NaChar, -1.38e+163], t$95$0, If[LessEqual[NaChar, -2.1e-21], t$95$2, If[LessEqual[NaChar, -3e-38], t$95$0, If[LessEqual[NaChar, -1.16e-205], t$95$3, If[LessEqual[NaChar, -5.8e-290], t$95$2, If[LessEqual[NaChar, 1.02e-218], t$95$3, If[LessEqual[NaChar, 8e-38], t$95$2, t$95$0]]]]]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{Vef + \left(Ev - \left(mu - EAccept\right)\right)}{KbT}}} + \frac{NdChar}{2}\\
t_1 := \frac{NdChar}{-1 - e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}}\\
t_2 := NaChar \cdot 0.5 - t\_1\\
t_3 := KbT \cdot \frac{NaChar}{Vef} - t\_1\\
\mathbf{if}\;NaChar \leq -1.38 \cdot 10^{+163}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;NaChar \leq -2.1 \cdot 10^{-21}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;NaChar \leq -3 \cdot 10^{-38}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;NaChar \leq -1.16 \cdot 10^{-205}:\\
\;\;\;\;t\_3\\
\mathbf{elif}\;NaChar \leq -5.8 \cdot 10^{-290}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;NaChar \leq 1.02 \cdot 10^{-218}:\\
\;\;\;\;t\_3\\
\mathbf{elif}\;NaChar \leq 8 \cdot 10^{-38}:\\
\;\;\;\;t\_2\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if NaChar < -1.38000000000000004e163 or -2.10000000000000013e-21 < NaChar < -2.99999999999999989e-38 or 7.9999999999999997e-38 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 66.0%
if -1.38000000000000004e163 < NaChar < -2.10000000000000013e-21 or -1.1600000000000001e-205 < NaChar < -5.79999999999999989e-290 or 1.02e-218 < NaChar < 7.9999999999999997e-38Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 63.5%
*-commutative63.5%
Simplified63.5%
if -2.99999999999999989e-38 < NaChar < -1.1600000000000001e-205 or -5.79999999999999989e-290 < NaChar < 1.02e-218Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 72.8%
Taylor expanded in Vef around 0 66.4%
Taylor expanded in Vef around inf 65.3%
associate-/l*61.5%
Simplified61.5%
Final simplification64.0%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT)))
(t_1 (/ NdChar (- -1.0 t_0)))
(t_2 (+ 2.0 (/ Vef KbT)))
(t_3
(+
(/ NaChar (+ 1.0 (exp (/ (+ Vef (- Ev (- mu EAccept))) KbT))))
(/ NdChar (- t_2 (/ Ec KbT))))))
(if (<= NaChar -1.65e+87)
t_3
(if (<= NaChar -3.8e-15)
(- (/ 1.0 (/ t_2 NaChar)) t_1)
(if (<= NaChar -2.8e-38)
t_3
(if (<= NaChar -2.65e-102)
(+ (/ NdChar (+ 1.0 t_0)) (/ (* KbT NaChar) Vef))
(if (<= NaChar 3.35e-12)
(- (/ NaChar (+ 1.0 (+ 1.0 (/ Vef 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(((EDonor + (mu + (Vef - Ec))) / KbT));
double t_1 = NdChar / (-1.0 - t_0);
double t_2 = 2.0 + (Vef / KbT);
double t_3 = (NaChar / (1.0 + exp(((Vef + (Ev - (mu - EAccept))) / KbT)))) + (NdChar / (t_2 - (Ec / KbT)));
double tmp;
if (NaChar <= -1.65e+87) {
tmp = t_3;
} else if (NaChar <= -3.8e-15) {
tmp = (1.0 / (t_2 / NaChar)) - t_1;
} else if (NaChar <= -2.8e-38) {
tmp = t_3;
} else if (NaChar <= -2.65e-102) {
tmp = (NdChar / (1.0 + t_0)) + ((KbT * NaChar) / Vef);
} else if (NaChar <= 3.35e-12) {
tmp = (NaChar / (1.0 + (1.0 + (Vef / 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(((edonor + (mu + (vef - ec))) / kbt))
t_1 = ndchar / ((-1.0d0) - t_0)
t_2 = 2.0d0 + (vef / kbt)
t_3 = (nachar / (1.0d0 + exp(((vef + (ev - (mu - eaccept))) / kbt)))) + (ndchar / (t_2 - (ec / kbt)))
if (nachar <= (-1.65d+87)) then
tmp = t_3
else if (nachar <= (-3.8d-15)) then
tmp = (1.0d0 / (t_2 / nachar)) - t_1
else if (nachar <= (-2.8d-38)) then
tmp = t_3
else if (nachar <= (-2.65d-102)) then
tmp = (ndchar / (1.0d0 + t_0)) + ((kbt * nachar) / vef)
else if (nachar <= 3.35d-12) then
tmp = (nachar / (1.0d0 + (1.0d0 + (vef / 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(((EDonor + (mu + (Vef - Ec))) / KbT));
double t_1 = NdChar / (-1.0 - t_0);
double t_2 = 2.0 + (Vef / KbT);
double t_3 = (NaChar / (1.0 + Math.exp(((Vef + (Ev - (mu - EAccept))) / KbT)))) + (NdChar / (t_2 - (Ec / KbT)));
double tmp;
if (NaChar <= -1.65e+87) {
tmp = t_3;
} else if (NaChar <= -3.8e-15) {
tmp = (1.0 / (t_2 / NaChar)) - t_1;
} else if (NaChar <= -2.8e-38) {
tmp = t_3;
} else if (NaChar <= -2.65e-102) {
tmp = (NdChar / (1.0 + t_0)) + ((KbT * NaChar) / Vef);
} else if (NaChar <= 3.35e-12) {
tmp = (NaChar / (1.0 + (1.0 + (Vef / KbT)))) - t_1;
} 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 = NdChar / (-1.0 - t_0) t_2 = 2.0 + (Vef / KbT) t_3 = (NaChar / (1.0 + math.exp(((Vef + (Ev - (mu - EAccept))) / KbT)))) + (NdChar / (t_2 - (Ec / KbT))) tmp = 0 if NaChar <= -1.65e+87: tmp = t_3 elif NaChar <= -3.8e-15: tmp = (1.0 / (t_2 / NaChar)) - t_1 elif NaChar <= -2.8e-38: tmp = t_3 elif NaChar <= -2.65e-102: tmp = (NdChar / (1.0 + t_0)) + ((KbT * NaChar) / Vef) elif NaChar <= 3.35e-12: tmp = (NaChar / (1.0 + (1.0 + (Vef / 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(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)) t_1 = Float64(NdChar / Float64(-1.0 - t_0)) t_2 = Float64(2.0 + Float64(Vef / KbT)) t_3 = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Ev - Float64(mu - EAccept))) / KbT)))) + Float64(NdChar / Float64(t_2 - Float64(Ec / KbT)))) tmp = 0.0 if (NaChar <= -1.65e+87) tmp = t_3; elseif (NaChar <= -3.8e-15) tmp = Float64(Float64(1.0 / Float64(t_2 / NaChar)) - t_1); elseif (NaChar <= -2.8e-38) tmp = t_3; elseif (NaChar <= -2.65e-102) tmp = Float64(Float64(NdChar / Float64(1.0 + t_0)) + Float64(Float64(KbT * NaChar) / Vef)); elseif (NaChar <= 3.35e-12) tmp = Float64(Float64(NaChar / Float64(1.0 + Float64(1.0 + Float64(Vef / 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(((EDonor + (mu + (Vef - Ec))) / KbT)); t_1 = NdChar / (-1.0 - t_0); t_2 = 2.0 + (Vef / KbT); t_3 = (NaChar / (1.0 + exp(((Vef + (Ev - (mu - EAccept))) / KbT)))) + (NdChar / (t_2 - (Ec / KbT))); tmp = 0.0; if (NaChar <= -1.65e+87) tmp = t_3; elseif (NaChar <= -3.8e-15) tmp = (1.0 / (t_2 / NaChar)) - t_1; elseif (NaChar <= -2.8e-38) tmp = t_3; elseif (NaChar <= -2.65e-102) tmp = (NdChar / (1.0 + t_0)) + ((KbT * NaChar) / Vef); elseif (NaChar <= 3.35e-12) tmp = (NaChar / (1.0 + (1.0 + (Vef / 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[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[(NdChar / N[(-1.0 - t$95$0), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(2.0 + N[(Vef / KbT), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$3 = N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(Ev - N[(mu - EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(t$95$2 - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -1.65e+87], t$95$3, If[LessEqual[NaChar, -3.8e-15], N[(N[(1.0 / N[(t$95$2 / NaChar), $MachinePrecision]), $MachinePrecision] - t$95$1), $MachinePrecision], If[LessEqual[NaChar, -2.8e-38], t$95$3, If[LessEqual[NaChar, -2.65e-102], N[(N[(NdChar / N[(1.0 + t$95$0), $MachinePrecision]), $MachinePrecision] + N[(N[(KbT * NaChar), $MachinePrecision] / Vef), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 3.35e-12], N[(N[(NaChar / N[(1.0 + N[(1.0 + N[(Vef / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - t$95$1), $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 := \frac{NdChar}{-1 - t\_0}\\
t_2 := 2 + \frac{Vef}{KbT}\\
t_3 := \frac{NaChar}{1 + e^{\frac{Vef + \left(Ev - \left(mu - EAccept\right)\right)}{KbT}}} + \frac{NdChar}{t\_2 - \frac{Ec}{KbT}}\\
\mathbf{if}\;NaChar \leq -1.65 \cdot 10^{+87}:\\
\;\;\;\;t\_3\\
\mathbf{elif}\;NaChar \leq -3.8 \cdot 10^{-15}:\\
\;\;\;\;\frac{1}{\frac{t\_2}{NaChar}} - t\_1\\
\mathbf{elif}\;NaChar \leq -2.8 \cdot 10^{-38}:\\
\;\;\;\;t\_3\\
\mathbf{elif}\;NaChar \leq -2.65 \cdot 10^{-102}:\\
\;\;\;\;\frac{NdChar}{1 + t\_0} + \frac{KbT \cdot NaChar}{Vef}\\
\mathbf{elif}\;NaChar \leq 3.35 \cdot 10^{-12}:\\
\;\;\;\;\frac{NaChar}{1 + \left(1 + \frac{Vef}{KbT}\right)} - t\_1\\
\mathbf{else}:\\
\;\;\;\;t\_3\\
\end{array}
\end{array}
if NaChar < -1.6500000000000001e87 or -3.8000000000000002e-15 < NaChar < -2.8e-38 or 3.3500000000000001e-12 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 73.4%
Taylor expanded in EDonor around inf 75.9%
associate-/r*76.3%
associate-/r*76.2%
Simplified76.2%
Taylor expanded in Vef around inf 75.3%
if -1.6500000000000001e87 < NaChar < -3.8000000000000002e-15Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 73.4%
Taylor expanded in Vef around 0 82.9%
clear-num82.9%
inv-pow82.9%
associate-+r+82.9%
metadata-eval82.9%
Applied egg-rr82.9%
unpow-182.9%
Simplified82.9%
if -2.8e-38 < NaChar < -2.6500000000000001e-102Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 73.8%
Taylor expanded in Vef around 0 51.3%
Taylor expanded in Vef around inf 55.1%
if -2.6500000000000001e-102 < NaChar < 3.3500000000000001e-12Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 72.5%
Taylor expanded in Vef around 0 70.0%
Final simplification71.7%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0
(+
(/ NaChar (+ 1.0 (exp (/ (+ Vef (- Ev (- mu EAccept))) KbT))))
(/ NdChar (+ 2.0 (/ (- (+ EDonor (+ mu Vef)) Ec) KbT)))))
(t_1 (/ NdChar (- -1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT))))))
(if (<= NaChar -1.9e+86)
t_0
(if (<= NaChar -2e-15)
(- (/ 1.0 (/ (+ 2.0 (/ Vef KbT)) NaChar)) t_1)
(if (or (<= NaChar -3.9e-73) (not (<= NaChar 5e-9)))
t_0
(-
(/ -1.0 (* Vef (- (/ -1.0 (* KbT NaChar)) (/ 2.0 (* Vef NaChar)))))
t_1))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar / (1.0 + exp(((Vef + (Ev - (mu - EAccept))) / KbT)))) + (NdChar / (2.0 + (((EDonor + (mu + Vef)) - Ec) / KbT)));
double t_1 = NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT)));
double tmp;
if (NaChar <= -1.9e+86) {
tmp = t_0;
} else if (NaChar <= -2e-15) {
tmp = (1.0 / ((2.0 + (Vef / KbT)) / NaChar)) - t_1;
} else if ((NaChar <= -3.9e-73) || !(NaChar <= 5e-9)) {
tmp = t_0;
} else {
tmp = (-1.0 / (Vef * ((-1.0 / (KbT * NaChar)) - (2.0 / (Vef * NaChar))))) - t_1;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = (nachar / (1.0d0 + exp(((vef + (ev - (mu - eaccept))) / kbt)))) + (ndchar / (2.0d0 + (((edonor + (mu + vef)) - ec) / kbt)))
t_1 = ndchar / ((-1.0d0) - exp(((edonor + (mu + (vef - ec))) / kbt)))
if (nachar <= (-1.9d+86)) then
tmp = t_0
else if (nachar <= (-2d-15)) then
tmp = (1.0d0 / ((2.0d0 + (vef / kbt)) / nachar)) - t_1
else if ((nachar <= (-3.9d-73)) .or. (.not. (nachar <= 5d-9))) then
tmp = t_0
else
tmp = ((-1.0d0) / (vef * (((-1.0d0) / (kbt * nachar)) - (2.0d0 / (vef * nachar))))) - t_1
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar / (1.0 + Math.exp(((Vef + (Ev - (mu - EAccept))) / KbT)))) + (NdChar / (2.0 + (((EDonor + (mu + Vef)) - Ec) / KbT)));
double t_1 = NdChar / (-1.0 - Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)));
double tmp;
if (NaChar <= -1.9e+86) {
tmp = t_0;
} else if (NaChar <= -2e-15) {
tmp = (1.0 / ((2.0 + (Vef / KbT)) / NaChar)) - t_1;
} else if ((NaChar <= -3.9e-73) || !(NaChar <= 5e-9)) {
tmp = t_0;
} else {
tmp = (-1.0 / (Vef * ((-1.0 / (KbT * NaChar)) - (2.0 / (Vef * NaChar))))) - t_1;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = (NaChar / (1.0 + math.exp(((Vef + (Ev - (mu - EAccept))) / KbT)))) + (NdChar / (2.0 + (((EDonor + (mu + Vef)) - Ec) / KbT))) t_1 = NdChar / (-1.0 - math.exp(((EDonor + (mu + (Vef - Ec))) / KbT))) tmp = 0 if NaChar <= -1.9e+86: tmp = t_0 elif NaChar <= -2e-15: tmp = (1.0 / ((2.0 + (Vef / KbT)) / NaChar)) - t_1 elif (NaChar <= -3.9e-73) or not (NaChar <= 5e-9): tmp = t_0 else: tmp = (-1.0 / (Vef * ((-1.0 / (KbT * NaChar)) - (2.0 / (Vef * NaChar))))) - t_1 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Ev - Float64(mu - EAccept))) / KbT)))) + Float64(NdChar / Float64(2.0 + Float64(Float64(Float64(EDonor + Float64(mu + Vef)) - Ec) / KbT)))) t_1 = Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) tmp = 0.0 if (NaChar <= -1.9e+86) tmp = t_0; elseif (NaChar <= -2e-15) tmp = Float64(Float64(1.0 / Float64(Float64(2.0 + Float64(Vef / KbT)) / NaChar)) - t_1); elseif ((NaChar <= -3.9e-73) || !(NaChar <= 5e-9)) tmp = t_0; else tmp = Float64(Float64(-1.0 / Float64(Vef * Float64(Float64(-1.0 / Float64(KbT * NaChar)) - Float64(2.0 / Float64(Vef * NaChar))))) - t_1); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = (NaChar / (1.0 + exp(((Vef + (Ev - (mu - EAccept))) / KbT)))) + (NdChar / (2.0 + (((EDonor + (mu + Vef)) - Ec) / KbT))); t_1 = NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT))); tmp = 0.0; if (NaChar <= -1.9e+86) tmp = t_0; elseif (NaChar <= -2e-15) tmp = (1.0 / ((2.0 + (Vef / KbT)) / NaChar)) - t_1; elseif ((NaChar <= -3.9e-73) || ~((NaChar <= 5e-9))) tmp = t_0; else tmp = (-1.0 / (Vef * ((-1.0 / (KbT * NaChar)) - (2.0 / (Vef * NaChar))))) - t_1; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(Ev - N[(mu - EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(2.0 + N[(N[(N[(EDonor + N[(mu + Vef), $MachinePrecision]), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(NdChar / N[(-1.0 - N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -1.9e+86], t$95$0, If[LessEqual[NaChar, -2e-15], N[(N[(1.0 / N[(N[(2.0 + N[(Vef / KbT), $MachinePrecision]), $MachinePrecision] / NaChar), $MachinePrecision]), $MachinePrecision] - t$95$1), $MachinePrecision], If[Or[LessEqual[NaChar, -3.9e-73], N[Not[LessEqual[NaChar, 5e-9]], $MachinePrecision]], t$95$0, N[(N[(-1.0 / N[(Vef * N[(N[(-1.0 / N[(KbT * NaChar), $MachinePrecision]), $MachinePrecision] - N[(2.0 / N[(Vef * NaChar), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - t$95$1), $MachinePrecision]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{Vef + \left(Ev - \left(mu - EAccept\right)\right)}{KbT}}} + \frac{NdChar}{2 + \frac{\left(EDonor + \left(mu + Vef\right)\right) - Ec}{KbT}}\\
t_1 := \frac{NdChar}{-1 - e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}}\\
\mathbf{if}\;NaChar \leq -1.9 \cdot 10^{+86}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;NaChar \leq -2 \cdot 10^{-15}:\\
\;\;\;\;\frac{1}{\frac{2 + \frac{Vef}{KbT}}{NaChar}} - t\_1\\
\mathbf{elif}\;NaChar \leq -3.9 \cdot 10^{-73} \lor \neg \left(NaChar \leq 5 \cdot 10^{-9}\right):\\
\;\;\;\;t\_0\\
\mathbf{else}:\\
\;\;\;\;\frac{-1}{Vef \cdot \left(\frac{-1}{KbT \cdot NaChar} - \frac{2}{Vef \cdot NaChar}\right)} - t\_1\\
\end{array}
\end{array}
if NaChar < -1.89999999999999989e86 or -2.0000000000000002e-15 < NaChar < -3.89999999999999982e-73 or 5.0000000000000001e-9 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 70.1%
Taylor expanded in KbT around -inf 74.2%
mul-1-neg74.2%
unsub-neg74.2%
Simplified74.2%
if -1.89999999999999989e86 < NaChar < -2.0000000000000002e-15Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 73.4%
Taylor expanded in Vef around 0 82.9%
clear-num82.9%
inv-pow82.9%
associate-+r+82.9%
metadata-eval82.9%
Applied egg-rr82.9%
unpow-182.9%
Simplified82.9%
if -3.89999999999999982e-73 < NaChar < 5.0000000000000001e-9Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 72.5%
Taylor expanded in Vef around 0 69.4%
clear-num69.4%
inv-pow69.4%
associate-+r+69.4%
metadata-eval69.4%
Applied egg-rr69.4%
unpow-169.4%
Simplified69.4%
Taylor expanded in Vef around inf 71.6%
associate-*r/71.6%
metadata-eval71.6%
Simplified71.6%
Final simplification73.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 (+ 1.0 (exp (/ (+ Vef (- Ev (- mu EAccept))) KbT))))))
(if (<= NaChar -2.7e+86)
(+
t_1
(/
NdChar
(*
Ec
(+
(/ (+ 2.0 (+ (/ EDonor KbT) (+ (/ Vef KbT) (/ mu KbT)))) Ec)
(/ -1.0 KbT)))))
(if (<= NaChar -2.9e-15)
(- (/ 1.0 (/ (+ 2.0 (/ Vef KbT)) NaChar)) t_0)
(if (or (<= NaChar -1e-78) (not (<= NaChar 2.2e-13)))
(+ t_1 (/ NdChar (+ 2.0 (/ (- (+ EDonor (+ mu Vef)) Ec) KbT))))
(-
(/ -1.0 (* Vef (- (/ -1.0 (* KbT NaChar)) (/ 2.0 (* Vef NaChar)))))
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 / (1.0 + exp(((Vef + (Ev - (mu - EAccept))) / KbT)));
double tmp;
if (NaChar <= -2.7e+86) {
tmp = t_1 + (NdChar / (Ec * (((2.0 + ((EDonor / KbT) + ((Vef / KbT) + (mu / KbT)))) / Ec) + (-1.0 / KbT))));
} else if (NaChar <= -2.9e-15) {
tmp = (1.0 / ((2.0 + (Vef / KbT)) / NaChar)) - t_0;
} else if ((NaChar <= -1e-78) || !(NaChar <= 2.2e-13)) {
tmp = t_1 + (NdChar / (2.0 + (((EDonor + (mu + Vef)) - Ec) / KbT)));
} else {
tmp = (-1.0 / (Vef * ((-1.0 / (KbT * NaChar)) - (2.0 / (Vef * NaChar))))) - 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 = nachar / (1.0d0 + exp(((vef + (ev - (mu - eaccept))) / kbt)))
if (nachar <= (-2.7d+86)) then
tmp = t_1 + (ndchar / (ec * (((2.0d0 + ((edonor / kbt) + ((vef / kbt) + (mu / kbt)))) / ec) + ((-1.0d0) / kbt))))
else if (nachar <= (-2.9d-15)) then
tmp = (1.0d0 / ((2.0d0 + (vef / kbt)) / nachar)) - t_0
else if ((nachar <= (-1d-78)) .or. (.not. (nachar <= 2.2d-13))) then
tmp = t_1 + (ndchar / (2.0d0 + (((edonor + (mu + vef)) - ec) / kbt)))
else
tmp = ((-1.0d0) / (vef * (((-1.0d0) / (kbt * nachar)) - (2.0d0 / (vef * nachar))))) - 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 / (1.0 + Math.exp(((Vef + (Ev - (mu - EAccept))) / KbT)));
double tmp;
if (NaChar <= -2.7e+86) {
tmp = t_1 + (NdChar / (Ec * (((2.0 + ((EDonor / KbT) + ((Vef / KbT) + (mu / KbT)))) / Ec) + (-1.0 / KbT))));
} else if (NaChar <= -2.9e-15) {
tmp = (1.0 / ((2.0 + (Vef / KbT)) / NaChar)) - t_0;
} else if ((NaChar <= -1e-78) || !(NaChar <= 2.2e-13)) {
tmp = t_1 + (NdChar / (2.0 + (((EDonor + (mu + Vef)) - Ec) / KbT)));
} else {
tmp = (-1.0 / (Vef * ((-1.0 / (KbT * NaChar)) - (2.0 / (Vef * NaChar))))) - 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 / (1.0 + math.exp(((Vef + (Ev - (mu - EAccept))) / KbT))) tmp = 0 if NaChar <= -2.7e+86: tmp = t_1 + (NdChar / (Ec * (((2.0 + ((EDonor / KbT) + ((Vef / KbT) + (mu / KbT)))) / Ec) + (-1.0 / KbT)))) elif NaChar <= -2.9e-15: tmp = (1.0 / ((2.0 + (Vef / KbT)) / NaChar)) - t_0 elif (NaChar <= -1e-78) or not (NaChar <= 2.2e-13): tmp = t_1 + (NdChar / (2.0 + (((EDonor + (mu + Vef)) - Ec) / KbT))) else: tmp = (-1.0 / (Vef * ((-1.0 / (KbT * NaChar)) - (2.0 / (Vef * NaChar))))) - 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(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Ev - Float64(mu - EAccept))) / KbT)))) tmp = 0.0 if (NaChar <= -2.7e+86) tmp = Float64(t_1 + Float64(NdChar / Float64(Ec * Float64(Float64(Float64(2.0 + Float64(Float64(EDonor / KbT) + Float64(Float64(Vef / KbT) + Float64(mu / KbT)))) / Ec) + Float64(-1.0 / KbT))))); elseif (NaChar <= -2.9e-15) tmp = Float64(Float64(1.0 / Float64(Float64(2.0 + Float64(Vef / KbT)) / NaChar)) - t_0); elseif ((NaChar <= -1e-78) || !(NaChar <= 2.2e-13)) tmp = Float64(t_1 + Float64(NdChar / Float64(2.0 + Float64(Float64(Float64(EDonor + Float64(mu + Vef)) - Ec) / KbT)))); else tmp = Float64(Float64(-1.0 / Float64(Vef * Float64(Float64(-1.0 / Float64(KbT * NaChar)) - Float64(2.0 / Float64(Vef * NaChar))))) - 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 / (1.0 + exp(((Vef + (Ev - (mu - EAccept))) / KbT))); tmp = 0.0; if (NaChar <= -2.7e+86) tmp = t_1 + (NdChar / (Ec * (((2.0 + ((EDonor / KbT) + ((Vef / KbT) + (mu / KbT)))) / Ec) + (-1.0 / KbT)))); elseif (NaChar <= -2.9e-15) tmp = (1.0 / ((2.0 + (Vef / KbT)) / NaChar)) - t_0; elseif ((NaChar <= -1e-78) || ~((NaChar <= 2.2e-13))) tmp = t_1 + (NdChar / (2.0 + (((EDonor + (mu + Vef)) - Ec) / KbT))); else tmp = (-1.0 / (Vef * ((-1.0 / (KbT * NaChar)) - (2.0 / (Vef * NaChar))))) - 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[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(Ev - N[(mu - EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -2.7e+86], N[(t$95$1 + N[(NdChar / N[(Ec * N[(N[(N[(2.0 + N[(N[(EDonor / KbT), $MachinePrecision] + N[(N[(Vef / KbT), $MachinePrecision] + N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / Ec), $MachinePrecision] + N[(-1.0 / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, -2.9e-15], N[(N[(1.0 / N[(N[(2.0 + N[(Vef / KbT), $MachinePrecision]), $MachinePrecision] / NaChar), $MachinePrecision]), $MachinePrecision] - t$95$0), $MachinePrecision], If[Or[LessEqual[NaChar, -1e-78], N[Not[LessEqual[NaChar, 2.2e-13]], $MachinePrecision]], N[(t$95$1 + N[(NdChar / N[(2.0 + N[(N[(N[(EDonor + N[(mu + Vef), $MachinePrecision]), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(-1.0 / N[(Vef * N[(N[(-1.0 / N[(KbT * NaChar), $MachinePrecision]), $MachinePrecision] - N[(2.0 / N[(Vef * NaChar), $MachinePrecision]), $MachinePrecision]), $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 := \frac{NaChar}{1 + e^{\frac{Vef + \left(Ev - \left(mu - EAccept\right)\right)}{KbT}}}\\
\mathbf{if}\;NaChar \leq -2.7 \cdot 10^{+86}:\\
\;\;\;\;t\_1 + \frac{NdChar}{Ec \cdot \left(\frac{2 + \left(\frac{EDonor}{KbT} + \left(\frac{Vef}{KbT} + \frac{mu}{KbT}\right)\right)}{Ec} + \frac{-1}{KbT}\right)}\\
\mathbf{elif}\;NaChar \leq -2.9 \cdot 10^{-15}:\\
\;\;\;\;\frac{1}{\frac{2 + \frac{Vef}{KbT}}{NaChar}} - t\_0\\
\mathbf{elif}\;NaChar \leq -1 \cdot 10^{-78} \lor \neg \left(NaChar \leq 2.2 \cdot 10^{-13}\right):\\
\;\;\;\;t\_1 + \frac{NdChar}{2 + \frac{\left(EDonor + \left(mu + Vef\right)\right) - Ec}{KbT}}\\
\mathbf{else}:\\
\;\;\;\;\frac{-1}{Vef \cdot \left(\frac{-1}{KbT \cdot NaChar} - \frac{2}{Vef \cdot NaChar}\right)} - t\_0\\
\end{array}
\end{array}
if NaChar < -2.70000000000000018e86Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 75.0%
Taylor expanded in Ec around -inf 77.2%
mul-1-neg77.2%
*-commutative77.2%
distribute-rgt-neg-in77.2%
+-commutative77.2%
mul-1-neg77.2%
unsub-neg77.2%
Simplified77.2%
if -2.70000000000000018e86 < NaChar < -2.90000000000000019e-15Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 73.4%
Taylor expanded in Vef around 0 82.9%
clear-num82.9%
inv-pow82.9%
associate-+r+82.9%
metadata-eval82.9%
Applied egg-rr82.9%
unpow-182.9%
Simplified82.9%
if -2.90000000000000019e-15 < NaChar < -9.99999999999999999e-79 or 2.19999999999999997e-13 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 67.6%
Taylor expanded in KbT around -inf 73.7%
mul-1-neg73.7%
unsub-neg73.7%
Simplified73.7%
if -9.99999999999999999e-79 < NaChar < 2.19999999999999997e-13Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 72.5%
Taylor expanded in Vef around 0 69.4%
clear-num69.4%
inv-pow69.4%
associate-+r+69.4%
metadata-eval69.4%
Applied egg-rr69.4%
unpow-169.4%
Simplified69.4%
Taylor expanded in Vef around inf 71.6%
associate-*r/71.6%
metadata-eval71.6%
Simplified71.6%
Final simplification73.7%
(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 (+ 2.0 (/ Vef KbT)))
(t_2
(+
(/ NaChar (+ 1.0 (exp (/ (+ Vef (- Ev (- mu EAccept))) KbT))))
(/ NdChar (- t_1 (/ Ec KbT))))))
(if (<= NaChar -4.8e+87)
t_2
(if (<= NaChar -2.2e-15)
(- (/ 1.0 (/ t_1 NaChar)) t_0)
(if (or (<= NaChar -2.7e-37) (not (<= NaChar 9.8e-11)))
t_2
(- (/ 1.0 (/ (+ (* 2.0 (/ KbT NaChar)) (/ Vef NaChar)) 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 = 2.0 + (Vef / KbT);
double t_2 = (NaChar / (1.0 + exp(((Vef + (Ev - (mu - EAccept))) / KbT)))) + (NdChar / (t_1 - (Ec / KbT)));
double tmp;
if (NaChar <= -4.8e+87) {
tmp = t_2;
} else if (NaChar <= -2.2e-15) {
tmp = (1.0 / (t_1 / NaChar)) - t_0;
} else if ((NaChar <= -2.7e-37) || !(NaChar <= 9.8e-11)) {
tmp = t_2;
} else {
tmp = (1.0 / (((2.0 * (KbT / NaChar)) + (Vef / NaChar)) / 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) :: t_2
real(8) :: tmp
t_0 = ndchar / ((-1.0d0) - exp(((edonor + (mu + (vef - ec))) / kbt)))
t_1 = 2.0d0 + (vef / kbt)
t_2 = (nachar / (1.0d0 + exp(((vef + (ev - (mu - eaccept))) / kbt)))) + (ndchar / (t_1 - (ec / kbt)))
if (nachar <= (-4.8d+87)) then
tmp = t_2
else if (nachar <= (-2.2d-15)) then
tmp = (1.0d0 / (t_1 / nachar)) - t_0
else if ((nachar <= (-2.7d-37)) .or. (.not. (nachar <= 9.8d-11))) then
tmp = t_2
else
tmp = (1.0d0 / (((2.0d0 * (kbt / nachar)) + (vef / nachar)) / 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 = 2.0 + (Vef / KbT);
double t_2 = (NaChar / (1.0 + Math.exp(((Vef + (Ev - (mu - EAccept))) / KbT)))) + (NdChar / (t_1 - (Ec / KbT)));
double tmp;
if (NaChar <= -4.8e+87) {
tmp = t_2;
} else if (NaChar <= -2.2e-15) {
tmp = (1.0 / (t_1 / NaChar)) - t_0;
} else if ((NaChar <= -2.7e-37) || !(NaChar <= 9.8e-11)) {
tmp = t_2;
} else {
tmp = (1.0 / (((2.0 * (KbT / NaChar)) + (Vef / NaChar)) / 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 = 2.0 + (Vef / KbT) t_2 = (NaChar / (1.0 + math.exp(((Vef + (Ev - (mu - EAccept))) / KbT)))) + (NdChar / (t_1 - (Ec / KbT))) tmp = 0 if NaChar <= -4.8e+87: tmp = t_2 elif NaChar <= -2.2e-15: tmp = (1.0 / (t_1 / NaChar)) - t_0 elif (NaChar <= -2.7e-37) or not (NaChar <= 9.8e-11): tmp = t_2 else: tmp = (1.0 / (((2.0 * (KbT / NaChar)) + (Vef / NaChar)) / 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 = Float64(2.0 + Float64(Vef / KbT)) t_2 = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Ev - Float64(mu - EAccept))) / KbT)))) + Float64(NdChar / Float64(t_1 - Float64(Ec / KbT)))) tmp = 0.0 if (NaChar <= -4.8e+87) tmp = t_2; elseif (NaChar <= -2.2e-15) tmp = Float64(Float64(1.0 / Float64(t_1 / NaChar)) - t_0); elseif ((NaChar <= -2.7e-37) || !(NaChar <= 9.8e-11)) tmp = t_2; else tmp = Float64(Float64(1.0 / Float64(Float64(Float64(2.0 * Float64(KbT / NaChar)) + Float64(Vef / NaChar)) / 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 = 2.0 + (Vef / KbT); t_2 = (NaChar / (1.0 + exp(((Vef + (Ev - (mu - EAccept))) / KbT)))) + (NdChar / (t_1 - (Ec / KbT))); tmp = 0.0; if (NaChar <= -4.8e+87) tmp = t_2; elseif (NaChar <= -2.2e-15) tmp = (1.0 / (t_1 / NaChar)) - t_0; elseif ((NaChar <= -2.7e-37) || ~((NaChar <= 9.8e-11))) tmp = t_2; else tmp = (1.0 / (((2.0 * (KbT / NaChar)) + (Vef / NaChar)) / 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[(2.0 + N[(Vef / KbT), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(Ev - N[(mu - EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(t$95$1 - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -4.8e+87], t$95$2, If[LessEqual[NaChar, -2.2e-15], N[(N[(1.0 / N[(t$95$1 / NaChar), $MachinePrecision]), $MachinePrecision] - t$95$0), $MachinePrecision], If[Or[LessEqual[NaChar, -2.7e-37], N[Not[LessEqual[NaChar, 9.8e-11]], $MachinePrecision]], t$95$2, N[(N[(1.0 / N[(N[(N[(2.0 * N[(KbT / NaChar), $MachinePrecision]), $MachinePrecision] + N[(Vef / NaChar), $MachinePrecision]), $MachinePrecision] / KbT), $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 := 2 + \frac{Vef}{KbT}\\
t_2 := \frac{NaChar}{1 + e^{\frac{Vef + \left(Ev - \left(mu - EAccept\right)\right)}{KbT}}} + \frac{NdChar}{t\_1 - \frac{Ec}{KbT}}\\
\mathbf{if}\;NaChar \leq -4.8 \cdot 10^{+87}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;NaChar \leq -2.2 \cdot 10^{-15}:\\
\;\;\;\;\frac{1}{\frac{t\_1}{NaChar}} - t\_0\\
\mathbf{elif}\;NaChar \leq -2.7 \cdot 10^{-37} \lor \neg \left(NaChar \leq 9.8 \cdot 10^{-11}\right):\\
\;\;\;\;t\_2\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{\frac{2 \cdot \frac{KbT}{NaChar} + \frac{Vef}{NaChar}}{KbT}} - t\_0\\
\end{array}
\end{array}
if NaChar < -4.79999999999999963e87 or -2.19999999999999986e-15 < NaChar < -2.70000000000000016e-37 or 9.7999999999999998e-11 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 74.0%
Taylor expanded in EDonor around inf 76.5%
associate-/r*76.9%
associate-/r*76.8%
Simplified76.8%
Taylor expanded in Vef around inf 75.8%
if -4.79999999999999963e87 < NaChar < -2.19999999999999986e-15Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 73.4%
Taylor expanded in Vef around 0 82.9%
clear-num82.9%
inv-pow82.9%
associate-+r+82.9%
metadata-eval82.9%
Applied egg-rr82.9%
unpow-182.9%
Simplified82.9%
if -2.70000000000000016e-37 < NaChar < 9.7999999999999998e-11Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 72.2%
Taylor expanded in Vef around 0 66.6%
clear-num66.5%
inv-pow66.5%
associate-+r+66.5%
metadata-eval66.5%
Applied egg-rr66.5%
unpow-166.5%
Simplified66.5%
Taylor expanded in KbT around 0 68.8%
Final simplification72.5%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (+ 2.0 (/ Vef KbT)))
(t_1 (/ NaChar (+ 1.0 (exp (/ (+ Vef (- Ev (- mu EAccept))) KbT)))))
(t_2 (+ t_1 (/ NdChar (+ 2.0 (/ (- (+ EDonor (+ mu Vef)) Ec) KbT)))))
(t_3 (/ NdChar (- -1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT))))))
(if (<= NaChar -2.25e+86)
t_2
(if (<= NaChar -2e-15)
(- (/ 1.0 (/ t_0 NaChar)) t_3)
(if (<= NaChar -2.4e-36)
(+ t_1 (/ NdChar (- t_0 (/ Ec KbT))))
(if (<= NaChar 1e-10)
(- (/ 1.0 (/ (+ (* 2.0 (/ KbT NaChar)) (/ Vef NaChar)) KbT)) t_3)
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 = 2.0 + (Vef / KbT);
double t_1 = NaChar / (1.0 + exp(((Vef + (Ev - (mu - EAccept))) / KbT)));
double t_2 = t_1 + (NdChar / (2.0 + (((EDonor + (mu + Vef)) - Ec) / KbT)));
double t_3 = NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT)));
double tmp;
if (NaChar <= -2.25e+86) {
tmp = t_2;
} else if (NaChar <= -2e-15) {
tmp = (1.0 / (t_0 / NaChar)) - t_3;
} else if (NaChar <= -2.4e-36) {
tmp = t_1 + (NdChar / (t_0 - (Ec / KbT)));
} else if (NaChar <= 1e-10) {
tmp = (1.0 / (((2.0 * (KbT / NaChar)) + (Vef / NaChar)) / KbT)) - t_3;
} else {
tmp = t_2;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: t_2
real(8) :: t_3
real(8) :: tmp
t_0 = 2.0d0 + (vef / kbt)
t_1 = nachar / (1.0d0 + exp(((vef + (ev - (mu - eaccept))) / kbt)))
t_2 = t_1 + (ndchar / (2.0d0 + (((edonor + (mu + vef)) - ec) / kbt)))
t_3 = ndchar / ((-1.0d0) - exp(((edonor + (mu + (vef - ec))) / kbt)))
if (nachar <= (-2.25d+86)) then
tmp = t_2
else if (nachar <= (-2d-15)) then
tmp = (1.0d0 / (t_0 / nachar)) - t_3
else if (nachar <= (-2.4d-36)) then
tmp = t_1 + (ndchar / (t_0 - (ec / kbt)))
else if (nachar <= 1d-10) then
tmp = (1.0d0 / (((2.0d0 * (kbt / nachar)) + (vef / nachar)) / kbt)) - t_3
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 = 2.0 + (Vef / KbT);
double t_1 = NaChar / (1.0 + Math.exp(((Vef + (Ev - (mu - EAccept))) / KbT)));
double t_2 = t_1 + (NdChar / (2.0 + (((EDonor + (mu + Vef)) - Ec) / KbT)));
double t_3 = NdChar / (-1.0 - Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)));
double tmp;
if (NaChar <= -2.25e+86) {
tmp = t_2;
} else if (NaChar <= -2e-15) {
tmp = (1.0 / (t_0 / NaChar)) - t_3;
} else if (NaChar <= -2.4e-36) {
tmp = t_1 + (NdChar / (t_0 - (Ec / KbT)));
} else if (NaChar <= 1e-10) {
tmp = (1.0 / (((2.0 * (KbT / NaChar)) + (Vef / NaChar)) / KbT)) - t_3;
} else {
tmp = t_2;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = 2.0 + (Vef / KbT) t_1 = NaChar / (1.0 + math.exp(((Vef + (Ev - (mu - EAccept))) / KbT))) t_2 = t_1 + (NdChar / (2.0 + (((EDonor + (mu + Vef)) - Ec) / KbT))) t_3 = NdChar / (-1.0 - math.exp(((EDonor + (mu + (Vef - Ec))) / KbT))) tmp = 0 if NaChar <= -2.25e+86: tmp = t_2 elif NaChar <= -2e-15: tmp = (1.0 / (t_0 / NaChar)) - t_3 elif NaChar <= -2.4e-36: tmp = t_1 + (NdChar / (t_0 - (Ec / KbT))) elif NaChar <= 1e-10: tmp = (1.0 / (((2.0 * (KbT / NaChar)) + (Vef / NaChar)) / KbT)) - t_3 else: tmp = t_2 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(2.0 + Float64(Vef / KbT)) t_1 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Ev - Float64(mu - EAccept))) / KbT)))) t_2 = Float64(t_1 + Float64(NdChar / Float64(2.0 + Float64(Float64(Float64(EDonor + Float64(mu + Vef)) - Ec) / KbT)))) t_3 = Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) tmp = 0.0 if (NaChar <= -2.25e+86) tmp = t_2; elseif (NaChar <= -2e-15) tmp = Float64(Float64(1.0 / Float64(t_0 / NaChar)) - t_3); elseif (NaChar <= -2.4e-36) tmp = Float64(t_1 + Float64(NdChar / Float64(t_0 - Float64(Ec / KbT)))); elseif (NaChar <= 1e-10) tmp = Float64(Float64(1.0 / Float64(Float64(Float64(2.0 * Float64(KbT / NaChar)) + Float64(Vef / NaChar)) / KbT)) - t_3); else tmp = t_2; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = 2.0 + (Vef / KbT); t_1 = NaChar / (1.0 + exp(((Vef + (Ev - (mu - EAccept))) / KbT))); t_2 = t_1 + (NdChar / (2.0 + (((EDonor + (mu + Vef)) - Ec) / KbT))); t_3 = NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT))); tmp = 0.0; if (NaChar <= -2.25e+86) tmp = t_2; elseif (NaChar <= -2e-15) tmp = (1.0 / (t_0 / NaChar)) - t_3; elseif (NaChar <= -2.4e-36) tmp = t_1 + (NdChar / (t_0 - (Ec / KbT))); elseif (NaChar <= 1e-10) tmp = (1.0 / (((2.0 * (KbT / NaChar)) + (Vef / NaChar)) / KbT)) - t_3; else tmp = t_2; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(2.0 + N[(Vef / KbT), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(Ev - N[(mu - EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(t$95$1 + N[(NdChar / N[(2.0 + N[(N[(N[(EDonor + N[(mu + Vef), $MachinePrecision]), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$3 = N[(NdChar / N[(-1.0 - N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -2.25e+86], t$95$2, If[LessEqual[NaChar, -2e-15], N[(N[(1.0 / N[(t$95$0 / NaChar), $MachinePrecision]), $MachinePrecision] - t$95$3), $MachinePrecision], If[LessEqual[NaChar, -2.4e-36], N[(t$95$1 + N[(NdChar / N[(t$95$0 - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 1e-10], N[(N[(1.0 / N[(N[(N[(2.0 * N[(KbT / NaChar), $MachinePrecision]), $MachinePrecision] + N[(Vef / NaChar), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision] - t$95$3), $MachinePrecision], t$95$2]]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := 2 + \frac{Vef}{KbT}\\
t_1 := \frac{NaChar}{1 + e^{\frac{Vef + \left(Ev - \left(mu - EAccept\right)\right)}{KbT}}}\\
t_2 := t\_1 + \frac{NdChar}{2 + \frac{\left(EDonor + \left(mu + Vef\right)\right) - Ec}{KbT}}\\
t_3 := \frac{NdChar}{-1 - e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}}\\
\mathbf{if}\;NaChar \leq -2.25 \cdot 10^{+86}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;NaChar \leq -2 \cdot 10^{-15}:\\
\;\;\;\;\frac{1}{\frac{t\_0}{NaChar}} - t\_3\\
\mathbf{elif}\;NaChar \leq -2.4 \cdot 10^{-36}:\\
\;\;\;\;t\_1 + \frac{NdChar}{t\_0 - \frac{Ec}{KbT}}\\
\mathbf{elif}\;NaChar \leq 10^{-10}:\\
\;\;\;\;\frac{1}{\frac{2 \cdot \frac{KbT}{NaChar} + \frac{Vef}{NaChar}}{KbT}} - t\_3\\
\mathbf{else}:\\
\;\;\;\;t\_2\\
\end{array}
\end{array}
if NaChar < -2.24999999999999996e86 or 1.00000000000000004e-10 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 72.8%
Taylor expanded in KbT around -inf 76.5%
mul-1-neg76.5%
unsub-neg76.5%
Simplified76.5%
if -2.24999999999999996e86 < NaChar < -2.0000000000000002e-15Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 73.4%
Taylor expanded in Vef around 0 82.9%
clear-num82.9%
inv-pow82.9%
associate-+r+82.9%
metadata-eval82.9%
Applied egg-rr82.9%
unpow-182.9%
Simplified82.9%
if -2.0000000000000002e-15 < NaChar < -2.4e-36Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 100.0%
Taylor expanded in EDonor around inf 100.0%
associate-/r*100.0%
associate-/r*100.0%
Simplified100.0%
Taylor expanded in Vef around inf 100.0%
if -2.4e-36 < NaChar < 1.00000000000000004e-10Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 72.2%
Taylor expanded in Vef around 0 66.6%
clear-num66.5%
inv-pow66.5%
associate-+r+66.5%
metadata-eval66.5%
Applied egg-rr66.5%
unpow-166.5%
Simplified66.5%
Taylor expanded in KbT around 0 68.8%
Final simplification73.3%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT)))
(t_1 (- (* NaChar 0.5) (/ NdChar (- -1.0 t_0))))
(t_2
(+
(/ NaChar (+ 1.0 (exp (/ (+ Vef (- Ev (- mu EAccept))) KbT))))
(/ NdChar 2.0))))
(if (<= NaChar -3.2e+162)
t_2
(if (<= NaChar -1.46e-22)
t_1
(if (<= NaChar -2.8e-38)
t_2
(if (<= NaChar 1.05e-218)
(+ (/ NdChar (+ 1.0 t_0)) (/ (* KbT NaChar) Vef))
(if (<= NaChar 4.5e-43) t_1 t_2)))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = exp(((EDonor + (mu + (Vef - Ec))) / KbT));
double t_1 = (NaChar * 0.5) - (NdChar / (-1.0 - t_0));
double t_2 = (NaChar / (1.0 + exp(((Vef + (Ev - (mu - EAccept))) / KbT)))) + (NdChar / 2.0);
double tmp;
if (NaChar <= -3.2e+162) {
tmp = t_2;
} else if (NaChar <= -1.46e-22) {
tmp = t_1;
} else if (NaChar <= -2.8e-38) {
tmp = t_2;
} else if (NaChar <= 1.05e-218) {
tmp = (NdChar / (1.0 + t_0)) + ((KbT * NaChar) / Vef);
} else if (NaChar <= 4.5e-43) {
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 = exp(((edonor + (mu + (vef - ec))) / kbt))
t_1 = (nachar * 0.5d0) - (ndchar / ((-1.0d0) - t_0))
t_2 = (nachar / (1.0d0 + exp(((vef + (ev - (mu - eaccept))) / kbt)))) + (ndchar / 2.0d0)
if (nachar <= (-3.2d+162)) then
tmp = t_2
else if (nachar <= (-1.46d-22)) then
tmp = t_1
else if (nachar <= (-2.8d-38)) then
tmp = t_2
else if (nachar <= 1.05d-218) then
tmp = (ndchar / (1.0d0 + t_0)) + ((kbt * nachar) / vef)
else if (nachar <= 4.5d-43) 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 = Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT));
double t_1 = (NaChar * 0.5) - (NdChar / (-1.0 - t_0));
double t_2 = (NaChar / (1.0 + Math.exp(((Vef + (Ev - (mu - EAccept))) / KbT)))) + (NdChar / 2.0);
double tmp;
if (NaChar <= -3.2e+162) {
tmp = t_2;
} else if (NaChar <= -1.46e-22) {
tmp = t_1;
} else if (NaChar <= -2.8e-38) {
tmp = t_2;
} else if (NaChar <= 1.05e-218) {
tmp = (NdChar / (1.0 + t_0)) + ((KbT * NaChar) / Vef);
} else if (NaChar <= 4.5e-43) {
tmp = t_1;
} else {
tmp = t_2;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)) t_1 = (NaChar * 0.5) - (NdChar / (-1.0 - t_0)) t_2 = (NaChar / (1.0 + math.exp(((Vef + (Ev - (mu - EAccept))) / KbT)))) + (NdChar / 2.0) tmp = 0 if NaChar <= -3.2e+162: tmp = t_2 elif NaChar <= -1.46e-22: tmp = t_1 elif NaChar <= -2.8e-38: tmp = t_2 elif NaChar <= 1.05e-218: tmp = (NdChar / (1.0 + t_0)) + ((KbT * NaChar) / Vef) elif NaChar <= 4.5e-43: tmp = t_1 else: tmp = t_2 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)) t_1 = Float64(Float64(NaChar * 0.5) - Float64(NdChar / Float64(-1.0 - t_0))) t_2 = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Ev - Float64(mu - EAccept))) / KbT)))) + Float64(NdChar / 2.0)) tmp = 0.0 if (NaChar <= -3.2e+162) tmp = t_2; elseif (NaChar <= -1.46e-22) tmp = t_1; elseif (NaChar <= -2.8e-38) tmp = t_2; elseif (NaChar <= 1.05e-218) tmp = Float64(Float64(NdChar / Float64(1.0 + t_0)) + Float64(Float64(KbT * NaChar) / Vef)); elseif (NaChar <= 4.5e-43) 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 = exp(((EDonor + (mu + (Vef - Ec))) / KbT)); t_1 = (NaChar * 0.5) - (NdChar / (-1.0 - t_0)); t_2 = (NaChar / (1.0 + exp(((Vef + (Ev - (mu - EAccept))) / KbT)))) + (NdChar / 2.0); tmp = 0.0; if (NaChar <= -3.2e+162) tmp = t_2; elseif (NaChar <= -1.46e-22) tmp = t_1; elseif (NaChar <= -2.8e-38) tmp = t_2; elseif (NaChar <= 1.05e-218) tmp = (NdChar / (1.0 + t_0)) + ((KbT * NaChar) / Vef); elseif (NaChar <= 4.5e-43) 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[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[(N[(NaChar * 0.5), $MachinePrecision] - N[(NdChar / N[(-1.0 - t$95$0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(Ev - N[(mu - EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -3.2e+162], t$95$2, If[LessEqual[NaChar, -1.46e-22], t$95$1, If[LessEqual[NaChar, -2.8e-38], t$95$2, If[LessEqual[NaChar, 1.05e-218], N[(N[(NdChar / N[(1.0 + t$95$0), $MachinePrecision]), $MachinePrecision] + N[(N[(KbT * NaChar), $MachinePrecision] / Vef), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 4.5e-43], t$95$1, t$95$2]]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}\\
t_1 := NaChar \cdot 0.5 - \frac{NdChar}{-1 - t\_0}\\
t_2 := \frac{NaChar}{1 + e^{\frac{Vef + \left(Ev - \left(mu - EAccept\right)\right)}{KbT}}} + \frac{NdChar}{2}\\
\mathbf{if}\;NaChar \leq -3.2 \cdot 10^{+162}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;NaChar \leq -1.46 \cdot 10^{-22}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;NaChar \leq -2.8 \cdot 10^{-38}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;NaChar \leq 1.05 \cdot 10^{-218}:\\
\;\;\;\;\frac{NdChar}{1 + t\_0} + \frac{KbT \cdot NaChar}{Vef}\\
\mathbf{elif}\;NaChar \leq 4.5 \cdot 10^{-43}:\\
\;\;\;\;t\_1\\
\mathbf{else}:\\
\;\;\;\;t\_2\\
\end{array}
\end{array}
if NaChar < -3.2000000000000001e162 or -1.46000000000000001e-22 < NaChar < -2.8e-38 or 4.50000000000000025e-43 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 66.0%
if -3.2000000000000001e162 < NaChar < -1.46000000000000001e-22 or 1.04999999999999997e-218 < NaChar < 4.50000000000000025e-43Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 65.2%
*-commutative65.2%
Simplified65.2%
if -2.8e-38 < NaChar < 1.04999999999999997e-218Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 69.6%
Taylor expanded in Vef around 0 64.5%
Taylor expanded in Vef around inf 61.8%
Final simplification64.3%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NdChar (- -1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT)))))
(t_1 (- (/ NaChar (+ 2.0 (/ Ev KbT))) t_0))
(t_2 (/ NaChar (+ 1.0 (exp (/ (+ Vef (- Ev (- mu EAccept))) KbT))))))
(if (<= NdChar -2.85e-39)
t_1
(if (<= NdChar -1.55e-204)
(+ t_2 (* KbT (/ NdChar Vef)))
(if (<= NdChar 5.8e-59)
(- t_2 (* KbT (/ NdChar Ec)))
(if (<= NdChar 8.2e-35)
t_1
(if (<= NdChar 0.00011)
(/ NaChar (+ 2.0 (/ Vef 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 / (2.0 + (Ev / KbT))) - t_0;
double t_2 = NaChar / (1.0 + exp(((Vef + (Ev - (mu - EAccept))) / KbT)));
double tmp;
if (NdChar <= -2.85e-39) {
tmp = t_1;
} else if (NdChar <= -1.55e-204) {
tmp = t_2 + (KbT * (NdChar / Vef));
} else if (NdChar <= 5.8e-59) {
tmp = t_2 - (KbT * (NdChar / Ec));
} else if (NdChar <= 8.2e-35) {
tmp = t_1;
} else if (NdChar <= 0.00011) {
tmp = NaChar / (2.0 + (Vef / 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 / (2.0d0 + (ev / kbt))) - t_0
t_2 = nachar / (1.0d0 + exp(((vef + (ev - (mu - eaccept))) / kbt)))
if (ndchar <= (-2.85d-39)) then
tmp = t_1
else if (ndchar <= (-1.55d-204)) then
tmp = t_2 + (kbt * (ndchar / vef))
else if (ndchar <= 5.8d-59) then
tmp = t_2 - (kbt * (ndchar / ec))
else if (ndchar <= 8.2d-35) then
tmp = t_1
else if (ndchar <= 0.00011d0) then
tmp = nachar / (2.0d0 + (vef / 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 / (2.0 + (Ev / KbT))) - t_0;
double t_2 = NaChar / (1.0 + Math.exp(((Vef + (Ev - (mu - EAccept))) / KbT)));
double tmp;
if (NdChar <= -2.85e-39) {
tmp = t_1;
} else if (NdChar <= -1.55e-204) {
tmp = t_2 + (KbT * (NdChar / Vef));
} else if (NdChar <= 5.8e-59) {
tmp = t_2 - (KbT * (NdChar / Ec));
} else if (NdChar <= 8.2e-35) {
tmp = t_1;
} else if (NdChar <= 0.00011) {
tmp = NaChar / (2.0 + (Vef / 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 / (2.0 + (Ev / KbT))) - t_0 t_2 = NaChar / (1.0 + math.exp(((Vef + (Ev - (mu - EAccept))) / KbT))) tmp = 0 if NdChar <= -2.85e-39: tmp = t_1 elif NdChar <= -1.55e-204: tmp = t_2 + (KbT * (NdChar / Vef)) elif NdChar <= 5.8e-59: tmp = t_2 - (KbT * (NdChar / Ec)) elif NdChar <= 8.2e-35: tmp = t_1 elif NdChar <= 0.00011: tmp = NaChar / (2.0 + (Vef / 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(2.0 + Float64(Ev / KbT))) - t_0) t_2 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Ev - Float64(mu - EAccept))) / KbT)))) tmp = 0.0 if (NdChar <= -2.85e-39) tmp = t_1; elseif (NdChar <= -1.55e-204) tmp = Float64(t_2 + Float64(KbT * Float64(NdChar / Vef))); elseif (NdChar <= 5.8e-59) tmp = Float64(t_2 - Float64(KbT * Float64(NdChar / Ec))); elseif (NdChar <= 8.2e-35) tmp = t_1; elseif (NdChar <= 0.00011) tmp = Float64(NaChar / Float64(2.0 + Float64(Vef / 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 / (2.0 + (Ev / KbT))) - t_0; t_2 = NaChar / (1.0 + exp(((Vef + (Ev - (mu - EAccept))) / KbT))); tmp = 0.0; if (NdChar <= -2.85e-39) tmp = t_1; elseif (NdChar <= -1.55e-204) tmp = t_2 + (KbT * (NdChar / Vef)); elseif (NdChar <= 5.8e-59) tmp = t_2 - (KbT * (NdChar / Ec)); elseif (NdChar <= 8.2e-35) tmp = t_1; elseif (NdChar <= 0.00011) tmp = NaChar / (2.0 + (Vef / 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[(2.0 + N[(Ev / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - t$95$0), $MachinePrecision]}, Block[{t$95$2 = N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(Ev - N[(mu - EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NdChar, -2.85e-39], t$95$1, If[LessEqual[NdChar, -1.55e-204], N[(t$95$2 + N[(KbT * N[(NdChar / Vef), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NdChar, 5.8e-59], N[(t$95$2 - N[(KbT * N[(NdChar / Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NdChar, 8.2e-35], t$95$1, If[LessEqual[NdChar, 0.00011], N[(NaChar / N[(2.0 + N[(Vef / KbT), $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}{2 + \frac{Ev}{KbT}} - t\_0\\
t_2 := \frac{NaChar}{1 + e^{\frac{Vef + \left(Ev - \left(mu - EAccept\right)\right)}{KbT}}}\\
\mathbf{if}\;NdChar \leq -2.85 \cdot 10^{-39}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;NdChar \leq -1.55 \cdot 10^{-204}:\\
\;\;\;\;t\_2 + KbT \cdot \frac{NdChar}{Vef}\\
\mathbf{elif}\;NdChar \leq 5.8 \cdot 10^{-59}:\\
\;\;\;\;t\_2 - KbT \cdot \frac{NdChar}{Ec}\\
\mathbf{elif}\;NdChar \leq 8.2 \cdot 10^{-35}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;NdChar \leq 0.00011:\\
\;\;\;\;\frac{NaChar}{2 + \frac{Vef}{KbT}}\\
\mathbf{else}:\\
\;\;\;\;NaChar \cdot 0.5 - t\_0\\
\end{array}
\end{array}
if NdChar < -2.8499999999999998e-39 or 5.80000000000000033e-59 < NdChar < 8.20000000000000052e-35Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 78.1%
Taylor expanded in Ev around 0 68.0%
+-commutative68.0%
Simplified68.0%
if -2.8499999999999998e-39 < NdChar < -1.55e-204Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 58.5%
Taylor expanded in Vef around inf 48.8%
associate-/l*58.3%
Simplified58.3%
if -1.55e-204 < NdChar < 5.80000000000000033e-59Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 68.9%
Taylor expanded in Ec around inf 60.0%
mul-1-neg60.0%
associate-/l*60.0%
distribute-rgt-neg-in60.0%
Simplified60.0%
if 8.20000000000000052e-35 < NdChar < 1.10000000000000004e-4Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 29.2%
Taylor expanded in Vef around inf 29.2%
Taylor expanded in Vef around 0 29.2%
Taylor expanded in NdChar around 0 65.2%
if 1.10000000000000004e-4 < NdChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 57.2%
*-commutative57.2%
Simplified57.2%
Final simplification61.5%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NaChar (+ 1.0 (exp (/ (+ Vef (- Ev (- mu EAccept))) KbT)))))
(t_1
(-
(* NaChar 0.5)
(/ NdChar (- -1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT)))))))
(if (<= NdChar -1.1e-39)
t_1
(if (<= NdChar -5.5e-205)
(+ t_0 (* KbT (/ NdChar Vef)))
(if (<= NdChar 6.2e-59) (- t_0 (* KbT (/ NdChar Ec))) t_1)))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NaChar / (1.0 + exp(((Vef + (Ev - (mu - EAccept))) / KbT)));
double t_1 = (NaChar * 0.5) - (NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT))));
double tmp;
if (NdChar <= -1.1e-39) {
tmp = t_1;
} else if (NdChar <= -5.5e-205) {
tmp = t_0 + (KbT * (NdChar / Vef));
} else if (NdChar <= 6.2e-59) {
tmp = t_0 - (KbT * (NdChar / Ec));
} else {
tmp = t_1;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = nachar / (1.0d0 + exp(((vef + (ev - (mu - eaccept))) / kbt)))
t_1 = (nachar * 0.5d0) - (ndchar / ((-1.0d0) - exp(((edonor + (mu + (vef - ec))) / kbt))))
if (ndchar <= (-1.1d-39)) then
tmp = t_1
else if (ndchar <= (-5.5d-205)) then
tmp = t_0 + (kbt * (ndchar / vef))
else if (ndchar <= 6.2d-59) then
tmp = t_0 - (kbt * (ndchar / ec))
else
tmp = t_1
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NaChar / (1.0 + Math.exp(((Vef + (Ev - (mu - EAccept))) / KbT)));
double t_1 = (NaChar * 0.5) - (NdChar / (-1.0 - Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT))));
double tmp;
if (NdChar <= -1.1e-39) {
tmp = t_1;
} else if (NdChar <= -5.5e-205) {
tmp = t_0 + (KbT * (NdChar / Vef));
} else if (NdChar <= 6.2e-59) {
tmp = t_0 - (KbT * (NdChar / Ec));
} else {
tmp = t_1;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NaChar / (1.0 + math.exp(((Vef + (Ev - (mu - EAccept))) / KbT))) t_1 = (NaChar * 0.5) - (NdChar / (-1.0 - math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) tmp = 0 if NdChar <= -1.1e-39: tmp = t_1 elif NdChar <= -5.5e-205: tmp = t_0 + (KbT * (NdChar / Vef)) elif NdChar <= 6.2e-59: tmp = t_0 - (KbT * (NdChar / Ec)) else: tmp = t_1 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Ev - Float64(mu - EAccept))) / KbT)))) t_1 = Float64(Float64(NaChar * 0.5) - Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT))))) tmp = 0.0 if (NdChar <= -1.1e-39) tmp = t_1; elseif (NdChar <= -5.5e-205) tmp = Float64(t_0 + Float64(KbT * Float64(NdChar / Vef))); elseif (NdChar <= 6.2e-59) tmp = Float64(t_0 - Float64(KbT * Float64(NdChar / Ec))); else tmp = t_1; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NaChar / (1.0 + exp(((Vef + (Ev - (mu - EAccept))) / KbT))); t_1 = (NaChar * 0.5) - (NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT)))); tmp = 0.0; if (NdChar <= -1.1e-39) tmp = t_1; elseif (NdChar <= -5.5e-205) tmp = t_0 + (KbT * (NdChar / Vef)); elseif (NdChar <= 6.2e-59) tmp = t_0 - (KbT * (NdChar / Ec)); else tmp = t_1; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(Ev - N[(mu - EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = 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]}, If[LessEqual[NdChar, -1.1e-39], t$95$1, If[LessEqual[NdChar, -5.5e-205], N[(t$95$0 + N[(KbT * N[(NdChar / Vef), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NdChar, 6.2e-59], N[(t$95$0 - N[(KbT * N[(NdChar / Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$1]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{Vef + \left(Ev - \left(mu - EAccept\right)\right)}{KbT}}}\\
t_1 := NaChar \cdot 0.5 - \frac{NdChar}{-1 - e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}}\\
\mathbf{if}\;NdChar \leq -1.1 \cdot 10^{-39}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;NdChar \leq -5.5 \cdot 10^{-205}:\\
\;\;\;\;t\_0 + KbT \cdot \frac{NdChar}{Vef}\\
\mathbf{elif}\;NdChar \leq 6.2 \cdot 10^{-59}:\\
\;\;\;\;t\_0 - KbT \cdot \frac{NdChar}{Ec}\\
\mathbf{else}:\\
\;\;\;\;t\_1\\
\end{array}
\end{array}
if NdChar < -1.1e-39 or 6.19999999999999998e-59 < NdChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 61.6%
*-commutative61.6%
Simplified61.6%
if -1.1e-39 < NdChar < -5.4999999999999996e-205Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 58.5%
Taylor expanded in Vef around inf 48.8%
associate-/l*58.3%
Simplified58.3%
if -5.4999999999999996e-205 < NdChar < 6.19999999999999998e-59Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 68.9%
Taylor expanded in Ec around inf 60.0%
mul-1-neg60.0%
associate-/l*60.0%
distribute-rgt-neg-in60.0%
Simplified60.0%
Final simplification60.7%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (or (<= NaChar -6.4e+162) (not (<= NaChar 1.55e-38)))
(+
(/ NaChar (+ 1.0 (exp (/ (+ Vef (- Ev (- mu EAccept))) KbT))))
(/ NdChar 2.0))
(-
(/ 1.0 (/ (+ 2.0 (/ Vef KbT)) NaChar))
(/ 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 <= -6.4e+162) || !(NaChar <= 1.55e-38)) {
tmp = (NaChar / (1.0 + exp(((Vef + (Ev - (mu - EAccept))) / KbT)))) + (NdChar / 2.0);
} else {
tmp = (1.0 / ((2.0 + (Vef / KbT)) / NaChar)) - (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 <= (-6.4d+162)) .or. (.not. (nachar <= 1.55d-38))) then
tmp = (nachar / (1.0d0 + exp(((vef + (ev - (mu - eaccept))) / kbt)))) + (ndchar / 2.0d0)
else
tmp = (1.0d0 / ((2.0d0 + (vef / kbt)) / nachar)) - (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 <= -6.4e+162) || !(NaChar <= 1.55e-38)) {
tmp = (NaChar / (1.0 + Math.exp(((Vef + (Ev - (mu - EAccept))) / KbT)))) + (NdChar / 2.0);
} else {
tmp = (1.0 / ((2.0 + (Vef / KbT)) / NaChar)) - (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 <= -6.4e+162) or not (NaChar <= 1.55e-38): tmp = (NaChar / (1.0 + math.exp(((Vef + (Ev - (mu - EAccept))) / KbT)))) + (NdChar / 2.0) else: tmp = (1.0 / ((2.0 + (Vef / KbT)) / NaChar)) - (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 <= -6.4e+162) || !(NaChar <= 1.55e-38)) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Ev - Float64(mu - EAccept))) / KbT)))) + Float64(NdChar / 2.0)); else tmp = Float64(Float64(1.0 / Float64(Float64(2.0 + Float64(Vef / KbT)) / NaChar)) - 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 <= -6.4e+162) || ~((NaChar <= 1.55e-38))) tmp = (NaChar / (1.0 + exp(((Vef + (Ev - (mu - EAccept))) / KbT)))) + (NdChar / 2.0); else tmp = (1.0 / ((2.0 + (Vef / KbT)) / NaChar)) - (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, -6.4e+162], N[Not[LessEqual[NaChar, 1.55e-38]], $MachinePrecision]], N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(Ev - N[(mu - EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision], N[(N[(1.0 / N[(N[(2.0 + N[(Vef / KbT), $MachinePrecision]), $MachinePrecision] / NaChar), $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}
\\
\begin{array}{l}
\mathbf{if}\;NaChar \leq -6.4 \cdot 10^{+162} \lor \neg \left(NaChar \leq 1.55 \cdot 10^{-38}\right):\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Vef + \left(Ev - \left(mu - EAccept\right)\right)}{KbT}}} + \frac{NdChar}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{\frac{2 + \frac{Vef}{KbT}}{NaChar}} - \frac{NdChar}{-1 - e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}}\\
\end{array}
\end{array}
if NaChar < -6.4000000000000002e162 or 1.54999999999999991e-38 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 65.1%
if -6.4000000000000002e162 < NaChar < 1.54999999999999991e-38Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 69.3%
Taylor expanded in Vef around 0 64.6%
clear-num64.6%
inv-pow64.6%
associate-+r+64.6%
metadata-eval64.6%
Applied egg-rr64.6%
unpow-164.6%
Simplified64.6%
Final simplification64.8%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (or (<= NaChar -3e+162) (not (<= NaChar 1.45e-38)))
(+
(/ NaChar (+ 1.0 (exp (/ (+ Vef (- Ev (- mu EAccept))) KbT))))
(/ NdChar 2.0))
(-
(/ NaChar (+ 1.0 (+ 1.0 (/ Vef 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) {
double tmp;
if ((NaChar <= -3e+162) || !(NaChar <= 1.45e-38)) {
tmp = (NaChar / (1.0 + exp(((Vef + (Ev - (mu - EAccept))) / KbT)))) + (NdChar / 2.0);
} else {
tmp = (NaChar / (1.0 + (1.0 + (Vef / KbT)))) - (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 <= (-3d+162)) .or. (.not. (nachar <= 1.45d-38))) then
tmp = (nachar / (1.0d0 + exp(((vef + (ev - (mu - eaccept))) / kbt)))) + (ndchar / 2.0d0)
else
tmp = (nachar / (1.0d0 + (1.0d0 + (vef / kbt)))) - (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 <= -3e+162) || !(NaChar <= 1.45e-38)) {
tmp = (NaChar / (1.0 + Math.exp(((Vef + (Ev - (mu - EAccept))) / KbT)))) + (NdChar / 2.0);
} else {
tmp = (NaChar / (1.0 + (1.0 + (Vef / KbT)))) - (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 <= -3e+162) or not (NaChar <= 1.45e-38): tmp = (NaChar / (1.0 + math.exp(((Vef + (Ev - (mu - EAccept))) / KbT)))) + (NdChar / 2.0) else: tmp = (NaChar / (1.0 + (1.0 + (Vef / KbT)))) - (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 <= -3e+162) || !(NaChar <= 1.45e-38)) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Ev - Float64(mu - EAccept))) / KbT)))) + Float64(NdChar / 2.0)); else tmp = Float64(Float64(NaChar / Float64(1.0 + Float64(1.0 + Float64(Vef / KbT)))) - 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 <= -3e+162) || ~((NaChar <= 1.45e-38))) tmp = (NaChar / (1.0 + exp(((Vef + (Ev - (mu - EAccept))) / KbT)))) + (NdChar / 2.0); else tmp = (NaChar / (1.0 + (1.0 + (Vef / KbT)))) - (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, -3e+162], N[Not[LessEqual[NaChar, 1.45e-38]], $MachinePrecision]], N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(Ev - N[(mu - EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar / N[(1.0 + N[(1.0 + N[(Vef / 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}
\\
\begin{array}{l}
\mathbf{if}\;NaChar \leq -3 \cdot 10^{+162} \lor \neg \left(NaChar \leq 1.45 \cdot 10^{-38}\right):\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Vef + \left(Ev - \left(mu - EAccept\right)\right)}{KbT}}} + \frac{NdChar}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + \left(1 + \frac{Vef}{KbT}\right)} - \frac{NdChar}{-1 - e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}}\\
\end{array}
\end{array}
if NaChar < -2.9999999999999998e162 or 1.44999999999999997e-38 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 65.1%
if -2.9999999999999998e162 < NaChar < 1.44999999999999997e-38Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 69.3%
Taylor expanded in Vef around 0 64.6%
Final simplification64.8%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (or (<= NaChar -3e+162) (not (<= NaChar 3.7e-40)))
(+
(/ NaChar (+ 1.0 (exp (/ (+ Vef (- Ev (- mu EAccept))) KbT))))
(/ NdChar 2.0))
(-
(* 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 <= -3e+162) || !(NaChar <= 3.7e-40)) {
tmp = (NaChar / (1.0 + exp(((Vef + (Ev - (mu - EAccept))) / KbT)))) + (NdChar / 2.0);
} 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 <= (-3d+162)) .or. (.not. (nachar <= 3.7d-40))) then
tmp = (nachar / (1.0d0 + exp(((vef + (ev - (mu - eaccept))) / kbt)))) + (ndchar / 2.0d0)
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 <= -3e+162) || !(NaChar <= 3.7e-40)) {
tmp = (NaChar / (1.0 + Math.exp(((Vef + (Ev - (mu - EAccept))) / KbT)))) + (NdChar / 2.0);
} 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 <= -3e+162) or not (NaChar <= 3.7e-40): tmp = (NaChar / (1.0 + math.exp(((Vef + (Ev - (mu - EAccept))) / KbT)))) + (NdChar / 2.0) 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 <= -3e+162) || !(NaChar <= 3.7e-40)) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Ev - Float64(mu - EAccept))) / KbT)))) + Float64(NdChar / 2.0)); 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 <= -3e+162) || ~((NaChar <= 3.7e-40))) tmp = (NaChar / (1.0 + exp(((Vef + (Ev - (mu - EAccept))) / KbT)))) + (NdChar / 2.0); 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, -3e+162], N[Not[LessEqual[NaChar, 3.7e-40]], $MachinePrecision]], N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(Ev - N[(mu - EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $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 -3 \cdot 10^{+162} \lor \neg \left(NaChar \leq 3.7 \cdot 10^{-40}\right):\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Vef + \left(Ev - \left(mu - EAccept\right)\right)}{KbT}}} + \frac{NdChar}{2}\\
\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 < -2.9999999999999998e162 or 3.69999999999999998e-40 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 65.1%
if -2.9999999999999998e162 < NaChar < 3.69999999999999998e-40Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 56.7%
*-commutative56.7%
Simplified56.7%
Final simplification60.0%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (+ (/ NaChar (+ 1.0 (exp (/ (+ Vef (- Ev (- mu EAccept))) KbT)))) (/ NdChar 2.0)))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NaChar / (1.0 + exp(((Vef + (Ev - (mu - EAccept))) / KbT)))) + (NdChar / 2.0);
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
code = (nachar / (1.0d0 + exp(((vef + (ev - (mu - eaccept))) / kbt)))) + (ndchar / 2.0d0)
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NaChar / (1.0 + Math.exp(((Vef + (Ev - (mu - EAccept))) / KbT)))) + (NdChar / 2.0);
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return (NaChar / (1.0 + math.exp(((Vef + (Ev - (mu - EAccept))) / KbT)))) + (NdChar / 2.0)
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Ev - Float64(mu - EAccept))) / KbT)))) + Float64(NdChar / 2.0)) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = (NaChar / (1.0 + exp(((Vef + (Ev - (mu - EAccept))) / KbT)))) + (NdChar / 2.0); end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(Ev - N[(mu - EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{NaChar}{1 + e^{\frac{Vef + \left(Ev - \left(mu - EAccept\right)\right)}{KbT}}} + \frac{NdChar}{2}
\end{array}
Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 45.6%
Final simplification45.6%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (if (<= Ev -3.7e+142) (+ (/ NaChar (+ 1.0 (exp (/ Ev KbT)))) (/ NdChar 2.0)) (+ (/ NaChar (+ 1.0 (exp (/ EAccept KbT)))) (/ NdChar 2.0))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (Ev <= -3.7e+142) {
tmp = (NaChar / (1.0 + exp((Ev / KbT)))) + (NdChar / 2.0);
} else {
tmp = (NaChar / (1.0 + exp((EAccept / KbT)))) + (NdChar / 2.0);
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if (ev <= (-3.7d+142)) then
tmp = (nachar / (1.0d0 + exp((ev / kbt)))) + (ndchar / 2.0d0)
else
tmp = (nachar / (1.0d0 + exp((eaccept / kbt)))) + (ndchar / 2.0d0)
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (Ev <= -3.7e+142) {
tmp = (NaChar / (1.0 + Math.exp((Ev / KbT)))) + (NdChar / 2.0);
} else {
tmp = (NaChar / (1.0 + Math.exp((EAccept / KbT)))) + (NdChar / 2.0);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if Ev <= -3.7e+142: tmp = (NaChar / (1.0 + math.exp((Ev / KbT)))) + (NdChar / 2.0) else: tmp = (NaChar / (1.0 + math.exp((EAccept / KbT)))) + (NdChar / 2.0) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (Ev <= -3.7e+142) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT)))) + Float64(NdChar / 2.0)); else tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT)))) + Float64(NdChar / 2.0)); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (Ev <= -3.7e+142) tmp = (NaChar / (1.0 + exp((Ev / KbT)))) + (NdChar / 2.0); else tmp = (NaChar / (1.0 + exp((EAccept / KbT)))) + (NdChar / 2.0); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[Ev, -3.7e+142], N[(N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;Ev \leq -3.7 \cdot 10^{+142}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Ev}{KbT}}} + \frac{NdChar}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}} + \frac{NdChar}{2}\\
\end{array}
\end{array}
if Ev < -3.6999999999999997e142Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 48.9%
Taylor expanded in Ev around inf 45.3%
if -3.6999999999999997e142 < Ev Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 45.2%
Taylor expanded in EAccept around inf 32.6%
Final simplification33.8%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (if (<= Ev -4.1e+145) (+ (/ NaChar (+ 1.0 (exp (/ Ev KbT)))) (/ NdChar 2.0)) (+ (/ NaChar (+ 1.0 (exp (/ Vef KbT)))) (/ NdChar 2.0))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (Ev <= -4.1e+145) {
tmp = (NaChar / (1.0 + exp((Ev / KbT)))) + (NdChar / 2.0);
} else {
tmp = (NaChar / (1.0 + exp((Vef / KbT)))) + (NdChar / 2.0);
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if (ev <= (-4.1d+145)) then
tmp = (nachar / (1.0d0 + exp((ev / kbt)))) + (ndchar / 2.0d0)
else
tmp = (nachar / (1.0d0 + exp((vef / kbt)))) + (ndchar / 2.0d0)
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (Ev <= -4.1e+145) {
tmp = (NaChar / (1.0 + Math.exp((Ev / KbT)))) + (NdChar / 2.0);
} else {
tmp = (NaChar / (1.0 + Math.exp((Vef / KbT)))) + (NdChar / 2.0);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if Ev <= -4.1e+145: tmp = (NaChar / (1.0 + math.exp((Ev / KbT)))) + (NdChar / 2.0) else: tmp = (NaChar / (1.0 + math.exp((Vef / KbT)))) + (NdChar / 2.0) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (Ev <= -4.1e+145) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT)))) + Float64(NdChar / 2.0)); else tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Vef / KbT)))) + Float64(NdChar / 2.0)); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (Ev <= -4.1e+145) tmp = (NaChar / (1.0 + exp((Ev / KbT)))) + (NdChar / 2.0); else tmp = (NaChar / (1.0 + exp((Vef / KbT)))) + (NdChar / 2.0); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[Ev, -4.1e+145], N[(N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar / N[(1.0 + N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;Ev \leq -4.1 \cdot 10^{+145}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Ev}{KbT}}} + \frac{NdChar}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Vef}{KbT}}} + \frac{NdChar}{2}\\
\end{array}
\end{array}
if Ev < -4.1000000000000001e145Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 48.9%
Taylor expanded in Ev around inf 45.3%
if -4.1000000000000001e145 < Ev Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 45.2%
Taylor expanded in Vef around inf 35.1%
Final simplification36.1%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (+ (/ NaChar (+ 1.0 (exp (/ EAccept KbT)))) (/ NdChar 2.0)))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NaChar / (1.0 + exp((EAccept / KbT)))) + (NdChar / 2.0);
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
code = (nachar / (1.0d0 + exp((eaccept / kbt)))) + (ndchar / 2.0d0)
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NaChar / (1.0 + Math.exp((EAccept / KbT)))) + (NdChar / 2.0);
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return (NaChar / (1.0 + math.exp((EAccept / KbT)))) + (NdChar / 2.0)
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT)))) + Float64(NdChar / 2.0)) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = (NaChar / (1.0 + exp((EAccept / KbT)))) + (NdChar / 2.0); end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}} + \frac{NdChar}{2}
\end{array}
Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 45.6%
Taylor expanded in EAccept around inf 32.5%
Final simplification32.5%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (* 0.5 (+ NdChar NaChar)))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return 0.5 * (NdChar + NaChar);
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
code = 0.5d0 * (ndchar + nachar)
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return 0.5 * (NdChar + NaChar);
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return 0.5 * (NdChar + NaChar)
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(0.5 * Float64(NdChar + NaChar)) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.5 * (NdChar + NaChar); end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(0.5 * N[(NdChar + NaChar), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
0.5 \cdot \left(NdChar + NaChar\right)
\end{array}
Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 45.6%
Taylor expanded in Vef around inf 33.9%
Taylor expanded in Vef around 0 23.7%
Taylor expanded in Vef around 0 25.4%
distribute-lft-out25.4%
Simplified25.4%
Final simplification25.4%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (* NdChar 0.5))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return NdChar * 0.5;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
code = ndchar * 0.5d0
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return NdChar * 0.5;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return NdChar * 0.5
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(NdChar * 0.5) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = NdChar * 0.5; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(NdChar * 0.5), $MachinePrecision]
\begin{array}{l}
\\
NdChar \cdot 0.5
\end{array}
Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 45.6%
Taylor expanded in Vef around inf 33.9%
Taylor expanded in Vef around 0 23.7%
Taylor expanded in NdChar around inf 19.6%
Final simplification19.6%
herbie shell --seed 2024112
(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))))))