
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (+ (/ NdChar (+ 1.0 (exp (/ (- (- (- (- Ec Vef) EDonor) mu)) KbT)))) (/ NaChar (+ 1.0 (exp (/ (+ (+ (+ Ev Vef) EAccept) (- mu)) KbT))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NdChar / (1.0 + exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + exp(((((Ev + Vef) + EAccept) + -mu) / KbT))));
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
code = (ndchar / (1.0d0 + exp((-(((ec - vef) - edonor) - mu) / kbt)))) + (nachar / (1.0d0 + exp(((((ev + vef) + eaccept) + -mu) / kbt))))
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NdChar / (1.0 + Math.exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + Math.exp(((((Ev + Vef) + EAccept) + -mu) / KbT))));
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return (NdChar / (1.0 + math.exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + math.exp(((((Ev + Vef) + EAccept) + -mu) / KbT))))
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(-Float64(Float64(Float64(Ec - Vef) - EDonor) - mu)) / KbT)))) + Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(Float64(Ev + Vef) + EAccept) + Float64(-mu)) / KbT))))) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = (NdChar / (1.0 + exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + exp(((((Ev + Vef) + EAccept) + -mu) / KbT)))); end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(N[(NdChar / N[(1.0 + N[Exp[N[((-N[(N[(N[(Ec - Vef), $MachinePrecision] - EDonor), $MachinePrecision] - mu), $MachinePrecision]) / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Exp[N[(N[(N[(N[(Ev + Vef), $MachinePrecision] + EAccept), $MachinePrecision] + (-mu)), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{NdChar}{1 + e^{\frac{-\left(\left(\left(Ec - Vef\right) - EDonor\right) - mu\right)}{KbT}}} + \frac{NaChar}{1 + e^{\frac{\left(\left(Ev + Vef\right) + EAccept\right) + \left(-mu\right)}{KbT}}}
\end{array}
Sampling outcomes in binary64 precision:
Herbie found 29 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (+ (/ NdChar (+ 1.0 (exp (/ (- (- (- (- Ec Vef) EDonor) mu)) KbT)))) (/ NaChar (+ 1.0 (exp (/ (+ (+ (+ Ev Vef) EAccept) (- mu)) KbT))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NdChar / (1.0 + exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + exp(((((Ev + Vef) + EAccept) + -mu) / KbT))));
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
code = (ndchar / (1.0d0 + exp((-(((ec - vef) - edonor) - mu) / kbt)))) + (nachar / (1.0d0 + exp(((((ev + vef) + eaccept) + -mu) / kbt))))
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NdChar / (1.0 + Math.exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + Math.exp(((((Ev + Vef) + EAccept) + -mu) / KbT))));
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return (NdChar / (1.0 + math.exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + math.exp(((((Ev + Vef) + EAccept) + -mu) / KbT))))
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(-Float64(Float64(Float64(Ec - Vef) - EDonor) - mu)) / KbT)))) + Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(Float64(Ev + Vef) + EAccept) + Float64(-mu)) / KbT))))) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = (NdChar / (1.0 + exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + exp(((((Ev + Vef) + EAccept) + -mu) / KbT)))); end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(N[(NdChar / N[(1.0 + N[Exp[N[((-N[(N[(N[(Ec - Vef), $MachinePrecision] - EDonor), $MachinePrecision] - mu), $MachinePrecision]) / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Exp[N[(N[(N[(N[(Ev + Vef), $MachinePrecision] + EAccept), $MachinePrecision] + (-mu)), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{NdChar}{1 + e^{\frac{-\left(\left(\left(Ec - Vef\right) - EDonor\right) - mu\right)}{KbT}}} + \frac{NaChar}{1 + e^{\frac{\left(\left(Ev + Vef\right) + EAccept\right) + \left(-mu\right)}{KbT}}}
\end{array}
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (+ (/ NdChar (+ 1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT)))) (/ NaChar (+ 1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT))));
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
code = (ndchar / (1.0d0 + exp(((edonor + (mu + (vef - ec))) / kbt)))) + (nachar / (1.0d0 + exp(((vef - ((mu - eaccept) - ev)) / kbt))))
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NdChar / (1.0 + Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT))));
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return (NdChar / (1.0 + math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT))))
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) + Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT))))) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))); end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{NdChar}{1 + e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}} + \frac{NaChar}{1 + e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}}
\end{array}
Initial program 100.0%
Simplified100.0%
Final simplification100.0%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NaChar (+ 1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT)))))
(t_1
(+
(/ NdChar (+ 1.0 (exp (/ Vef KbT))))
(/ NaChar (+ 1.0 (exp (/ (- (+ Vef Ev) mu) KbT))))))
(t_2
(+
(/ NdChar (+ 1.0 (exp (/ mu KbT))))
(/ NaChar (+ 1.0 (exp (/ mu (- KbT)))))))
(t_3 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT))))
(if (<= mu -1.1e+240)
t_2
(if (<= mu -1.6e+195)
t_1
(if (<= mu -1.05e+133)
t_2
(if (<= mu -2.2e-189)
(-
t_0
(/
NdChar
(+
-1.0
(*
EDonor
(+
(/ (+ (/ Ec KbT) (- -1.0 (+ (/ Vef KbT) (/ mu KbT)))) EDonor)
(/ -1.0 KbT))))))
(if (<= mu -4.2e-265)
(+
(/ NdChar (+ 1.0 t_3))
(/
NaChar
(+
1.0
(-
(+ 1.0 (+ (/ EAccept KbT) (+ (/ Vef KbT) (/ Ev KbT))))
(/ mu KbT)))))
(if (<= mu 4.8e-211)
(+
t_0
(/
NdChar
(+
1.0
(-
(+
1.0
(+
(/ EDonor KbT)
(* mu (+ (/ 1.0 KbT) (/ Vef (* mu KbT))))))
(/ Ec KbT)))))
(if (<= mu 1.7e-148)
(- (/ NaChar (+ (/ EAccept KbT) 2.0)) (/ NdChar (- -1.0 t_3)))
(if (<= mu 8.2e+141) 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 - ((mu - EAccept) - Ev)) / KbT)));
double t_1 = (NdChar / (1.0 + exp((Vef / KbT)))) + (NaChar / (1.0 + exp((((Vef + Ev) - mu) / KbT))));
double t_2 = (NdChar / (1.0 + exp((mu / KbT)))) + (NaChar / (1.0 + exp((mu / -KbT))));
double t_3 = exp(((EDonor + (mu + (Vef - Ec))) / KbT));
double tmp;
if (mu <= -1.1e+240) {
tmp = t_2;
} else if (mu <= -1.6e+195) {
tmp = t_1;
} else if (mu <= -1.05e+133) {
tmp = t_2;
} else if (mu <= -2.2e-189) {
tmp = t_0 - (NdChar / (-1.0 + (EDonor * ((((Ec / KbT) + (-1.0 - ((Vef / KbT) + (mu / KbT)))) / EDonor) + (-1.0 / KbT)))));
} else if (mu <= -4.2e-265) {
tmp = (NdChar / (1.0 + t_3)) + (NaChar / (1.0 + ((1.0 + ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) - (mu / KbT))));
} else if (mu <= 4.8e-211) {
tmp = t_0 + (NdChar / (1.0 + ((1.0 + ((EDonor / KbT) + (mu * ((1.0 / KbT) + (Vef / (mu * KbT)))))) - (Ec / KbT))));
} else if (mu <= 1.7e-148) {
tmp = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - t_3));
} else if (mu <= 8.2e+141) {
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) :: t_3
real(8) :: tmp
t_0 = nachar / (1.0d0 + exp(((vef - ((mu - eaccept) - ev)) / kbt)))
t_1 = (ndchar / (1.0d0 + exp((vef / kbt)))) + (nachar / (1.0d0 + exp((((vef + ev) - mu) / kbt))))
t_2 = (ndchar / (1.0d0 + exp((mu / kbt)))) + (nachar / (1.0d0 + exp((mu / -kbt))))
t_3 = exp(((edonor + (mu + (vef - ec))) / kbt))
if (mu <= (-1.1d+240)) then
tmp = t_2
else if (mu <= (-1.6d+195)) then
tmp = t_1
else if (mu <= (-1.05d+133)) then
tmp = t_2
else if (mu <= (-2.2d-189)) then
tmp = t_0 - (ndchar / ((-1.0d0) + (edonor * ((((ec / kbt) + ((-1.0d0) - ((vef / kbt) + (mu / kbt)))) / edonor) + ((-1.0d0) / kbt)))))
else if (mu <= (-4.2d-265)) then
tmp = (ndchar / (1.0d0 + t_3)) + (nachar / (1.0d0 + ((1.0d0 + ((eaccept / kbt) + ((vef / kbt) + (ev / kbt)))) - (mu / kbt))))
else if (mu <= 4.8d-211) then
tmp = t_0 + (ndchar / (1.0d0 + ((1.0d0 + ((edonor / kbt) + (mu * ((1.0d0 / kbt) + (vef / (mu * kbt)))))) - (ec / kbt))))
else if (mu <= 1.7d-148) then
tmp = (nachar / ((eaccept / kbt) + 2.0d0)) - (ndchar / ((-1.0d0) - t_3))
else if (mu <= 8.2d+141) 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 - ((mu - EAccept) - Ev)) / KbT)));
double t_1 = (NdChar / (1.0 + Math.exp((Vef / KbT)))) + (NaChar / (1.0 + Math.exp((((Vef + Ev) - mu) / KbT))));
double t_2 = (NdChar / (1.0 + Math.exp((mu / KbT)))) + (NaChar / (1.0 + Math.exp((mu / -KbT))));
double t_3 = Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT));
double tmp;
if (mu <= -1.1e+240) {
tmp = t_2;
} else if (mu <= -1.6e+195) {
tmp = t_1;
} else if (mu <= -1.05e+133) {
tmp = t_2;
} else if (mu <= -2.2e-189) {
tmp = t_0 - (NdChar / (-1.0 + (EDonor * ((((Ec / KbT) + (-1.0 - ((Vef / KbT) + (mu / KbT)))) / EDonor) + (-1.0 / KbT)))));
} else if (mu <= -4.2e-265) {
tmp = (NdChar / (1.0 + t_3)) + (NaChar / (1.0 + ((1.0 + ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) - (mu / KbT))));
} else if (mu <= 4.8e-211) {
tmp = t_0 + (NdChar / (1.0 + ((1.0 + ((EDonor / KbT) + (mu * ((1.0 / KbT) + (Vef / (mu * KbT)))))) - (Ec / KbT))));
} else if (mu <= 1.7e-148) {
tmp = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - t_3));
} else if (mu <= 8.2e+141) {
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 - ((mu - EAccept) - Ev)) / KbT))) t_1 = (NdChar / (1.0 + math.exp((Vef / KbT)))) + (NaChar / (1.0 + math.exp((((Vef + Ev) - mu) / KbT)))) t_2 = (NdChar / (1.0 + math.exp((mu / KbT)))) + (NaChar / (1.0 + math.exp((mu / -KbT)))) t_3 = math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)) tmp = 0 if mu <= -1.1e+240: tmp = t_2 elif mu <= -1.6e+195: tmp = t_1 elif mu <= -1.05e+133: tmp = t_2 elif mu <= -2.2e-189: tmp = t_0 - (NdChar / (-1.0 + (EDonor * ((((Ec / KbT) + (-1.0 - ((Vef / KbT) + (mu / KbT)))) / EDonor) + (-1.0 / KbT))))) elif mu <= -4.2e-265: tmp = (NdChar / (1.0 + t_3)) + (NaChar / (1.0 + ((1.0 + ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) - (mu / KbT)))) elif mu <= 4.8e-211: tmp = t_0 + (NdChar / (1.0 + ((1.0 + ((EDonor / KbT) + (mu * ((1.0 / KbT) + (Vef / (mu * KbT)))))) - (Ec / KbT)))) elif mu <= 1.7e-148: tmp = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - t_3)) elif mu <= 8.2e+141: 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(mu - EAccept) - Ev)) / KbT)))) t_1 = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Vef / KbT)))) + Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(Vef + Ev) - mu) / KbT))))) t_2 = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(mu / KbT)))) + Float64(NaChar / Float64(1.0 + exp(Float64(mu / Float64(-KbT)))))) t_3 = exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)) tmp = 0.0 if (mu <= -1.1e+240) tmp = t_2; elseif (mu <= -1.6e+195) tmp = t_1; elseif (mu <= -1.05e+133) tmp = t_2; elseif (mu <= -2.2e-189) tmp = Float64(t_0 - Float64(NdChar / Float64(-1.0 + Float64(EDonor * Float64(Float64(Float64(Float64(Ec / KbT) + Float64(-1.0 - Float64(Float64(Vef / KbT) + Float64(mu / KbT)))) / EDonor) + Float64(-1.0 / KbT)))))); elseif (mu <= -4.2e-265) tmp = Float64(Float64(NdChar / Float64(1.0 + t_3)) + Float64(NaChar / Float64(1.0 + Float64(Float64(1.0 + Float64(Float64(EAccept / KbT) + Float64(Float64(Vef / KbT) + Float64(Ev / KbT)))) - Float64(mu / KbT))))); elseif (mu <= 4.8e-211) tmp = Float64(t_0 + Float64(NdChar / Float64(1.0 + Float64(Float64(1.0 + Float64(Float64(EDonor / KbT) + Float64(mu * Float64(Float64(1.0 / KbT) + Float64(Vef / Float64(mu * KbT)))))) - Float64(Ec / KbT))))); elseif (mu <= 1.7e-148) tmp = Float64(Float64(NaChar / Float64(Float64(EAccept / KbT) + 2.0)) - Float64(NdChar / Float64(-1.0 - t_3))); elseif (mu <= 8.2e+141) 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 - ((mu - EAccept) - Ev)) / KbT))); t_1 = (NdChar / (1.0 + exp((Vef / KbT)))) + (NaChar / (1.0 + exp((((Vef + Ev) - mu) / KbT)))); t_2 = (NdChar / (1.0 + exp((mu / KbT)))) + (NaChar / (1.0 + exp((mu / -KbT)))); t_3 = exp(((EDonor + (mu + (Vef - Ec))) / KbT)); tmp = 0.0; if (mu <= -1.1e+240) tmp = t_2; elseif (mu <= -1.6e+195) tmp = t_1; elseif (mu <= -1.05e+133) tmp = t_2; elseif (mu <= -2.2e-189) tmp = t_0 - (NdChar / (-1.0 + (EDonor * ((((Ec / KbT) + (-1.0 - ((Vef / KbT) + (mu / KbT)))) / EDonor) + (-1.0 / KbT))))); elseif (mu <= -4.2e-265) tmp = (NdChar / (1.0 + t_3)) + (NaChar / (1.0 + ((1.0 + ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) - (mu / KbT)))); elseif (mu <= 4.8e-211) tmp = t_0 + (NdChar / (1.0 + ((1.0 + ((EDonor / KbT) + (mu * ((1.0 / KbT) + (Vef / (mu * KbT)))))) - (Ec / KbT)))); elseif (mu <= 1.7e-148) tmp = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - t_3)); elseif (mu <= 8.2e+141) 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[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NdChar / N[(1.0 + N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Exp[N[(N[(N[(Vef + Ev), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(N[(NdChar / N[(1.0 + N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Exp[N[(mu / (-KbT)), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$3 = N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]}, If[LessEqual[mu, -1.1e+240], t$95$2, If[LessEqual[mu, -1.6e+195], t$95$1, If[LessEqual[mu, -1.05e+133], t$95$2, If[LessEqual[mu, -2.2e-189], N[(t$95$0 - N[(NdChar / N[(-1.0 + N[(EDonor * N[(N[(N[(N[(Ec / KbT), $MachinePrecision] + N[(-1.0 - N[(N[(Vef / KbT), $MachinePrecision] + N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / EDonor), $MachinePrecision] + N[(-1.0 / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[mu, -4.2e-265], N[(N[(NdChar / N[(1.0 + t$95$3), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[(N[(1.0 + N[(N[(EAccept / KbT), $MachinePrecision] + N[(N[(Vef / KbT), $MachinePrecision] + N[(Ev / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[mu, 4.8e-211], N[(t$95$0 + N[(NdChar / N[(1.0 + N[(N[(1.0 + N[(N[(EDonor / KbT), $MachinePrecision] + N[(mu * N[(N[(1.0 / KbT), $MachinePrecision] + N[(Vef / N[(mu * KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[mu, 1.7e-148], N[(N[(NaChar / N[(N[(EAccept / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision] - N[(NdChar / N[(-1.0 - t$95$3), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[mu, 8.2e+141], t$95$1, t$95$2]]]]]]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}}\\
t_1 := \frac{NdChar}{1 + e^{\frac{Vef}{KbT}}} + \frac{NaChar}{1 + e^{\frac{\left(Vef + Ev\right) - mu}{KbT}}}\\
t_2 := \frac{NdChar}{1 + e^{\frac{mu}{KbT}}} + \frac{NaChar}{1 + e^{\frac{mu}{-KbT}}}\\
t_3 := e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}\\
\mathbf{if}\;mu \leq -1.1 \cdot 10^{+240}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;mu \leq -1.6 \cdot 10^{+195}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;mu \leq -1.05 \cdot 10^{+133}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;mu \leq -2.2 \cdot 10^{-189}:\\
\;\;\;\;t\_0 - \frac{NdChar}{-1 + EDonor \cdot \left(\frac{\frac{Ec}{KbT} + \left(-1 - \left(\frac{Vef}{KbT} + \frac{mu}{KbT}\right)\right)}{EDonor} + \frac{-1}{KbT}\right)}\\
\mathbf{elif}\;mu \leq -4.2 \cdot 10^{-265}:\\
\;\;\;\;\frac{NdChar}{1 + t\_3} + \frac{NaChar}{1 + \left(\left(1 + \left(\frac{EAccept}{KbT} + \left(\frac{Vef}{KbT} + \frac{Ev}{KbT}\right)\right)\right) - \frac{mu}{KbT}\right)}\\
\mathbf{elif}\;mu \leq 4.8 \cdot 10^{-211}:\\
\;\;\;\;t\_0 + \frac{NdChar}{1 + \left(\left(1 + \left(\frac{EDonor}{KbT} + mu \cdot \left(\frac{1}{KbT} + \frac{Vef}{mu \cdot KbT}\right)\right)\right) - \frac{Ec}{KbT}\right)}\\
\mathbf{elif}\;mu \leq 1.7 \cdot 10^{-148}:\\
\;\;\;\;\frac{NaChar}{\frac{EAccept}{KbT} + 2} - \frac{NdChar}{-1 - t\_3}\\
\mathbf{elif}\;mu \leq 8.2 \cdot 10^{+141}:\\
\;\;\;\;t\_1\\
\mathbf{else}:\\
\;\;\;\;t\_2\\
\end{array}
\end{array}
if mu < -1.1000000000000001e240 or -1.59999999999999991e195 < mu < -1.05e133 or 8.20000000000000044e141 < mu Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 95.2%
Taylor expanded in mu around inf 89.1%
associate-*r/89.1%
mul-1-neg89.1%
Simplified89.1%
if -1.1000000000000001e240 < mu < -1.59999999999999991e195 or 1.7000000000000001e-148 < mu < 8.20000000000000044e141Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 72.7%
Taylor expanded in EAccept around 0 66.0%
if -1.05e133 < mu < -2.20000000000000019e-189Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 68.3%
Taylor expanded in EDonor around -inf 78.2%
if -2.20000000000000019e-189 < mu < -4.20000000000000007e-265Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 100.0%
if -4.20000000000000007e-265 < mu < 4.8000000000000004e-211Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 69.6%
Taylor expanded in mu around inf 76.4%
if 4.8000000000000004e-211 < mu < 1.7000000000000001e-148Initial program 99.9%
Simplified99.9%
Taylor expanded in EAccept around inf 92.9%
Taylor expanded in EAccept around 0 81.7%
Final simplification78.4%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT)))
(t_1
(+
(/ NdChar (+ 1.0 (exp (/ mu KbT))))
(/ NaChar (+ 1.0 (exp (/ mu (- KbT)))))))
(t_2 (/ NaChar (+ 1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT))))))
(if (<= mu -3.5e+241)
t_1
(if (<= mu -3.6e+195)
(+ t_2 (/ NdChar (+ 1.0 (/ EDonor KbT))))
(if (<= mu -1.2e+130)
t_1
(if (<= mu -1.15e-185)
(-
t_2
(/
NdChar
(+
-1.0
(*
EDonor
(+
(/ (+ (/ Ec KbT) (- -1.0 (+ (/ Vef KbT) (/ mu KbT)))) EDonor)
(/ -1.0 KbT))))))
(if (<= mu -7.5e-292)
(+
(/ NdChar (+ 1.0 t_0))
(/
NaChar
(+
1.0
(-
(+ 1.0 (+ (/ EAccept KbT) (+ (/ Vef KbT) (/ Ev KbT))))
(/ mu KbT)))))
(if (<= mu 1.32e-210)
(+
t_2
(/
NdChar
(+
1.0
(-
(+
1.0
(+
(/ EDonor KbT)
(* mu (+ (/ 1.0 KbT) (/ Vef (* mu KbT))))))
(/ Ec KbT)))))
(if (<= mu 1.9e-144)
(- (/ NaChar (+ (/ EAccept KbT) 2.0)) (/ NdChar (- -1.0 t_0)))
(if (<= mu 5.2e+41)
(+
t_2
(/
NdChar
(+
1.0
(*
Vef
(+
(/ 1.0 KbT)
(*
EDonor
(/
(+
(/ 1.0 KbT)
(+
(/ 1.0 EDonor)
(- (/ mu (* EDonor KbT)) (/ (/ Ec KbT) EDonor))))
Vef)))))))
t_1))))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = exp(((EDonor + (mu + (Vef - Ec))) / KbT));
double t_1 = (NdChar / (1.0 + exp((mu / KbT)))) + (NaChar / (1.0 + exp((mu / -KbT))));
double t_2 = NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)));
double tmp;
if (mu <= -3.5e+241) {
tmp = t_1;
} else if (mu <= -3.6e+195) {
tmp = t_2 + (NdChar / (1.0 + (EDonor / KbT)));
} else if (mu <= -1.2e+130) {
tmp = t_1;
} else if (mu <= -1.15e-185) {
tmp = t_2 - (NdChar / (-1.0 + (EDonor * ((((Ec / KbT) + (-1.0 - ((Vef / KbT) + (mu / KbT)))) / EDonor) + (-1.0 / KbT)))));
} else if (mu <= -7.5e-292) {
tmp = (NdChar / (1.0 + t_0)) + (NaChar / (1.0 + ((1.0 + ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) - (mu / KbT))));
} else if (mu <= 1.32e-210) {
tmp = t_2 + (NdChar / (1.0 + ((1.0 + ((EDonor / KbT) + (mu * ((1.0 / KbT) + (Vef / (mu * KbT)))))) - (Ec / KbT))));
} else if (mu <= 1.9e-144) {
tmp = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - t_0));
} else if (mu <= 5.2e+41) {
tmp = t_2 + (NdChar / (1.0 + (Vef * ((1.0 / KbT) + (EDonor * (((1.0 / KbT) + ((1.0 / EDonor) + ((mu / (EDonor * KbT)) - ((Ec / KbT) / EDonor)))) / Vef))))));
} 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 = exp(((edonor + (mu + (vef - ec))) / kbt))
t_1 = (ndchar / (1.0d0 + exp((mu / kbt)))) + (nachar / (1.0d0 + exp((mu / -kbt))))
t_2 = nachar / (1.0d0 + exp(((vef - ((mu - eaccept) - ev)) / kbt)))
if (mu <= (-3.5d+241)) then
tmp = t_1
else if (mu <= (-3.6d+195)) then
tmp = t_2 + (ndchar / (1.0d0 + (edonor / kbt)))
else if (mu <= (-1.2d+130)) then
tmp = t_1
else if (mu <= (-1.15d-185)) then
tmp = t_2 - (ndchar / ((-1.0d0) + (edonor * ((((ec / kbt) + ((-1.0d0) - ((vef / kbt) + (mu / kbt)))) / edonor) + ((-1.0d0) / kbt)))))
else if (mu <= (-7.5d-292)) then
tmp = (ndchar / (1.0d0 + t_0)) + (nachar / (1.0d0 + ((1.0d0 + ((eaccept / kbt) + ((vef / kbt) + (ev / kbt)))) - (mu / kbt))))
else if (mu <= 1.32d-210) then
tmp = t_2 + (ndchar / (1.0d0 + ((1.0d0 + ((edonor / kbt) + (mu * ((1.0d0 / kbt) + (vef / (mu * kbt)))))) - (ec / kbt))))
else if (mu <= 1.9d-144) then
tmp = (nachar / ((eaccept / kbt) + 2.0d0)) - (ndchar / ((-1.0d0) - t_0))
else if (mu <= 5.2d+41) then
tmp = t_2 + (ndchar / (1.0d0 + (vef * ((1.0d0 / kbt) + (edonor * (((1.0d0 / kbt) + ((1.0d0 / edonor) + ((mu / (edonor * kbt)) - ((ec / kbt) / edonor)))) / vef))))))
else
tmp = t_1
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT));
double t_1 = (NdChar / (1.0 + Math.exp((mu / KbT)))) + (NaChar / (1.0 + Math.exp((mu / -KbT))));
double t_2 = NaChar / (1.0 + Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)));
double tmp;
if (mu <= -3.5e+241) {
tmp = t_1;
} else if (mu <= -3.6e+195) {
tmp = t_2 + (NdChar / (1.0 + (EDonor / KbT)));
} else if (mu <= -1.2e+130) {
tmp = t_1;
} else if (mu <= -1.15e-185) {
tmp = t_2 - (NdChar / (-1.0 + (EDonor * ((((Ec / KbT) + (-1.0 - ((Vef / KbT) + (mu / KbT)))) / EDonor) + (-1.0 / KbT)))));
} else if (mu <= -7.5e-292) {
tmp = (NdChar / (1.0 + t_0)) + (NaChar / (1.0 + ((1.0 + ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) - (mu / KbT))));
} else if (mu <= 1.32e-210) {
tmp = t_2 + (NdChar / (1.0 + ((1.0 + ((EDonor / KbT) + (mu * ((1.0 / KbT) + (Vef / (mu * KbT)))))) - (Ec / KbT))));
} else if (mu <= 1.9e-144) {
tmp = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - t_0));
} else if (mu <= 5.2e+41) {
tmp = t_2 + (NdChar / (1.0 + (Vef * ((1.0 / KbT) + (EDonor * (((1.0 / KbT) + ((1.0 / EDonor) + ((mu / (EDonor * KbT)) - ((Ec / KbT) / EDonor)))) / Vef))))));
} else {
tmp = t_1;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)) t_1 = (NdChar / (1.0 + math.exp((mu / KbT)))) + (NaChar / (1.0 + math.exp((mu / -KbT)))) t_2 = NaChar / (1.0 + math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT))) tmp = 0 if mu <= -3.5e+241: tmp = t_1 elif mu <= -3.6e+195: tmp = t_2 + (NdChar / (1.0 + (EDonor / KbT))) elif mu <= -1.2e+130: tmp = t_1 elif mu <= -1.15e-185: tmp = t_2 - (NdChar / (-1.0 + (EDonor * ((((Ec / KbT) + (-1.0 - ((Vef / KbT) + (mu / KbT)))) / EDonor) + (-1.0 / KbT))))) elif mu <= -7.5e-292: tmp = (NdChar / (1.0 + t_0)) + (NaChar / (1.0 + ((1.0 + ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) - (mu / KbT)))) elif mu <= 1.32e-210: tmp = t_2 + (NdChar / (1.0 + ((1.0 + ((EDonor / KbT) + (mu * ((1.0 / KbT) + (Vef / (mu * KbT)))))) - (Ec / KbT)))) elif mu <= 1.9e-144: tmp = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - t_0)) elif mu <= 5.2e+41: tmp = t_2 + (NdChar / (1.0 + (Vef * ((1.0 / KbT) + (EDonor * (((1.0 / KbT) + ((1.0 / EDonor) + ((mu / (EDonor * KbT)) - ((Ec / KbT) / EDonor)))) / Vef)))))) else: tmp = t_1 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)) t_1 = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(mu / KbT)))) + Float64(NaChar / Float64(1.0 + exp(Float64(mu / Float64(-KbT)))))) t_2 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT)))) tmp = 0.0 if (mu <= -3.5e+241) tmp = t_1; elseif (mu <= -3.6e+195) tmp = Float64(t_2 + Float64(NdChar / Float64(1.0 + Float64(EDonor / KbT)))); elseif (mu <= -1.2e+130) tmp = t_1; elseif (mu <= -1.15e-185) tmp = Float64(t_2 - Float64(NdChar / Float64(-1.0 + Float64(EDonor * Float64(Float64(Float64(Float64(Ec / KbT) + Float64(-1.0 - Float64(Float64(Vef / KbT) + Float64(mu / KbT)))) / EDonor) + Float64(-1.0 / KbT)))))); elseif (mu <= -7.5e-292) tmp = Float64(Float64(NdChar / Float64(1.0 + t_0)) + Float64(NaChar / Float64(1.0 + Float64(Float64(1.0 + Float64(Float64(EAccept / KbT) + Float64(Float64(Vef / KbT) + Float64(Ev / KbT)))) - Float64(mu / KbT))))); elseif (mu <= 1.32e-210) tmp = Float64(t_2 + Float64(NdChar / Float64(1.0 + Float64(Float64(1.0 + Float64(Float64(EDonor / KbT) + Float64(mu * Float64(Float64(1.0 / KbT) + Float64(Vef / Float64(mu * KbT)))))) - Float64(Ec / KbT))))); elseif (mu <= 1.9e-144) tmp = Float64(Float64(NaChar / Float64(Float64(EAccept / KbT) + 2.0)) - Float64(NdChar / Float64(-1.0 - t_0))); elseif (mu <= 5.2e+41) tmp = Float64(t_2 + Float64(NdChar / Float64(1.0 + Float64(Vef * Float64(Float64(1.0 / KbT) + Float64(EDonor * Float64(Float64(Float64(1.0 / KbT) + Float64(Float64(1.0 / EDonor) + Float64(Float64(mu / Float64(EDonor * KbT)) - Float64(Float64(Ec / KbT) / EDonor)))) / Vef))))))); else tmp = t_1; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = exp(((EDonor + (mu + (Vef - Ec))) / KbT)); t_1 = (NdChar / (1.0 + exp((mu / KbT)))) + (NaChar / (1.0 + exp((mu / -KbT)))); t_2 = NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT))); tmp = 0.0; if (mu <= -3.5e+241) tmp = t_1; elseif (mu <= -3.6e+195) tmp = t_2 + (NdChar / (1.0 + (EDonor / KbT))); elseif (mu <= -1.2e+130) tmp = t_1; elseif (mu <= -1.15e-185) tmp = t_2 - (NdChar / (-1.0 + (EDonor * ((((Ec / KbT) + (-1.0 - ((Vef / KbT) + (mu / KbT)))) / EDonor) + (-1.0 / KbT))))); elseif (mu <= -7.5e-292) tmp = (NdChar / (1.0 + t_0)) + (NaChar / (1.0 + ((1.0 + ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) - (mu / KbT)))); elseif (mu <= 1.32e-210) tmp = t_2 + (NdChar / (1.0 + ((1.0 + ((EDonor / KbT) + (mu * ((1.0 / KbT) + (Vef / (mu * KbT)))))) - (Ec / KbT)))); elseif (mu <= 1.9e-144) tmp = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - t_0)); elseif (mu <= 5.2e+41) tmp = t_2 + (NdChar / (1.0 + (Vef * ((1.0 / KbT) + (EDonor * (((1.0 / KbT) + ((1.0 / EDonor) + ((mu / (EDonor * KbT)) - ((Ec / KbT) / EDonor)))) / Vef)))))); else tmp = t_1; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[(N[(NdChar / N[(1.0 + N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Exp[N[(mu / (-KbT)), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[mu, -3.5e+241], t$95$1, If[LessEqual[mu, -3.6e+195], N[(t$95$2 + N[(NdChar / N[(1.0 + N[(EDonor / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[mu, -1.2e+130], t$95$1, If[LessEqual[mu, -1.15e-185], N[(t$95$2 - N[(NdChar / N[(-1.0 + N[(EDonor * N[(N[(N[(N[(Ec / KbT), $MachinePrecision] + N[(-1.0 - N[(N[(Vef / KbT), $MachinePrecision] + N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / EDonor), $MachinePrecision] + N[(-1.0 / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[mu, -7.5e-292], N[(N[(NdChar / N[(1.0 + t$95$0), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[(N[(1.0 + N[(N[(EAccept / KbT), $MachinePrecision] + N[(N[(Vef / KbT), $MachinePrecision] + N[(Ev / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[mu, 1.32e-210], N[(t$95$2 + N[(NdChar / N[(1.0 + N[(N[(1.0 + N[(N[(EDonor / KbT), $MachinePrecision] + N[(mu * N[(N[(1.0 / KbT), $MachinePrecision] + N[(Vef / N[(mu * KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[mu, 1.9e-144], N[(N[(NaChar / N[(N[(EAccept / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision] - N[(NdChar / N[(-1.0 - t$95$0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[mu, 5.2e+41], N[(t$95$2 + N[(NdChar / N[(1.0 + N[(Vef * N[(N[(1.0 / KbT), $MachinePrecision] + N[(EDonor * N[(N[(N[(1.0 / KbT), $MachinePrecision] + N[(N[(1.0 / EDonor), $MachinePrecision] + N[(N[(mu / N[(EDonor * KbT), $MachinePrecision]), $MachinePrecision] - N[(N[(Ec / KbT), $MachinePrecision] / EDonor), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / Vef), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$1]]]]]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}\\
t_1 := \frac{NdChar}{1 + e^{\frac{mu}{KbT}}} + \frac{NaChar}{1 + e^{\frac{mu}{-KbT}}}\\
t_2 := \frac{NaChar}{1 + e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}}\\
\mathbf{if}\;mu \leq -3.5 \cdot 10^{+241}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;mu \leq -3.6 \cdot 10^{+195}:\\
\;\;\;\;t\_2 + \frac{NdChar}{1 + \frac{EDonor}{KbT}}\\
\mathbf{elif}\;mu \leq -1.2 \cdot 10^{+130}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;mu \leq -1.15 \cdot 10^{-185}:\\
\;\;\;\;t\_2 - \frac{NdChar}{-1 + EDonor \cdot \left(\frac{\frac{Ec}{KbT} + \left(-1 - \left(\frac{Vef}{KbT} + \frac{mu}{KbT}\right)\right)}{EDonor} + \frac{-1}{KbT}\right)}\\
\mathbf{elif}\;mu \leq -7.5 \cdot 10^{-292}:\\
\;\;\;\;\frac{NdChar}{1 + t\_0} + \frac{NaChar}{1 + \left(\left(1 + \left(\frac{EAccept}{KbT} + \left(\frac{Vef}{KbT} + \frac{Ev}{KbT}\right)\right)\right) - \frac{mu}{KbT}\right)}\\
\mathbf{elif}\;mu \leq 1.32 \cdot 10^{-210}:\\
\;\;\;\;t\_2 + \frac{NdChar}{1 + \left(\left(1 + \left(\frac{EDonor}{KbT} + mu \cdot \left(\frac{1}{KbT} + \frac{Vef}{mu \cdot KbT}\right)\right)\right) - \frac{Ec}{KbT}\right)}\\
\mathbf{elif}\;mu \leq 1.9 \cdot 10^{-144}:\\
\;\;\;\;\frac{NaChar}{\frac{EAccept}{KbT} + 2} - \frac{NdChar}{-1 - t\_0}\\
\mathbf{elif}\;mu \leq 5.2 \cdot 10^{+41}:\\
\;\;\;\;t\_2 + \frac{NdChar}{1 + Vef \cdot \left(\frac{1}{KbT} + EDonor \cdot \frac{\frac{1}{KbT} + \left(\frac{1}{EDonor} + \left(\frac{mu}{EDonor \cdot KbT} - \frac{\frac{Ec}{KbT}}{EDonor}\right)\right)}{Vef}\right)}\\
\mathbf{else}:\\
\;\;\;\;t\_1\\
\end{array}
\end{array}
if mu < -3.5e241 or -3.5999999999999999e195 < mu < -1.20000000000000012e130 or 5.2000000000000001e41 < mu Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 88.7%
Taylor expanded in mu around inf 81.9%
associate-*r/81.9%
mul-1-neg81.9%
Simplified81.9%
if -3.5e241 < mu < -3.5999999999999999e195Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 54.9%
Taylor expanded in EDonor around inf 82.4%
if -1.20000000000000012e130 < mu < -1.15e-185Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 68.3%
Taylor expanded in EDonor around -inf 78.2%
if -1.15e-185 < mu < -7.5000000000000002e-292Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 100.0%
if -7.5000000000000002e-292 < mu < 1.3200000000000001e-210Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 69.6%
Taylor expanded in mu around inf 76.4%
if 1.3200000000000001e-210 < mu < 1.89999999999999996e-144Initial program 99.9%
Simplified99.9%
Taylor expanded in EAccept around inf 93.3%
Taylor expanded in EAccept around 0 82.7%
if 1.89999999999999996e-144 < mu < 5.2000000000000001e41Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 39.4%
Taylor expanded in EDonor around -inf 56.6%
Taylor expanded in Vef around inf 59.0%
associate-/l*59.0%
mul-1-neg59.0%
associate--l+59.0%
*-commutative59.0%
associate-/l/59.0%
Simplified59.0%
Final simplification77.9%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ mu (* EDonor KbT)))
(t_1 (/ NaChar (+ 1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT))))))
(if (<= NaChar -9.4e+139)
(-
t_1
(/
NdChar
(+
-1.0
(*
EDonor
(+
(/ (+ (/ Ec KbT) (- -1.0 (+ (/ Vef KbT) (/ mu KbT)))) EDonor)
(/ -1.0 KbT))))))
(if (<= NaChar -2.4e+61)
(+
(/ NdChar (+ 1.0 (exp (/ mu KbT))))
(/ NaChar (+ 1.0 (exp (/ mu (- KbT))))))
(if (<= NaChar -1.16e-54)
(+
t_1
(/
NdChar
(+
1.0
(*
EDonor
(-
(/ 1.0 EDonor)
(+
(/ (/ Ec EDonor) KbT)
(- (- (/ -1.0 KbT) (/ (/ Vef EDonor) KbT)) t_0)))))))
(if (<= NaChar 1.08e-128)
(-
(/ NaChar (+ (/ EAccept KbT) 2.0))
(/ NdChar (- -1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT)))))
(if (<= NaChar 8e+44)
(+
t_1
(/
NdChar
(+
1.0
(*
Vef
(+
(/ 1.0 KbT)
(*
EDonor
(/
(+
(/ 1.0 KbT)
(+ (/ 1.0 EDonor) (- t_0 (/ (/ Ec KbT) EDonor))))
Vef)))))))
(if (<= NaChar 2.6e+144)
(+
(/ NdChar (+ 1.0 (exp (/ Ec (- KbT)))))
(/ NaChar (+ 1.0 (exp (/ Ev KbT)))))
(+ t_1 (/ NdChar (+ 1.0 (/ Vef KbT))))))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = mu / (EDonor * KbT);
double t_1 = NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)));
double tmp;
if (NaChar <= -9.4e+139) {
tmp = t_1 - (NdChar / (-1.0 + (EDonor * ((((Ec / KbT) + (-1.0 - ((Vef / KbT) + (mu / KbT)))) / EDonor) + (-1.0 / KbT)))));
} else if (NaChar <= -2.4e+61) {
tmp = (NdChar / (1.0 + exp((mu / KbT)))) + (NaChar / (1.0 + exp((mu / -KbT))));
} else if (NaChar <= -1.16e-54) {
tmp = t_1 + (NdChar / (1.0 + (EDonor * ((1.0 / EDonor) - (((Ec / EDonor) / KbT) + (((-1.0 / KbT) - ((Vef / EDonor) / KbT)) - t_0))))));
} else if (NaChar <= 1.08e-128) {
tmp = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT))));
} else if (NaChar <= 8e+44) {
tmp = t_1 + (NdChar / (1.0 + (Vef * ((1.0 / KbT) + (EDonor * (((1.0 / KbT) + ((1.0 / EDonor) + (t_0 - ((Ec / KbT) / EDonor)))) / Vef))))));
} else if (NaChar <= 2.6e+144) {
tmp = (NdChar / (1.0 + exp((Ec / -KbT)))) + (NaChar / (1.0 + exp((Ev / KbT))));
} else {
tmp = t_1 + (NdChar / (1.0 + (Vef / KbT)));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = mu / (edonor * kbt)
t_1 = nachar / (1.0d0 + exp(((vef - ((mu - eaccept) - ev)) / kbt)))
if (nachar <= (-9.4d+139)) then
tmp = t_1 - (ndchar / ((-1.0d0) + (edonor * ((((ec / kbt) + ((-1.0d0) - ((vef / kbt) + (mu / kbt)))) / edonor) + ((-1.0d0) / kbt)))))
else if (nachar <= (-2.4d+61)) then
tmp = (ndchar / (1.0d0 + exp((mu / kbt)))) + (nachar / (1.0d0 + exp((mu / -kbt))))
else if (nachar <= (-1.16d-54)) then
tmp = t_1 + (ndchar / (1.0d0 + (edonor * ((1.0d0 / edonor) - (((ec / edonor) / kbt) + ((((-1.0d0) / kbt) - ((vef / edonor) / kbt)) - t_0))))))
else if (nachar <= 1.08d-128) then
tmp = (nachar / ((eaccept / kbt) + 2.0d0)) - (ndchar / ((-1.0d0) - exp(((edonor + (mu + (vef - ec))) / kbt))))
else if (nachar <= 8d+44) then
tmp = t_1 + (ndchar / (1.0d0 + (vef * ((1.0d0 / kbt) + (edonor * (((1.0d0 / kbt) + ((1.0d0 / edonor) + (t_0 - ((ec / kbt) / edonor)))) / vef))))))
else if (nachar <= 2.6d+144) then
tmp = (ndchar / (1.0d0 + exp((ec / -kbt)))) + (nachar / (1.0d0 + exp((ev / kbt))))
else
tmp = t_1 + (ndchar / (1.0d0 + (vef / kbt)))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = mu / (EDonor * KbT);
double t_1 = NaChar / (1.0 + Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)));
double tmp;
if (NaChar <= -9.4e+139) {
tmp = t_1 - (NdChar / (-1.0 + (EDonor * ((((Ec / KbT) + (-1.0 - ((Vef / KbT) + (mu / KbT)))) / EDonor) + (-1.0 / KbT)))));
} else if (NaChar <= -2.4e+61) {
tmp = (NdChar / (1.0 + Math.exp((mu / KbT)))) + (NaChar / (1.0 + Math.exp((mu / -KbT))));
} else if (NaChar <= -1.16e-54) {
tmp = t_1 + (NdChar / (1.0 + (EDonor * ((1.0 / EDonor) - (((Ec / EDonor) / KbT) + (((-1.0 / KbT) - ((Vef / EDonor) / KbT)) - t_0))))));
} else if (NaChar <= 1.08e-128) {
tmp = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT))));
} else if (NaChar <= 8e+44) {
tmp = t_1 + (NdChar / (1.0 + (Vef * ((1.0 / KbT) + (EDonor * (((1.0 / KbT) + ((1.0 / EDonor) + (t_0 - ((Ec / KbT) / EDonor)))) / Vef))))));
} else if (NaChar <= 2.6e+144) {
tmp = (NdChar / (1.0 + Math.exp((Ec / -KbT)))) + (NaChar / (1.0 + Math.exp((Ev / KbT))));
} else {
tmp = t_1 + (NdChar / (1.0 + (Vef / KbT)));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = mu / (EDonor * KbT) t_1 = NaChar / (1.0 + math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT))) tmp = 0 if NaChar <= -9.4e+139: tmp = t_1 - (NdChar / (-1.0 + (EDonor * ((((Ec / KbT) + (-1.0 - ((Vef / KbT) + (mu / KbT)))) / EDonor) + (-1.0 / KbT))))) elif NaChar <= -2.4e+61: tmp = (NdChar / (1.0 + math.exp((mu / KbT)))) + (NaChar / (1.0 + math.exp((mu / -KbT)))) elif NaChar <= -1.16e-54: tmp = t_1 + (NdChar / (1.0 + (EDonor * ((1.0 / EDonor) - (((Ec / EDonor) / KbT) + (((-1.0 / KbT) - ((Vef / EDonor) / KbT)) - t_0)))))) elif NaChar <= 1.08e-128: tmp = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) elif NaChar <= 8e+44: tmp = t_1 + (NdChar / (1.0 + (Vef * ((1.0 / KbT) + (EDonor * (((1.0 / KbT) + ((1.0 / EDonor) + (t_0 - ((Ec / KbT) / EDonor)))) / Vef)))))) elif NaChar <= 2.6e+144: tmp = (NdChar / (1.0 + math.exp((Ec / -KbT)))) + (NaChar / (1.0 + math.exp((Ev / KbT)))) else: tmp = t_1 + (NdChar / (1.0 + (Vef / KbT))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(mu / Float64(EDonor * KbT)) t_1 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT)))) tmp = 0.0 if (NaChar <= -9.4e+139) tmp = Float64(t_1 - Float64(NdChar / Float64(-1.0 + Float64(EDonor * Float64(Float64(Float64(Float64(Ec / KbT) + Float64(-1.0 - Float64(Float64(Vef / KbT) + Float64(mu / KbT)))) / EDonor) + Float64(-1.0 / KbT)))))); elseif (NaChar <= -2.4e+61) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(mu / KbT)))) + Float64(NaChar / Float64(1.0 + exp(Float64(mu / Float64(-KbT)))))); elseif (NaChar <= -1.16e-54) tmp = Float64(t_1 + Float64(NdChar / Float64(1.0 + Float64(EDonor * Float64(Float64(1.0 / EDonor) - Float64(Float64(Float64(Ec / EDonor) / KbT) + Float64(Float64(Float64(-1.0 / KbT) - Float64(Float64(Vef / EDonor) / KbT)) - t_0))))))); elseif (NaChar <= 1.08e-128) tmp = Float64(Float64(NaChar / Float64(Float64(EAccept / KbT) + 2.0)) - Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT))))); elseif (NaChar <= 8e+44) tmp = Float64(t_1 + Float64(NdChar / Float64(1.0 + Float64(Vef * Float64(Float64(1.0 / KbT) + Float64(EDonor * Float64(Float64(Float64(1.0 / KbT) + Float64(Float64(1.0 / EDonor) + Float64(t_0 - Float64(Float64(Ec / KbT) / EDonor)))) / Vef))))))); elseif (NaChar <= 2.6e+144) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Ec / Float64(-KbT))))) + Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT))))); else tmp = Float64(t_1 + Float64(NdChar / Float64(1.0 + Float64(Vef / KbT)))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = mu / (EDonor * KbT); t_1 = NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT))); tmp = 0.0; if (NaChar <= -9.4e+139) tmp = t_1 - (NdChar / (-1.0 + (EDonor * ((((Ec / KbT) + (-1.0 - ((Vef / KbT) + (mu / KbT)))) / EDonor) + (-1.0 / KbT))))); elseif (NaChar <= -2.4e+61) tmp = (NdChar / (1.0 + exp((mu / KbT)))) + (NaChar / (1.0 + exp((mu / -KbT)))); elseif (NaChar <= -1.16e-54) tmp = t_1 + (NdChar / (1.0 + (EDonor * ((1.0 / EDonor) - (((Ec / EDonor) / KbT) + (((-1.0 / KbT) - ((Vef / EDonor) / KbT)) - t_0)))))); elseif (NaChar <= 1.08e-128) tmp = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT)))); elseif (NaChar <= 8e+44) tmp = t_1 + (NdChar / (1.0 + (Vef * ((1.0 / KbT) + (EDonor * (((1.0 / KbT) + ((1.0 / EDonor) + (t_0 - ((Ec / KbT) / EDonor)))) / Vef)))))); elseif (NaChar <= 2.6e+144) tmp = (NdChar / (1.0 + exp((Ec / -KbT)))) + (NaChar / (1.0 + exp((Ev / KbT)))); else tmp = t_1 + (NdChar / (1.0 + (Vef / KbT))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(mu / N[(EDonor * KbT), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -9.4e+139], N[(t$95$1 - N[(NdChar / N[(-1.0 + N[(EDonor * N[(N[(N[(N[(Ec / KbT), $MachinePrecision] + N[(-1.0 - N[(N[(Vef / KbT), $MachinePrecision] + N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / EDonor), $MachinePrecision] + N[(-1.0 / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, -2.4e+61], N[(N[(NdChar / N[(1.0 + N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Exp[N[(mu / (-KbT)), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, -1.16e-54], N[(t$95$1 + N[(NdChar / N[(1.0 + N[(EDonor * N[(N[(1.0 / EDonor), $MachinePrecision] - N[(N[(N[(Ec / EDonor), $MachinePrecision] / KbT), $MachinePrecision] + N[(N[(N[(-1.0 / KbT), $MachinePrecision] - N[(N[(Vef / EDonor), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision] - t$95$0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 1.08e-128], N[(N[(NaChar / N[(N[(EAccept / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision] - N[(NdChar / N[(-1.0 - N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 8e+44], N[(t$95$1 + N[(NdChar / N[(1.0 + N[(Vef * N[(N[(1.0 / KbT), $MachinePrecision] + N[(EDonor * N[(N[(N[(1.0 / KbT), $MachinePrecision] + N[(N[(1.0 / EDonor), $MachinePrecision] + N[(t$95$0 - N[(N[(Ec / KbT), $MachinePrecision] / EDonor), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / Vef), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 2.6e+144], N[(N[(NdChar / N[(1.0 + N[Exp[N[(Ec / (-KbT)), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(t$95$1 + N[(NdChar / N[(1.0 + N[(Vef / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{mu}{EDonor \cdot KbT}\\
t_1 := \frac{NaChar}{1 + e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}}\\
\mathbf{if}\;NaChar \leq -9.4 \cdot 10^{+139}:\\
\;\;\;\;t\_1 - \frac{NdChar}{-1 + EDonor \cdot \left(\frac{\frac{Ec}{KbT} + \left(-1 - \left(\frac{Vef}{KbT} + \frac{mu}{KbT}\right)\right)}{EDonor} + \frac{-1}{KbT}\right)}\\
\mathbf{elif}\;NaChar \leq -2.4 \cdot 10^{+61}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{mu}{KbT}}} + \frac{NaChar}{1 + e^{\frac{mu}{-KbT}}}\\
\mathbf{elif}\;NaChar \leq -1.16 \cdot 10^{-54}:\\
\;\;\;\;t\_1 + \frac{NdChar}{1 + EDonor \cdot \left(\frac{1}{EDonor} - \left(\frac{\frac{Ec}{EDonor}}{KbT} + \left(\left(\frac{-1}{KbT} - \frac{\frac{Vef}{EDonor}}{KbT}\right) - t\_0\right)\right)\right)}\\
\mathbf{elif}\;NaChar \leq 1.08 \cdot 10^{-128}:\\
\;\;\;\;\frac{NaChar}{\frac{EAccept}{KbT} + 2} - \frac{NdChar}{-1 - e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}}\\
\mathbf{elif}\;NaChar \leq 8 \cdot 10^{+44}:\\
\;\;\;\;t\_1 + \frac{NdChar}{1 + Vef \cdot \left(\frac{1}{KbT} + EDonor \cdot \frac{\frac{1}{KbT} + \left(\frac{1}{EDonor} + \left(t\_0 - \frac{\frac{Ec}{KbT}}{EDonor}\right)\right)}{Vef}\right)}\\
\mathbf{elif}\;NaChar \leq 2.6 \cdot 10^{+144}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{Ec}{-KbT}}} + \frac{NaChar}{1 + e^{\frac{Ev}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;t\_1 + \frac{NdChar}{1 + \frac{Vef}{KbT}}\\
\end{array}
\end{array}
if NaChar < -9.4000000000000002e139Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 74.3%
Taylor expanded in EDonor around -inf 83.2%
if -9.4000000000000002e139 < NaChar < -2.3999999999999999e61Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 83.8%
Taylor expanded in mu around inf 82.6%
associate-*r/82.6%
mul-1-neg82.6%
Simplified82.6%
if -2.3999999999999999e61 < NaChar < -1.16e-54Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 65.7%
Taylor expanded in EDonor around inf 77.9%
associate--l+77.9%
associate-+r+77.9%
associate-/r*77.9%
*-commutative77.9%
associate-/r*81.0%
Simplified81.0%
if -1.16e-54 < NaChar < 1.08e-128Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 79.1%
Taylor expanded in EAccept around 0 67.8%
if 1.08e-128 < NaChar < 8.0000000000000007e44Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 62.2%
Taylor expanded in EDonor around -inf 67.7%
Taylor expanded in Vef around inf 67.7%
associate-/l*67.7%
mul-1-neg67.7%
associate--l+67.7%
*-commutative67.7%
associate-/l/70.5%
Simplified70.5%
if 8.0000000000000007e44 < NaChar < 2.5999999999999999e144Initial program 100.0%
Simplified100.0%
Taylor expanded in Ec around inf 91.7%
associate-*r/91.7%
mul-1-neg91.7%
Simplified91.7%
Taylor expanded in Ev around inf 72.6%
if 2.5999999999999999e144 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 59.6%
Taylor expanded in Vef around inf 76.8%
Final simplification74.3%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NaChar (+ 1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT)))))
(t_1 (+ t_0 (/ NdChar (+ 1.0 (exp (/ Ec (- KbT))))))))
(if (<= Ec -2.4e-64)
t_1
(if (<= Ec 1.85e-160)
(+ t_0 (/ NdChar (+ 1.0 (exp (/ Vef KbT)))))
(if (<= Ec 1.95e+65)
(+ t_0 (/ NdChar (+ 1.0 (exp (/ mu KbT)))))
(if (<= Ec 8.8e+192)
(+ t_0 (/ NdChar (+ 1.0 (exp (/ EDonor 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 - ((mu - EAccept) - Ev)) / KbT)));
double t_1 = t_0 + (NdChar / (1.0 + exp((Ec / -KbT))));
double tmp;
if (Ec <= -2.4e-64) {
tmp = t_1;
} else if (Ec <= 1.85e-160) {
tmp = t_0 + (NdChar / (1.0 + exp((Vef / KbT))));
} else if (Ec <= 1.95e+65) {
tmp = t_0 + (NdChar / (1.0 + exp((mu / KbT))));
} else if (Ec <= 8.8e+192) {
tmp = t_0 + (NdChar / (1.0 + exp((EDonor / 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 - ((mu - eaccept) - ev)) / kbt)))
t_1 = t_0 + (ndchar / (1.0d0 + exp((ec / -kbt))))
if (ec <= (-2.4d-64)) then
tmp = t_1
else if (ec <= 1.85d-160) then
tmp = t_0 + (ndchar / (1.0d0 + exp((vef / kbt))))
else if (ec <= 1.95d+65) then
tmp = t_0 + (ndchar / (1.0d0 + exp((mu / kbt))))
else if (ec <= 8.8d+192) then
tmp = t_0 + (ndchar / (1.0d0 + exp((edonor / 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 - ((mu - EAccept) - Ev)) / KbT)));
double t_1 = t_0 + (NdChar / (1.0 + Math.exp((Ec / -KbT))));
double tmp;
if (Ec <= -2.4e-64) {
tmp = t_1;
} else if (Ec <= 1.85e-160) {
tmp = t_0 + (NdChar / (1.0 + Math.exp((Vef / KbT))));
} else if (Ec <= 1.95e+65) {
tmp = t_0 + (NdChar / (1.0 + Math.exp((mu / KbT))));
} else if (Ec <= 8.8e+192) {
tmp = t_0 + (NdChar / (1.0 + Math.exp((EDonor / 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 - ((mu - EAccept) - Ev)) / KbT))) t_1 = t_0 + (NdChar / (1.0 + math.exp((Ec / -KbT)))) tmp = 0 if Ec <= -2.4e-64: tmp = t_1 elif Ec <= 1.85e-160: tmp = t_0 + (NdChar / (1.0 + math.exp((Vef / KbT)))) elif Ec <= 1.95e+65: tmp = t_0 + (NdChar / (1.0 + math.exp((mu / KbT)))) elif Ec <= 8.8e+192: tmp = t_0 + (NdChar / (1.0 + math.exp((EDonor / 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(mu - EAccept) - Ev)) / KbT)))) t_1 = Float64(t_0 + Float64(NdChar / Float64(1.0 + exp(Float64(Ec / Float64(-KbT)))))) tmp = 0.0 if (Ec <= -2.4e-64) tmp = t_1; elseif (Ec <= 1.85e-160) tmp = Float64(t_0 + Float64(NdChar / Float64(1.0 + exp(Float64(Vef / KbT))))); elseif (Ec <= 1.95e+65) tmp = Float64(t_0 + Float64(NdChar / Float64(1.0 + exp(Float64(mu / KbT))))); elseif (Ec <= 8.8e+192) tmp = Float64(t_0 + Float64(NdChar / Float64(1.0 + exp(Float64(EDonor / 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 - ((mu - EAccept) - Ev)) / KbT))); t_1 = t_0 + (NdChar / (1.0 + exp((Ec / -KbT)))); tmp = 0.0; if (Ec <= -2.4e-64) tmp = t_1; elseif (Ec <= 1.85e-160) tmp = t_0 + (NdChar / (1.0 + exp((Vef / KbT)))); elseif (Ec <= 1.95e+65) tmp = t_0 + (NdChar / (1.0 + exp((mu / KbT)))); elseif (Ec <= 8.8e+192) tmp = t_0 + (NdChar / (1.0 + exp((EDonor / 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[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(t$95$0 + N[(NdChar / N[(1.0 + N[Exp[N[(Ec / (-KbT)), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[Ec, -2.4e-64], t$95$1, If[LessEqual[Ec, 1.85e-160], N[(t$95$0 + N[(NdChar / N[(1.0 + N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[Ec, 1.95e+65], N[(t$95$0 + N[(NdChar / N[(1.0 + N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[Ec, 8.8e+192], N[(t$95$0 + N[(NdChar / N[(1.0 + N[Exp[N[(EDonor / 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(mu - EAccept\right) - Ev\right)}{KbT}}}\\
t_1 := t\_0 + \frac{NdChar}{1 + e^{\frac{Ec}{-KbT}}}\\
\mathbf{if}\;Ec \leq -2.4 \cdot 10^{-64}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;Ec \leq 1.85 \cdot 10^{-160}:\\
\;\;\;\;t\_0 + \frac{NdChar}{1 + e^{\frac{Vef}{KbT}}}\\
\mathbf{elif}\;Ec \leq 1.95 \cdot 10^{+65}:\\
\;\;\;\;t\_0 + \frac{NdChar}{1 + e^{\frac{mu}{KbT}}}\\
\mathbf{elif}\;Ec \leq 8.8 \cdot 10^{+192}:\\
\;\;\;\;t\_0 + \frac{NdChar}{1 + e^{\frac{EDonor}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;t\_1\\
\end{array}
\end{array}
if Ec < -2.39999999999999998e-64 or 8.8000000000000003e192 < Ec Initial program 100.0%
Simplified100.0%
Taylor expanded in Ec around inf 88.5%
associate-*r/88.5%
mul-1-neg88.5%
Simplified88.5%
if -2.39999999999999998e-64 < Ec < 1.84999999999999988e-160Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 83.2%
if 1.84999999999999988e-160 < Ec < 1.9499999999999999e65Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 79.9%
if 1.9499999999999999e65 < Ec < 8.8000000000000003e192Initial program 100.0%
Simplified100.0%
Taylor expanded in EDonor around inf 85.0%
Final simplification85.0%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NaChar (+ 1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT)))))
(t_1 (+ t_0 (/ NdChar (+ 1.0 (exp (/ EDonor KbT))))))
(t_2 (+ t_0 (/ NdChar (+ 1.0 (exp (/ mu KbT)))))))
(if (<= mu -8.2e-25)
t_2
(if (<= mu -6.4e-237)
t_1
(if (<= mu 1.25e-248)
(+ t_0 (/ NdChar (+ 1.0 (exp (/ Vef KbT)))))
(if (<= mu 2.8e+96) 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 - ((mu - EAccept) - Ev)) / KbT)));
double t_1 = t_0 + (NdChar / (1.0 + exp((EDonor / KbT))));
double t_2 = t_0 + (NdChar / (1.0 + exp((mu / KbT))));
double tmp;
if (mu <= -8.2e-25) {
tmp = t_2;
} else if (mu <= -6.4e-237) {
tmp = t_1;
} else if (mu <= 1.25e-248) {
tmp = t_0 + (NdChar / (1.0 + exp((Vef / KbT))));
} else if (mu <= 2.8e+96) {
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 - ((mu - eaccept) - ev)) / kbt)))
t_1 = t_0 + (ndchar / (1.0d0 + exp((edonor / kbt))))
t_2 = t_0 + (ndchar / (1.0d0 + exp((mu / kbt))))
if (mu <= (-8.2d-25)) then
tmp = t_2
else if (mu <= (-6.4d-237)) then
tmp = t_1
else if (mu <= 1.25d-248) then
tmp = t_0 + (ndchar / (1.0d0 + exp((vef / kbt))))
else if (mu <= 2.8d+96) 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 - ((mu - EAccept) - Ev)) / KbT)));
double t_1 = t_0 + (NdChar / (1.0 + Math.exp((EDonor / KbT))));
double t_2 = t_0 + (NdChar / (1.0 + Math.exp((mu / KbT))));
double tmp;
if (mu <= -8.2e-25) {
tmp = t_2;
} else if (mu <= -6.4e-237) {
tmp = t_1;
} else if (mu <= 1.25e-248) {
tmp = t_0 + (NdChar / (1.0 + Math.exp((Vef / KbT))));
} else if (mu <= 2.8e+96) {
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 - ((mu - EAccept) - Ev)) / KbT))) t_1 = t_0 + (NdChar / (1.0 + math.exp((EDonor / KbT)))) t_2 = t_0 + (NdChar / (1.0 + math.exp((mu / KbT)))) tmp = 0 if mu <= -8.2e-25: tmp = t_2 elif mu <= -6.4e-237: tmp = t_1 elif mu <= 1.25e-248: tmp = t_0 + (NdChar / (1.0 + math.exp((Vef / KbT)))) elif mu <= 2.8e+96: 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(mu - EAccept) - Ev)) / KbT)))) t_1 = Float64(t_0 + Float64(NdChar / Float64(1.0 + exp(Float64(EDonor / KbT))))) t_2 = Float64(t_0 + Float64(NdChar / Float64(1.0 + exp(Float64(mu / KbT))))) tmp = 0.0 if (mu <= -8.2e-25) tmp = t_2; elseif (mu <= -6.4e-237) tmp = t_1; elseif (mu <= 1.25e-248) tmp = Float64(t_0 + Float64(NdChar / Float64(1.0 + exp(Float64(Vef / KbT))))); elseif (mu <= 2.8e+96) 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 - ((mu - EAccept) - Ev)) / KbT))); t_1 = t_0 + (NdChar / (1.0 + exp((EDonor / KbT)))); t_2 = t_0 + (NdChar / (1.0 + exp((mu / KbT)))); tmp = 0.0; if (mu <= -8.2e-25) tmp = t_2; elseif (mu <= -6.4e-237) tmp = t_1; elseif (mu <= 1.25e-248) tmp = t_0 + (NdChar / (1.0 + exp((Vef / KbT)))); elseif (mu <= 2.8e+96) 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[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(t$95$0 + N[(NdChar / N[(1.0 + N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(t$95$0 + N[(NdChar / N[(1.0 + N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[mu, -8.2e-25], t$95$2, If[LessEqual[mu, -6.4e-237], t$95$1, If[LessEqual[mu, 1.25e-248], N[(t$95$0 + N[(NdChar / N[(1.0 + N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[mu, 2.8e+96], t$95$1, t$95$2]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}}\\
t_1 := t\_0 + \frac{NdChar}{1 + e^{\frac{EDonor}{KbT}}}\\
t_2 := t\_0 + \frac{NdChar}{1 + e^{\frac{mu}{KbT}}}\\
\mathbf{if}\;mu \leq -8.2 \cdot 10^{-25}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;mu \leq -6.4 \cdot 10^{-237}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;mu \leq 1.25 \cdot 10^{-248}:\\
\;\;\;\;t\_0 + \frac{NdChar}{1 + e^{\frac{Vef}{KbT}}}\\
\mathbf{elif}\;mu \leq 2.8 \cdot 10^{+96}:\\
\;\;\;\;t\_1\\
\mathbf{else}:\\
\;\;\;\;t\_2\\
\end{array}
\end{array}
if mu < -8.19999999999999974e-25 or 2.8e96 < mu Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 89.1%
if -8.19999999999999974e-25 < mu < -6.3999999999999999e-237 or 1.25e-248 < mu < 2.8e96Initial program 100.0%
Simplified100.0%
Taylor expanded in EDonor around inf 75.3%
if -6.3999999999999999e-237 < mu < 1.25e-248Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 79.8%
Final simplification81.4%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT)))
(t_1
(+
(/ NaChar (+ 1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT))))
(/ NdChar (+ 1.0 (exp (/ mu KbT)))))))
(if (<= NaChar -4.2e+15)
t_1
(if (<= NaChar 1.45e-226)
(+ (/ NdChar (+ 1.0 t_0)) (/ NaChar (+ 1.0 (exp (/ Ev KbT)))))
(if (<= NaChar 9.6e-44)
(- (/ NaChar (+ 1.0 (exp (/ EAccept KbT)))) (/ NdChar (- -1.0 t_0)))
t_1)))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = exp(((EDonor + (mu + (Vef - Ec))) / KbT));
double t_1 = (NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / (1.0 + exp((mu / KbT))));
double tmp;
if (NaChar <= -4.2e+15) {
tmp = t_1;
} else if (NaChar <= 1.45e-226) {
tmp = (NdChar / (1.0 + t_0)) + (NaChar / (1.0 + exp((Ev / KbT))));
} else if (NaChar <= 9.6e-44) {
tmp = (NaChar / (1.0 + exp((EAccept / KbT)))) - (NdChar / (-1.0 - t_0));
} else {
tmp = t_1;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = exp(((edonor + (mu + (vef - ec))) / kbt))
t_1 = (nachar / (1.0d0 + exp(((vef - ((mu - eaccept) - ev)) / kbt)))) + (ndchar / (1.0d0 + exp((mu / kbt))))
if (nachar <= (-4.2d+15)) then
tmp = t_1
else if (nachar <= 1.45d-226) then
tmp = (ndchar / (1.0d0 + t_0)) + (nachar / (1.0d0 + exp((ev / kbt))))
else if (nachar <= 9.6d-44) then
tmp = (nachar / (1.0d0 + exp((eaccept / kbt)))) - (ndchar / ((-1.0d0) - t_0))
else
tmp = t_1
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT));
double t_1 = (NaChar / (1.0 + Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / (1.0 + Math.exp((mu / KbT))));
double tmp;
if (NaChar <= -4.2e+15) {
tmp = t_1;
} else if (NaChar <= 1.45e-226) {
tmp = (NdChar / (1.0 + t_0)) + (NaChar / (1.0 + Math.exp((Ev / KbT))));
} else if (NaChar <= 9.6e-44) {
tmp = (NaChar / (1.0 + Math.exp((EAccept / KbT)))) - (NdChar / (-1.0 - t_0));
} else {
tmp = t_1;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)) t_1 = (NaChar / (1.0 + math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / (1.0 + math.exp((mu / KbT)))) tmp = 0 if NaChar <= -4.2e+15: tmp = t_1 elif NaChar <= 1.45e-226: tmp = (NdChar / (1.0 + t_0)) + (NaChar / (1.0 + math.exp((Ev / KbT)))) elif NaChar <= 9.6e-44: tmp = (NaChar / (1.0 + math.exp((EAccept / KbT)))) - (NdChar / (-1.0 - t_0)) else: tmp = t_1 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)) t_1 = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT)))) + Float64(NdChar / Float64(1.0 + exp(Float64(mu / KbT))))) tmp = 0.0 if (NaChar <= -4.2e+15) tmp = t_1; elseif (NaChar <= 1.45e-226) tmp = Float64(Float64(NdChar / Float64(1.0 + t_0)) + Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT))))); elseif (NaChar <= 9.6e-44) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT)))) - Float64(NdChar / Float64(-1.0 - t_0))); else tmp = t_1; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = exp(((EDonor + (mu + (Vef - Ec))) / KbT)); t_1 = (NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / (1.0 + exp((mu / KbT)))); tmp = 0.0; if (NaChar <= -4.2e+15) tmp = t_1; elseif (NaChar <= 1.45e-226) tmp = (NdChar / (1.0 + t_0)) + (NaChar / (1.0 + exp((Ev / KbT)))); elseif (NaChar <= 9.6e-44) tmp = (NaChar / (1.0 + exp((EAccept / KbT)))) - (NdChar / (-1.0 - t_0)); else tmp = t_1; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(1.0 + N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -4.2e+15], t$95$1, If[LessEqual[NaChar, 1.45e-226], N[(N[(NdChar / N[(1.0 + t$95$0), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 9.6e-44], N[(N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(NdChar / N[(-1.0 - t$95$0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$1]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}\\
t_1 := \frac{NaChar}{1 + e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}} + \frac{NdChar}{1 + e^{\frac{mu}{KbT}}}\\
\mathbf{if}\;NaChar \leq -4.2 \cdot 10^{+15}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;NaChar \leq 1.45 \cdot 10^{-226}:\\
\;\;\;\;\frac{NdChar}{1 + t\_0} + \frac{NaChar}{1 + e^{\frac{Ev}{KbT}}}\\
\mathbf{elif}\;NaChar \leq 9.6 \cdot 10^{-44}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}} - \frac{NdChar}{-1 - t\_0}\\
\mathbf{else}:\\
\;\;\;\;t\_1\\
\end{array}
\end{array}
if NaChar < -4.2e15 or 9.60000000000000035e-44 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 82.0%
if -4.2e15 < NaChar < 1.45000000000000001e-226Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 77.0%
if 1.45000000000000001e-226 < NaChar < 9.60000000000000035e-44Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 81.8%
Final simplification80.4%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (or (<= Vef -3.8e+138) (not (<= Vef 8.2e-109)))
(+
(/ NdChar (+ 1.0 (exp (/ Vef KbT))))
(/ NaChar (+ 1.0 (exp (/ (- (+ Vef Ev) mu) KbT)))))
(+
(/ NaChar (+ 1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT))))
(/ NdChar (+ 1.0 (exp (/ EDonor KbT)))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((Vef <= -3.8e+138) || !(Vef <= 8.2e-109)) {
tmp = (NdChar / (1.0 + exp((Vef / KbT)))) + (NaChar / (1.0 + exp((((Vef + Ev) - mu) / KbT))));
} else {
tmp = (NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / (1.0 + exp((EDonor / KbT))));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if ((vef <= (-3.8d+138)) .or. (.not. (vef <= 8.2d-109))) then
tmp = (ndchar / (1.0d0 + exp((vef / kbt)))) + (nachar / (1.0d0 + exp((((vef + ev) - mu) / kbt))))
else
tmp = (nachar / (1.0d0 + exp(((vef - ((mu - eaccept) - ev)) / kbt)))) + (ndchar / (1.0d0 + exp((edonor / kbt))))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((Vef <= -3.8e+138) || !(Vef <= 8.2e-109)) {
tmp = (NdChar / (1.0 + Math.exp((Vef / KbT)))) + (NaChar / (1.0 + Math.exp((((Vef + Ev) - mu) / KbT))));
} else {
tmp = (NaChar / (1.0 + Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / (1.0 + Math.exp((EDonor / KbT))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if (Vef <= -3.8e+138) or not (Vef <= 8.2e-109): tmp = (NdChar / (1.0 + math.exp((Vef / KbT)))) + (NaChar / (1.0 + math.exp((((Vef + Ev) - mu) / KbT)))) else: tmp = (NaChar / (1.0 + math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / (1.0 + math.exp((EDonor / KbT)))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if ((Vef <= -3.8e+138) || !(Vef <= 8.2e-109)) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Vef / KbT)))) + Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(Vef + Ev) - mu) / KbT))))); else tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT)))) + Float64(NdChar / Float64(1.0 + exp(Float64(EDonor / KbT))))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if ((Vef <= -3.8e+138) || ~((Vef <= 8.2e-109))) tmp = (NdChar / (1.0 + exp((Vef / KbT)))) + (NaChar / (1.0 + exp((((Vef + Ev) - mu) / KbT)))); else tmp = (NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / (1.0 + exp((EDonor / KbT)))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[Or[LessEqual[Vef, -3.8e+138], N[Not[LessEqual[Vef, 8.2e-109]], $MachinePrecision]], N[(N[(NdChar / N[(1.0 + N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Exp[N[(N[(N[(Vef + Ev), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(1.0 + N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;Vef \leq -3.8 \cdot 10^{+138} \lor \neg \left(Vef \leq 8.2 \cdot 10^{-109}\right):\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{Vef}{KbT}}} + \frac{NaChar}{1 + e^{\frac{\left(Vef + Ev\right) - mu}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}} + \frac{NdChar}{1 + e^{\frac{EDonor}{KbT}}}\\
\end{array}
\end{array}
if Vef < -3.80000000000000012e138 or 8.2000000000000004e-109 < Vef Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 81.7%
Taylor expanded in EAccept around 0 77.4%
if -3.80000000000000012e138 < Vef < 8.2000000000000004e-109Initial program 100.0%
Simplified100.0%
Taylor expanded in EDonor around inf 75.3%
Final simplification76.2%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (or (<= NaChar -2.05e-42) (not (<= NaChar 4e-44)))
(+
(/ NaChar (+ 1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT))))
(/ NdChar (+ 1.0 (exp (/ mu KbT)))))
(-
(/ NaChar (+ 1.0 (exp (/ EAccept KbT))))
(/ NdChar (- -1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT)))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NaChar <= -2.05e-42) || !(NaChar <= 4e-44)) {
tmp = (NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / (1.0 + exp((mu / KbT))));
} else {
tmp = (NaChar / (1.0 + exp((EAccept / KbT)))) - (NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT))));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if ((nachar <= (-2.05d-42)) .or. (.not. (nachar <= 4d-44))) then
tmp = (nachar / (1.0d0 + exp(((vef - ((mu - eaccept) - ev)) / kbt)))) + (ndchar / (1.0d0 + exp((mu / kbt))))
else
tmp = (nachar / (1.0d0 + exp((eaccept / kbt)))) - (ndchar / ((-1.0d0) - exp(((edonor + (mu + (vef - ec))) / kbt))))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NaChar <= -2.05e-42) || !(NaChar <= 4e-44)) {
tmp = (NaChar / (1.0 + Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / (1.0 + Math.exp((mu / KbT))));
} else {
tmp = (NaChar / (1.0 + Math.exp((EAccept / KbT)))) - (NdChar / (-1.0 - Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if (NaChar <= -2.05e-42) or not (NaChar <= 4e-44): tmp = (NaChar / (1.0 + math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / (1.0 + math.exp((mu / KbT)))) else: tmp = (NaChar / (1.0 + math.exp((EAccept / KbT)))) - (NdChar / (-1.0 - math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if ((NaChar <= -2.05e-42) || !(NaChar <= 4e-44)) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT)))) + Float64(NdChar / Float64(1.0 + exp(Float64(mu / KbT))))); else tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT)))) - Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT))))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if ((NaChar <= -2.05e-42) || ~((NaChar <= 4e-44))) tmp = (NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / (1.0 + exp((mu / KbT)))); else tmp = (NaChar / (1.0 + exp((EAccept / KbT)))) - (NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT)))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[Or[LessEqual[NaChar, -2.05e-42], N[Not[LessEqual[NaChar, 4e-44]], $MachinePrecision]], N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(1.0 + N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(NdChar / N[(-1.0 - N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NaChar \leq -2.05 \cdot 10^{-42} \lor \neg \left(NaChar \leq 4 \cdot 10^{-44}\right):\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}} + \frac{NdChar}{1 + e^{\frac{mu}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}} - \frac{NdChar}{-1 - e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}}\\
\end{array}
\end{array}
if NaChar < -2.0500000000000001e-42 or 3.99999999999999981e-44 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 80.7%
if -2.0500000000000001e-42 < NaChar < 3.99999999999999981e-44Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 82.1%
Final simplification81.3%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NaChar (+ 1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT)))))
(t_1 (/ NdChar (+ 1.0 (exp (/ Vef KbT))))))
(if (<= Vef -1e+141)
(+ t_1 (/ NaChar (+ 1.0 (exp (/ (- (+ Vef Ev) mu) KbT)))))
(if (<= Vef 1.9e-125)
(+ t_0 (/ NdChar (+ 1.0 (exp (/ EDonor KbT)))))
(+ t_0 t_1)))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)));
double t_1 = NdChar / (1.0 + exp((Vef / KbT)));
double tmp;
if (Vef <= -1e+141) {
tmp = t_1 + (NaChar / (1.0 + exp((((Vef + Ev) - mu) / KbT))));
} else if (Vef <= 1.9e-125) {
tmp = t_0 + (NdChar / (1.0 + exp((EDonor / KbT))));
} else {
tmp = t_0 + 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 - ((mu - eaccept) - ev)) / kbt)))
t_1 = ndchar / (1.0d0 + exp((vef / kbt)))
if (vef <= (-1d+141)) then
tmp = t_1 + (nachar / (1.0d0 + exp((((vef + ev) - mu) / kbt))))
else if (vef <= 1.9d-125) then
tmp = t_0 + (ndchar / (1.0d0 + exp((edonor / kbt))))
else
tmp = t_0 + 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 - ((mu - EAccept) - Ev)) / KbT)));
double t_1 = NdChar / (1.0 + Math.exp((Vef / KbT)));
double tmp;
if (Vef <= -1e+141) {
tmp = t_1 + (NaChar / (1.0 + Math.exp((((Vef + Ev) - mu) / KbT))));
} else if (Vef <= 1.9e-125) {
tmp = t_0 + (NdChar / (1.0 + Math.exp((EDonor / KbT))));
} else {
tmp = t_0 + t_1;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NaChar / (1.0 + math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT))) t_1 = NdChar / (1.0 + math.exp((Vef / KbT))) tmp = 0 if Vef <= -1e+141: tmp = t_1 + (NaChar / (1.0 + math.exp((((Vef + Ev) - mu) / KbT)))) elif Vef <= 1.9e-125: tmp = t_0 + (NdChar / (1.0 + math.exp((EDonor / KbT)))) else: tmp = t_0 + 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(mu - EAccept) - Ev)) / KbT)))) t_1 = Float64(NdChar / Float64(1.0 + exp(Float64(Vef / KbT)))) tmp = 0.0 if (Vef <= -1e+141) tmp = Float64(t_1 + Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(Vef + Ev) - mu) / KbT))))); elseif (Vef <= 1.9e-125) tmp = Float64(t_0 + Float64(NdChar / Float64(1.0 + exp(Float64(EDonor / KbT))))); else tmp = Float64(t_0 + 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 - ((mu - EAccept) - Ev)) / KbT))); t_1 = NdChar / (1.0 + exp((Vef / KbT))); tmp = 0.0; if (Vef <= -1e+141) tmp = t_1 + (NaChar / (1.0 + exp((((Vef + Ev) - mu) / KbT)))); elseif (Vef <= 1.9e-125) tmp = t_0 + (NdChar / (1.0 + exp((EDonor / KbT)))); else tmp = t_0 + 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[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(NdChar / N[(1.0 + N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[Vef, -1e+141], N[(t$95$1 + N[(NaChar / N[(1.0 + N[Exp[N[(N[(N[(Vef + Ev), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[Vef, 1.9e-125], N[(t$95$0 + N[(NdChar / N[(1.0 + N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(t$95$0 + t$95$1), $MachinePrecision]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}}\\
t_1 := \frac{NdChar}{1 + e^{\frac{Vef}{KbT}}}\\
\mathbf{if}\;Vef \leq -1 \cdot 10^{+141}:\\
\;\;\;\;t\_1 + \frac{NaChar}{1 + e^{\frac{\left(Vef + Ev\right) - mu}{KbT}}}\\
\mathbf{elif}\;Vef \leq 1.9 \cdot 10^{-125}:\\
\;\;\;\;t\_0 + \frac{NdChar}{1 + e^{\frac{EDonor}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;t\_0 + t\_1\\
\end{array}
\end{array}
if Vef < -1.00000000000000002e141Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 88.0%
Taylor expanded in EAccept around 0 88.0%
if -1.00000000000000002e141 < Vef < 1.9000000000000001e-125Initial program 100.0%
Simplified100.0%
Taylor expanded in EDonor around inf 74.6%
if 1.9000000000000001e-125 < Vef Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 80.2%
Final simplification78.1%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NaChar (+ 1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT)))))
(t_1
(-
(/ NaChar (+ (/ EAccept KbT) 2.0))
(/ NdChar (- -1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT)))))))
(if (<= NaChar -1.25e-42)
(-
t_0
(/
NdChar
(+
-1.0
(*
EDonor
(+
(/ (+ (/ Ec KbT) (- -1.0 (+ (/ Vef KbT) (/ mu KbT)))) EDonor)
(/ -1.0 KbT))))))
(if (<= NaChar 3.2e-157)
t_1
(if (<= NaChar 8e+44)
(+
t_0
(/
NdChar
(+
1.0
(*
Vef
(+
(/ 1.0 KbT)
(*
EDonor
(/
(+
(/ 1.0 KbT)
(+
(/ 1.0 EDonor)
(- (/ mu (* EDonor KbT)) (/ (/ Ec KbT) EDonor))))
Vef)))))))
(if (<= NaChar 8.8e+58)
t_1
(+ t_0 (/ NdChar (+ 1.0 (/ Vef 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 - ((mu - EAccept) - Ev)) / KbT)));
double t_1 = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT))));
double tmp;
if (NaChar <= -1.25e-42) {
tmp = t_0 - (NdChar / (-1.0 + (EDonor * ((((Ec / KbT) + (-1.0 - ((Vef / KbT) + (mu / KbT)))) / EDonor) + (-1.0 / KbT)))));
} else if (NaChar <= 3.2e-157) {
tmp = t_1;
} else if (NaChar <= 8e+44) {
tmp = t_0 + (NdChar / (1.0 + (Vef * ((1.0 / KbT) + (EDonor * (((1.0 / KbT) + ((1.0 / EDonor) + ((mu / (EDonor * KbT)) - ((Ec / KbT) / EDonor)))) / Vef))))));
} else if (NaChar <= 8.8e+58) {
tmp = t_1;
} else {
tmp = t_0 + (NdChar / (1.0 + (Vef / KbT)));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = nachar / (1.0d0 + exp(((vef - ((mu - eaccept) - ev)) / kbt)))
t_1 = (nachar / ((eaccept / kbt) + 2.0d0)) - (ndchar / ((-1.0d0) - exp(((edonor + (mu + (vef - ec))) / kbt))))
if (nachar <= (-1.25d-42)) then
tmp = t_0 - (ndchar / ((-1.0d0) + (edonor * ((((ec / kbt) + ((-1.0d0) - ((vef / kbt) + (mu / kbt)))) / edonor) + ((-1.0d0) / kbt)))))
else if (nachar <= 3.2d-157) then
tmp = t_1
else if (nachar <= 8d+44) then
tmp = t_0 + (ndchar / (1.0d0 + (vef * ((1.0d0 / kbt) + (edonor * (((1.0d0 / kbt) + ((1.0d0 / edonor) + ((mu / (edonor * kbt)) - ((ec / kbt) / edonor)))) / vef))))))
else if (nachar <= 8.8d+58) then
tmp = t_1
else
tmp = t_0 + (ndchar / (1.0d0 + (vef / kbt)))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NaChar / (1.0 + Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)));
double t_1 = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT))));
double tmp;
if (NaChar <= -1.25e-42) {
tmp = t_0 - (NdChar / (-1.0 + (EDonor * ((((Ec / KbT) + (-1.0 - ((Vef / KbT) + (mu / KbT)))) / EDonor) + (-1.0 / KbT)))));
} else if (NaChar <= 3.2e-157) {
tmp = t_1;
} else if (NaChar <= 8e+44) {
tmp = t_0 + (NdChar / (1.0 + (Vef * ((1.0 / KbT) + (EDonor * (((1.0 / KbT) + ((1.0 / EDonor) + ((mu / (EDonor * KbT)) - ((Ec / KbT) / EDonor)))) / Vef))))));
} else if (NaChar <= 8.8e+58) {
tmp = t_1;
} else {
tmp = t_0 + (NdChar / (1.0 + (Vef / KbT)));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NaChar / (1.0 + math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT))) t_1 = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) tmp = 0 if NaChar <= -1.25e-42: tmp = t_0 - (NdChar / (-1.0 + (EDonor * ((((Ec / KbT) + (-1.0 - ((Vef / KbT) + (mu / KbT)))) / EDonor) + (-1.0 / KbT))))) elif NaChar <= 3.2e-157: tmp = t_1 elif NaChar <= 8e+44: tmp = t_0 + (NdChar / (1.0 + (Vef * ((1.0 / KbT) + (EDonor * (((1.0 / KbT) + ((1.0 / EDonor) + ((mu / (EDonor * KbT)) - ((Ec / KbT) / EDonor)))) / Vef)))))) elif NaChar <= 8.8e+58: tmp = t_1 else: tmp = t_0 + (NdChar / (1.0 + (Vef / 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(mu - EAccept) - Ev)) / KbT)))) t_1 = Float64(Float64(NaChar / Float64(Float64(EAccept / KbT) + 2.0)) - Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT))))) tmp = 0.0 if (NaChar <= -1.25e-42) tmp = Float64(t_0 - Float64(NdChar / Float64(-1.0 + Float64(EDonor * Float64(Float64(Float64(Float64(Ec / KbT) + Float64(-1.0 - Float64(Float64(Vef / KbT) + Float64(mu / KbT)))) / EDonor) + Float64(-1.0 / KbT)))))); elseif (NaChar <= 3.2e-157) tmp = t_1; elseif (NaChar <= 8e+44) tmp = Float64(t_0 + Float64(NdChar / Float64(1.0 + Float64(Vef * Float64(Float64(1.0 / KbT) + Float64(EDonor * Float64(Float64(Float64(1.0 / KbT) + Float64(Float64(1.0 / EDonor) + Float64(Float64(mu / Float64(EDonor * KbT)) - Float64(Float64(Ec / KbT) / EDonor)))) / Vef))))))); elseif (NaChar <= 8.8e+58) tmp = t_1; else tmp = Float64(t_0 + Float64(NdChar / Float64(1.0 + Float64(Vef / 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 - ((mu - EAccept) - Ev)) / KbT))); t_1 = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT)))); tmp = 0.0; if (NaChar <= -1.25e-42) tmp = t_0 - (NdChar / (-1.0 + (EDonor * ((((Ec / KbT) + (-1.0 - ((Vef / KbT) + (mu / KbT)))) / EDonor) + (-1.0 / KbT))))); elseif (NaChar <= 3.2e-157) tmp = t_1; elseif (NaChar <= 8e+44) tmp = t_0 + (NdChar / (1.0 + (Vef * ((1.0 / KbT) + (EDonor * (((1.0 / KbT) + ((1.0 / EDonor) + ((mu / (EDonor * KbT)) - ((Ec / KbT) / EDonor)))) / Vef)))))); elseif (NaChar <= 8.8e+58) tmp = t_1; else tmp = t_0 + (NdChar / (1.0 + (Vef / 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[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NaChar / N[(N[(EAccept / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision] - N[(NdChar / N[(-1.0 - N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -1.25e-42], N[(t$95$0 - N[(NdChar / N[(-1.0 + N[(EDonor * N[(N[(N[(N[(Ec / KbT), $MachinePrecision] + N[(-1.0 - N[(N[(Vef / KbT), $MachinePrecision] + N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / EDonor), $MachinePrecision] + N[(-1.0 / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 3.2e-157], t$95$1, If[LessEqual[NaChar, 8e+44], N[(t$95$0 + N[(NdChar / N[(1.0 + N[(Vef * N[(N[(1.0 / KbT), $MachinePrecision] + N[(EDonor * N[(N[(N[(1.0 / KbT), $MachinePrecision] + N[(N[(1.0 / EDonor), $MachinePrecision] + N[(N[(mu / N[(EDonor * KbT), $MachinePrecision]), $MachinePrecision] - N[(N[(Ec / KbT), $MachinePrecision] / EDonor), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / Vef), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 8.8e+58], t$95$1, N[(t$95$0 + N[(NdChar / N[(1.0 + N[(Vef / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}}\\
t_1 := \frac{NaChar}{\frac{EAccept}{KbT} + 2} - \frac{NdChar}{-1 - e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}}\\
\mathbf{if}\;NaChar \leq -1.25 \cdot 10^{-42}:\\
\;\;\;\;t\_0 - \frac{NdChar}{-1 + EDonor \cdot \left(\frac{\frac{Ec}{KbT} + \left(-1 - \left(\frac{Vef}{KbT} + \frac{mu}{KbT}\right)\right)}{EDonor} + \frac{-1}{KbT}\right)}\\
\mathbf{elif}\;NaChar \leq 3.2 \cdot 10^{-157}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;NaChar \leq 8 \cdot 10^{+44}:\\
\;\;\;\;t\_0 + \frac{NdChar}{1 + Vef \cdot \left(\frac{1}{KbT} + EDonor \cdot \frac{\frac{1}{KbT} + \left(\frac{1}{EDonor} + \left(\frac{mu}{EDonor \cdot KbT} - \frac{\frac{Ec}{KbT}}{EDonor}\right)\right)}{Vef}\right)}\\
\mathbf{elif}\;NaChar \leq 8.8 \cdot 10^{+58}:\\
\;\;\;\;t\_1\\
\mathbf{else}:\\
\;\;\;\;t\_0 + \frac{NdChar}{1 + \frac{Vef}{KbT}}\\
\end{array}
\end{array}
if NaChar < -1.25000000000000001e-42Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 67.3%
Taylor expanded in EDonor around -inf 75.4%
if -1.25000000000000001e-42 < NaChar < 3.20000000000000021e-157 or 8.0000000000000007e44 < NaChar < 8.8000000000000003e58Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 79.7%
Taylor expanded in EAccept around 0 68.1%
if 3.20000000000000021e-157 < NaChar < 8.0000000000000007e44Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 62.2%
Taylor expanded in EDonor around -inf 67.7%
Taylor expanded in Vef around inf 67.7%
associate-/l*67.7%
mul-1-neg67.7%
associate--l+67.7%
*-commutative67.7%
associate-/l/70.5%
Simplified70.5%
if 8.8000000000000003e58 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 62.7%
Taylor expanded in Vef around inf 75.0%
Final simplification72.1%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0
(-
(/ NaChar (+ (/ EAccept KbT) 2.0))
(/ NdChar (- -1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT))))))
(t_1 (/ NaChar (+ 1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT))))))
(if (<= NaChar -2.7e-41)
(-
t_1
(/
NdChar
(- -1.0 (/ (* EDonor (+ 1.0 (/ (- (+ mu Vef) Ec) EDonor))) KbT))))
(if (<= NaChar 3.5e-38)
t_0
(if (<= NaChar 6.6e+44)
(+
t_1
(/
NdChar
(-
1.0
(+
(/ Ec KbT)
(+
-1.0
(*
EDonor
(-
(/ -1.0 KbT)
(+ (/ mu (* EDonor KbT)) (/ Vef (* EDonor KbT))))))))))
(if (<= NaChar 8e+54) t_0 (+ t_1 (/ NdChar (+ 1.0 (/ Vef 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 / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT))));
double t_1 = NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)));
double tmp;
if (NaChar <= -2.7e-41) {
tmp = t_1 - (NdChar / (-1.0 - ((EDonor * (1.0 + (((mu + Vef) - Ec) / EDonor))) / KbT)));
} else if (NaChar <= 3.5e-38) {
tmp = t_0;
} else if (NaChar <= 6.6e+44) {
tmp = t_1 + (NdChar / (1.0 - ((Ec / KbT) + (-1.0 + (EDonor * ((-1.0 / KbT) - ((mu / (EDonor * KbT)) + (Vef / (EDonor * KbT)))))))));
} else if (NaChar <= 8e+54) {
tmp = t_0;
} else {
tmp = t_1 + (NdChar / (1.0 + (Vef / KbT)));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = (nachar / ((eaccept / kbt) + 2.0d0)) - (ndchar / ((-1.0d0) - exp(((edonor + (mu + (vef - ec))) / kbt))))
t_1 = nachar / (1.0d0 + exp(((vef - ((mu - eaccept) - ev)) / kbt)))
if (nachar <= (-2.7d-41)) then
tmp = t_1 - (ndchar / ((-1.0d0) - ((edonor * (1.0d0 + (((mu + vef) - ec) / edonor))) / kbt)))
else if (nachar <= 3.5d-38) then
tmp = t_0
else if (nachar <= 6.6d+44) then
tmp = t_1 + (ndchar / (1.0d0 - ((ec / kbt) + ((-1.0d0) + (edonor * (((-1.0d0) / kbt) - ((mu / (edonor * kbt)) + (vef / (edonor * kbt)))))))))
else if (nachar <= 8d+54) then
tmp = t_0
else
tmp = t_1 + (ndchar / (1.0d0 + (vef / kbt)))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT))));
double t_1 = NaChar / (1.0 + Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)));
double tmp;
if (NaChar <= -2.7e-41) {
tmp = t_1 - (NdChar / (-1.0 - ((EDonor * (1.0 + (((mu + Vef) - Ec) / EDonor))) / KbT)));
} else if (NaChar <= 3.5e-38) {
tmp = t_0;
} else if (NaChar <= 6.6e+44) {
tmp = t_1 + (NdChar / (1.0 - ((Ec / KbT) + (-1.0 + (EDonor * ((-1.0 / KbT) - ((mu / (EDonor * KbT)) + (Vef / (EDonor * KbT)))))))));
} else if (NaChar <= 8e+54) {
tmp = t_0;
} else {
tmp = t_1 + (NdChar / (1.0 + (Vef / KbT)));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) t_1 = NaChar / (1.0 + math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT))) tmp = 0 if NaChar <= -2.7e-41: tmp = t_1 - (NdChar / (-1.0 - ((EDonor * (1.0 + (((mu + Vef) - Ec) / EDonor))) / KbT))) elif NaChar <= 3.5e-38: tmp = t_0 elif NaChar <= 6.6e+44: tmp = t_1 + (NdChar / (1.0 - ((Ec / KbT) + (-1.0 + (EDonor * ((-1.0 / KbT) - ((mu / (EDonor * KbT)) + (Vef / (EDonor * KbT))))))))) elif NaChar <= 8e+54: tmp = t_0 else: tmp = t_1 + (NdChar / (1.0 + (Vef / KbT))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(NaChar / Float64(Float64(EAccept / KbT) + 2.0)) - Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT))))) t_1 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT)))) tmp = 0.0 if (NaChar <= -2.7e-41) tmp = Float64(t_1 - Float64(NdChar / Float64(-1.0 - Float64(Float64(EDonor * Float64(1.0 + Float64(Float64(Float64(mu + Vef) - Ec) / EDonor))) / KbT)))); elseif (NaChar <= 3.5e-38) tmp = t_0; elseif (NaChar <= 6.6e+44) tmp = Float64(t_1 + Float64(NdChar / Float64(1.0 - Float64(Float64(Ec / KbT) + Float64(-1.0 + Float64(EDonor * Float64(Float64(-1.0 / KbT) - Float64(Float64(mu / Float64(EDonor * KbT)) + Float64(Vef / Float64(EDonor * KbT)))))))))); elseif (NaChar <= 8e+54) tmp = t_0; else tmp = Float64(t_1 + Float64(NdChar / Float64(1.0 + Float64(Vef / KbT)))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT)))); t_1 = NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT))); tmp = 0.0; if (NaChar <= -2.7e-41) tmp = t_1 - (NdChar / (-1.0 - ((EDonor * (1.0 + (((mu + Vef) - Ec) / EDonor))) / KbT))); elseif (NaChar <= 3.5e-38) tmp = t_0; elseif (NaChar <= 6.6e+44) tmp = t_1 + (NdChar / (1.0 - ((Ec / KbT) + (-1.0 + (EDonor * ((-1.0 / KbT) - ((mu / (EDonor * KbT)) + (Vef / (EDonor * KbT))))))))); elseif (NaChar <= 8e+54) tmp = t_0; else tmp = t_1 + (NdChar / (1.0 + (Vef / KbT))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(NaChar / N[(N[(EAccept / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision] - N[(NdChar / N[(-1.0 - N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -2.7e-41], N[(t$95$1 - N[(NdChar / N[(-1.0 - N[(N[(EDonor * N[(1.0 + N[(N[(N[(mu + Vef), $MachinePrecision] - Ec), $MachinePrecision] / EDonor), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 3.5e-38], t$95$0, If[LessEqual[NaChar, 6.6e+44], N[(t$95$1 + N[(NdChar / N[(1.0 - N[(N[(Ec / KbT), $MachinePrecision] + N[(-1.0 + N[(EDonor * N[(N[(-1.0 / KbT), $MachinePrecision] - N[(N[(mu / N[(EDonor * KbT), $MachinePrecision]), $MachinePrecision] + N[(Vef / N[(EDonor * KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 8e+54], t$95$0, N[(t$95$1 + N[(NdChar / N[(1.0 + N[(Vef / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{\frac{EAccept}{KbT} + 2} - \frac{NdChar}{-1 - e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}}\\
t_1 := \frac{NaChar}{1 + e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}}\\
\mathbf{if}\;NaChar \leq -2.7 \cdot 10^{-41}:\\
\;\;\;\;t\_1 - \frac{NdChar}{-1 - \frac{EDonor \cdot \left(1 + \frac{\left(mu + Vef\right) - Ec}{EDonor}\right)}{KbT}}\\
\mathbf{elif}\;NaChar \leq 3.5 \cdot 10^{-38}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;NaChar \leq 6.6 \cdot 10^{+44}:\\
\;\;\;\;t\_1 + \frac{NdChar}{1 - \left(\frac{Ec}{KbT} + \left(-1 + EDonor \cdot \left(\frac{-1}{KbT} - \left(\frac{mu}{EDonor \cdot KbT} + \frac{Vef}{EDonor \cdot KbT}\right)\right)\right)\right)}\\
\mathbf{elif}\;NaChar \leq 8 \cdot 10^{+54}:\\
\;\;\;\;t\_0\\
\mathbf{else}:\\
\;\;\;\;t\_1 + \frac{NdChar}{1 + \frac{Vef}{KbT}}\\
\end{array}
\end{array}
if NaChar < -2.7e-41Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 67.3%
Taylor expanded in EDonor around -inf 75.4%
Taylor expanded in KbT around 0 73.6%
if -2.7e-41 < NaChar < 3.5000000000000001e-38 or 6.60000000000000027e44 < NaChar < 8.0000000000000006e54Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 81.9%
Taylor expanded in EAccept around 0 66.6%
if 3.5000000000000001e-38 < NaChar < 6.60000000000000027e44Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 65.8%
Taylor expanded in EDonor around inf 80.0%
if 8.0000000000000006e54 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 62.7%
Taylor expanded in Vef around inf 75.0%
Final simplification71.2%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NaChar (+ 1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT)))))
(t_1
(-
(/ NaChar (+ (/ EAccept KbT) 2.0))
(/ NdChar (- -1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT)))))))
(if (<= NaChar -1.6e-43)
(-
t_0
(/
NdChar
(+
-1.0
(*
EDonor
(+
(/ (+ (/ Ec KbT) (- -1.0 (+ (/ Vef KbT) (/ mu KbT)))) EDonor)
(/ -1.0 KbT))))))
(if (<= NaChar 1.85e-40)
t_1
(if (<= NaChar 5.4e+44)
(+
t_0
(/
NdChar
(-
1.0
(+
(/ Ec KbT)
(+
-1.0
(*
EDonor
(-
(/ -1.0 KbT)
(+ (/ mu (* EDonor KbT)) (/ Vef (* EDonor KbT))))))))))
(if (<= NaChar 4.4e+61)
t_1
(+ t_0 (/ NdChar (+ 1.0 (/ Vef 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 - ((mu - EAccept) - Ev)) / KbT)));
double t_1 = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT))));
double tmp;
if (NaChar <= -1.6e-43) {
tmp = t_0 - (NdChar / (-1.0 + (EDonor * ((((Ec / KbT) + (-1.0 - ((Vef / KbT) + (mu / KbT)))) / EDonor) + (-1.0 / KbT)))));
} else if (NaChar <= 1.85e-40) {
tmp = t_1;
} else if (NaChar <= 5.4e+44) {
tmp = t_0 + (NdChar / (1.0 - ((Ec / KbT) + (-1.0 + (EDonor * ((-1.0 / KbT) - ((mu / (EDonor * KbT)) + (Vef / (EDonor * KbT)))))))));
} else if (NaChar <= 4.4e+61) {
tmp = t_1;
} else {
tmp = t_0 + (NdChar / (1.0 + (Vef / KbT)));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = nachar / (1.0d0 + exp(((vef - ((mu - eaccept) - ev)) / kbt)))
t_1 = (nachar / ((eaccept / kbt) + 2.0d0)) - (ndchar / ((-1.0d0) - exp(((edonor + (mu + (vef - ec))) / kbt))))
if (nachar <= (-1.6d-43)) then
tmp = t_0 - (ndchar / ((-1.0d0) + (edonor * ((((ec / kbt) + ((-1.0d0) - ((vef / kbt) + (mu / kbt)))) / edonor) + ((-1.0d0) / kbt)))))
else if (nachar <= 1.85d-40) then
tmp = t_1
else if (nachar <= 5.4d+44) then
tmp = t_0 + (ndchar / (1.0d0 - ((ec / kbt) + ((-1.0d0) + (edonor * (((-1.0d0) / kbt) - ((mu / (edonor * kbt)) + (vef / (edonor * kbt)))))))))
else if (nachar <= 4.4d+61) then
tmp = t_1
else
tmp = t_0 + (ndchar / (1.0d0 + (vef / kbt)))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NaChar / (1.0 + Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)));
double t_1 = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT))));
double tmp;
if (NaChar <= -1.6e-43) {
tmp = t_0 - (NdChar / (-1.0 + (EDonor * ((((Ec / KbT) + (-1.0 - ((Vef / KbT) + (mu / KbT)))) / EDonor) + (-1.0 / KbT)))));
} else if (NaChar <= 1.85e-40) {
tmp = t_1;
} else if (NaChar <= 5.4e+44) {
tmp = t_0 + (NdChar / (1.0 - ((Ec / KbT) + (-1.0 + (EDonor * ((-1.0 / KbT) - ((mu / (EDonor * KbT)) + (Vef / (EDonor * KbT)))))))));
} else if (NaChar <= 4.4e+61) {
tmp = t_1;
} else {
tmp = t_0 + (NdChar / (1.0 + (Vef / KbT)));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NaChar / (1.0 + math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT))) t_1 = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) tmp = 0 if NaChar <= -1.6e-43: tmp = t_0 - (NdChar / (-1.0 + (EDonor * ((((Ec / KbT) + (-1.0 - ((Vef / KbT) + (mu / KbT)))) / EDonor) + (-1.0 / KbT))))) elif NaChar <= 1.85e-40: tmp = t_1 elif NaChar <= 5.4e+44: tmp = t_0 + (NdChar / (1.0 - ((Ec / KbT) + (-1.0 + (EDonor * ((-1.0 / KbT) - ((mu / (EDonor * KbT)) + (Vef / (EDonor * KbT))))))))) elif NaChar <= 4.4e+61: tmp = t_1 else: tmp = t_0 + (NdChar / (1.0 + (Vef / 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(mu - EAccept) - Ev)) / KbT)))) t_1 = Float64(Float64(NaChar / Float64(Float64(EAccept / KbT) + 2.0)) - Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT))))) tmp = 0.0 if (NaChar <= -1.6e-43) tmp = Float64(t_0 - Float64(NdChar / Float64(-1.0 + Float64(EDonor * Float64(Float64(Float64(Float64(Ec / KbT) + Float64(-1.0 - Float64(Float64(Vef / KbT) + Float64(mu / KbT)))) / EDonor) + Float64(-1.0 / KbT)))))); elseif (NaChar <= 1.85e-40) tmp = t_1; elseif (NaChar <= 5.4e+44) tmp = Float64(t_0 + Float64(NdChar / Float64(1.0 - Float64(Float64(Ec / KbT) + Float64(-1.0 + Float64(EDonor * Float64(Float64(-1.0 / KbT) - Float64(Float64(mu / Float64(EDonor * KbT)) + Float64(Vef / Float64(EDonor * KbT)))))))))); elseif (NaChar <= 4.4e+61) tmp = t_1; else tmp = Float64(t_0 + Float64(NdChar / Float64(1.0 + Float64(Vef / 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 - ((mu - EAccept) - Ev)) / KbT))); t_1 = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT)))); tmp = 0.0; if (NaChar <= -1.6e-43) tmp = t_0 - (NdChar / (-1.0 + (EDonor * ((((Ec / KbT) + (-1.0 - ((Vef / KbT) + (mu / KbT)))) / EDonor) + (-1.0 / KbT))))); elseif (NaChar <= 1.85e-40) tmp = t_1; elseif (NaChar <= 5.4e+44) tmp = t_0 + (NdChar / (1.0 - ((Ec / KbT) + (-1.0 + (EDonor * ((-1.0 / KbT) - ((mu / (EDonor * KbT)) + (Vef / (EDonor * KbT))))))))); elseif (NaChar <= 4.4e+61) tmp = t_1; else tmp = t_0 + (NdChar / (1.0 + (Vef / 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[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NaChar / N[(N[(EAccept / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision] - N[(NdChar / N[(-1.0 - N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -1.6e-43], N[(t$95$0 - N[(NdChar / N[(-1.0 + N[(EDonor * N[(N[(N[(N[(Ec / KbT), $MachinePrecision] + N[(-1.0 - N[(N[(Vef / KbT), $MachinePrecision] + N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / EDonor), $MachinePrecision] + N[(-1.0 / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 1.85e-40], t$95$1, If[LessEqual[NaChar, 5.4e+44], N[(t$95$0 + N[(NdChar / N[(1.0 - N[(N[(Ec / KbT), $MachinePrecision] + N[(-1.0 + N[(EDonor * N[(N[(-1.0 / KbT), $MachinePrecision] - N[(N[(mu / N[(EDonor * KbT), $MachinePrecision]), $MachinePrecision] + N[(Vef / N[(EDonor * KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 4.4e+61], t$95$1, N[(t$95$0 + N[(NdChar / N[(1.0 + N[(Vef / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}}\\
t_1 := \frac{NaChar}{\frac{EAccept}{KbT} + 2} - \frac{NdChar}{-1 - e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}}\\
\mathbf{if}\;NaChar \leq -1.6 \cdot 10^{-43}:\\
\;\;\;\;t\_0 - \frac{NdChar}{-1 + EDonor \cdot \left(\frac{\frac{Ec}{KbT} + \left(-1 - \left(\frac{Vef}{KbT} + \frac{mu}{KbT}\right)\right)}{EDonor} + \frac{-1}{KbT}\right)}\\
\mathbf{elif}\;NaChar \leq 1.85 \cdot 10^{-40}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;NaChar \leq 5.4 \cdot 10^{+44}:\\
\;\;\;\;t\_0 + \frac{NdChar}{1 - \left(\frac{Ec}{KbT} + \left(-1 + EDonor \cdot \left(\frac{-1}{KbT} - \left(\frac{mu}{EDonor \cdot KbT} + \frac{Vef}{EDonor \cdot KbT}\right)\right)\right)\right)}\\
\mathbf{elif}\;NaChar \leq 4.4 \cdot 10^{+61}:\\
\;\;\;\;t\_1\\
\mathbf{else}:\\
\;\;\;\;t\_0 + \frac{NdChar}{1 + \frac{Vef}{KbT}}\\
\end{array}
\end{array}
if NaChar < -1.59999999999999992e-43Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 67.3%
Taylor expanded in EDonor around -inf 75.4%
if -1.59999999999999992e-43 < NaChar < 1.84999999999999999e-40 or 5.4e44 < NaChar < 4.4000000000000001e61Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 81.9%
Taylor expanded in EAccept around 0 66.6%
if 1.84999999999999999e-40 < NaChar < 5.4e44Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 65.8%
Taylor expanded in EDonor around inf 80.0%
if 4.4000000000000001e61 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 62.7%
Taylor expanded in Vef around inf 75.0%
Final simplification71.8%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0
(-
(/ NaChar (+ (/ EAccept KbT) 2.0))
(/ NdChar (- -1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT))))))
(t_1 (/ NaChar (+ 1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT)))))
(t_2 (+ t_1 (/ NdChar (+ 1.0 (/ EDonor KbT))))))
(if (<= NaChar -3.75e-34)
t_2
(if (<= NaChar 200.0)
t_0
(if (<= NaChar 7e+44)
t_2
(if (<= NaChar 2.2e+58)
t_0
(if (<= NaChar 1.12e+208) (+ t_1 (/ NdChar 2.0)) t_2)))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT))));
double t_1 = NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)));
double t_2 = t_1 + (NdChar / (1.0 + (EDonor / KbT)));
double tmp;
if (NaChar <= -3.75e-34) {
tmp = t_2;
} else if (NaChar <= 200.0) {
tmp = t_0;
} else if (NaChar <= 7e+44) {
tmp = t_2;
} else if (NaChar <= 2.2e+58) {
tmp = t_0;
} else if (NaChar <= 1.12e+208) {
tmp = t_1 + (NdChar / 2.0);
} else {
tmp = t_2;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: t_2
real(8) :: tmp
t_0 = (nachar / ((eaccept / kbt) + 2.0d0)) - (ndchar / ((-1.0d0) - exp(((edonor + (mu + (vef - ec))) / kbt))))
t_1 = nachar / (1.0d0 + exp(((vef - ((mu - eaccept) - ev)) / kbt)))
t_2 = t_1 + (ndchar / (1.0d0 + (edonor / kbt)))
if (nachar <= (-3.75d-34)) then
tmp = t_2
else if (nachar <= 200.0d0) then
tmp = t_0
else if (nachar <= 7d+44) then
tmp = t_2
else if (nachar <= 2.2d+58) then
tmp = t_0
else if (nachar <= 1.12d+208) then
tmp = t_1 + (ndchar / 2.0d0)
else
tmp = t_2
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT))));
double t_1 = NaChar / (1.0 + Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)));
double t_2 = t_1 + (NdChar / (1.0 + (EDonor / KbT)));
double tmp;
if (NaChar <= -3.75e-34) {
tmp = t_2;
} else if (NaChar <= 200.0) {
tmp = t_0;
} else if (NaChar <= 7e+44) {
tmp = t_2;
} else if (NaChar <= 2.2e+58) {
tmp = t_0;
} else if (NaChar <= 1.12e+208) {
tmp = t_1 + (NdChar / 2.0);
} else {
tmp = t_2;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) t_1 = NaChar / (1.0 + math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT))) t_2 = t_1 + (NdChar / (1.0 + (EDonor / KbT))) tmp = 0 if NaChar <= -3.75e-34: tmp = t_2 elif NaChar <= 200.0: tmp = t_0 elif NaChar <= 7e+44: tmp = t_2 elif NaChar <= 2.2e+58: tmp = t_0 elif NaChar <= 1.12e+208: tmp = t_1 + (NdChar / 2.0) else: tmp = t_2 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(NaChar / Float64(Float64(EAccept / KbT) + 2.0)) - Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT))))) t_1 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT)))) t_2 = Float64(t_1 + Float64(NdChar / Float64(1.0 + Float64(EDonor / KbT)))) tmp = 0.0 if (NaChar <= -3.75e-34) tmp = t_2; elseif (NaChar <= 200.0) tmp = t_0; elseif (NaChar <= 7e+44) tmp = t_2; elseif (NaChar <= 2.2e+58) tmp = t_0; elseif (NaChar <= 1.12e+208) tmp = Float64(t_1 + Float64(NdChar / 2.0)); else tmp = t_2; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT)))); t_1 = NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT))); t_2 = t_1 + (NdChar / (1.0 + (EDonor / KbT))); tmp = 0.0; if (NaChar <= -3.75e-34) tmp = t_2; elseif (NaChar <= 200.0) tmp = t_0; elseif (NaChar <= 7e+44) tmp = t_2; elseif (NaChar <= 2.2e+58) tmp = t_0; elseif (NaChar <= 1.12e+208) tmp = t_1 + (NdChar / 2.0); else tmp = t_2; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(NaChar / N[(N[(EAccept / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision] - N[(NdChar / N[(-1.0 - N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(t$95$1 + N[(NdChar / N[(1.0 + N[(EDonor / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -3.75e-34], t$95$2, If[LessEqual[NaChar, 200.0], t$95$0, If[LessEqual[NaChar, 7e+44], t$95$2, If[LessEqual[NaChar, 2.2e+58], t$95$0, If[LessEqual[NaChar, 1.12e+208], N[(t$95$1 + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision], t$95$2]]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{\frac{EAccept}{KbT} + 2} - \frac{NdChar}{-1 - e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}}\\
t_1 := \frac{NaChar}{1 + e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}}\\
t_2 := t\_1 + \frac{NdChar}{1 + \frac{EDonor}{KbT}}\\
\mathbf{if}\;NaChar \leq -3.75 \cdot 10^{-34}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;NaChar \leq 200:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;NaChar \leq 7 \cdot 10^{+44}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;NaChar \leq 2.2 \cdot 10^{+58}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;NaChar \leq 1.12 \cdot 10^{+208}:\\
\;\;\;\;t\_1 + \frac{NdChar}{2}\\
\mathbf{else}:\\
\;\;\;\;t\_2\\
\end{array}
\end{array}
if NaChar < -3.7500000000000002e-34 or 200 < NaChar < 6.9999999999999998e44 or 1.12000000000000004e208 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 64.1%
Taylor expanded in EDonor around inf 67.0%
if -3.7500000000000002e-34 < NaChar < 200 or 6.9999999999999998e44 < NaChar < 2.2000000000000001e58Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 80.8%
Taylor expanded in EAccept around 0 66.5%
if 2.2000000000000001e58 < NaChar < 1.12000000000000004e208Initial program 100.0%
Simplified100.0%
Taylor expanded in Ec around inf 84.9%
associate-*r/84.9%
mul-1-neg84.9%
Simplified84.9%
Taylor expanded in Ec around 0 74.3%
Final simplification67.7%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0
(-
(/ NaChar (+ (/ EAccept KbT) 2.0))
(/ NdChar (- -1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT))))))
(t_1 (/ NaChar (+ 1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT)))))
(t_2 (+ t_1 (/ NdChar (+ 1.0 (/ Vef KbT))))))
(if (<= NaChar -2.8e-20)
t_2
(if (<= NaChar 3.4)
t_0
(if (<= NaChar 6.6e+44)
(+ t_1 (/ NdChar (+ 1.0 (/ EDonor KbT))))
(if (<= NaChar 1.65e+58) 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 = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT))));
double t_1 = NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)));
double t_2 = t_1 + (NdChar / (1.0 + (Vef / KbT)));
double tmp;
if (NaChar <= -2.8e-20) {
tmp = t_2;
} else if (NaChar <= 3.4) {
tmp = t_0;
} else if (NaChar <= 6.6e+44) {
tmp = t_1 + (NdChar / (1.0 + (EDonor / KbT)));
} else if (NaChar <= 1.65e+58) {
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 = (nachar / ((eaccept / kbt) + 2.0d0)) - (ndchar / ((-1.0d0) - exp(((edonor + (mu + (vef - ec))) / kbt))))
t_1 = nachar / (1.0d0 + exp(((vef - ((mu - eaccept) - ev)) / kbt)))
t_2 = t_1 + (ndchar / (1.0d0 + (vef / kbt)))
if (nachar <= (-2.8d-20)) then
tmp = t_2
else if (nachar <= 3.4d0) then
tmp = t_0
else if (nachar <= 6.6d+44) then
tmp = t_1 + (ndchar / (1.0d0 + (edonor / kbt)))
else if (nachar <= 1.65d+58) 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 = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT))));
double t_1 = NaChar / (1.0 + Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)));
double t_2 = t_1 + (NdChar / (1.0 + (Vef / KbT)));
double tmp;
if (NaChar <= -2.8e-20) {
tmp = t_2;
} else if (NaChar <= 3.4) {
tmp = t_0;
} else if (NaChar <= 6.6e+44) {
tmp = t_1 + (NdChar / (1.0 + (EDonor / KbT)));
} else if (NaChar <= 1.65e+58) {
tmp = t_0;
} else {
tmp = t_2;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) t_1 = NaChar / (1.0 + math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT))) t_2 = t_1 + (NdChar / (1.0 + (Vef / KbT))) tmp = 0 if NaChar <= -2.8e-20: tmp = t_2 elif NaChar <= 3.4: tmp = t_0 elif NaChar <= 6.6e+44: tmp = t_1 + (NdChar / (1.0 + (EDonor / KbT))) elif NaChar <= 1.65e+58: tmp = t_0 else: tmp = t_2 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(NaChar / Float64(Float64(EAccept / KbT) + 2.0)) - Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT))))) t_1 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT)))) t_2 = Float64(t_1 + Float64(NdChar / Float64(1.0 + Float64(Vef / KbT)))) tmp = 0.0 if (NaChar <= -2.8e-20) tmp = t_2; elseif (NaChar <= 3.4) tmp = t_0; elseif (NaChar <= 6.6e+44) tmp = Float64(t_1 + Float64(NdChar / Float64(1.0 + Float64(EDonor / KbT)))); elseif (NaChar <= 1.65e+58) 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 = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT)))); t_1 = NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT))); t_2 = t_1 + (NdChar / (1.0 + (Vef / KbT))); tmp = 0.0; if (NaChar <= -2.8e-20) tmp = t_2; elseif (NaChar <= 3.4) tmp = t_0; elseif (NaChar <= 6.6e+44) tmp = t_1 + (NdChar / (1.0 + (EDonor / KbT))); elseif (NaChar <= 1.65e+58) 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[(NaChar / N[(N[(EAccept / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision] - N[(NdChar / N[(-1.0 - N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(t$95$1 + N[(NdChar / N[(1.0 + N[(Vef / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -2.8e-20], t$95$2, If[LessEqual[NaChar, 3.4], t$95$0, If[LessEqual[NaChar, 6.6e+44], N[(t$95$1 + N[(NdChar / N[(1.0 + N[(EDonor / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 1.65e+58], t$95$0, t$95$2]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{\frac{EAccept}{KbT} + 2} - \frac{NdChar}{-1 - e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}}\\
t_1 := \frac{NaChar}{1 + e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}}\\
t_2 := t\_1 + \frac{NdChar}{1 + \frac{Vef}{KbT}}\\
\mathbf{if}\;NaChar \leq -2.8 \cdot 10^{-20}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;NaChar \leq 3.4:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;NaChar \leq 6.6 \cdot 10^{+44}:\\
\;\;\;\;t\_1 + \frac{NdChar}{1 + \frac{EDonor}{KbT}}\\
\mathbf{elif}\;NaChar \leq 1.65 \cdot 10^{+58}:\\
\;\;\;\;t\_0\\
\mathbf{else}:\\
\;\;\;\;t\_2\\
\end{array}
\end{array}
if NaChar < -2.8000000000000003e-20 or 1.64999999999999991e58 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 66.6%
Taylor expanded in Vef around inf 73.0%
if -2.8000000000000003e-20 < NaChar < 3.39999999999999991 or 6.60000000000000027e44 < NaChar < 1.64999999999999991e58Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 78.9%
Taylor expanded in EAccept around 0 64.6%
if 3.39999999999999991 < NaChar < 6.60000000000000027e44Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 64.2%
Taylor expanded in EDonor around inf 87.8%
Final simplification69.4%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0
(-
(/ NaChar (+ (/ EAccept KbT) 2.0))
(/ NdChar (- -1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT))))))
(t_1 (/ NaChar (+ 1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT))))))
(if (<= NaChar -2.2e-42)
(+ t_1 (/ NdChar (+ 1.0 (/ mu KbT))))
(if (<= NaChar 2.4)
t_0
(if (<= NaChar 1.5e+45)
(+ t_1 (/ NdChar (+ 1.0 (/ EDonor KbT))))
(if (<= NaChar 3.2e+54)
t_0
(+ t_1 (/ NdChar (+ 1.0 (/ Vef 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 / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT))));
double t_1 = NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)));
double tmp;
if (NaChar <= -2.2e-42) {
tmp = t_1 + (NdChar / (1.0 + (mu / KbT)));
} else if (NaChar <= 2.4) {
tmp = t_0;
} else if (NaChar <= 1.5e+45) {
tmp = t_1 + (NdChar / (1.0 + (EDonor / KbT)));
} else if (NaChar <= 3.2e+54) {
tmp = t_0;
} else {
tmp = t_1 + (NdChar / (1.0 + (Vef / KbT)));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = (nachar / ((eaccept / kbt) + 2.0d0)) - (ndchar / ((-1.0d0) - exp(((edonor + (mu + (vef - ec))) / kbt))))
t_1 = nachar / (1.0d0 + exp(((vef - ((mu - eaccept) - ev)) / kbt)))
if (nachar <= (-2.2d-42)) then
tmp = t_1 + (ndchar / (1.0d0 + (mu / kbt)))
else if (nachar <= 2.4d0) then
tmp = t_0
else if (nachar <= 1.5d+45) then
tmp = t_1 + (ndchar / (1.0d0 + (edonor / kbt)))
else if (nachar <= 3.2d+54) then
tmp = t_0
else
tmp = t_1 + (ndchar / (1.0d0 + (vef / kbt)))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT))));
double t_1 = NaChar / (1.0 + Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)));
double tmp;
if (NaChar <= -2.2e-42) {
tmp = t_1 + (NdChar / (1.0 + (mu / KbT)));
} else if (NaChar <= 2.4) {
tmp = t_0;
} else if (NaChar <= 1.5e+45) {
tmp = t_1 + (NdChar / (1.0 + (EDonor / KbT)));
} else if (NaChar <= 3.2e+54) {
tmp = t_0;
} else {
tmp = t_1 + (NdChar / (1.0 + (Vef / KbT)));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) t_1 = NaChar / (1.0 + math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT))) tmp = 0 if NaChar <= -2.2e-42: tmp = t_1 + (NdChar / (1.0 + (mu / KbT))) elif NaChar <= 2.4: tmp = t_0 elif NaChar <= 1.5e+45: tmp = t_1 + (NdChar / (1.0 + (EDonor / KbT))) elif NaChar <= 3.2e+54: tmp = t_0 else: tmp = t_1 + (NdChar / (1.0 + (Vef / KbT))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(NaChar / Float64(Float64(EAccept / KbT) + 2.0)) - Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT))))) t_1 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT)))) tmp = 0.0 if (NaChar <= -2.2e-42) tmp = Float64(t_1 + Float64(NdChar / Float64(1.0 + Float64(mu / KbT)))); elseif (NaChar <= 2.4) tmp = t_0; elseif (NaChar <= 1.5e+45) tmp = Float64(t_1 + Float64(NdChar / Float64(1.0 + Float64(EDonor / KbT)))); elseif (NaChar <= 3.2e+54) tmp = t_0; else tmp = Float64(t_1 + Float64(NdChar / Float64(1.0 + Float64(Vef / KbT)))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT)))); t_1 = NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT))); tmp = 0.0; if (NaChar <= -2.2e-42) tmp = t_1 + (NdChar / (1.0 + (mu / KbT))); elseif (NaChar <= 2.4) tmp = t_0; elseif (NaChar <= 1.5e+45) tmp = t_1 + (NdChar / (1.0 + (EDonor / KbT))); elseif (NaChar <= 3.2e+54) tmp = t_0; else tmp = t_1 + (NdChar / (1.0 + (Vef / KbT))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(NaChar / N[(N[(EAccept / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision] - N[(NdChar / N[(-1.0 - N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -2.2e-42], N[(t$95$1 + N[(NdChar / N[(1.0 + N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 2.4], t$95$0, If[LessEqual[NaChar, 1.5e+45], N[(t$95$1 + N[(NdChar / N[(1.0 + N[(EDonor / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 3.2e+54], t$95$0, N[(t$95$1 + N[(NdChar / N[(1.0 + N[(Vef / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{\frac{EAccept}{KbT} + 2} - \frac{NdChar}{-1 - e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}}\\
t_1 := \frac{NaChar}{1 + e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}}\\
\mathbf{if}\;NaChar \leq -2.2 \cdot 10^{-42}:\\
\;\;\;\;t\_1 + \frac{NdChar}{1 + \frac{mu}{KbT}}\\
\mathbf{elif}\;NaChar \leq 2.4:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;NaChar \leq 1.5 \cdot 10^{+45}:\\
\;\;\;\;t\_1 + \frac{NdChar}{1 + \frac{EDonor}{KbT}}\\
\mathbf{elif}\;NaChar \leq 3.2 \cdot 10^{+54}:\\
\;\;\;\;t\_0\\
\mathbf{else}:\\
\;\;\;\;t\_1 + \frac{NdChar}{1 + \frac{Vef}{KbT}}\\
\end{array}
\end{array}
if NaChar < -2.20000000000000005e-42Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 67.3%
Taylor expanded in mu around inf 71.4%
if -2.20000000000000005e-42 < NaChar < 2.39999999999999991 or 1.50000000000000005e45 < NaChar < 3.2e54Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 81.3%
Taylor expanded in EAccept around 0 66.7%
if 2.39999999999999991 < NaChar < 1.50000000000000005e45Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 64.2%
Taylor expanded in EDonor around inf 87.8%
if 3.2e54 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 62.7%
Taylor expanded in Vef around inf 75.0%
Final simplification70.6%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0
(-
(/ NaChar (+ (/ EAccept KbT) 2.0))
(/ NdChar (- -1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT))))))
(t_1 (/ NaChar (+ 1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT))))))
(if (<= NaChar -1.45e-42)
(+ t_1 (/ NdChar (+ 1.0 (/ mu KbT))))
(if (<= NaChar 110.0)
t_0
(if (<= NaChar 1.65e+44)
(+ t_1 (/ (* NdChar KbT) (* EDonor (+ 1.0 (/ Vef EDonor)))))
(if (<= NaChar 1.9e+58)
t_0
(+ t_1 (/ NdChar (+ 1.0 (/ Vef 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 / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT))));
double t_1 = NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)));
double tmp;
if (NaChar <= -1.45e-42) {
tmp = t_1 + (NdChar / (1.0 + (mu / KbT)));
} else if (NaChar <= 110.0) {
tmp = t_0;
} else if (NaChar <= 1.65e+44) {
tmp = t_1 + ((NdChar * KbT) / (EDonor * (1.0 + (Vef / EDonor))));
} else if (NaChar <= 1.9e+58) {
tmp = t_0;
} else {
tmp = t_1 + (NdChar / (1.0 + (Vef / KbT)));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = (nachar / ((eaccept / kbt) + 2.0d0)) - (ndchar / ((-1.0d0) - exp(((edonor + (mu + (vef - ec))) / kbt))))
t_1 = nachar / (1.0d0 + exp(((vef - ((mu - eaccept) - ev)) / kbt)))
if (nachar <= (-1.45d-42)) then
tmp = t_1 + (ndchar / (1.0d0 + (mu / kbt)))
else if (nachar <= 110.0d0) then
tmp = t_0
else if (nachar <= 1.65d+44) then
tmp = t_1 + ((ndchar * kbt) / (edonor * (1.0d0 + (vef / edonor))))
else if (nachar <= 1.9d+58) then
tmp = t_0
else
tmp = t_1 + (ndchar / (1.0d0 + (vef / kbt)))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT))));
double t_1 = NaChar / (1.0 + Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)));
double tmp;
if (NaChar <= -1.45e-42) {
tmp = t_1 + (NdChar / (1.0 + (mu / KbT)));
} else if (NaChar <= 110.0) {
tmp = t_0;
} else if (NaChar <= 1.65e+44) {
tmp = t_1 + ((NdChar * KbT) / (EDonor * (1.0 + (Vef / EDonor))));
} else if (NaChar <= 1.9e+58) {
tmp = t_0;
} else {
tmp = t_1 + (NdChar / (1.0 + (Vef / KbT)));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) t_1 = NaChar / (1.0 + math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT))) tmp = 0 if NaChar <= -1.45e-42: tmp = t_1 + (NdChar / (1.0 + (mu / KbT))) elif NaChar <= 110.0: tmp = t_0 elif NaChar <= 1.65e+44: tmp = t_1 + ((NdChar * KbT) / (EDonor * (1.0 + (Vef / EDonor)))) elif NaChar <= 1.9e+58: tmp = t_0 else: tmp = t_1 + (NdChar / (1.0 + (Vef / KbT))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(NaChar / Float64(Float64(EAccept / KbT) + 2.0)) - Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT))))) t_1 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT)))) tmp = 0.0 if (NaChar <= -1.45e-42) tmp = Float64(t_1 + Float64(NdChar / Float64(1.0 + Float64(mu / KbT)))); elseif (NaChar <= 110.0) tmp = t_0; elseif (NaChar <= 1.65e+44) tmp = Float64(t_1 + Float64(Float64(NdChar * KbT) / Float64(EDonor * Float64(1.0 + Float64(Vef / EDonor))))); elseif (NaChar <= 1.9e+58) tmp = t_0; else tmp = Float64(t_1 + Float64(NdChar / Float64(1.0 + Float64(Vef / KbT)))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT)))); t_1 = NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT))); tmp = 0.0; if (NaChar <= -1.45e-42) tmp = t_1 + (NdChar / (1.0 + (mu / KbT))); elseif (NaChar <= 110.0) tmp = t_0; elseif (NaChar <= 1.65e+44) tmp = t_1 + ((NdChar * KbT) / (EDonor * (1.0 + (Vef / EDonor)))); elseif (NaChar <= 1.9e+58) tmp = t_0; else tmp = t_1 + (NdChar / (1.0 + (Vef / KbT))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(NaChar / N[(N[(EAccept / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision] - N[(NdChar / N[(-1.0 - N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -1.45e-42], N[(t$95$1 + N[(NdChar / N[(1.0 + N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 110.0], t$95$0, If[LessEqual[NaChar, 1.65e+44], N[(t$95$1 + N[(N[(NdChar * KbT), $MachinePrecision] / N[(EDonor * N[(1.0 + N[(Vef / EDonor), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 1.9e+58], t$95$0, N[(t$95$1 + N[(NdChar / N[(1.0 + N[(Vef / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{\frac{EAccept}{KbT} + 2} - \frac{NdChar}{-1 - e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}}\\
t_1 := \frac{NaChar}{1 + e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}}\\
\mathbf{if}\;NaChar \leq -1.45 \cdot 10^{-42}:\\
\;\;\;\;t\_1 + \frac{NdChar}{1 + \frac{mu}{KbT}}\\
\mathbf{elif}\;NaChar \leq 110:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;NaChar \leq 1.65 \cdot 10^{+44}:\\
\;\;\;\;t\_1 + \frac{NdChar \cdot KbT}{EDonor \cdot \left(1 + \frac{Vef}{EDonor}\right)}\\
\mathbf{elif}\;NaChar \leq 1.9 \cdot 10^{+58}:\\
\;\;\;\;t\_0\\
\mathbf{else}:\\
\;\;\;\;t\_1 + \frac{NdChar}{1 + \frac{Vef}{KbT}}\\
\end{array}
\end{array}
if NaChar < -1.4500000000000001e-42Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 67.3%
Taylor expanded in mu around inf 71.4%
if -1.4500000000000001e-42 < NaChar < 110 or 1.65000000000000007e44 < NaChar < 1.8999999999999999e58Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 81.3%
Taylor expanded in EAccept around 0 66.7%
if 110 < NaChar < 1.65000000000000007e44Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 64.2%
Taylor expanded in EDonor around -inf 76.1%
Taylor expanded in KbT around 0 88.6%
Taylor expanded in Vef around inf 88.6%
if 1.8999999999999999e58 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 62.7%
Taylor expanded in Vef around inf 75.0%
Final simplification70.7%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0
(-
(/ NaChar (+ (/ EAccept KbT) 2.0))
(/ NdChar (- -1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT))))))
(t_1 (/ NaChar (+ 1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT))))))
(if (<= NaChar -2.6e-41)
(+ t_1 (/ NdChar (+ 1.0 (* Vef (+ (/ 1.0 KbT) (/ (/ mu KbT) Vef))))))
(if (<= NaChar 1.7)
t_0
(if (<= NaChar 1.55e+44)
(+ t_1 (/ (* NdChar KbT) (* EDonor (+ 1.0 (/ Vef EDonor)))))
(if (<= NaChar 1.8e+57)
t_0
(+ t_1 (/ NdChar (+ 1.0 (/ Vef 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 / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT))));
double t_1 = NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)));
double tmp;
if (NaChar <= -2.6e-41) {
tmp = t_1 + (NdChar / (1.0 + (Vef * ((1.0 / KbT) + ((mu / KbT) / Vef)))));
} else if (NaChar <= 1.7) {
tmp = t_0;
} else if (NaChar <= 1.55e+44) {
tmp = t_1 + ((NdChar * KbT) / (EDonor * (1.0 + (Vef / EDonor))));
} else if (NaChar <= 1.8e+57) {
tmp = t_0;
} else {
tmp = t_1 + (NdChar / (1.0 + (Vef / KbT)));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = (nachar / ((eaccept / kbt) + 2.0d0)) - (ndchar / ((-1.0d0) - exp(((edonor + (mu + (vef - ec))) / kbt))))
t_1 = nachar / (1.0d0 + exp(((vef - ((mu - eaccept) - ev)) / kbt)))
if (nachar <= (-2.6d-41)) then
tmp = t_1 + (ndchar / (1.0d0 + (vef * ((1.0d0 / kbt) + ((mu / kbt) / vef)))))
else if (nachar <= 1.7d0) then
tmp = t_0
else if (nachar <= 1.55d+44) then
tmp = t_1 + ((ndchar * kbt) / (edonor * (1.0d0 + (vef / edonor))))
else if (nachar <= 1.8d+57) then
tmp = t_0
else
tmp = t_1 + (ndchar / (1.0d0 + (vef / kbt)))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT))));
double t_1 = NaChar / (1.0 + Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)));
double tmp;
if (NaChar <= -2.6e-41) {
tmp = t_1 + (NdChar / (1.0 + (Vef * ((1.0 / KbT) + ((mu / KbT) / Vef)))));
} else if (NaChar <= 1.7) {
tmp = t_0;
} else if (NaChar <= 1.55e+44) {
tmp = t_1 + ((NdChar * KbT) / (EDonor * (1.0 + (Vef / EDonor))));
} else if (NaChar <= 1.8e+57) {
tmp = t_0;
} else {
tmp = t_1 + (NdChar / (1.0 + (Vef / KbT)));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) t_1 = NaChar / (1.0 + math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT))) tmp = 0 if NaChar <= -2.6e-41: tmp = t_1 + (NdChar / (1.0 + (Vef * ((1.0 / KbT) + ((mu / KbT) / Vef))))) elif NaChar <= 1.7: tmp = t_0 elif NaChar <= 1.55e+44: tmp = t_1 + ((NdChar * KbT) / (EDonor * (1.0 + (Vef / EDonor)))) elif NaChar <= 1.8e+57: tmp = t_0 else: tmp = t_1 + (NdChar / (1.0 + (Vef / KbT))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(NaChar / Float64(Float64(EAccept / KbT) + 2.0)) - Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT))))) t_1 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT)))) tmp = 0.0 if (NaChar <= -2.6e-41) tmp = Float64(t_1 + Float64(NdChar / Float64(1.0 + Float64(Vef * Float64(Float64(1.0 / KbT) + Float64(Float64(mu / KbT) / Vef)))))); elseif (NaChar <= 1.7) tmp = t_0; elseif (NaChar <= 1.55e+44) tmp = Float64(t_1 + Float64(Float64(NdChar * KbT) / Float64(EDonor * Float64(1.0 + Float64(Vef / EDonor))))); elseif (NaChar <= 1.8e+57) tmp = t_0; else tmp = Float64(t_1 + Float64(NdChar / Float64(1.0 + Float64(Vef / KbT)))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT)))); t_1 = NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT))); tmp = 0.0; if (NaChar <= -2.6e-41) tmp = t_1 + (NdChar / (1.0 + (Vef * ((1.0 / KbT) + ((mu / KbT) / Vef))))); elseif (NaChar <= 1.7) tmp = t_0; elseif (NaChar <= 1.55e+44) tmp = t_1 + ((NdChar * KbT) / (EDonor * (1.0 + (Vef / EDonor)))); elseif (NaChar <= 1.8e+57) tmp = t_0; else tmp = t_1 + (NdChar / (1.0 + (Vef / KbT))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(NaChar / N[(N[(EAccept / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision] - N[(NdChar / N[(-1.0 - N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -2.6e-41], N[(t$95$1 + N[(NdChar / N[(1.0 + N[(Vef * N[(N[(1.0 / KbT), $MachinePrecision] + N[(N[(mu / KbT), $MachinePrecision] / Vef), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 1.7], t$95$0, If[LessEqual[NaChar, 1.55e+44], N[(t$95$1 + N[(N[(NdChar * KbT), $MachinePrecision] / N[(EDonor * N[(1.0 + N[(Vef / EDonor), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 1.8e+57], t$95$0, N[(t$95$1 + N[(NdChar / N[(1.0 + N[(Vef / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{\frac{EAccept}{KbT} + 2} - \frac{NdChar}{-1 - e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}}\\
t_1 := \frac{NaChar}{1 + e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}}\\
\mathbf{if}\;NaChar \leq -2.6 \cdot 10^{-41}:\\
\;\;\;\;t\_1 + \frac{NdChar}{1 + Vef \cdot \left(\frac{1}{KbT} + \frac{\frac{mu}{KbT}}{Vef}\right)}\\
\mathbf{elif}\;NaChar \leq 1.7:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;NaChar \leq 1.55 \cdot 10^{+44}:\\
\;\;\;\;t\_1 + \frac{NdChar \cdot KbT}{EDonor \cdot \left(1 + \frac{Vef}{EDonor}\right)}\\
\mathbf{elif}\;NaChar \leq 1.8 \cdot 10^{+57}:\\
\;\;\;\;t\_0\\
\mathbf{else}:\\
\;\;\;\;t\_1 + \frac{NdChar}{1 + \frac{Vef}{KbT}}\\
\end{array}
\end{array}
if NaChar < -2.5999999999999999e-41Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 67.3%
Taylor expanded in EDonor around -inf 75.4%
Taylor expanded in Vef around inf 74.2%
associate-/l*71.6%
mul-1-neg71.6%
associate--l+71.6%
*-commutative71.6%
associate-/l/70.3%
Simplified70.3%
Taylor expanded in mu around inf 71.1%
mul-1-neg71.1%
associate-/r*72.6%
distribute-neg-frac72.6%
distribute-neg-frac272.6%
Simplified72.6%
if -2.5999999999999999e-41 < NaChar < 1.69999999999999996 or 1.54999999999999998e44 < NaChar < 1.8000000000000001e57Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 81.3%
Taylor expanded in EAccept around 0 66.7%
if 1.69999999999999996 < NaChar < 1.54999999999999998e44Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 64.2%
Taylor expanded in EDonor around -inf 76.1%
Taylor expanded in KbT around 0 88.6%
Taylor expanded in Vef around inf 88.6%
if 1.8000000000000001e57 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 62.7%
Taylor expanded in Vef around inf 75.0%
Final simplification71.0%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0
(-
(/ NaChar (+ (/ EAccept KbT) 2.0))
(/ NdChar (- -1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT))))))
(t_1 (/ NaChar (+ 1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT))))))
(if (<= NaChar -6.3e-43)
(-
t_1
(/
NdChar
(- -1.0 (/ (* EDonor (+ 1.0 (/ (- (+ mu Vef) Ec) EDonor))) KbT))))
(if (<= NaChar 440.0)
t_0
(if (<= NaChar 1.55e+44)
(+ t_1 (/ (* NdChar KbT) (* EDonor (+ 1.0 (/ Vef EDonor)))))
(if (<= NaChar 1.3e+57)
t_0
(+ t_1 (/ NdChar (+ 1.0 (/ Vef 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 / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT))));
double t_1 = NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)));
double tmp;
if (NaChar <= -6.3e-43) {
tmp = t_1 - (NdChar / (-1.0 - ((EDonor * (1.0 + (((mu + Vef) - Ec) / EDonor))) / KbT)));
} else if (NaChar <= 440.0) {
tmp = t_0;
} else if (NaChar <= 1.55e+44) {
tmp = t_1 + ((NdChar * KbT) / (EDonor * (1.0 + (Vef / EDonor))));
} else if (NaChar <= 1.3e+57) {
tmp = t_0;
} else {
tmp = t_1 + (NdChar / (1.0 + (Vef / KbT)));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = (nachar / ((eaccept / kbt) + 2.0d0)) - (ndchar / ((-1.0d0) - exp(((edonor + (mu + (vef - ec))) / kbt))))
t_1 = nachar / (1.0d0 + exp(((vef - ((mu - eaccept) - ev)) / kbt)))
if (nachar <= (-6.3d-43)) then
tmp = t_1 - (ndchar / ((-1.0d0) - ((edonor * (1.0d0 + (((mu + vef) - ec) / edonor))) / kbt)))
else if (nachar <= 440.0d0) then
tmp = t_0
else if (nachar <= 1.55d+44) then
tmp = t_1 + ((ndchar * kbt) / (edonor * (1.0d0 + (vef / edonor))))
else if (nachar <= 1.3d+57) then
tmp = t_0
else
tmp = t_1 + (ndchar / (1.0d0 + (vef / kbt)))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT))));
double t_1 = NaChar / (1.0 + Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)));
double tmp;
if (NaChar <= -6.3e-43) {
tmp = t_1 - (NdChar / (-1.0 - ((EDonor * (1.0 + (((mu + Vef) - Ec) / EDonor))) / KbT)));
} else if (NaChar <= 440.0) {
tmp = t_0;
} else if (NaChar <= 1.55e+44) {
tmp = t_1 + ((NdChar * KbT) / (EDonor * (1.0 + (Vef / EDonor))));
} else if (NaChar <= 1.3e+57) {
tmp = t_0;
} else {
tmp = t_1 + (NdChar / (1.0 + (Vef / KbT)));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) t_1 = NaChar / (1.0 + math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT))) tmp = 0 if NaChar <= -6.3e-43: tmp = t_1 - (NdChar / (-1.0 - ((EDonor * (1.0 + (((mu + Vef) - Ec) / EDonor))) / KbT))) elif NaChar <= 440.0: tmp = t_0 elif NaChar <= 1.55e+44: tmp = t_1 + ((NdChar * KbT) / (EDonor * (1.0 + (Vef / EDonor)))) elif NaChar <= 1.3e+57: tmp = t_0 else: tmp = t_1 + (NdChar / (1.0 + (Vef / KbT))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(NaChar / Float64(Float64(EAccept / KbT) + 2.0)) - Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT))))) t_1 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT)))) tmp = 0.0 if (NaChar <= -6.3e-43) tmp = Float64(t_1 - Float64(NdChar / Float64(-1.0 - Float64(Float64(EDonor * Float64(1.0 + Float64(Float64(Float64(mu + Vef) - Ec) / EDonor))) / KbT)))); elseif (NaChar <= 440.0) tmp = t_0; elseif (NaChar <= 1.55e+44) tmp = Float64(t_1 + Float64(Float64(NdChar * KbT) / Float64(EDonor * Float64(1.0 + Float64(Vef / EDonor))))); elseif (NaChar <= 1.3e+57) tmp = t_0; else tmp = Float64(t_1 + Float64(NdChar / Float64(1.0 + Float64(Vef / KbT)))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT)))); t_1 = NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT))); tmp = 0.0; if (NaChar <= -6.3e-43) tmp = t_1 - (NdChar / (-1.0 - ((EDonor * (1.0 + (((mu + Vef) - Ec) / EDonor))) / KbT))); elseif (NaChar <= 440.0) tmp = t_0; elseif (NaChar <= 1.55e+44) tmp = t_1 + ((NdChar * KbT) / (EDonor * (1.0 + (Vef / EDonor)))); elseif (NaChar <= 1.3e+57) tmp = t_0; else tmp = t_1 + (NdChar / (1.0 + (Vef / KbT))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(NaChar / N[(N[(EAccept / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision] - N[(NdChar / N[(-1.0 - N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -6.3e-43], N[(t$95$1 - N[(NdChar / N[(-1.0 - N[(N[(EDonor * N[(1.0 + N[(N[(N[(mu + Vef), $MachinePrecision] - Ec), $MachinePrecision] / EDonor), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 440.0], t$95$0, If[LessEqual[NaChar, 1.55e+44], N[(t$95$1 + N[(N[(NdChar * KbT), $MachinePrecision] / N[(EDonor * N[(1.0 + N[(Vef / EDonor), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 1.3e+57], t$95$0, N[(t$95$1 + N[(NdChar / N[(1.0 + N[(Vef / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{\frac{EAccept}{KbT} + 2} - \frac{NdChar}{-1 - e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}}\\
t_1 := \frac{NaChar}{1 + e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}}\\
\mathbf{if}\;NaChar \leq -6.3 \cdot 10^{-43}:\\
\;\;\;\;t\_1 - \frac{NdChar}{-1 - \frac{EDonor \cdot \left(1 + \frac{\left(mu + Vef\right) - Ec}{EDonor}\right)}{KbT}}\\
\mathbf{elif}\;NaChar \leq 440:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;NaChar \leq 1.55 \cdot 10^{+44}:\\
\;\;\;\;t\_1 + \frac{NdChar \cdot KbT}{EDonor \cdot \left(1 + \frac{Vef}{EDonor}\right)}\\
\mathbf{elif}\;NaChar \leq 1.3 \cdot 10^{+57}:\\
\;\;\;\;t\_0\\
\mathbf{else}:\\
\;\;\;\;t\_1 + \frac{NdChar}{1 + \frac{Vef}{KbT}}\\
\end{array}
\end{array}
if NaChar < -6.3000000000000002e-43Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 67.3%
Taylor expanded in EDonor around -inf 75.4%
Taylor expanded in KbT around 0 73.6%
if -6.3000000000000002e-43 < NaChar < 440 or 1.54999999999999998e44 < NaChar < 1.3e57Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 81.3%
Taylor expanded in EAccept around 0 66.7%
if 440 < NaChar < 1.54999999999999998e44Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 64.2%
Taylor expanded in EDonor around -inf 76.1%
Taylor expanded in KbT around 0 88.6%
Taylor expanded in Vef around inf 88.6%
if 1.3e57 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 62.7%
Taylor expanded in Vef around inf 75.0%
Final simplification71.3%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (or (<= NaChar -2.7e-12) (not (<= NaChar 3.1e-39)))
(+
(/ NaChar (+ 1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT))))
(/ NdChar 2.0))
(-
(/ NaChar (+ (/ EAccept KbT) 2.0))
(/ NdChar (- -1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT)))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NaChar <= -2.7e-12) || !(NaChar <= 3.1e-39)) {
tmp = (NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / 2.0);
} else {
tmp = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT))));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if ((nachar <= (-2.7d-12)) .or. (.not. (nachar <= 3.1d-39))) then
tmp = (nachar / (1.0d0 + exp(((vef - ((mu - eaccept) - ev)) / kbt)))) + (ndchar / 2.0d0)
else
tmp = (nachar / ((eaccept / kbt) + 2.0d0)) - (ndchar / ((-1.0d0) - exp(((edonor + (mu + (vef - ec))) / kbt))))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NaChar <= -2.7e-12) || !(NaChar <= 3.1e-39)) {
tmp = (NaChar / (1.0 + Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / 2.0);
} else {
tmp = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if (NaChar <= -2.7e-12) or not (NaChar <= 3.1e-39): tmp = (NaChar / (1.0 + math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / 2.0) else: tmp = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if ((NaChar <= -2.7e-12) || !(NaChar <= 3.1e-39)) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT)))) + Float64(NdChar / 2.0)); else tmp = Float64(Float64(NaChar / Float64(Float64(EAccept / KbT) + 2.0)) - Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT))))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if ((NaChar <= -2.7e-12) || ~((NaChar <= 3.1e-39))) tmp = (NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / 2.0); else tmp = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT)))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[Or[LessEqual[NaChar, -2.7e-12], N[Not[LessEqual[NaChar, 3.1e-39]], $MachinePrecision]], N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar / N[(N[(EAccept / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision] - N[(NdChar / N[(-1.0 - N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NaChar \leq -2.7 \cdot 10^{-12} \lor \neg \left(NaChar \leq 3.1 \cdot 10^{-39}\right):\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}} + \frac{NdChar}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{\frac{EAccept}{KbT} + 2} - \frac{NdChar}{-1 - e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}}\\
\end{array}
\end{array}
if NaChar < -2.6999999999999998e-12 or 3.0999999999999997e-39 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in Ec around inf 75.9%
associate-*r/75.9%
mul-1-neg75.9%
Simplified75.9%
Taylor expanded in Ec around 0 63.5%
if -2.6999999999999998e-12 < NaChar < 3.0999999999999997e-39Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 79.5%
Taylor expanded in EAccept around 0 64.0%
Final simplification63.7%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (or (<= NaChar -2.15e-36) (not (<= NaChar 9e-217)))
(+
(/ NaChar (+ 1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT))))
(/ NdChar 2.0))
(+ (/ NdChar (+ 1.0 (exp (/ Ec (- KbT))))) (* NaChar 0.5))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NaChar <= -2.15e-36) || !(NaChar <= 9e-217)) {
tmp = (NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / 2.0);
} else {
tmp = (NdChar / (1.0 + exp((Ec / -KbT)))) + (NaChar * 0.5);
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if ((nachar <= (-2.15d-36)) .or. (.not. (nachar <= 9d-217))) then
tmp = (nachar / (1.0d0 + exp(((vef - ((mu - eaccept) - ev)) / kbt)))) + (ndchar / 2.0d0)
else
tmp = (ndchar / (1.0d0 + exp((ec / -kbt)))) + (nachar * 0.5d0)
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NaChar <= -2.15e-36) || !(NaChar <= 9e-217)) {
tmp = (NaChar / (1.0 + Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / 2.0);
} else {
tmp = (NdChar / (1.0 + Math.exp((Ec / -KbT)))) + (NaChar * 0.5);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if (NaChar <= -2.15e-36) or not (NaChar <= 9e-217): tmp = (NaChar / (1.0 + math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / 2.0) else: tmp = (NdChar / (1.0 + math.exp((Ec / -KbT)))) + (NaChar * 0.5) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if ((NaChar <= -2.15e-36) || !(NaChar <= 9e-217)) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT)))) + Float64(NdChar / 2.0)); else tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Ec / Float64(-KbT))))) + Float64(NaChar * 0.5)); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if ((NaChar <= -2.15e-36) || ~((NaChar <= 9e-217))) tmp = (NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / 2.0); else tmp = (NdChar / (1.0 + exp((Ec / -KbT)))) + (NaChar * 0.5); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[Or[LessEqual[NaChar, -2.15e-36], N[Not[LessEqual[NaChar, 9e-217]], $MachinePrecision]], N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar / N[(1.0 + N[Exp[N[(Ec / (-KbT)), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar * 0.5), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NaChar \leq -2.15 \cdot 10^{-36} \lor \neg \left(NaChar \leq 9 \cdot 10^{-217}\right):\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}} + \frac{NdChar}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{Ec}{-KbT}}} + NaChar \cdot 0.5\\
\end{array}
\end{array}
if NaChar < -2.1500000000000001e-36 or 8.9999999999999997e-217 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in Ec around inf 73.5%
associate-*r/73.5%
mul-1-neg73.5%
Simplified73.5%
Taylor expanded in Ec around 0 58.9%
if -2.1500000000000001e-36 < NaChar < 8.9999999999999997e-217Initial program 100.0%
Simplified100.0%
Taylor expanded in Ec around inf 74.1%
associate-*r/74.1%
mul-1-neg74.1%
Simplified74.1%
Taylor expanded in KbT around inf 51.1%
Final simplification56.7%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (or (<= NaChar -1.95e-23) (not (<= NaChar 5.4e-38)))
(+
(/ NaChar (+ 1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT))))
(/ NdChar 2.0))
(+
(/ NdChar (+ 1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT))))
(/ NaChar 2.0))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NaChar <= -1.95e-23) || !(NaChar <= 5.4e-38)) {
tmp = (NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / 2.0);
} else {
tmp = (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / 2.0);
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if ((nachar <= (-1.95d-23)) .or. (.not. (nachar <= 5.4d-38))) then
tmp = (nachar / (1.0d0 + exp(((vef - ((mu - eaccept) - ev)) / kbt)))) + (ndchar / 2.0d0)
else
tmp = (ndchar / (1.0d0 + exp(((edonor + (mu + (vef - ec))) / kbt)))) + (nachar / 2.0d0)
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NaChar <= -1.95e-23) || !(NaChar <= 5.4e-38)) {
tmp = (NaChar / (1.0 + Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / 2.0);
} else {
tmp = (NdChar / (1.0 + Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / 2.0);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if (NaChar <= -1.95e-23) or not (NaChar <= 5.4e-38): tmp = (NaChar / (1.0 + math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / 2.0) else: tmp = (NdChar / (1.0 + math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / 2.0) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if ((NaChar <= -1.95e-23) || !(NaChar <= 5.4e-38)) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT)))) + Float64(NdChar / 2.0)); else tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) + Float64(NaChar / 2.0)); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if ((NaChar <= -1.95e-23) || ~((NaChar <= 5.4e-38))) tmp = (NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / 2.0); else tmp = (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / 2.0); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[Or[LessEqual[NaChar, -1.95e-23], N[Not[LessEqual[NaChar, 5.4e-38]], $MachinePrecision]], N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / 2.0), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NaChar \leq -1.95 \cdot 10^{-23} \lor \neg \left(NaChar \leq 5.4 \cdot 10^{-38}\right):\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}} + \frac{NdChar}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}} + \frac{NaChar}{2}\\
\end{array}
\end{array}
if NaChar < -1.95e-23 or 5.40000000000000011e-38 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in Ec around inf 75.9%
associate-*r/75.9%
mul-1-neg75.9%
Simplified75.9%
Taylor expanded in Ec around 0 63.5%
if -1.95e-23 < NaChar < 5.40000000000000011e-38Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 61.1%
Final simplification62.4%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (if (or (<= NaChar -2.35e-35) (not (<= NaChar 7.2e-170))) (+ (/ NaChar (+ 1.0 (exp (/ (- (+ Vef Ev) mu) KbT)))) (/ NdChar 2.0)) (+ (/ NdChar (+ 1.0 (exp (/ Ec (- KbT))))) (* NaChar 0.5))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NaChar <= -2.35e-35) || !(NaChar <= 7.2e-170)) {
tmp = (NaChar / (1.0 + exp((((Vef + Ev) - mu) / KbT)))) + (NdChar / 2.0);
} else {
tmp = (NdChar / (1.0 + exp((Ec / -KbT)))) + (NaChar * 0.5);
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if ((nachar <= (-2.35d-35)) .or. (.not. (nachar <= 7.2d-170))) then
tmp = (nachar / (1.0d0 + exp((((vef + ev) - mu) / kbt)))) + (ndchar / 2.0d0)
else
tmp = (ndchar / (1.0d0 + exp((ec / -kbt)))) + (nachar * 0.5d0)
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NaChar <= -2.35e-35) || !(NaChar <= 7.2e-170)) {
tmp = (NaChar / (1.0 + Math.exp((((Vef + Ev) - mu) / KbT)))) + (NdChar / 2.0);
} else {
tmp = (NdChar / (1.0 + Math.exp((Ec / -KbT)))) + (NaChar * 0.5);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if (NaChar <= -2.35e-35) or not (NaChar <= 7.2e-170): tmp = (NaChar / (1.0 + math.exp((((Vef + Ev) - mu) / KbT)))) + (NdChar / 2.0) else: tmp = (NdChar / (1.0 + math.exp((Ec / -KbT)))) + (NaChar * 0.5) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if ((NaChar <= -2.35e-35) || !(NaChar <= 7.2e-170)) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(Vef + Ev) - mu) / KbT)))) + Float64(NdChar / 2.0)); else tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Ec / Float64(-KbT))))) + Float64(NaChar * 0.5)); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if ((NaChar <= -2.35e-35) || ~((NaChar <= 7.2e-170))) tmp = (NaChar / (1.0 + exp((((Vef + Ev) - mu) / KbT)))) + (NdChar / 2.0); else tmp = (NdChar / (1.0 + exp((Ec / -KbT)))) + (NaChar * 0.5); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[Or[LessEqual[NaChar, -2.35e-35], N[Not[LessEqual[NaChar, 7.2e-170]], $MachinePrecision]], N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(N[(Vef + Ev), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar / N[(1.0 + N[Exp[N[(Ec / (-KbT)), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar * 0.5), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NaChar \leq -2.35 \cdot 10^{-35} \lor \neg \left(NaChar \leq 7.2 \cdot 10^{-170}\right):\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{\left(Vef + Ev\right) - mu}{KbT}}} + \frac{NdChar}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{Ec}{-KbT}}} + NaChar \cdot 0.5\\
\end{array}
\end{array}
if NaChar < -2.35e-35 or 7.2000000000000006e-170 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in Ec around inf 74.8%
associate-*r/74.8%
mul-1-neg74.8%
Simplified74.8%
Taylor expanded in Ec around 0 60.3%
Taylor expanded in EAccept around 0 54.4%
if -2.35e-35 < NaChar < 7.2000000000000006e-170Initial program 100.0%
Simplified100.0%
Taylor expanded in Ec around inf 71.4%
associate-*r/71.4%
mul-1-neg71.4%
Simplified71.4%
Taylor expanded in KbT around inf 49.1%
Final simplification52.7%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (if (or (<= NdChar -2.2e+83) (not (<= NdChar 3.5e-183))) (+ (/ NdChar (+ 1.0 (exp (/ Ec (- KbT))))) (* NaChar 0.5)) (+ (/ 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 <= -2.2e+83) || !(NdChar <= 3.5e-183)) {
tmp = (NdChar / (1.0 + exp((Ec / -KbT)))) + (NaChar * 0.5);
} 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 <= (-2.2d+83)) .or. (.not. (ndchar <= 3.5d-183))) then
tmp = (ndchar / (1.0d0 + exp((ec / -kbt)))) + (nachar * 0.5d0)
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 <= -2.2e+83) || !(NdChar <= 3.5e-183)) {
tmp = (NdChar / (1.0 + Math.exp((Ec / -KbT)))) + (NaChar * 0.5);
} 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 <= -2.2e+83) or not (NdChar <= 3.5e-183): tmp = (NdChar / (1.0 + math.exp((Ec / -KbT)))) + (NaChar * 0.5) 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 <= -2.2e+83) || !(NdChar <= 3.5e-183)) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Ec / Float64(-KbT))))) + Float64(NaChar * 0.5)); 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 <= -2.2e+83) || ~((NdChar <= 3.5e-183))) tmp = (NdChar / (1.0 + exp((Ec / -KbT)))) + (NaChar * 0.5); 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, -2.2e+83], N[Not[LessEqual[NdChar, 3.5e-183]], $MachinePrecision]], N[(N[(NdChar / N[(1.0 + N[Exp[N[(Ec / (-KbT)), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar * 0.5), $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 -2.2 \cdot 10^{+83} \lor \neg \left(NdChar \leq 3.5 \cdot 10^{-183}\right):\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{Ec}{-KbT}}} + NaChar \cdot 0.5\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Ev}{KbT}}} + \frac{NdChar}{2}\\
\end{array}
\end{array}
if NdChar < -2.19999999999999999e83 or 3.49999999999999991e-183 < NdChar Initial program 100.0%
Simplified100.0%
Taylor expanded in Ec around inf 64.2%
associate-*r/64.2%
mul-1-neg64.2%
Simplified64.2%
Taylor expanded in KbT around inf 39.3%
if -2.19999999999999999e83 < NdChar < 3.49999999999999991e-183Initial program 100.0%
Simplified100.0%
Taylor expanded in Ec around inf 86.3%
associate-*r/86.3%
mul-1-neg86.3%
Simplified86.3%
Taylor expanded in Ec around 0 71.8%
Taylor expanded in Ev around inf 51.0%
Final simplification44.3%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (if (or (<= NdChar -2.4e+83) (not (<= NdChar 1.45e-133))) (+ (/ NdChar (+ 1.0 (exp (/ Vef KbT)))) (* NaChar 0.5)) (+ (/ 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 <= -2.4e+83) || !(NdChar <= 1.45e-133)) {
tmp = (NdChar / (1.0 + exp((Vef / KbT)))) + (NaChar * 0.5);
} 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 <= (-2.4d+83)) .or. (.not. (ndchar <= 1.45d-133))) then
tmp = (ndchar / (1.0d0 + exp((vef / kbt)))) + (nachar * 0.5d0)
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 <= -2.4e+83) || !(NdChar <= 1.45e-133)) {
tmp = (NdChar / (1.0 + Math.exp((Vef / KbT)))) + (NaChar * 0.5);
} 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 <= -2.4e+83) or not (NdChar <= 1.45e-133): tmp = (NdChar / (1.0 + math.exp((Vef / KbT)))) + (NaChar * 0.5) 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 <= -2.4e+83) || !(NdChar <= 1.45e-133)) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Vef / KbT)))) + Float64(NaChar * 0.5)); 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 <= -2.4e+83) || ~((NdChar <= 1.45e-133))) tmp = (NdChar / (1.0 + exp((Vef / KbT)))) + (NaChar * 0.5); 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, -2.4e+83], N[Not[LessEqual[NdChar, 1.45e-133]], $MachinePrecision]], N[(N[(NdChar / N[(1.0 + N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar * 0.5), $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 -2.4 \cdot 10^{+83} \lor \neg \left(NdChar \leq 1.45 \cdot 10^{-133}\right):\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{Vef}{KbT}}} + NaChar \cdot 0.5\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Ev}{KbT}}} + \frac{NdChar}{2}\\
\end{array}
\end{array}
if NdChar < -2.39999999999999991e83 or 1.4499999999999999e-133 < NdChar Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 58.3%
Taylor expanded in KbT around inf 33.8%
if -2.39999999999999991e83 < NdChar < 1.4499999999999999e-133Initial program 100.0%
Simplified100.0%
Taylor expanded in Ec around inf 85.0%
associate-*r/85.0%
mul-1-neg85.0%
Simplified85.0%
Taylor expanded in Ec around 0 69.0%
Taylor expanded in Ev around inf 48.5%
Final simplification40.7%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (if (or (<= NdChar -9e+125) (not (<= NdChar 4.6e-129))) (+ (/ NdChar (+ 1.0 (exp (/ mu 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 <= -9e+125) || !(NdChar <= 4.6e-129)) {
tmp = (NdChar / (1.0 + exp((mu / 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 <= (-9d+125)) .or. (.not. (ndchar <= 4.6d-129))) then
tmp = (ndchar / (1.0d0 + exp((mu / 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 <= -9e+125) || !(NdChar <= 4.6e-129)) {
tmp = (NdChar / (1.0 + Math.exp((mu / 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 <= -9e+125) or not (NdChar <= 4.6e-129): tmp = (NdChar / (1.0 + math.exp((mu / 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 <= -9e+125) || !(NdChar <= 4.6e-129)) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(mu / 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 <= -9e+125) || ~((NdChar <= 4.6e-129))) tmp = (NdChar / (1.0 + exp((mu / 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, -9e+125], N[Not[LessEqual[NdChar, 4.6e-129]], $MachinePrecision]], N[(N[(NdChar / N[(1.0 + N[Exp[N[(mu / 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 \cdot 10^{+125} \lor \neg \left(NdChar \leq 4.6 \cdot 10^{-129}\right):\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{mu}{KbT}}} + \frac{NaChar}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Ev}{KbT}}} + \frac{NdChar}{2}\\
\end{array}
\end{array}
if NdChar < -9.0000000000000001e125 or 4.5999999999999999e-129 < NdChar Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 65.4%
Taylor expanded in KbT around inf 37.3%
if -9.0000000000000001e125 < NdChar < 4.5999999999999999e-129Initial program 100.0%
Simplified100.0%
Taylor expanded in Ec around inf 82.9%
associate-*r/82.9%
mul-1-neg82.9%
Simplified82.9%
Taylor expanded in Ec around 0 65.7%
Taylor expanded in Ev around inf 46.9%
Final simplification42.2%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (if (<= Ev -3.8e-19) (+ (/ NaChar (+ 1.0 (exp (/ Ev KbT)))) (/ NdChar 2.0)) (+ (/ NaChar (+ 1.0 (exp (/ EAccept KbT)))) (* NdChar 0.5))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (Ev <= -3.8e-19) {
tmp = (NaChar / (1.0 + exp((Ev / KbT)))) + (NdChar / 2.0);
} else {
tmp = (NaChar / (1.0 + exp((EAccept / KbT)))) + (NdChar * 0.5);
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if (ev <= (-3.8d-19)) then
tmp = (nachar / (1.0d0 + exp((ev / kbt)))) + (ndchar / 2.0d0)
else
tmp = (nachar / (1.0d0 + exp((eaccept / kbt)))) + (ndchar * 0.5d0)
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (Ev <= -3.8e-19) {
tmp = (NaChar / (1.0 + Math.exp((Ev / KbT)))) + (NdChar / 2.0);
} else {
tmp = (NaChar / (1.0 + Math.exp((EAccept / KbT)))) + (NdChar * 0.5);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if Ev <= -3.8e-19: tmp = (NaChar / (1.0 + math.exp((Ev / KbT)))) + (NdChar / 2.0) else: tmp = (NaChar / (1.0 + math.exp((EAccept / KbT)))) + (NdChar * 0.5) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (Ev <= -3.8e-19) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT)))) + Float64(NdChar / 2.0)); else tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT)))) + Float64(NdChar * 0.5)); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (Ev <= -3.8e-19) tmp = (NaChar / (1.0 + exp((Ev / KbT)))) + (NdChar / 2.0); else tmp = (NaChar / (1.0 + exp((EAccept / KbT)))) + (NdChar * 0.5); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[Ev, -3.8e-19], N[(N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar * 0.5), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;Ev \leq -3.8 \cdot 10^{-19}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Ev}{KbT}}} + \frac{NdChar}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}} + NdChar \cdot 0.5\\
\end{array}
\end{array}
if Ev < -3.8e-19Initial program 100.0%
Simplified100.0%
Taylor expanded in Ec around inf 70.4%
associate-*r/70.4%
mul-1-neg70.4%
Simplified70.4%
Taylor expanded in Ec around 0 47.8%
Taylor expanded in Ev around inf 43.4%
if -3.8e-19 < Ev Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 70.4%
Taylor expanded in KbT around inf 38.0%
Final simplification39.5%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (+ (/ NaChar (+ 1.0 (exp (/ EAccept KbT)))) (* NdChar 0.5)))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NaChar / (1.0 + exp((EAccept / KbT)))) + (NdChar * 0.5);
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
code = (nachar / (1.0d0 + exp((eaccept / kbt)))) + (ndchar * 0.5d0)
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NaChar / (1.0 + Math.exp((EAccept / KbT)))) + (NdChar * 0.5);
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return (NaChar / (1.0 + math.exp((EAccept / KbT)))) + (NdChar * 0.5)
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT)))) + Float64(NdChar * 0.5)) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = (NaChar / (1.0 + exp((EAccept / KbT)))) + (NdChar * 0.5); end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar * 0.5), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}} + NdChar \cdot 0.5
\end{array}
Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 68.6%
Taylor expanded in KbT around inf 36.5%
Final simplification36.5%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (+ (/ NdChar 2.0) (/ NaChar 2.0)))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NdChar / 2.0) + (NaChar / 2.0);
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
code = (ndchar / 2.0d0) + (nachar / 2.0d0)
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NdChar / 2.0) + (NaChar / 2.0);
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return (NdChar / 2.0) + (NaChar / 2.0)
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(Float64(NdChar / 2.0) + Float64(NaChar / 2.0)) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = (NdChar / 2.0) + (NaChar / 2.0); end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(N[(NdChar / 2.0), $MachinePrecision] + N[(NaChar / 2.0), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{NdChar}{2} + \frac{NaChar}{2}
\end{array}
Initial program 100.0%
Simplified100.0%
Taylor expanded in Ec around inf 73.7%
associate-*r/73.7%
mul-1-neg73.7%
Simplified73.7%
Taylor expanded in Ec around 0 50.2%
Taylor expanded in KbT around inf 28.1%
Final simplification28.1%
herbie shell --seed 2024130
(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))))))