
(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 25 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (+ (/ NdChar (+ 1.0 (exp (/ (- (- (- (- Ec Vef) EDonor) mu)) KbT)))) (/ NaChar (+ 1.0 (exp (/ (+ (+ (+ Ev Vef) EAccept) (- mu)) KbT))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NdChar / (1.0 + exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + exp(((((Ev + Vef) + EAccept) + -mu) / KbT))));
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
code = (ndchar / (1.0d0 + exp((-(((ec - vef) - edonor) - mu) / kbt)))) + (nachar / (1.0d0 + exp(((((ev + vef) + eaccept) + -mu) / kbt))))
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NdChar / (1.0 + Math.exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + Math.exp(((((Ev + Vef) + EAccept) + -mu) / KbT))));
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return (NdChar / (1.0 + math.exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + math.exp(((((Ev + Vef) + EAccept) + -mu) / KbT))))
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(-Float64(Float64(Float64(Ec - Vef) - EDonor) - mu)) / KbT)))) + Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(Float64(Ev + Vef) + EAccept) + Float64(-mu)) / KbT))))) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = (NdChar / (1.0 + exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + exp(((((Ev + Vef) + EAccept) + -mu) / KbT)))); end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(N[(NdChar / N[(1.0 + N[Exp[N[((-N[(N[(N[(Ec - Vef), $MachinePrecision] - EDonor), $MachinePrecision] - mu), $MachinePrecision]) / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Exp[N[(N[(N[(N[(Ev + Vef), $MachinePrecision] + EAccept), $MachinePrecision] + (-mu)), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{NdChar}{1 + e^{\frac{-\left(\left(\left(Ec - Vef\right) - EDonor\right) - mu\right)}{KbT}}} + \frac{NaChar}{1 + e^{\frac{\left(\left(Ev + Vef\right) + EAccept\right) + \left(-mu\right)}{KbT}}}
\end{array}
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (cbrt (/ (- (+ (+ Vef Ev) EAccept) mu) KbT))))
(+
(/ NdChar (+ 1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT))))
(/ NaChar (+ 1.0 (pow (exp (pow t_0 2.0)) t_0))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = cbrt(((((Vef + Ev) + EAccept) - mu) / KbT));
return (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + pow(exp(pow(t_0, 2.0)), t_0)));
}
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = Math.cbrt(((((Vef + Ev) + EAccept) - mu) / KbT));
return (NdChar / (1.0 + Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + Math.pow(Math.exp(Math.pow(t_0, 2.0)), t_0)));
}
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = cbrt(Float64(Float64(Float64(Float64(Vef + Ev) + EAccept) - mu) / KbT)) return Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) + Float64(NaChar / Float64(1.0 + (exp((t_0 ^ 2.0)) ^ t_0)))) end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[Power[N[(N[(N[(N[(Vef + Ev), $MachinePrecision] + EAccept), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision], 1/3], $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 / N[(1.0 + N[Power[N[Exp[N[Power[t$95$0, 2.0], $MachinePrecision]], $MachinePrecision], t$95$0], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \sqrt[3]{\frac{\left(\left(Vef + Ev\right) + EAccept\right) - mu}{KbT}}\\
\frac{NdChar}{1 + e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}} + \frac{NaChar}{1 + {\left(e^{{t\_0}^{2}}\right)}^{t\_0}}
\end{array}
\end{array}
Initial program 99.9%
Simplified99.9%
add-cube-cbrt99.9%
exp-prod100.0%
pow2100.0%
associate-+r+100.0%
associate-+r-100.0%
associate-+r+100.0%
associate-+r-100.0%
Applied egg-rr100.0%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NdChar (+ 1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT)))))
(t_1 (/ NaChar (+ 1.0 (exp (/ (+ Vef (+ Ev (- EAccept mu))) KbT)))))
(t_2 (+ t_1 (/ NdChar (+ 1.0 (exp (/ mu KbT)))))))
(if (<= EAccept -5.4e-101)
t_2
(if (<= EAccept -1.8e-267)
(+
t_0
(/
NaChar
(+
1.0
(-
(+ 1.0 (+ (/ EAccept KbT) (+ (/ Ev KbT) (/ Vef KbT))))
(/ mu KbT)))))
(if (<= EAccept 4e-209)
t_2
(if (<= EAccept 1.22e-76)
(+ t_0 (/ NaChar (+ 1.0 (exp (/ Vef KbT)))))
(if (<= EAccept 5e+96)
(+ t_1 (/ NdChar (+ 1.0 (exp (/ EDonor KbT)))))
(+ t_0 (/ NaChar (+ 1.0 (exp (/ EAccept KbT))))))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)));
double t_1 = NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT)));
double t_2 = t_1 + (NdChar / (1.0 + exp((mu / KbT))));
double tmp;
if (EAccept <= -5.4e-101) {
tmp = t_2;
} else if (EAccept <= -1.8e-267) {
tmp = t_0 + (NaChar / (1.0 + ((1.0 + ((EAccept / KbT) + ((Ev / KbT) + (Vef / KbT)))) - (mu / KbT))));
} else if (EAccept <= 4e-209) {
tmp = t_2;
} else if (EAccept <= 1.22e-76) {
tmp = t_0 + (NaChar / (1.0 + exp((Vef / KbT))));
} else if (EAccept <= 5e+96) {
tmp = t_1 + (NdChar / (1.0 + exp((EDonor / KbT))));
} else {
tmp = t_0 + (NaChar / (1.0 + exp((EAccept / KbT))));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: t_2
real(8) :: tmp
t_0 = ndchar / (1.0d0 + exp(((edonor + (mu + (vef - ec))) / kbt)))
t_1 = nachar / (1.0d0 + exp(((vef + (ev + (eaccept - mu))) / kbt)))
t_2 = t_1 + (ndchar / (1.0d0 + exp((mu / kbt))))
if (eaccept <= (-5.4d-101)) then
tmp = t_2
else if (eaccept <= (-1.8d-267)) then
tmp = t_0 + (nachar / (1.0d0 + ((1.0d0 + ((eaccept / kbt) + ((ev / kbt) + (vef / kbt)))) - (mu / kbt))))
else if (eaccept <= 4d-209) then
tmp = t_2
else if (eaccept <= 1.22d-76) then
tmp = t_0 + (nachar / (1.0d0 + exp((vef / kbt))))
else if (eaccept <= 5d+96) then
tmp = t_1 + (ndchar / (1.0d0 + exp((edonor / kbt))))
else
tmp = t_0 + (nachar / (1.0d0 + exp((eaccept / kbt))))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (1.0 + Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)));
double t_1 = NaChar / (1.0 + Math.exp(((Vef + (Ev + (EAccept - mu))) / KbT)));
double t_2 = t_1 + (NdChar / (1.0 + Math.exp((mu / KbT))));
double tmp;
if (EAccept <= -5.4e-101) {
tmp = t_2;
} else if (EAccept <= -1.8e-267) {
tmp = t_0 + (NaChar / (1.0 + ((1.0 + ((EAccept / KbT) + ((Ev / KbT) + (Vef / KbT)))) - (mu / KbT))));
} else if (EAccept <= 4e-209) {
tmp = t_2;
} else if (EAccept <= 1.22e-76) {
tmp = t_0 + (NaChar / (1.0 + Math.exp((Vef / KbT))));
} else if (EAccept <= 5e+96) {
tmp = t_1 + (NdChar / (1.0 + Math.exp((EDonor / KbT))));
} else {
tmp = t_0 + (NaChar / (1.0 + Math.exp((EAccept / KbT))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NdChar / (1.0 + math.exp(((EDonor + (mu + (Vef - Ec))) / KbT))) t_1 = NaChar / (1.0 + math.exp(((Vef + (Ev + (EAccept - mu))) / KbT))) t_2 = t_1 + (NdChar / (1.0 + math.exp((mu / KbT)))) tmp = 0 if EAccept <= -5.4e-101: tmp = t_2 elif EAccept <= -1.8e-267: tmp = t_0 + (NaChar / (1.0 + ((1.0 + ((EAccept / KbT) + ((Ev / KbT) + (Vef / KbT)))) - (mu / KbT)))) elif EAccept <= 4e-209: tmp = t_2 elif EAccept <= 1.22e-76: tmp = t_0 + (NaChar / (1.0 + math.exp((Vef / KbT)))) elif EAccept <= 5e+96: tmp = t_1 + (NdChar / (1.0 + math.exp((EDonor / KbT)))) else: tmp = t_0 + (NaChar / (1.0 + math.exp((EAccept / KbT)))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NdChar / Float64(1.0 + exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) t_1 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Ev + Float64(EAccept - mu))) / KbT)))) t_2 = Float64(t_1 + Float64(NdChar / Float64(1.0 + exp(Float64(mu / KbT))))) tmp = 0.0 if (EAccept <= -5.4e-101) tmp = t_2; elseif (EAccept <= -1.8e-267) tmp = Float64(t_0 + Float64(NaChar / Float64(1.0 + Float64(Float64(1.0 + Float64(Float64(EAccept / KbT) + Float64(Float64(Ev / KbT) + Float64(Vef / KbT)))) - Float64(mu / KbT))))); elseif (EAccept <= 4e-209) tmp = t_2; elseif (EAccept <= 1.22e-76) tmp = Float64(t_0 + Float64(NaChar / Float64(1.0 + exp(Float64(Vef / KbT))))); elseif (EAccept <= 5e+96) tmp = Float64(t_1 + Float64(NdChar / Float64(1.0 + exp(Float64(EDonor / KbT))))); else tmp = Float64(t_0 + Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT))))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT))); t_1 = NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT))); t_2 = t_1 + (NdChar / (1.0 + exp((mu / KbT)))); tmp = 0.0; if (EAccept <= -5.4e-101) tmp = t_2; elseif (EAccept <= -1.8e-267) tmp = t_0 + (NaChar / (1.0 + ((1.0 + ((EAccept / KbT) + ((Ev / KbT) + (Vef / KbT)))) - (mu / KbT)))); elseif (EAccept <= 4e-209) tmp = t_2; elseif (EAccept <= 1.22e-76) tmp = t_0 + (NaChar / (1.0 + exp((Vef / KbT)))); elseif (EAccept <= 5e+96) tmp = t_1 + (NdChar / (1.0 + exp((EDonor / KbT)))); else tmp = t_0 + (NaChar / (1.0 + exp((EAccept / KbT)))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NdChar / N[(1.0 + N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(Ev + N[(EAccept - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(t$95$1 + N[(NdChar / N[(1.0 + N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[EAccept, -5.4e-101], t$95$2, If[LessEqual[EAccept, -1.8e-267], N[(t$95$0 + N[(NaChar / N[(1.0 + N[(N[(1.0 + N[(N[(EAccept / KbT), $MachinePrecision] + N[(N[(Ev / KbT), $MachinePrecision] + N[(Vef / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[EAccept, 4e-209], t$95$2, If[LessEqual[EAccept, 1.22e-76], N[(t$95$0 + N[(NaChar / N[(1.0 + N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[EAccept, 5e+96], N[(t$95$1 + N[(NdChar / N[(1.0 + N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(t$95$0 + N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{1 + e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}}\\
t_1 := \frac{NaChar}{1 + e^{\frac{Vef + \left(Ev + \left(EAccept - mu\right)\right)}{KbT}}}\\
t_2 := t\_1 + \frac{NdChar}{1 + e^{\frac{mu}{KbT}}}\\
\mathbf{if}\;EAccept \leq -5.4 \cdot 10^{-101}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;EAccept \leq -1.8 \cdot 10^{-267}:\\
\;\;\;\;t\_0 + \frac{NaChar}{1 + \left(\left(1 + \left(\frac{EAccept}{KbT} + \left(\frac{Ev}{KbT} + \frac{Vef}{KbT}\right)\right)\right) - \frac{mu}{KbT}\right)}\\
\mathbf{elif}\;EAccept \leq 4 \cdot 10^{-209}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;EAccept \leq 1.22 \cdot 10^{-76}:\\
\;\;\;\;t\_0 + \frac{NaChar}{1 + e^{\frac{Vef}{KbT}}}\\
\mathbf{elif}\;EAccept \leq 5 \cdot 10^{+96}:\\
\;\;\;\;t\_1 + \frac{NdChar}{1 + e^{\frac{EDonor}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;t\_0 + \frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}}\\
\end{array}
\end{array}
if EAccept < -5.4000000000000003e-101 or -1.8000000000000001e-267 < EAccept < 4.0000000000000002e-209Initial program 99.9%
Simplified99.9%
Taylor expanded in mu around inf 80.8%
if -5.4000000000000003e-101 < EAccept < -1.8000000000000001e-267Initial program 99.9%
Simplified99.9%
Taylor expanded in KbT around inf 75.8%
if 4.0000000000000002e-209 < EAccept < 1.22e-76Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 80.8%
if 1.22e-76 < EAccept < 5.0000000000000004e96Initial program 100.0%
Simplified100.0%
Taylor expanded in EDonor around inf 87.8%
if 5.0000000000000004e96 < EAccept Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 100.0%
Final simplification84.0%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NaChar (+ 1.0 (exp (/ EAccept KbT)))))
(t_1 (/ NdChar (+ 1.0 (exp (/ EDonor KbT)))))
(t_2 (+ t_0 (/ NdChar (+ 1.0 (exp (/ (- (+ mu Vef) Ec) KbT)))))))
(if (<= Ev -7.5e+120)
(+ t_1 (/ NaChar (+ 1.0 (exp (/ Ev KbT)))))
(if (<= Ev -2.8e+35)
t_2
(if (<= Ev -1.85e+15)
(+ (/ NaChar (+ 1.0 (exp (/ Vef KbT)))) t_1)
(if (<= Ev -4.4e-122)
(+
(/ NdChar (+ 1.0 (exp (/ mu KbT))))
(/ NaChar (+ 1.0 (exp (/ (- mu) KbT)))))
(if (<= Ev 1.12e-60) t_2 (+ t_1 t_0))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NaChar / (1.0 + exp((EAccept / KbT)));
double t_1 = NdChar / (1.0 + exp((EDonor / KbT)));
double t_2 = t_0 + (NdChar / (1.0 + exp((((mu + Vef) - Ec) / KbT))));
double tmp;
if (Ev <= -7.5e+120) {
tmp = t_1 + (NaChar / (1.0 + exp((Ev / KbT))));
} else if (Ev <= -2.8e+35) {
tmp = t_2;
} else if (Ev <= -1.85e+15) {
tmp = (NaChar / (1.0 + exp((Vef / KbT)))) + t_1;
} else if (Ev <= -4.4e-122) {
tmp = (NdChar / (1.0 + exp((mu / KbT)))) + (NaChar / (1.0 + exp((-mu / KbT))));
} else if (Ev <= 1.12e-60) {
tmp = t_2;
} else {
tmp = t_1 + t_0;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: t_2
real(8) :: tmp
t_0 = nachar / (1.0d0 + exp((eaccept / kbt)))
t_1 = ndchar / (1.0d0 + exp((edonor / kbt)))
t_2 = t_0 + (ndchar / (1.0d0 + exp((((mu + vef) - ec) / kbt))))
if (ev <= (-7.5d+120)) then
tmp = t_1 + (nachar / (1.0d0 + exp((ev / kbt))))
else if (ev <= (-2.8d+35)) then
tmp = t_2
else if (ev <= (-1.85d+15)) then
tmp = (nachar / (1.0d0 + exp((vef / kbt)))) + t_1
else if (ev <= (-4.4d-122)) then
tmp = (ndchar / (1.0d0 + exp((mu / kbt)))) + (nachar / (1.0d0 + exp((-mu / kbt))))
else if (ev <= 1.12d-60) then
tmp = t_2
else
tmp = t_1 + t_0
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NaChar / (1.0 + Math.exp((EAccept / KbT)));
double t_1 = NdChar / (1.0 + Math.exp((EDonor / KbT)));
double t_2 = t_0 + (NdChar / (1.0 + Math.exp((((mu + Vef) - Ec) / KbT))));
double tmp;
if (Ev <= -7.5e+120) {
tmp = t_1 + (NaChar / (1.0 + Math.exp((Ev / KbT))));
} else if (Ev <= -2.8e+35) {
tmp = t_2;
} else if (Ev <= -1.85e+15) {
tmp = (NaChar / (1.0 + Math.exp((Vef / KbT)))) + t_1;
} else if (Ev <= -4.4e-122) {
tmp = (NdChar / (1.0 + Math.exp((mu / KbT)))) + (NaChar / (1.0 + Math.exp((-mu / KbT))));
} else if (Ev <= 1.12e-60) {
tmp = t_2;
} else {
tmp = t_1 + t_0;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NaChar / (1.0 + math.exp((EAccept / KbT))) t_1 = NdChar / (1.0 + math.exp((EDonor / KbT))) t_2 = t_0 + (NdChar / (1.0 + math.exp((((mu + Vef) - Ec) / KbT)))) tmp = 0 if Ev <= -7.5e+120: tmp = t_1 + (NaChar / (1.0 + math.exp((Ev / KbT)))) elif Ev <= -2.8e+35: tmp = t_2 elif Ev <= -1.85e+15: tmp = (NaChar / (1.0 + math.exp((Vef / KbT)))) + t_1 elif Ev <= -4.4e-122: tmp = (NdChar / (1.0 + math.exp((mu / KbT)))) + (NaChar / (1.0 + math.exp((-mu / KbT)))) elif Ev <= 1.12e-60: tmp = t_2 else: tmp = t_1 + t_0 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT)))) t_1 = Float64(NdChar / Float64(1.0 + exp(Float64(EDonor / KbT)))) t_2 = Float64(t_0 + Float64(NdChar / Float64(1.0 + exp(Float64(Float64(Float64(mu + Vef) - Ec) / KbT))))) tmp = 0.0 if (Ev <= -7.5e+120) tmp = Float64(t_1 + Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT))))); elseif (Ev <= -2.8e+35) tmp = t_2; elseif (Ev <= -1.85e+15) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Vef / KbT)))) + t_1); elseif (Ev <= -4.4e-122) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(mu / KbT)))) + Float64(NaChar / Float64(1.0 + exp(Float64(Float64(-mu) / KbT))))); elseif (Ev <= 1.12e-60) tmp = t_2; else tmp = Float64(t_1 + t_0); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NaChar / (1.0 + exp((EAccept / KbT))); t_1 = NdChar / (1.0 + exp((EDonor / KbT))); t_2 = t_0 + (NdChar / (1.0 + exp((((mu + Vef) - Ec) / KbT)))); tmp = 0.0; if (Ev <= -7.5e+120) tmp = t_1 + (NaChar / (1.0 + exp((Ev / KbT)))); elseif (Ev <= -2.8e+35) tmp = t_2; elseif (Ev <= -1.85e+15) tmp = (NaChar / (1.0 + exp((Vef / KbT)))) + t_1; elseif (Ev <= -4.4e-122) tmp = (NdChar / (1.0 + exp((mu / KbT)))) + (NaChar / (1.0 + exp((-mu / KbT)))); elseif (Ev <= 1.12e-60) tmp = t_2; else tmp = t_1 + t_0; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(NdChar / N[(1.0 + N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(t$95$0 + N[(NdChar / N[(1.0 + N[Exp[N[(N[(N[(mu + Vef), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[Ev, -7.5e+120], N[(t$95$1 + N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[Ev, -2.8e+35], t$95$2, If[LessEqual[Ev, -1.85e+15], N[(N[(NaChar / N[(1.0 + N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + t$95$1), $MachinePrecision], If[LessEqual[Ev, -4.4e-122], 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[Ev, 1.12e-60], t$95$2, N[(t$95$1 + t$95$0), $MachinePrecision]]]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}}\\
t_1 := \frac{NdChar}{1 + e^{\frac{EDonor}{KbT}}}\\
t_2 := t\_0 + \frac{NdChar}{1 + e^{\frac{\left(mu + Vef\right) - Ec}{KbT}}}\\
\mathbf{if}\;Ev \leq -7.5 \cdot 10^{+120}:\\
\;\;\;\;t\_1 + \frac{NaChar}{1 + e^{\frac{Ev}{KbT}}}\\
\mathbf{elif}\;Ev \leq -2.8 \cdot 10^{+35}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;Ev \leq -1.85 \cdot 10^{+15}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Vef}{KbT}}} + t\_1\\
\mathbf{elif}\;Ev \leq -4.4 \cdot 10^{-122}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{mu}{KbT}}} + \frac{NaChar}{1 + e^{\frac{-mu}{KbT}}}\\
\mathbf{elif}\;Ev \leq 1.12 \cdot 10^{-60}:\\
\;\;\;\;t\_2\\
\mathbf{else}:\\
\;\;\;\;t\_1 + t\_0\\
\end{array}
\end{array}
if Ev < -7.5000000000000006e120Initial program 99.8%
Simplified99.8%
Taylor expanded in EDonor around inf 70.3%
Taylor expanded in Ev around inf 64.8%
if -7.5000000000000006e120 < Ev < -2.79999999999999999e35 or -4.4e-122 < Ev < 1.12e-60Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 84.6%
Taylor expanded in EDonor around 0 78.4%
if -2.79999999999999999e35 < Ev < -1.85e15Initial program 100.0%
Simplified100.0%
Taylor expanded in EDonor around inf 51.7%
Taylor expanded in Vef around inf 51.7%
if -1.85e15 < Ev < -4.4e-122Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 74.7%
Taylor expanded in mu around inf 62.2%
associate-*r/62.2%
mul-1-neg62.2%
Simplified62.2%
if 1.12e-60 < Ev Initial program 100.0%
Simplified100.0%
Taylor expanded in EDonor around inf 75.0%
Taylor expanded in EAccept around inf 53.7%
Final simplification66.9%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NdChar (+ 1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT)))))
(t_1 (/ NaChar (+ 1.0 (exp (/ (+ Vef (+ Ev (- EAccept mu))) KbT)))))
(t_2 (+ t_1 (/ NdChar (+ 1.0 (exp (/ mu KbT)))))))
(if (<= EAccept -2.8e-100)
t_2
(if (<= EAccept -3.7e-268)
(+
t_0
(/
NaChar
(+
1.0
(-
(+ 1.0 (+ (/ EAccept KbT) (+ (/ Ev KbT) (/ Vef KbT))))
(/ mu KbT)))))
(if (<= EAccept 2.9e-187)
t_2
(if (<= EAccept 2.1e+101)
(+ t_1 (/ NdChar (+ 1.0 (exp (/ EDonor KbT)))))
(+ t_0 (/ NaChar (+ 1.0 (exp (/ EAccept KbT)))))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)));
double t_1 = NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT)));
double t_2 = t_1 + (NdChar / (1.0 + exp((mu / KbT))));
double tmp;
if (EAccept <= -2.8e-100) {
tmp = t_2;
} else if (EAccept <= -3.7e-268) {
tmp = t_0 + (NaChar / (1.0 + ((1.0 + ((EAccept / KbT) + ((Ev / KbT) + (Vef / KbT)))) - (mu / KbT))));
} else if (EAccept <= 2.9e-187) {
tmp = t_2;
} else if (EAccept <= 2.1e+101) {
tmp = t_1 + (NdChar / (1.0 + exp((EDonor / KbT))));
} else {
tmp = t_0 + (NaChar / (1.0 + exp((EAccept / KbT))));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: t_2
real(8) :: tmp
t_0 = ndchar / (1.0d0 + exp(((edonor + (mu + (vef - ec))) / kbt)))
t_1 = nachar / (1.0d0 + exp(((vef + (ev + (eaccept - mu))) / kbt)))
t_2 = t_1 + (ndchar / (1.0d0 + exp((mu / kbt))))
if (eaccept <= (-2.8d-100)) then
tmp = t_2
else if (eaccept <= (-3.7d-268)) then
tmp = t_0 + (nachar / (1.0d0 + ((1.0d0 + ((eaccept / kbt) + ((ev / kbt) + (vef / kbt)))) - (mu / kbt))))
else if (eaccept <= 2.9d-187) then
tmp = t_2
else if (eaccept <= 2.1d+101) then
tmp = t_1 + (ndchar / (1.0d0 + exp((edonor / kbt))))
else
tmp = t_0 + (nachar / (1.0d0 + exp((eaccept / kbt))))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (1.0 + Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)));
double t_1 = NaChar / (1.0 + Math.exp(((Vef + (Ev + (EAccept - mu))) / KbT)));
double t_2 = t_1 + (NdChar / (1.0 + Math.exp((mu / KbT))));
double tmp;
if (EAccept <= -2.8e-100) {
tmp = t_2;
} else if (EAccept <= -3.7e-268) {
tmp = t_0 + (NaChar / (1.0 + ((1.0 + ((EAccept / KbT) + ((Ev / KbT) + (Vef / KbT)))) - (mu / KbT))));
} else if (EAccept <= 2.9e-187) {
tmp = t_2;
} else if (EAccept <= 2.1e+101) {
tmp = t_1 + (NdChar / (1.0 + Math.exp((EDonor / KbT))));
} else {
tmp = t_0 + (NaChar / (1.0 + Math.exp((EAccept / KbT))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NdChar / (1.0 + math.exp(((EDonor + (mu + (Vef - Ec))) / KbT))) t_1 = NaChar / (1.0 + math.exp(((Vef + (Ev + (EAccept - mu))) / KbT))) t_2 = t_1 + (NdChar / (1.0 + math.exp((mu / KbT)))) tmp = 0 if EAccept <= -2.8e-100: tmp = t_2 elif EAccept <= -3.7e-268: tmp = t_0 + (NaChar / (1.0 + ((1.0 + ((EAccept / KbT) + ((Ev / KbT) + (Vef / KbT)))) - (mu / KbT)))) elif EAccept <= 2.9e-187: tmp = t_2 elif EAccept <= 2.1e+101: tmp = t_1 + (NdChar / (1.0 + math.exp((EDonor / KbT)))) else: tmp = t_0 + (NaChar / (1.0 + math.exp((EAccept / KbT)))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NdChar / Float64(1.0 + exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) t_1 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Ev + Float64(EAccept - mu))) / KbT)))) t_2 = Float64(t_1 + Float64(NdChar / Float64(1.0 + exp(Float64(mu / KbT))))) tmp = 0.0 if (EAccept <= -2.8e-100) tmp = t_2; elseif (EAccept <= -3.7e-268) tmp = Float64(t_0 + Float64(NaChar / Float64(1.0 + Float64(Float64(1.0 + Float64(Float64(EAccept / KbT) + Float64(Float64(Ev / KbT) + Float64(Vef / KbT)))) - Float64(mu / KbT))))); elseif (EAccept <= 2.9e-187) tmp = t_2; elseif (EAccept <= 2.1e+101) tmp = Float64(t_1 + Float64(NdChar / Float64(1.0 + exp(Float64(EDonor / KbT))))); else tmp = Float64(t_0 + Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT))))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT))); t_1 = NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT))); t_2 = t_1 + (NdChar / (1.0 + exp((mu / KbT)))); tmp = 0.0; if (EAccept <= -2.8e-100) tmp = t_2; elseif (EAccept <= -3.7e-268) tmp = t_0 + (NaChar / (1.0 + ((1.0 + ((EAccept / KbT) + ((Ev / KbT) + (Vef / KbT)))) - (mu / KbT)))); elseif (EAccept <= 2.9e-187) tmp = t_2; elseif (EAccept <= 2.1e+101) tmp = t_1 + (NdChar / (1.0 + exp((EDonor / KbT)))); else tmp = t_0 + (NaChar / (1.0 + exp((EAccept / KbT)))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NdChar / N[(1.0 + N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(Ev + N[(EAccept - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(t$95$1 + N[(NdChar / N[(1.0 + N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[EAccept, -2.8e-100], t$95$2, If[LessEqual[EAccept, -3.7e-268], N[(t$95$0 + N[(NaChar / N[(1.0 + N[(N[(1.0 + N[(N[(EAccept / KbT), $MachinePrecision] + N[(N[(Ev / KbT), $MachinePrecision] + N[(Vef / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[EAccept, 2.9e-187], t$95$2, If[LessEqual[EAccept, 2.1e+101], N[(t$95$1 + N[(NdChar / N[(1.0 + N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(t$95$0 + N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{1 + e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}}\\
t_1 := \frac{NaChar}{1 + e^{\frac{Vef + \left(Ev + \left(EAccept - mu\right)\right)}{KbT}}}\\
t_2 := t\_1 + \frac{NdChar}{1 + e^{\frac{mu}{KbT}}}\\
\mathbf{if}\;EAccept \leq -2.8 \cdot 10^{-100}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;EAccept \leq -3.7 \cdot 10^{-268}:\\
\;\;\;\;t\_0 + \frac{NaChar}{1 + \left(\left(1 + \left(\frac{EAccept}{KbT} + \left(\frac{Ev}{KbT} + \frac{Vef}{KbT}\right)\right)\right) - \frac{mu}{KbT}\right)}\\
\mathbf{elif}\;EAccept \leq 2.9 \cdot 10^{-187}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;EAccept \leq 2.1 \cdot 10^{+101}:\\
\;\;\;\;t\_1 + \frac{NdChar}{1 + e^{\frac{EDonor}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;t\_0 + \frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}}\\
\end{array}
\end{array}
if EAccept < -2.79999999999999995e-100 or -3.70000000000000018e-268 < EAccept < 2.89999999999999988e-187Initial program 99.9%
Simplified99.9%
Taylor expanded in mu around inf 79.8%
if -2.79999999999999995e-100 < EAccept < -3.70000000000000018e-268Initial program 99.9%
Simplified99.9%
Taylor expanded in KbT around inf 76.7%
if 2.89999999999999988e-187 < EAccept < 2.1e101Initial program 100.0%
Simplified100.0%
Taylor expanded in EDonor around inf 83.3%
if 2.1e101 < EAccept Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 100.0%
Final simplification83.3%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (<= EAccept -6.2e-95)
(+ (/ NdChar (+ 1.0 (exp (/ mu KbT)))) (/ NaChar (+ 1.0 (exp (/ Ev KbT)))))
(if (<= EAccept -1.8e-267)
(+
(/ NdChar (+ 1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT))))
(/
NaChar
(+
1.0
(-
(+ 1.0 (+ (/ EAccept KbT) (+ (/ Ev KbT) (/ Vef KbT))))
(/ mu KbT)))))
(if (<= EAccept 1.65e+104)
(+
(/ NaChar (+ 1.0 (exp (/ (+ Vef (+ Ev (- EAccept mu))) KbT))))
(/ NdChar (+ 1.0 (exp (/ EDonor KbT)))))
(+
(/ NaChar (+ 1.0 (exp (/ EAccept KbT))))
(/ NdChar (+ 1.0 (exp (/ (- (+ 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 (EAccept <= -6.2e-95) {
tmp = (NdChar / (1.0 + exp((mu / KbT)))) + (NaChar / (1.0 + exp((Ev / KbT))));
} else if (EAccept <= -1.8e-267) {
tmp = (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + ((1.0 + ((EAccept / KbT) + ((Ev / KbT) + (Vef / KbT)))) - (mu / KbT))));
} else if (EAccept <= 1.65e+104) {
tmp = (NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT)))) + (NdChar / (1.0 + exp((EDonor / KbT))));
} else {
tmp = (NaChar / (1.0 + exp((EAccept / KbT)))) + (NdChar / (1.0 + exp((((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 (eaccept <= (-6.2d-95)) then
tmp = (ndchar / (1.0d0 + exp((mu / kbt)))) + (nachar / (1.0d0 + exp((ev / kbt))))
else if (eaccept <= (-1.8d-267)) then
tmp = (ndchar / (1.0d0 + exp(((edonor + (mu + (vef - ec))) / kbt)))) + (nachar / (1.0d0 + ((1.0d0 + ((eaccept / kbt) + ((ev / kbt) + (vef / kbt)))) - (mu / kbt))))
else if (eaccept <= 1.65d+104) then
tmp = (nachar / (1.0d0 + exp(((vef + (ev + (eaccept - mu))) / kbt)))) + (ndchar / (1.0d0 + exp((edonor / kbt))))
else
tmp = (nachar / (1.0d0 + exp((eaccept / kbt)))) + (ndchar / (1.0d0 + exp((((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 (EAccept <= -6.2e-95) {
tmp = (NdChar / (1.0 + Math.exp((mu / KbT)))) + (NaChar / (1.0 + Math.exp((Ev / KbT))));
} else if (EAccept <= -1.8e-267) {
tmp = (NdChar / (1.0 + Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + ((1.0 + ((EAccept / KbT) + ((Ev / KbT) + (Vef / KbT)))) - (mu / KbT))));
} else if (EAccept <= 1.65e+104) {
tmp = (NaChar / (1.0 + Math.exp(((Vef + (Ev + (EAccept - mu))) / KbT)))) + (NdChar / (1.0 + Math.exp((EDonor / KbT))));
} else {
tmp = (NaChar / (1.0 + Math.exp((EAccept / KbT)))) + (NdChar / (1.0 + Math.exp((((mu + Vef) - Ec) / KbT))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if EAccept <= -6.2e-95: tmp = (NdChar / (1.0 + math.exp((mu / KbT)))) + (NaChar / (1.0 + math.exp((Ev / KbT)))) elif EAccept <= -1.8e-267: tmp = (NdChar / (1.0 + math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + ((1.0 + ((EAccept / KbT) + ((Ev / KbT) + (Vef / KbT)))) - (mu / KbT)))) elif EAccept <= 1.65e+104: tmp = (NaChar / (1.0 + math.exp(((Vef + (Ev + (EAccept - mu))) / KbT)))) + (NdChar / (1.0 + math.exp((EDonor / KbT)))) else: tmp = (NaChar / (1.0 + math.exp((EAccept / KbT)))) + (NdChar / (1.0 + math.exp((((mu + Vef) - Ec) / KbT)))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (EAccept <= -6.2e-95) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(mu / KbT)))) + Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT))))); elseif (EAccept <= -1.8e-267) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) + Float64(NaChar / Float64(1.0 + Float64(Float64(1.0 + Float64(Float64(EAccept / KbT) + Float64(Float64(Ev / KbT) + Float64(Vef / KbT)))) - Float64(mu / KbT))))); elseif (EAccept <= 1.65e+104) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Ev + Float64(EAccept - mu))) / KbT)))) + Float64(NdChar / Float64(1.0 + exp(Float64(EDonor / KbT))))); else tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT)))) + Float64(NdChar / Float64(1.0 + exp(Float64(Float64(Float64(mu + Vef) - Ec) / KbT))))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (EAccept <= -6.2e-95) tmp = (NdChar / (1.0 + exp((mu / KbT)))) + (NaChar / (1.0 + exp((Ev / KbT)))); elseif (EAccept <= -1.8e-267) tmp = (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + ((1.0 + ((EAccept / KbT) + ((Ev / KbT) + (Vef / KbT)))) - (mu / KbT)))); elseif (EAccept <= 1.65e+104) tmp = (NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT)))) + (NdChar / (1.0 + exp((EDonor / KbT)))); else tmp = (NaChar / (1.0 + exp((EAccept / KbT)))) + (NdChar / (1.0 + exp((((mu + Vef) - Ec) / KbT)))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[EAccept, -6.2e-95], N[(N[(NdChar / N[(1.0 + N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[EAccept, -1.8e-267], 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[(N[(1.0 + N[(N[(EAccept / KbT), $MachinePrecision] + N[(N[(Ev / KbT), $MachinePrecision] + N[(Vef / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[EAccept, 1.65e+104], N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(Ev + N[(EAccept - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(1.0 + N[Exp[N[(EDonor / 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[(N[(mu + Vef), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;EAccept \leq -6.2 \cdot 10^{-95}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{mu}{KbT}}} + \frac{NaChar}{1 + e^{\frac{Ev}{KbT}}}\\
\mathbf{elif}\;EAccept \leq -1.8 \cdot 10^{-267}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}} + \frac{NaChar}{1 + \left(\left(1 + \left(\frac{EAccept}{KbT} + \left(\frac{Ev}{KbT} + \frac{Vef}{KbT}\right)\right)\right) - \frac{mu}{KbT}\right)}\\
\mathbf{elif}\;EAccept \leq 1.65 \cdot 10^{+104}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Vef + \left(Ev + \left(EAccept - mu\right)\right)}{KbT}}} + \frac{NdChar}{1 + e^{\frac{EDonor}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}} + \frac{NdChar}{1 + e^{\frac{\left(mu + Vef\right) - Ec}{KbT}}}\\
\end{array}
\end{array}
if EAccept < -6.19999999999999983e-95Initial program 99.9%
Simplified99.9%
Taylor expanded in mu around inf 79.3%
Taylor expanded in Ev around inf 54.9%
if -6.19999999999999983e-95 < EAccept < -1.8000000000000001e-267Initial program 99.9%
Simplified99.9%
Taylor expanded in KbT around inf 76.7%
if -1.8000000000000001e-267 < EAccept < 1.64999999999999992e104Initial program 100.0%
Simplified100.0%
Taylor expanded in EDonor around inf 78.9%
if 1.64999999999999992e104 < EAccept Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 100.0%
Taylor expanded in EDonor around 0 85.1%
Final simplification71.1%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NaChar (+ 1.0 (exp (/ (+ Vef (+ Ev (- EAccept mu))) KbT))))))
(if (or (<= mu -2.1e-16) (not (<= mu 9.3e-38)))
(+ t_0 (/ NdChar (+ 1.0 (exp (/ mu KbT)))))
(+ t_0 (/ 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 t_0 = NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT)));
double tmp;
if ((mu <= -2.1e-16) || !(mu <= 9.3e-38)) {
tmp = t_0 + (NdChar / (1.0 + exp((mu / KbT))));
} else {
tmp = t_0 + (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) :: t_0
real(8) :: tmp
t_0 = nachar / (1.0d0 + exp(((vef + (ev + (eaccept - mu))) / kbt)))
if ((mu <= (-2.1d-16)) .or. (.not. (mu <= 9.3d-38))) then
tmp = t_0 + (ndchar / (1.0d0 + exp((mu / kbt))))
else
tmp = t_0 + (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 t_0 = NaChar / (1.0 + Math.exp(((Vef + (Ev + (EAccept - mu))) / KbT)));
double tmp;
if ((mu <= -2.1e-16) || !(mu <= 9.3e-38)) {
tmp = t_0 + (NdChar / (1.0 + Math.exp((mu / KbT))));
} else {
tmp = t_0 + (NdChar / (1.0 + Math.exp((EDonor / KbT))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NaChar / (1.0 + math.exp(((Vef + (Ev + (EAccept - mu))) / KbT))) tmp = 0 if (mu <= -2.1e-16) or not (mu <= 9.3e-38): tmp = t_0 + (NdChar / (1.0 + math.exp((mu / KbT)))) else: tmp = t_0 + (NdChar / (1.0 + math.exp((EDonor / 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(Ev + Float64(EAccept - mu))) / KbT)))) tmp = 0.0 if ((mu <= -2.1e-16) || !(mu <= 9.3e-38)) tmp = Float64(t_0 + Float64(NdChar / Float64(1.0 + exp(Float64(mu / KbT))))); else tmp = Float64(t_0 + 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) t_0 = NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT))); tmp = 0.0; if ((mu <= -2.1e-16) || ~((mu <= 9.3e-38))) tmp = t_0 + (NdChar / (1.0 + exp((mu / KbT)))); else tmp = t_0 + (NdChar / (1.0 + exp((EDonor / 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[(Ev + N[(EAccept - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[Or[LessEqual[mu, -2.1e-16], N[Not[LessEqual[mu, 9.3e-38]], $MachinePrecision]], N[(t$95$0 + N[(NdChar / N[(1.0 + N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(t$95$0 + N[(NdChar / N[(1.0 + N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{Vef + \left(Ev + \left(EAccept - mu\right)\right)}{KbT}}}\\
\mathbf{if}\;mu \leq -2.1 \cdot 10^{-16} \lor \neg \left(mu \leq 9.3 \cdot 10^{-38}\right):\\
\;\;\;\;t\_0 + \frac{NdChar}{1 + e^{\frac{mu}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;t\_0 + \frac{NdChar}{1 + e^{\frac{EDonor}{KbT}}}\\
\end{array}
\end{array}
if mu < -2.1000000000000001e-16 or 9.30000000000000001e-38 < mu Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 84.6%
if -2.1000000000000001e-16 < mu < 9.30000000000000001e-38Initial program 99.9%
Simplified99.9%
Taylor expanded in EDonor around inf 75.6%
Final simplification80.7%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (+ (/ NdChar (+ 1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT)))) (/ NaChar (+ 1.0 (exp (/ (+ Vef (+ Ev (- 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(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + exp(((Vef + (Ev + (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(((edonor + (mu + (vef - ec))) / kbt)))) + (nachar / (1.0d0 + exp(((vef + (ev + (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(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + Math.exp(((Vef + (Ev + (EAccept - mu))) / KbT))));
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return (NdChar / (1.0 + math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + math.exp(((Vef + (Ev + (EAccept - mu))) / KbT))))
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) + Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Ev + Float64(EAccept - mu))) / KbT))))) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT)))); end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(Ev + N[(EAccept - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{NdChar}{1 + e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}} + \frac{NaChar}{1 + e^{\frac{Vef + \left(Ev + \left(EAccept - mu\right)\right)}{KbT}}}
\end{array}
Initial program 99.9%
Simplified99.9%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NdChar (+ 1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT))))))
(if (<= NdChar -3e+90)
(+ t_0 (/ NaChar (+ 2.0 (/ EAccept KbT))))
(if (<= NdChar -5.4e+39)
(+
(/ NdChar (+ 1.0 (exp (/ mu KbT))))
(/ NaChar (+ 1.0 (exp (/ (- mu) KbT)))))
(if (or (<= NdChar -6e-166) (not (<= NdChar 2.3e-59)))
(+
t_0
(/
NaChar
(+
1.0
(-
(+ 1.0 (+ (/ EAccept KbT) (+ (/ Ev KbT) (/ Vef KbT))))
(/ mu KbT)))))
(+
(/ NaChar (+ 1.0 (exp (/ (+ Vef (+ Ev (- EAccept mu))) KbT))))
(/ NdChar (+ 2.0 (/ mu KbT)))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)));
double tmp;
if (NdChar <= -3e+90) {
tmp = t_0 + (NaChar / (2.0 + (EAccept / KbT)));
} else if (NdChar <= -5.4e+39) {
tmp = (NdChar / (1.0 + exp((mu / KbT)))) + (NaChar / (1.0 + exp((-mu / KbT))));
} else if ((NdChar <= -6e-166) || !(NdChar <= 2.3e-59)) {
tmp = t_0 + (NaChar / (1.0 + ((1.0 + ((EAccept / KbT) + ((Ev / KbT) + (Vef / KbT)))) - (mu / KbT))));
} else {
tmp = (NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT)))) + (NdChar / (2.0 + (mu / KbT)));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: tmp
t_0 = ndchar / (1.0d0 + exp(((edonor + (mu + (vef - ec))) / kbt)))
if (ndchar <= (-3d+90)) then
tmp = t_0 + (nachar / (2.0d0 + (eaccept / kbt)))
else if (ndchar <= (-5.4d+39)) then
tmp = (ndchar / (1.0d0 + exp((mu / kbt)))) + (nachar / (1.0d0 + exp((-mu / kbt))))
else if ((ndchar <= (-6d-166)) .or. (.not. (ndchar <= 2.3d-59))) then
tmp = t_0 + (nachar / (1.0d0 + ((1.0d0 + ((eaccept / kbt) + ((ev / kbt) + (vef / kbt)))) - (mu / kbt))))
else
tmp = (nachar / (1.0d0 + exp(((vef + (ev + (eaccept - mu))) / kbt)))) + (ndchar / (2.0d0 + (mu / kbt)))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (1.0 + Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)));
double tmp;
if (NdChar <= -3e+90) {
tmp = t_0 + (NaChar / (2.0 + (EAccept / KbT)));
} else if (NdChar <= -5.4e+39) {
tmp = (NdChar / (1.0 + Math.exp((mu / KbT)))) + (NaChar / (1.0 + Math.exp((-mu / KbT))));
} else if ((NdChar <= -6e-166) || !(NdChar <= 2.3e-59)) {
tmp = t_0 + (NaChar / (1.0 + ((1.0 + ((EAccept / KbT) + ((Ev / KbT) + (Vef / KbT)))) - (mu / KbT))));
} else {
tmp = (NaChar / (1.0 + Math.exp(((Vef + (Ev + (EAccept - mu))) / KbT)))) + (NdChar / (2.0 + (mu / KbT)));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NdChar / (1.0 + math.exp(((EDonor + (mu + (Vef - Ec))) / KbT))) tmp = 0 if NdChar <= -3e+90: tmp = t_0 + (NaChar / (2.0 + (EAccept / KbT))) elif NdChar <= -5.4e+39: tmp = (NdChar / (1.0 + math.exp((mu / KbT)))) + (NaChar / (1.0 + math.exp((-mu / KbT)))) elif (NdChar <= -6e-166) or not (NdChar <= 2.3e-59): tmp = t_0 + (NaChar / (1.0 + ((1.0 + ((EAccept / KbT) + ((Ev / KbT) + (Vef / KbT)))) - (mu / KbT)))) else: tmp = (NaChar / (1.0 + math.exp(((Vef + (Ev + (EAccept - mu))) / KbT)))) + (NdChar / (2.0 + (mu / KbT))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NdChar / Float64(1.0 + exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) tmp = 0.0 if (NdChar <= -3e+90) tmp = Float64(t_0 + Float64(NaChar / Float64(2.0 + Float64(EAccept / KbT)))); elseif (NdChar <= -5.4e+39) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(mu / KbT)))) + Float64(NaChar / Float64(1.0 + exp(Float64(Float64(-mu) / KbT))))); elseif ((NdChar <= -6e-166) || !(NdChar <= 2.3e-59)) tmp = Float64(t_0 + Float64(NaChar / Float64(1.0 + Float64(Float64(1.0 + Float64(Float64(EAccept / KbT) + Float64(Float64(Ev / KbT) + Float64(Vef / KbT)))) - Float64(mu / KbT))))); else tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Ev + Float64(EAccept - mu))) / KbT)))) + Float64(NdChar / Float64(2.0 + Float64(mu / KbT)))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT))); tmp = 0.0; if (NdChar <= -3e+90) tmp = t_0 + (NaChar / (2.0 + (EAccept / KbT))); elseif (NdChar <= -5.4e+39) tmp = (NdChar / (1.0 + exp((mu / KbT)))) + (NaChar / (1.0 + exp((-mu / KbT)))); elseif ((NdChar <= -6e-166) || ~((NdChar <= 2.3e-59))) tmp = t_0 + (NaChar / (1.0 + ((1.0 + ((EAccept / KbT) + ((Ev / KbT) + (Vef / KbT)))) - (mu / KbT)))); else tmp = (NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT)))) + (NdChar / (2.0 + (mu / KbT))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NdChar / N[(1.0 + N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NdChar, -3e+90], N[(t$95$0 + N[(NaChar / N[(2.0 + N[(EAccept / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NdChar, -5.4e+39], 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[Or[LessEqual[NdChar, -6e-166], N[Not[LessEqual[NdChar, 2.3e-59]], $MachinePrecision]], N[(t$95$0 + N[(NaChar / N[(1.0 + N[(N[(1.0 + N[(N[(EAccept / KbT), $MachinePrecision] + N[(N[(Ev / KbT), $MachinePrecision] + N[(Vef / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(Ev + N[(EAccept - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(2.0 + N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{1 + e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}}\\
\mathbf{if}\;NdChar \leq -3 \cdot 10^{+90}:\\
\;\;\;\;t\_0 + \frac{NaChar}{2 + \frac{EAccept}{KbT}}\\
\mathbf{elif}\;NdChar \leq -5.4 \cdot 10^{+39}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{mu}{KbT}}} + \frac{NaChar}{1 + e^{\frac{-mu}{KbT}}}\\
\mathbf{elif}\;NdChar \leq -6 \cdot 10^{-166} \lor \neg \left(NdChar \leq 2.3 \cdot 10^{-59}\right):\\
\;\;\;\;t\_0 + \frac{NaChar}{1 + \left(\left(1 + \left(\frac{EAccept}{KbT} + \left(\frac{Ev}{KbT} + \frac{Vef}{KbT}\right)\right)\right) - \frac{mu}{KbT}\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Vef + \left(Ev + \left(EAccept - mu\right)\right)}{KbT}}} + \frac{NdChar}{2 + \frac{mu}{KbT}}\\
\end{array}
\end{array}
if NdChar < -2.99999999999999979e90Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 80.1%
Taylor expanded in EAccept around 0 70.8%
if -2.99999999999999979e90 < NdChar < -5.40000000000000007e39Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 81.8%
Taylor expanded in mu around inf 76.7%
associate-*r/76.7%
mul-1-neg76.7%
Simplified76.7%
if -5.40000000000000007e39 < NdChar < -6.0000000000000005e-166 or 2.29999999999999979e-59 < NdChar Initial program 99.9%
Simplified99.9%
Taylor expanded in KbT around inf 65.0%
if -6.0000000000000005e-166 < NdChar < 2.29999999999999979e-59Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 87.8%
Taylor expanded in mu around 0 78.4%
Final simplification70.7%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (or (<= NdChar -3e-165) (not (<= NdChar 1.22e-59)))
(+
(/ NdChar (+ 1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT))))
(/
NaChar
(+
1.0
(- (+ 1.0 (+ (/ EAccept KbT) (+ (/ Ev KbT) (/ Vef KbT)))) (/ mu KbT)))))
(+
(/ NaChar (+ 1.0 (exp (/ (+ Vef (+ Ev (- EAccept mu))) KbT))))
(/ NdChar (+ 2.0 (/ mu KbT))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NdChar <= -3e-165) || !(NdChar <= 1.22e-59)) {
tmp = (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + ((1.0 + ((EAccept / KbT) + ((Ev / KbT) + (Vef / KbT)))) - (mu / KbT))));
} else {
tmp = (NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT)))) + (NdChar / (2.0 + (mu / KbT)));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if ((ndchar <= (-3d-165)) .or. (.not. (ndchar <= 1.22d-59))) then
tmp = (ndchar / (1.0d0 + exp(((edonor + (mu + (vef - ec))) / kbt)))) + (nachar / (1.0d0 + ((1.0d0 + ((eaccept / kbt) + ((ev / kbt) + (vef / kbt)))) - (mu / kbt))))
else
tmp = (nachar / (1.0d0 + exp(((vef + (ev + (eaccept - mu))) / kbt)))) + (ndchar / (2.0d0 + (mu / kbt)))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NdChar <= -3e-165) || !(NdChar <= 1.22e-59)) {
tmp = (NdChar / (1.0 + Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + ((1.0 + ((EAccept / KbT) + ((Ev / KbT) + (Vef / KbT)))) - (mu / KbT))));
} else {
tmp = (NaChar / (1.0 + Math.exp(((Vef + (Ev + (EAccept - mu))) / KbT)))) + (NdChar / (2.0 + (mu / KbT)));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if (NdChar <= -3e-165) or not (NdChar <= 1.22e-59): tmp = (NdChar / (1.0 + math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + ((1.0 + ((EAccept / KbT) + ((Ev / KbT) + (Vef / KbT)))) - (mu / KbT)))) else: tmp = (NaChar / (1.0 + math.exp(((Vef + (Ev + (EAccept - mu))) / KbT)))) + (NdChar / (2.0 + (mu / KbT))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if ((NdChar <= -3e-165) || !(NdChar <= 1.22e-59)) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) + Float64(NaChar / Float64(1.0 + Float64(Float64(1.0 + Float64(Float64(EAccept / KbT) + Float64(Float64(Ev / KbT) + Float64(Vef / KbT)))) - Float64(mu / KbT))))); else tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Ev + Float64(EAccept - mu))) / KbT)))) + Float64(NdChar / Float64(2.0 + Float64(mu / KbT)))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if ((NdChar <= -3e-165) || ~((NdChar <= 1.22e-59))) tmp = (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + ((1.0 + ((EAccept / KbT) + ((Ev / KbT) + (Vef / KbT)))) - (mu / KbT)))); else tmp = (NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT)))) + (NdChar / (2.0 + (mu / KbT))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[Or[LessEqual[NdChar, -3e-165], N[Not[LessEqual[NdChar, 1.22e-59]], $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 / N[(1.0 + N[(N[(1.0 + N[(N[(EAccept / KbT), $MachinePrecision] + N[(N[(Ev / KbT), $MachinePrecision] + N[(Vef / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(Ev + N[(EAccept - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(2.0 + N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NdChar \leq -3 \cdot 10^{-165} \lor \neg \left(NdChar \leq 1.22 \cdot 10^{-59}\right):\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}} + \frac{NaChar}{1 + \left(\left(1 + \left(\frac{EAccept}{KbT} + \left(\frac{Ev}{KbT} + \frac{Vef}{KbT}\right)\right)\right) - \frac{mu}{KbT}\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Vef + \left(Ev + \left(EAccept - mu\right)\right)}{KbT}}} + \frac{NdChar}{2 + \frac{mu}{KbT}}\\
\end{array}
\end{array}
if NdChar < -2.99999999999999979e-165 or 1.22e-59 < NdChar Initial program 99.9%
Simplified99.9%
Taylor expanded in KbT around inf 65.7%
if -2.99999999999999979e-165 < NdChar < 1.22e-59Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 87.8%
Taylor expanded in mu around 0 78.4%
Final simplification69.4%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NdChar (+ 1.0 (exp (/ EDonor KbT)))))
(t_1 (/ NaChar (+ 1.0 (exp (/ Ev KbT))))))
(if (<= KbT -3.4e+54)
(+ t_0 (/ NaChar (+ 2.0 (/ Ev KbT))))
(if (<= KbT 2.1e-170)
t_1
(if (<= KbT 220000000000.0)
(+ t_0 (/ NaChar (- 2.0 (/ mu KbT))))
(if (<= KbT 9.5e+37)
t_1
(+ (/ NdChar (+ 1.0 (exp (/ mu 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 t_0 = NdChar / (1.0 + exp((EDonor / KbT)));
double t_1 = NaChar / (1.0 + exp((Ev / KbT)));
double tmp;
if (KbT <= -3.4e+54) {
tmp = t_0 + (NaChar / (2.0 + (Ev / KbT)));
} else if (KbT <= 2.1e-170) {
tmp = t_1;
} else if (KbT <= 220000000000.0) {
tmp = t_0 + (NaChar / (2.0 - (mu / KbT)));
} else if (KbT <= 9.5e+37) {
tmp = t_1;
} else {
tmp = (NdChar / (1.0 + exp((mu / 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) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = ndchar / (1.0d0 + exp((edonor / kbt)))
t_1 = nachar / (1.0d0 + exp((ev / kbt)))
if (kbt <= (-3.4d+54)) then
tmp = t_0 + (nachar / (2.0d0 + (ev / kbt)))
else if (kbt <= 2.1d-170) then
tmp = t_1
else if (kbt <= 220000000000.0d0) then
tmp = t_0 + (nachar / (2.0d0 - (mu / kbt)))
else if (kbt <= 9.5d+37) then
tmp = t_1
else
tmp = (ndchar / (1.0d0 + exp((mu / 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 t_0 = NdChar / (1.0 + Math.exp((EDonor / KbT)));
double t_1 = NaChar / (1.0 + Math.exp((Ev / KbT)));
double tmp;
if (KbT <= -3.4e+54) {
tmp = t_0 + (NaChar / (2.0 + (Ev / KbT)));
} else if (KbT <= 2.1e-170) {
tmp = t_1;
} else if (KbT <= 220000000000.0) {
tmp = t_0 + (NaChar / (2.0 - (mu / KbT)));
} else if (KbT <= 9.5e+37) {
tmp = t_1;
} else {
tmp = (NdChar / (1.0 + Math.exp((mu / KbT)))) + (NaChar / 2.0);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NdChar / (1.0 + math.exp((EDonor / KbT))) t_1 = NaChar / (1.0 + math.exp((Ev / KbT))) tmp = 0 if KbT <= -3.4e+54: tmp = t_0 + (NaChar / (2.0 + (Ev / KbT))) elif KbT <= 2.1e-170: tmp = t_1 elif KbT <= 220000000000.0: tmp = t_0 + (NaChar / (2.0 - (mu / KbT))) elif KbT <= 9.5e+37: tmp = t_1 else: tmp = (NdChar / (1.0 + math.exp((mu / KbT)))) + (NaChar / 2.0) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NdChar / Float64(1.0 + exp(Float64(EDonor / KbT)))) t_1 = Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT)))) tmp = 0.0 if (KbT <= -3.4e+54) tmp = Float64(t_0 + Float64(NaChar / Float64(2.0 + Float64(Ev / KbT)))); elseif (KbT <= 2.1e-170) tmp = t_1; elseif (KbT <= 220000000000.0) tmp = Float64(t_0 + Float64(NaChar / Float64(2.0 - Float64(mu / KbT)))); elseif (KbT <= 9.5e+37) tmp = t_1; else tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(mu / KbT)))) + Float64(NaChar / 2.0)); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NdChar / (1.0 + exp((EDonor / KbT))); t_1 = NaChar / (1.0 + exp((Ev / KbT))); tmp = 0.0; if (KbT <= -3.4e+54) tmp = t_0 + (NaChar / (2.0 + (Ev / KbT))); elseif (KbT <= 2.1e-170) tmp = t_1; elseif (KbT <= 220000000000.0) tmp = t_0 + (NaChar / (2.0 - (mu / KbT))); elseif (KbT <= 9.5e+37) tmp = t_1; else tmp = (NdChar / (1.0 + exp((mu / KbT)))) + (NaChar / 2.0); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NdChar / N[(1.0 + N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[KbT, -3.4e+54], N[(t$95$0 + N[(NaChar / N[(2.0 + N[(Ev / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[KbT, 2.1e-170], t$95$1, If[LessEqual[KbT, 220000000000.0], N[(t$95$0 + N[(NaChar / N[(2.0 - N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[KbT, 9.5e+37], t$95$1, N[(N[(NdChar / N[(1.0 + N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / 2.0), $MachinePrecision]), $MachinePrecision]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{1 + e^{\frac{EDonor}{KbT}}}\\
t_1 := \frac{NaChar}{1 + e^{\frac{Ev}{KbT}}}\\
\mathbf{if}\;KbT \leq -3.4 \cdot 10^{+54}:\\
\;\;\;\;t\_0 + \frac{NaChar}{2 + \frac{Ev}{KbT}}\\
\mathbf{elif}\;KbT \leq 2.1 \cdot 10^{-170}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;KbT \leq 220000000000:\\
\;\;\;\;t\_0 + \frac{NaChar}{2 - \frac{mu}{KbT}}\\
\mathbf{elif}\;KbT \leq 9.5 \cdot 10^{+37}:\\
\;\;\;\;t\_1\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{mu}{KbT}}} + \frac{NaChar}{2}\\
\end{array}
\end{array}
if KbT < -3.4000000000000001e54Initial program 99.8%
Simplified99.8%
Taylor expanded in EDonor around inf 76.7%
Taylor expanded in Ev around inf 63.8%
Taylor expanded in Ev around 0 56.2%
if -3.4000000000000001e54 < KbT < 2.1000000000000001e-170 or 2.2e11 < KbT < 9.4999999999999995e37Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 35.5%
Taylor expanded in Ev around inf 25.5%
Taylor expanded in NdChar around 0 43.1%
if 2.1000000000000001e-170 < KbT < 2.2e11Initial program 100.0%
Simplified100.0%
Taylor expanded in EDonor around inf 69.2%
Taylor expanded in mu around inf 56.3%
associate-*r/51.4%
mul-1-neg51.4%
Simplified56.3%
Taylor expanded in mu around 0 39.1%
mul-1-neg39.1%
unsub-neg39.1%
Simplified39.1%
if 9.4999999999999995e37 < KbT Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 89.1%
Taylor expanded in KbT around inf 62.5%
Final simplification49.4%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NdChar (+ 1.0 (exp (/ EDonor KbT)))))
(t_1 (/ NaChar (+ 1.0 (exp (/ Ev KbT))))))
(if (<= KbT -2.75e+57)
(+ t_0 (/ NaChar (+ 2.0 (/ Ev KbT))))
(if (<= KbT 3.8e-134)
t_1
(if (<= KbT 9.5e-74)
(+ t_0 (/ NaChar 2.0))
(if (<= KbT 2.3e+37)
t_1
(+ (/ NdChar (+ 1.0 (exp (/ mu 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 t_0 = NdChar / (1.0 + exp((EDonor / KbT)));
double t_1 = NaChar / (1.0 + exp((Ev / KbT)));
double tmp;
if (KbT <= -2.75e+57) {
tmp = t_0 + (NaChar / (2.0 + (Ev / KbT)));
} else if (KbT <= 3.8e-134) {
tmp = t_1;
} else if (KbT <= 9.5e-74) {
tmp = t_0 + (NaChar / 2.0);
} else if (KbT <= 2.3e+37) {
tmp = t_1;
} else {
tmp = (NdChar / (1.0 + exp((mu / 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) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = ndchar / (1.0d0 + exp((edonor / kbt)))
t_1 = nachar / (1.0d0 + exp((ev / kbt)))
if (kbt <= (-2.75d+57)) then
tmp = t_0 + (nachar / (2.0d0 + (ev / kbt)))
else if (kbt <= 3.8d-134) then
tmp = t_1
else if (kbt <= 9.5d-74) then
tmp = t_0 + (nachar / 2.0d0)
else if (kbt <= 2.3d+37) then
tmp = t_1
else
tmp = (ndchar / (1.0d0 + exp((mu / 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 t_0 = NdChar / (1.0 + Math.exp((EDonor / KbT)));
double t_1 = NaChar / (1.0 + Math.exp((Ev / KbT)));
double tmp;
if (KbT <= -2.75e+57) {
tmp = t_0 + (NaChar / (2.0 + (Ev / KbT)));
} else if (KbT <= 3.8e-134) {
tmp = t_1;
} else if (KbT <= 9.5e-74) {
tmp = t_0 + (NaChar / 2.0);
} else if (KbT <= 2.3e+37) {
tmp = t_1;
} else {
tmp = (NdChar / (1.0 + Math.exp((mu / KbT)))) + (NaChar / 2.0);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NdChar / (1.0 + math.exp((EDonor / KbT))) t_1 = NaChar / (1.0 + math.exp((Ev / KbT))) tmp = 0 if KbT <= -2.75e+57: tmp = t_0 + (NaChar / (2.0 + (Ev / KbT))) elif KbT <= 3.8e-134: tmp = t_1 elif KbT <= 9.5e-74: tmp = t_0 + (NaChar / 2.0) elif KbT <= 2.3e+37: tmp = t_1 else: tmp = (NdChar / (1.0 + math.exp((mu / KbT)))) + (NaChar / 2.0) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NdChar / Float64(1.0 + exp(Float64(EDonor / KbT)))) t_1 = Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT)))) tmp = 0.0 if (KbT <= -2.75e+57) tmp = Float64(t_0 + Float64(NaChar / Float64(2.0 + Float64(Ev / KbT)))); elseif (KbT <= 3.8e-134) tmp = t_1; elseif (KbT <= 9.5e-74) tmp = Float64(t_0 + Float64(NaChar / 2.0)); elseif (KbT <= 2.3e+37) tmp = t_1; else tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(mu / KbT)))) + Float64(NaChar / 2.0)); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NdChar / (1.0 + exp((EDonor / KbT))); t_1 = NaChar / (1.0 + exp((Ev / KbT))); tmp = 0.0; if (KbT <= -2.75e+57) tmp = t_0 + (NaChar / (2.0 + (Ev / KbT))); elseif (KbT <= 3.8e-134) tmp = t_1; elseif (KbT <= 9.5e-74) tmp = t_0 + (NaChar / 2.0); elseif (KbT <= 2.3e+37) tmp = t_1; else tmp = (NdChar / (1.0 + exp((mu / KbT)))) + (NaChar / 2.0); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NdChar / N[(1.0 + N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[KbT, -2.75e+57], N[(t$95$0 + N[(NaChar / N[(2.0 + N[(Ev / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[KbT, 3.8e-134], t$95$1, If[LessEqual[KbT, 9.5e-74], N[(t$95$0 + N[(NaChar / 2.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[KbT, 2.3e+37], t$95$1, N[(N[(NdChar / N[(1.0 + N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / 2.0), $MachinePrecision]), $MachinePrecision]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{1 + e^{\frac{EDonor}{KbT}}}\\
t_1 := \frac{NaChar}{1 + e^{\frac{Ev}{KbT}}}\\
\mathbf{if}\;KbT \leq -2.75 \cdot 10^{+57}:\\
\;\;\;\;t\_0 + \frac{NaChar}{2 + \frac{Ev}{KbT}}\\
\mathbf{elif}\;KbT \leq 3.8 \cdot 10^{-134}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;KbT \leq 9.5 \cdot 10^{-74}:\\
\;\;\;\;t\_0 + \frac{NaChar}{2}\\
\mathbf{elif}\;KbT \leq 2.3 \cdot 10^{+37}:\\
\;\;\;\;t\_1\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{mu}{KbT}}} + \frac{NaChar}{2}\\
\end{array}
\end{array}
if KbT < -2.7500000000000001e57Initial program 99.8%
Simplified99.8%
Taylor expanded in EDonor around inf 76.7%
Taylor expanded in Ev around inf 63.8%
Taylor expanded in Ev around 0 56.2%
if -2.7500000000000001e57 < KbT < 3.80000000000000003e-134 or 9.5000000000000007e-74 < KbT < 2.30000000000000002e37Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 36.4%
Taylor expanded in Ev around inf 25.0%
Taylor expanded in NdChar around 0 40.4%
if 3.80000000000000003e-134 < KbT < 9.5000000000000007e-74Initial program 100.0%
Simplified100.0%
Taylor expanded in EDonor around inf 71.1%
Taylor expanded in KbT around inf 41.7%
if 2.30000000000000002e37 < KbT Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 89.1%
Taylor expanded in KbT around inf 62.5%
Final simplification48.6%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NaChar (+ 1.0 (exp (/ Ev KbT)))))
(t_1 (+ (/ NdChar (+ 1.0 (exp (/ EDonor KbT)))) (/ NaChar 2.0))))
(if (<= KbT -6e+66)
t_1
(if (<= KbT 9.5e-135)
t_0
(if (<= KbT 3.3e-73)
t_1
(if (<= KbT 1.3e+38)
t_0
(+ (/ NaChar (+ 1.0 (exp (/ Vef 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 t_0 = NaChar / (1.0 + exp((Ev / KbT)));
double t_1 = (NdChar / (1.0 + exp((EDonor / KbT)))) + (NaChar / 2.0);
double tmp;
if (KbT <= -6e+66) {
tmp = t_1;
} else if (KbT <= 9.5e-135) {
tmp = t_0;
} else if (KbT <= 3.3e-73) {
tmp = t_1;
} else if (KbT <= 1.3e+38) {
tmp = t_0;
} else {
tmp = (NaChar / (1.0 + exp((Vef / 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) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = nachar / (1.0d0 + exp((ev / kbt)))
t_1 = (ndchar / (1.0d0 + exp((edonor / kbt)))) + (nachar / 2.0d0)
if (kbt <= (-6d+66)) then
tmp = t_1
else if (kbt <= 9.5d-135) then
tmp = t_0
else if (kbt <= 3.3d-73) then
tmp = t_1
else if (kbt <= 1.3d+38) then
tmp = t_0
else
tmp = (nachar / (1.0d0 + exp((vef / 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 t_0 = NaChar / (1.0 + Math.exp((Ev / KbT)));
double t_1 = (NdChar / (1.0 + Math.exp((EDonor / KbT)))) + (NaChar / 2.0);
double tmp;
if (KbT <= -6e+66) {
tmp = t_1;
} else if (KbT <= 9.5e-135) {
tmp = t_0;
} else if (KbT <= 3.3e-73) {
tmp = t_1;
} else if (KbT <= 1.3e+38) {
tmp = t_0;
} else {
tmp = (NaChar / (1.0 + Math.exp((Vef / KbT)))) + (NdChar * 0.5);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NaChar / (1.0 + math.exp((Ev / KbT))) t_1 = (NdChar / (1.0 + math.exp((EDonor / KbT)))) + (NaChar / 2.0) tmp = 0 if KbT <= -6e+66: tmp = t_1 elif KbT <= 9.5e-135: tmp = t_0 elif KbT <= 3.3e-73: tmp = t_1 elif KbT <= 1.3e+38: tmp = t_0 else: tmp = (NaChar / (1.0 + math.exp((Vef / KbT)))) + (NdChar * 0.5) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT)))) t_1 = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(EDonor / KbT)))) + Float64(NaChar / 2.0)) tmp = 0.0 if (KbT <= -6e+66) tmp = t_1; elseif (KbT <= 9.5e-135) tmp = t_0; elseif (KbT <= 3.3e-73) tmp = t_1; elseif (KbT <= 1.3e+38) tmp = t_0; else tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Vef / KbT)))) + Float64(NdChar * 0.5)); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NaChar / (1.0 + exp((Ev / KbT))); t_1 = (NdChar / (1.0 + exp((EDonor / KbT)))) + (NaChar / 2.0); tmp = 0.0; if (KbT <= -6e+66) tmp = t_1; elseif (KbT <= 9.5e-135) tmp = t_0; elseif (KbT <= 3.3e-73) tmp = t_1; elseif (KbT <= 1.3e+38) tmp = t_0; else tmp = (NaChar / (1.0 + exp((Vef / KbT)))) + (NdChar * 0.5); 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[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NdChar / N[(1.0 + N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / 2.0), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[KbT, -6e+66], t$95$1, If[LessEqual[KbT, 9.5e-135], t$95$0, If[LessEqual[KbT, 3.3e-73], t$95$1, If[LessEqual[KbT, 1.3e+38], t$95$0, N[(N[(NaChar / N[(1.0 + N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar * 0.5), $MachinePrecision]), $MachinePrecision]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{Ev}{KbT}}}\\
t_1 := \frac{NdChar}{1 + e^{\frac{EDonor}{KbT}}} + \frac{NaChar}{2}\\
\mathbf{if}\;KbT \leq -6 \cdot 10^{+66}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;KbT \leq 9.5 \cdot 10^{-135}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;KbT \leq 3.3 \cdot 10^{-73}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;KbT \leq 1.3 \cdot 10^{+38}:\\
\;\;\;\;t\_0\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Vef}{KbT}}} + NdChar \cdot 0.5\\
\end{array}
\end{array}
if KbT < -6.00000000000000005e66 or 9.50000000000000007e-135 < KbT < 3.30000000000000004e-73Initial program 99.8%
Simplified99.8%
Taylor expanded in EDonor around inf 75.3%
Taylor expanded in KbT around inf 51.8%
if -6.00000000000000005e66 < KbT < 9.50000000000000007e-135 or 3.30000000000000004e-73 < KbT < 1.3e38Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 36.5%
Taylor expanded in Ev around inf 25.3%
Taylor expanded in NdChar around 0 40.3%
if 1.3e38 < KbT Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 72.4%
Taylor expanded in Vef around inf 62.3%
Final simplification48.4%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (or (<= NdChar -4.3e-165) (not (<= NdChar 1.32e-59)))
(+
(/ NdChar (+ 1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT))))
(/ NaChar (+ 2.0 (/ EAccept KbT))))
(+
(/ NaChar (+ 1.0 (exp (/ (+ Vef (+ Ev (- EAccept mu))) KbT))))
(/ NdChar (+ 2.0 (/ mu KbT))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NdChar <= -4.3e-165) || !(NdChar <= 1.32e-59)) {
tmp = (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (2.0 + (EAccept / KbT)));
} else {
tmp = (NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT)))) + (NdChar / (2.0 + (mu / KbT)));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if ((ndchar <= (-4.3d-165)) .or. (.not. (ndchar <= 1.32d-59))) then
tmp = (ndchar / (1.0d0 + exp(((edonor + (mu + (vef - ec))) / kbt)))) + (nachar / (2.0d0 + (eaccept / kbt)))
else
tmp = (nachar / (1.0d0 + exp(((vef + (ev + (eaccept - mu))) / kbt)))) + (ndchar / (2.0d0 + (mu / kbt)))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NdChar <= -4.3e-165) || !(NdChar <= 1.32e-59)) {
tmp = (NdChar / (1.0 + Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (2.0 + (EAccept / KbT)));
} else {
tmp = (NaChar / (1.0 + Math.exp(((Vef + (Ev + (EAccept - mu))) / KbT)))) + (NdChar / (2.0 + (mu / KbT)));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if (NdChar <= -4.3e-165) or not (NdChar <= 1.32e-59): tmp = (NdChar / (1.0 + math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (2.0 + (EAccept / KbT))) else: tmp = (NaChar / (1.0 + math.exp(((Vef + (Ev + (EAccept - mu))) / KbT)))) + (NdChar / (2.0 + (mu / KbT))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if ((NdChar <= -4.3e-165) || !(NdChar <= 1.32e-59)) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) + Float64(NaChar / Float64(2.0 + Float64(EAccept / KbT)))); else tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Ev + Float64(EAccept - mu))) / KbT)))) + Float64(NdChar / Float64(2.0 + Float64(mu / KbT)))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if ((NdChar <= -4.3e-165) || ~((NdChar <= 1.32e-59))) tmp = (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (2.0 + (EAccept / KbT))); else tmp = (NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT)))) + (NdChar / (2.0 + (mu / KbT))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[Or[LessEqual[NdChar, -4.3e-165], N[Not[LessEqual[NdChar, 1.32e-59]], $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 / N[(2.0 + N[(EAccept / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(Ev + N[(EAccept - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(2.0 + N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NdChar \leq -4.3 \cdot 10^{-165} \lor \neg \left(NdChar \leq 1.32 \cdot 10^{-59}\right):\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}} + \frac{NaChar}{2 + \frac{EAccept}{KbT}}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Vef + \left(Ev + \left(EAccept - mu\right)\right)}{KbT}}} + \frac{NdChar}{2 + \frac{mu}{KbT}}\\
\end{array}
\end{array}
if NdChar < -4.30000000000000007e-165 or 1.3199999999999999e-59 < NdChar Initial program 99.9%
Simplified99.9%
Taylor expanded in EAccept around inf 74.1%
Taylor expanded in EAccept around 0 61.3%
if -4.30000000000000007e-165 < NdChar < 1.3199999999999999e-59Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 87.8%
Taylor expanded in mu around 0 78.4%
Final simplification66.2%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (or (<= NdChar -0.092) (not (<= NdChar 1.32e-59)))
(+
(/ NdChar (+ 1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT))))
(/ NaChar (+ 2.0 (/ EAccept KbT))))
(+
(/ NaChar (+ 1.0 (exp (/ (+ Vef (+ Ev (- EAccept mu))) 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 ((NdChar <= -0.092) || !(NdChar <= 1.32e-59)) {
tmp = (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (2.0 + (EAccept / KbT)));
} else {
tmp = (NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / 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 ((ndchar <= (-0.092d0)) .or. (.not. (ndchar <= 1.32d-59))) then
tmp = (ndchar / (1.0d0 + exp(((edonor + (mu + (vef - ec))) / kbt)))) + (nachar / (2.0d0 + (eaccept / kbt)))
else
tmp = (nachar / (1.0d0 + exp(((vef + (ev + (eaccept - mu))) / 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 ((NdChar <= -0.092) || !(NdChar <= 1.32e-59)) {
tmp = (NdChar / (1.0 + Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (2.0 + (EAccept / KbT)));
} else {
tmp = (NaChar / (1.0 + Math.exp(((Vef + (Ev + (EAccept - mu))) / KbT)))) + (NdChar * 0.5);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if (NdChar <= -0.092) or not (NdChar <= 1.32e-59): tmp = (NdChar / (1.0 + math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (2.0 + (EAccept / KbT))) else: tmp = (NaChar / (1.0 + math.exp(((Vef + (Ev + (EAccept - mu))) / KbT)))) + (NdChar * 0.5) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if ((NdChar <= -0.092) || !(NdChar <= 1.32e-59)) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) + Float64(NaChar / Float64(2.0 + Float64(EAccept / KbT)))); else tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Ev + Float64(EAccept - mu))) / 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 ((NdChar <= -0.092) || ~((NdChar <= 1.32e-59))) tmp = (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (2.0 + (EAccept / KbT))); else tmp = (NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT)))) + (NdChar * 0.5); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[Or[LessEqual[NdChar, -0.092], N[Not[LessEqual[NdChar, 1.32e-59]], $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 / N[(2.0 + N[(EAccept / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(Ev + N[(EAccept - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar * 0.5), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NdChar \leq -0.092 \lor \neg \left(NdChar \leq 1.32 \cdot 10^{-59}\right):\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}} + \frac{NaChar}{2 + \frac{EAccept}{KbT}}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Vef + \left(Ev + \left(EAccept - mu\right)\right)}{KbT}}} + NdChar \cdot 0.5\\
\end{array}
\end{array}
if NdChar < -0.091999999999999998 or 1.3199999999999999e-59 < NdChar Initial program 99.9%
Simplified99.9%
Taylor expanded in EAccept around inf 75.1%
Taylor expanded in EAccept around 0 63.0%
if -0.091999999999999998 < NdChar < 1.3199999999999999e-59Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 67.7%
Final simplification64.9%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (or (<= NdChar -0.00048) (not (<= NdChar 3.5e+47)))
(+
(/ NdChar (+ 1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT))))
(/ NaChar 2.0))
(+
(* NdChar 0.5)
(/ NaChar (+ 1.0 (exp (/ 1.0 (/ KbT (+ EAccept (- (+ Vef Ev) mu))))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NdChar <= -0.00048) || !(NdChar <= 3.5e+47)) {
tmp = (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / 2.0);
} else {
tmp = (NdChar * 0.5) + (NaChar / (1.0 + exp((1.0 / (KbT / (EAccept + ((Vef + Ev) - mu)))))));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if ((ndchar <= (-0.00048d0)) .or. (.not. (ndchar <= 3.5d+47))) then
tmp = (ndchar / (1.0d0 + exp(((edonor + (mu + (vef - ec))) / kbt)))) + (nachar / 2.0d0)
else
tmp = (ndchar * 0.5d0) + (nachar / (1.0d0 + exp((1.0d0 / (kbt / (eaccept + ((vef + ev) - mu)))))))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NdChar <= -0.00048) || !(NdChar <= 3.5e+47)) {
tmp = (NdChar / (1.0 + Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / 2.0);
} else {
tmp = (NdChar * 0.5) + (NaChar / (1.0 + Math.exp((1.0 / (KbT / (EAccept + ((Vef + Ev) - mu)))))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if (NdChar <= -0.00048) or not (NdChar <= 3.5e+47): tmp = (NdChar / (1.0 + math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / 2.0) else: tmp = (NdChar * 0.5) + (NaChar / (1.0 + math.exp((1.0 / (KbT / (EAccept + ((Vef + Ev) - mu))))))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if ((NdChar <= -0.00048) || !(NdChar <= 3.5e+47)) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) + Float64(NaChar / 2.0)); else tmp = Float64(Float64(NdChar * 0.5) + Float64(NaChar / Float64(1.0 + exp(Float64(1.0 / Float64(KbT / Float64(EAccept + Float64(Float64(Vef + Ev) - mu)))))))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if ((NdChar <= -0.00048) || ~((NdChar <= 3.5e+47))) tmp = (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / 2.0); else tmp = (NdChar * 0.5) + (NaChar / (1.0 + exp((1.0 / (KbT / (EAccept + ((Vef + Ev) - mu))))))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[Or[LessEqual[NdChar, -0.00048], N[Not[LessEqual[NdChar, 3.5e+47]], $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], N[(N[(NdChar * 0.5), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Exp[N[(1.0 / N[(KbT / N[(EAccept + N[(N[(Vef + Ev), $MachinePrecision] - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NdChar \leq -0.00048 \lor \neg \left(NdChar \leq 3.5 \cdot 10^{+47}\right):\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}} + \frac{NaChar}{2}\\
\mathbf{else}:\\
\;\;\;\;NdChar \cdot 0.5 + \frac{NaChar}{1 + e^{\frac{1}{\frac{KbT}{EAccept + \left(\left(Vef + Ev\right) - mu\right)}}}}\\
\end{array}
\end{array}
if NdChar < -4.80000000000000012e-4 or 3.50000000000000015e47 < NdChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 59.0%
if -4.80000000000000012e-4 < NdChar < 3.50000000000000015e47Initial program 99.9%
Simplified99.9%
Taylor expanded in KbT around inf 63.9%
clear-num63.9%
inv-pow63.9%
associate-+r+63.9%
associate-+r-63.9%
Applied egg-rr63.9%
unpow-163.9%
+-commutative63.9%
+-commutative63.9%
associate--l+63.9%
Simplified63.9%
Final simplification61.4%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NdChar (+ 1.0 (exp (/ EDonor KbT))))))
(if (<= NdChar -1.25e+113)
(+ t_0 (/ NaChar (- 2.0 (/ mu KbT))))
(if (<= NdChar 5.8e+72)
(+
(* NdChar 0.5)
(/ NaChar (+ 1.0 (exp (/ 1.0 (/ KbT (+ EAccept (- (+ Vef Ev) mu))))))))
(+ t_0 (/ NaChar (+ 2.0 (/ Ev KbT))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (1.0 + exp((EDonor / KbT)));
double tmp;
if (NdChar <= -1.25e+113) {
tmp = t_0 + (NaChar / (2.0 - (mu / KbT)));
} else if (NdChar <= 5.8e+72) {
tmp = (NdChar * 0.5) + (NaChar / (1.0 + exp((1.0 / (KbT / (EAccept + ((Vef + Ev) - mu)))))));
} else {
tmp = t_0 + (NaChar / (2.0 + (Ev / KbT)));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: tmp
t_0 = ndchar / (1.0d0 + exp((edonor / kbt)))
if (ndchar <= (-1.25d+113)) then
tmp = t_0 + (nachar / (2.0d0 - (mu / kbt)))
else if (ndchar <= 5.8d+72) then
tmp = (ndchar * 0.5d0) + (nachar / (1.0d0 + exp((1.0d0 / (kbt / (eaccept + ((vef + ev) - mu)))))))
else
tmp = t_0 + (nachar / (2.0d0 + (ev / kbt)))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (1.0 + Math.exp((EDonor / KbT)));
double tmp;
if (NdChar <= -1.25e+113) {
tmp = t_0 + (NaChar / (2.0 - (mu / KbT)));
} else if (NdChar <= 5.8e+72) {
tmp = (NdChar * 0.5) + (NaChar / (1.0 + Math.exp((1.0 / (KbT / (EAccept + ((Vef + Ev) - mu)))))));
} else {
tmp = t_0 + (NaChar / (2.0 + (Ev / KbT)));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NdChar / (1.0 + math.exp((EDonor / KbT))) tmp = 0 if NdChar <= -1.25e+113: tmp = t_0 + (NaChar / (2.0 - (mu / KbT))) elif NdChar <= 5.8e+72: tmp = (NdChar * 0.5) + (NaChar / (1.0 + math.exp((1.0 / (KbT / (EAccept + ((Vef + Ev) - mu))))))) else: tmp = t_0 + (NaChar / (2.0 + (Ev / KbT))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NdChar / Float64(1.0 + exp(Float64(EDonor / KbT)))) tmp = 0.0 if (NdChar <= -1.25e+113) tmp = Float64(t_0 + Float64(NaChar / Float64(2.0 - Float64(mu / KbT)))); elseif (NdChar <= 5.8e+72) tmp = Float64(Float64(NdChar * 0.5) + Float64(NaChar / Float64(1.0 + exp(Float64(1.0 / Float64(KbT / Float64(EAccept + Float64(Float64(Vef + Ev) - mu)))))))); else tmp = Float64(t_0 + Float64(NaChar / Float64(2.0 + Float64(Ev / KbT)))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NdChar / (1.0 + exp((EDonor / KbT))); tmp = 0.0; if (NdChar <= -1.25e+113) tmp = t_0 + (NaChar / (2.0 - (mu / KbT))); elseif (NdChar <= 5.8e+72) tmp = (NdChar * 0.5) + (NaChar / (1.0 + exp((1.0 / (KbT / (EAccept + ((Vef + Ev) - mu))))))); else tmp = t_0 + (NaChar / (2.0 + (Ev / KbT))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NdChar / N[(1.0 + N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NdChar, -1.25e+113], N[(t$95$0 + N[(NaChar / N[(2.0 - N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NdChar, 5.8e+72], N[(N[(NdChar * 0.5), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Exp[N[(1.0 / N[(KbT / N[(EAccept + N[(N[(Vef + Ev), $MachinePrecision] - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(t$95$0 + N[(NaChar / N[(2.0 + N[(Ev / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{1 + e^{\frac{EDonor}{KbT}}}\\
\mathbf{if}\;NdChar \leq -1.25 \cdot 10^{+113}:\\
\;\;\;\;t\_0 + \frac{NaChar}{2 - \frac{mu}{KbT}}\\
\mathbf{elif}\;NdChar \leq 5.8 \cdot 10^{+72}:\\
\;\;\;\;NdChar \cdot 0.5 + \frac{NaChar}{1 + e^{\frac{1}{\frac{KbT}{EAccept + \left(\left(Vef + Ev\right) - mu\right)}}}}\\
\mathbf{else}:\\
\;\;\;\;t\_0 + \frac{NaChar}{2 + \frac{Ev}{KbT}}\\
\end{array}
\end{array}
if NdChar < -1.25e113Initial program 100.0%
Simplified100.0%
Taylor expanded in EDonor around inf 60.3%
Taylor expanded in mu around inf 57.7%
associate-*r/57.4%
mul-1-neg57.4%
Simplified57.7%
Taylor expanded in mu around 0 53.7%
mul-1-neg53.7%
unsub-neg53.7%
Simplified53.7%
if -1.25e113 < NdChar < 5.80000000000000034e72Initial program 99.9%
Simplified99.9%
Taylor expanded in KbT around inf 60.1%
clear-num60.1%
inv-pow60.1%
associate-+r+60.1%
associate-+r-60.1%
Applied egg-rr60.1%
unpow-160.1%
+-commutative60.1%
+-commutative60.1%
associate--l+60.1%
Simplified60.1%
if 5.80000000000000034e72 < NdChar Initial program 100.0%
Simplified100.0%
Taylor expanded in EDonor around inf 72.4%
Taylor expanded in Ev around inf 64.5%
Taylor expanded in Ev around 0 53.7%
Final simplification57.6%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NdChar (+ 1.0 (exp (/ EDonor KbT))))))
(if (<= NdChar -1.4e+113)
(+ t_0 (/ NaChar (- 2.0 (/ mu KbT))))
(if (<= NdChar 1.16e+70)
(+
(/ NaChar (+ 1.0 (exp (/ (+ Vef (+ Ev (- EAccept mu))) KbT))))
(* NdChar 0.5))
(+ t_0 (/ NaChar (+ 2.0 (/ Ev KbT))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (1.0 + exp((EDonor / KbT)));
double tmp;
if (NdChar <= -1.4e+113) {
tmp = t_0 + (NaChar / (2.0 - (mu / KbT)));
} else if (NdChar <= 1.16e+70) {
tmp = (NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT)))) + (NdChar * 0.5);
} else {
tmp = t_0 + (NaChar / (2.0 + (Ev / KbT)));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: tmp
t_0 = ndchar / (1.0d0 + exp((edonor / kbt)))
if (ndchar <= (-1.4d+113)) then
tmp = t_0 + (nachar / (2.0d0 - (mu / kbt)))
else if (ndchar <= 1.16d+70) then
tmp = (nachar / (1.0d0 + exp(((vef + (ev + (eaccept - mu))) / kbt)))) + (ndchar * 0.5d0)
else
tmp = t_0 + (nachar / (2.0d0 + (ev / kbt)))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (1.0 + Math.exp((EDonor / KbT)));
double tmp;
if (NdChar <= -1.4e+113) {
tmp = t_0 + (NaChar / (2.0 - (mu / KbT)));
} else if (NdChar <= 1.16e+70) {
tmp = (NaChar / (1.0 + Math.exp(((Vef + (Ev + (EAccept - mu))) / KbT)))) + (NdChar * 0.5);
} else {
tmp = t_0 + (NaChar / (2.0 + (Ev / KbT)));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NdChar / (1.0 + math.exp((EDonor / KbT))) tmp = 0 if NdChar <= -1.4e+113: tmp = t_0 + (NaChar / (2.0 - (mu / KbT))) elif NdChar <= 1.16e+70: tmp = (NaChar / (1.0 + math.exp(((Vef + (Ev + (EAccept - mu))) / KbT)))) + (NdChar * 0.5) else: tmp = t_0 + (NaChar / (2.0 + (Ev / KbT))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NdChar / Float64(1.0 + exp(Float64(EDonor / KbT)))) tmp = 0.0 if (NdChar <= -1.4e+113) tmp = Float64(t_0 + Float64(NaChar / Float64(2.0 - Float64(mu / KbT)))); elseif (NdChar <= 1.16e+70) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Ev + Float64(EAccept - mu))) / KbT)))) + Float64(NdChar * 0.5)); else tmp = Float64(t_0 + Float64(NaChar / Float64(2.0 + Float64(Ev / KbT)))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NdChar / (1.0 + exp((EDonor / KbT))); tmp = 0.0; if (NdChar <= -1.4e+113) tmp = t_0 + (NaChar / (2.0 - (mu / KbT))); elseif (NdChar <= 1.16e+70) tmp = (NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT)))) + (NdChar * 0.5); else tmp = t_0 + (NaChar / (2.0 + (Ev / KbT))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NdChar / N[(1.0 + N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NdChar, -1.4e+113], N[(t$95$0 + N[(NaChar / N[(2.0 - N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NdChar, 1.16e+70], N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(Ev + N[(EAccept - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar * 0.5), $MachinePrecision]), $MachinePrecision], N[(t$95$0 + N[(NaChar / N[(2.0 + N[(Ev / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{1 + e^{\frac{EDonor}{KbT}}}\\
\mathbf{if}\;NdChar \leq -1.4 \cdot 10^{+113}:\\
\;\;\;\;t\_0 + \frac{NaChar}{2 - \frac{mu}{KbT}}\\
\mathbf{elif}\;NdChar \leq 1.16 \cdot 10^{+70}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Vef + \left(Ev + \left(EAccept - mu\right)\right)}{KbT}}} + NdChar \cdot 0.5\\
\mathbf{else}:\\
\;\;\;\;t\_0 + \frac{NaChar}{2 + \frac{Ev}{KbT}}\\
\end{array}
\end{array}
if NdChar < -1.39999999999999999e113Initial program 100.0%
Simplified100.0%
Taylor expanded in EDonor around inf 60.3%
Taylor expanded in mu around inf 57.7%
associate-*r/57.4%
mul-1-neg57.4%
Simplified57.7%
Taylor expanded in mu around 0 53.7%
mul-1-neg53.7%
unsub-neg53.7%
Simplified53.7%
if -1.39999999999999999e113 < NdChar < 1.1599999999999999e70Initial program 99.9%
Simplified99.9%
Taylor expanded in KbT around inf 60.1%
if 1.1599999999999999e70 < NdChar Initial program 100.0%
Simplified100.0%
Taylor expanded in EDonor around inf 72.4%
Taylor expanded in Ev around inf 64.5%
Taylor expanded in Ev around 0 53.7%
Final simplification57.6%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (if (or (<= KbT -1e+68) (not (<= KbT 7.7e+37))) (+ (/ NaChar (+ 1.0 (exp (/ EAccept KbT)))) (* NdChar 0.5)) (/ NaChar (+ 1.0 (exp (/ Ev KbT))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((KbT <= -1e+68) || !(KbT <= 7.7e+37)) {
tmp = (NaChar / (1.0 + exp((EAccept / KbT)))) + (NdChar * 0.5);
} else {
tmp = NaChar / (1.0 + exp((Ev / KbT)));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if ((kbt <= (-1d+68)) .or. (.not. (kbt <= 7.7d+37))) then
tmp = (nachar / (1.0d0 + exp((eaccept / kbt)))) + (ndchar * 0.5d0)
else
tmp = nachar / (1.0d0 + exp((ev / kbt)))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((KbT <= -1e+68) || !(KbT <= 7.7e+37)) {
tmp = (NaChar / (1.0 + Math.exp((EAccept / KbT)))) + (NdChar * 0.5);
} else {
tmp = NaChar / (1.0 + Math.exp((Ev / KbT)));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if (KbT <= -1e+68) or not (KbT <= 7.7e+37): tmp = (NaChar / (1.0 + math.exp((EAccept / KbT)))) + (NdChar * 0.5) else: tmp = NaChar / (1.0 + math.exp((Ev / KbT))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if ((KbT <= -1e+68) || !(KbT <= 7.7e+37)) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT)))) + Float64(NdChar * 0.5)); else tmp = Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT)))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if ((KbT <= -1e+68) || ~((KbT <= 7.7e+37))) tmp = (NaChar / (1.0 + exp((EAccept / KbT)))) + (NdChar * 0.5); else tmp = NaChar / (1.0 + exp((Ev / KbT))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[Or[LessEqual[KbT, -1e+68], N[Not[LessEqual[KbT, 7.7e+37]], $MachinePrecision]], N[(N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar * 0.5), $MachinePrecision]), $MachinePrecision], N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;KbT \leq -1 \cdot 10^{+68} \lor \neg \left(KbT \leq 7.7 \cdot 10^{+37}\right):\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}} + NdChar \cdot 0.5\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Ev}{KbT}}}\\
\end{array}
\end{array}
if KbT < -9.99999999999999953e67 or 7.70000000000000022e37 < KbT Initial program 99.9%
Simplified99.9%
Taylor expanded in KbT around inf 68.9%
Taylor expanded in EAccept around inf 56.1%
if -9.99999999999999953e67 < KbT < 7.70000000000000022e37Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 34.9%
Taylor expanded in Ev around inf 23.8%
Taylor expanded in NdChar around 0 37.1%
Final simplification45.0%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (<= NdChar -8.2e-167)
(+ (/ NdChar (+ 1.0 (exp (/ mu KbT)))) (/ NaChar 2.0))
(if (<= NdChar 1.25e+27)
(/ NaChar (+ 1.0 (exp (/ Ev KbT))))
(+ (/ NdChar (+ 1.0 (exp (/ EDonor KbT)))) (/ NaChar 2.0)))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (NdChar <= -8.2e-167) {
tmp = (NdChar / (1.0 + exp((mu / KbT)))) + (NaChar / 2.0);
} else if (NdChar <= 1.25e+27) {
tmp = NaChar / (1.0 + exp((Ev / KbT)));
} else {
tmp = (NdChar / (1.0 + exp((EDonor / KbT)))) + (NaChar / 2.0);
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if (ndchar <= (-8.2d-167)) then
tmp = (ndchar / (1.0d0 + exp((mu / kbt)))) + (nachar / 2.0d0)
else if (ndchar <= 1.25d+27) then
tmp = nachar / (1.0d0 + exp((ev / kbt)))
else
tmp = (ndchar / (1.0d0 + exp((edonor / kbt)))) + (nachar / 2.0d0)
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (NdChar <= -8.2e-167) {
tmp = (NdChar / (1.0 + Math.exp((mu / KbT)))) + (NaChar / 2.0);
} else if (NdChar <= 1.25e+27) {
tmp = NaChar / (1.0 + Math.exp((Ev / KbT)));
} else {
tmp = (NdChar / (1.0 + Math.exp((EDonor / KbT)))) + (NaChar / 2.0);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if NdChar <= -8.2e-167: tmp = (NdChar / (1.0 + math.exp((mu / KbT)))) + (NaChar / 2.0) elif NdChar <= 1.25e+27: tmp = NaChar / (1.0 + math.exp((Ev / KbT))) else: tmp = (NdChar / (1.0 + math.exp((EDonor / KbT)))) + (NaChar / 2.0) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (NdChar <= -8.2e-167) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(mu / KbT)))) + Float64(NaChar / 2.0)); elseif (NdChar <= 1.25e+27) tmp = Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT)))); else tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(EDonor / KbT)))) + Float64(NaChar / 2.0)); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (NdChar <= -8.2e-167) tmp = (NdChar / (1.0 + exp((mu / KbT)))) + (NaChar / 2.0); elseif (NdChar <= 1.25e+27) tmp = NaChar / (1.0 + exp((Ev / KbT))); else tmp = (NdChar / (1.0 + exp((EDonor / KbT)))) + (NaChar / 2.0); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[NdChar, -8.2e-167], N[(N[(NdChar / N[(1.0 + N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / 2.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[NdChar, 1.25e+27], N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar / N[(1.0 + N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / 2.0), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NdChar \leq -8.2 \cdot 10^{-167}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{mu}{KbT}}} + \frac{NaChar}{2}\\
\mathbf{elif}\;NdChar \leq 1.25 \cdot 10^{+27}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Ev}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{EDonor}{KbT}}} + \frac{NaChar}{2}\\
\end{array}
\end{array}
if NdChar < -8.20000000000000036e-167Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 67.1%
Taylor expanded in KbT around inf 44.0%
if -8.20000000000000036e-167 < NdChar < 1.24999999999999995e27Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 68.1%
Taylor expanded in Ev around inf 44.6%
Taylor expanded in NdChar around 0 50.9%
if 1.24999999999999995e27 < NdChar Initial program 99.8%
Simplified99.8%
Taylor expanded in EDonor around inf 75.0%
Taylor expanded in KbT around inf 45.7%
Final simplification46.9%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (<= KbT -2.35e+67)
(+ (/ NaChar (+ 1.0 (exp (/ EAccept KbT)))) (* NdChar 0.5))
(if (<= KbT 4.5e+37)
(/ NaChar (+ 1.0 (exp (/ Ev KbT))))
(+ (/ NaChar (+ 1.0 (exp (/ Vef 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 (KbT <= -2.35e+67) {
tmp = (NaChar / (1.0 + exp((EAccept / KbT)))) + (NdChar * 0.5);
} else if (KbT <= 4.5e+37) {
tmp = NaChar / (1.0 + exp((Ev / KbT)));
} else {
tmp = (NaChar / (1.0 + exp((Vef / 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 (kbt <= (-2.35d+67)) then
tmp = (nachar / (1.0d0 + exp((eaccept / kbt)))) + (ndchar * 0.5d0)
else if (kbt <= 4.5d+37) then
tmp = nachar / (1.0d0 + exp((ev / kbt)))
else
tmp = (nachar / (1.0d0 + exp((vef / 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 (KbT <= -2.35e+67) {
tmp = (NaChar / (1.0 + Math.exp((EAccept / KbT)))) + (NdChar * 0.5);
} else if (KbT <= 4.5e+37) {
tmp = NaChar / (1.0 + Math.exp((Ev / KbT)));
} else {
tmp = (NaChar / (1.0 + Math.exp((Vef / KbT)))) + (NdChar * 0.5);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if KbT <= -2.35e+67: tmp = (NaChar / (1.0 + math.exp((EAccept / KbT)))) + (NdChar * 0.5) elif KbT <= 4.5e+37: tmp = NaChar / (1.0 + math.exp((Ev / KbT))) else: tmp = (NaChar / (1.0 + math.exp((Vef / KbT)))) + (NdChar * 0.5) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (KbT <= -2.35e+67) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT)))) + Float64(NdChar * 0.5)); elseif (KbT <= 4.5e+37) tmp = Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT)))); else tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Vef / 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 (KbT <= -2.35e+67) tmp = (NaChar / (1.0 + exp((EAccept / KbT)))) + (NdChar * 0.5); elseif (KbT <= 4.5e+37) tmp = NaChar / (1.0 + exp((Ev / KbT))); else tmp = (NaChar / (1.0 + exp((Vef / KbT)))) + (NdChar * 0.5); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[KbT, -2.35e+67], N[(N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar * 0.5), $MachinePrecision]), $MachinePrecision], If[LessEqual[KbT, 4.5e+37], N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar / N[(1.0 + N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar * 0.5), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;KbT \leq -2.35 \cdot 10^{+67}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}} + NdChar \cdot 0.5\\
\mathbf{elif}\;KbT \leq 4.5 \cdot 10^{+37}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Ev}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Vef}{KbT}}} + NdChar \cdot 0.5\\
\end{array}
\end{array}
if KbT < -2.35000000000000009e67Initial program 99.8%
Simplified99.8%
Taylor expanded in KbT around inf 64.9%
Taylor expanded in EAccept around inf 51.4%
if -2.35000000000000009e67 < KbT < 4.49999999999999962e37Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 34.9%
Taylor expanded in Ev around inf 23.8%
Taylor expanded in NdChar around 0 37.1%
if 4.49999999999999962e37 < KbT Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 72.4%
Taylor expanded in Vef around inf 62.3%
Final simplification45.4%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NaChar (+ 1.0 (exp (/ Ev KbT))))))
(if (<= KbT -2.8e+66)
(+ (/ NaChar (+ 1.0 (exp (/ EAccept KbT)))) (* NdChar 0.5))
(if (<= KbT 1.5e-86) t_0 (+ t_0 (* NdChar 0.5))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NaChar / (1.0 + exp((Ev / KbT)));
double tmp;
if (KbT <= -2.8e+66) {
tmp = (NaChar / (1.0 + exp((EAccept / KbT)))) + (NdChar * 0.5);
} else if (KbT <= 1.5e-86) {
tmp = t_0;
} else {
tmp = t_0 + (NdChar * 0.5);
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: tmp
t_0 = nachar / (1.0d0 + exp((ev / kbt)))
if (kbt <= (-2.8d+66)) then
tmp = (nachar / (1.0d0 + exp((eaccept / kbt)))) + (ndchar * 0.5d0)
else if (kbt <= 1.5d-86) then
tmp = t_0
else
tmp = t_0 + (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 t_0 = NaChar / (1.0 + Math.exp((Ev / KbT)));
double tmp;
if (KbT <= -2.8e+66) {
tmp = (NaChar / (1.0 + Math.exp((EAccept / KbT)))) + (NdChar * 0.5);
} else if (KbT <= 1.5e-86) {
tmp = t_0;
} else {
tmp = t_0 + (NdChar * 0.5);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NaChar / (1.0 + math.exp((Ev / KbT))) tmp = 0 if KbT <= -2.8e+66: tmp = (NaChar / (1.0 + math.exp((EAccept / KbT)))) + (NdChar * 0.5) elif KbT <= 1.5e-86: tmp = t_0 else: tmp = t_0 + (NdChar * 0.5) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT)))) tmp = 0.0 if (KbT <= -2.8e+66) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT)))) + Float64(NdChar * 0.5)); elseif (KbT <= 1.5e-86) tmp = t_0; else tmp = Float64(t_0 + Float64(NdChar * 0.5)); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NaChar / (1.0 + exp((Ev / KbT))); tmp = 0.0; if (KbT <= -2.8e+66) tmp = (NaChar / (1.0 + exp((EAccept / KbT)))) + (NdChar * 0.5); elseif (KbT <= 1.5e-86) tmp = t_0; else tmp = t_0 + (NdChar * 0.5); 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[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[KbT, -2.8e+66], N[(N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar * 0.5), $MachinePrecision]), $MachinePrecision], If[LessEqual[KbT, 1.5e-86], t$95$0, N[(t$95$0 + N[(NdChar * 0.5), $MachinePrecision]), $MachinePrecision]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{Ev}{KbT}}}\\
\mathbf{if}\;KbT \leq -2.8 \cdot 10^{+66}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}} + NdChar \cdot 0.5\\
\mathbf{elif}\;KbT \leq 1.5 \cdot 10^{-86}:\\
\;\;\;\;t\_0\\
\mathbf{else}:\\
\;\;\;\;t\_0 + NdChar \cdot 0.5\\
\end{array}
\end{array}
if KbT < -2.8000000000000001e66Initial program 99.8%
Simplified99.8%
Taylor expanded in KbT around inf 64.9%
Taylor expanded in EAccept around inf 51.4%
if -2.8000000000000001e66 < KbT < 1.5e-86Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 33.0%
Taylor expanded in Ev around inf 23.8%
Taylor expanded in NdChar around 0 39.9%
if 1.5e-86 < KbT Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 61.0%
Taylor expanded in Ev around inf 46.7%
Final simplification44.5%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (<= KbT -3.6e+109)
(+ (* NdChar 0.5) (/ NaChar (+ 2.0 (/ Ev KbT))))
(if (<= KbT 2.5e+47)
(/ NaChar (+ 1.0 (exp (/ Ev KbT))))
(+ (/ NaChar 2.0) (/ NdChar (+ 2.0 (/ 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 (KbT <= -3.6e+109) {
tmp = (NdChar * 0.5) + (NaChar / (2.0 + (Ev / KbT)));
} else if (KbT <= 2.5e+47) {
tmp = NaChar / (1.0 + exp((Ev / KbT)));
} else {
tmp = (NaChar / 2.0) + (NdChar / (2.0 + (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 (kbt <= (-3.6d+109)) then
tmp = (ndchar * 0.5d0) + (nachar / (2.0d0 + (ev / kbt)))
else if (kbt <= 2.5d+47) then
tmp = nachar / (1.0d0 + exp((ev / kbt)))
else
tmp = (nachar / 2.0d0) + (ndchar / (2.0d0 + (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 (KbT <= -3.6e+109) {
tmp = (NdChar * 0.5) + (NaChar / (2.0 + (Ev / KbT)));
} else if (KbT <= 2.5e+47) {
tmp = NaChar / (1.0 + Math.exp((Ev / KbT)));
} else {
tmp = (NaChar / 2.0) + (NdChar / (2.0 + (EDonor / KbT)));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if KbT <= -3.6e+109: tmp = (NdChar * 0.5) + (NaChar / (2.0 + (Ev / KbT))) elif KbT <= 2.5e+47: tmp = NaChar / (1.0 + math.exp((Ev / KbT))) else: tmp = (NaChar / 2.0) + (NdChar / (2.0 + (EDonor / KbT))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (KbT <= -3.6e+109) tmp = Float64(Float64(NdChar * 0.5) + Float64(NaChar / Float64(2.0 + Float64(Ev / KbT)))); elseif (KbT <= 2.5e+47) tmp = Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT)))); else tmp = Float64(Float64(NaChar / 2.0) + Float64(NdChar / Float64(2.0 + Float64(EDonor / KbT)))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (KbT <= -3.6e+109) tmp = (NdChar * 0.5) + (NaChar / (2.0 + (Ev / KbT))); elseif (KbT <= 2.5e+47) tmp = NaChar / (1.0 + exp((Ev / KbT))); else tmp = (NaChar / 2.0) + (NdChar / (2.0 + (EDonor / KbT))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[KbT, -3.6e+109], N[(N[(NdChar * 0.5), $MachinePrecision] + N[(NaChar / N[(2.0 + N[(Ev / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[KbT, 2.5e+47], N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar / 2.0), $MachinePrecision] + N[(NdChar / N[(2.0 + N[(EDonor / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;KbT \leq -3.6 \cdot 10^{+109}:\\
\;\;\;\;NdChar \cdot 0.5 + \frac{NaChar}{2 + \frac{Ev}{KbT}}\\
\mathbf{elif}\;KbT \leq 2.5 \cdot 10^{+47}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Ev}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{2} + \frac{NdChar}{2 + \frac{EDonor}{KbT}}\\
\end{array}
\end{array}
if KbT < -3.6e109Initial program 99.8%
Simplified99.8%
Taylor expanded in KbT around inf 63.5%
Taylor expanded in Ev around inf 55.3%
Taylor expanded in Ev around 0 48.2%
if -3.6e109 < KbT < 2.50000000000000011e47Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 37.7%
Taylor expanded in Ev around inf 26.0%
Taylor expanded in NdChar around 0 38.3%
if 2.50000000000000011e47 < KbT Initial program 100.0%
Simplified100.0%
Taylor expanded in EDonor around inf 77.5%
Taylor expanded in KbT around inf 54.4%
Taylor expanded in EDonor around 0 54.1%
Final simplification43.1%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (if (<= EAccept 9.5e+163) (* 0.5 (+ NdChar NaChar)) (/ NdChar (+ 2.0 (/ 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 (EAccept <= 9.5e+163) {
tmp = 0.5 * (NdChar + NaChar);
} else {
tmp = NdChar / (2.0 + (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 (eaccept <= 9.5d+163) then
tmp = 0.5d0 * (ndchar + nachar)
else
tmp = ndchar / (2.0d0 + (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 (EAccept <= 9.5e+163) {
tmp = 0.5 * (NdChar + NaChar);
} else {
tmp = NdChar / (2.0 + (EDonor / KbT));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if EAccept <= 9.5e+163: tmp = 0.5 * (NdChar + NaChar) else: tmp = NdChar / (2.0 + (EDonor / KbT)) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (EAccept <= 9.5e+163) tmp = Float64(0.5 * Float64(NdChar + NaChar)); else tmp = Float64(NdChar / Float64(2.0 + Float64(EDonor / KbT))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (EAccept <= 9.5e+163) tmp = 0.5 * (NdChar + NaChar); else tmp = NdChar / (2.0 + (EDonor / KbT)); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[EAccept, 9.5e+163], N[(0.5 * N[(NdChar + NaChar), $MachinePrecision]), $MachinePrecision], N[(NdChar / N[(2.0 + N[(EDonor / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;EAccept \leq 9.5 \cdot 10^{+163}:\\
\;\;\;\;0.5 \cdot \left(NdChar + NaChar\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{2 + \frac{EDonor}{KbT}}\\
\end{array}
\end{array}
if EAccept < 9.50000000000000053e163Initial program 99.9%
Simplified99.9%
Taylor expanded in EDonor around inf 73.0%
Taylor expanded in KbT around inf 39.7%
Taylor expanded in EDonor around 0 29.9%
Taylor expanded in EDonor around 0 31.0%
distribute-lft-out31.0%
Simplified31.0%
if 9.50000000000000053e163 < EAccept Initial program 100.0%
Simplified100.0%
Taylor expanded in EDonor around inf 59.3%
Taylor expanded in KbT around inf 26.1%
Taylor expanded in EDonor around 0 10.5%
Taylor expanded in NdChar around inf 20.6%
Final simplification30.0%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (* 0.5 (+ NdChar NaChar)))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return 0.5 * (NdChar + NaChar);
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
code = 0.5d0 * (ndchar + nachar)
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return 0.5 * (NdChar + NaChar);
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return 0.5 * (NdChar + NaChar)
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(0.5 * Float64(NdChar + NaChar)) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.5 * (NdChar + NaChar); end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(0.5 * N[(NdChar + NaChar), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
0.5 \cdot \left(NdChar + NaChar\right)
\end{array}
Initial program 99.9%
Simplified99.9%
Taylor expanded in EDonor around inf 71.6%
Taylor expanded in KbT around inf 38.4%
Taylor expanded in EDonor around 0 28.0%
Taylor expanded in EDonor around 0 29.2%
distribute-lft-out29.2%
Simplified29.2%
Final simplification29.2%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (* NaChar 0.5))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return NaChar * 0.5;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
code = nachar * 0.5d0
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return NaChar * 0.5;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return NaChar * 0.5
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(NaChar * 0.5) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = NaChar * 0.5; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(NaChar * 0.5), $MachinePrecision]
\begin{array}{l}
\\
NaChar \cdot 0.5
\end{array}
Initial program 99.9%
Simplified99.9%
Taylor expanded in EDonor around inf 71.6%
Taylor expanded in KbT around inf 38.4%
Taylor expanded in EDonor around 0 28.0%
Taylor expanded in NdChar around 0 19.0%
Final simplification19.0%
herbie shell --seed 2024108
(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))))))