
(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 30 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
(let* ((t_0 (cbrt (exp (/ (+ Vef (+ (- Ev mu) EAccept)) KbT)))))
(+
(/ NdChar (+ 1.0 (exp (/ (+ mu (+ EDonor (- Vef Ec))) KbT))))
(/
NaChar
(+
1.0
(pow
(* (pow (pow t_0 2.0) 0.3333333333333333) (cbrt (expm1 (log1p t_0))))
3.0))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = cbrt(exp(((Vef + ((Ev - mu) + EAccept)) / KbT)));
return (NdChar / (1.0 + exp(((mu + (EDonor + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + pow((pow(pow(t_0, 2.0), 0.3333333333333333) * cbrt(expm1(log1p(t_0)))), 3.0)));
}
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.cbrt(Math.exp(((Vef + ((Ev - mu) + EAccept)) / KbT)));
return (NdChar / (1.0 + Math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + Math.pow((Math.pow(Math.pow(t_0, 2.0), 0.3333333333333333) * Math.cbrt(Math.expm1(Math.log1p(t_0)))), 3.0)));
}
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = cbrt(exp(Float64(Float64(Vef + Float64(Float64(Ev - mu) + EAccept)) / KbT))) return Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(mu + Float64(EDonor + Float64(Vef - Ec))) / KbT)))) + Float64(NaChar / Float64(1.0 + (Float64(((t_0 ^ 2.0) ^ 0.3333333333333333) * cbrt(expm1(log1p(t_0)))) ^ 3.0)))) end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[Power[N[Exp[N[(N[(Vef + N[(N[(Ev - mu), $MachinePrecision] + EAccept), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision], 1/3], $MachinePrecision]}, N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(mu + N[(EDonor + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Power[N[(N[Power[N[Power[t$95$0, 2.0], $MachinePrecision], 0.3333333333333333], $MachinePrecision] * N[Power[N[(Exp[N[Log[1 + t$95$0], $MachinePrecision]] - 1), $MachinePrecision], 1/3], $MachinePrecision]), $MachinePrecision], 3.0], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \sqrt[3]{e^{\frac{Vef + \left(\left(Ev - mu\right) + EAccept\right)}{KbT}}}\\
\frac{NdChar}{1 + e^{\frac{mu + \left(EDonor + \left(Vef - Ec\right)\right)}{KbT}}} + \frac{NaChar}{1 + {\left({\left({t_0}^{2}\right)}^{0.3333333333333333} \cdot \sqrt[3]{\mathsf{expm1}\left(\mathsf{log1p}\left(t_0\right)\right)}\right)}^{3}}
\end{array}
\end{array}
Initial program 99.9%
Simplified99.9%
add-cube-cbrt99.9%
pow399.9%
div-inv99.9%
associate-*r/99.9%
*-commutative99.9%
*-un-lft-identity99.9%
+-commutative99.9%
associate-+l-99.9%
Applied egg-rr99.9%
pow1/399.9%
add-cube-cbrt99.9%
unpow-prod-down99.9%
pow299.9%
rem-cbrt-cube99.9%
rem-cube-cbrt99.9%
associate--r-99.9%
pow1/399.9%
Applied egg-rr99.9%
expm1-log1p-u100.0%
Applied egg-rr100.0%
Final simplification100.0%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ (+ Vef (+ (- Ev mu) EAccept)) KbT)))
(+
(/ NdChar (+ 1.0 (exp (/ (+ mu (+ EDonor (- Vef Ec))) KbT))))
(/
NaChar
(+
1.0
(pow
(* (exp (* 0.2222222222222222 t_0)) (cbrt (cbrt (exp t_0))))
3.0))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (Vef + ((Ev - mu) + EAccept)) / KbT;
return (NdChar / (1.0 + exp(((mu + (EDonor + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + pow((exp((0.2222222222222222 * t_0)) * cbrt(cbrt(exp(t_0)))), 3.0)));
}
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 = (Vef + ((Ev - mu) + EAccept)) / KbT;
return (NdChar / (1.0 + Math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + Math.pow((Math.exp((0.2222222222222222 * t_0)) * Math.cbrt(Math.cbrt(Math.exp(t_0)))), 3.0)));
}
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(Vef + Float64(Float64(Ev - mu) + EAccept)) / KbT) return Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(mu + Float64(EDonor + Float64(Vef - Ec))) / KbT)))) + Float64(NaChar / Float64(1.0 + (Float64(exp(Float64(0.2222222222222222 * t_0)) * cbrt(cbrt(exp(t_0)))) ^ 3.0)))) end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(Vef + N[(N[(Ev - mu), $MachinePrecision] + EAccept), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]}, N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(mu + N[(EDonor + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Power[N[(N[Exp[N[(0.2222222222222222 * t$95$0), $MachinePrecision]], $MachinePrecision] * N[Power[N[Power[N[Exp[t$95$0], $MachinePrecision], 1/3], $MachinePrecision], 1/3], $MachinePrecision]), $MachinePrecision], 3.0], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{Vef + \left(\left(Ev - mu\right) + EAccept\right)}{KbT}\\
\frac{NdChar}{1 + e^{\frac{mu + \left(EDonor + \left(Vef - Ec\right)\right)}{KbT}}} + \frac{NaChar}{1 + {\left(e^{0.2222222222222222 \cdot t_0} \cdot \sqrt[3]{\sqrt[3]{e^{t_0}}}\right)}^{3}}
\end{array}
\end{array}
Initial program 99.9%
Simplified99.9%
add-cube-cbrt99.9%
pow399.9%
div-inv99.9%
associate-*r/99.9%
*-commutative99.9%
*-un-lft-identity99.9%
+-commutative99.9%
associate-+l-99.9%
Applied egg-rr99.9%
pow1/399.9%
add-cube-cbrt99.9%
unpow-prod-down99.9%
pow299.9%
rem-cbrt-cube99.9%
rem-cube-cbrt99.9%
associate--r-99.9%
pow1/399.9%
Applied egg-rr99.9%
expm1-log1p-u99.9%
expm1-udef99.9%
Applied egg-rr99.9%
expm1-def99.9%
expm1-log1p99.9%
associate-*r*99.9%
metadata-eval99.9%
+-commutative99.9%
associate--l+99.9%
+-commutative99.9%
associate--l+99.9%
Simplified99.9%
Final simplification99.9%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (+ (/ NdChar (+ 1.0 (log1p (expm1 (exp (/ (+ mu (+ EDonor (- Vef Ec))) KbT)))))) (/ NaChar (+ 1.0 (exp (/ (+ Vef (+ (- Ev mu) EAccept)) KbT))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NdChar / (1.0 + log1p(expm1(exp(((mu + (EDonor + (Vef - Ec))) / KbT)))))) + (NaChar / (1.0 + exp(((Vef + ((Ev - mu) + EAccept)) / KbT))));
}
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NdChar / (1.0 + Math.log1p(Math.expm1(Math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)))))) + (NaChar / (1.0 + Math.exp(((Vef + ((Ev - mu) + EAccept)) / KbT))));
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return (NdChar / (1.0 + math.log1p(math.expm1(math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)))))) + (NaChar / (1.0 + math.exp(((Vef + ((Ev - mu) + EAccept)) / KbT))))
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(Float64(NdChar / Float64(1.0 + log1p(expm1(exp(Float64(Float64(mu + Float64(EDonor + Float64(Vef - Ec))) / KbT)))))) + Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Float64(Ev - mu) + EAccept)) / KbT))))) end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(N[(NdChar / N[(1.0 + N[Log[1 + N[(Exp[N[Exp[N[(N[(mu + N[(EDonor + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]] - 1), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(N[(Ev - mu), $MachinePrecision] + EAccept), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{NdChar}{1 + \mathsf{log1p}\left(\mathsf{expm1}\left(e^{\frac{mu + \left(EDonor + \left(Vef - Ec\right)\right)}{KbT}}\right)\right)} + \frac{NaChar}{1 + e^{\frac{Vef + \left(\left(Ev - mu\right) + EAccept\right)}{KbT}}}
\end{array}
Initial program 99.9%
Simplified99.9%
log1p-expm1-u99.9%
Applied egg-rr99.9%
Final simplification99.9%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0
(+
(/ NaChar (+ 1.0 (exp (/ (- mu) KbT))))
(/ NdChar (+ 1.0 (exp (/ mu KbT))))))
(t_1
(+
(/ NaChar (+ 1.0 (exp (/ (+ Vef (+ (- Ev mu) EAccept)) KbT))))
(/ NdChar (+ 1.0 (exp (/ EDonor KbT)))))))
(if (<= mu -6.4e+74)
t_0
(if (<= mu 3.1e-63)
t_1
(if (<= mu 1.26e+19)
(+
(/ NaChar (+ 1.0 (exp (/ Ev KbT))))
(/ NdChar (+ 1.0 (exp (/ (- (+ mu Vef) Ec) KbT)))))
(if (<= mu 1.3e+200) 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 = (NaChar / (1.0 + exp((-mu / KbT)))) + (NdChar / (1.0 + exp((mu / KbT))));
double t_1 = (NaChar / (1.0 + exp(((Vef + ((Ev - mu) + EAccept)) / KbT)))) + (NdChar / (1.0 + exp((EDonor / KbT))));
double tmp;
if (mu <= -6.4e+74) {
tmp = t_0;
} else if (mu <= 3.1e-63) {
tmp = t_1;
} else if (mu <= 1.26e+19) {
tmp = (NaChar / (1.0 + exp((Ev / KbT)))) + (NdChar / (1.0 + exp((((mu + Vef) - Ec) / KbT))));
} else if (mu <= 1.3e+200) {
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 = (nachar / (1.0d0 + exp((-mu / kbt)))) + (ndchar / (1.0d0 + exp((mu / kbt))))
t_1 = (nachar / (1.0d0 + exp(((vef + ((ev - mu) + eaccept)) / kbt)))) + (ndchar / (1.0d0 + exp((edonor / kbt))))
if (mu <= (-6.4d+74)) then
tmp = t_0
else if (mu <= 3.1d-63) then
tmp = t_1
else if (mu <= 1.26d+19) then
tmp = (nachar / (1.0d0 + exp((ev / kbt)))) + (ndchar / (1.0d0 + exp((((mu + vef) - ec) / kbt))))
else if (mu <= 1.3d+200) 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 = (NaChar / (1.0 + Math.exp((-mu / KbT)))) + (NdChar / (1.0 + Math.exp((mu / KbT))));
double t_1 = (NaChar / (1.0 + Math.exp(((Vef + ((Ev - mu) + EAccept)) / KbT)))) + (NdChar / (1.0 + Math.exp((EDonor / KbT))));
double tmp;
if (mu <= -6.4e+74) {
tmp = t_0;
} else if (mu <= 3.1e-63) {
tmp = t_1;
} else if (mu <= 1.26e+19) {
tmp = (NaChar / (1.0 + Math.exp((Ev / KbT)))) + (NdChar / (1.0 + Math.exp((((mu + Vef) - Ec) / KbT))));
} else if (mu <= 1.3e+200) {
tmp = t_1;
} else {
tmp = t_0;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = (NaChar / (1.0 + math.exp((-mu / KbT)))) + (NdChar / (1.0 + math.exp((mu / KbT)))) t_1 = (NaChar / (1.0 + math.exp(((Vef + ((Ev - mu) + EAccept)) / KbT)))) + (NdChar / (1.0 + math.exp((EDonor / KbT)))) tmp = 0 if mu <= -6.4e+74: tmp = t_0 elif mu <= 3.1e-63: tmp = t_1 elif mu <= 1.26e+19: tmp = (NaChar / (1.0 + math.exp((Ev / KbT)))) + (NdChar / (1.0 + math.exp((((mu + Vef) - Ec) / KbT)))) elif mu <= 1.3e+200: tmp = t_1 else: tmp = t_0 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(-mu) / KbT)))) + Float64(NdChar / Float64(1.0 + exp(Float64(mu / KbT))))) t_1 = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Float64(Ev - mu) + EAccept)) / KbT)))) + Float64(NdChar / Float64(1.0 + exp(Float64(EDonor / KbT))))) tmp = 0.0 if (mu <= -6.4e+74) tmp = t_0; elseif (mu <= 3.1e-63) tmp = t_1; elseif (mu <= 1.26e+19) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT)))) + Float64(NdChar / Float64(1.0 + exp(Float64(Float64(Float64(mu + Vef) - Ec) / KbT))))); elseif (mu <= 1.3e+200) 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 = (NaChar / (1.0 + exp((-mu / KbT)))) + (NdChar / (1.0 + exp((mu / KbT)))); t_1 = (NaChar / (1.0 + exp(((Vef + ((Ev - mu) + EAccept)) / KbT)))) + (NdChar / (1.0 + exp((EDonor / KbT)))); tmp = 0.0; if (mu <= -6.4e+74) tmp = t_0; elseif (mu <= 3.1e-63) tmp = t_1; elseif (mu <= 1.26e+19) tmp = (NaChar / (1.0 + exp((Ev / KbT)))) + (NdChar / (1.0 + exp((((mu + Vef) - Ec) / KbT)))); elseif (mu <= 1.3e+200) 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[(NaChar / N[(1.0 + N[Exp[N[((-mu) / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(1.0 + N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(N[(Ev - mu), $MachinePrecision] + EAccept), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(1.0 + N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[mu, -6.4e+74], t$95$0, If[LessEqual[mu, 3.1e-63], t$95$1, If[LessEqual[mu, 1.26e+19], N[(N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(1.0 + N[Exp[N[(N[(N[(mu + Vef), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[mu, 1.3e+200], t$95$1, t$95$0]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{-mu}{KbT}}} + \frac{NdChar}{1 + e^{\frac{mu}{KbT}}}\\
t_1 := \frac{NaChar}{1 + e^{\frac{Vef + \left(\left(Ev - mu\right) + EAccept\right)}{KbT}}} + \frac{NdChar}{1 + e^{\frac{EDonor}{KbT}}}\\
\mathbf{if}\;mu \leq -6.4 \cdot 10^{+74}:\\
\;\;\;\;t_0\\
\mathbf{elif}\;mu \leq 3.1 \cdot 10^{-63}:\\
\;\;\;\;t_1\\
\mathbf{elif}\;mu \leq 1.26 \cdot 10^{+19}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Ev}{KbT}}} + \frac{NdChar}{1 + e^{\frac{\left(mu + Vef\right) - Ec}{KbT}}}\\
\mathbf{elif}\;mu \leq 1.3 \cdot 10^{+200}:\\
\;\;\;\;t_1\\
\mathbf{else}:\\
\;\;\;\;t_0\\
\end{array}
\end{array}
if mu < -6.39999999999999989e74 or 1.3000000000000001e200 < mu Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 85.5%
Taylor expanded in mu around inf 81.5%
associate-*r/81.5%
mul-1-neg81.5%
Simplified81.5%
if -6.39999999999999989e74 < mu < 3.09999999999999984e-63 or 1.26e19 < mu < 1.3000000000000001e200Initial program 99.9%
Simplified99.9%
Taylor expanded in EDonor around inf 80.9%
if 3.09999999999999984e-63 < mu < 1.26e19Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 77.7%
Taylor expanded in EDonor around 0 77.7%
Final simplification80.8%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NaChar (+ 1.0 (exp (/ (+ Vef (+ (- Ev mu) EAccept)) KbT)))))
(t_1 (+ t_0 (/ NdChar (+ 1.0 (exp (/ mu KbT)))))))
(if (<= mu -6.6e+38)
t_1
(if (<= mu -1.9e-17)
(+
(/ NdChar (+ 1.0 (exp (/ (+ mu (+ EDonor (- Vef Ec))) KbT))))
(/ NaChar (+ 1.0 (+ 1.0 (/ (+ (+ Ev EAccept) (- Vef mu)) KbT)))))
(if (<= mu 3.6e-63)
(+ t_0 (/ NdChar (+ 1.0 (exp (/ EDonor KbT)))))
(if (<= mu 3.4e+15)
(+
(/ NaChar (+ 1.0 (exp (/ Ev KbT))))
(/ NdChar (+ 1.0 (exp (/ (- (+ mu Vef) Ec) KbT)))))
t_1))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NaChar / (1.0 + exp(((Vef + ((Ev - mu) + EAccept)) / KbT)));
double t_1 = t_0 + (NdChar / (1.0 + exp((mu / KbT))));
double tmp;
if (mu <= -6.6e+38) {
tmp = t_1;
} else if (mu <= -1.9e-17) {
tmp = (NdChar / (1.0 + exp(((mu + (EDonor + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + (1.0 + (((Ev + EAccept) + (Vef - mu)) / KbT))));
} else if (mu <= 3.6e-63) {
tmp = t_0 + (NdChar / (1.0 + exp((EDonor / KbT))));
} else if (mu <= 3.4e+15) {
tmp = (NaChar / (1.0 + exp((Ev / KbT)))) + (NdChar / (1.0 + exp((((mu + Vef) - Ec) / KbT))));
} else {
tmp = t_1;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = nachar / (1.0d0 + exp(((vef + ((ev - mu) + eaccept)) / kbt)))
t_1 = t_0 + (ndchar / (1.0d0 + exp((mu / kbt))))
if (mu <= (-6.6d+38)) then
tmp = t_1
else if (mu <= (-1.9d-17)) then
tmp = (ndchar / (1.0d0 + exp(((mu + (edonor + (vef - ec))) / kbt)))) + (nachar / (1.0d0 + (1.0d0 + (((ev + eaccept) + (vef - mu)) / kbt))))
else if (mu <= 3.6d-63) then
tmp = t_0 + (ndchar / (1.0d0 + exp((edonor / kbt))))
else if (mu <= 3.4d+15) then
tmp = (nachar / (1.0d0 + exp((ev / kbt)))) + (ndchar / (1.0d0 + exp((((mu + vef) - ec) / kbt))))
else
tmp = t_1
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NaChar / (1.0 + Math.exp(((Vef + ((Ev - mu) + EAccept)) / KbT)));
double t_1 = t_0 + (NdChar / (1.0 + Math.exp((mu / KbT))));
double tmp;
if (mu <= -6.6e+38) {
tmp = t_1;
} else if (mu <= -1.9e-17) {
tmp = (NdChar / (1.0 + Math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + (1.0 + (((Ev + EAccept) + (Vef - mu)) / KbT))));
} else if (mu <= 3.6e-63) {
tmp = t_0 + (NdChar / (1.0 + Math.exp((EDonor / KbT))));
} else if (mu <= 3.4e+15) {
tmp = (NaChar / (1.0 + Math.exp((Ev / KbT)))) + (NdChar / (1.0 + Math.exp((((mu + Vef) - Ec) / KbT))));
} else {
tmp = t_1;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NaChar / (1.0 + math.exp(((Vef + ((Ev - mu) + EAccept)) / KbT))) t_1 = t_0 + (NdChar / (1.0 + math.exp((mu / KbT)))) tmp = 0 if mu <= -6.6e+38: tmp = t_1 elif mu <= -1.9e-17: tmp = (NdChar / (1.0 + math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + (1.0 + (((Ev + EAccept) + (Vef - mu)) / KbT)))) elif mu <= 3.6e-63: tmp = t_0 + (NdChar / (1.0 + math.exp((EDonor / KbT)))) elif mu <= 3.4e+15: tmp = (NaChar / (1.0 + math.exp((Ev / KbT)))) + (NdChar / (1.0 + math.exp((((mu + Vef) - Ec) / KbT)))) else: tmp = t_1 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Float64(Ev - mu) + EAccept)) / KbT)))) t_1 = Float64(t_0 + Float64(NdChar / Float64(1.0 + exp(Float64(mu / KbT))))) tmp = 0.0 if (mu <= -6.6e+38) tmp = t_1; elseif (mu <= -1.9e-17) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(mu + Float64(EDonor + Float64(Vef - Ec))) / KbT)))) + Float64(NaChar / Float64(1.0 + Float64(1.0 + Float64(Float64(Float64(Ev + EAccept) + Float64(Vef - mu)) / KbT))))); elseif (mu <= 3.6e-63) tmp = Float64(t_0 + Float64(NdChar / Float64(1.0 + exp(Float64(EDonor / KbT))))); elseif (mu <= 3.4e+15) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT)))) + Float64(NdChar / Float64(1.0 + exp(Float64(Float64(Float64(mu + Vef) - Ec) / KbT))))); else tmp = t_1; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NaChar / (1.0 + exp(((Vef + ((Ev - mu) + EAccept)) / KbT))); t_1 = t_0 + (NdChar / (1.0 + exp((mu / KbT)))); tmp = 0.0; if (mu <= -6.6e+38) tmp = t_1; elseif (mu <= -1.9e-17) tmp = (NdChar / (1.0 + exp(((mu + (EDonor + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + (1.0 + (((Ev + EAccept) + (Vef - mu)) / KbT)))); elseif (mu <= 3.6e-63) tmp = t_0 + (NdChar / (1.0 + exp((EDonor / KbT)))); elseif (mu <= 3.4e+15) tmp = (NaChar / (1.0 + exp((Ev / KbT)))) + (NdChar / (1.0 + exp((((mu + Vef) - Ec) / KbT)))); else tmp = t_1; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(N[(Ev - mu), $MachinePrecision] + EAccept), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(t$95$0 + N[(NdChar / N[(1.0 + N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[mu, -6.6e+38], t$95$1, If[LessEqual[mu, -1.9e-17], N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(mu + N[(EDonor + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[(1.0 + N[(N[(N[(Ev + EAccept), $MachinePrecision] + N[(Vef - mu), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[mu, 3.6e-63], N[(t$95$0 + N[(NdChar / N[(1.0 + N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[mu, 3.4e+15], N[(N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(1.0 + N[Exp[N[(N[(N[(mu + Vef), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$1]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{Vef + \left(\left(Ev - mu\right) + EAccept\right)}{KbT}}}\\
t_1 := t_0 + \frac{NdChar}{1 + e^{\frac{mu}{KbT}}}\\
\mathbf{if}\;mu \leq -6.6 \cdot 10^{+38}:\\
\;\;\;\;t_1\\
\mathbf{elif}\;mu \leq -1.9 \cdot 10^{-17}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{mu + \left(EDonor + \left(Vef - Ec\right)\right)}{KbT}}} + \frac{NaChar}{1 + \left(1 + \frac{\left(Ev + EAccept\right) + \left(Vef - mu\right)}{KbT}\right)}\\
\mathbf{elif}\;mu \leq 3.6 \cdot 10^{-63}:\\
\;\;\;\;t_0 + \frac{NdChar}{1 + e^{\frac{EDonor}{KbT}}}\\
\mathbf{elif}\;mu \leq 3.4 \cdot 10^{+15}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Ev}{KbT}}} + \frac{NdChar}{1 + e^{\frac{\left(mu + Vef\right) - Ec}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;t_1\\
\end{array}
\end{array}
if mu < -6.5999999999999998e38 or 3.4e15 < mu Initial program 99.9%
Simplified99.9%
Taylor expanded in mu around inf 85.5%
if -6.5999999999999998e38 < mu < -1.9000000000000001e-17Initial program 100.0%
Simplified100.0%
add-cube-cbrt100.0%
pow3100.0%
div-inv100.0%
associate-*r/100.0%
*-commutative100.0%
*-un-lft-identity100.0%
+-commutative100.0%
associate-+l-100.0%
Applied egg-rr100.0%
Taylor expanded in KbT around inf 80.1%
distribute-rgt-out80.1%
metadata-eval80.1%
*-rgt-identity80.1%
associate--l+80.1%
sub-neg80.1%
associate-+r+80.1%
mul-1-neg80.1%
associate-+r+80.1%
mul-1-neg80.1%
sub-neg80.1%
Simplified80.1%
if -1.9000000000000001e-17 < mu < 3.60000000000000008e-63Initial program 100.0%
Simplified100.0%
Taylor expanded in EDonor around inf 87.7%
if 3.60000000000000008e-63 < mu < 3.4e15Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 75.4%
Taylor expanded in EDonor around 0 75.4%
Final simplification85.3%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NaChar (+ 1.0 (exp (/ (+ Vef (+ (- Ev mu) EAccept)) KbT)))))
(t_1 (+ t_0 (/ NdChar (+ 1.0 (exp (/ mu KbT)))))))
(if (<= mu -4.6e+150)
t_1
(if (<= mu -1.35)
(+
(/ NdChar (+ 1.0 (exp (/ (+ mu (+ EDonor (- Vef Ec))) KbT))))
(/ NaChar (+ 1.0 (exp (/ EAccept KbT)))))
(if (<= mu 2.1e-63)
(+ t_0 (/ NdChar (+ 1.0 (exp (/ EDonor KbT)))))
(if (<= mu 1.06e+15)
(+
(/ NaChar (+ 1.0 (exp (/ Ev KbT))))
(/ NdChar (+ 1.0 (exp (/ (- (+ mu Vef) Ec) KbT)))))
t_1))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NaChar / (1.0 + exp(((Vef + ((Ev - mu) + EAccept)) / KbT)));
double t_1 = t_0 + (NdChar / (1.0 + exp((mu / KbT))));
double tmp;
if (mu <= -4.6e+150) {
tmp = t_1;
} else if (mu <= -1.35) {
tmp = (NdChar / (1.0 + exp(((mu + (EDonor + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + exp((EAccept / KbT))));
} else if (mu <= 2.1e-63) {
tmp = t_0 + (NdChar / (1.0 + exp((EDonor / KbT))));
} else if (mu <= 1.06e+15) {
tmp = (NaChar / (1.0 + exp((Ev / KbT)))) + (NdChar / (1.0 + exp((((mu + Vef) - Ec) / KbT))));
} else {
tmp = t_1;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = nachar / (1.0d0 + exp(((vef + ((ev - mu) + eaccept)) / kbt)))
t_1 = t_0 + (ndchar / (1.0d0 + exp((mu / kbt))))
if (mu <= (-4.6d+150)) then
tmp = t_1
else if (mu <= (-1.35d0)) then
tmp = (ndchar / (1.0d0 + exp(((mu + (edonor + (vef - ec))) / kbt)))) + (nachar / (1.0d0 + exp((eaccept / kbt))))
else if (mu <= 2.1d-63) then
tmp = t_0 + (ndchar / (1.0d0 + exp((edonor / kbt))))
else if (mu <= 1.06d+15) then
tmp = (nachar / (1.0d0 + exp((ev / kbt)))) + (ndchar / (1.0d0 + exp((((mu + vef) - ec) / kbt))))
else
tmp = t_1
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NaChar / (1.0 + Math.exp(((Vef + ((Ev - mu) + EAccept)) / KbT)));
double t_1 = t_0 + (NdChar / (1.0 + Math.exp((mu / KbT))));
double tmp;
if (mu <= -4.6e+150) {
tmp = t_1;
} else if (mu <= -1.35) {
tmp = (NdChar / (1.0 + Math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + Math.exp((EAccept / KbT))));
} else if (mu <= 2.1e-63) {
tmp = t_0 + (NdChar / (1.0 + Math.exp((EDonor / KbT))));
} else if (mu <= 1.06e+15) {
tmp = (NaChar / (1.0 + Math.exp((Ev / KbT)))) + (NdChar / (1.0 + Math.exp((((mu + Vef) - Ec) / KbT))));
} else {
tmp = t_1;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NaChar / (1.0 + math.exp(((Vef + ((Ev - mu) + EAccept)) / KbT))) t_1 = t_0 + (NdChar / (1.0 + math.exp((mu / KbT)))) tmp = 0 if mu <= -4.6e+150: tmp = t_1 elif mu <= -1.35: tmp = (NdChar / (1.0 + math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + math.exp((EAccept / KbT)))) elif mu <= 2.1e-63: tmp = t_0 + (NdChar / (1.0 + math.exp((EDonor / KbT)))) elif mu <= 1.06e+15: tmp = (NaChar / (1.0 + math.exp((Ev / KbT)))) + (NdChar / (1.0 + math.exp((((mu + Vef) - Ec) / KbT)))) else: tmp = t_1 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Float64(Ev - mu) + EAccept)) / KbT)))) t_1 = Float64(t_0 + Float64(NdChar / Float64(1.0 + exp(Float64(mu / KbT))))) tmp = 0.0 if (mu <= -4.6e+150) tmp = t_1; elseif (mu <= -1.35) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(mu + Float64(EDonor + Float64(Vef - Ec))) / KbT)))) + Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT))))); elseif (mu <= 2.1e-63) tmp = Float64(t_0 + Float64(NdChar / Float64(1.0 + exp(Float64(EDonor / KbT))))); elseif (mu <= 1.06e+15) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT)))) + Float64(NdChar / Float64(1.0 + exp(Float64(Float64(Float64(mu + Vef) - Ec) / KbT))))); else tmp = t_1; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NaChar / (1.0 + exp(((Vef + ((Ev - mu) + EAccept)) / KbT))); t_1 = t_0 + (NdChar / (1.0 + exp((mu / KbT)))); tmp = 0.0; if (mu <= -4.6e+150) tmp = t_1; elseif (mu <= -1.35) tmp = (NdChar / (1.0 + exp(((mu + (EDonor + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + exp((EAccept / KbT)))); elseif (mu <= 2.1e-63) tmp = t_0 + (NdChar / (1.0 + exp((EDonor / KbT)))); elseif (mu <= 1.06e+15) tmp = (NaChar / (1.0 + exp((Ev / KbT)))) + (NdChar / (1.0 + exp((((mu + Vef) - Ec) / KbT)))); else tmp = t_1; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(N[(Ev - mu), $MachinePrecision] + EAccept), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(t$95$0 + N[(NdChar / N[(1.0 + N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[mu, -4.6e+150], t$95$1, If[LessEqual[mu, -1.35], N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(mu + N[(EDonor + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[mu, 2.1e-63], N[(t$95$0 + N[(NdChar / N[(1.0 + N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[mu, 1.06e+15], N[(N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(1.0 + N[Exp[N[(N[(N[(mu + Vef), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$1]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{Vef + \left(\left(Ev - mu\right) + EAccept\right)}{KbT}}}\\
t_1 := t_0 + \frac{NdChar}{1 + e^{\frac{mu}{KbT}}}\\
\mathbf{if}\;mu \leq -4.6 \cdot 10^{+150}:\\
\;\;\;\;t_1\\
\mathbf{elif}\;mu \leq -1.35:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{mu + \left(EDonor + \left(Vef - Ec\right)\right)}{KbT}}} + \frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}}\\
\mathbf{elif}\;mu \leq 2.1 \cdot 10^{-63}:\\
\;\;\;\;t_0 + \frac{NdChar}{1 + e^{\frac{EDonor}{KbT}}}\\
\mathbf{elif}\;mu \leq 1.06 \cdot 10^{+15}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Ev}{KbT}}} + \frac{NdChar}{1 + e^{\frac{\left(mu + Vef\right) - Ec}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;t_1\\
\end{array}
\end{array}
if mu < -4.60000000000000002e150 or 1.06e15 < mu Initial program 99.9%
Simplified99.9%
Taylor expanded in mu around inf 86.7%
if -4.60000000000000002e150 < mu < -1.3500000000000001Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 79.4%
if -1.3500000000000001 < mu < 2.1e-63Initial program 100.0%
Simplified100.0%
Taylor expanded in EDonor around inf 85.8%
if 2.1e-63 < mu < 1.06e15Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 75.4%
Taylor expanded in EDonor around 0 75.4%
Final simplification84.7%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NdChar (+ 1.0 (exp (/ (+ mu (+ EDonor (- Vef Ec))) KbT)))))
(t_1 (/ NaChar (+ 1.0 (exp (/ (+ Vef (+ (- Ev mu) EAccept)) KbT)))))
(t_2 (+ t_1 (/ NdChar (+ 1.0 (exp (/ mu KbT)))))))
(if (<= mu -3.8e+151)
t_2
(if (<= mu -7.2)
(+ t_0 (/ NaChar (+ 1.0 (exp (/ EAccept KbT)))))
(if (<= mu 2.3e-161)
(+ t_1 (/ NdChar (+ 1.0 (exp (/ EDonor KbT)))))
(if (<= mu 4.2e+15)
(+ t_0 (/ NaChar (+ 1.0 (exp (/ Ev KbT)))))
t_2))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (1.0 + exp(((mu + (EDonor + (Vef - Ec))) / KbT)));
double t_1 = NaChar / (1.0 + exp(((Vef + ((Ev - mu) + EAccept)) / KbT)));
double t_2 = t_1 + (NdChar / (1.0 + exp((mu / KbT))));
double tmp;
if (mu <= -3.8e+151) {
tmp = t_2;
} else if (mu <= -7.2) {
tmp = t_0 + (NaChar / (1.0 + exp((EAccept / KbT))));
} else if (mu <= 2.3e-161) {
tmp = t_1 + (NdChar / (1.0 + exp((EDonor / KbT))));
} else if (mu <= 4.2e+15) {
tmp = t_0 + (NaChar / (1.0 + exp((Ev / KbT))));
} else {
tmp = t_2;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: t_2
real(8) :: tmp
t_0 = ndchar / (1.0d0 + exp(((mu + (edonor + (vef - ec))) / kbt)))
t_1 = nachar / (1.0d0 + exp(((vef + ((ev - mu) + eaccept)) / kbt)))
t_2 = t_1 + (ndchar / (1.0d0 + exp((mu / kbt))))
if (mu <= (-3.8d+151)) then
tmp = t_2
else if (mu <= (-7.2d0)) then
tmp = t_0 + (nachar / (1.0d0 + exp((eaccept / kbt))))
else if (mu <= 2.3d-161) then
tmp = t_1 + (ndchar / (1.0d0 + exp((edonor / kbt))))
else if (mu <= 4.2d+15) then
tmp = t_0 + (nachar / (1.0d0 + exp((ev / kbt))))
else
tmp = t_2
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (1.0 + Math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)));
double t_1 = NaChar / (1.0 + Math.exp(((Vef + ((Ev - mu) + EAccept)) / KbT)));
double t_2 = t_1 + (NdChar / (1.0 + Math.exp((mu / KbT))));
double tmp;
if (mu <= -3.8e+151) {
tmp = t_2;
} else if (mu <= -7.2) {
tmp = t_0 + (NaChar / (1.0 + Math.exp((EAccept / KbT))));
} else if (mu <= 2.3e-161) {
tmp = t_1 + (NdChar / (1.0 + Math.exp((EDonor / KbT))));
} else if (mu <= 4.2e+15) {
tmp = t_0 + (NaChar / (1.0 + Math.exp((Ev / KbT))));
} else {
tmp = t_2;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NdChar / (1.0 + math.exp(((mu + (EDonor + (Vef - Ec))) / KbT))) t_1 = NaChar / (1.0 + math.exp(((Vef + ((Ev - mu) + EAccept)) / KbT))) t_2 = t_1 + (NdChar / (1.0 + math.exp((mu / KbT)))) tmp = 0 if mu <= -3.8e+151: tmp = t_2 elif mu <= -7.2: tmp = t_0 + (NaChar / (1.0 + math.exp((EAccept / KbT)))) elif mu <= 2.3e-161: tmp = t_1 + (NdChar / (1.0 + math.exp((EDonor / KbT)))) elif mu <= 4.2e+15: tmp = t_0 + (NaChar / (1.0 + math.exp((Ev / KbT)))) else: tmp = t_2 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NdChar / Float64(1.0 + exp(Float64(Float64(mu + Float64(EDonor + Float64(Vef - Ec))) / KbT)))) t_1 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Float64(Ev - mu) + EAccept)) / KbT)))) t_2 = Float64(t_1 + Float64(NdChar / Float64(1.0 + exp(Float64(mu / KbT))))) tmp = 0.0 if (mu <= -3.8e+151) tmp = t_2; elseif (mu <= -7.2) tmp = Float64(t_0 + Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT))))); elseif (mu <= 2.3e-161) tmp = Float64(t_1 + Float64(NdChar / Float64(1.0 + exp(Float64(EDonor / KbT))))); elseif (mu <= 4.2e+15) tmp = Float64(t_0 + Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT))))); else tmp = t_2; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NdChar / (1.0 + exp(((mu + (EDonor + (Vef - Ec))) / KbT))); t_1 = NaChar / (1.0 + exp(((Vef + ((Ev - mu) + EAccept)) / KbT))); t_2 = t_1 + (NdChar / (1.0 + exp((mu / KbT)))); tmp = 0.0; if (mu <= -3.8e+151) tmp = t_2; elseif (mu <= -7.2) tmp = t_0 + (NaChar / (1.0 + exp((EAccept / KbT)))); elseif (mu <= 2.3e-161) tmp = t_1 + (NdChar / (1.0 + exp((EDonor / KbT)))); elseif (mu <= 4.2e+15) tmp = t_0 + (NaChar / (1.0 + exp((Ev / KbT)))); else tmp = t_2; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NdChar / N[(1.0 + N[Exp[N[(N[(mu + N[(EDonor + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(N[(Ev - mu), $MachinePrecision] + EAccept), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(t$95$1 + N[(NdChar / N[(1.0 + N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[mu, -3.8e+151], t$95$2, If[LessEqual[mu, -7.2], N[(t$95$0 + N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[mu, 2.3e-161], N[(t$95$1 + N[(NdChar / N[(1.0 + N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[mu, 4.2e+15], N[(t$95$0 + N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$2]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{1 + e^{\frac{mu + \left(EDonor + \left(Vef - Ec\right)\right)}{KbT}}}\\
t_1 := \frac{NaChar}{1 + e^{\frac{Vef + \left(\left(Ev - mu\right) + EAccept\right)}{KbT}}}\\
t_2 := t_1 + \frac{NdChar}{1 + e^{\frac{mu}{KbT}}}\\
\mathbf{if}\;mu \leq -3.8 \cdot 10^{+151}:\\
\;\;\;\;t_2\\
\mathbf{elif}\;mu \leq -7.2:\\
\;\;\;\;t_0 + \frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}}\\
\mathbf{elif}\;mu \leq 2.3 \cdot 10^{-161}:\\
\;\;\;\;t_1 + \frac{NdChar}{1 + e^{\frac{EDonor}{KbT}}}\\
\mathbf{elif}\;mu \leq 4.2 \cdot 10^{+15}:\\
\;\;\;\;t_0 + \frac{NaChar}{1 + e^{\frac{Ev}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;t_2\\
\end{array}
\end{array}
if mu < -3.8e151 or 4.2e15 < mu Initial program 99.9%
Simplified99.9%
Taylor expanded in mu around inf 86.7%
if -3.8e151 < mu < -7.20000000000000018Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 79.4%
if -7.20000000000000018 < mu < 2.3e-161Initial program 100.0%
Simplified100.0%
Taylor expanded in EDonor around inf 87.4%
if 2.3e-161 < mu < 4.2e15Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 73.2%
Final simplification83.9%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0
(+
(/ NdChar (+ 1.0 (exp (/ (+ mu (+ EDonor (- Vef Ec))) KbT))))
(/ NaChar (+ 1.0 (exp (/ Vef KbT))))))
(t_1 (/ NaChar (+ 1.0 (exp (/ (+ Vef (+ (- Ev mu) EAccept)) KbT)))))
(t_2 (+ t_1 (/ NdChar (+ 1.0 (exp (/ mu KbT)))))))
(if (<= mu -2.6e+156)
t_2
(if (<= mu -2.6e-19)
t_0
(if (<= mu 2.25e-67)
(+ t_1 (/ NdChar (+ 1.0 (exp (/ EDonor KbT)))))
(if (<= mu 2.45e-11) t_0 t_2))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NdChar / (1.0 + exp(((mu + (EDonor + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + exp((Vef / KbT))));
double t_1 = NaChar / (1.0 + exp(((Vef + ((Ev - mu) + EAccept)) / KbT)));
double t_2 = t_1 + (NdChar / (1.0 + exp((mu / KbT))));
double tmp;
if (mu <= -2.6e+156) {
tmp = t_2;
} else if (mu <= -2.6e-19) {
tmp = t_0;
} else if (mu <= 2.25e-67) {
tmp = t_1 + (NdChar / (1.0 + exp((EDonor / KbT))));
} else if (mu <= 2.45e-11) {
tmp = t_0;
} else {
tmp = t_2;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: t_2
real(8) :: tmp
t_0 = (ndchar / (1.0d0 + exp(((mu + (edonor + (vef - ec))) / kbt)))) + (nachar / (1.0d0 + exp((vef / kbt))))
t_1 = nachar / (1.0d0 + exp(((vef + ((ev - mu) + eaccept)) / kbt)))
t_2 = t_1 + (ndchar / (1.0d0 + exp((mu / kbt))))
if (mu <= (-2.6d+156)) then
tmp = t_2
else if (mu <= (-2.6d-19)) then
tmp = t_0
else if (mu <= 2.25d-67) then
tmp = t_1 + (ndchar / (1.0d0 + exp((edonor / kbt))))
else if (mu <= 2.45d-11) then
tmp = t_0
else
tmp = t_2
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NdChar / (1.0 + Math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + Math.exp((Vef / KbT))));
double t_1 = NaChar / (1.0 + Math.exp(((Vef + ((Ev - mu) + EAccept)) / KbT)));
double t_2 = t_1 + (NdChar / (1.0 + Math.exp((mu / KbT))));
double tmp;
if (mu <= -2.6e+156) {
tmp = t_2;
} else if (mu <= -2.6e-19) {
tmp = t_0;
} else if (mu <= 2.25e-67) {
tmp = t_1 + (NdChar / (1.0 + Math.exp((EDonor / KbT))));
} else if (mu <= 2.45e-11) {
tmp = t_0;
} else {
tmp = t_2;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = (NdChar / (1.0 + math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + math.exp((Vef / KbT)))) t_1 = NaChar / (1.0 + math.exp(((Vef + ((Ev - mu) + EAccept)) / KbT))) t_2 = t_1 + (NdChar / (1.0 + math.exp((mu / KbT)))) tmp = 0 if mu <= -2.6e+156: tmp = t_2 elif mu <= -2.6e-19: tmp = t_0 elif mu <= 2.25e-67: tmp = t_1 + (NdChar / (1.0 + math.exp((EDonor / KbT)))) elif mu <= 2.45e-11: tmp = t_0 else: tmp = t_2 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(mu + Float64(EDonor + Float64(Vef - Ec))) / KbT)))) + Float64(NaChar / Float64(1.0 + exp(Float64(Vef / KbT))))) t_1 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Float64(Ev - mu) + EAccept)) / KbT)))) t_2 = Float64(t_1 + Float64(NdChar / Float64(1.0 + exp(Float64(mu / KbT))))) tmp = 0.0 if (mu <= -2.6e+156) tmp = t_2; elseif (mu <= -2.6e-19) tmp = t_0; elseif (mu <= 2.25e-67) tmp = Float64(t_1 + Float64(NdChar / Float64(1.0 + exp(Float64(EDonor / KbT))))); elseif (mu <= 2.45e-11) tmp = t_0; else tmp = t_2; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = (NdChar / (1.0 + exp(((mu + (EDonor + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + exp((Vef / KbT)))); t_1 = NaChar / (1.0 + exp(((Vef + ((Ev - mu) + EAccept)) / KbT))); t_2 = t_1 + (NdChar / (1.0 + exp((mu / KbT)))); tmp = 0.0; if (mu <= -2.6e+156) tmp = t_2; elseif (mu <= -2.6e-19) tmp = t_0; elseif (mu <= 2.25e-67) tmp = t_1 + (NdChar / (1.0 + exp((EDonor / KbT)))); elseif (mu <= 2.45e-11) tmp = t_0; else tmp = t_2; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(mu + N[(EDonor + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(N[(Ev - mu), $MachinePrecision] + EAccept), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(t$95$1 + N[(NdChar / N[(1.0 + N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[mu, -2.6e+156], t$95$2, If[LessEqual[mu, -2.6e-19], t$95$0, If[LessEqual[mu, 2.25e-67], N[(t$95$1 + N[(NdChar / N[(1.0 + N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[mu, 2.45e-11], t$95$0, t$95$2]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{1 + e^{\frac{mu + \left(EDonor + \left(Vef - Ec\right)\right)}{KbT}}} + \frac{NaChar}{1 + e^{\frac{Vef}{KbT}}}\\
t_1 := \frac{NaChar}{1 + e^{\frac{Vef + \left(\left(Ev - mu\right) + EAccept\right)}{KbT}}}\\
t_2 := t_1 + \frac{NdChar}{1 + e^{\frac{mu}{KbT}}}\\
\mathbf{if}\;mu \leq -2.6 \cdot 10^{+156}:\\
\;\;\;\;t_2\\
\mathbf{elif}\;mu \leq -2.6 \cdot 10^{-19}:\\
\;\;\;\;t_0\\
\mathbf{elif}\;mu \leq 2.25 \cdot 10^{-67}:\\
\;\;\;\;t_1 + \frac{NdChar}{1 + e^{\frac{EDonor}{KbT}}}\\
\mathbf{elif}\;mu \leq 2.45 \cdot 10^{-11}:\\
\;\;\;\;t_0\\
\mathbf{else}:\\
\;\;\;\;t_2\\
\end{array}
\end{array}
if mu < -2.60000000000000019e156 or 2.4499999999999999e-11 < mu Initial program 99.9%
Simplified99.9%
Taylor expanded in mu around inf 86.5%
if -2.60000000000000019e156 < mu < -2.60000000000000013e-19 or 2.25000000000000008e-67 < mu < 2.4499999999999999e-11Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 89.7%
if -2.60000000000000013e-19 < mu < 2.25000000000000008e-67Initial program 100.0%
Simplified100.0%
Taylor expanded in EDonor around inf 87.6%
Final simplification87.5%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0
(+
(/ NaChar (+ 1.0 (exp (/ (- mu) KbT))))
(/ NdChar (+ 1.0 (exp (/ mu KbT)))))))
(if (<= mu -6.2e+52)
t_0
(if (<= mu -1.9e-36)
(+
(/ NdChar (+ 1.0 (exp (/ (+ mu (+ EDonor (- Vef Ec))) KbT))))
(/ NaChar (+ 1.0 (+ 1.0 (/ (+ (+ Ev EAccept) (- Vef mu)) KbT)))))
(if (<= mu -1.7e-135)
(+
(/ NaChar (+ 1.0 (exp (/ (+ Vef (+ (- Ev mu) EAccept)) KbT))))
(/ NdChar 2.0))
(if (<= mu 8e+197)
(+
(/ NaChar (+ 1.0 (exp (/ Ev KbT))))
(/ NdChar (+ 1.0 (exp (/ (- (+ mu Vef) Ec) KbT)))))
t_0))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar / (1.0 + exp((-mu / KbT)))) + (NdChar / (1.0 + exp((mu / KbT))));
double tmp;
if (mu <= -6.2e+52) {
tmp = t_0;
} else if (mu <= -1.9e-36) {
tmp = (NdChar / (1.0 + exp(((mu + (EDonor + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + (1.0 + (((Ev + EAccept) + (Vef - mu)) / KbT))));
} else if (mu <= -1.7e-135) {
tmp = (NaChar / (1.0 + exp(((Vef + ((Ev - mu) + EAccept)) / KbT)))) + (NdChar / 2.0);
} else if (mu <= 8e+197) {
tmp = (NaChar / (1.0 + exp((Ev / KbT)))) + (NdChar / (1.0 + exp((((mu + Vef) - Ec) / KbT))));
} else {
tmp = t_0;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: tmp
t_0 = (nachar / (1.0d0 + exp((-mu / kbt)))) + (ndchar / (1.0d0 + exp((mu / kbt))))
if (mu <= (-6.2d+52)) then
tmp = t_0
else if (mu <= (-1.9d-36)) then
tmp = (ndchar / (1.0d0 + exp(((mu + (edonor + (vef - ec))) / kbt)))) + (nachar / (1.0d0 + (1.0d0 + (((ev + eaccept) + (vef - mu)) / kbt))))
else if (mu <= (-1.7d-135)) then
tmp = (nachar / (1.0d0 + exp(((vef + ((ev - mu) + eaccept)) / kbt)))) + (ndchar / 2.0d0)
else if (mu <= 8d+197) then
tmp = (nachar / (1.0d0 + exp((ev / kbt)))) + (ndchar / (1.0d0 + exp((((mu + vef) - ec) / kbt))))
else
tmp = t_0
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar / (1.0 + Math.exp((-mu / KbT)))) + (NdChar / (1.0 + Math.exp((mu / KbT))));
double tmp;
if (mu <= -6.2e+52) {
tmp = t_0;
} else if (mu <= -1.9e-36) {
tmp = (NdChar / (1.0 + Math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + (1.0 + (((Ev + EAccept) + (Vef - mu)) / KbT))));
} else if (mu <= -1.7e-135) {
tmp = (NaChar / (1.0 + Math.exp(((Vef + ((Ev - mu) + EAccept)) / KbT)))) + (NdChar / 2.0);
} else if (mu <= 8e+197) {
tmp = (NaChar / (1.0 + Math.exp((Ev / KbT)))) + (NdChar / (1.0 + Math.exp((((mu + Vef) - Ec) / KbT))));
} else {
tmp = t_0;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = (NaChar / (1.0 + math.exp((-mu / KbT)))) + (NdChar / (1.0 + math.exp((mu / KbT)))) tmp = 0 if mu <= -6.2e+52: tmp = t_0 elif mu <= -1.9e-36: tmp = (NdChar / (1.0 + math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + (1.0 + (((Ev + EAccept) + (Vef - mu)) / KbT)))) elif mu <= -1.7e-135: tmp = (NaChar / (1.0 + math.exp(((Vef + ((Ev - mu) + EAccept)) / KbT)))) + (NdChar / 2.0) elif mu <= 8e+197: tmp = (NaChar / (1.0 + math.exp((Ev / KbT)))) + (NdChar / (1.0 + math.exp((((mu + Vef) - Ec) / KbT)))) else: tmp = t_0 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(-mu) / KbT)))) + Float64(NdChar / Float64(1.0 + exp(Float64(mu / KbT))))) tmp = 0.0 if (mu <= -6.2e+52) tmp = t_0; elseif (mu <= -1.9e-36) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(mu + Float64(EDonor + Float64(Vef - Ec))) / KbT)))) + Float64(NaChar / Float64(1.0 + Float64(1.0 + Float64(Float64(Float64(Ev + EAccept) + Float64(Vef - mu)) / KbT))))); elseif (mu <= -1.7e-135) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Float64(Ev - mu) + EAccept)) / KbT)))) + Float64(NdChar / 2.0)); elseif (mu <= 8e+197) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT)))) + Float64(NdChar / Float64(1.0 + exp(Float64(Float64(Float64(mu + Vef) - Ec) / KbT))))); else tmp = t_0; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = (NaChar / (1.0 + exp((-mu / KbT)))) + (NdChar / (1.0 + exp((mu / KbT)))); tmp = 0.0; if (mu <= -6.2e+52) tmp = t_0; elseif (mu <= -1.9e-36) tmp = (NdChar / (1.0 + exp(((mu + (EDonor + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + (1.0 + (((Ev + EAccept) + (Vef - mu)) / KbT)))); elseif (mu <= -1.7e-135) tmp = (NaChar / (1.0 + exp(((Vef + ((Ev - mu) + EAccept)) / KbT)))) + (NdChar / 2.0); elseif (mu <= 8e+197) tmp = (NaChar / (1.0 + exp((Ev / KbT)))) + (NdChar / (1.0 + exp((((mu + Vef) - Ec) / KbT)))); else tmp = t_0; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(NaChar / N[(1.0 + N[Exp[N[((-mu) / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(1.0 + N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[mu, -6.2e+52], t$95$0, If[LessEqual[mu, -1.9e-36], N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(mu + N[(EDonor + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[(1.0 + N[(N[(N[(Ev + EAccept), $MachinePrecision] + N[(Vef - mu), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[mu, -1.7e-135], N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(N[(Ev - mu), $MachinePrecision] + EAccept), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[mu, 8e+197], N[(N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(1.0 + N[Exp[N[(N[(N[(mu + Vef), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$0]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{-mu}{KbT}}} + \frac{NdChar}{1 + e^{\frac{mu}{KbT}}}\\
\mathbf{if}\;mu \leq -6.2 \cdot 10^{+52}:\\
\;\;\;\;t_0\\
\mathbf{elif}\;mu \leq -1.9 \cdot 10^{-36}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{mu + \left(EDonor + \left(Vef - Ec\right)\right)}{KbT}}} + \frac{NaChar}{1 + \left(1 + \frac{\left(Ev + EAccept\right) + \left(Vef - mu\right)}{KbT}\right)}\\
\mathbf{elif}\;mu \leq -1.7 \cdot 10^{-135}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Vef + \left(\left(Ev - mu\right) + EAccept\right)}{KbT}}} + \frac{NdChar}{2}\\
\mathbf{elif}\;mu \leq 8 \cdot 10^{+197}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Ev}{KbT}}} + \frac{NdChar}{1 + e^{\frac{\left(mu + Vef\right) - Ec}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;t_0\\
\end{array}
\end{array}
if mu < -6.2e52 or 7.9999999999999996e197 < mu Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 85.1%
Taylor expanded in mu around inf 80.2%
associate-*r/80.2%
mul-1-neg80.2%
Simplified80.2%
if -6.2e52 < mu < -1.89999999999999985e-36Initial program 100.0%
Simplified100.0%
add-cube-cbrt100.0%
pow3100.0%
div-inv100.0%
associate-*r/100.0%
*-commutative100.0%
*-un-lft-identity100.0%
+-commutative100.0%
associate-+l-100.0%
Applied egg-rr100.0%
Taylor expanded in KbT around inf 79.2%
distribute-rgt-out79.2%
metadata-eval79.2%
*-rgt-identity79.2%
associate--l+79.2%
sub-neg79.2%
associate-+r+79.2%
mul-1-neg79.2%
associate-+r+79.2%
mul-1-neg79.2%
sub-neg79.2%
Simplified79.2%
if -1.89999999999999985e-36 < mu < -1.69999999999999995e-135Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 85.3%
associate-+r+85.3%
Simplified85.3%
Taylor expanded in KbT around inf 87.1%
if -1.69999999999999995e-135 < mu < 7.9999999999999996e197Initial program 99.9%
Simplified99.9%
Taylor expanded in Ev around inf 76.7%
Taylor expanded in EDonor around 0 68.7%
Final simplification74.6%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NaChar (+ 1.0 (exp (/ (+ Vef (+ (- Ev mu) EAccept)) KbT)))))
(t_1 (/ NdChar (+ 1.0 (exp (/ (+ mu (+ EDonor (- Vef Ec))) KbT))))))
(if (<= mu -8.4e-19)
(+ t_1 (/ NaChar (+ 1.0 (exp (/ (- mu) KbT)))))
(if (<= mu 2.1e-65)
(+ t_0 (/ NdChar (+ 1.0 (exp (/ EDonor KbT)))))
(if (<= mu 3.3e-11)
(+ t_1 (/ NaChar (+ 1.0 (exp (/ Vef KbT)))))
(+ t_0 (/ NdChar (+ 1.0 (exp (/ mu KbT))))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NaChar / (1.0 + exp(((Vef + ((Ev - mu) + EAccept)) / KbT)));
double t_1 = NdChar / (1.0 + exp(((mu + (EDonor + (Vef - Ec))) / KbT)));
double tmp;
if (mu <= -8.4e-19) {
tmp = t_1 + (NaChar / (1.0 + exp((-mu / KbT))));
} else if (mu <= 2.1e-65) {
tmp = t_0 + (NdChar / (1.0 + exp((EDonor / KbT))));
} else if (mu <= 3.3e-11) {
tmp = t_1 + (NaChar / (1.0 + exp((Vef / KbT))));
} else {
tmp = t_0 + (NdChar / (1.0 + exp((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) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = nachar / (1.0d0 + exp(((vef + ((ev - mu) + eaccept)) / kbt)))
t_1 = ndchar / (1.0d0 + exp(((mu + (edonor + (vef - ec))) / kbt)))
if (mu <= (-8.4d-19)) then
tmp = t_1 + (nachar / (1.0d0 + exp((-mu / kbt))))
else if (mu <= 2.1d-65) then
tmp = t_0 + (ndchar / (1.0d0 + exp((edonor / kbt))))
else if (mu <= 3.3d-11) then
tmp = t_1 + (nachar / (1.0d0 + exp((vef / kbt))))
else
tmp = t_0 + (ndchar / (1.0d0 + exp((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 t_0 = NaChar / (1.0 + Math.exp(((Vef + ((Ev - mu) + EAccept)) / KbT)));
double t_1 = NdChar / (1.0 + Math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)));
double tmp;
if (mu <= -8.4e-19) {
tmp = t_1 + (NaChar / (1.0 + Math.exp((-mu / KbT))));
} else if (mu <= 2.1e-65) {
tmp = t_0 + (NdChar / (1.0 + Math.exp((EDonor / KbT))));
} else if (mu <= 3.3e-11) {
tmp = t_1 + (NaChar / (1.0 + Math.exp((Vef / KbT))));
} else {
tmp = t_0 + (NdChar / (1.0 + Math.exp((mu / KbT))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NaChar / (1.0 + math.exp(((Vef + ((Ev - mu) + EAccept)) / KbT))) t_1 = NdChar / (1.0 + math.exp(((mu + (EDonor + (Vef - Ec))) / KbT))) tmp = 0 if mu <= -8.4e-19: tmp = t_1 + (NaChar / (1.0 + math.exp((-mu / KbT)))) elif mu <= 2.1e-65: tmp = t_0 + (NdChar / (1.0 + math.exp((EDonor / KbT)))) elif mu <= 3.3e-11: tmp = t_1 + (NaChar / (1.0 + math.exp((Vef / KbT)))) else: tmp = t_0 + (NdChar / (1.0 + math.exp((mu / KbT)))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Float64(Ev - mu) + EAccept)) / KbT)))) t_1 = Float64(NdChar / Float64(1.0 + exp(Float64(Float64(mu + Float64(EDonor + Float64(Vef - Ec))) / KbT)))) tmp = 0.0 if (mu <= -8.4e-19) tmp = Float64(t_1 + Float64(NaChar / Float64(1.0 + exp(Float64(Float64(-mu) / KbT))))); elseif (mu <= 2.1e-65) tmp = Float64(t_0 + Float64(NdChar / Float64(1.0 + exp(Float64(EDonor / KbT))))); elseif (mu <= 3.3e-11) tmp = Float64(t_1 + Float64(NaChar / Float64(1.0 + exp(Float64(Vef / KbT))))); else tmp = Float64(t_0 + Float64(NdChar / Float64(1.0 + exp(Float64(mu / KbT))))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NaChar / (1.0 + exp(((Vef + ((Ev - mu) + EAccept)) / KbT))); t_1 = NdChar / (1.0 + exp(((mu + (EDonor + (Vef - Ec))) / KbT))); tmp = 0.0; if (mu <= -8.4e-19) tmp = t_1 + (NaChar / (1.0 + exp((-mu / KbT)))); elseif (mu <= 2.1e-65) tmp = t_0 + (NdChar / (1.0 + exp((EDonor / KbT)))); elseif (mu <= 3.3e-11) tmp = t_1 + (NaChar / (1.0 + exp((Vef / KbT)))); else tmp = t_0 + (NdChar / (1.0 + exp((mu / KbT)))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(N[(Ev - mu), $MachinePrecision] + EAccept), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(NdChar / N[(1.0 + N[Exp[N[(N[(mu + N[(EDonor + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[mu, -8.4e-19], N[(t$95$1 + N[(NaChar / N[(1.0 + N[Exp[N[((-mu) / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[mu, 2.1e-65], N[(t$95$0 + N[(NdChar / N[(1.0 + N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[mu, 3.3e-11], N[(t$95$1 + N[(NaChar / N[(1.0 + N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(t$95$0 + N[(NdChar / N[(1.0 + N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{Vef + \left(\left(Ev - mu\right) + EAccept\right)}{KbT}}}\\
t_1 := \frac{NdChar}{1 + e^{\frac{mu + \left(EDonor + \left(Vef - Ec\right)\right)}{KbT}}}\\
\mathbf{if}\;mu \leq -8.4 \cdot 10^{-19}:\\
\;\;\;\;t_1 + \frac{NaChar}{1 + e^{\frac{-mu}{KbT}}}\\
\mathbf{elif}\;mu \leq 2.1 \cdot 10^{-65}:\\
\;\;\;\;t_0 + \frac{NdChar}{1 + e^{\frac{EDonor}{KbT}}}\\
\mathbf{elif}\;mu \leq 3.3 \cdot 10^{-11}:\\
\;\;\;\;t_1 + \frac{NaChar}{1 + e^{\frac{Vef}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;t_0 + \frac{NdChar}{1 + e^{\frac{mu}{KbT}}}\\
\end{array}
\end{array}
if mu < -8.3999999999999996e-19Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 87.6%
associate-*r/61.9%
mul-1-neg61.9%
Simplified87.6%
if -8.3999999999999996e-19 < mu < 2.10000000000000003e-65Initial program 100.0%
Simplified100.0%
Taylor expanded in EDonor around inf 87.6%
if 2.10000000000000003e-65 < mu < 3.3000000000000002e-11Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 100.0%
if 3.3000000000000002e-11 < mu Initial program 99.8%
Simplified99.8%
Taylor expanded in mu around inf 89.5%
Final simplification88.9%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (+ (/ NdChar (+ 1.0 (exp (/ (+ mu (+ EDonor (- Vef Ec))) KbT)))) (/ NaChar (+ 1.0 (exp (/ (+ Vef (+ (- Ev mu) EAccept)) KbT))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NdChar / (1.0 + exp(((mu + (EDonor + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + exp(((Vef + ((Ev - mu) + EAccept)) / KbT))));
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
code = (ndchar / (1.0d0 + exp(((mu + (edonor + (vef - ec))) / kbt)))) + (nachar / (1.0d0 + exp(((vef + ((ev - mu) + eaccept)) / kbt))))
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NdChar / (1.0 + Math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + Math.exp(((Vef + ((Ev - mu) + EAccept)) / KbT))));
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return (NdChar / (1.0 + math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + math.exp(((Vef + ((Ev - mu) + EAccept)) / KbT))))
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(mu + Float64(EDonor + Float64(Vef - Ec))) / KbT)))) + Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Float64(Ev - mu) + EAccept)) / KbT))))) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = (NdChar / (1.0 + exp(((mu + (EDonor + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + exp(((Vef + ((Ev - mu) + EAccept)) / KbT)))); end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(mu + N[(EDonor + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(N[(Ev - mu), $MachinePrecision] + EAccept), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{NdChar}{1 + e^{\frac{mu + \left(EDonor + \left(Vef - Ec\right)\right)}{KbT}}} + \frac{NaChar}{1 + e^{\frac{Vef + \left(\left(Ev - mu\right) + EAccept\right)}{KbT}}}
\end{array}
Initial program 99.9%
Simplified99.9%
Final simplification99.9%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0
(+
(/ NdChar (+ 1.0 (exp (/ (+ mu (+ EDonor (- Vef Ec))) KbT))))
(/ NaChar (+ 1.0 (+ 1.0 (/ (+ (+ Ev EAccept) (- Vef mu)) KbT))))))
(t_1 (/ NaChar (+ 1.0 (exp (/ (+ Vef (+ (- Ev mu) EAccept)) KbT))))))
(if (<= NaChar -7e-74)
(+
t_1
(/
NdChar
(+
1.0
(- (+ (+ 1.0 (/ EDonor KbT)) (+ (/ Vef KbT) (/ mu KbT))) (/ Ec KbT)))))
(if (<= NaChar 1.5e-77)
t_0
(if (<= NaChar 1.9e+108)
(+
(/ NaChar (+ 1.0 (exp (/ (- mu) KbT))))
(/ NdChar (+ 1.0 (exp (/ mu KbT)))))
(if (<= NaChar 1.3e+131) t_0 (+ t_1 (/ NdChar 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 = (NdChar / (1.0 + exp(((mu + (EDonor + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + (1.0 + (((Ev + EAccept) + (Vef - mu)) / KbT))));
double t_1 = NaChar / (1.0 + exp(((Vef + ((Ev - mu) + EAccept)) / KbT)));
double tmp;
if (NaChar <= -7e-74) {
tmp = t_1 + (NdChar / (1.0 + (((1.0 + (EDonor / KbT)) + ((Vef / KbT) + (mu / KbT))) - (Ec / KbT))));
} else if (NaChar <= 1.5e-77) {
tmp = t_0;
} else if (NaChar <= 1.9e+108) {
tmp = (NaChar / (1.0 + exp((-mu / KbT)))) + (NdChar / (1.0 + exp((mu / KbT))));
} else if (NaChar <= 1.3e+131) {
tmp = t_0;
} else {
tmp = t_1 + (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) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = (ndchar / (1.0d0 + exp(((mu + (edonor + (vef - ec))) / kbt)))) + (nachar / (1.0d0 + (1.0d0 + (((ev + eaccept) + (vef - mu)) / kbt))))
t_1 = nachar / (1.0d0 + exp(((vef + ((ev - mu) + eaccept)) / kbt)))
if (nachar <= (-7d-74)) then
tmp = t_1 + (ndchar / (1.0d0 + (((1.0d0 + (edonor / kbt)) + ((vef / kbt) + (mu / kbt))) - (ec / kbt))))
else if (nachar <= 1.5d-77) then
tmp = t_0
else if (nachar <= 1.9d+108) then
tmp = (nachar / (1.0d0 + exp((-mu / kbt)))) + (ndchar / (1.0d0 + exp((mu / kbt))))
else if (nachar <= 1.3d+131) then
tmp = t_0
else
tmp = t_1 + (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 t_0 = (NdChar / (1.0 + Math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + (1.0 + (((Ev + EAccept) + (Vef - mu)) / KbT))));
double t_1 = NaChar / (1.0 + Math.exp(((Vef + ((Ev - mu) + EAccept)) / KbT)));
double tmp;
if (NaChar <= -7e-74) {
tmp = t_1 + (NdChar / (1.0 + (((1.0 + (EDonor / KbT)) + ((Vef / KbT) + (mu / KbT))) - (Ec / KbT))));
} else if (NaChar <= 1.5e-77) {
tmp = t_0;
} else if (NaChar <= 1.9e+108) {
tmp = (NaChar / (1.0 + Math.exp((-mu / KbT)))) + (NdChar / (1.0 + Math.exp((mu / KbT))));
} else if (NaChar <= 1.3e+131) {
tmp = t_0;
} else {
tmp = t_1 + (NdChar / 2.0);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = (NdChar / (1.0 + math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + (1.0 + (((Ev + EAccept) + (Vef - mu)) / KbT)))) t_1 = NaChar / (1.0 + math.exp(((Vef + ((Ev - mu) + EAccept)) / KbT))) tmp = 0 if NaChar <= -7e-74: tmp = t_1 + (NdChar / (1.0 + (((1.0 + (EDonor / KbT)) + ((Vef / KbT) + (mu / KbT))) - (Ec / KbT)))) elif NaChar <= 1.5e-77: tmp = t_0 elif NaChar <= 1.9e+108: tmp = (NaChar / (1.0 + math.exp((-mu / KbT)))) + (NdChar / (1.0 + math.exp((mu / KbT)))) elif NaChar <= 1.3e+131: tmp = t_0 else: tmp = t_1 + (NdChar / 2.0) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(mu + Float64(EDonor + Float64(Vef - Ec))) / KbT)))) + Float64(NaChar / Float64(1.0 + Float64(1.0 + Float64(Float64(Float64(Ev + EAccept) + Float64(Vef - mu)) / KbT))))) t_1 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Float64(Ev - mu) + EAccept)) / KbT)))) tmp = 0.0 if (NaChar <= -7e-74) tmp = Float64(t_1 + Float64(NdChar / Float64(1.0 + Float64(Float64(Float64(1.0 + Float64(EDonor / KbT)) + Float64(Float64(Vef / KbT) + Float64(mu / KbT))) - Float64(Ec / KbT))))); elseif (NaChar <= 1.5e-77) tmp = t_0; elseif (NaChar <= 1.9e+108) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(-mu) / KbT)))) + Float64(NdChar / Float64(1.0 + exp(Float64(mu / KbT))))); elseif (NaChar <= 1.3e+131) tmp = t_0; else tmp = Float64(t_1 + Float64(NdChar / 2.0)); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = (NdChar / (1.0 + exp(((mu + (EDonor + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + (1.0 + (((Ev + EAccept) + (Vef - mu)) / KbT)))); t_1 = NaChar / (1.0 + exp(((Vef + ((Ev - mu) + EAccept)) / KbT))); tmp = 0.0; if (NaChar <= -7e-74) tmp = t_1 + (NdChar / (1.0 + (((1.0 + (EDonor / KbT)) + ((Vef / KbT) + (mu / KbT))) - (Ec / KbT)))); elseif (NaChar <= 1.5e-77) tmp = t_0; elseif (NaChar <= 1.9e+108) tmp = (NaChar / (1.0 + exp((-mu / KbT)))) + (NdChar / (1.0 + exp((mu / KbT)))); elseif (NaChar <= 1.3e+131) tmp = t_0; else tmp = t_1 + (NdChar / 2.0); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(mu + N[(EDonor + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[(1.0 + N[(N[(N[(Ev + EAccept), $MachinePrecision] + N[(Vef - mu), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(N[(Ev - mu), $MachinePrecision] + EAccept), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -7e-74], N[(t$95$1 + N[(NdChar / N[(1.0 + N[(N[(N[(1.0 + N[(EDonor / KbT), $MachinePrecision]), $MachinePrecision] + N[(N[(Vef / KbT), $MachinePrecision] + N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 1.5e-77], t$95$0, If[LessEqual[NaChar, 1.9e+108], N[(N[(NaChar / N[(1.0 + N[Exp[N[((-mu) / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(1.0 + N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 1.3e+131], t$95$0, N[(t$95$1 + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{1 + e^{\frac{mu + \left(EDonor + \left(Vef - Ec\right)\right)}{KbT}}} + \frac{NaChar}{1 + \left(1 + \frac{\left(Ev + EAccept\right) + \left(Vef - mu\right)}{KbT}\right)}\\
t_1 := \frac{NaChar}{1 + e^{\frac{Vef + \left(\left(Ev - mu\right) + EAccept\right)}{KbT}}}\\
\mathbf{if}\;NaChar \leq -7 \cdot 10^{-74}:\\
\;\;\;\;t_1 + \frac{NdChar}{1 + \left(\left(\left(1 + \frac{EDonor}{KbT}\right) + \left(\frac{Vef}{KbT} + \frac{mu}{KbT}\right)\right) - \frac{Ec}{KbT}\right)}\\
\mathbf{elif}\;NaChar \leq 1.5 \cdot 10^{-77}:\\
\;\;\;\;t_0\\
\mathbf{elif}\;NaChar \leq 1.9 \cdot 10^{+108}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{-mu}{KbT}}} + \frac{NdChar}{1 + e^{\frac{mu}{KbT}}}\\
\mathbf{elif}\;NaChar \leq 1.3 \cdot 10^{+131}:\\
\;\;\;\;t_0\\
\mathbf{else}:\\
\;\;\;\;t_1 + \frac{NdChar}{2}\\
\end{array}
\end{array}
if NaChar < -7.00000000000000029e-74Initial program 99.9%
Simplified99.9%
Taylor expanded in KbT around inf 71.4%
associate-+r+71.4%
Simplified71.4%
if -7.00000000000000029e-74 < NaChar < 1.50000000000000008e-77 or 1.90000000000000004e108 < NaChar < 1.3e131Initial program 100.0%
Simplified100.0%
add-cube-cbrt100.0%
pow3100.0%
div-inv100.0%
associate-*r/100.0%
*-commutative100.0%
*-un-lft-identity100.0%
+-commutative100.0%
associate-+l-100.0%
Applied egg-rr100.0%
Taylor expanded in KbT around inf 70.7%
distribute-rgt-out70.7%
metadata-eval70.7%
*-rgt-identity70.7%
associate--l+70.7%
sub-neg70.7%
associate-+r+70.7%
mul-1-neg70.7%
associate-+r+70.7%
mul-1-neg70.7%
sub-neg70.7%
Simplified70.7%
if 1.50000000000000008e-77 < NaChar < 1.90000000000000004e108Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 80.1%
Taylor expanded in mu around inf 66.5%
associate-*r/66.5%
mul-1-neg66.5%
Simplified66.5%
if 1.3e131 < NaChar Initial program 99.9%
Simplified99.9%
Taylor expanded in KbT around inf 77.2%
associate-+r+77.2%
Simplified77.2%
Taylor expanded in KbT around inf 83.0%
Final simplification71.8%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NaChar (+ 1.0 (exp (/ (+ Vef (+ (- Ev mu) EAccept)) KbT)))))
(t_1 (+ t_0 (/ KbT (/ (+ EDonor (+ Vef (- mu Ec))) NdChar))))
(t_2
(+
(/ NdChar (+ 1.0 (exp (/ (+ mu (+ EDonor (- Vef Ec))) KbT))))
(/ NaChar (+ 1.0 (+ 1.0 (/ (+ (+ Ev EAccept) (- Vef mu)) KbT)))))))
(if (<= NdChar -1.45e-77)
t_2
(if (<= NdChar 3.7e-228)
t_1
(if (<= NdChar 2.65e-107)
(+ t_0 (/ NdChar 2.0))
(if (<= NdChar 1.25e-28) 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 = NaChar / (1.0 + exp(((Vef + ((Ev - mu) + EAccept)) / KbT)));
double t_1 = t_0 + (KbT / ((EDonor + (Vef + (mu - Ec))) / NdChar));
double t_2 = (NdChar / (1.0 + exp(((mu + (EDonor + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + (1.0 + (((Ev + EAccept) + (Vef - mu)) / KbT))));
double tmp;
if (NdChar <= -1.45e-77) {
tmp = t_2;
} else if (NdChar <= 3.7e-228) {
tmp = t_1;
} else if (NdChar <= 2.65e-107) {
tmp = t_0 + (NdChar / 2.0);
} else if (NdChar <= 1.25e-28) {
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 = nachar / (1.0d0 + exp(((vef + ((ev - mu) + eaccept)) / kbt)))
t_1 = t_0 + (kbt / ((edonor + (vef + (mu - ec))) / ndchar))
t_2 = (ndchar / (1.0d0 + exp(((mu + (edonor + (vef - ec))) / kbt)))) + (nachar / (1.0d0 + (1.0d0 + (((ev + eaccept) + (vef - mu)) / kbt))))
if (ndchar <= (-1.45d-77)) then
tmp = t_2
else if (ndchar <= 3.7d-228) then
tmp = t_1
else if (ndchar <= 2.65d-107) then
tmp = t_0 + (ndchar / 2.0d0)
else if (ndchar <= 1.25d-28) 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 = NaChar / (1.0 + Math.exp(((Vef + ((Ev - mu) + EAccept)) / KbT)));
double t_1 = t_0 + (KbT / ((EDonor + (Vef + (mu - Ec))) / NdChar));
double t_2 = (NdChar / (1.0 + Math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + (1.0 + (((Ev + EAccept) + (Vef - mu)) / KbT))));
double tmp;
if (NdChar <= -1.45e-77) {
tmp = t_2;
} else if (NdChar <= 3.7e-228) {
tmp = t_1;
} else if (NdChar <= 2.65e-107) {
tmp = t_0 + (NdChar / 2.0);
} else if (NdChar <= 1.25e-28) {
tmp = t_1;
} else {
tmp = t_2;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NaChar / (1.0 + math.exp(((Vef + ((Ev - mu) + EAccept)) / KbT))) t_1 = t_0 + (KbT / ((EDonor + (Vef + (mu - Ec))) / NdChar)) t_2 = (NdChar / (1.0 + math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + (1.0 + (((Ev + EAccept) + (Vef - mu)) / KbT)))) tmp = 0 if NdChar <= -1.45e-77: tmp = t_2 elif NdChar <= 3.7e-228: tmp = t_1 elif NdChar <= 2.65e-107: tmp = t_0 + (NdChar / 2.0) elif NdChar <= 1.25e-28: tmp = t_1 else: tmp = t_2 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Float64(Ev - mu) + EAccept)) / KbT)))) t_1 = Float64(t_0 + Float64(KbT / Float64(Float64(EDonor + Float64(Vef + Float64(mu - Ec))) / NdChar))) t_2 = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(mu + Float64(EDonor + Float64(Vef - Ec))) / KbT)))) + Float64(NaChar / Float64(1.0 + Float64(1.0 + Float64(Float64(Float64(Ev + EAccept) + Float64(Vef - mu)) / KbT))))) tmp = 0.0 if (NdChar <= -1.45e-77) tmp = t_2; elseif (NdChar <= 3.7e-228) tmp = t_1; elseif (NdChar <= 2.65e-107) tmp = Float64(t_0 + Float64(NdChar / 2.0)); elseif (NdChar <= 1.25e-28) 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 = NaChar / (1.0 + exp(((Vef + ((Ev - mu) + EAccept)) / KbT))); t_1 = t_0 + (KbT / ((EDonor + (Vef + (mu - Ec))) / NdChar)); t_2 = (NdChar / (1.0 + exp(((mu + (EDonor + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + (1.0 + (((Ev + EAccept) + (Vef - mu)) / KbT)))); tmp = 0.0; if (NdChar <= -1.45e-77) tmp = t_2; elseif (NdChar <= 3.7e-228) tmp = t_1; elseif (NdChar <= 2.65e-107) tmp = t_0 + (NdChar / 2.0); elseif (NdChar <= 1.25e-28) 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[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(N[(Ev - mu), $MachinePrecision] + EAccept), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(t$95$0 + N[(KbT / N[(N[(EDonor + N[(Vef + N[(mu - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / NdChar), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(mu + N[(EDonor + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[(1.0 + N[(N[(N[(Ev + EAccept), $MachinePrecision] + N[(Vef - mu), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NdChar, -1.45e-77], t$95$2, If[LessEqual[NdChar, 3.7e-228], t$95$1, If[LessEqual[NdChar, 2.65e-107], N[(t$95$0 + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[NdChar, 1.25e-28], t$95$1, t$95$2]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{Vef + \left(\left(Ev - mu\right) + EAccept\right)}{KbT}}}\\
t_1 := t_0 + \frac{KbT}{\frac{EDonor + \left(Vef + \left(mu - Ec\right)\right)}{NdChar}}\\
t_2 := \frac{NdChar}{1 + e^{\frac{mu + \left(EDonor + \left(Vef - Ec\right)\right)}{KbT}}} + \frac{NaChar}{1 + \left(1 + \frac{\left(Ev + EAccept\right) + \left(Vef - mu\right)}{KbT}\right)}\\
\mathbf{if}\;NdChar \leq -1.45 \cdot 10^{-77}:\\
\;\;\;\;t_2\\
\mathbf{elif}\;NdChar \leq 3.7 \cdot 10^{-228}:\\
\;\;\;\;t_1\\
\mathbf{elif}\;NdChar \leq 2.65 \cdot 10^{-107}:\\
\;\;\;\;t_0 + \frac{NdChar}{2}\\
\mathbf{elif}\;NdChar \leq 1.25 \cdot 10^{-28}:\\
\;\;\;\;t_1\\
\mathbf{else}:\\
\;\;\;\;t_2\\
\end{array}
\end{array}
if NdChar < -1.4499999999999999e-77 or 1.25e-28 < NdChar Initial program 99.9%
Simplified99.9%
add-cube-cbrt99.9%
pow399.9%
div-inv99.9%
associate-*r/99.9%
*-commutative99.9%
*-un-lft-identity99.9%
+-commutative99.9%
associate-+l-99.9%
Applied egg-rr99.9%
Taylor expanded in KbT around inf 65.1%
distribute-rgt-out65.1%
metadata-eval65.1%
*-rgt-identity65.1%
associate--l+65.1%
sub-neg65.1%
associate-+r+65.1%
mul-1-neg65.1%
associate-+r+65.1%
mul-1-neg65.1%
sub-neg65.1%
Simplified65.1%
if -1.4499999999999999e-77 < NdChar < 3.7e-228 or 2.65e-107 < NdChar < 1.25e-28Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 73.6%
associate-+r+73.6%
Simplified73.6%
Taylor expanded in KbT around 0 76.5%
associate-/l*79.2%
associate--l+79.2%
associate--l+79.2%
Simplified79.2%
if 3.7e-228 < NdChar < 2.65e-107Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 76.5%
associate-+r+76.5%
Simplified76.5%
Taylor expanded in KbT around inf 87.0%
Final simplification71.2%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NaChar (+ 1.0 (exp (/ (+ Vef (+ (- Ev mu) EAccept)) KbT))))))
(if (<= NaChar -2.3e-72)
(+
t_0
(/
NdChar
(+
1.0
(- (+ (+ 1.0 (/ EDonor KbT)) (+ (/ Vef KbT) (/ mu KbT))) (/ Ec KbT)))))
(if (<= NaChar 4.2e+131)
(+
(/ NdChar (+ 1.0 (exp (/ (+ mu (+ EDonor (- Vef Ec))) KbT))))
(/ NaChar (+ 1.0 (+ 1.0 (/ (+ (+ Ev EAccept) (- Vef mu)) KbT)))))
(+ t_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 t_0 = NaChar / (1.0 + exp(((Vef + ((Ev - mu) + EAccept)) / KbT)));
double tmp;
if (NaChar <= -2.3e-72) {
tmp = t_0 + (NdChar / (1.0 + (((1.0 + (EDonor / KbT)) + ((Vef / KbT) + (mu / KbT))) - (Ec / KbT))));
} else if (NaChar <= 4.2e+131) {
tmp = (NdChar / (1.0 + exp(((mu + (EDonor + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + (1.0 + (((Ev + EAccept) + (Vef - mu)) / KbT))));
} else {
tmp = t_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) :: t_0
real(8) :: tmp
t_0 = nachar / (1.0d0 + exp(((vef + ((ev - mu) + eaccept)) / kbt)))
if (nachar <= (-2.3d-72)) then
tmp = t_0 + (ndchar / (1.0d0 + (((1.0d0 + (edonor / kbt)) + ((vef / kbt) + (mu / kbt))) - (ec / kbt))))
else if (nachar <= 4.2d+131) then
tmp = (ndchar / (1.0d0 + exp(((mu + (edonor + (vef - ec))) / kbt)))) + (nachar / (1.0d0 + (1.0d0 + (((ev + eaccept) + (vef - mu)) / kbt))))
else
tmp = t_0 + (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 t_0 = NaChar / (1.0 + Math.exp(((Vef + ((Ev - mu) + EAccept)) / KbT)));
double tmp;
if (NaChar <= -2.3e-72) {
tmp = t_0 + (NdChar / (1.0 + (((1.0 + (EDonor / KbT)) + ((Vef / KbT) + (mu / KbT))) - (Ec / KbT))));
} else if (NaChar <= 4.2e+131) {
tmp = (NdChar / (1.0 + Math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + (1.0 + (((Ev + EAccept) + (Vef - mu)) / KbT))));
} else {
tmp = t_0 + (NdChar / 2.0);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NaChar / (1.0 + math.exp(((Vef + ((Ev - mu) + EAccept)) / KbT))) tmp = 0 if NaChar <= -2.3e-72: tmp = t_0 + (NdChar / (1.0 + (((1.0 + (EDonor / KbT)) + ((Vef / KbT) + (mu / KbT))) - (Ec / KbT)))) elif NaChar <= 4.2e+131: tmp = (NdChar / (1.0 + math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + (1.0 + (((Ev + EAccept) + (Vef - mu)) / KbT)))) else: tmp = t_0 + (NdChar / 2.0) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Float64(Ev - mu) + EAccept)) / KbT)))) tmp = 0.0 if (NaChar <= -2.3e-72) tmp = Float64(t_0 + Float64(NdChar / Float64(1.0 + Float64(Float64(Float64(1.0 + Float64(EDonor / KbT)) + Float64(Float64(Vef / KbT) + Float64(mu / KbT))) - Float64(Ec / KbT))))); elseif (NaChar <= 4.2e+131) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(mu + Float64(EDonor + Float64(Vef - Ec))) / KbT)))) + Float64(NaChar / Float64(1.0 + Float64(1.0 + Float64(Float64(Float64(Ev + EAccept) + Float64(Vef - mu)) / KbT))))); else tmp = Float64(t_0 + Float64(NdChar / 2.0)); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NaChar / (1.0 + exp(((Vef + ((Ev - mu) + EAccept)) / KbT))); tmp = 0.0; if (NaChar <= -2.3e-72) tmp = t_0 + (NdChar / (1.0 + (((1.0 + (EDonor / KbT)) + ((Vef / KbT) + (mu / KbT))) - (Ec / KbT)))); elseif (NaChar <= 4.2e+131) tmp = (NdChar / (1.0 + exp(((mu + (EDonor + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + (1.0 + (((Ev + EAccept) + (Vef - mu)) / KbT)))); else tmp = t_0 + (NdChar / 2.0); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(N[(Ev - mu), $MachinePrecision] + EAccept), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -2.3e-72], N[(t$95$0 + N[(NdChar / N[(1.0 + N[(N[(N[(1.0 + N[(EDonor / KbT), $MachinePrecision]), $MachinePrecision] + N[(N[(Vef / KbT), $MachinePrecision] + N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 4.2e+131], N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(mu + N[(EDonor + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[(1.0 + N[(N[(N[(Ev + EAccept), $MachinePrecision] + N[(Vef - mu), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(t$95$0 + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{Vef + \left(\left(Ev - mu\right) + EAccept\right)}{KbT}}}\\
\mathbf{if}\;NaChar \leq -2.3 \cdot 10^{-72}:\\
\;\;\;\;t_0 + \frac{NdChar}{1 + \left(\left(\left(1 + \frac{EDonor}{KbT}\right) + \left(\frac{Vef}{KbT} + \frac{mu}{KbT}\right)\right) - \frac{Ec}{KbT}\right)}\\
\mathbf{elif}\;NaChar \leq 4.2 \cdot 10^{+131}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{mu + \left(EDonor + \left(Vef - Ec\right)\right)}{KbT}}} + \frac{NaChar}{1 + \left(1 + \frac{\left(Ev + EAccept\right) + \left(Vef - mu\right)}{KbT}\right)}\\
\mathbf{else}:\\
\;\;\;\;t_0 + \frac{NdChar}{2}\\
\end{array}
\end{array}
if NaChar < -2.29999999999999995e-72Initial program 99.9%
Simplified99.9%
Taylor expanded in KbT around inf 71.4%
associate-+r+71.4%
Simplified71.4%
if -2.29999999999999995e-72 < NaChar < 4.19999999999999971e131Initial program 100.0%
Simplified100.0%
add-cube-cbrt100.0%
pow3100.0%
div-inv100.0%
associate-*r/100.0%
*-commutative100.0%
*-un-lft-identity100.0%
+-commutative100.0%
associate-+l-100.0%
Applied egg-rr100.0%
Taylor expanded in KbT around inf 66.1%
distribute-rgt-out66.1%
metadata-eval66.1%
*-rgt-identity66.1%
associate--l+66.1%
sub-neg66.1%
associate-+r+66.1%
mul-1-neg66.1%
associate-+r+66.1%
mul-1-neg66.1%
sub-neg66.1%
Simplified66.1%
if 4.19999999999999971e131 < NaChar Initial program 99.9%
Simplified99.9%
Taylor expanded in KbT around inf 77.2%
associate-+r+77.2%
Simplified77.2%
Taylor expanded in KbT around inf 83.0%
Final simplification69.9%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NaChar (+ 1.0 (exp (/ (+ Vef (+ (- Ev mu) EAccept)) KbT)))))
(t_1 (+ t_0 (/ KbT (/ (+ EDonor (+ Vef (- mu Ec))) NdChar))))
(t_2
(+
(/ NdChar (+ 1.0 (exp (/ (+ mu (+ EDonor (- Vef Ec))) KbT))))
(/ NaChar (+ 2.0 (/ Ev KbT))))))
(if (<= NdChar -1.6e-77)
t_2
(if (<= NdChar 1.25e-225)
t_1
(if (<= NdChar 4.3e-108)
(+ t_0 (/ NdChar 2.0))
(if (<= NdChar 9.5e-31) 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 = NaChar / (1.0 + exp(((Vef + ((Ev - mu) + EAccept)) / KbT)));
double t_1 = t_0 + (KbT / ((EDonor + (Vef + (mu - Ec))) / NdChar));
double t_2 = (NdChar / (1.0 + exp(((mu + (EDonor + (Vef - Ec))) / KbT)))) + (NaChar / (2.0 + (Ev / KbT)));
double tmp;
if (NdChar <= -1.6e-77) {
tmp = t_2;
} else if (NdChar <= 1.25e-225) {
tmp = t_1;
} else if (NdChar <= 4.3e-108) {
tmp = t_0 + (NdChar / 2.0);
} else if (NdChar <= 9.5e-31) {
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 = nachar / (1.0d0 + exp(((vef + ((ev - mu) + eaccept)) / kbt)))
t_1 = t_0 + (kbt / ((edonor + (vef + (mu - ec))) / ndchar))
t_2 = (ndchar / (1.0d0 + exp(((mu + (edonor + (vef - ec))) / kbt)))) + (nachar / (2.0d0 + (ev / kbt)))
if (ndchar <= (-1.6d-77)) then
tmp = t_2
else if (ndchar <= 1.25d-225) then
tmp = t_1
else if (ndchar <= 4.3d-108) then
tmp = t_0 + (ndchar / 2.0d0)
else if (ndchar <= 9.5d-31) 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 = NaChar / (1.0 + Math.exp(((Vef + ((Ev - mu) + EAccept)) / KbT)));
double t_1 = t_0 + (KbT / ((EDonor + (Vef + (mu - Ec))) / NdChar));
double t_2 = (NdChar / (1.0 + Math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)))) + (NaChar / (2.0 + (Ev / KbT)));
double tmp;
if (NdChar <= -1.6e-77) {
tmp = t_2;
} else if (NdChar <= 1.25e-225) {
tmp = t_1;
} else if (NdChar <= 4.3e-108) {
tmp = t_0 + (NdChar / 2.0);
} else if (NdChar <= 9.5e-31) {
tmp = t_1;
} else {
tmp = t_2;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NaChar / (1.0 + math.exp(((Vef + ((Ev - mu) + EAccept)) / KbT))) t_1 = t_0 + (KbT / ((EDonor + (Vef + (mu - Ec))) / NdChar)) t_2 = (NdChar / (1.0 + math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)))) + (NaChar / (2.0 + (Ev / KbT))) tmp = 0 if NdChar <= -1.6e-77: tmp = t_2 elif NdChar <= 1.25e-225: tmp = t_1 elif NdChar <= 4.3e-108: tmp = t_0 + (NdChar / 2.0) elif NdChar <= 9.5e-31: tmp = t_1 else: tmp = t_2 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Float64(Ev - mu) + EAccept)) / KbT)))) t_1 = Float64(t_0 + Float64(KbT / Float64(Float64(EDonor + Float64(Vef + Float64(mu - Ec))) / NdChar))) t_2 = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(mu + Float64(EDonor + Float64(Vef - Ec))) / KbT)))) + Float64(NaChar / Float64(2.0 + Float64(Ev / KbT)))) tmp = 0.0 if (NdChar <= -1.6e-77) tmp = t_2; elseif (NdChar <= 1.25e-225) tmp = t_1; elseif (NdChar <= 4.3e-108) tmp = Float64(t_0 + Float64(NdChar / 2.0)); elseif (NdChar <= 9.5e-31) 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 = NaChar / (1.0 + exp(((Vef + ((Ev - mu) + EAccept)) / KbT))); t_1 = t_0 + (KbT / ((EDonor + (Vef + (mu - Ec))) / NdChar)); t_2 = (NdChar / (1.0 + exp(((mu + (EDonor + (Vef - Ec))) / KbT)))) + (NaChar / (2.0 + (Ev / KbT))); tmp = 0.0; if (NdChar <= -1.6e-77) tmp = t_2; elseif (NdChar <= 1.25e-225) tmp = t_1; elseif (NdChar <= 4.3e-108) tmp = t_0 + (NdChar / 2.0); elseif (NdChar <= 9.5e-31) 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[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(N[(Ev - mu), $MachinePrecision] + EAccept), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(t$95$0 + N[(KbT / N[(N[(EDonor + N[(Vef + N[(mu - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / NdChar), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(mu + N[(EDonor + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(2.0 + N[(Ev / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NdChar, -1.6e-77], t$95$2, If[LessEqual[NdChar, 1.25e-225], t$95$1, If[LessEqual[NdChar, 4.3e-108], N[(t$95$0 + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[NdChar, 9.5e-31], t$95$1, t$95$2]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{Vef + \left(\left(Ev - mu\right) + EAccept\right)}{KbT}}}\\
t_1 := t_0 + \frac{KbT}{\frac{EDonor + \left(Vef + \left(mu - Ec\right)\right)}{NdChar}}\\
t_2 := \frac{NdChar}{1 + e^{\frac{mu + \left(EDonor + \left(Vef - Ec\right)\right)}{KbT}}} + \frac{NaChar}{2 + \frac{Ev}{KbT}}\\
\mathbf{if}\;NdChar \leq -1.6 \cdot 10^{-77}:\\
\;\;\;\;t_2\\
\mathbf{elif}\;NdChar \leq 1.25 \cdot 10^{-225}:\\
\;\;\;\;t_1\\
\mathbf{elif}\;NdChar \leq 4.3 \cdot 10^{-108}:\\
\;\;\;\;t_0 + \frac{NdChar}{2}\\
\mathbf{elif}\;NdChar \leq 9.5 \cdot 10^{-31}:\\
\;\;\;\;t_1\\
\mathbf{else}:\\
\;\;\;\;t_2\\
\end{array}
\end{array}
if NdChar < -1.6e-77 or 9.5000000000000008e-31 < NdChar Initial program 99.9%
Simplified99.9%
Taylor expanded in Ev around inf 76.0%
Taylor expanded in Ev around 0 57.7%
if -1.6e-77 < NdChar < 1.25e-225 or 4.3e-108 < NdChar < 9.5000000000000008e-31Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 73.6%
associate-+r+73.6%
Simplified73.6%
Taylor expanded in KbT around 0 76.5%
associate-/l*79.2%
associate--l+79.2%
associate--l+79.2%
Simplified79.2%
if 1.25e-225 < NdChar < 4.3e-108Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 76.5%
associate-+r+76.5%
Simplified76.5%
Taylor expanded in KbT around inf 87.0%
Final simplification66.6%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NaChar (+ 1.0 (exp (/ (+ Vef (+ (- Ev mu) EAccept)) KbT))))))
(if (<= NaChar -1.75e-74)
(+ t_0 (/ NdChar (- (+ 2.0 (+ (/ EDonor KbT) (/ Vef KbT))) (/ Ec KbT))))
(if (<= NaChar 2.4e+133)
(+
(/ NdChar (+ 1.0 (exp (/ (+ mu (+ EDonor (- Vef Ec))) KbT))))
(/ NaChar (+ 1.0 (+ 1.0 (/ (+ (+ Ev EAccept) (- Vef mu)) KbT)))))
(+ t_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 t_0 = NaChar / (1.0 + exp(((Vef + ((Ev - mu) + EAccept)) / KbT)));
double tmp;
if (NaChar <= -1.75e-74) {
tmp = t_0 + (NdChar / ((2.0 + ((EDonor / KbT) + (Vef / KbT))) - (Ec / KbT)));
} else if (NaChar <= 2.4e+133) {
tmp = (NdChar / (1.0 + exp(((mu + (EDonor + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + (1.0 + (((Ev + EAccept) + (Vef - mu)) / KbT))));
} else {
tmp = t_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) :: t_0
real(8) :: tmp
t_0 = nachar / (1.0d0 + exp(((vef + ((ev - mu) + eaccept)) / kbt)))
if (nachar <= (-1.75d-74)) then
tmp = t_0 + (ndchar / ((2.0d0 + ((edonor / kbt) + (vef / kbt))) - (ec / kbt)))
else if (nachar <= 2.4d+133) then
tmp = (ndchar / (1.0d0 + exp(((mu + (edonor + (vef - ec))) / kbt)))) + (nachar / (1.0d0 + (1.0d0 + (((ev + eaccept) + (vef - mu)) / kbt))))
else
tmp = t_0 + (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 t_0 = NaChar / (1.0 + Math.exp(((Vef + ((Ev - mu) + EAccept)) / KbT)));
double tmp;
if (NaChar <= -1.75e-74) {
tmp = t_0 + (NdChar / ((2.0 + ((EDonor / KbT) + (Vef / KbT))) - (Ec / KbT)));
} else if (NaChar <= 2.4e+133) {
tmp = (NdChar / (1.0 + Math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + (1.0 + (((Ev + EAccept) + (Vef - mu)) / KbT))));
} else {
tmp = t_0 + (NdChar / 2.0);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NaChar / (1.0 + math.exp(((Vef + ((Ev - mu) + EAccept)) / KbT))) tmp = 0 if NaChar <= -1.75e-74: tmp = t_0 + (NdChar / ((2.0 + ((EDonor / KbT) + (Vef / KbT))) - (Ec / KbT))) elif NaChar <= 2.4e+133: tmp = (NdChar / (1.0 + math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + (1.0 + (((Ev + EAccept) + (Vef - mu)) / KbT)))) else: tmp = t_0 + (NdChar / 2.0) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Float64(Ev - mu) + EAccept)) / KbT)))) tmp = 0.0 if (NaChar <= -1.75e-74) tmp = Float64(t_0 + Float64(NdChar / Float64(Float64(2.0 + Float64(Float64(EDonor / KbT) + Float64(Vef / KbT))) - Float64(Ec / KbT)))); elseif (NaChar <= 2.4e+133) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(mu + Float64(EDonor + Float64(Vef - Ec))) / KbT)))) + Float64(NaChar / Float64(1.0 + Float64(1.0 + Float64(Float64(Float64(Ev + EAccept) + Float64(Vef - mu)) / KbT))))); else tmp = Float64(t_0 + Float64(NdChar / 2.0)); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NaChar / (1.0 + exp(((Vef + ((Ev - mu) + EAccept)) / KbT))); tmp = 0.0; if (NaChar <= -1.75e-74) tmp = t_0 + (NdChar / ((2.0 + ((EDonor / KbT) + (Vef / KbT))) - (Ec / KbT))); elseif (NaChar <= 2.4e+133) tmp = (NdChar / (1.0 + exp(((mu + (EDonor + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + (1.0 + (((Ev + EAccept) + (Vef - mu)) / KbT)))); else tmp = t_0 + (NdChar / 2.0); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(N[(Ev - mu), $MachinePrecision] + EAccept), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -1.75e-74], N[(t$95$0 + N[(NdChar / N[(N[(2.0 + N[(N[(EDonor / KbT), $MachinePrecision] + N[(Vef / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 2.4e+133], N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(mu + N[(EDonor + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[(1.0 + N[(N[(N[(Ev + EAccept), $MachinePrecision] + N[(Vef - mu), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(t$95$0 + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{Vef + \left(\left(Ev - mu\right) + EAccept\right)}{KbT}}}\\
\mathbf{if}\;NaChar \leq -1.75 \cdot 10^{-74}:\\
\;\;\;\;t_0 + \frac{NdChar}{\left(2 + \left(\frac{EDonor}{KbT} + \frac{Vef}{KbT}\right)\right) - \frac{Ec}{KbT}}\\
\mathbf{elif}\;NaChar \leq 2.4 \cdot 10^{+133}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{mu + \left(EDonor + \left(Vef - Ec\right)\right)}{KbT}}} + \frac{NaChar}{1 + \left(1 + \frac{\left(Ev + EAccept\right) + \left(Vef - mu\right)}{KbT}\right)}\\
\mathbf{else}:\\
\;\;\;\;t_0 + \frac{NdChar}{2}\\
\end{array}
\end{array}
if NaChar < -1.75000000000000007e-74Initial program 99.9%
Simplified99.9%
Taylor expanded in KbT around inf 71.4%
associate-+r+71.4%
Simplified71.4%
Taylor expanded in mu around 0 70.5%
if -1.75000000000000007e-74 < NaChar < 2.3999999999999999e133Initial program 100.0%
Simplified100.0%
add-cube-cbrt100.0%
pow3100.0%
div-inv100.0%
associate-*r/100.0%
*-commutative100.0%
*-un-lft-identity100.0%
+-commutative100.0%
associate-+l-100.0%
Applied egg-rr100.0%
Taylor expanded in KbT around inf 66.1%
distribute-rgt-out66.1%
metadata-eval66.1%
*-rgt-identity66.1%
associate--l+66.1%
sub-neg66.1%
associate-+r+66.1%
mul-1-neg66.1%
associate-+r+66.1%
mul-1-neg66.1%
sub-neg66.1%
Simplified66.1%
if 2.3999999999999999e133 < NaChar Initial program 99.9%
Simplified99.9%
Taylor expanded in KbT around inf 77.2%
associate-+r+77.2%
Simplified77.2%
Taylor expanded in KbT around inf 83.0%
Final simplification69.6%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NaChar (+ 1.0 (exp (/ (+ Vef (+ (- Ev mu) EAccept)) KbT)))))
(t_1
(+
(/ NdChar (+ 1.0 (exp (/ (+ mu (+ EDonor (- Vef Ec))) KbT))))
(/ NaChar (+ 2.0 (/ Ev KbT))))))
(if (<= NdChar -1.05e-77)
t_1
(if (<= NdChar -1.45e-141)
(+ t_0 (/ KbT (/ Vef NdChar)))
(if (or (<= NdChar -3e-166) (not (<= NdChar 1.08e+24)))
t_1
(+ t_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 t_0 = NaChar / (1.0 + exp(((Vef + ((Ev - mu) + EAccept)) / KbT)));
double t_1 = (NdChar / (1.0 + exp(((mu + (EDonor + (Vef - Ec))) / KbT)))) + (NaChar / (2.0 + (Ev / KbT)));
double tmp;
if (NdChar <= -1.05e-77) {
tmp = t_1;
} else if (NdChar <= -1.45e-141) {
tmp = t_0 + (KbT / (Vef / NdChar));
} else if ((NdChar <= -3e-166) || !(NdChar <= 1.08e+24)) {
tmp = t_1;
} else {
tmp = t_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) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = nachar / (1.0d0 + exp(((vef + ((ev - mu) + eaccept)) / kbt)))
t_1 = (ndchar / (1.0d0 + exp(((mu + (edonor + (vef - ec))) / kbt)))) + (nachar / (2.0d0 + (ev / kbt)))
if (ndchar <= (-1.05d-77)) then
tmp = t_1
else if (ndchar <= (-1.45d-141)) then
tmp = t_0 + (kbt / (vef / ndchar))
else if ((ndchar <= (-3d-166)) .or. (.not. (ndchar <= 1.08d+24))) then
tmp = t_1
else
tmp = t_0 + (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 t_0 = NaChar / (1.0 + Math.exp(((Vef + ((Ev - mu) + EAccept)) / KbT)));
double t_1 = (NdChar / (1.0 + Math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)))) + (NaChar / (2.0 + (Ev / KbT)));
double tmp;
if (NdChar <= -1.05e-77) {
tmp = t_1;
} else if (NdChar <= -1.45e-141) {
tmp = t_0 + (KbT / (Vef / NdChar));
} else if ((NdChar <= -3e-166) || !(NdChar <= 1.08e+24)) {
tmp = t_1;
} else {
tmp = t_0 + (NdChar / 2.0);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NaChar / (1.0 + math.exp(((Vef + ((Ev - mu) + EAccept)) / KbT))) t_1 = (NdChar / (1.0 + math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)))) + (NaChar / (2.0 + (Ev / KbT))) tmp = 0 if NdChar <= -1.05e-77: tmp = t_1 elif NdChar <= -1.45e-141: tmp = t_0 + (KbT / (Vef / NdChar)) elif (NdChar <= -3e-166) or not (NdChar <= 1.08e+24): tmp = t_1 else: tmp = t_0 + (NdChar / 2.0) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Float64(Ev - mu) + EAccept)) / KbT)))) t_1 = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(mu + Float64(EDonor + Float64(Vef - Ec))) / KbT)))) + Float64(NaChar / Float64(2.0 + Float64(Ev / KbT)))) tmp = 0.0 if (NdChar <= -1.05e-77) tmp = t_1; elseif (NdChar <= -1.45e-141) tmp = Float64(t_0 + Float64(KbT / Float64(Vef / NdChar))); elseif ((NdChar <= -3e-166) || !(NdChar <= 1.08e+24)) tmp = t_1; else tmp = Float64(t_0 + Float64(NdChar / 2.0)); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NaChar / (1.0 + exp(((Vef + ((Ev - mu) + EAccept)) / KbT))); t_1 = (NdChar / (1.0 + exp(((mu + (EDonor + (Vef - Ec))) / KbT)))) + (NaChar / (2.0 + (Ev / KbT))); tmp = 0.0; if (NdChar <= -1.05e-77) tmp = t_1; elseif (NdChar <= -1.45e-141) tmp = t_0 + (KbT / (Vef / NdChar)); elseif ((NdChar <= -3e-166) || ~((NdChar <= 1.08e+24))) tmp = t_1; else tmp = t_0 + (NdChar / 2.0); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(N[(Ev - mu), $MachinePrecision] + EAccept), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(mu + N[(EDonor + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(2.0 + N[(Ev / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NdChar, -1.05e-77], t$95$1, If[LessEqual[NdChar, -1.45e-141], N[(t$95$0 + N[(KbT / N[(Vef / NdChar), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[Or[LessEqual[NdChar, -3e-166], N[Not[LessEqual[NdChar, 1.08e+24]], $MachinePrecision]], t$95$1, N[(t$95$0 + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{Vef + \left(\left(Ev - mu\right) + EAccept\right)}{KbT}}}\\
t_1 := \frac{NdChar}{1 + e^{\frac{mu + \left(EDonor + \left(Vef - Ec\right)\right)}{KbT}}} + \frac{NaChar}{2 + \frac{Ev}{KbT}}\\
\mathbf{if}\;NdChar \leq -1.05 \cdot 10^{-77}:\\
\;\;\;\;t_1\\
\mathbf{elif}\;NdChar \leq -1.45 \cdot 10^{-141}:\\
\;\;\;\;t_0 + \frac{KbT}{\frac{Vef}{NdChar}}\\
\mathbf{elif}\;NdChar \leq -3 \cdot 10^{-166} \lor \neg \left(NdChar \leq 1.08 \cdot 10^{+24}\right):\\
\;\;\;\;t_1\\
\mathbf{else}:\\
\;\;\;\;t_0 + \frac{NdChar}{2}\\
\end{array}
\end{array}
if NdChar < -1.05000000000000008e-77 or -1.45e-141 < NdChar < -3.0000000000000003e-166 or 1.0799999999999999e24 < NdChar Initial program 99.9%
Simplified99.9%
Taylor expanded in Ev around inf 76.2%
Taylor expanded in Ev around 0 59.5%
if -1.05000000000000008e-77 < NdChar < -1.45e-141Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 76.3%
associate-+r+76.3%
Simplified76.3%
Taylor expanded in Vef around inf 68.1%
associate-/l*75.9%
Simplified75.9%
if -3.0000000000000003e-166 < NdChar < 1.0799999999999999e24Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 72.7%
associate-+r+72.7%
Simplified72.7%
Taylor expanded in KbT around inf 73.0%
Final simplification64.9%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NaChar (+ 1.0 (exp (/ (+ Vef (+ (- Ev mu) EAccept)) KbT)))))
(t_1
(+ (/ NdChar (+ 1.0 (exp (/ (- (+ mu Vef) Ec) KbT)))) (/ NaChar 2.0)))
(t_2 (+ t_0 (/ KbT (/ Vef NdChar)))))
(if (<= NdChar -1.1e-77)
t_1
(if (<= NdChar -5.8e-288)
t_2
(if (<= NdChar 9.6e-206)
(+ t_0 (/ KbT (/ mu NdChar)))
(if (<= NdChar 7.2e-75) t_2 t_1))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NaChar / (1.0 + exp(((Vef + ((Ev - mu) + EAccept)) / KbT)));
double t_1 = (NdChar / (1.0 + exp((((mu + Vef) - Ec) / KbT)))) + (NaChar / 2.0);
double t_2 = t_0 + (KbT / (Vef / NdChar));
double tmp;
if (NdChar <= -1.1e-77) {
tmp = t_1;
} else if (NdChar <= -5.8e-288) {
tmp = t_2;
} else if (NdChar <= 9.6e-206) {
tmp = t_0 + (KbT / (mu / NdChar));
} else if (NdChar <= 7.2e-75) {
tmp = t_2;
} else {
tmp = t_1;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: t_2
real(8) :: tmp
t_0 = nachar / (1.0d0 + exp(((vef + ((ev - mu) + eaccept)) / kbt)))
t_1 = (ndchar / (1.0d0 + exp((((mu + vef) - ec) / kbt)))) + (nachar / 2.0d0)
t_2 = t_0 + (kbt / (vef / ndchar))
if (ndchar <= (-1.1d-77)) then
tmp = t_1
else if (ndchar <= (-5.8d-288)) then
tmp = t_2
else if (ndchar <= 9.6d-206) then
tmp = t_0 + (kbt / (mu / ndchar))
else if (ndchar <= 7.2d-75) then
tmp = t_2
else
tmp = t_1
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NaChar / (1.0 + Math.exp(((Vef + ((Ev - mu) + EAccept)) / KbT)));
double t_1 = (NdChar / (1.0 + Math.exp((((mu + Vef) - Ec) / KbT)))) + (NaChar / 2.0);
double t_2 = t_0 + (KbT / (Vef / NdChar));
double tmp;
if (NdChar <= -1.1e-77) {
tmp = t_1;
} else if (NdChar <= -5.8e-288) {
tmp = t_2;
} else if (NdChar <= 9.6e-206) {
tmp = t_0 + (KbT / (mu / NdChar));
} else if (NdChar <= 7.2e-75) {
tmp = t_2;
} else {
tmp = t_1;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NaChar / (1.0 + math.exp(((Vef + ((Ev - mu) + EAccept)) / KbT))) t_1 = (NdChar / (1.0 + math.exp((((mu + Vef) - Ec) / KbT)))) + (NaChar / 2.0) t_2 = t_0 + (KbT / (Vef / NdChar)) tmp = 0 if NdChar <= -1.1e-77: tmp = t_1 elif NdChar <= -5.8e-288: tmp = t_2 elif NdChar <= 9.6e-206: tmp = t_0 + (KbT / (mu / NdChar)) elif NdChar <= 7.2e-75: tmp = t_2 else: tmp = t_1 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Float64(Ev - mu) + EAccept)) / KbT)))) t_1 = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(Float64(mu + Vef) - Ec) / KbT)))) + Float64(NaChar / 2.0)) t_2 = Float64(t_0 + Float64(KbT / Float64(Vef / NdChar))) tmp = 0.0 if (NdChar <= -1.1e-77) tmp = t_1; elseif (NdChar <= -5.8e-288) tmp = t_2; elseif (NdChar <= 9.6e-206) tmp = Float64(t_0 + Float64(KbT / Float64(mu / NdChar))); elseif (NdChar <= 7.2e-75) tmp = t_2; else tmp = t_1; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NaChar / (1.0 + exp(((Vef + ((Ev - mu) + EAccept)) / KbT))); t_1 = (NdChar / (1.0 + exp((((mu + Vef) - Ec) / KbT)))) + (NaChar / 2.0); t_2 = t_0 + (KbT / (Vef / NdChar)); tmp = 0.0; if (NdChar <= -1.1e-77) tmp = t_1; elseif (NdChar <= -5.8e-288) tmp = t_2; elseif (NdChar <= 9.6e-206) tmp = t_0 + (KbT / (mu / NdChar)); elseif (NdChar <= 7.2e-75) tmp = t_2; else tmp = t_1; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(N[(Ev - mu), $MachinePrecision] + EAccept), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(N[(mu + Vef), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / 2.0), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(t$95$0 + N[(KbT / N[(Vef / NdChar), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NdChar, -1.1e-77], t$95$1, If[LessEqual[NdChar, -5.8e-288], t$95$2, If[LessEqual[NdChar, 9.6e-206], N[(t$95$0 + N[(KbT / N[(mu / NdChar), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NdChar, 7.2e-75], t$95$2, t$95$1]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{Vef + \left(\left(Ev - mu\right) + EAccept\right)}{KbT}}}\\
t_1 := \frac{NdChar}{1 + e^{\frac{\left(mu + Vef\right) - Ec}{KbT}}} + \frac{NaChar}{2}\\
t_2 := t_0 + \frac{KbT}{\frac{Vef}{NdChar}}\\
\mathbf{if}\;NdChar \leq -1.1 \cdot 10^{-77}:\\
\;\;\;\;t_1\\
\mathbf{elif}\;NdChar \leq -5.8 \cdot 10^{-288}:\\
\;\;\;\;t_2\\
\mathbf{elif}\;NdChar \leq 9.6 \cdot 10^{-206}:\\
\;\;\;\;t_0 + \frac{KbT}{\frac{mu}{NdChar}}\\
\mathbf{elif}\;NdChar \leq 7.2 \cdot 10^{-75}:\\
\;\;\;\;t_2\\
\mathbf{else}:\\
\;\;\;\;t_1\\
\end{array}
\end{array}
if NdChar < -1.10000000000000003e-77 or 7.2000000000000001e-75 < NdChar Initial program 99.9%
Simplified99.9%
Taylor expanded in KbT around inf 56.1%
Taylor expanded in EDonor around 0 51.4%
if -1.10000000000000003e-77 < NdChar < -5.8000000000000003e-288 or 9.5999999999999998e-206 < NdChar < 7.2000000000000001e-75Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 70.5%
associate-+r+70.5%
Simplified70.5%
Taylor expanded in Vef around inf 60.6%
associate-/l*62.1%
Simplified62.1%
if -5.8000000000000003e-288 < NdChar < 9.5999999999999998e-206Initial program 99.9%
Simplified99.9%
Taylor expanded in KbT around inf 79.9%
associate-+r+79.9%
Simplified79.9%
Taylor expanded in mu around inf 79.7%
associate-/l*79.4%
Simplified79.4%
Final simplification57.2%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (or (<= NdChar -5.8e-81) (not (<= NdChar 5.6e-155)))
(+ (/ NdChar (+ 1.0 (exp (/ (- (+ mu Vef) Ec) KbT)))) (/ NaChar 2.0))
(+
(/ NaChar (+ 1.0 (exp (/ (+ Vef (+ (- Ev mu) EAccept)) KbT))))
(* KbT (/ NdChar EDonor)))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NdChar <= -5.8e-81) || !(NdChar <= 5.6e-155)) {
tmp = (NdChar / (1.0 + exp((((mu + Vef) - Ec) / KbT)))) + (NaChar / 2.0);
} else {
tmp = (NaChar / (1.0 + exp(((Vef + ((Ev - mu) + EAccept)) / KbT)))) + (KbT * (NdChar / EDonor));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if ((ndchar <= (-5.8d-81)) .or. (.not. (ndchar <= 5.6d-155))) then
tmp = (ndchar / (1.0d0 + exp((((mu + vef) - ec) / kbt)))) + (nachar / 2.0d0)
else
tmp = (nachar / (1.0d0 + exp(((vef + ((ev - mu) + eaccept)) / kbt)))) + (kbt * (ndchar / edonor))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NdChar <= -5.8e-81) || !(NdChar <= 5.6e-155)) {
tmp = (NdChar / (1.0 + Math.exp((((mu + Vef) - Ec) / KbT)))) + (NaChar / 2.0);
} else {
tmp = (NaChar / (1.0 + Math.exp(((Vef + ((Ev - mu) + EAccept)) / KbT)))) + (KbT * (NdChar / EDonor));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if (NdChar <= -5.8e-81) or not (NdChar <= 5.6e-155): tmp = (NdChar / (1.0 + math.exp((((mu + Vef) - Ec) / KbT)))) + (NaChar / 2.0) else: tmp = (NaChar / (1.0 + math.exp(((Vef + ((Ev - mu) + EAccept)) / KbT)))) + (KbT * (NdChar / EDonor)) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if ((NdChar <= -5.8e-81) || !(NdChar <= 5.6e-155)) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(Float64(mu + Vef) - Ec) / KbT)))) + Float64(NaChar / 2.0)); else tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Float64(Ev - mu) + EAccept)) / KbT)))) + Float64(KbT * Float64(NdChar / EDonor))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if ((NdChar <= -5.8e-81) || ~((NdChar <= 5.6e-155))) tmp = (NdChar / (1.0 + exp((((mu + Vef) - Ec) / KbT)))) + (NaChar / 2.0); else tmp = (NaChar / (1.0 + exp(((Vef + ((Ev - mu) + EAccept)) / KbT)))) + (KbT * (NdChar / EDonor)); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[Or[LessEqual[NdChar, -5.8e-81], N[Not[LessEqual[NdChar, 5.6e-155]], $MachinePrecision]], N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(N[(mu + Vef), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / 2.0), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(N[(Ev - mu), $MachinePrecision] + EAccept), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(KbT * N[(NdChar / EDonor), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NdChar \leq -5.8 \cdot 10^{-81} \lor \neg \left(NdChar \leq 5.6 \cdot 10^{-155}\right):\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{\left(mu + Vef\right) - Ec}{KbT}}} + \frac{NaChar}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Vef + \left(\left(Ev - mu\right) + EAccept\right)}{KbT}}} + KbT \cdot \frac{NdChar}{EDonor}\\
\end{array}
\end{array}
if NdChar < -5.79999999999999978e-81 or 5.5999999999999999e-155 < NdChar Initial program 99.9%
Simplified99.9%
Taylor expanded in KbT around inf 54.7%
Taylor expanded in EDonor around 0 50.5%
if -5.79999999999999978e-81 < NdChar < 5.5999999999999999e-155Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 74.0%
associate-+r+74.0%
Simplified74.0%
Taylor expanded in EDonor around inf 57.2%
expm1-log1p-u55.7%
expm1-udef62.2%
associate-/l*62.2%
Applied egg-rr62.2%
expm1-def54.4%
expm1-log1p56.0%
associate-/r/50.1%
*-commutative50.1%
associate-*r/57.2%
*-commutative57.2%
associate-*r/54.7%
Simplified54.7%
Final simplification51.7%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (or (<= NdChar -1.6e-77) (not (<= NdChar 6.6e-75)))
(+ (/ NdChar (+ 1.0 (exp (/ (- (+ mu Vef) Ec) KbT)))) (/ NaChar 2.0))
(+
(/ NaChar (+ 1.0 (exp (/ (+ Vef (+ (- Ev mu) EAccept)) KbT))))
(/ KbT (/ Vef NdChar)))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NdChar <= -1.6e-77) || !(NdChar <= 6.6e-75)) {
tmp = (NdChar / (1.0 + exp((((mu + Vef) - Ec) / KbT)))) + (NaChar / 2.0);
} else {
tmp = (NaChar / (1.0 + exp(((Vef + ((Ev - mu) + EAccept)) / KbT)))) + (KbT / (Vef / NdChar));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if ((ndchar <= (-1.6d-77)) .or. (.not. (ndchar <= 6.6d-75))) then
tmp = (ndchar / (1.0d0 + exp((((mu + vef) - ec) / kbt)))) + (nachar / 2.0d0)
else
tmp = (nachar / (1.0d0 + exp(((vef + ((ev - mu) + eaccept)) / kbt)))) + (kbt / (vef / ndchar))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NdChar <= -1.6e-77) || !(NdChar <= 6.6e-75)) {
tmp = (NdChar / (1.0 + Math.exp((((mu + Vef) - Ec) / KbT)))) + (NaChar / 2.0);
} else {
tmp = (NaChar / (1.0 + Math.exp(((Vef + ((Ev - mu) + EAccept)) / KbT)))) + (KbT / (Vef / NdChar));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if (NdChar <= -1.6e-77) or not (NdChar <= 6.6e-75): tmp = (NdChar / (1.0 + math.exp((((mu + Vef) - Ec) / KbT)))) + (NaChar / 2.0) else: tmp = (NaChar / (1.0 + math.exp(((Vef + ((Ev - mu) + EAccept)) / KbT)))) + (KbT / (Vef / NdChar)) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if ((NdChar <= -1.6e-77) || !(NdChar <= 6.6e-75)) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(Float64(mu + Vef) - Ec) / KbT)))) + Float64(NaChar / 2.0)); else tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Float64(Ev - mu) + EAccept)) / KbT)))) + Float64(KbT / Float64(Vef / NdChar))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if ((NdChar <= -1.6e-77) || ~((NdChar <= 6.6e-75))) tmp = (NdChar / (1.0 + exp((((mu + Vef) - Ec) / KbT)))) + (NaChar / 2.0); else tmp = (NaChar / (1.0 + exp(((Vef + ((Ev - mu) + EAccept)) / KbT)))) + (KbT / (Vef / NdChar)); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[Or[LessEqual[NdChar, -1.6e-77], N[Not[LessEqual[NdChar, 6.6e-75]], $MachinePrecision]], N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(N[(mu + Vef), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / 2.0), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(N[(Ev - mu), $MachinePrecision] + EAccept), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(KbT / N[(Vef / NdChar), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NdChar \leq -1.6 \cdot 10^{-77} \lor \neg \left(NdChar \leq 6.6 \cdot 10^{-75}\right):\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{\left(mu + Vef\right) - Ec}{KbT}}} + \frac{NaChar}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Vef + \left(\left(Ev - mu\right) + EAccept\right)}{KbT}}} + \frac{KbT}{\frac{Vef}{NdChar}}\\
\end{array}
\end{array}
if NdChar < -1.6e-77 or 6.5999999999999999e-75 < NdChar Initial program 99.9%
Simplified99.9%
Taylor expanded in KbT around inf 56.1%
Taylor expanded in EDonor around 0 51.4%
if -1.6e-77 < NdChar < 6.5999999999999999e-75Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 73.3%
associate-+r+73.3%
Simplified73.3%
Taylor expanded in Vef around inf 61.1%
associate-/l*61.9%
Simplified61.9%
Final simplification55.2%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (or (<= NdChar -4.3e-29) (not (<= NdChar 2.55e+29)))
(+ (/ NdChar (+ 1.0 (exp (/ (- (+ mu Vef) Ec) KbT)))) (/ NaChar 2.0))
(+
(/ NaChar (+ 1.0 (exp (/ (+ Vef (+ (- Ev mu) EAccept)) KbT))))
(/ NdChar 2.0))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NdChar <= -4.3e-29) || !(NdChar <= 2.55e+29)) {
tmp = (NdChar / (1.0 + exp((((mu + Vef) - Ec) / KbT)))) + (NaChar / 2.0);
} else {
tmp = (NaChar / (1.0 + exp(((Vef + ((Ev - mu) + EAccept)) / KbT)))) + (NdChar / 2.0);
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if ((ndchar <= (-4.3d-29)) .or. (.not. (ndchar <= 2.55d+29))) then
tmp = (ndchar / (1.0d0 + exp((((mu + vef) - ec) / kbt)))) + (nachar / 2.0d0)
else
tmp = (nachar / (1.0d0 + exp(((vef + ((ev - mu) + eaccept)) / kbt)))) + (ndchar / 2.0d0)
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NdChar <= -4.3e-29) || !(NdChar <= 2.55e+29)) {
tmp = (NdChar / (1.0 + Math.exp((((mu + Vef) - Ec) / KbT)))) + (NaChar / 2.0);
} else {
tmp = (NaChar / (1.0 + Math.exp(((Vef + ((Ev - mu) + EAccept)) / KbT)))) + (NdChar / 2.0);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if (NdChar <= -4.3e-29) or not (NdChar <= 2.55e+29): tmp = (NdChar / (1.0 + math.exp((((mu + Vef) - Ec) / KbT)))) + (NaChar / 2.0) else: tmp = (NaChar / (1.0 + math.exp(((Vef + ((Ev - mu) + EAccept)) / KbT)))) + (NdChar / 2.0) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if ((NdChar <= -4.3e-29) || !(NdChar <= 2.55e+29)) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(Float64(mu + Vef) - Ec) / KbT)))) + Float64(NaChar / 2.0)); else tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Float64(Ev - mu) + EAccept)) / KbT)))) + Float64(NdChar / 2.0)); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if ((NdChar <= -4.3e-29) || ~((NdChar <= 2.55e+29))) tmp = (NdChar / (1.0 + exp((((mu + Vef) - Ec) / KbT)))) + (NaChar / 2.0); else tmp = (NaChar / (1.0 + exp(((Vef + ((Ev - mu) + EAccept)) / KbT)))) + (NdChar / 2.0); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[Or[LessEqual[NdChar, -4.3e-29], N[Not[LessEqual[NdChar, 2.55e+29]], $MachinePrecision]], N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(N[(mu + Vef), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / 2.0), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(N[(Ev - mu), $MachinePrecision] + EAccept), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NdChar \leq -4.3 \cdot 10^{-29} \lor \neg \left(NdChar \leq 2.55 \cdot 10^{+29}\right):\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{\left(mu + Vef\right) - Ec}{KbT}}} + \frac{NaChar}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Vef + \left(\left(Ev - mu\right) + EAccept\right)}{KbT}}} + \frac{NdChar}{2}\\
\end{array}
\end{array}
if NdChar < -4.2999999999999998e-29 or 2.55e29 < NdChar Initial program 99.9%
Simplified99.9%
Taylor expanded in KbT around inf 55.2%
Taylor expanded in EDonor around 0 50.5%
if -4.2999999999999998e-29 < NdChar < 2.55e29Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 72.3%
associate-+r+72.3%
Simplified72.3%
Taylor expanded in KbT around inf 70.0%
Final simplification59.2%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (or (<= NdChar -5.4e-52) (not (<= NdChar 2.4e+24)))
(+
(/ NdChar (+ 1.0 (exp (/ (+ mu (+ EDonor (- Vef Ec))) KbT))))
(/ NaChar 2.0))
(+
(/ NaChar (+ 1.0 (exp (/ (+ Vef (+ (- Ev mu) EAccept)) KbT))))
(/ NdChar 2.0))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NdChar <= -5.4e-52) || !(NdChar <= 2.4e+24)) {
tmp = (NdChar / (1.0 + exp(((mu + (EDonor + (Vef - Ec))) / KbT)))) + (NaChar / 2.0);
} else {
tmp = (NaChar / (1.0 + exp(((Vef + ((Ev - mu) + EAccept)) / KbT)))) + (NdChar / 2.0);
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if ((ndchar <= (-5.4d-52)) .or. (.not. (ndchar <= 2.4d+24))) then
tmp = (ndchar / (1.0d0 + exp(((mu + (edonor + (vef - ec))) / kbt)))) + (nachar / 2.0d0)
else
tmp = (nachar / (1.0d0 + exp(((vef + ((ev - mu) + eaccept)) / kbt)))) + (ndchar / 2.0d0)
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NdChar <= -5.4e-52) || !(NdChar <= 2.4e+24)) {
tmp = (NdChar / (1.0 + Math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)))) + (NaChar / 2.0);
} else {
tmp = (NaChar / (1.0 + Math.exp(((Vef + ((Ev - mu) + EAccept)) / KbT)))) + (NdChar / 2.0);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if (NdChar <= -5.4e-52) or not (NdChar <= 2.4e+24): tmp = (NdChar / (1.0 + math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)))) + (NaChar / 2.0) else: tmp = (NaChar / (1.0 + math.exp(((Vef + ((Ev - mu) + EAccept)) / KbT)))) + (NdChar / 2.0) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if ((NdChar <= -5.4e-52) || !(NdChar <= 2.4e+24)) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(mu + Float64(EDonor + Float64(Vef - Ec))) / KbT)))) + Float64(NaChar / 2.0)); else tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Float64(Ev - mu) + EAccept)) / KbT)))) + Float64(NdChar / 2.0)); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if ((NdChar <= -5.4e-52) || ~((NdChar <= 2.4e+24))) tmp = (NdChar / (1.0 + exp(((mu + (EDonor + (Vef - Ec))) / KbT)))) + (NaChar / 2.0); else tmp = (NaChar / (1.0 + exp(((Vef + ((Ev - mu) + EAccept)) / KbT)))) + (NdChar / 2.0); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[Or[LessEqual[NdChar, -5.4e-52], N[Not[LessEqual[NdChar, 2.4e+24]], $MachinePrecision]], N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(mu + N[(EDonor + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / 2.0), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(N[(Ev - mu), $MachinePrecision] + EAccept), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NdChar \leq -5.4 \cdot 10^{-52} \lor \neg \left(NdChar \leq 2.4 \cdot 10^{+24}\right):\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{mu + \left(EDonor + \left(Vef - Ec\right)\right)}{KbT}}} + \frac{NaChar}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Vef + \left(\left(Ev - mu\right) + EAccept\right)}{KbT}}} + \frac{NdChar}{2}\\
\end{array}
\end{array}
if NdChar < -5.40000000000000019e-52 or 2.4000000000000001e24 < NdChar Initial program 99.9%
Simplified99.9%
Taylor expanded in KbT around inf 55.8%
if -5.40000000000000019e-52 < NdChar < 2.4000000000000001e24Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 72.6%
associate-+r+72.6%
Simplified72.6%
Taylor expanded in KbT around inf 70.2%
Final simplification62.1%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (if (or (<= NdChar -6e-178) (not (<= NdChar 5.5e-135))) (+ (/ NdChar (+ 1.0 (exp (/ (- (+ mu Vef) Ec) KbT)))) (/ NaChar 2.0)) (+ (/ NaChar (+ 1.0 (exp (/ Ev KbT)))) (/ NdChar 2.0))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NdChar <= -6e-178) || !(NdChar <= 5.5e-135)) {
tmp = (NdChar / (1.0 + exp((((mu + Vef) - Ec) / KbT)))) + (NaChar / 2.0);
} else {
tmp = (NaChar / (1.0 + exp((Ev / KbT)))) + (NdChar / 2.0);
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if ((ndchar <= (-6d-178)) .or. (.not. (ndchar <= 5.5d-135))) then
tmp = (ndchar / (1.0d0 + exp((((mu + vef) - ec) / kbt)))) + (nachar / 2.0d0)
else
tmp = (nachar / (1.0d0 + exp((ev / kbt)))) + (ndchar / 2.0d0)
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NdChar <= -6e-178) || !(NdChar <= 5.5e-135)) {
tmp = (NdChar / (1.0 + Math.exp((((mu + Vef) - Ec) / KbT)))) + (NaChar / 2.0);
} else {
tmp = (NaChar / (1.0 + Math.exp((Ev / KbT)))) + (NdChar / 2.0);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if (NdChar <= -6e-178) or not (NdChar <= 5.5e-135): tmp = (NdChar / (1.0 + math.exp((((mu + Vef) - Ec) / KbT)))) + (NaChar / 2.0) else: tmp = (NaChar / (1.0 + math.exp((Ev / KbT)))) + (NdChar / 2.0) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if ((NdChar <= -6e-178) || !(NdChar <= 5.5e-135)) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(Float64(mu + Vef) - Ec) / KbT)))) + Float64(NaChar / 2.0)); else tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT)))) + Float64(NdChar / 2.0)); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if ((NdChar <= -6e-178) || ~((NdChar <= 5.5e-135))) tmp = (NdChar / (1.0 + exp((((mu + Vef) - Ec) / KbT)))) + (NaChar / 2.0); else tmp = (NaChar / (1.0 + exp((Ev / KbT)))) + (NdChar / 2.0); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[Or[LessEqual[NdChar, -6e-178], N[Not[LessEqual[NdChar, 5.5e-135]], $MachinePrecision]], N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(N[(mu + Vef), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / 2.0), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NdChar \leq -6 \cdot 10^{-178} \lor \neg \left(NdChar \leq 5.5 \cdot 10^{-135}\right):\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{\left(mu + Vef\right) - Ec}{KbT}}} + \frac{NaChar}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Ev}{KbT}}} + \frac{NdChar}{2}\\
\end{array}
\end{array}
if NdChar < -5.9999999999999997e-178 or 5.4999999999999999e-135 < NdChar Initial program 99.9%
Simplified99.9%
Taylor expanded in KbT around inf 52.3%
Taylor expanded in EDonor around 0 48.4%
if -5.9999999999999997e-178 < NdChar < 5.4999999999999999e-135Initial program 99.9%
Simplified99.9%
Taylor expanded in Ev around inf 67.4%
Taylor expanded in KbT around inf 59.7%
Final simplification51.0%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (if (or (<= KbT 4.8e-304) (not (<= KbT 7.2e+24))) (+ (/ NaChar 2.0) (/ NdChar (+ 1.0 (exp (/ (- Ec) KbT))))) (+ (/ NaChar (+ 1.0 (exp (/ Ev KbT)))) (/ (* NdChar KbT) EDonor))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((KbT <= 4.8e-304) || !(KbT <= 7.2e+24)) {
tmp = (NaChar / 2.0) + (NdChar / (1.0 + exp((-Ec / KbT))));
} else {
tmp = (NaChar / (1.0 + exp((Ev / KbT)))) + ((NdChar * KbT) / EDonor);
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if ((kbt <= 4.8d-304) .or. (.not. (kbt <= 7.2d+24))) then
tmp = (nachar / 2.0d0) + (ndchar / (1.0d0 + exp((-ec / kbt))))
else
tmp = (nachar / (1.0d0 + exp((ev / kbt)))) + ((ndchar * kbt) / edonor)
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((KbT <= 4.8e-304) || !(KbT <= 7.2e+24)) {
tmp = (NaChar / 2.0) + (NdChar / (1.0 + Math.exp((-Ec / KbT))));
} else {
tmp = (NaChar / (1.0 + Math.exp((Ev / KbT)))) + ((NdChar * KbT) / EDonor);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if (KbT <= 4.8e-304) or not (KbT <= 7.2e+24): tmp = (NaChar / 2.0) + (NdChar / (1.0 + math.exp((-Ec / KbT)))) else: tmp = (NaChar / (1.0 + math.exp((Ev / KbT)))) + ((NdChar * KbT) / EDonor) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if ((KbT <= 4.8e-304) || !(KbT <= 7.2e+24)) tmp = Float64(Float64(NaChar / 2.0) + Float64(NdChar / Float64(1.0 + exp(Float64(Float64(-Ec) / KbT))))); else tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT)))) + Float64(Float64(NdChar * KbT) / EDonor)); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if ((KbT <= 4.8e-304) || ~((KbT <= 7.2e+24))) tmp = (NaChar / 2.0) + (NdChar / (1.0 + exp((-Ec / KbT)))); else tmp = (NaChar / (1.0 + exp((Ev / KbT)))) + ((NdChar * KbT) / EDonor); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[Or[LessEqual[KbT, 4.8e-304], N[Not[LessEqual[KbT, 7.2e+24]], $MachinePrecision]], N[(N[(NaChar / 2.0), $MachinePrecision] + N[(NdChar / N[(1.0 + N[Exp[N[((-Ec) / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(N[(NdChar * KbT), $MachinePrecision] / EDonor), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;KbT \leq 4.8 \cdot 10^{-304} \lor \neg \left(KbT \leq 7.2 \cdot 10^{+24}\right):\\
\;\;\;\;\frac{NaChar}{2} + \frac{NdChar}{1 + e^{\frac{-Ec}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Ev}{KbT}}} + \frac{NdChar \cdot KbT}{EDonor}\\
\end{array}
\end{array}
if KbT < 4.8000000000000002e-304 or 7.19999999999999966e24 < KbT Initial program 99.9%
Simplified99.9%
Taylor expanded in KbT around inf 54.8%
Taylor expanded in Ec around inf 44.7%
associate-*r/44.7%
mul-1-neg44.7%
Simplified44.7%
if 4.8000000000000002e-304 < KbT < 7.19999999999999966e24Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 48.8%
associate-+r+48.8%
Simplified48.8%
Taylor expanded in EDonor around inf 44.8%
Taylor expanded in Ev around inf 33.2%
Final simplification42.0%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (if (or (<= NdChar -9.4e-178) (not (<= NdChar 1.5e+96))) (+ (/ NdChar (+ 1.0 (exp (/ EDonor KbT)))) (/ NaChar 2.0)) (+ (/ NaChar (+ 1.0 (exp (/ Ev KbT)))) (/ NdChar 2.0))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NdChar <= -9.4e-178) || !(NdChar <= 1.5e+96)) {
tmp = (NdChar / (1.0 + exp((EDonor / KbT)))) + (NaChar / 2.0);
} else {
tmp = (NaChar / (1.0 + exp((Ev / KbT)))) + (NdChar / 2.0);
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if ((ndchar <= (-9.4d-178)) .or. (.not. (ndchar <= 1.5d+96))) then
tmp = (ndchar / (1.0d0 + exp((edonor / kbt)))) + (nachar / 2.0d0)
else
tmp = (nachar / (1.0d0 + exp((ev / kbt)))) + (ndchar / 2.0d0)
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NdChar <= -9.4e-178) || !(NdChar <= 1.5e+96)) {
tmp = (NdChar / (1.0 + Math.exp((EDonor / KbT)))) + (NaChar / 2.0);
} else {
tmp = (NaChar / (1.0 + Math.exp((Ev / KbT)))) + (NdChar / 2.0);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if (NdChar <= -9.4e-178) or not (NdChar <= 1.5e+96): tmp = (NdChar / (1.0 + math.exp((EDonor / KbT)))) + (NaChar / 2.0) else: tmp = (NaChar / (1.0 + math.exp((Ev / KbT)))) + (NdChar / 2.0) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if ((NdChar <= -9.4e-178) || !(NdChar <= 1.5e+96)) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(EDonor / KbT)))) + Float64(NaChar / 2.0)); else tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT)))) + Float64(NdChar / 2.0)); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if ((NdChar <= -9.4e-178) || ~((NdChar <= 1.5e+96))) tmp = (NdChar / (1.0 + exp((EDonor / KbT)))) + (NaChar / 2.0); else tmp = (NaChar / (1.0 + exp((Ev / KbT)))) + (NdChar / 2.0); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[Or[LessEqual[NdChar, -9.4e-178], N[Not[LessEqual[NdChar, 1.5e+96]], $MachinePrecision]], N[(N[(NdChar / N[(1.0 + N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / 2.0), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NdChar \leq -9.4 \cdot 10^{-178} \lor \neg \left(NdChar \leq 1.5 \cdot 10^{+96}\right):\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{EDonor}{KbT}}} + \frac{NaChar}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Ev}{KbT}}} + \frac{NdChar}{2}\\
\end{array}
\end{array}
if NdChar < -9.39999999999999999e-178 or 1.5e96 < NdChar Initial program 99.9%
Simplified99.9%
Taylor expanded in KbT around inf 54.4%
Taylor expanded in EDonor around inf 39.1%
if -9.39999999999999999e-178 < NdChar < 1.5e96Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 69.0%
Taylor expanded in KbT around inf 51.9%
Final simplification44.3%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (if (<= Ev -1.05e+44) (+ (/ NaChar (+ 1.0 (exp (/ Ev KbT)))) (/ NdChar 2.0)) (+ (/ NdChar (+ 1.0 (exp (/ mu KbT)))) (* NaChar 0.5))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (Ev <= -1.05e+44) {
tmp = (NaChar / (1.0 + exp((Ev / KbT)))) + (NdChar / 2.0);
} else {
tmp = (NdChar / (1.0 + exp((mu / KbT)))) + (NaChar * 0.5);
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if (ev <= (-1.05d+44)) then
tmp = (nachar / (1.0d0 + exp((ev / kbt)))) + (ndchar / 2.0d0)
else
tmp = (ndchar / (1.0d0 + exp((mu / kbt)))) + (nachar * 0.5d0)
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (Ev <= -1.05e+44) {
tmp = (NaChar / (1.0 + Math.exp((Ev / KbT)))) + (NdChar / 2.0);
} else {
tmp = (NdChar / (1.0 + Math.exp((mu / KbT)))) + (NaChar * 0.5);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if Ev <= -1.05e+44: tmp = (NaChar / (1.0 + math.exp((Ev / KbT)))) + (NdChar / 2.0) else: tmp = (NdChar / (1.0 + math.exp((mu / KbT)))) + (NaChar * 0.5) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (Ev <= -1.05e+44) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT)))) + Float64(NdChar / 2.0)); else tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(mu / KbT)))) + Float64(NaChar * 0.5)); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (Ev <= -1.05e+44) tmp = (NaChar / (1.0 + exp((Ev / KbT)))) + (NdChar / 2.0); else tmp = (NdChar / (1.0 + exp((mu / KbT)))) + (NaChar * 0.5); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[Ev, -1.05e+44], N[(N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar / N[(1.0 + N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar * 0.5), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;Ev \leq -1.05 \cdot 10^{+44}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Ev}{KbT}}} + \frac{NdChar}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{mu}{KbT}}} + NaChar \cdot 0.5\\
\end{array}
\end{array}
if Ev < -1.04999999999999993e44Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 84.8%
Taylor expanded in KbT around inf 48.4%
if -1.04999999999999993e44 < Ev Initial program 99.9%
Simplified99.9%
Taylor expanded in mu around inf 73.0%
Taylor expanded in KbT around inf 36.5%
Final simplification39.4%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (+ (/ NaChar (+ 1.0 (exp (/ Ev KbT)))) (/ NdChar 2.0)))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NaChar / (1.0 + exp((Ev / KbT)))) + (NdChar / 2.0);
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
code = (nachar / (1.0d0 + exp((ev / kbt)))) + (ndchar / 2.0d0)
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NaChar / (1.0 + Math.exp((Ev / KbT)))) + (NdChar / 2.0);
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return (NaChar / (1.0 + math.exp((Ev / KbT)))) + (NdChar / 2.0)
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT)))) + Float64(NdChar / 2.0)) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = (NaChar / (1.0 + exp((Ev / KbT)))) + (NdChar / 2.0); end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{NaChar}{1 + e^{\frac{Ev}{KbT}}} + \frac{NdChar}{2}
\end{array}
Initial program 99.9%
Simplified99.9%
Taylor expanded in Ev around inf 72.0%
Taylor expanded in KbT around inf 41.4%
Final simplification41.4%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (<= Vef -5e+266)
(+
(/
NdChar
(+
1.0
(- (+ (+ 1.0 (/ EDonor KbT)) (+ (/ Vef KbT) (/ mu KbT))) (/ Ec KbT))))
(/
NaChar
(+
1.0
(- (+ (+ 1.0 (/ EAccept KbT)) (+ (/ Vef KbT) (/ Ev KbT))) (/ mu KbT)))))
(* 0.5 (+ NdChar NaChar))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (Vef <= -5e+266) {
tmp = (NdChar / (1.0 + (((1.0 + (EDonor / KbT)) + ((Vef / KbT) + (mu / KbT))) - (Ec / KbT)))) + (NaChar / (1.0 + (((1.0 + (EAccept / KbT)) + ((Vef / KbT) + (Ev / KbT))) - (mu / KbT))));
} else {
tmp = 0.5 * (NdChar + NaChar);
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if (vef <= (-5d+266)) then
tmp = (ndchar / (1.0d0 + (((1.0d0 + (edonor / kbt)) + ((vef / kbt) + (mu / kbt))) - (ec / kbt)))) + (nachar / (1.0d0 + (((1.0d0 + (eaccept / kbt)) + ((vef / kbt) + (ev / kbt))) - (mu / kbt))))
else
tmp = 0.5d0 * (ndchar + nachar)
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (Vef <= -5e+266) {
tmp = (NdChar / (1.0 + (((1.0 + (EDonor / KbT)) + ((Vef / KbT) + (mu / KbT))) - (Ec / KbT)))) + (NaChar / (1.0 + (((1.0 + (EAccept / KbT)) + ((Vef / KbT) + (Ev / KbT))) - (mu / KbT))));
} else {
tmp = 0.5 * (NdChar + NaChar);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if Vef <= -5e+266: tmp = (NdChar / (1.0 + (((1.0 + (EDonor / KbT)) + ((Vef / KbT) + (mu / KbT))) - (Ec / KbT)))) + (NaChar / (1.0 + (((1.0 + (EAccept / KbT)) + ((Vef / KbT) + (Ev / KbT))) - (mu / KbT)))) else: tmp = 0.5 * (NdChar + NaChar) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (Vef <= -5e+266) tmp = Float64(Float64(NdChar / Float64(1.0 + Float64(Float64(Float64(1.0 + Float64(EDonor / KbT)) + Float64(Float64(Vef / KbT) + Float64(mu / KbT))) - Float64(Ec / KbT)))) + Float64(NaChar / Float64(1.0 + Float64(Float64(Float64(1.0 + Float64(EAccept / KbT)) + Float64(Float64(Vef / KbT) + Float64(Ev / KbT))) - Float64(mu / KbT))))); else tmp = Float64(0.5 * Float64(NdChar + NaChar)); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (Vef <= -5e+266) tmp = (NdChar / (1.0 + (((1.0 + (EDonor / KbT)) + ((Vef / KbT) + (mu / KbT))) - (Ec / KbT)))) + (NaChar / (1.0 + (((1.0 + (EAccept / KbT)) + ((Vef / KbT) + (Ev / KbT))) - (mu / KbT)))); else tmp = 0.5 * (NdChar + NaChar); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[Vef, -5e+266], N[(N[(NdChar / N[(1.0 + N[(N[(N[(1.0 + N[(EDonor / KbT), $MachinePrecision]), $MachinePrecision] + N[(N[(Vef / KbT), $MachinePrecision] + N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[(N[(N[(1.0 + N[(EAccept / KbT), $MachinePrecision]), $MachinePrecision] + N[(N[(Vef / KbT), $MachinePrecision] + N[(Ev / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(0.5 * N[(NdChar + NaChar), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;Vef \leq -5 \cdot 10^{+266}:\\
\;\;\;\;\frac{NdChar}{1 + \left(\left(\left(1 + \frac{EDonor}{KbT}\right) + \left(\frac{Vef}{KbT} + \frac{mu}{KbT}\right)\right) - \frac{Ec}{KbT}\right)} + \frac{NaChar}{1 + \left(\left(\left(1 + \frac{EAccept}{KbT}\right) + \left(\frac{Vef}{KbT} + \frac{Ev}{KbT}\right)\right) - \frac{mu}{KbT}\right)}\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \left(NdChar + NaChar\right)\\
\end{array}
\end{array}
if Vef < -4.9999999999999999e266Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 76.5%
associate-+r+76.5%
Simplified76.5%
Taylor expanded in KbT around inf 64.2%
associate-+r+64.2%
Simplified64.2%
if -4.9999999999999999e266 < Vef Initial program 99.9%
Simplified99.9%
Taylor expanded in KbT around inf 49.3%
Taylor expanded in Ec around inf 38.8%
associate-*r/38.8%
mul-1-neg38.8%
Simplified38.8%
Taylor expanded in Ec around 0 29.6%
mul-1-neg29.6%
unsub-neg29.6%
Simplified29.6%
Taylor expanded in Ec around 0 30.4%
distribute-lft-out30.4%
Simplified30.4%
Final simplification31.5%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (* 0.5 (+ NdChar NaChar)))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return 0.5 * (NdChar + NaChar);
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
code = 0.5d0 * (ndchar + nachar)
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return 0.5 * (NdChar + NaChar);
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return 0.5 * (NdChar + NaChar)
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(0.5 * Float64(NdChar + NaChar)) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.5 * (NdChar + NaChar); end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(0.5 * N[(NdChar + NaChar), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
0.5 \cdot \left(NdChar + NaChar\right)
\end{array}
Initial program 99.9%
Simplified99.9%
Taylor expanded in KbT around inf 48.3%
Taylor expanded in Ec around inf 38.2%
associate-*r/38.2%
mul-1-neg38.2%
Simplified38.2%
Taylor expanded in Ec around 0 28.8%
mul-1-neg28.8%
unsub-neg28.8%
Simplified28.8%
Taylor expanded in Ec around 0 29.7%
distribute-lft-out29.7%
Simplified29.7%
Final simplification29.7%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (* NaChar 0.5))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return NaChar * 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 * 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 * 0.5;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return NaChar * 0.5
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(NaChar * 0.5) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = NaChar * 0.5; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(NaChar * 0.5), $MachinePrecision]
\begin{array}{l}
\\
NaChar \cdot 0.5
\end{array}
Initial program 99.9%
Simplified99.9%
Taylor expanded in KbT around inf 48.3%
Taylor expanded in Ec around inf 38.2%
associate-*r/38.2%
mul-1-neg38.2%
Simplified38.2%
Taylor expanded in Ec around 0 28.8%
mul-1-neg28.8%
unsub-neg28.8%
Simplified28.8%
Taylor expanded in NdChar around 0 19.8%
Final simplification19.8%
herbie shell --seed 2023333
(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))))))