
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (+ (/ NdChar (+ 1.0 (exp (/ (- (- (- (- Ec Vef) EDonor) mu)) KbT)))) (/ NaChar (+ 1.0 (exp (/ (+ (+ (+ Ev Vef) EAccept) (- mu)) KbT))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NdChar / (1.0 + exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + exp(((((Ev + Vef) + EAccept) + -mu) / KbT))));
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
code = (ndchar / (1.0d0 + exp((-(((ec - vef) - edonor) - mu) / kbt)))) + (nachar / (1.0d0 + exp(((((ev + vef) + eaccept) + -mu) / kbt))))
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NdChar / (1.0 + Math.exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + Math.exp(((((Ev + Vef) + EAccept) + -mu) / KbT))));
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return (NdChar / (1.0 + math.exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + math.exp(((((Ev + Vef) + EAccept) + -mu) / KbT))))
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(-Float64(Float64(Float64(Ec - Vef) - EDonor) - mu)) / KbT)))) + Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(Float64(Ev + Vef) + EAccept) + Float64(-mu)) / KbT))))) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = (NdChar / (1.0 + exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + exp(((((Ev + Vef) + EAccept) + -mu) / KbT)))); end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(N[(NdChar / N[(1.0 + N[Exp[N[((-N[(N[(N[(Ec - Vef), $MachinePrecision] - EDonor), $MachinePrecision] - mu), $MachinePrecision]) / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Exp[N[(N[(N[(N[(Ev + Vef), $MachinePrecision] + EAccept), $MachinePrecision] + (-mu)), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{NdChar}{1 + e^{\frac{-\left(\left(\left(Ec - Vef\right) - EDonor\right) - mu\right)}{KbT}}} + \frac{NaChar}{1 + e^{\frac{\left(\left(Ev + Vef\right) + EAccept\right) + \left(-mu\right)}{KbT}}}
\end{array}
Sampling outcomes in binary64 precision:
Herbie found 27 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (+ (/ NdChar (+ 1.0 (exp (/ (- (- (- (- Ec Vef) EDonor) mu)) KbT)))) (/ NaChar (+ 1.0 (exp (/ (+ (+ (+ Ev Vef) EAccept) (- mu)) KbT))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NdChar / (1.0 + exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + exp(((((Ev + Vef) + EAccept) + -mu) / KbT))));
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
code = (ndchar / (1.0d0 + exp((-(((ec - vef) - edonor) - mu) / kbt)))) + (nachar / (1.0d0 + exp(((((ev + vef) + eaccept) + -mu) / kbt))))
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NdChar / (1.0 + Math.exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + Math.exp(((((Ev + Vef) + EAccept) + -mu) / KbT))));
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return (NdChar / (1.0 + math.exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + math.exp(((((Ev + Vef) + EAccept) + -mu) / KbT))))
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(-Float64(Float64(Float64(Ec - Vef) - EDonor) - mu)) / KbT)))) + Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(Float64(Ev + Vef) + EAccept) + Float64(-mu)) / KbT))))) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = (NdChar / (1.0 + exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + exp(((((Ev + Vef) + EAccept) + -mu) / KbT)))); end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(N[(NdChar / N[(1.0 + N[Exp[N[((-N[(N[(N[(Ec - Vef), $MachinePrecision] - EDonor), $MachinePrecision] - mu), $MachinePrecision]) / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Exp[N[(N[(N[(N[(Ev + Vef), $MachinePrecision] + EAccept), $MachinePrecision] + (-mu)), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{NdChar}{1 + e^{\frac{-\left(\left(\left(Ec - Vef\right) - EDonor\right) - mu\right)}{KbT}}} + \frac{NaChar}{1 + e^{\frac{\left(\left(Ev + Vef\right) + EAccept\right) + \left(-mu\right)}{KbT}}}
\end{array}
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (+ (/ NdChar (+ (exp (/ (- (+ Vef (+ EDonor mu)) Ec) KbT)) 1.0)) (/ NaChar (+ (exp (/ (- Vef (- mu (+ Ev EAccept))) KbT)) 1.0))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NdChar / (exp((((Vef + (EDonor + mu)) - Ec) / KbT)) + 1.0)) + (NaChar / (exp(((Vef - (mu - (Ev + EAccept))) / KbT)) + 1.0));
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
code = (ndchar / (exp((((vef + (edonor + mu)) - ec) / kbt)) + 1.0d0)) + (nachar / (exp(((vef - (mu - (ev + eaccept))) / kbt)) + 1.0d0))
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NdChar / (Math.exp((((Vef + (EDonor + mu)) - Ec) / KbT)) + 1.0)) + (NaChar / (Math.exp(((Vef - (mu - (Ev + EAccept))) / KbT)) + 1.0));
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return (NdChar / (math.exp((((Vef + (EDonor + mu)) - Ec) / KbT)) + 1.0)) + (NaChar / (math.exp(((Vef - (mu - (Ev + EAccept))) / KbT)) + 1.0))
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(Float64(NdChar / Float64(exp(Float64(Float64(Float64(Vef + Float64(EDonor + mu)) - Ec) / KbT)) + 1.0)) + Float64(NaChar / Float64(exp(Float64(Float64(Vef - Float64(mu - Float64(Ev + EAccept))) / KbT)) + 1.0))) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = (NdChar / (exp((((Vef + (EDonor + mu)) - Ec) / KbT)) + 1.0)) + (NaChar / (exp(((Vef - (mu - (Ev + EAccept))) / KbT)) + 1.0)); end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(N[(NdChar / N[(N[Exp[N[(N[(N[(Vef + N[(EDonor + mu), $MachinePrecision]), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(N[Exp[N[(N[(Vef - N[(mu - N[(Ev + EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{NdChar}{e^{\frac{\left(Vef + \left(EDonor + mu\right)\right) - Ec}{KbT}} + 1} + \frac{NaChar}{e^{\frac{Vef - \left(mu - \left(Ev + EAccept\right)\right)}{KbT}} + 1}
\end{array}
Initial program 99.9%
Simplified99.9%
Final simplification99.9%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0
(-
(/ NdChar (+ (exp (/ mu KbT)) 1.0))
(/ NaChar (- -1.0 (exp (/ mu (- KbT))))))))
(if (<= mu -4.6e-5)
t_0
(if (<= mu 6.6e+64)
(+
(/ NaChar (+ (exp (/ (- Vef (- mu (+ Ev EAccept))) KbT)) 1.0))
(/ NdChar (+ (+ (/ (+ Vef (+ EDonor (- mu Ec))) KbT) 1.0) 1.0)))
(if (<= mu 2.5e+132)
(+
(/ NdChar (+ (exp (/ Vef KbT)) 1.0))
(/ NaChar (+ (exp (/ Ev KbT)) 1.0)))
(if (or (<= mu 8.2e+164) (not (<= mu 3e+180)))
t_0
(+
(/ NdChar (+ (exp (/ (- (+ Vef (+ EDonor mu)) Ec) KbT)) 1.0))
(/ (* KbT NaChar) (- (+ EAccept (+ Vef Ev)) mu)))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NdChar / (exp((mu / KbT)) + 1.0)) - (NaChar / (-1.0 - exp((mu / -KbT))));
double tmp;
if (mu <= -4.6e-5) {
tmp = t_0;
} else if (mu <= 6.6e+64) {
tmp = (NaChar / (exp(((Vef - (mu - (Ev + EAccept))) / KbT)) + 1.0)) + (NdChar / ((((Vef + (EDonor + (mu - Ec))) / KbT) + 1.0) + 1.0));
} else if (mu <= 2.5e+132) {
tmp = (NdChar / (exp((Vef / KbT)) + 1.0)) + (NaChar / (exp((Ev / KbT)) + 1.0));
} else if ((mu <= 8.2e+164) || !(mu <= 3e+180)) {
tmp = t_0;
} else {
tmp = (NdChar / (exp((((Vef + (EDonor + mu)) - Ec) / KbT)) + 1.0)) + ((KbT * NaChar) / ((EAccept + (Vef + Ev)) - mu));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: tmp
t_0 = (ndchar / (exp((mu / kbt)) + 1.0d0)) - (nachar / ((-1.0d0) - exp((mu / -kbt))))
if (mu <= (-4.6d-5)) then
tmp = t_0
else if (mu <= 6.6d+64) then
tmp = (nachar / (exp(((vef - (mu - (ev + eaccept))) / kbt)) + 1.0d0)) + (ndchar / ((((vef + (edonor + (mu - ec))) / kbt) + 1.0d0) + 1.0d0))
else if (mu <= 2.5d+132) then
tmp = (ndchar / (exp((vef / kbt)) + 1.0d0)) + (nachar / (exp((ev / kbt)) + 1.0d0))
else if ((mu <= 8.2d+164) .or. (.not. (mu <= 3d+180))) then
tmp = t_0
else
tmp = (ndchar / (exp((((vef + (edonor + mu)) - ec) / kbt)) + 1.0d0)) + ((kbt * nachar) / ((eaccept + (vef + ev)) - mu))
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 / (Math.exp((mu / KbT)) + 1.0)) - (NaChar / (-1.0 - Math.exp((mu / -KbT))));
double tmp;
if (mu <= -4.6e-5) {
tmp = t_0;
} else if (mu <= 6.6e+64) {
tmp = (NaChar / (Math.exp(((Vef - (mu - (Ev + EAccept))) / KbT)) + 1.0)) + (NdChar / ((((Vef + (EDonor + (mu - Ec))) / KbT) + 1.0) + 1.0));
} else if (mu <= 2.5e+132) {
tmp = (NdChar / (Math.exp((Vef / KbT)) + 1.0)) + (NaChar / (Math.exp((Ev / KbT)) + 1.0));
} else if ((mu <= 8.2e+164) || !(mu <= 3e+180)) {
tmp = t_0;
} else {
tmp = (NdChar / (Math.exp((((Vef + (EDonor + mu)) - Ec) / KbT)) + 1.0)) + ((KbT * NaChar) / ((EAccept + (Vef + Ev)) - mu));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = (NdChar / (math.exp((mu / KbT)) + 1.0)) - (NaChar / (-1.0 - math.exp((mu / -KbT)))) tmp = 0 if mu <= -4.6e-5: tmp = t_0 elif mu <= 6.6e+64: tmp = (NaChar / (math.exp(((Vef - (mu - (Ev + EAccept))) / KbT)) + 1.0)) + (NdChar / ((((Vef + (EDonor + (mu - Ec))) / KbT) + 1.0) + 1.0)) elif mu <= 2.5e+132: tmp = (NdChar / (math.exp((Vef / KbT)) + 1.0)) + (NaChar / (math.exp((Ev / KbT)) + 1.0)) elif (mu <= 8.2e+164) or not (mu <= 3e+180): tmp = t_0 else: tmp = (NdChar / (math.exp((((Vef + (EDonor + mu)) - Ec) / KbT)) + 1.0)) + ((KbT * NaChar) / ((EAccept + (Vef + Ev)) - mu)) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(NdChar / Float64(exp(Float64(mu / KbT)) + 1.0)) - Float64(NaChar / Float64(-1.0 - exp(Float64(mu / Float64(-KbT)))))) tmp = 0.0 if (mu <= -4.6e-5) tmp = t_0; elseif (mu <= 6.6e+64) tmp = Float64(Float64(NaChar / Float64(exp(Float64(Float64(Vef - Float64(mu - Float64(Ev + EAccept))) / KbT)) + 1.0)) + Float64(NdChar / Float64(Float64(Float64(Float64(Vef + Float64(EDonor + Float64(mu - Ec))) / KbT) + 1.0) + 1.0))); elseif (mu <= 2.5e+132) tmp = Float64(Float64(NdChar / Float64(exp(Float64(Vef / KbT)) + 1.0)) + Float64(NaChar / Float64(exp(Float64(Ev / KbT)) + 1.0))); elseif ((mu <= 8.2e+164) || !(mu <= 3e+180)) tmp = t_0; else tmp = Float64(Float64(NdChar / Float64(exp(Float64(Float64(Float64(Vef + Float64(EDonor + mu)) - Ec) / KbT)) + 1.0)) + Float64(Float64(KbT * NaChar) / Float64(Float64(EAccept + Float64(Vef + Ev)) - mu))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = (NdChar / (exp((mu / KbT)) + 1.0)) - (NaChar / (-1.0 - exp((mu / -KbT)))); tmp = 0.0; if (mu <= -4.6e-5) tmp = t_0; elseif (mu <= 6.6e+64) tmp = (NaChar / (exp(((Vef - (mu - (Ev + EAccept))) / KbT)) + 1.0)) + (NdChar / ((((Vef + (EDonor + (mu - Ec))) / KbT) + 1.0) + 1.0)); elseif (mu <= 2.5e+132) tmp = (NdChar / (exp((Vef / KbT)) + 1.0)) + (NaChar / (exp((Ev / KbT)) + 1.0)); elseif ((mu <= 8.2e+164) || ~((mu <= 3e+180))) tmp = t_0; else tmp = (NdChar / (exp((((Vef + (EDonor + mu)) - Ec) / KbT)) + 1.0)) + ((KbT * NaChar) / ((EAccept + (Vef + Ev)) - mu)); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(NdChar / N[(N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] - N[(NaChar / N[(-1.0 - N[Exp[N[(mu / (-KbT)), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[mu, -4.6e-5], t$95$0, If[LessEqual[mu, 6.6e+64], N[(N[(NaChar / N[(N[Exp[N[(N[(Vef - N[(mu - N[(Ev + EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(N[(N[(N[(Vef + N[(EDonor + N[(mu - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision] + 1.0), $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[mu, 2.5e+132], N[(N[(NdChar / N[(N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[Or[LessEqual[mu, 8.2e+164], N[Not[LessEqual[mu, 3e+180]], $MachinePrecision]], t$95$0, N[(N[(NdChar / N[(N[Exp[N[(N[(N[(Vef + N[(EDonor + mu), $MachinePrecision]), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(N[(KbT * NaChar), $MachinePrecision] / N[(N[(EAccept + N[(Vef + Ev), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{e^{\frac{mu}{KbT}} + 1} - \frac{NaChar}{-1 - e^{\frac{mu}{-KbT}}}\\
\mathbf{if}\;mu \leq -4.6 \cdot 10^{-5}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;mu \leq 6.6 \cdot 10^{+64}:\\
\;\;\;\;\frac{NaChar}{e^{\frac{Vef - \left(mu - \left(Ev + EAccept\right)\right)}{KbT}} + 1} + \frac{NdChar}{\left(\frac{Vef + \left(EDonor + \left(mu - Ec\right)\right)}{KbT} + 1\right) + 1}\\
\mathbf{elif}\;mu \leq 2.5 \cdot 10^{+132}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{Vef}{KbT}} + 1} + \frac{NaChar}{e^{\frac{Ev}{KbT}} + 1}\\
\mathbf{elif}\;mu \leq 8.2 \cdot 10^{+164} \lor \neg \left(mu \leq 3 \cdot 10^{+180}\right):\\
\;\;\;\;t\_0\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{\left(Vef + \left(EDonor + mu\right)\right) - Ec}{KbT}} + 1} + \frac{KbT \cdot NaChar}{\left(EAccept + \left(Vef + Ev\right)\right) - mu}\\
\end{array}
\end{array}
if mu < -4.6e-5 or 2.5000000000000001e132 < mu < 8.20000000000000032e164 or 3.00000000000000003e180 < mu Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 90.7%
Taylor expanded in mu around inf 78.3%
associate-*r/51.0%
mul-1-neg51.0%
Simplified78.3%
if -4.6e-5 < mu < 6.59999999999999976e64Initial program 99.9%
Simplified99.9%
Taylor expanded in KbT around inf 69.7%
+-commutative69.7%
associate-+r+69.7%
associate--l-69.7%
neg-mul-169.7%
unsub-neg69.7%
associate--l-69.7%
+-commutative69.7%
associate--r+69.7%
associate--r+69.7%
Simplified69.7%
if 6.59999999999999976e64 < mu < 2.5000000000000001e132Initial program 99.9%
Simplified99.9%
Taylor expanded in Vef around inf 84.2%
Taylor expanded in Ev around inf 75.6%
if 8.20000000000000032e164 < mu < 3.00000000000000003e180Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 84.1%
Taylor expanded in KbT around 0 84.1%
Final simplification73.8%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0
(-
(/ NdChar (+ (exp (/ mu KbT)) 1.0))
(/ NaChar (- -1.0 (exp (/ mu (- KbT)))))))
(t_1
(+
(/ NaChar (+ (exp (/ (- Vef (- mu (+ Ev EAccept))) KbT)) 1.0))
(/ NdChar (+ (exp (/ EDonor KbT)) 1.0)))))
(if (<= mu -2.8e+177)
t_0
(if (<= mu -9e-232)
t_1
(if (<= mu 3.9e-267)
(-
(/ NdChar (+ (exp (/ Ec (- KbT))) 1.0))
(/ NaChar (- -1.0 (exp (/ (- (+ Vef Ev) mu) KbT)))))
(if (<= mu 6.5e+188) t_1 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 / (exp((mu / KbT)) + 1.0)) - (NaChar / (-1.0 - exp((mu / -KbT))));
double t_1 = (NaChar / (exp(((Vef - (mu - (Ev + EAccept))) / KbT)) + 1.0)) + (NdChar / (exp((EDonor / KbT)) + 1.0));
double tmp;
if (mu <= -2.8e+177) {
tmp = t_0;
} else if (mu <= -9e-232) {
tmp = t_1;
} else if (mu <= 3.9e-267) {
tmp = (NdChar / (exp((Ec / -KbT)) + 1.0)) - (NaChar / (-1.0 - exp((((Vef + Ev) - mu) / KbT))));
} else if (mu <= 6.5e+188) {
tmp = t_1;
} 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) :: tmp
t_0 = (ndchar / (exp((mu / kbt)) + 1.0d0)) - (nachar / ((-1.0d0) - exp((mu / -kbt))))
t_1 = (nachar / (exp(((vef - (mu - (ev + eaccept))) / kbt)) + 1.0d0)) + (ndchar / (exp((edonor / kbt)) + 1.0d0))
if (mu <= (-2.8d+177)) then
tmp = t_0
else if (mu <= (-9d-232)) then
tmp = t_1
else if (mu <= 3.9d-267) then
tmp = (ndchar / (exp((ec / -kbt)) + 1.0d0)) - (nachar / ((-1.0d0) - exp((((vef + ev) - mu) / kbt))))
else if (mu <= 6.5d+188) then
tmp = t_1
else
tmp = t_0
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NdChar / (Math.exp((mu / KbT)) + 1.0)) - (NaChar / (-1.0 - Math.exp((mu / -KbT))));
double t_1 = (NaChar / (Math.exp(((Vef - (mu - (Ev + EAccept))) / KbT)) + 1.0)) + (NdChar / (Math.exp((EDonor / KbT)) + 1.0));
double tmp;
if (mu <= -2.8e+177) {
tmp = t_0;
} else if (mu <= -9e-232) {
tmp = t_1;
} else if (mu <= 3.9e-267) {
tmp = (NdChar / (Math.exp((Ec / -KbT)) + 1.0)) - (NaChar / (-1.0 - Math.exp((((Vef + Ev) - mu) / KbT))));
} else if (mu <= 6.5e+188) {
tmp = t_1;
} else {
tmp = t_0;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = (NdChar / (math.exp((mu / KbT)) + 1.0)) - (NaChar / (-1.0 - math.exp((mu / -KbT)))) t_1 = (NaChar / (math.exp(((Vef - (mu - (Ev + EAccept))) / KbT)) + 1.0)) + (NdChar / (math.exp((EDonor / KbT)) + 1.0)) tmp = 0 if mu <= -2.8e+177: tmp = t_0 elif mu <= -9e-232: tmp = t_1 elif mu <= 3.9e-267: tmp = (NdChar / (math.exp((Ec / -KbT)) + 1.0)) - (NaChar / (-1.0 - math.exp((((Vef + Ev) - mu) / KbT)))) elif mu <= 6.5e+188: tmp = t_1 else: tmp = t_0 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(NdChar / Float64(exp(Float64(mu / KbT)) + 1.0)) - Float64(NaChar / Float64(-1.0 - exp(Float64(mu / Float64(-KbT)))))) t_1 = Float64(Float64(NaChar / Float64(exp(Float64(Float64(Vef - Float64(mu - Float64(Ev + EAccept))) / KbT)) + 1.0)) + Float64(NdChar / Float64(exp(Float64(EDonor / KbT)) + 1.0))) tmp = 0.0 if (mu <= -2.8e+177) tmp = t_0; elseif (mu <= -9e-232) tmp = t_1; elseif (mu <= 3.9e-267) tmp = Float64(Float64(NdChar / Float64(exp(Float64(Ec / Float64(-KbT))) + 1.0)) - Float64(NaChar / Float64(-1.0 - exp(Float64(Float64(Float64(Vef + Ev) - mu) / KbT))))); elseif (mu <= 6.5e+188) tmp = t_1; else tmp = t_0; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = (NdChar / (exp((mu / KbT)) + 1.0)) - (NaChar / (-1.0 - exp((mu / -KbT)))); t_1 = (NaChar / (exp(((Vef - (mu - (Ev + EAccept))) / KbT)) + 1.0)) + (NdChar / (exp((EDonor / KbT)) + 1.0)); tmp = 0.0; if (mu <= -2.8e+177) tmp = t_0; elseif (mu <= -9e-232) tmp = t_1; elseif (mu <= 3.9e-267) tmp = (NdChar / (exp((Ec / -KbT)) + 1.0)) - (NaChar / (-1.0 - exp((((Vef + Ev) - mu) / KbT)))); elseif (mu <= 6.5e+188) tmp = t_1; else tmp = t_0; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(NdChar / N[(N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] - N[(NaChar / N[(-1.0 - N[Exp[N[(mu / (-KbT)), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NaChar / N[(N[Exp[N[(N[(Vef - N[(mu - N[(Ev + EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[mu, -2.8e+177], t$95$0, If[LessEqual[mu, -9e-232], t$95$1, If[LessEqual[mu, 3.9e-267], N[(N[(NdChar / N[(N[Exp[N[(Ec / (-KbT)), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] - N[(NaChar / N[(-1.0 - N[Exp[N[(N[(N[(Vef + Ev), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[mu, 6.5e+188], t$95$1, t$95$0]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{e^{\frac{mu}{KbT}} + 1} - \frac{NaChar}{-1 - e^{\frac{mu}{-KbT}}}\\
t_1 := \frac{NaChar}{e^{\frac{Vef - \left(mu - \left(Ev + EAccept\right)\right)}{KbT}} + 1} + \frac{NdChar}{e^{\frac{EDonor}{KbT}} + 1}\\
\mathbf{if}\;mu \leq -2.8 \cdot 10^{+177}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;mu \leq -9 \cdot 10^{-232}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;mu \leq 3.9 \cdot 10^{-267}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{Ec}{-KbT}} + 1} - \frac{NaChar}{-1 - e^{\frac{\left(Vef + Ev\right) - mu}{KbT}}}\\
\mathbf{elif}\;mu \leq 6.5 \cdot 10^{+188}:\\
\;\;\;\;t\_1\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if mu < -2.80000000000000002e177 or 6.49999999999999953e188 < mu Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 95.2%
Taylor expanded in mu around inf 88.5%
associate-*r/52.0%
mul-1-neg52.0%
Simplified88.5%
if -2.80000000000000002e177 < mu < -8.99999999999999933e-232 or 3.89999999999999977e-267 < mu < 6.49999999999999953e188Initial program 99.9%
Simplified99.9%
Taylor expanded in EDonor around inf 82.6%
if -8.99999999999999933e-232 < mu < 3.89999999999999977e-267Initial program 99.9%
Simplified99.9%
Taylor expanded in Ec around inf 82.2%
associate-*r/82.2%
mul-1-neg82.2%
Simplified82.2%
Taylor expanded in EAccept around 0 71.4%
Final simplification82.8%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (exp (/ (- (+ Vef Ev) mu) KbT)))
(t_1
(-
(/ NdChar (+ (exp (/ mu KbT)) 1.0))
(/ NaChar (- -1.0 (exp (/ mu (- KbT))))))))
(if (<= mu -2.25e+141)
t_1
(if (<= mu -1e-308)
(- (/ NdChar (+ (exp (/ Ec (- KbT))) 1.0)) (/ NaChar (- -1.0 t_0)))
(if (<= mu 2.3e+128)
(+ (/ NdChar (+ (exp (/ Vef KbT)) 1.0)) (/ NaChar (+ t_0 1.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((((Vef + Ev) - mu) / KbT));
double t_1 = (NdChar / (exp((mu / KbT)) + 1.0)) - (NaChar / (-1.0 - exp((mu / -KbT))));
double tmp;
if (mu <= -2.25e+141) {
tmp = t_1;
} else if (mu <= -1e-308) {
tmp = (NdChar / (exp((Ec / -KbT)) + 1.0)) - (NaChar / (-1.0 - t_0));
} else if (mu <= 2.3e+128) {
tmp = (NdChar / (exp((Vef / KbT)) + 1.0)) + (NaChar / (t_0 + 1.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((((vef + ev) - mu) / kbt))
t_1 = (ndchar / (exp((mu / kbt)) + 1.0d0)) - (nachar / ((-1.0d0) - exp((mu / -kbt))))
if (mu <= (-2.25d+141)) then
tmp = t_1
else if (mu <= (-1d-308)) then
tmp = (ndchar / (exp((ec / -kbt)) + 1.0d0)) - (nachar / ((-1.0d0) - t_0))
else if (mu <= 2.3d+128) then
tmp = (ndchar / (exp((vef / kbt)) + 1.0d0)) + (nachar / (t_0 + 1.0d0))
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((((Vef + Ev) - mu) / KbT));
double t_1 = (NdChar / (Math.exp((mu / KbT)) + 1.0)) - (NaChar / (-1.0 - Math.exp((mu / -KbT))));
double tmp;
if (mu <= -2.25e+141) {
tmp = t_1;
} else if (mu <= -1e-308) {
tmp = (NdChar / (Math.exp((Ec / -KbT)) + 1.0)) - (NaChar / (-1.0 - t_0));
} else if (mu <= 2.3e+128) {
tmp = (NdChar / (Math.exp((Vef / KbT)) + 1.0)) + (NaChar / (t_0 + 1.0));
} else {
tmp = t_1;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = math.exp((((Vef + Ev) - mu) / KbT)) t_1 = (NdChar / (math.exp((mu / KbT)) + 1.0)) - (NaChar / (-1.0 - math.exp((mu / -KbT)))) tmp = 0 if mu <= -2.25e+141: tmp = t_1 elif mu <= -1e-308: tmp = (NdChar / (math.exp((Ec / -KbT)) + 1.0)) - (NaChar / (-1.0 - t_0)) elif mu <= 2.3e+128: tmp = (NdChar / (math.exp((Vef / KbT)) + 1.0)) + (NaChar / (t_0 + 1.0)) else: tmp = t_1 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = exp(Float64(Float64(Float64(Vef + Ev) - mu) / KbT)) t_1 = Float64(Float64(NdChar / Float64(exp(Float64(mu / KbT)) + 1.0)) - Float64(NaChar / Float64(-1.0 - exp(Float64(mu / Float64(-KbT)))))) tmp = 0.0 if (mu <= -2.25e+141) tmp = t_1; elseif (mu <= -1e-308) tmp = Float64(Float64(NdChar / Float64(exp(Float64(Ec / Float64(-KbT))) + 1.0)) - Float64(NaChar / Float64(-1.0 - t_0))); elseif (mu <= 2.3e+128) tmp = Float64(Float64(NdChar / Float64(exp(Float64(Vef / KbT)) + 1.0)) + Float64(NaChar / Float64(t_0 + 1.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((((Vef + Ev) - mu) / KbT)); t_1 = (NdChar / (exp((mu / KbT)) + 1.0)) - (NaChar / (-1.0 - exp((mu / -KbT)))); tmp = 0.0; if (mu <= -2.25e+141) tmp = t_1; elseif (mu <= -1e-308) tmp = (NdChar / (exp((Ec / -KbT)) + 1.0)) - (NaChar / (-1.0 - t_0)); elseif (mu <= 2.3e+128) tmp = (NdChar / (exp((Vef / KbT)) + 1.0)) + (NaChar / (t_0 + 1.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[(N[(N[(Vef + Ev), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[(N[(NdChar / N[(N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] - N[(NaChar / N[(-1.0 - N[Exp[N[(mu / (-KbT)), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[mu, -2.25e+141], t$95$1, If[LessEqual[mu, -1e-308], N[(N[(NdChar / N[(N[Exp[N[(Ec / (-KbT)), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] - N[(NaChar / N[(-1.0 - t$95$0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[mu, 2.3e+128], N[(N[(NdChar / N[(N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(t$95$0 + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$1]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := e^{\frac{\left(Vef + Ev\right) - mu}{KbT}}\\
t_1 := \frac{NdChar}{e^{\frac{mu}{KbT}} + 1} - \frac{NaChar}{-1 - e^{\frac{mu}{-KbT}}}\\
\mathbf{if}\;mu \leq -2.25 \cdot 10^{+141}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;mu \leq -1 \cdot 10^{-308}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{Ec}{-KbT}} + 1} - \frac{NaChar}{-1 - t\_0}\\
\mathbf{elif}\;mu \leq 2.3 \cdot 10^{+128}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{Vef}{KbT}} + 1} + \frac{NaChar}{t\_0 + 1}\\
\mathbf{else}:\\
\;\;\;\;t\_1\\
\end{array}
\end{array}
if mu < -2.2500000000000001e141 or 2.29999999999999998e128 < mu Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 90.7%
Taylor expanded in mu around inf 81.2%
associate-*r/49.8%
mul-1-neg49.8%
Simplified81.2%
if -2.2500000000000001e141 < mu < -9.9999999999999991e-309Initial program 99.9%
Simplified99.9%
Taylor expanded in Ec around inf 80.5%
associate-*r/80.5%
mul-1-neg80.5%
Simplified80.5%
Taylor expanded in EAccept around 0 71.3%
if -9.9999999999999991e-309 < mu < 2.29999999999999998e128Initial program 99.9%
Simplified99.9%
Taylor expanded in Vef around inf 78.7%
Taylor expanded in EAccept around 0 72.6%
Final simplification75.0%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0
(+
(/ NdChar (+ (exp (/ (- (+ Vef (+ EDonor mu)) Ec) KbT)) 1.0))
(/ NaChar (- (+ 2.0 (+ (/ Vef KbT) (/ Ev KbT))) (/ mu KbT)))))
(t_1
(+
(/ NaChar (+ (exp (/ (- Vef (- mu (+ Ev EAccept))) KbT)) 1.0))
(/ NdChar (+ (+ (/ (+ Vef (+ EDonor (- mu Ec))) KbT) 1.0) 1.0)))))
(if (<= NaChar -6e-36)
t_1
(if (<= NaChar 1.9e-187)
t_0
(if (<= NaChar 1.8e-90)
(+
(/ NdChar (+ (exp (/ Vef KbT)) 1.0))
(/ NaChar (+ (exp (/ mu (- KbT))) 1.0)))
(if (<= NaChar 4.5e+21) 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 = (NdChar / (exp((((Vef + (EDonor + mu)) - Ec) / KbT)) + 1.0)) + (NaChar / ((2.0 + ((Vef / KbT) + (Ev / KbT))) - (mu / KbT)));
double t_1 = (NaChar / (exp(((Vef - (mu - (Ev + EAccept))) / KbT)) + 1.0)) + (NdChar / ((((Vef + (EDonor + (mu - Ec))) / KbT) + 1.0) + 1.0));
double tmp;
if (NaChar <= -6e-36) {
tmp = t_1;
} else if (NaChar <= 1.9e-187) {
tmp = t_0;
} else if (NaChar <= 1.8e-90) {
tmp = (NdChar / (exp((Vef / KbT)) + 1.0)) + (NaChar / (exp((mu / -KbT)) + 1.0));
} else if (NaChar <= 4.5e+21) {
tmp = 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 = (ndchar / (exp((((vef + (edonor + mu)) - ec) / kbt)) + 1.0d0)) + (nachar / ((2.0d0 + ((vef / kbt) + (ev / kbt))) - (mu / kbt)))
t_1 = (nachar / (exp(((vef - (mu - (ev + eaccept))) / kbt)) + 1.0d0)) + (ndchar / ((((vef + (edonor + (mu - ec))) / kbt) + 1.0d0) + 1.0d0))
if (nachar <= (-6d-36)) then
tmp = t_1
else if (nachar <= 1.9d-187) then
tmp = t_0
else if (nachar <= 1.8d-90) then
tmp = (ndchar / (exp((vef / kbt)) + 1.0d0)) + (nachar / (exp((mu / -kbt)) + 1.0d0))
else if (nachar <= 4.5d+21) then
tmp = 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 = (NdChar / (Math.exp((((Vef + (EDonor + mu)) - Ec) / KbT)) + 1.0)) + (NaChar / ((2.0 + ((Vef / KbT) + (Ev / KbT))) - (mu / KbT)));
double t_1 = (NaChar / (Math.exp(((Vef - (mu - (Ev + EAccept))) / KbT)) + 1.0)) + (NdChar / ((((Vef + (EDonor + (mu - Ec))) / KbT) + 1.0) + 1.0));
double tmp;
if (NaChar <= -6e-36) {
tmp = t_1;
} else if (NaChar <= 1.9e-187) {
tmp = t_0;
} else if (NaChar <= 1.8e-90) {
tmp = (NdChar / (Math.exp((Vef / KbT)) + 1.0)) + (NaChar / (Math.exp((mu / -KbT)) + 1.0));
} else if (NaChar <= 4.5e+21) {
tmp = t_0;
} else {
tmp = t_1;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = (NdChar / (math.exp((((Vef + (EDonor + mu)) - Ec) / KbT)) + 1.0)) + (NaChar / ((2.0 + ((Vef / KbT) + (Ev / KbT))) - (mu / KbT))) t_1 = (NaChar / (math.exp(((Vef - (mu - (Ev + EAccept))) / KbT)) + 1.0)) + (NdChar / ((((Vef + (EDonor + (mu - Ec))) / KbT) + 1.0) + 1.0)) tmp = 0 if NaChar <= -6e-36: tmp = t_1 elif NaChar <= 1.9e-187: tmp = t_0 elif NaChar <= 1.8e-90: tmp = (NdChar / (math.exp((Vef / KbT)) + 1.0)) + (NaChar / (math.exp((mu / -KbT)) + 1.0)) elif NaChar <= 4.5e+21: tmp = t_0 else: tmp = t_1 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(NdChar / Float64(exp(Float64(Float64(Float64(Vef + Float64(EDonor + mu)) - Ec) / KbT)) + 1.0)) + Float64(NaChar / Float64(Float64(2.0 + Float64(Float64(Vef / KbT) + Float64(Ev / KbT))) - Float64(mu / KbT)))) t_1 = Float64(Float64(NaChar / Float64(exp(Float64(Float64(Vef - Float64(mu - Float64(Ev + EAccept))) / KbT)) + 1.0)) + Float64(NdChar / Float64(Float64(Float64(Float64(Vef + Float64(EDonor + Float64(mu - Ec))) / KbT) + 1.0) + 1.0))) tmp = 0.0 if (NaChar <= -6e-36) tmp = t_1; elseif (NaChar <= 1.9e-187) tmp = t_0; elseif (NaChar <= 1.8e-90) tmp = Float64(Float64(NdChar / Float64(exp(Float64(Vef / KbT)) + 1.0)) + Float64(NaChar / Float64(exp(Float64(mu / Float64(-KbT))) + 1.0))); elseif (NaChar <= 4.5e+21) tmp = 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 = (NdChar / (exp((((Vef + (EDonor + mu)) - Ec) / KbT)) + 1.0)) + (NaChar / ((2.0 + ((Vef / KbT) + (Ev / KbT))) - (mu / KbT))); t_1 = (NaChar / (exp(((Vef - (mu - (Ev + EAccept))) / KbT)) + 1.0)) + (NdChar / ((((Vef + (EDonor + (mu - Ec))) / KbT) + 1.0) + 1.0)); tmp = 0.0; if (NaChar <= -6e-36) tmp = t_1; elseif (NaChar <= 1.9e-187) tmp = t_0; elseif (NaChar <= 1.8e-90) tmp = (NdChar / (exp((Vef / KbT)) + 1.0)) + (NaChar / (exp((mu / -KbT)) + 1.0)); elseif (NaChar <= 4.5e+21) tmp = 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[(N[(NdChar / N[(N[Exp[N[(N[(N[(Vef + N[(EDonor + mu), $MachinePrecision]), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(N[(2.0 + N[(N[(Vef / KbT), $MachinePrecision] + N[(Ev / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NaChar / N[(N[Exp[N[(N[(Vef - N[(mu - N[(Ev + EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(N[(N[(N[(Vef + N[(EDonor + N[(mu - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision] + 1.0), $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -6e-36], t$95$1, If[LessEqual[NaChar, 1.9e-187], t$95$0, If[LessEqual[NaChar, 1.8e-90], N[(N[(NdChar / N[(N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(N[Exp[N[(mu / (-KbT)), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 4.5e+21], t$95$0, t$95$1]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{e^{\frac{\left(Vef + \left(EDonor + mu\right)\right) - Ec}{KbT}} + 1} + \frac{NaChar}{\left(2 + \left(\frac{Vef}{KbT} + \frac{Ev}{KbT}\right)\right) - \frac{mu}{KbT}}\\
t_1 := \frac{NaChar}{e^{\frac{Vef - \left(mu - \left(Ev + EAccept\right)\right)}{KbT}} + 1} + \frac{NdChar}{\left(\frac{Vef + \left(EDonor + \left(mu - Ec\right)\right)}{KbT} + 1\right) + 1}\\
\mathbf{if}\;NaChar \leq -6 \cdot 10^{-36}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;NaChar \leq 1.9 \cdot 10^{-187}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;NaChar \leq 1.8 \cdot 10^{-90}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{Vef}{KbT}} + 1} + \frac{NaChar}{e^{\frac{mu}{-KbT}} + 1}\\
\mathbf{elif}\;NaChar \leq 4.5 \cdot 10^{+21}:\\
\;\;\;\;t\_0\\
\mathbf{else}:\\
\;\;\;\;t\_1\\
\end{array}
\end{array}
if NaChar < -6.0000000000000003e-36 or 4.5e21 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 77.3%
+-commutative77.3%
associate-+r+77.3%
associate--l-77.3%
neg-mul-177.3%
unsub-neg77.3%
associate--l-77.3%
+-commutative77.3%
associate--r+77.3%
associate--r+77.3%
Simplified77.3%
if -6.0000000000000003e-36 < NaChar < 1.90000000000000013e-187 or 1.7999999999999999e-90 < NaChar < 4.5e21Initial program 99.9%
Simplified99.9%
Taylor expanded in KbT around inf 65.0%
Taylor expanded in EAccept around 0 65.5%
if 1.90000000000000013e-187 < NaChar < 1.7999999999999999e-90Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 88.0%
Taylor expanded in mu around inf 76.0%
associate-*r/76.0%
mul-1-neg76.0%
Simplified76.0%
Final simplification72.1%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (exp (/ (- Vef (- mu (+ Ev EAccept))) KbT))))
(if (or (<= EDonor -8.5e-25) (not (<= EDonor 1.6e+88)))
(+ (/ NaChar (+ t_0 1.0)) (/ NdChar (+ (exp (/ EDonor KbT)) 1.0)))
(- (/ NdChar (+ (exp (/ Vef KbT)) 1.0)) (/ NaChar (- -1.0 t_0))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = exp(((Vef - (mu - (Ev + EAccept))) / KbT));
double tmp;
if ((EDonor <= -8.5e-25) || !(EDonor <= 1.6e+88)) {
tmp = (NaChar / (t_0 + 1.0)) + (NdChar / (exp((EDonor / KbT)) + 1.0));
} else {
tmp = (NdChar / (exp((Vef / KbT)) + 1.0)) - (NaChar / (-1.0 - t_0));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: tmp
t_0 = exp(((vef - (mu - (ev + eaccept))) / kbt))
if ((edonor <= (-8.5d-25)) .or. (.not. (edonor <= 1.6d+88))) then
tmp = (nachar / (t_0 + 1.0d0)) + (ndchar / (exp((edonor / kbt)) + 1.0d0))
else
tmp = (ndchar / (exp((vef / kbt)) + 1.0d0)) - (nachar / ((-1.0d0) - t_0))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = Math.exp(((Vef - (mu - (Ev + EAccept))) / KbT));
double tmp;
if ((EDonor <= -8.5e-25) || !(EDonor <= 1.6e+88)) {
tmp = (NaChar / (t_0 + 1.0)) + (NdChar / (Math.exp((EDonor / KbT)) + 1.0));
} else {
tmp = (NdChar / (Math.exp((Vef / KbT)) + 1.0)) - (NaChar / (-1.0 - t_0));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = math.exp(((Vef - (mu - (Ev + EAccept))) / KbT)) tmp = 0 if (EDonor <= -8.5e-25) or not (EDonor <= 1.6e+88): tmp = (NaChar / (t_0 + 1.0)) + (NdChar / (math.exp((EDonor / KbT)) + 1.0)) else: tmp = (NdChar / (math.exp((Vef / KbT)) + 1.0)) - (NaChar / (-1.0 - t_0)) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = exp(Float64(Float64(Vef - Float64(mu - Float64(Ev + EAccept))) / KbT)) tmp = 0.0 if ((EDonor <= -8.5e-25) || !(EDonor <= 1.6e+88)) tmp = Float64(Float64(NaChar / Float64(t_0 + 1.0)) + Float64(NdChar / Float64(exp(Float64(EDonor / KbT)) + 1.0))); else tmp = Float64(Float64(NdChar / Float64(exp(Float64(Vef / KbT)) + 1.0)) - Float64(NaChar / Float64(-1.0 - t_0))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = exp(((Vef - (mu - (Ev + EAccept))) / KbT)); tmp = 0.0; if ((EDonor <= -8.5e-25) || ~((EDonor <= 1.6e+88))) tmp = (NaChar / (t_0 + 1.0)) + (NdChar / (exp((EDonor / KbT)) + 1.0)); else tmp = (NdChar / (exp((Vef / KbT)) + 1.0)) - (NaChar / (-1.0 - t_0)); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[Exp[N[(N[(Vef - N[(mu - N[(Ev + EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]}, If[Or[LessEqual[EDonor, -8.5e-25], N[Not[LessEqual[EDonor, 1.6e+88]], $MachinePrecision]], N[(N[(NaChar / N[(t$95$0 + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar / N[(N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] - N[(NaChar / N[(-1.0 - t$95$0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := e^{\frac{Vef - \left(mu - \left(Ev + EAccept\right)\right)}{KbT}}\\
\mathbf{if}\;EDonor \leq -8.5 \cdot 10^{-25} \lor \neg \left(EDonor \leq 1.6 \cdot 10^{+88}\right):\\
\;\;\;\;\frac{NaChar}{t\_0 + 1} + \frac{NdChar}{e^{\frac{EDonor}{KbT}} + 1}\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{Vef}{KbT}} + 1} - \frac{NaChar}{-1 - t\_0}\\
\end{array}
\end{array}
if EDonor < -8.49999999999999981e-25 or 1.5999999999999999e88 < EDonor Initial program 99.9%
Simplified99.9%
Taylor expanded in EDonor around inf 84.5%
if -8.49999999999999981e-25 < EDonor < 1.5999999999999999e88Initial program 99.9%
Simplified99.9%
Taylor expanded in Vef around inf 79.1%
Final simplification81.7%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (exp (/ (- Vef (- mu (+ Ev EAccept))) KbT))))
(if (or (<= EDonor -5.8e+64) (not (<= EDonor 5.5e+165)))
(+ (/ NaChar (+ t_0 1.0)) (/ NdChar (+ (exp (/ EDonor KbT)) 1.0)))
(- (/ NdChar (+ (exp (/ mu KbT)) 1.0)) (/ NaChar (- -1.0 t_0))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = exp(((Vef - (mu - (Ev + EAccept))) / KbT));
double tmp;
if ((EDonor <= -5.8e+64) || !(EDonor <= 5.5e+165)) {
tmp = (NaChar / (t_0 + 1.0)) + (NdChar / (exp((EDonor / KbT)) + 1.0));
} else {
tmp = (NdChar / (exp((mu / KbT)) + 1.0)) - (NaChar / (-1.0 - t_0));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: tmp
t_0 = exp(((vef - (mu - (ev + eaccept))) / kbt))
if ((edonor <= (-5.8d+64)) .or. (.not. (edonor <= 5.5d+165))) then
tmp = (nachar / (t_0 + 1.0d0)) + (ndchar / (exp((edonor / kbt)) + 1.0d0))
else
tmp = (ndchar / (exp((mu / kbt)) + 1.0d0)) - (nachar / ((-1.0d0) - t_0))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = Math.exp(((Vef - (mu - (Ev + EAccept))) / KbT));
double tmp;
if ((EDonor <= -5.8e+64) || !(EDonor <= 5.5e+165)) {
tmp = (NaChar / (t_0 + 1.0)) + (NdChar / (Math.exp((EDonor / KbT)) + 1.0));
} else {
tmp = (NdChar / (Math.exp((mu / KbT)) + 1.0)) - (NaChar / (-1.0 - t_0));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = math.exp(((Vef - (mu - (Ev + EAccept))) / KbT)) tmp = 0 if (EDonor <= -5.8e+64) or not (EDonor <= 5.5e+165): tmp = (NaChar / (t_0 + 1.0)) + (NdChar / (math.exp((EDonor / KbT)) + 1.0)) else: tmp = (NdChar / (math.exp((mu / KbT)) + 1.0)) - (NaChar / (-1.0 - t_0)) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = exp(Float64(Float64(Vef - Float64(mu - Float64(Ev + EAccept))) / KbT)) tmp = 0.0 if ((EDonor <= -5.8e+64) || !(EDonor <= 5.5e+165)) tmp = Float64(Float64(NaChar / Float64(t_0 + 1.0)) + Float64(NdChar / Float64(exp(Float64(EDonor / KbT)) + 1.0))); else tmp = Float64(Float64(NdChar / Float64(exp(Float64(mu / KbT)) + 1.0)) - Float64(NaChar / Float64(-1.0 - t_0))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = exp(((Vef - (mu - (Ev + EAccept))) / KbT)); tmp = 0.0; if ((EDonor <= -5.8e+64) || ~((EDonor <= 5.5e+165))) tmp = (NaChar / (t_0 + 1.0)) + (NdChar / (exp((EDonor / KbT)) + 1.0)); else tmp = (NdChar / (exp((mu / KbT)) + 1.0)) - (NaChar / (-1.0 - t_0)); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[Exp[N[(N[(Vef - N[(mu - N[(Ev + EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]}, If[Or[LessEqual[EDonor, -5.8e+64], N[Not[LessEqual[EDonor, 5.5e+165]], $MachinePrecision]], N[(N[(NaChar / N[(t$95$0 + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar / N[(N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] - N[(NaChar / N[(-1.0 - t$95$0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := e^{\frac{Vef - \left(mu - \left(Ev + EAccept\right)\right)}{KbT}}\\
\mathbf{if}\;EDonor \leq -5.8 \cdot 10^{+64} \lor \neg \left(EDonor \leq 5.5 \cdot 10^{+165}\right):\\
\;\;\;\;\frac{NaChar}{t\_0 + 1} + \frac{NdChar}{e^{\frac{EDonor}{KbT}} + 1}\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{mu}{KbT}} + 1} - \frac{NaChar}{-1 - t\_0}\\
\end{array}
\end{array}
if EDonor < -5.79999999999999986e64 or 5.4999999999999998e165 < EDonor Initial program 100.0%
Simplified100.0%
Taylor expanded in EDonor around inf 89.6%
if -5.79999999999999986e64 < EDonor < 5.4999999999999998e165Initial program 99.9%
Simplified99.9%
Taylor expanded in mu around inf 79.4%
Final simplification82.9%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (<= EAccept 1e-10)
(+
(/ NdChar (+ (exp (/ Vef KbT)) 1.0))
(/ NaChar (+ (exp (/ (- (+ Vef Ev) mu) KbT)) 1.0)))
(if (<= EAccept 5.6e+126)
(+
(/ NaChar (+ (exp (/ (- Vef (- mu (+ Ev EAccept))) KbT)) 1.0))
(/ NdChar (+ (+ (/ (+ Vef (+ EDonor (- mu Ec))) KbT) 1.0) 1.0)))
(+
(/ NdChar (+ (exp (/ mu KbT)) 1.0))
(/ NaChar (+ (exp (/ EAccept KbT)) 1.0))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (EAccept <= 1e-10) {
tmp = (NdChar / (exp((Vef / KbT)) + 1.0)) + (NaChar / (exp((((Vef + Ev) - mu) / KbT)) + 1.0));
} else if (EAccept <= 5.6e+126) {
tmp = (NaChar / (exp(((Vef - (mu - (Ev + EAccept))) / KbT)) + 1.0)) + (NdChar / ((((Vef + (EDonor + (mu - Ec))) / KbT) + 1.0) + 1.0));
} else {
tmp = (NdChar / (exp((mu / KbT)) + 1.0)) + (NaChar / (exp((EAccept / KbT)) + 1.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 (eaccept <= 1d-10) then
tmp = (ndchar / (exp((vef / kbt)) + 1.0d0)) + (nachar / (exp((((vef + ev) - mu) / kbt)) + 1.0d0))
else if (eaccept <= 5.6d+126) then
tmp = (nachar / (exp(((vef - (mu - (ev + eaccept))) / kbt)) + 1.0d0)) + (ndchar / ((((vef + (edonor + (mu - ec))) / kbt) + 1.0d0) + 1.0d0))
else
tmp = (ndchar / (exp((mu / kbt)) + 1.0d0)) + (nachar / (exp((eaccept / kbt)) + 1.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 (EAccept <= 1e-10) {
tmp = (NdChar / (Math.exp((Vef / KbT)) + 1.0)) + (NaChar / (Math.exp((((Vef + Ev) - mu) / KbT)) + 1.0));
} else if (EAccept <= 5.6e+126) {
tmp = (NaChar / (Math.exp(((Vef - (mu - (Ev + EAccept))) / KbT)) + 1.0)) + (NdChar / ((((Vef + (EDonor + (mu - Ec))) / KbT) + 1.0) + 1.0));
} else {
tmp = (NdChar / (Math.exp((mu / KbT)) + 1.0)) + (NaChar / (Math.exp((EAccept / KbT)) + 1.0));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if EAccept <= 1e-10: tmp = (NdChar / (math.exp((Vef / KbT)) + 1.0)) + (NaChar / (math.exp((((Vef + Ev) - mu) / KbT)) + 1.0)) elif EAccept <= 5.6e+126: tmp = (NaChar / (math.exp(((Vef - (mu - (Ev + EAccept))) / KbT)) + 1.0)) + (NdChar / ((((Vef + (EDonor + (mu - Ec))) / KbT) + 1.0) + 1.0)) else: tmp = (NdChar / (math.exp((mu / KbT)) + 1.0)) + (NaChar / (math.exp((EAccept / KbT)) + 1.0)) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (EAccept <= 1e-10) tmp = Float64(Float64(NdChar / Float64(exp(Float64(Vef / KbT)) + 1.0)) + Float64(NaChar / Float64(exp(Float64(Float64(Float64(Vef + Ev) - mu) / KbT)) + 1.0))); elseif (EAccept <= 5.6e+126) tmp = Float64(Float64(NaChar / Float64(exp(Float64(Float64(Vef - Float64(mu - Float64(Ev + EAccept))) / KbT)) + 1.0)) + Float64(NdChar / Float64(Float64(Float64(Float64(Vef + Float64(EDonor + Float64(mu - Ec))) / KbT) + 1.0) + 1.0))); else tmp = Float64(Float64(NdChar / Float64(exp(Float64(mu / KbT)) + 1.0)) + Float64(NaChar / Float64(exp(Float64(EAccept / KbT)) + 1.0))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (EAccept <= 1e-10) tmp = (NdChar / (exp((Vef / KbT)) + 1.0)) + (NaChar / (exp((((Vef + Ev) - mu) / KbT)) + 1.0)); elseif (EAccept <= 5.6e+126) tmp = (NaChar / (exp(((Vef - (mu - (Ev + EAccept))) / KbT)) + 1.0)) + (NdChar / ((((Vef + (EDonor + (mu - Ec))) / KbT) + 1.0) + 1.0)); else tmp = (NdChar / (exp((mu / KbT)) + 1.0)) + (NaChar / (exp((EAccept / KbT)) + 1.0)); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[EAccept, 1e-10], N[(N[(NdChar / N[(N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(N[Exp[N[(N[(N[(Vef + Ev), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[EAccept, 5.6e+126], N[(N[(NaChar / N[(N[Exp[N[(N[(Vef - N[(mu - N[(Ev + EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(N[(N[(N[(Vef + N[(EDonor + N[(mu - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision] + 1.0), $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar / N[(N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;EAccept \leq 10^{-10}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{Vef}{KbT}} + 1} + \frac{NaChar}{e^{\frac{\left(Vef + Ev\right) - mu}{KbT}} + 1}\\
\mathbf{elif}\;EAccept \leq 5.6 \cdot 10^{+126}:\\
\;\;\;\;\frac{NaChar}{e^{\frac{Vef - \left(mu - \left(Ev + EAccept\right)\right)}{KbT}} + 1} + \frac{NdChar}{\left(\frac{Vef + \left(EDonor + \left(mu - Ec\right)\right)}{KbT} + 1\right) + 1}\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{mu}{KbT}} + 1} + \frac{NaChar}{e^{\frac{EAccept}{KbT}} + 1}\\
\end{array}
\end{array}
if EAccept < 1.00000000000000004e-10Initial program 99.9%
Simplified99.9%
Taylor expanded in Vef around inf 71.3%
Taylor expanded in EAccept around 0 67.8%
if 1.00000000000000004e-10 < EAccept < 5.60000000000000018e126Initial program 99.8%
Simplified99.8%
Taylor expanded in KbT around inf 60.0%
+-commutative60.0%
associate-+r+60.0%
associate--l-60.0%
neg-mul-160.0%
unsub-neg60.0%
associate--l-60.0%
+-commutative60.0%
associate--r+60.0%
associate--r+60.0%
Simplified60.0%
if 5.60000000000000018e126 < EAccept Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 71.8%
Taylor expanded in EAccept around inf 71.8%
Final simplification67.6%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (or (<= NaChar -4.8e-35) (not (<= NaChar 4.9e+23)))
(+
(/ NaChar (+ (exp (/ (- Vef (- mu (+ Ev EAccept))) KbT)) 1.0))
(/ NdChar (+ (+ (/ (+ Vef (+ EDonor (- mu Ec))) KbT) 1.0) 1.0)))
(-
(/ NdChar (+ (exp (/ (- (+ Vef (+ EDonor mu)) Ec) KbT)) 1.0))
(/
NaChar
(+
-1.0
(+
(/ mu KbT)
(- -1.0 (+ (/ EAccept KbT) (+ (/ Vef KbT) (/ Ev KbT))))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NaChar <= -4.8e-35) || !(NaChar <= 4.9e+23)) {
tmp = (NaChar / (exp(((Vef - (mu - (Ev + EAccept))) / KbT)) + 1.0)) + (NdChar / ((((Vef + (EDonor + (mu - Ec))) / KbT) + 1.0) + 1.0));
} else {
tmp = (NdChar / (exp((((Vef + (EDonor + mu)) - Ec) / KbT)) + 1.0)) - (NaChar / (-1.0 + ((mu / KbT) + (-1.0 - ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))))));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if ((nachar <= (-4.8d-35)) .or. (.not. (nachar <= 4.9d+23))) then
tmp = (nachar / (exp(((vef - (mu - (ev + eaccept))) / kbt)) + 1.0d0)) + (ndchar / ((((vef + (edonor + (mu - ec))) / kbt) + 1.0d0) + 1.0d0))
else
tmp = (ndchar / (exp((((vef + (edonor + mu)) - ec) / kbt)) + 1.0d0)) - (nachar / ((-1.0d0) + ((mu / kbt) + ((-1.0d0) - ((eaccept / kbt) + ((vef / kbt) + (ev / kbt)))))))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NaChar <= -4.8e-35) || !(NaChar <= 4.9e+23)) {
tmp = (NaChar / (Math.exp(((Vef - (mu - (Ev + EAccept))) / KbT)) + 1.0)) + (NdChar / ((((Vef + (EDonor + (mu - Ec))) / KbT) + 1.0) + 1.0));
} else {
tmp = (NdChar / (Math.exp((((Vef + (EDonor + mu)) - Ec) / KbT)) + 1.0)) - (NaChar / (-1.0 + ((mu / KbT) + (-1.0 - ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if (NaChar <= -4.8e-35) or not (NaChar <= 4.9e+23): tmp = (NaChar / (math.exp(((Vef - (mu - (Ev + EAccept))) / KbT)) + 1.0)) + (NdChar / ((((Vef + (EDonor + (mu - Ec))) / KbT) + 1.0) + 1.0)) else: tmp = (NdChar / (math.exp((((Vef + (EDonor + mu)) - Ec) / KbT)) + 1.0)) - (NaChar / (-1.0 + ((mu / KbT) + (-1.0 - ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT))))))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if ((NaChar <= -4.8e-35) || !(NaChar <= 4.9e+23)) tmp = Float64(Float64(NaChar / Float64(exp(Float64(Float64(Vef - Float64(mu - Float64(Ev + EAccept))) / KbT)) + 1.0)) + Float64(NdChar / Float64(Float64(Float64(Float64(Vef + Float64(EDonor + Float64(mu - Ec))) / KbT) + 1.0) + 1.0))); else tmp = Float64(Float64(NdChar / Float64(exp(Float64(Float64(Float64(Vef + Float64(EDonor + mu)) - Ec) / KbT)) + 1.0)) - Float64(NaChar / Float64(-1.0 + Float64(Float64(mu / KbT) + Float64(-1.0 - Float64(Float64(EAccept / KbT) + Float64(Float64(Vef / KbT) + Float64(Ev / KbT)))))))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if ((NaChar <= -4.8e-35) || ~((NaChar <= 4.9e+23))) tmp = (NaChar / (exp(((Vef - (mu - (Ev + EAccept))) / KbT)) + 1.0)) + (NdChar / ((((Vef + (EDonor + (mu - Ec))) / KbT) + 1.0) + 1.0)); else tmp = (NdChar / (exp((((Vef + (EDonor + mu)) - Ec) / KbT)) + 1.0)) - (NaChar / (-1.0 + ((mu / KbT) + (-1.0 - ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT))))))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[Or[LessEqual[NaChar, -4.8e-35], N[Not[LessEqual[NaChar, 4.9e+23]], $MachinePrecision]], N[(N[(NaChar / N[(N[Exp[N[(N[(Vef - N[(mu - N[(Ev + EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(N[(N[(N[(Vef + N[(EDonor + N[(mu - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision] + 1.0), $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar / N[(N[Exp[N[(N[(N[(Vef + N[(EDonor + mu), $MachinePrecision]), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] - N[(NaChar / N[(-1.0 + N[(N[(mu / KbT), $MachinePrecision] + N[(-1.0 - N[(N[(EAccept / KbT), $MachinePrecision] + N[(N[(Vef / KbT), $MachinePrecision] + N[(Ev / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NaChar \leq -4.8 \cdot 10^{-35} \lor \neg \left(NaChar \leq 4.9 \cdot 10^{+23}\right):\\
\;\;\;\;\frac{NaChar}{e^{\frac{Vef - \left(mu - \left(Ev + EAccept\right)\right)}{KbT}} + 1} + \frac{NdChar}{\left(\frac{Vef + \left(EDonor + \left(mu - Ec\right)\right)}{KbT} + 1\right) + 1}\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{\left(Vef + \left(EDonor + mu\right)\right) - Ec}{KbT}} + 1} - \frac{NaChar}{-1 + \left(\frac{mu}{KbT} + \left(-1 - \left(\frac{EAccept}{KbT} + \left(\frac{Vef}{KbT} + \frac{Ev}{KbT}\right)\right)\right)\right)}\\
\end{array}
\end{array}
if NaChar < -4.8000000000000003e-35 or 4.9000000000000003e23 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 77.3%
+-commutative77.3%
associate-+r+77.3%
associate--l-77.3%
neg-mul-177.3%
unsub-neg77.3%
associate--l-77.3%
+-commutative77.3%
associate--r+77.3%
associate--r+77.3%
Simplified77.3%
if -4.8000000000000003e-35 < NaChar < 4.9000000000000003e23Initial program 99.9%
Simplified99.9%
Taylor expanded in KbT around inf 63.3%
Final simplification70.4%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NdChar (+ (exp (/ (- (+ Vef (+ EDonor mu)) Ec) KbT)) 1.0)))
(t_1 (+ t_0 (* KbT (/ NaChar Vef))))
(t_2
(-
(/ NdChar 2.0)
(/ NaChar (- -1.0 (exp (/ (- Vef (- mu (+ Ev EAccept))) KbT)))))))
(if (<= NaChar -1e-68)
t_2
(if (<= NaChar -5.1e-175)
t_1
(if (<= NaChar -1.05e-199)
t_2
(if (<= NaChar -4.5e-246)
(+ t_0 (* NaChar (/ KbT EAccept)))
(if (<= NaChar 2.65e-76) 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 = NdChar / (exp((((Vef + (EDonor + mu)) - Ec) / KbT)) + 1.0);
double t_1 = t_0 + (KbT * (NaChar / Vef));
double t_2 = (NdChar / 2.0) - (NaChar / (-1.0 - exp(((Vef - (mu - (Ev + EAccept))) / KbT))));
double tmp;
if (NaChar <= -1e-68) {
tmp = t_2;
} else if (NaChar <= -5.1e-175) {
tmp = t_1;
} else if (NaChar <= -1.05e-199) {
tmp = t_2;
} else if (NaChar <= -4.5e-246) {
tmp = t_0 + (NaChar * (KbT / EAccept));
} else if (NaChar <= 2.65e-76) {
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 = ndchar / (exp((((vef + (edonor + mu)) - ec) / kbt)) + 1.0d0)
t_1 = t_0 + (kbt * (nachar / vef))
t_2 = (ndchar / 2.0d0) - (nachar / ((-1.0d0) - exp(((vef - (mu - (ev + eaccept))) / kbt))))
if (nachar <= (-1d-68)) then
tmp = t_2
else if (nachar <= (-5.1d-175)) then
tmp = t_1
else if (nachar <= (-1.05d-199)) then
tmp = t_2
else if (nachar <= (-4.5d-246)) then
tmp = t_0 + (nachar * (kbt / eaccept))
else if (nachar <= 2.65d-76) 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 = NdChar / (Math.exp((((Vef + (EDonor + mu)) - Ec) / KbT)) + 1.0);
double t_1 = t_0 + (KbT * (NaChar / Vef));
double t_2 = (NdChar / 2.0) - (NaChar / (-1.0 - Math.exp(((Vef - (mu - (Ev + EAccept))) / KbT))));
double tmp;
if (NaChar <= -1e-68) {
tmp = t_2;
} else if (NaChar <= -5.1e-175) {
tmp = t_1;
} else if (NaChar <= -1.05e-199) {
tmp = t_2;
} else if (NaChar <= -4.5e-246) {
tmp = t_0 + (NaChar * (KbT / EAccept));
} else if (NaChar <= 2.65e-76) {
tmp = t_1;
} else {
tmp = t_2;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NdChar / (math.exp((((Vef + (EDonor + mu)) - Ec) / KbT)) + 1.0) t_1 = t_0 + (KbT * (NaChar / Vef)) t_2 = (NdChar / 2.0) - (NaChar / (-1.0 - math.exp(((Vef - (mu - (Ev + EAccept))) / KbT)))) tmp = 0 if NaChar <= -1e-68: tmp = t_2 elif NaChar <= -5.1e-175: tmp = t_1 elif NaChar <= -1.05e-199: tmp = t_2 elif NaChar <= -4.5e-246: tmp = t_0 + (NaChar * (KbT / EAccept)) elif NaChar <= 2.65e-76: tmp = t_1 else: tmp = t_2 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NdChar / Float64(exp(Float64(Float64(Float64(Vef + Float64(EDonor + mu)) - Ec) / KbT)) + 1.0)) t_1 = Float64(t_0 + Float64(KbT * Float64(NaChar / Vef))) t_2 = Float64(Float64(NdChar / 2.0) - Float64(NaChar / Float64(-1.0 - exp(Float64(Float64(Vef - Float64(mu - Float64(Ev + EAccept))) / KbT))))) tmp = 0.0 if (NaChar <= -1e-68) tmp = t_2; elseif (NaChar <= -5.1e-175) tmp = t_1; elseif (NaChar <= -1.05e-199) tmp = t_2; elseif (NaChar <= -4.5e-246) tmp = Float64(t_0 + Float64(NaChar * Float64(KbT / EAccept))); elseif (NaChar <= 2.65e-76) 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 = NdChar / (exp((((Vef + (EDonor + mu)) - Ec) / KbT)) + 1.0); t_1 = t_0 + (KbT * (NaChar / Vef)); t_2 = (NdChar / 2.0) - (NaChar / (-1.0 - exp(((Vef - (mu - (Ev + EAccept))) / KbT)))); tmp = 0.0; if (NaChar <= -1e-68) tmp = t_2; elseif (NaChar <= -5.1e-175) tmp = t_1; elseif (NaChar <= -1.05e-199) tmp = t_2; elseif (NaChar <= -4.5e-246) tmp = t_0 + (NaChar * (KbT / EAccept)); elseif (NaChar <= 2.65e-76) 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[(NdChar / N[(N[Exp[N[(N[(N[(Vef + N[(EDonor + mu), $MachinePrecision]), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(t$95$0 + N[(KbT * N[(NaChar / Vef), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(N[(NdChar / 2.0), $MachinePrecision] - N[(NaChar / N[(-1.0 - N[Exp[N[(N[(Vef - N[(mu - N[(Ev + EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -1e-68], t$95$2, If[LessEqual[NaChar, -5.1e-175], t$95$1, If[LessEqual[NaChar, -1.05e-199], t$95$2, If[LessEqual[NaChar, -4.5e-246], N[(t$95$0 + N[(NaChar * N[(KbT / EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 2.65e-76], t$95$1, t$95$2]]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{e^{\frac{\left(Vef + \left(EDonor + mu\right)\right) - Ec}{KbT}} + 1}\\
t_1 := t\_0 + KbT \cdot \frac{NaChar}{Vef}\\
t_2 := \frac{NdChar}{2} - \frac{NaChar}{-1 - e^{\frac{Vef - \left(mu - \left(Ev + EAccept\right)\right)}{KbT}}}\\
\mathbf{if}\;NaChar \leq -1 \cdot 10^{-68}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;NaChar \leq -5.1 \cdot 10^{-175}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;NaChar \leq -1.05 \cdot 10^{-199}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;NaChar \leq -4.5 \cdot 10^{-246}:\\
\;\;\;\;t\_0 + NaChar \cdot \frac{KbT}{EAccept}\\
\mathbf{elif}\;NaChar \leq 2.65 \cdot 10^{-76}:\\
\;\;\;\;t\_1\\
\mathbf{else}:\\
\;\;\;\;t\_2\\
\end{array}
\end{array}
if NaChar < -1.00000000000000007e-68 or -5.10000000000000054e-175 < NaChar < -1.05000000000000001e-199 or 2.65e-76 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 80.9%
Taylor expanded in mu around 0 58.9%
if -1.00000000000000007e-68 < NaChar < -5.10000000000000054e-175 or -4.49999999999999999e-246 < NaChar < 2.65e-76Initial program 99.9%
Simplified99.9%
Taylor expanded in KbT around inf 66.0%
Taylor expanded in Vef around inf 54.4%
associate-/l*55.1%
Simplified55.1%
if -1.05000000000000001e-199 < NaChar < -4.49999999999999999e-246Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 76.4%
Taylor expanded in EAccept around inf 63.9%
*-commutative63.9%
associate-/l*63.8%
Applied egg-rr63.8%
Final simplification57.9%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NaChar (+ (exp (/ (- Vef (- mu (+ Ev EAccept))) KbT)) 1.0)))
(t_1 (/ NdChar (+ (exp (/ (- (+ Vef (+ EDonor mu)) Ec) KbT)) 1.0)))
(t_2 (+ t_1 (/ NaChar 2.0))))
(if (<= NdChar -4.5e+24)
t_2
(if (<= NdChar -5.1e-166)
(+ t_0 (/ NdChar (+ (/ Vef KbT) 2.0)))
(if (<= NdChar 6.8e-23)
(+ t_0 (/ NdChar (+ (- 1.0 (/ Ec KbT)) 1.0)))
(if (<= NdChar 46000000.0) (+ t_1 (* KbT (/ NaChar Vef))) t_2))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NaChar / (exp(((Vef - (mu - (Ev + EAccept))) / KbT)) + 1.0);
double t_1 = NdChar / (exp((((Vef + (EDonor + mu)) - Ec) / KbT)) + 1.0);
double t_2 = t_1 + (NaChar / 2.0);
double tmp;
if (NdChar <= -4.5e+24) {
tmp = t_2;
} else if (NdChar <= -5.1e-166) {
tmp = t_0 + (NdChar / ((Vef / KbT) + 2.0));
} else if (NdChar <= 6.8e-23) {
tmp = t_0 + (NdChar / ((1.0 - (Ec / KbT)) + 1.0));
} else if (NdChar <= 46000000.0) {
tmp = t_1 + (KbT * (NaChar / Vef));
} else {
tmp = t_2;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: t_2
real(8) :: tmp
t_0 = nachar / (exp(((vef - (mu - (ev + eaccept))) / kbt)) + 1.0d0)
t_1 = ndchar / (exp((((vef + (edonor + mu)) - ec) / kbt)) + 1.0d0)
t_2 = t_1 + (nachar / 2.0d0)
if (ndchar <= (-4.5d+24)) then
tmp = t_2
else if (ndchar <= (-5.1d-166)) then
tmp = t_0 + (ndchar / ((vef / kbt) + 2.0d0))
else if (ndchar <= 6.8d-23) then
tmp = t_0 + (ndchar / ((1.0d0 - (ec / kbt)) + 1.0d0))
else if (ndchar <= 46000000.0d0) then
tmp = t_1 + (kbt * (nachar / vef))
else
tmp = t_2
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NaChar / (Math.exp(((Vef - (mu - (Ev + EAccept))) / KbT)) + 1.0);
double t_1 = NdChar / (Math.exp((((Vef + (EDonor + mu)) - Ec) / KbT)) + 1.0);
double t_2 = t_1 + (NaChar / 2.0);
double tmp;
if (NdChar <= -4.5e+24) {
tmp = t_2;
} else if (NdChar <= -5.1e-166) {
tmp = t_0 + (NdChar / ((Vef / KbT) + 2.0));
} else if (NdChar <= 6.8e-23) {
tmp = t_0 + (NdChar / ((1.0 - (Ec / KbT)) + 1.0));
} else if (NdChar <= 46000000.0) {
tmp = t_1 + (KbT * (NaChar / Vef));
} else {
tmp = t_2;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NaChar / (math.exp(((Vef - (mu - (Ev + EAccept))) / KbT)) + 1.0) t_1 = NdChar / (math.exp((((Vef + (EDonor + mu)) - Ec) / KbT)) + 1.0) t_2 = t_1 + (NaChar / 2.0) tmp = 0 if NdChar <= -4.5e+24: tmp = t_2 elif NdChar <= -5.1e-166: tmp = t_0 + (NdChar / ((Vef / KbT) + 2.0)) elif NdChar <= 6.8e-23: tmp = t_0 + (NdChar / ((1.0 - (Ec / KbT)) + 1.0)) elif NdChar <= 46000000.0: tmp = t_1 + (KbT * (NaChar / Vef)) else: tmp = t_2 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NaChar / Float64(exp(Float64(Float64(Vef - Float64(mu - Float64(Ev + EAccept))) / KbT)) + 1.0)) t_1 = Float64(NdChar / Float64(exp(Float64(Float64(Float64(Vef + Float64(EDonor + mu)) - Ec) / KbT)) + 1.0)) t_2 = Float64(t_1 + Float64(NaChar / 2.0)) tmp = 0.0 if (NdChar <= -4.5e+24) tmp = t_2; elseif (NdChar <= -5.1e-166) tmp = Float64(t_0 + Float64(NdChar / Float64(Float64(Vef / KbT) + 2.0))); elseif (NdChar <= 6.8e-23) tmp = Float64(t_0 + Float64(NdChar / Float64(Float64(1.0 - Float64(Ec / KbT)) + 1.0))); elseif (NdChar <= 46000000.0) tmp = Float64(t_1 + Float64(KbT * Float64(NaChar / Vef))); else tmp = t_2; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NaChar / (exp(((Vef - (mu - (Ev + EAccept))) / KbT)) + 1.0); t_1 = NdChar / (exp((((Vef + (EDonor + mu)) - Ec) / KbT)) + 1.0); t_2 = t_1 + (NaChar / 2.0); tmp = 0.0; if (NdChar <= -4.5e+24) tmp = t_2; elseif (NdChar <= -5.1e-166) tmp = t_0 + (NdChar / ((Vef / KbT) + 2.0)); elseif (NdChar <= 6.8e-23) tmp = t_0 + (NdChar / ((1.0 - (Ec / KbT)) + 1.0)); elseif (NdChar <= 46000000.0) tmp = t_1 + (KbT * (NaChar / Vef)); else tmp = t_2; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NaChar / N[(N[Exp[N[(N[(Vef - N[(mu - N[(Ev + EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(NdChar / N[(N[Exp[N[(N[(N[(Vef + N[(EDonor + mu), $MachinePrecision]), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(t$95$1 + N[(NaChar / 2.0), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NdChar, -4.5e+24], t$95$2, If[LessEqual[NdChar, -5.1e-166], N[(t$95$0 + N[(NdChar / N[(N[(Vef / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NdChar, 6.8e-23], N[(t$95$0 + N[(NdChar / N[(N[(1.0 - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NdChar, 46000000.0], N[(t$95$1 + N[(KbT * N[(NaChar / Vef), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$2]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{e^{\frac{Vef - \left(mu - \left(Ev + EAccept\right)\right)}{KbT}} + 1}\\
t_1 := \frac{NdChar}{e^{\frac{\left(Vef + \left(EDonor + mu\right)\right) - Ec}{KbT}} + 1}\\
t_2 := t\_1 + \frac{NaChar}{2}\\
\mathbf{if}\;NdChar \leq -4.5 \cdot 10^{+24}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;NdChar \leq -5.1 \cdot 10^{-166}:\\
\;\;\;\;t\_0 + \frac{NdChar}{\frac{Vef}{KbT} + 2}\\
\mathbf{elif}\;NdChar \leq 6.8 \cdot 10^{-23}:\\
\;\;\;\;t\_0 + \frac{NdChar}{\left(1 - \frac{Ec}{KbT}\right) + 1}\\
\mathbf{elif}\;NdChar \leq 46000000:\\
\;\;\;\;t\_1 + KbT \cdot \frac{NaChar}{Vef}\\
\mathbf{else}:\\
\;\;\;\;t\_2\\
\end{array}
\end{array}
if NdChar < -4.50000000000000019e24 or 4.6e7 < NdChar Initial program 99.9%
Simplified99.9%
Taylor expanded in KbT around inf 56.5%
if -4.50000000000000019e24 < NdChar < -5.1000000000000002e-166Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 79.2%
Taylor expanded in Vef around 0 71.8%
+-commutative43.6%
Simplified71.8%
if -5.1000000000000002e-166 < NdChar < 6.8000000000000001e-23Initial program 100.0%
Simplified100.0%
Taylor expanded in Ec around inf 83.7%
associate-*r/83.7%
mul-1-neg83.7%
Simplified83.7%
Taylor expanded in Ec around 0 74.4%
neg-mul-174.4%
unsub-neg74.4%
Simplified74.4%
if 6.8000000000000001e-23 < NdChar < 4.6e7Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 67.2%
Taylor expanded in Vef around inf 83.8%
associate-/l*83.8%
Simplified83.8%
Final simplification65.5%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (or (<= NaChar -4e-35) (not (<= NaChar 4.8e-15)))
(+
(/ NaChar (+ (exp (/ (- Vef (- mu (+ Ev EAccept))) KbT)) 1.0))
(/ NdChar (+ (+ (/ (+ Vef (+ EDonor (- mu Ec))) KbT) 1.0) 1.0)))
(+
(/ NdChar (+ (exp (/ (- (+ Vef (+ EDonor mu)) Ec) KbT)) 1.0))
(/ (* KbT NaChar) (- (+ EAccept (+ Vef Ev)) mu)))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NaChar <= -4e-35) || !(NaChar <= 4.8e-15)) {
tmp = (NaChar / (exp(((Vef - (mu - (Ev + EAccept))) / KbT)) + 1.0)) + (NdChar / ((((Vef + (EDonor + (mu - Ec))) / KbT) + 1.0) + 1.0));
} else {
tmp = (NdChar / (exp((((Vef + (EDonor + mu)) - Ec) / KbT)) + 1.0)) + ((KbT * NaChar) / ((EAccept + (Vef + Ev)) - mu));
}
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 <= (-4d-35)) .or. (.not. (nachar <= 4.8d-15))) then
tmp = (nachar / (exp(((vef - (mu - (ev + eaccept))) / kbt)) + 1.0d0)) + (ndchar / ((((vef + (edonor + (mu - ec))) / kbt) + 1.0d0) + 1.0d0))
else
tmp = (ndchar / (exp((((vef + (edonor + mu)) - ec) / kbt)) + 1.0d0)) + ((kbt * nachar) / ((eaccept + (vef + ev)) - mu))
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 <= -4e-35) || !(NaChar <= 4.8e-15)) {
tmp = (NaChar / (Math.exp(((Vef - (mu - (Ev + EAccept))) / KbT)) + 1.0)) + (NdChar / ((((Vef + (EDonor + (mu - Ec))) / KbT) + 1.0) + 1.0));
} else {
tmp = (NdChar / (Math.exp((((Vef + (EDonor + mu)) - Ec) / KbT)) + 1.0)) + ((KbT * NaChar) / ((EAccept + (Vef + Ev)) - mu));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if (NaChar <= -4e-35) or not (NaChar <= 4.8e-15): tmp = (NaChar / (math.exp(((Vef - (mu - (Ev + EAccept))) / KbT)) + 1.0)) + (NdChar / ((((Vef + (EDonor + (mu - Ec))) / KbT) + 1.0) + 1.0)) else: tmp = (NdChar / (math.exp((((Vef + (EDonor + mu)) - Ec) / KbT)) + 1.0)) + ((KbT * NaChar) / ((EAccept + (Vef + Ev)) - mu)) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if ((NaChar <= -4e-35) || !(NaChar <= 4.8e-15)) tmp = Float64(Float64(NaChar / Float64(exp(Float64(Float64(Vef - Float64(mu - Float64(Ev + EAccept))) / KbT)) + 1.0)) + Float64(NdChar / Float64(Float64(Float64(Float64(Vef + Float64(EDonor + Float64(mu - Ec))) / KbT) + 1.0) + 1.0))); else tmp = Float64(Float64(NdChar / Float64(exp(Float64(Float64(Float64(Vef + Float64(EDonor + mu)) - Ec) / KbT)) + 1.0)) + Float64(Float64(KbT * NaChar) / Float64(Float64(EAccept + Float64(Vef + Ev)) - mu))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if ((NaChar <= -4e-35) || ~((NaChar <= 4.8e-15))) tmp = (NaChar / (exp(((Vef - (mu - (Ev + EAccept))) / KbT)) + 1.0)) + (NdChar / ((((Vef + (EDonor + (mu - Ec))) / KbT) + 1.0) + 1.0)); else tmp = (NdChar / (exp((((Vef + (EDonor + mu)) - Ec) / KbT)) + 1.0)) + ((KbT * NaChar) / ((EAccept + (Vef + Ev)) - mu)); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[Or[LessEqual[NaChar, -4e-35], N[Not[LessEqual[NaChar, 4.8e-15]], $MachinePrecision]], N[(N[(NaChar / N[(N[Exp[N[(N[(Vef - N[(mu - N[(Ev + EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(N[(N[(N[(Vef + N[(EDonor + N[(mu - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision] + 1.0), $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar / N[(N[Exp[N[(N[(N[(Vef + N[(EDonor + mu), $MachinePrecision]), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(N[(KbT * NaChar), $MachinePrecision] / N[(N[(EAccept + N[(Vef + Ev), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NaChar \leq -4 \cdot 10^{-35} \lor \neg \left(NaChar \leq 4.8 \cdot 10^{-15}\right):\\
\;\;\;\;\frac{NaChar}{e^{\frac{Vef - \left(mu - \left(Ev + EAccept\right)\right)}{KbT}} + 1} + \frac{NdChar}{\left(\frac{Vef + \left(EDonor + \left(mu - Ec\right)\right)}{KbT} + 1\right) + 1}\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{\left(Vef + \left(EDonor + mu\right)\right) - Ec}{KbT}} + 1} + \frac{KbT \cdot NaChar}{\left(EAccept + \left(Vef + Ev\right)\right) - mu}\\
\end{array}
\end{array}
if NaChar < -4.00000000000000003e-35 or 4.7999999999999999e-15 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 75.6%
+-commutative75.6%
associate-+r+75.6%
associate--l-75.6%
neg-mul-175.6%
unsub-neg75.6%
associate--l-75.6%
+-commutative75.6%
associate--r+75.6%
associate--r+75.6%
Simplified75.6%
if -4.00000000000000003e-35 < NaChar < 4.7999999999999999e-15Initial program 99.9%
Simplified99.9%
Taylor expanded in KbT around inf 63.6%
Taylor expanded in KbT around 0 63.3%
Final simplification69.9%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (or (<= NaChar -6e-36) (not (<= NaChar 1.65e+22)))
(+
(/ NaChar (+ (exp (/ (- Vef (- mu (+ Ev EAccept))) KbT)) 1.0))
(/ NdChar (+ (+ (/ (+ Vef (+ EDonor (- mu Ec))) KbT) 1.0) 1.0)))
(+
(/ NdChar (+ (exp (/ (- (+ Vef (+ EDonor mu)) Ec) KbT)) 1.0))
(/ NaChar (- (+ 2.0 (+ (/ Vef KbT) (/ Ev KbT))) (/ mu KbT))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NaChar <= -6e-36) || !(NaChar <= 1.65e+22)) {
tmp = (NaChar / (exp(((Vef - (mu - (Ev + EAccept))) / KbT)) + 1.0)) + (NdChar / ((((Vef + (EDonor + (mu - Ec))) / KbT) + 1.0) + 1.0));
} else {
tmp = (NdChar / (exp((((Vef + (EDonor + mu)) - Ec) / KbT)) + 1.0)) + (NaChar / ((2.0 + ((Vef / KbT) + (Ev / KbT))) - (mu / KbT)));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if ((nachar <= (-6d-36)) .or. (.not. (nachar <= 1.65d+22))) then
tmp = (nachar / (exp(((vef - (mu - (ev + eaccept))) / kbt)) + 1.0d0)) + (ndchar / ((((vef + (edonor + (mu - ec))) / kbt) + 1.0d0) + 1.0d0))
else
tmp = (ndchar / (exp((((vef + (edonor + mu)) - ec) / kbt)) + 1.0d0)) + (nachar / ((2.0d0 + ((vef / kbt) + (ev / kbt))) - (mu / kbt)))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NaChar <= -6e-36) || !(NaChar <= 1.65e+22)) {
tmp = (NaChar / (Math.exp(((Vef - (mu - (Ev + EAccept))) / KbT)) + 1.0)) + (NdChar / ((((Vef + (EDonor + (mu - Ec))) / KbT) + 1.0) + 1.0));
} else {
tmp = (NdChar / (Math.exp((((Vef + (EDonor + mu)) - Ec) / KbT)) + 1.0)) + (NaChar / ((2.0 + ((Vef / KbT) + (Ev / KbT))) - (mu / KbT)));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if (NaChar <= -6e-36) or not (NaChar <= 1.65e+22): tmp = (NaChar / (math.exp(((Vef - (mu - (Ev + EAccept))) / KbT)) + 1.0)) + (NdChar / ((((Vef + (EDonor + (mu - Ec))) / KbT) + 1.0) + 1.0)) else: tmp = (NdChar / (math.exp((((Vef + (EDonor + mu)) - Ec) / KbT)) + 1.0)) + (NaChar / ((2.0 + ((Vef / KbT) + (Ev / KbT))) - (mu / KbT))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if ((NaChar <= -6e-36) || !(NaChar <= 1.65e+22)) tmp = Float64(Float64(NaChar / Float64(exp(Float64(Float64(Vef - Float64(mu - Float64(Ev + EAccept))) / KbT)) + 1.0)) + Float64(NdChar / Float64(Float64(Float64(Float64(Vef + Float64(EDonor + Float64(mu - Ec))) / KbT) + 1.0) + 1.0))); else tmp = Float64(Float64(NdChar / Float64(exp(Float64(Float64(Float64(Vef + Float64(EDonor + mu)) - Ec) / KbT)) + 1.0)) + Float64(NaChar / Float64(Float64(2.0 + Float64(Float64(Vef / KbT) + Float64(Ev / KbT))) - Float64(mu / KbT)))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if ((NaChar <= -6e-36) || ~((NaChar <= 1.65e+22))) tmp = (NaChar / (exp(((Vef - (mu - (Ev + EAccept))) / KbT)) + 1.0)) + (NdChar / ((((Vef + (EDonor + (mu - Ec))) / KbT) + 1.0) + 1.0)); else tmp = (NdChar / (exp((((Vef + (EDonor + mu)) - Ec) / KbT)) + 1.0)) + (NaChar / ((2.0 + ((Vef / KbT) + (Ev / KbT))) - (mu / KbT))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[Or[LessEqual[NaChar, -6e-36], N[Not[LessEqual[NaChar, 1.65e+22]], $MachinePrecision]], N[(N[(NaChar / N[(N[Exp[N[(N[(Vef - N[(mu - N[(Ev + EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(N[(N[(N[(Vef + N[(EDonor + N[(mu - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision] + 1.0), $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar / N[(N[Exp[N[(N[(N[(Vef + N[(EDonor + mu), $MachinePrecision]), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(N[(2.0 + N[(N[(Vef / KbT), $MachinePrecision] + N[(Ev / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NaChar \leq -6 \cdot 10^{-36} \lor \neg \left(NaChar \leq 1.65 \cdot 10^{+22}\right):\\
\;\;\;\;\frac{NaChar}{e^{\frac{Vef - \left(mu - \left(Ev + EAccept\right)\right)}{KbT}} + 1} + \frac{NdChar}{\left(\frac{Vef + \left(EDonor + \left(mu - Ec\right)\right)}{KbT} + 1\right) + 1}\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{\left(Vef + \left(EDonor + mu\right)\right) - Ec}{KbT}} + 1} + \frac{NaChar}{\left(2 + \left(\frac{Vef}{KbT} + \frac{Ev}{KbT}\right)\right) - \frac{mu}{KbT}}\\
\end{array}
\end{array}
if NaChar < -6.0000000000000003e-36 or 1.6499999999999999e22 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 77.3%
+-commutative77.3%
associate-+r+77.3%
associate--l-77.3%
neg-mul-177.3%
unsub-neg77.3%
associate--l-77.3%
+-commutative77.3%
associate--r+77.3%
associate--r+77.3%
Simplified77.3%
if -6.0000000000000003e-36 < NaChar < 1.6499999999999999e22Initial program 99.9%
Simplified99.9%
Taylor expanded in KbT around inf 63.3%
Taylor expanded in EAccept around 0 63.0%
Final simplification70.2%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (exp (/ (- Vef (- mu (+ Ev EAccept))) KbT))))
(if (<= NaChar -1.3e-35)
(- (/ NdChar (+ (/ mu KbT) 2.0)) (/ NaChar (- -1.0 t_0)))
(if (<= NaChar 4.4e+21)
(+
(/ NdChar (+ (exp (/ (- (+ Vef (+ EDonor mu)) Ec) KbT)) 1.0))
(/ (* KbT NaChar) (- (+ EAccept (+ Vef Ev)) mu)))
(+ (/ NaChar (+ t_0 1.0)) (/ NdChar (+ (/ Vef KbT) 2.0)))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = exp(((Vef - (mu - (Ev + EAccept))) / KbT));
double tmp;
if (NaChar <= -1.3e-35) {
tmp = (NdChar / ((mu / KbT) + 2.0)) - (NaChar / (-1.0 - t_0));
} else if (NaChar <= 4.4e+21) {
tmp = (NdChar / (exp((((Vef + (EDonor + mu)) - Ec) / KbT)) + 1.0)) + ((KbT * NaChar) / ((EAccept + (Vef + Ev)) - mu));
} else {
tmp = (NaChar / (t_0 + 1.0)) + (NdChar / ((Vef / KbT) + 2.0));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: tmp
t_0 = exp(((vef - (mu - (ev + eaccept))) / kbt))
if (nachar <= (-1.3d-35)) then
tmp = (ndchar / ((mu / kbt) + 2.0d0)) - (nachar / ((-1.0d0) - t_0))
else if (nachar <= 4.4d+21) then
tmp = (ndchar / (exp((((vef + (edonor + mu)) - ec) / kbt)) + 1.0d0)) + ((kbt * nachar) / ((eaccept + (vef + ev)) - mu))
else
tmp = (nachar / (t_0 + 1.0d0)) + (ndchar / ((vef / kbt) + 2.0d0))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = Math.exp(((Vef - (mu - (Ev + EAccept))) / KbT));
double tmp;
if (NaChar <= -1.3e-35) {
tmp = (NdChar / ((mu / KbT) + 2.0)) - (NaChar / (-1.0 - t_0));
} else if (NaChar <= 4.4e+21) {
tmp = (NdChar / (Math.exp((((Vef + (EDonor + mu)) - Ec) / KbT)) + 1.0)) + ((KbT * NaChar) / ((EAccept + (Vef + Ev)) - mu));
} else {
tmp = (NaChar / (t_0 + 1.0)) + (NdChar / ((Vef / KbT) + 2.0));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = math.exp(((Vef - (mu - (Ev + EAccept))) / KbT)) tmp = 0 if NaChar <= -1.3e-35: tmp = (NdChar / ((mu / KbT) + 2.0)) - (NaChar / (-1.0 - t_0)) elif NaChar <= 4.4e+21: tmp = (NdChar / (math.exp((((Vef + (EDonor + mu)) - Ec) / KbT)) + 1.0)) + ((KbT * NaChar) / ((EAccept + (Vef + Ev)) - mu)) else: tmp = (NaChar / (t_0 + 1.0)) + (NdChar / ((Vef / KbT) + 2.0)) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = exp(Float64(Float64(Vef - Float64(mu - Float64(Ev + EAccept))) / KbT)) tmp = 0.0 if (NaChar <= -1.3e-35) tmp = Float64(Float64(NdChar / Float64(Float64(mu / KbT) + 2.0)) - Float64(NaChar / Float64(-1.0 - t_0))); elseif (NaChar <= 4.4e+21) tmp = Float64(Float64(NdChar / Float64(exp(Float64(Float64(Float64(Vef + Float64(EDonor + mu)) - Ec) / KbT)) + 1.0)) + Float64(Float64(KbT * NaChar) / Float64(Float64(EAccept + Float64(Vef + Ev)) - mu))); else tmp = Float64(Float64(NaChar / Float64(t_0 + 1.0)) + Float64(NdChar / Float64(Float64(Vef / KbT) + 2.0))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = exp(((Vef - (mu - (Ev + EAccept))) / KbT)); tmp = 0.0; if (NaChar <= -1.3e-35) tmp = (NdChar / ((mu / KbT) + 2.0)) - (NaChar / (-1.0 - t_0)); elseif (NaChar <= 4.4e+21) tmp = (NdChar / (exp((((Vef + (EDonor + mu)) - Ec) / KbT)) + 1.0)) + ((KbT * NaChar) / ((EAccept + (Vef + Ev)) - mu)); else tmp = (NaChar / (t_0 + 1.0)) + (NdChar / ((Vef / KbT) + 2.0)); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[Exp[N[(N[(Vef - N[(mu - N[(Ev + EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]}, If[LessEqual[NaChar, -1.3e-35], N[(N[(NdChar / N[(N[(mu / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision] - N[(NaChar / N[(-1.0 - t$95$0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 4.4e+21], N[(N[(NdChar / N[(N[Exp[N[(N[(N[(Vef + N[(EDonor + mu), $MachinePrecision]), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(N[(KbT * NaChar), $MachinePrecision] / N[(N[(EAccept + N[(Vef + Ev), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar / N[(t$95$0 + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(N[(Vef / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := e^{\frac{Vef - \left(mu - \left(Ev + EAccept\right)\right)}{KbT}}\\
\mathbf{if}\;NaChar \leq -1.3 \cdot 10^{-35}:\\
\;\;\;\;\frac{NdChar}{\frac{mu}{KbT} + 2} - \frac{NaChar}{-1 - t\_0}\\
\mathbf{elif}\;NaChar \leq 4.4 \cdot 10^{+21}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{\left(Vef + \left(EDonor + mu\right)\right) - Ec}{KbT}} + 1} + \frac{KbT \cdot NaChar}{\left(EAccept + \left(Vef + Ev\right)\right) - mu}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{t\_0 + 1} + \frac{NdChar}{\frac{Vef}{KbT} + 2}\\
\end{array}
\end{array}
if NaChar < -1.30000000000000002e-35Initial program 99.9%
Simplified99.9%
Taylor expanded in mu around inf 77.4%
Taylor expanded in mu around 0 67.1%
+-commutative67.1%
Simplified67.1%
if -1.30000000000000002e-35 < NaChar < 4.4e21Initial program 99.9%
Simplified99.9%
Taylor expanded in KbT around inf 63.3%
Taylor expanded in KbT around 0 62.2%
if 4.4e21 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 88.9%
Taylor expanded in Vef around 0 84.0%
+-commutative54.6%
Simplified84.0%
Final simplification67.5%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (or (<= NdChar -5e+24) (not (<= NdChar 0.000215)))
(+
(/ NdChar (+ (exp (/ (- (+ Vef (+ EDonor mu)) Ec) KbT)) 1.0))
(/ NaChar 2.0))
(+
(/ NaChar (+ (exp (/ (- Vef (- mu (+ Ev EAccept))) KbT)) 1.0))
(/ NdChar (+ (/ Vef KbT) 2.0)))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NdChar <= -5e+24) || !(NdChar <= 0.000215)) {
tmp = (NdChar / (exp((((Vef + (EDonor + mu)) - Ec) / KbT)) + 1.0)) + (NaChar / 2.0);
} else {
tmp = (NaChar / (exp(((Vef - (mu - (Ev + EAccept))) / KbT)) + 1.0)) + (NdChar / ((Vef / KbT) + 2.0));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if ((ndchar <= (-5d+24)) .or. (.not. (ndchar <= 0.000215d0))) then
tmp = (ndchar / (exp((((vef + (edonor + mu)) - ec) / kbt)) + 1.0d0)) + (nachar / 2.0d0)
else
tmp = (nachar / (exp(((vef - (mu - (ev + eaccept))) / kbt)) + 1.0d0)) + (ndchar / ((vef / kbt) + 2.0d0))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NdChar <= -5e+24) || !(NdChar <= 0.000215)) {
tmp = (NdChar / (Math.exp((((Vef + (EDonor + mu)) - Ec) / KbT)) + 1.0)) + (NaChar / 2.0);
} else {
tmp = (NaChar / (Math.exp(((Vef - (mu - (Ev + EAccept))) / KbT)) + 1.0)) + (NdChar / ((Vef / KbT) + 2.0));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if (NdChar <= -5e+24) or not (NdChar <= 0.000215): tmp = (NdChar / (math.exp((((Vef + (EDonor + mu)) - Ec) / KbT)) + 1.0)) + (NaChar / 2.0) else: tmp = (NaChar / (math.exp(((Vef - (mu - (Ev + EAccept))) / KbT)) + 1.0)) + (NdChar / ((Vef / KbT) + 2.0)) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if ((NdChar <= -5e+24) || !(NdChar <= 0.000215)) tmp = Float64(Float64(NdChar / Float64(exp(Float64(Float64(Float64(Vef + Float64(EDonor + mu)) - Ec) / KbT)) + 1.0)) + Float64(NaChar / 2.0)); else tmp = Float64(Float64(NaChar / Float64(exp(Float64(Float64(Vef - Float64(mu - Float64(Ev + EAccept))) / KbT)) + 1.0)) + Float64(NdChar / Float64(Float64(Vef / KbT) + 2.0))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if ((NdChar <= -5e+24) || ~((NdChar <= 0.000215))) tmp = (NdChar / (exp((((Vef + (EDonor + mu)) - Ec) / KbT)) + 1.0)) + (NaChar / 2.0); else tmp = (NaChar / (exp(((Vef - (mu - (Ev + EAccept))) / KbT)) + 1.0)) + (NdChar / ((Vef / KbT) + 2.0)); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[Or[LessEqual[NdChar, -5e+24], N[Not[LessEqual[NdChar, 0.000215]], $MachinePrecision]], N[(N[(NdChar / N[(N[Exp[N[(N[(N[(Vef + N[(EDonor + mu), $MachinePrecision]), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NaChar / 2.0), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar / N[(N[Exp[N[(N[(Vef - N[(mu - N[(Ev + EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(N[(Vef / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NdChar \leq -5 \cdot 10^{+24} \lor \neg \left(NdChar \leq 0.000215\right):\\
\;\;\;\;\frac{NdChar}{e^{\frac{\left(Vef + \left(EDonor + mu\right)\right) - Ec}{KbT}} + 1} + \frac{NaChar}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{e^{\frac{Vef - \left(mu - \left(Ev + EAccept\right)\right)}{KbT}} + 1} + \frac{NdChar}{\frac{Vef}{KbT} + 2}\\
\end{array}
\end{array}
if NdChar < -5.00000000000000045e24 or 2.14999999999999995e-4 < NdChar Initial program 99.9%
Simplified99.9%
Taylor expanded in KbT around inf 55.7%
if -5.00000000000000045e24 < NdChar < 2.14999999999999995e-4Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 79.9%
Taylor expanded in Vef around 0 70.3%
+-commutative46.5%
Simplified70.3%
Final simplification63.1%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (or (<= NaChar -5.3e-66) (not (<= NaChar 1.9e-77)))
(-
(/ NdChar 2.0)
(/ NaChar (- -1.0 (exp (/ (- Vef (- mu (+ Ev EAccept))) KbT)))))
(+
(/ NdChar (+ (exp (/ (- (+ Vef (+ EDonor mu)) Ec) KbT)) 1.0))
(* KbT (/ NaChar Vef)))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NaChar <= -5.3e-66) || !(NaChar <= 1.9e-77)) {
tmp = (NdChar / 2.0) - (NaChar / (-1.0 - exp(((Vef - (mu - (Ev + EAccept))) / KbT))));
} else {
tmp = (NdChar / (exp((((Vef + (EDonor + mu)) - Ec) / KbT)) + 1.0)) + (KbT * (NaChar / Vef));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if ((nachar <= (-5.3d-66)) .or. (.not. (nachar <= 1.9d-77))) then
tmp = (ndchar / 2.0d0) - (nachar / ((-1.0d0) - exp(((vef - (mu - (ev + eaccept))) / kbt))))
else
tmp = (ndchar / (exp((((vef + (edonor + mu)) - ec) / kbt)) + 1.0d0)) + (kbt * (nachar / vef))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NaChar <= -5.3e-66) || !(NaChar <= 1.9e-77)) {
tmp = (NdChar / 2.0) - (NaChar / (-1.0 - Math.exp(((Vef - (mu - (Ev + EAccept))) / KbT))));
} else {
tmp = (NdChar / (Math.exp((((Vef + (EDonor + mu)) - Ec) / KbT)) + 1.0)) + (KbT * (NaChar / Vef));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if (NaChar <= -5.3e-66) or not (NaChar <= 1.9e-77): tmp = (NdChar / 2.0) - (NaChar / (-1.0 - math.exp(((Vef - (mu - (Ev + EAccept))) / KbT)))) else: tmp = (NdChar / (math.exp((((Vef + (EDonor + mu)) - Ec) / KbT)) + 1.0)) + (KbT * (NaChar / Vef)) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if ((NaChar <= -5.3e-66) || !(NaChar <= 1.9e-77)) tmp = Float64(Float64(NdChar / 2.0) - Float64(NaChar / Float64(-1.0 - exp(Float64(Float64(Vef - Float64(mu - Float64(Ev + EAccept))) / KbT))))); else tmp = Float64(Float64(NdChar / Float64(exp(Float64(Float64(Float64(Vef + Float64(EDonor + mu)) - Ec) / KbT)) + 1.0)) + Float64(KbT * Float64(NaChar / Vef))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if ((NaChar <= -5.3e-66) || ~((NaChar <= 1.9e-77))) tmp = (NdChar / 2.0) - (NaChar / (-1.0 - exp(((Vef - (mu - (Ev + EAccept))) / KbT)))); else tmp = (NdChar / (exp((((Vef + (EDonor + mu)) - Ec) / KbT)) + 1.0)) + (KbT * (NaChar / Vef)); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[Or[LessEqual[NaChar, -5.3e-66], N[Not[LessEqual[NaChar, 1.9e-77]], $MachinePrecision]], N[(N[(NdChar / 2.0), $MachinePrecision] - N[(NaChar / N[(-1.0 - N[Exp[N[(N[(Vef - N[(mu - N[(Ev + EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar / N[(N[Exp[N[(N[(N[(Vef + N[(EDonor + mu), $MachinePrecision]), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(KbT * N[(NaChar / Vef), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NaChar \leq -5.3 \cdot 10^{-66} \lor \neg \left(NaChar \leq 1.9 \cdot 10^{-77}\right):\\
\;\;\;\;\frac{NdChar}{2} - \frac{NaChar}{-1 - e^{\frac{Vef - \left(mu - \left(Ev + EAccept\right)\right)}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{\left(Vef + \left(EDonor + mu\right)\right) - Ec}{KbT}} + 1} + KbT \cdot \frac{NaChar}{Vef}\\
\end{array}
\end{array}
if NaChar < -5.3000000000000004e-66 or 1.8999999999999999e-77 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 80.3%
Taylor expanded in mu around 0 58.3%
if -5.3000000000000004e-66 < NaChar < 1.8999999999999999e-77Initial program 99.9%
Simplified99.9%
Taylor expanded in KbT around inf 64.6%
Taylor expanded in Vef around inf 52.8%
associate-/l*53.4%
Simplified53.4%
Final simplification56.5%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (or (<= NaChar -1.75e-55) (not (<= NaChar 0.205)))
(-
(/ NdChar 2.0)
(/ NaChar (- -1.0 (exp (/ (- Vef (- mu (+ Ev EAccept))) KbT)))))
(+
(/ NdChar (+ (exp (/ (- (+ Vef (+ EDonor mu)) Ec) KbT)) 1.0))
(/ NaChar 2.0))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NaChar <= -1.75e-55) || !(NaChar <= 0.205)) {
tmp = (NdChar / 2.0) - (NaChar / (-1.0 - exp(((Vef - (mu - (Ev + EAccept))) / KbT))));
} else {
tmp = (NdChar / (exp((((Vef + (EDonor + mu)) - Ec) / KbT)) + 1.0)) + (NaChar / 2.0);
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if ((nachar <= (-1.75d-55)) .or. (.not. (nachar <= 0.205d0))) then
tmp = (ndchar / 2.0d0) - (nachar / ((-1.0d0) - exp(((vef - (mu - (ev + eaccept))) / kbt))))
else
tmp = (ndchar / (exp((((vef + (edonor + mu)) - ec) / kbt)) + 1.0d0)) + (nachar / 2.0d0)
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NaChar <= -1.75e-55) || !(NaChar <= 0.205)) {
tmp = (NdChar / 2.0) - (NaChar / (-1.0 - Math.exp(((Vef - (mu - (Ev + EAccept))) / KbT))));
} else {
tmp = (NdChar / (Math.exp((((Vef + (EDonor + mu)) - Ec) / KbT)) + 1.0)) + (NaChar / 2.0);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if (NaChar <= -1.75e-55) or not (NaChar <= 0.205): tmp = (NdChar / 2.0) - (NaChar / (-1.0 - math.exp(((Vef - (mu - (Ev + EAccept))) / KbT)))) else: tmp = (NdChar / (math.exp((((Vef + (EDonor + mu)) - Ec) / KbT)) + 1.0)) + (NaChar / 2.0) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if ((NaChar <= -1.75e-55) || !(NaChar <= 0.205)) tmp = Float64(Float64(NdChar / 2.0) - Float64(NaChar / Float64(-1.0 - exp(Float64(Float64(Vef - Float64(mu - Float64(Ev + EAccept))) / KbT))))); else tmp = Float64(Float64(NdChar / Float64(exp(Float64(Float64(Float64(Vef + Float64(EDonor + mu)) - Ec) / KbT)) + 1.0)) + Float64(NaChar / 2.0)); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if ((NaChar <= -1.75e-55) || ~((NaChar <= 0.205))) tmp = (NdChar / 2.0) - (NaChar / (-1.0 - exp(((Vef - (mu - (Ev + EAccept))) / KbT)))); else tmp = (NdChar / (exp((((Vef + (EDonor + mu)) - Ec) / KbT)) + 1.0)) + (NaChar / 2.0); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[Or[LessEqual[NaChar, -1.75e-55], N[Not[LessEqual[NaChar, 0.205]], $MachinePrecision]], N[(N[(NdChar / 2.0), $MachinePrecision] - N[(NaChar / N[(-1.0 - N[Exp[N[(N[(Vef - N[(mu - N[(Ev + EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar / N[(N[Exp[N[(N[(N[(Vef + N[(EDonor + mu), $MachinePrecision]), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NaChar / 2.0), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NaChar \leq -1.75 \cdot 10^{-55} \lor \neg \left(NaChar \leq 0.205\right):\\
\;\;\;\;\frac{NdChar}{2} - \frac{NaChar}{-1 - e^{\frac{Vef - \left(mu - \left(Ev + EAccept\right)\right)}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{\left(Vef + \left(EDonor + mu\right)\right) - Ec}{KbT}} + 1} + \frac{NaChar}{2}\\
\end{array}
\end{array}
if NaChar < -1.75000000000000013e-55 or 0.204999999999999988 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 79.9%
Taylor expanded in mu around 0 61.3%
if -1.75000000000000013e-55 < NaChar < 0.204999999999999988Initial program 99.9%
Simplified99.9%
Taylor expanded in KbT around inf 58.3%
Final simplification59.9%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (<= NdChar -3.3e+21)
(+ (/ NdChar (+ (exp (/ Vef KbT)) 1.0)) (/ NaChar (+ (/ Ev KbT) 2.0)))
(if (<= NdChar 1.16e+98)
(-
(/ NdChar 2.0)
(/ NaChar (- -1.0 (exp (/ (- Vef (- mu (+ Ev EAccept))) KbT)))))
(+ (/ NdChar (+ (exp (/ Ec (- KbT))) 1.0)) (/ NaChar 2.0)))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (NdChar <= -3.3e+21) {
tmp = (NdChar / (exp((Vef / KbT)) + 1.0)) + (NaChar / ((Ev / KbT) + 2.0));
} else if (NdChar <= 1.16e+98) {
tmp = (NdChar / 2.0) - (NaChar / (-1.0 - exp(((Vef - (mu - (Ev + EAccept))) / KbT))));
} else {
tmp = (NdChar / (exp((Ec / -KbT)) + 1.0)) + (NaChar / 2.0);
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if (ndchar <= (-3.3d+21)) then
tmp = (ndchar / (exp((vef / kbt)) + 1.0d0)) + (nachar / ((ev / kbt) + 2.0d0))
else if (ndchar <= 1.16d+98) then
tmp = (ndchar / 2.0d0) - (nachar / ((-1.0d0) - exp(((vef - (mu - (ev + eaccept))) / kbt))))
else
tmp = (ndchar / (exp((ec / -kbt)) + 1.0d0)) + (nachar / 2.0d0)
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (NdChar <= -3.3e+21) {
tmp = (NdChar / (Math.exp((Vef / KbT)) + 1.0)) + (NaChar / ((Ev / KbT) + 2.0));
} else if (NdChar <= 1.16e+98) {
tmp = (NdChar / 2.0) - (NaChar / (-1.0 - Math.exp(((Vef - (mu - (Ev + EAccept))) / KbT))));
} else {
tmp = (NdChar / (Math.exp((Ec / -KbT)) + 1.0)) + (NaChar / 2.0);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if NdChar <= -3.3e+21: tmp = (NdChar / (math.exp((Vef / KbT)) + 1.0)) + (NaChar / ((Ev / KbT) + 2.0)) elif NdChar <= 1.16e+98: tmp = (NdChar / 2.0) - (NaChar / (-1.0 - math.exp(((Vef - (mu - (Ev + EAccept))) / KbT)))) else: tmp = (NdChar / (math.exp((Ec / -KbT)) + 1.0)) + (NaChar / 2.0) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (NdChar <= -3.3e+21) tmp = Float64(Float64(NdChar / Float64(exp(Float64(Vef / KbT)) + 1.0)) + Float64(NaChar / Float64(Float64(Ev / KbT) + 2.0))); elseif (NdChar <= 1.16e+98) tmp = Float64(Float64(NdChar / 2.0) - Float64(NaChar / Float64(-1.0 - exp(Float64(Float64(Vef - Float64(mu - Float64(Ev + EAccept))) / KbT))))); else tmp = Float64(Float64(NdChar / Float64(exp(Float64(Ec / Float64(-KbT))) + 1.0)) + Float64(NaChar / 2.0)); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (NdChar <= -3.3e+21) tmp = (NdChar / (exp((Vef / KbT)) + 1.0)) + (NaChar / ((Ev / KbT) + 2.0)); elseif (NdChar <= 1.16e+98) tmp = (NdChar / 2.0) - (NaChar / (-1.0 - exp(((Vef - (mu - (Ev + EAccept))) / KbT)))); else tmp = (NdChar / (exp((Ec / -KbT)) + 1.0)) + (NaChar / 2.0); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[NdChar, -3.3e+21], N[(N[(NdChar / N[(N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(N[(Ev / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NdChar, 1.16e+98], N[(N[(NdChar / 2.0), $MachinePrecision] - N[(NaChar / N[(-1.0 - N[Exp[N[(N[(Vef - N[(mu - N[(Ev + EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar / N[(N[Exp[N[(Ec / (-KbT)), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NaChar / 2.0), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NdChar \leq -3.3 \cdot 10^{+21}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{Vef}{KbT}} + 1} + \frac{NaChar}{\frac{Ev}{KbT} + 2}\\
\mathbf{elif}\;NdChar \leq 1.16 \cdot 10^{+98}:\\
\;\;\;\;\frac{NdChar}{2} - \frac{NaChar}{-1 - e^{\frac{Vef - \left(mu - \left(Ev + EAccept\right)\right)}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{Ec}{-KbT}} + 1} + \frac{NaChar}{2}\\
\end{array}
\end{array}
if NdChar < -3.3e21Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 60.2%
Taylor expanded in Ev around inf 50.4%
Taylor expanded in Ev around 0 45.2%
if -3.3e21 < NdChar < 1.15999999999999995e98Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 79.5%
Taylor expanded in mu around 0 59.7%
if 1.15999999999999995e98 < NdChar Initial program 99.8%
Simplified99.8%
Taylor expanded in KbT around inf 53.6%
Taylor expanded in Ec around inf 43.9%
associate-*r/67.3%
mul-1-neg67.3%
Simplified43.9%
Final simplification53.6%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (if (or (<= NaChar -4.5e-55) (not (<= NaChar 2.2e-13))) (+ (/ NaChar (+ (exp (/ Ev KbT)) 1.0)) (/ NdChar (+ (/ Vef KbT) 2.0))) (+ (/ NdChar (+ (exp (/ Vef KbT)) 1.0)) (/ NaChar (+ (/ Ev KbT) 2.0)))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NaChar <= -4.5e-55) || !(NaChar <= 2.2e-13)) {
tmp = (NaChar / (exp((Ev / KbT)) + 1.0)) + (NdChar / ((Vef / KbT) + 2.0));
} else {
tmp = (NdChar / (exp((Vef / KbT)) + 1.0)) + (NaChar / ((Ev / KbT) + 2.0));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if ((nachar <= (-4.5d-55)) .or. (.not. (nachar <= 2.2d-13))) then
tmp = (nachar / (exp((ev / kbt)) + 1.0d0)) + (ndchar / ((vef / kbt) + 2.0d0))
else
tmp = (ndchar / (exp((vef / kbt)) + 1.0d0)) + (nachar / ((ev / kbt) + 2.0d0))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NaChar <= -4.5e-55) || !(NaChar <= 2.2e-13)) {
tmp = (NaChar / (Math.exp((Ev / KbT)) + 1.0)) + (NdChar / ((Vef / KbT) + 2.0));
} else {
tmp = (NdChar / (Math.exp((Vef / KbT)) + 1.0)) + (NaChar / ((Ev / KbT) + 2.0));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if (NaChar <= -4.5e-55) or not (NaChar <= 2.2e-13): tmp = (NaChar / (math.exp((Ev / KbT)) + 1.0)) + (NdChar / ((Vef / KbT) + 2.0)) else: tmp = (NdChar / (math.exp((Vef / KbT)) + 1.0)) + (NaChar / ((Ev / KbT) + 2.0)) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if ((NaChar <= -4.5e-55) || !(NaChar <= 2.2e-13)) tmp = Float64(Float64(NaChar / Float64(exp(Float64(Ev / KbT)) + 1.0)) + Float64(NdChar / Float64(Float64(Vef / KbT) + 2.0))); else tmp = Float64(Float64(NdChar / Float64(exp(Float64(Vef / KbT)) + 1.0)) + Float64(NaChar / Float64(Float64(Ev / KbT) + 2.0))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if ((NaChar <= -4.5e-55) || ~((NaChar <= 2.2e-13))) tmp = (NaChar / (exp((Ev / KbT)) + 1.0)) + (NdChar / ((Vef / KbT) + 2.0)); else tmp = (NdChar / (exp((Vef / KbT)) + 1.0)) + (NaChar / ((Ev / KbT) + 2.0)); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[Or[LessEqual[NaChar, -4.5e-55], N[Not[LessEqual[NaChar, 2.2e-13]], $MachinePrecision]], N[(N[(NaChar / N[(N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(N[(Vef / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar / N[(N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(N[(Ev / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NaChar \leq -4.5 \cdot 10^{-55} \lor \neg \left(NaChar \leq 2.2 \cdot 10^{-13}\right):\\
\;\;\;\;\frac{NaChar}{e^{\frac{Ev}{KbT}} + 1} + \frac{NdChar}{\frac{Vef}{KbT} + 2}\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{Vef}{KbT}} + 1} + \frac{NaChar}{\frac{Ev}{KbT} + 2}\\
\end{array}
\end{array}
if NaChar < -4.4999999999999997e-55 or 2.19999999999999997e-13 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 75.9%
Taylor expanded in Ev around inf 48.7%
Taylor expanded in Vef around 0 45.1%
+-commutative45.1%
Simplified45.1%
if -4.4999999999999997e-55 < NaChar < 2.19999999999999997e-13Initial program 99.9%
Simplified99.9%
Taylor expanded in Vef around inf 61.8%
Taylor expanded in Ev around inf 47.7%
Taylor expanded in Ev around 0 45.4%
Final simplification45.2%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (<= KbT 8.4e-262)
(+ (/ NaChar (+ (exp (/ EAccept KbT)) 1.0)) (/ NdChar 2.0))
(if (<= KbT 1.4e-79)
(+ (/ NdChar (+ (exp (/ Vef KbT)) 1.0)) (/ (* KbT NaChar) EAccept))
(+ (/ NaChar (+ (exp (/ Ev KbT)) 1.0)) (* NdChar 0.5)))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (KbT <= 8.4e-262) {
tmp = (NaChar / (exp((EAccept / KbT)) + 1.0)) + (NdChar / 2.0);
} else if (KbT <= 1.4e-79) {
tmp = (NdChar / (exp((Vef / KbT)) + 1.0)) + ((KbT * NaChar) / EAccept);
} else {
tmp = (NaChar / (exp((Ev / KbT)) + 1.0)) + (NdChar * 0.5);
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if (kbt <= 8.4d-262) then
tmp = (nachar / (exp((eaccept / kbt)) + 1.0d0)) + (ndchar / 2.0d0)
else if (kbt <= 1.4d-79) then
tmp = (ndchar / (exp((vef / kbt)) + 1.0d0)) + ((kbt * nachar) / eaccept)
else
tmp = (nachar / (exp((ev / kbt)) + 1.0d0)) + (ndchar * 0.5d0)
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (KbT <= 8.4e-262) {
tmp = (NaChar / (Math.exp((EAccept / KbT)) + 1.0)) + (NdChar / 2.0);
} else if (KbT <= 1.4e-79) {
tmp = (NdChar / (Math.exp((Vef / KbT)) + 1.0)) + ((KbT * NaChar) / EAccept);
} else {
tmp = (NaChar / (Math.exp((Ev / KbT)) + 1.0)) + (NdChar * 0.5);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if KbT <= 8.4e-262: tmp = (NaChar / (math.exp((EAccept / KbT)) + 1.0)) + (NdChar / 2.0) elif KbT <= 1.4e-79: tmp = (NdChar / (math.exp((Vef / KbT)) + 1.0)) + ((KbT * NaChar) / EAccept) else: tmp = (NaChar / (math.exp((Ev / KbT)) + 1.0)) + (NdChar * 0.5) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (KbT <= 8.4e-262) tmp = Float64(Float64(NaChar / Float64(exp(Float64(EAccept / KbT)) + 1.0)) + Float64(NdChar / 2.0)); elseif (KbT <= 1.4e-79) tmp = Float64(Float64(NdChar / Float64(exp(Float64(Vef / KbT)) + 1.0)) + Float64(Float64(KbT * NaChar) / EAccept)); else tmp = Float64(Float64(NaChar / Float64(exp(Float64(Ev / KbT)) + 1.0)) + Float64(NdChar * 0.5)); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (KbT <= 8.4e-262) tmp = (NaChar / (exp((EAccept / KbT)) + 1.0)) + (NdChar / 2.0); elseif (KbT <= 1.4e-79) tmp = (NdChar / (exp((Vef / KbT)) + 1.0)) + ((KbT * NaChar) / EAccept); else tmp = (NaChar / (exp((Ev / KbT)) + 1.0)) + (NdChar * 0.5); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[KbT, 8.4e-262], N[(N[(NaChar / N[(N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[KbT, 1.4e-79], N[(N[(NdChar / N[(N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(N[(KbT * NaChar), $MachinePrecision] / EAccept), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar / N[(N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NdChar * 0.5), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;KbT \leq 8.4 \cdot 10^{-262}:\\
\;\;\;\;\frac{NaChar}{e^{\frac{EAccept}{KbT}} + 1} + \frac{NdChar}{2}\\
\mathbf{elif}\;KbT \leq 1.4 \cdot 10^{-79}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{Vef}{KbT}} + 1} + \frac{KbT \cdot NaChar}{EAccept}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{e^{\frac{Ev}{KbT}} + 1} + NdChar \cdot 0.5\\
\end{array}
\end{array}
if KbT < 8.3999999999999998e-262Initial program 100.0%
Simplified100.0%
Taylor expanded in Ec around inf 70.2%
associate-*r/70.2%
mul-1-neg70.2%
Simplified70.2%
Taylor expanded in EAccept around inf 54.0%
Taylor expanded in Ec around 0 37.3%
if 8.3999999999999998e-262 < KbT < 1.40000000000000006e-79Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 31.2%
Taylor expanded in EAccept around inf 47.0%
Taylor expanded in Vef around inf 41.3%
if 1.40000000000000006e-79 < KbT Initial program 99.9%
Simplified99.9%
Taylor expanded in Vef around inf 76.9%
Taylor expanded in Ev around inf 57.4%
Taylor expanded in Vef around 0 48.5%
Final simplification41.6%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (<= KbT 2.2e-307)
(+ (/ NaChar (+ (exp (/ EAccept KbT)) 1.0)) (/ NdChar 2.0))
(if (<= KbT 1.5e-72)
(+ (/ NdChar (+ (exp (/ mu KbT)) 1.0)) (/ (* KbT NaChar) EAccept))
(+ (/ NaChar (+ (exp (/ Ev KbT)) 1.0)) (* NdChar 0.5)))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (KbT <= 2.2e-307) {
tmp = (NaChar / (exp((EAccept / KbT)) + 1.0)) + (NdChar / 2.0);
} else if (KbT <= 1.5e-72) {
tmp = (NdChar / (exp((mu / KbT)) + 1.0)) + ((KbT * NaChar) / EAccept);
} else {
tmp = (NaChar / (exp((Ev / KbT)) + 1.0)) + (NdChar * 0.5);
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if (kbt <= 2.2d-307) then
tmp = (nachar / (exp((eaccept / kbt)) + 1.0d0)) + (ndchar / 2.0d0)
else if (kbt <= 1.5d-72) then
tmp = (ndchar / (exp((mu / kbt)) + 1.0d0)) + ((kbt * nachar) / eaccept)
else
tmp = (nachar / (exp((ev / kbt)) + 1.0d0)) + (ndchar * 0.5d0)
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (KbT <= 2.2e-307) {
tmp = (NaChar / (Math.exp((EAccept / KbT)) + 1.0)) + (NdChar / 2.0);
} else if (KbT <= 1.5e-72) {
tmp = (NdChar / (Math.exp((mu / KbT)) + 1.0)) + ((KbT * NaChar) / EAccept);
} else {
tmp = (NaChar / (Math.exp((Ev / KbT)) + 1.0)) + (NdChar * 0.5);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if KbT <= 2.2e-307: tmp = (NaChar / (math.exp((EAccept / KbT)) + 1.0)) + (NdChar / 2.0) elif KbT <= 1.5e-72: tmp = (NdChar / (math.exp((mu / KbT)) + 1.0)) + ((KbT * NaChar) / EAccept) else: tmp = (NaChar / (math.exp((Ev / KbT)) + 1.0)) + (NdChar * 0.5) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (KbT <= 2.2e-307) tmp = Float64(Float64(NaChar / Float64(exp(Float64(EAccept / KbT)) + 1.0)) + Float64(NdChar / 2.0)); elseif (KbT <= 1.5e-72) tmp = Float64(Float64(NdChar / Float64(exp(Float64(mu / KbT)) + 1.0)) + Float64(Float64(KbT * NaChar) / EAccept)); else tmp = Float64(Float64(NaChar / Float64(exp(Float64(Ev / KbT)) + 1.0)) + Float64(NdChar * 0.5)); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (KbT <= 2.2e-307) tmp = (NaChar / (exp((EAccept / KbT)) + 1.0)) + (NdChar / 2.0); elseif (KbT <= 1.5e-72) tmp = (NdChar / (exp((mu / KbT)) + 1.0)) + ((KbT * NaChar) / EAccept); else tmp = (NaChar / (exp((Ev / KbT)) + 1.0)) + (NdChar * 0.5); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[KbT, 2.2e-307], N[(N[(NaChar / N[(N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[KbT, 1.5e-72], N[(N[(NdChar / N[(N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(N[(KbT * NaChar), $MachinePrecision] / EAccept), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar / N[(N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NdChar * 0.5), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;KbT \leq 2.2 \cdot 10^{-307}:\\
\;\;\;\;\frac{NaChar}{e^{\frac{EAccept}{KbT}} + 1} + \frac{NdChar}{2}\\
\mathbf{elif}\;KbT \leq 1.5 \cdot 10^{-72}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{mu}{KbT}} + 1} + \frac{KbT \cdot NaChar}{EAccept}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{e^{\frac{Ev}{KbT}} + 1} + NdChar \cdot 0.5\\
\end{array}
\end{array}
if KbT < 2.2e-307Initial program 100.0%
Simplified100.0%
Taylor expanded in Ec around inf 69.4%
associate-*r/69.4%
mul-1-neg69.4%
Simplified69.4%
Taylor expanded in EAccept around inf 52.7%
Taylor expanded in Ec around 0 38.2%
if 2.2e-307 < KbT < 1.5e-72Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 29.7%
Taylor expanded in EAccept around inf 44.1%
Taylor expanded in mu around inf 34.6%
if 1.5e-72 < KbT Initial program 99.8%
Simplified99.8%
Taylor expanded in Vef around inf 78.7%
Taylor expanded in Ev around inf 58.7%
Taylor expanded in Vef around 0 49.6%
Final simplification41.3%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (<= NdChar -4.5e+53)
(+ (/ NdChar (+ (exp (/ EDonor KbT)) 1.0)) (/ NaChar 2.0))
(if (<= NdChar 3.65e-34)
(+ (/ NaChar (+ (exp (/ Ev KbT)) 1.0)) (* NdChar 0.5))
(+ (/ NdChar (+ (exp (/ Ec (- KbT))) 1.0)) (/ NaChar 2.0)))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (NdChar <= -4.5e+53) {
tmp = (NdChar / (exp((EDonor / KbT)) + 1.0)) + (NaChar / 2.0);
} else if (NdChar <= 3.65e-34) {
tmp = (NaChar / (exp((Ev / KbT)) + 1.0)) + (NdChar * 0.5);
} else {
tmp = (NdChar / (exp((Ec / -KbT)) + 1.0)) + (NaChar / 2.0);
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if (ndchar <= (-4.5d+53)) then
tmp = (ndchar / (exp((edonor / kbt)) + 1.0d0)) + (nachar / 2.0d0)
else if (ndchar <= 3.65d-34) then
tmp = (nachar / (exp((ev / kbt)) + 1.0d0)) + (ndchar * 0.5d0)
else
tmp = (ndchar / (exp((ec / -kbt)) + 1.0d0)) + (nachar / 2.0d0)
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (NdChar <= -4.5e+53) {
tmp = (NdChar / (Math.exp((EDonor / KbT)) + 1.0)) + (NaChar / 2.0);
} else if (NdChar <= 3.65e-34) {
tmp = (NaChar / (Math.exp((Ev / KbT)) + 1.0)) + (NdChar * 0.5);
} else {
tmp = (NdChar / (Math.exp((Ec / -KbT)) + 1.0)) + (NaChar / 2.0);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if NdChar <= -4.5e+53: tmp = (NdChar / (math.exp((EDonor / KbT)) + 1.0)) + (NaChar / 2.0) elif NdChar <= 3.65e-34: tmp = (NaChar / (math.exp((Ev / KbT)) + 1.0)) + (NdChar * 0.5) else: tmp = (NdChar / (math.exp((Ec / -KbT)) + 1.0)) + (NaChar / 2.0) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (NdChar <= -4.5e+53) tmp = Float64(Float64(NdChar / Float64(exp(Float64(EDonor / KbT)) + 1.0)) + Float64(NaChar / 2.0)); elseif (NdChar <= 3.65e-34) tmp = Float64(Float64(NaChar / Float64(exp(Float64(Ev / KbT)) + 1.0)) + Float64(NdChar * 0.5)); else tmp = Float64(Float64(NdChar / Float64(exp(Float64(Ec / Float64(-KbT))) + 1.0)) + Float64(NaChar / 2.0)); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (NdChar <= -4.5e+53) tmp = (NdChar / (exp((EDonor / KbT)) + 1.0)) + (NaChar / 2.0); elseif (NdChar <= 3.65e-34) tmp = (NaChar / (exp((Ev / KbT)) + 1.0)) + (NdChar * 0.5); else tmp = (NdChar / (exp((Ec / -KbT)) + 1.0)) + (NaChar / 2.0); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[NdChar, -4.5e+53], N[(N[(NdChar / N[(N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NaChar / 2.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[NdChar, 3.65e-34], N[(N[(NaChar / N[(N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NdChar * 0.5), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar / N[(N[Exp[N[(Ec / (-KbT)), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NaChar / 2.0), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NdChar \leq -4.5 \cdot 10^{+53}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{EDonor}{KbT}} + 1} + \frac{NaChar}{2}\\
\mathbf{elif}\;NdChar \leq 3.65 \cdot 10^{-34}:\\
\;\;\;\;\frac{NaChar}{e^{\frac{Ev}{KbT}} + 1} + NdChar \cdot 0.5\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{Ec}{-KbT}} + 1} + \frac{NaChar}{2}\\
\end{array}
\end{array}
if NdChar < -4.5000000000000002e53Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 56.4%
Taylor expanded in EDonor around inf 46.4%
if -4.5000000000000002e53 < NdChar < 3.64999999999999998e-34Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 78.9%
Taylor expanded in Ev around inf 51.9%
Taylor expanded in Vef around 0 42.2%
if 3.64999999999999998e-34 < NdChar Initial program 99.8%
Simplified99.8%
Taylor expanded in KbT around inf 53.6%
Taylor expanded in Ec around inf 41.4%
associate-*r/67.3%
mul-1-neg67.3%
Simplified41.4%
Final simplification42.8%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (<= EAccept 4.2e-185)
(+ (/ NdChar (+ (exp (/ Vef KbT)) 1.0)) (/ NaChar (+ (/ Ev KbT) 2.0)))
(if (<= EAccept 5.2e+119)
(+ (/ NaChar (+ (exp (/ Ev KbT)) 1.0)) (* NdChar 0.5))
(+ (/ NaChar (+ (exp (/ EAccept KbT)) 1.0)) (/ NdChar 2.0)))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (EAccept <= 4.2e-185) {
tmp = (NdChar / (exp((Vef / KbT)) + 1.0)) + (NaChar / ((Ev / KbT) + 2.0));
} else if (EAccept <= 5.2e+119) {
tmp = (NaChar / (exp((Ev / KbT)) + 1.0)) + (NdChar * 0.5);
} else {
tmp = (NaChar / (exp((EAccept / KbT)) + 1.0)) + (NdChar / 2.0);
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if (eaccept <= 4.2d-185) then
tmp = (ndchar / (exp((vef / kbt)) + 1.0d0)) + (nachar / ((ev / kbt) + 2.0d0))
else if (eaccept <= 5.2d+119) then
tmp = (nachar / (exp((ev / kbt)) + 1.0d0)) + (ndchar * 0.5d0)
else
tmp = (nachar / (exp((eaccept / kbt)) + 1.0d0)) + (ndchar / 2.0d0)
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (EAccept <= 4.2e-185) {
tmp = (NdChar / (Math.exp((Vef / KbT)) + 1.0)) + (NaChar / ((Ev / KbT) + 2.0));
} else if (EAccept <= 5.2e+119) {
tmp = (NaChar / (Math.exp((Ev / KbT)) + 1.0)) + (NdChar * 0.5);
} else {
tmp = (NaChar / (Math.exp((EAccept / KbT)) + 1.0)) + (NdChar / 2.0);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if EAccept <= 4.2e-185: tmp = (NdChar / (math.exp((Vef / KbT)) + 1.0)) + (NaChar / ((Ev / KbT) + 2.0)) elif EAccept <= 5.2e+119: tmp = (NaChar / (math.exp((Ev / KbT)) + 1.0)) + (NdChar * 0.5) else: tmp = (NaChar / (math.exp((EAccept / KbT)) + 1.0)) + (NdChar / 2.0) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (EAccept <= 4.2e-185) tmp = Float64(Float64(NdChar / Float64(exp(Float64(Vef / KbT)) + 1.0)) + Float64(NaChar / Float64(Float64(Ev / KbT) + 2.0))); elseif (EAccept <= 5.2e+119) tmp = Float64(Float64(NaChar / Float64(exp(Float64(Ev / KbT)) + 1.0)) + Float64(NdChar * 0.5)); else tmp = Float64(Float64(NaChar / Float64(exp(Float64(EAccept / KbT)) + 1.0)) + Float64(NdChar / 2.0)); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (EAccept <= 4.2e-185) tmp = (NdChar / (exp((Vef / KbT)) + 1.0)) + (NaChar / ((Ev / KbT) + 2.0)); elseif (EAccept <= 5.2e+119) tmp = (NaChar / (exp((Ev / KbT)) + 1.0)) + (NdChar * 0.5); else tmp = (NaChar / (exp((EAccept / KbT)) + 1.0)) + (NdChar / 2.0); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[EAccept, 4.2e-185], N[(N[(NdChar / N[(N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(N[(Ev / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[EAccept, 5.2e+119], N[(N[(NaChar / N[(N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NdChar * 0.5), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar / N[(N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;EAccept \leq 4.2 \cdot 10^{-185}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{Vef}{KbT}} + 1} + \frac{NaChar}{\frac{Ev}{KbT} + 2}\\
\mathbf{elif}\;EAccept \leq 5.2 \cdot 10^{+119}:\\
\;\;\;\;\frac{NaChar}{e^{\frac{Ev}{KbT}} + 1} + NdChar \cdot 0.5\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{e^{\frac{EAccept}{KbT}} + 1} + \frac{NdChar}{2}\\
\end{array}
\end{array}
if EAccept < 4.2e-185Initial program 99.9%
Simplified99.9%
Taylor expanded in Vef around inf 71.6%
Taylor expanded in Ev around inf 50.6%
Taylor expanded in Ev around 0 43.4%
if 4.2e-185 < EAccept < 5.2e119Initial program 99.9%
Simplified99.9%
Taylor expanded in Vef around inf 65.2%
Taylor expanded in Ev around inf 48.9%
Taylor expanded in Vef around 0 38.6%
if 5.2e119 < EAccept Initial program 100.0%
Simplified100.0%
Taylor expanded in Ec around inf 72.9%
associate-*r/72.9%
mul-1-neg72.9%
Simplified72.9%
Taylor expanded in EAccept around inf 67.4%
Taylor expanded in Ec around 0 47.4%
Final simplification42.7%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (if (<= EAccept 1.22e+123) (+ (/ NaChar (+ (exp (/ Ev KbT)) 1.0)) (* NdChar 0.5)) (+ (/ NaChar (+ (exp (/ EAccept KbT)) 1.0)) (/ NdChar 2.0))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (EAccept <= 1.22e+123) {
tmp = (NaChar / (exp((Ev / KbT)) + 1.0)) + (NdChar * 0.5);
} else {
tmp = (NaChar / (exp((EAccept / KbT)) + 1.0)) + (NdChar / 2.0);
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if (eaccept <= 1.22d+123) then
tmp = (nachar / (exp((ev / kbt)) + 1.0d0)) + (ndchar * 0.5d0)
else
tmp = (nachar / (exp((eaccept / kbt)) + 1.0d0)) + (ndchar / 2.0d0)
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (EAccept <= 1.22e+123) {
tmp = (NaChar / (Math.exp((Ev / KbT)) + 1.0)) + (NdChar * 0.5);
} else {
tmp = (NaChar / (Math.exp((EAccept / KbT)) + 1.0)) + (NdChar / 2.0);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if EAccept <= 1.22e+123: tmp = (NaChar / (math.exp((Ev / KbT)) + 1.0)) + (NdChar * 0.5) else: tmp = (NaChar / (math.exp((EAccept / KbT)) + 1.0)) + (NdChar / 2.0) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (EAccept <= 1.22e+123) tmp = Float64(Float64(NaChar / Float64(exp(Float64(Ev / KbT)) + 1.0)) + Float64(NdChar * 0.5)); else tmp = Float64(Float64(NaChar / Float64(exp(Float64(EAccept / KbT)) + 1.0)) + Float64(NdChar / 2.0)); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (EAccept <= 1.22e+123) tmp = (NaChar / (exp((Ev / KbT)) + 1.0)) + (NdChar * 0.5); else tmp = (NaChar / (exp((EAccept / KbT)) + 1.0)) + (NdChar / 2.0); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[EAccept, 1.22e+123], N[(N[(NaChar / N[(N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NdChar * 0.5), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar / N[(N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;EAccept \leq 1.22 \cdot 10^{+123}:\\
\;\;\;\;\frac{NaChar}{e^{\frac{Ev}{KbT}} + 1} + NdChar \cdot 0.5\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{e^{\frac{EAccept}{KbT}} + 1} + \frac{NdChar}{2}\\
\end{array}
\end{array}
if EAccept < 1.22e123Initial program 99.9%
Simplified99.9%
Taylor expanded in Vef around inf 69.7%
Taylor expanded in Ev around inf 50.1%
Taylor expanded in Vef around 0 37.5%
if 1.22e123 < EAccept Initial program 100.0%
Simplified100.0%
Taylor expanded in Ec around inf 72.9%
associate-*r/72.9%
mul-1-neg72.9%
Simplified72.9%
Taylor expanded in EAccept around inf 67.4%
Taylor expanded in Ec around 0 47.4%
Final simplification38.8%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (+ (/ NaChar (+ (exp (/ Ev KbT)) 1.0)) (* NdChar 0.5)))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NaChar / (exp((Ev / KbT)) + 1.0)) + (NdChar * 0.5);
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
code = (nachar / (exp((ev / kbt)) + 1.0d0)) + (ndchar * 0.5d0)
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NaChar / (Math.exp((Ev / KbT)) + 1.0)) + (NdChar * 0.5);
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return (NaChar / (math.exp((Ev / KbT)) + 1.0)) + (NdChar * 0.5)
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(Float64(NaChar / Float64(exp(Float64(Ev / KbT)) + 1.0)) + Float64(NdChar * 0.5)) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = (NaChar / (exp((Ev / KbT)) + 1.0)) + (NdChar * 0.5); end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(N[(NaChar / N[(N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NdChar * 0.5), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{NaChar}{e^{\frac{Ev}{KbT}} + 1} + NdChar \cdot 0.5
\end{array}
Initial program 99.9%
Simplified99.9%
Taylor expanded in Vef around inf 69.7%
Taylor expanded in Ev around inf 48.3%
Taylor expanded in Vef around 0 36.4%
Final simplification36.4%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (+ (/ NaChar 2.0) (/ NdChar 2.0)))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NaChar / 2.0) + (NdChar / 2.0);
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
code = (nachar / 2.0d0) + (ndchar / 2.0d0)
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NaChar / 2.0) + (NdChar / 2.0);
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return (NaChar / 2.0) + (NdChar / 2.0)
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(Float64(NaChar / 2.0) + Float64(NdChar / 2.0)) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = (NaChar / 2.0) + (NdChar / 2.0); end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(N[(NaChar / 2.0), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{NaChar}{2} + \frac{NdChar}{2}
\end{array}
Initial program 99.9%
Simplified99.9%
Taylor expanded in KbT around inf 46.9%
Taylor expanded in KbT around inf 29.4%
Final simplification29.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 99.9%
Simplified99.9%
Taylor expanded in KbT around inf 50.7%
Taylor expanded in mu around inf 30.3%
Taylor expanded in KbT around inf 11.1%
Taylor expanded in NdChar around inf 16.4%
Final simplification16.4%
herbie shell --seed 2024046
(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))))))