
(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 35 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (+ (/ NdChar (+ 1.0 (exp (/ (- (- (- (- Ec Vef) EDonor) mu)) KbT)))) (/ NaChar (+ 1.0 (exp (/ (+ (+ (+ Ev Vef) EAccept) (- mu)) KbT))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NdChar / (1.0 + exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + exp(((((Ev + Vef) + EAccept) + -mu) / KbT))));
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
code = (ndchar / (1.0d0 + exp((-(((ec - vef) - edonor) - mu) / kbt)))) + (nachar / (1.0d0 + exp(((((ev + vef) + eaccept) + -mu) / kbt))))
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NdChar / (1.0 + Math.exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + Math.exp(((((Ev + Vef) + EAccept) + -mu) / KbT))));
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return (NdChar / (1.0 + math.exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + math.exp(((((Ev + Vef) + EAccept) + -mu) / KbT))))
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(-Float64(Float64(Float64(Ec - Vef) - EDonor) - mu)) / KbT)))) + Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(Float64(Ev + Vef) + EAccept) + Float64(-mu)) / KbT))))) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = (NdChar / (1.0 + exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + exp(((((Ev + Vef) + EAccept) + -mu) / KbT)))); end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(N[(NdChar / N[(1.0 + N[Exp[N[((-N[(N[(N[(Ec - Vef), $MachinePrecision] - EDonor), $MachinePrecision] - mu), $MachinePrecision]) / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Exp[N[(N[(N[(N[(Ev + Vef), $MachinePrecision] + EAccept), $MachinePrecision] + (-mu)), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{NdChar}{1 + e^{\frac{-\left(\left(\left(Ec - Vef\right) - EDonor\right) - mu\right)}{KbT}}} + \frac{NaChar}{1 + e^{\frac{\left(\left(Ev + Vef\right) + EAccept\right) + \left(-mu\right)}{KbT}}}
\end{array}
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (+ (/ NdChar (+ 1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT)))) (/ NaChar (+ 1.0 (exp (/ (+ Vef (- Ev (- mu EAccept))) KbT))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + exp(((Vef + (Ev - (mu - EAccept))) / KbT))));
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
code = (ndchar / (1.0d0 + exp(((edonor + (mu + (vef - ec))) / kbt)))) + (nachar / (1.0d0 + exp(((vef + (ev - (mu - eaccept))) / kbt))))
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NdChar / (1.0 + Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + Math.exp(((Vef + (Ev - (mu - EAccept))) / KbT))));
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return (NdChar / (1.0 + math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + math.exp(((Vef + (Ev - (mu - EAccept))) / KbT))))
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) + Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Ev - Float64(mu - EAccept))) / KbT))))) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + exp(((Vef + (Ev - (mu - EAccept))) / KbT)))); end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(Ev - N[(mu - EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{NdChar}{1 + e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}} + \frac{NaChar}{1 + e^{\frac{Vef + \left(Ev - \left(mu - EAccept\right)\right)}{KbT}}}
\end{array}
Initial program 100.0%
Simplified100.0%
Final simplification100.0%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NdChar (+ 1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT)))))
(t_1 (/ NaChar (+ 1.0 (exp (/ (+ Vef (- Ev (- mu EAccept))) KbT)))))
(t_2 (+ t_1 (/ NdChar (+ 1.0 (exp (/ mu KbT)))))))
(if (<= mu -4.8e-38)
t_2
(if (<= mu -1.7e-258)
(+ t_1 (/ NdChar (+ 2.0 (* mu (+ (/ 1.0 KbT) (/ EDonor (* mu KbT)))))))
(if (<= mu -2.7e-297)
(+
t_0
(/
NaChar
(-
1.0
(+
(/ mu KbT)
(- -1.0 (+ (/ EAccept KbT) (+ (/ Vef KbT) (/ Ev KbT))))))))
(if (<= mu 8.5e-125)
(+ t_0 (/ NaChar (+ 1.0 (exp (/ Ev KbT)))))
(if (<= mu 3.4e+107)
(+ t_0 (/ NaChar (+ 1.0 (exp (/ EAccept KbT)))))
t_2)))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)));
double t_1 = NaChar / (1.0 + exp(((Vef + (Ev - (mu - EAccept))) / KbT)));
double t_2 = t_1 + (NdChar / (1.0 + exp((mu / KbT))));
double tmp;
if (mu <= -4.8e-38) {
tmp = t_2;
} else if (mu <= -1.7e-258) {
tmp = t_1 + (NdChar / (2.0 + (mu * ((1.0 / KbT) + (EDonor / (mu * KbT))))));
} else if (mu <= -2.7e-297) {
tmp = t_0 + (NaChar / (1.0 - ((mu / KbT) + (-1.0 - ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))))));
} else if (mu <= 8.5e-125) {
tmp = t_0 + (NaChar / (1.0 + exp((Ev / KbT))));
} else if (mu <= 3.4e+107) {
tmp = t_0 + (NaChar / (1.0 + exp((EAccept / KbT))));
} else {
tmp = t_2;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: t_2
real(8) :: tmp
t_0 = ndchar / (1.0d0 + exp(((edonor + (mu + (vef - ec))) / kbt)))
t_1 = nachar / (1.0d0 + exp(((vef + (ev - (mu - eaccept))) / kbt)))
t_2 = t_1 + (ndchar / (1.0d0 + exp((mu / kbt))))
if (mu <= (-4.8d-38)) then
tmp = t_2
else if (mu <= (-1.7d-258)) then
tmp = t_1 + (ndchar / (2.0d0 + (mu * ((1.0d0 / kbt) + (edonor / (mu * kbt))))))
else if (mu <= (-2.7d-297)) then
tmp = t_0 + (nachar / (1.0d0 - ((mu / kbt) + ((-1.0d0) - ((eaccept / kbt) + ((vef / kbt) + (ev / kbt)))))))
else if (mu <= 8.5d-125) then
tmp = t_0 + (nachar / (1.0d0 + exp((ev / kbt))))
else if (mu <= 3.4d+107) then
tmp = t_0 + (nachar / (1.0d0 + exp((eaccept / kbt))))
else
tmp = t_2
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (1.0 + Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)));
double t_1 = NaChar / (1.0 + Math.exp(((Vef + (Ev - (mu - EAccept))) / KbT)));
double t_2 = t_1 + (NdChar / (1.0 + Math.exp((mu / KbT))));
double tmp;
if (mu <= -4.8e-38) {
tmp = t_2;
} else if (mu <= -1.7e-258) {
tmp = t_1 + (NdChar / (2.0 + (mu * ((1.0 / KbT) + (EDonor / (mu * KbT))))));
} else if (mu <= -2.7e-297) {
tmp = t_0 + (NaChar / (1.0 - ((mu / KbT) + (-1.0 - ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))))));
} else if (mu <= 8.5e-125) {
tmp = t_0 + (NaChar / (1.0 + Math.exp((Ev / KbT))));
} else if (mu <= 3.4e+107) {
tmp = t_0 + (NaChar / (1.0 + Math.exp((EAccept / KbT))));
} else {
tmp = t_2;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NdChar / (1.0 + math.exp(((EDonor + (mu + (Vef - Ec))) / KbT))) t_1 = NaChar / (1.0 + math.exp(((Vef + (Ev - (mu - EAccept))) / KbT))) t_2 = t_1 + (NdChar / (1.0 + math.exp((mu / KbT)))) tmp = 0 if mu <= -4.8e-38: tmp = t_2 elif mu <= -1.7e-258: tmp = t_1 + (NdChar / (2.0 + (mu * ((1.0 / KbT) + (EDonor / (mu * KbT)))))) elif mu <= -2.7e-297: tmp = t_0 + (NaChar / (1.0 - ((mu / KbT) + (-1.0 - ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT))))))) elif mu <= 8.5e-125: tmp = t_0 + (NaChar / (1.0 + math.exp((Ev / KbT)))) elif mu <= 3.4e+107: tmp = t_0 + (NaChar / (1.0 + math.exp((EAccept / KbT)))) else: tmp = t_2 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NdChar / Float64(1.0 + exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) t_1 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Ev - Float64(mu - EAccept))) / KbT)))) t_2 = Float64(t_1 + Float64(NdChar / Float64(1.0 + exp(Float64(mu / KbT))))) tmp = 0.0 if (mu <= -4.8e-38) tmp = t_2; elseif (mu <= -1.7e-258) tmp = Float64(t_1 + Float64(NdChar / Float64(2.0 + Float64(mu * Float64(Float64(1.0 / KbT) + Float64(EDonor / Float64(mu * KbT))))))); elseif (mu <= -2.7e-297) tmp = Float64(t_0 + Float64(NaChar / Float64(1.0 - Float64(Float64(mu / KbT) + Float64(-1.0 - Float64(Float64(EAccept / KbT) + Float64(Float64(Vef / KbT) + Float64(Ev / KbT)))))))); elseif (mu <= 8.5e-125) tmp = Float64(t_0 + Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT))))); elseif (mu <= 3.4e+107) tmp = Float64(t_0 + Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT))))); else tmp = t_2; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT))); t_1 = NaChar / (1.0 + exp(((Vef + (Ev - (mu - EAccept))) / KbT))); t_2 = t_1 + (NdChar / (1.0 + exp((mu / KbT)))); tmp = 0.0; if (mu <= -4.8e-38) tmp = t_2; elseif (mu <= -1.7e-258) tmp = t_1 + (NdChar / (2.0 + (mu * ((1.0 / KbT) + (EDonor / (mu * KbT)))))); elseif (mu <= -2.7e-297) tmp = t_0 + (NaChar / (1.0 - ((mu / KbT) + (-1.0 - ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT))))))); elseif (mu <= 8.5e-125) tmp = t_0 + (NaChar / (1.0 + exp((Ev / KbT)))); elseif (mu <= 3.4e+107) tmp = t_0 + (NaChar / (1.0 + exp((EAccept / KbT)))); else tmp = t_2; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NdChar / N[(1.0 + N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(Ev - N[(mu - EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(t$95$1 + N[(NdChar / N[(1.0 + N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[mu, -4.8e-38], t$95$2, If[LessEqual[mu, -1.7e-258], N[(t$95$1 + N[(NdChar / N[(2.0 + N[(mu * N[(N[(1.0 / KbT), $MachinePrecision] + N[(EDonor / N[(mu * KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[mu, -2.7e-297], N[(t$95$0 + N[(NaChar / N[(1.0 - N[(N[(mu / KbT), $MachinePrecision] + N[(-1.0 - N[(N[(EAccept / KbT), $MachinePrecision] + N[(N[(Vef / KbT), $MachinePrecision] + N[(Ev / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[mu, 8.5e-125], N[(t$95$0 + N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[mu, 3.4e+107], N[(t$95$0 + N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$2]]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{1 + e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}}\\
t_1 := \frac{NaChar}{1 + e^{\frac{Vef + \left(Ev - \left(mu - EAccept\right)\right)}{KbT}}}\\
t_2 := t\_1 + \frac{NdChar}{1 + e^{\frac{mu}{KbT}}}\\
\mathbf{if}\;mu \leq -4.8 \cdot 10^{-38}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;mu \leq -1.7 \cdot 10^{-258}:\\
\;\;\;\;t\_1 + \frac{NdChar}{2 + mu \cdot \left(\frac{1}{KbT} + \frac{EDonor}{mu \cdot KbT}\right)}\\
\mathbf{elif}\;mu \leq -2.7 \cdot 10^{-297}:\\
\;\;\;\;t\_0 + \frac{NaChar}{1 - \left(\frac{mu}{KbT} + \left(-1 - \left(\frac{EAccept}{KbT} + \left(\frac{Vef}{KbT} + \frac{Ev}{KbT}\right)\right)\right)\right)}\\
\mathbf{elif}\;mu \leq 8.5 \cdot 10^{-125}:\\
\;\;\;\;t\_0 + \frac{NaChar}{1 + e^{\frac{Ev}{KbT}}}\\
\mathbf{elif}\;mu \leq 3.4 \cdot 10^{+107}:\\
\;\;\;\;t\_0 + \frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;t\_2\\
\end{array}
\end{array}
if mu < -4.80000000000000044e-38 or 3.3999999999999997e107 < mu Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 89.3%
if -4.80000000000000044e-38 < mu < -1.6999999999999999e-258Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 68.4%
associate--l+68.4%
associate--l+68.4%
associate--l+68.4%
Simplified68.4%
Taylor expanded in EDonor around -inf 70.5%
Taylor expanded in mu around inf 72.4%
*-commutative72.4%
Simplified72.4%
Taylor expanded in mu around inf 75.5%
associate-*r/75.5%
mul-1-neg75.5%
*-commutative75.5%
Simplified75.5%
if -1.6999999999999999e-258 < mu < -2.7000000000000001e-297Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 100.0%
+-commutative100.0%
Simplified100.0%
if -2.7000000000000001e-297 < mu < 8.5000000000000002e-125Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 79.1%
if 8.5000000000000002e-125 < mu < 3.3999999999999997e107Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 84.1%
Final simplification84.6%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NaChar (+ 1.0 (exp (/ (+ Vef (- Ev (- mu EAccept))) KbT)))))
(t_1 (+ t_0 (/ NdChar (+ 1.0 (exp (/ mu KbT)))))))
(if (<= mu -3.5e-38)
t_1
(if (<= mu -4.8e-260)
(+ t_0 (/ NdChar (+ 2.0 (* mu (+ (/ 1.0 KbT) (/ EDonor (* mu KbT)))))))
(if (<= mu 1.26e-126)
(+
(/ NaChar (+ 1.0 (exp (/ Ev KbT))))
(/ NdChar (+ 1.0 (exp (/ Ec (- KbT))))))
(if (<= mu 1.6e-29)
(-
t_0
(/
NdChar
(-
(*
EDonor
(+
(/ -1.0 KbT)
(* Vef (/ (+ (/ -1.0 KbT) (/ (- Ec mu) (* Vef KbT))) EDonor))))
2.0)))
(if (<= mu 5.6e+44)
(+
(/ NaChar (+ 1.0 (exp (/ Vef KbT))))
(/ NdChar (+ 1.0 (exp (/ (+ EDonor Vef) KbT)))))
t_1)))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NaChar / (1.0 + exp(((Vef + (Ev - (mu - EAccept))) / KbT)));
double t_1 = t_0 + (NdChar / (1.0 + exp((mu / KbT))));
double tmp;
if (mu <= -3.5e-38) {
tmp = t_1;
} else if (mu <= -4.8e-260) {
tmp = t_0 + (NdChar / (2.0 + (mu * ((1.0 / KbT) + (EDonor / (mu * KbT))))));
} else if (mu <= 1.26e-126) {
tmp = (NaChar / (1.0 + exp((Ev / KbT)))) + (NdChar / (1.0 + exp((Ec / -KbT))));
} else if (mu <= 1.6e-29) {
tmp = t_0 - (NdChar / ((EDonor * ((-1.0 / KbT) + (Vef * (((-1.0 / KbT) + ((Ec - mu) / (Vef * KbT))) / EDonor)))) - 2.0));
} else if (mu <= 5.6e+44) {
tmp = (NaChar / (1.0 + exp((Vef / KbT)))) + (NdChar / (1.0 + exp(((EDonor + Vef) / KbT))));
} else {
tmp = t_1;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = nachar / (1.0d0 + exp(((vef + (ev - (mu - eaccept))) / kbt)))
t_1 = t_0 + (ndchar / (1.0d0 + exp((mu / kbt))))
if (mu <= (-3.5d-38)) then
tmp = t_1
else if (mu <= (-4.8d-260)) then
tmp = t_0 + (ndchar / (2.0d0 + (mu * ((1.0d0 / kbt) + (edonor / (mu * kbt))))))
else if (mu <= 1.26d-126) then
tmp = (nachar / (1.0d0 + exp((ev / kbt)))) + (ndchar / (1.0d0 + exp((ec / -kbt))))
else if (mu <= 1.6d-29) then
tmp = t_0 - (ndchar / ((edonor * (((-1.0d0) / kbt) + (vef * ((((-1.0d0) / kbt) + ((ec - mu) / (vef * kbt))) / edonor)))) - 2.0d0))
else if (mu <= 5.6d+44) then
tmp = (nachar / (1.0d0 + exp((vef / kbt)))) + (ndchar / (1.0d0 + exp(((edonor + vef) / kbt))))
else
tmp = t_1
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NaChar / (1.0 + Math.exp(((Vef + (Ev - (mu - EAccept))) / KbT)));
double t_1 = t_0 + (NdChar / (1.0 + Math.exp((mu / KbT))));
double tmp;
if (mu <= -3.5e-38) {
tmp = t_1;
} else if (mu <= -4.8e-260) {
tmp = t_0 + (NdChar / (2.0 + (mu * ((1.0 / KbT) + (EDonor / (mu * KbT))))));
} else if (mu <= 1.26e-126) {
tmp = (NaChar / (1.0 + Math.exp((Ev / KbT)))) + (NdChar / (1.0 + Math.exp((Ec / -KbT))));
} else if (mu <= 1.6e-29) {
tmp = t_0 - (NdChar / ((EDonor * ((-1.0 / KbT) + (Vef * (((-1.0 / KbT) + ((Ec - mu) / (Vef * KbT))) / EDonor)))) - 2.0));
} else if (mu <= 5.6e+44) {
tmp = (NaChar / (1.0 + Math.exp((Vef / KbT)))) + (NdChar / (1.0 + Math.exp(((EDonor + Vef) / KbT))));
} else {
tmp = t_1;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NaChar / (1.0 + math.exp(((Vef + (Ev - (mu - EAccept))) / KbT))) t_1 = t_0 + (NdChar / (1.0 + math.exp((mu / KbT)))) tmp = 0 if mu <= -3.5e-38: tmp = t_1 elif mu <= -4.8e-260: tmp = t_0 + (NdChar / (2.0 + (mu * ((1.0 / KbT) + (EDonor / (mu * KbT)))))) elif mu <= 1.26e-126: tmp = (NaChar / (1.0 + math.exp((Ev / KbT)))) + (NdChar / (1.0 + math.exp((Ec / -KbT)))) elif mu <= 1.6e-29: tmp = t_0 - (NdChar / ((EDonor * ((-1.0 / KbT) + (Vef * (((-1.0 / KbT) + ((Ec - mu) / (Vef * KbT))) / EDonor)))) - 2.0)) elif mu <= 5.6e+44: tmp = (NaChar / (1.0 + math.exp((Vef / KbT)))) + (NdChar / (1.0 + math.exp(((EDonor + Vef) / KbT)))) else: tmp = t_1 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Ev - Float64(mu - EAccept))) / KbT)))) t_1 = Float64(t_0 + Float64(NdChar / Float64(1.0 + exp(Float64(mu / KbT))))) tmp = 0.0 if (mu <= -3.5e-38) tmp = t_1; elseif (mu <= -4.8e-260) tmp = Float64(t_0 + Float64(NdChar / Float64(2.0 + Float64(mu * Float64(Float64(1.0 / KbT) + Float64(EDonor / Float64(mu * KbT))))))); elseif (mu <= 1.26e-126) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT)))) + Float64(NdChar / Float64(1.0 + exp(Float64(Ec / Float64(-KbT)))))); elseif (mu <= 1.6e-29) tmp = Float64(t_0 - Float64(NdChar / Float64(Float64(EDonor * Float64(Float64(-1.0 / KbT) + Float64(Vef * Float64(Float64(Float64(-1.0 / KbT) + Float64(Float64(Ec - mu) / Float64(Vef * KbT))) / EDonor)))) - 2.0))); elseif (mu <= 5.6e+44) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Vef / KbT)))) + Float64(NdChar / Float64(1.0 + exp(Float64(Float64(EDonor + Vef) / KbT))))); else tmp = t_1; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NaChar / (1.0 + exp(((Vef + (Ev - (mu - EAccept))) / KbT))); t_1 = t_0 + (NdChar / (1.0 + exp((mu / KbT)))); tmp = 0.0; if (mu <= -3.5e-38) tmp = t_1; elseif (mu <= -4.8e-260) tmp = t_0 + (NdChar / (2.0 + (mu * ((1.0 / KbT) + (EDonor / (mu * KbT)))))); elseif (mu <= 1.26e-126) tmp = (NaChar / (1.0 + exp((Ev / KbT)))) + (NdChar / (1.0 + exp((Ec / -KbT)))); elseif (mu <= 1.6e-29) tmp = t_0 - (NdChar / ((EDonor * ((-1.0 / KbT) + (Vef * (((-1.0 / KbT) + ((Ec - mu) / (Vef * KbT))) / EDonor)))) - 2.0)); elseif (mu <= 5.6e+44) tmp = (NaChar / (1.0 + exp((Vef / KbT)))) + (NdChar / (1.0 + exp(((EDonor + Vef) / KbT)))); else tmp = t_1; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(Ev - N[(mu - EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(t$95$0 + N[(NdChar / N[(1.0 + N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[mu, -3.5e-38], t$95$1, If[LessEqual[mu, -4.8e-260], N[(t$95$0 + N[(NdChar / N[(2.0 + N[(mu * N[(N[(1.0 / KbT), $MachinePrecision] + N[(EDonor / N[(mu * KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[mu, 1.26e-126], N[(N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(1.0 + N[Exp[N[(Ec / (-KbT)), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[mu, 1.6e-29], N[(t$95$0 - N[(NdChar / N[(N[(EDonor * N[(N[(-1.0 / KbT), $MachinePrecision] + N[(Vef * N[(N[(N[(-1.0 / KbT), $MachinePrecision] + N[(N[(Ec - mu), $MachinePrecision] / N[(Vef * KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / EDonor), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - 2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[mu, 5.6e+44], N[(N[(NaChar / N[(1.0 + N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(1.0 + N[Exp[N[(N[(EDonor + Vef), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$1]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{Vef + \left(Ev - \left(mu - EAccept\right)\right)}{KbT}}}\\
t_1 := t\_0 + \frac{NdChar}{1 + e^{\frac{mu}{KbT}}}\\
\mathbf{if}\;mu \leq -3.5 \cdot 10^{-38}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;mu \leq -4.8 \cdot 10^{-260}:\\
\;\;\;\;t\_0 + \frac{NdChar}{2 + mu \cdot \left(\frac{1}{KbT} + \frac{EDonor}{mu \cdot KbT}\right)}\\
\mathbf{elif}\;mu \leq 1.26 \cdot 10^{-126}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Ev}{KbT}}} + \frac{NdChar}{1 + e^{\frac{Ec}{-KbT}}}\\
\mathbf{elif}\;mu \leq 1.6 \cdot 10^{-29}:\\
\;\;\;\;t\_0 - \frac{NdChar}{EDonor \cdot \left(\frac{-1}{KbT} + Vef \cdot \frac{\frac{-1}{KbT} + \frac{Ec - mu}{Vef \cdot KbT}}{EDonor}\right) - 2}\\
\mathbf{elif}\;mu \leq 5.6 \cdot 10^{+44}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Vef}{KbT}}} + \frac{NdChar}{1 + e^{\frac{EDonor + Vef}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;t\_1\\
\end{array}
\end{array}
if mu < -3.5000000000000001e-38 or 5.6000000000000002e44 < mu Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 87.8%
if -3.5000000000000001e-38 < mu < -4.8000000000000001e-260Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 68.4%
associate--l+68.4%
associate--l+68.4%
associate--l+68.4%
Simplified68.4%
Taylor expanded in EDonor around -inf 70.5%
Taylor expanded in mu around inf 72.4%
*-commutative72.4%
Simplified72.4%
Taylor expanded in mu around inf 75.5%
associate-*r/75.5%
mul-1-neg75.5%
*-commutative75.5%
Simplified75.5%
if -4.8000000000000001e-260 < mu < 1.26e-126Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 78.7%
Taylor expanded in Ec around inf 71.0%
mul-1-neg71.0%
Simplified71.0%
if 1.26e-126 < mu < 1.6e-29Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 79.2%
associate--l+79.2%
associate--l+79.2%
associate--l+79.2%
Simplified79.2%
Taylor expanded in Vef around inf 70.5%
associate--l+70.5%
associate-/r*74.9%
associate-/r*74.9%
div-sub79.2%
div-sub79.2%
Simplified79.2%
Taylor expanded in EDonor around inf 70.5%
associate-/l*78.8%
associate--l+78.8%
div-sub87.5%
Simplified87.5%
if 1.6e-29 < mu < 5.6000000000000002e44Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 93.1%
Taylor expanded in Vef around inf 87.3%
Final simplification82.3%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NaChar (+ 1.0 (exp (/ (+ Vef (- Ev (- mu EAccept))) KbT)))))
(t_1 (+ t_0 (/ NdChar (+ 1.0 (exp (/ mu KbT)))))))
(if (<= mu -4.5e-38)
t_1
(if (<= mu -6.2e-260)
(+ t_0 (/ NdChar (+ 2.0 (* mu (+ (/ 1.0 KbT) (/ EDonor (* mu KbT)))))))
(if (<= mu 4.8e-128)
(+
(/ NaChar (+ 1.0 (exp (/ Ev KbT))))
(/ NdChar (+ 1.0 (exp (/ Ec (- KbT))))))
(if (<= mu 3.9e+107)
(+
(/ NdChar (+ 1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT))))
(/ NaChar (+ 1.0 (exp (/ EAccept KbT)))))
t_1))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NaChar / (1.0 + exp(((Vef + (Ev - (mu - EAccept))) / KbT)));
double t_1 = t_0 + (NdChar / (1.0 + exp((mu / KbT))));
double tmp;
if (mu <= -4.5e-38) {
tmp = t_1;
} else if (mu <= -6.2e-260) {
tmp = t_0 + (NdChar / (2.0 + (mu * ((1.0 / KbT) + (EDonor / (mu * KbT))))));
} else if (mu <= 4.8e-128) {
tmp = (NaChar / (1.0 + exp((Ev / KbT)))) + (NdChar / (1.0 + exp((Ec / -KbT))));
} else if (mu <= 3.9e+107) {
tmp = (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + exp((EAccept / KbT))));
} else {
tmp = t_1;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = nachar / (1.0d0 + exp(((vef + (ev - (mu - eaccept))) / kbt)))
t_1 = t_0 + (ndchar / (1.0d0 + exp((mu / kbt))))
if (mu <= (-4.5d-38)) then
tmp = t_1
else if (mu <= (-6.2d-260)) then
tmp = t_0 + (ndchar / (2.0d0 + (mu * ((1.0d0 / kbt) + (edonor / (mu * kbt))))))
else if (mu <= 4.8d-128) then
tmp = (nachar / (1.0d0 + exp((ev / kbt)))) + (ndchar / (1.0d0 + exp((ec / -kbt))))
else if (mu <= 3.9d+107) then
tmp = (ndchar / (1.0d0 + exp(((edonor + (mu + (vef - ec))) / kbt)))) + (nachar / (1.0d0 + exp((eaccept / kbt))))
else
tmp = t_1
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NaChar / (1.0 + Math.exp(((Vef + (Ev - (mu - EAccept))) / KbT)));
double t_1 = t_0 + (NdChar / (1.0 + Math.exp((mu / KbT))));
double tmp;
if (mu <= -4.5e-38) {
tmp = t_1;
} else if (mu <= -6.2e-260) {
tmp = t_0 + (NdChar / (2.0 + (mu * ((1.0 / KbT) + (EDonor / (mu * KbT))))));
} else if (mu <= 4.8e-128) {
tmp = (NaChar / (1.0 + Math.exp((Ev / KbT)))) + (NdChar / (1.0 + Math.exp((Ec / -KbT))));
} else if (mu <= 3.9e+107) {
tmp = (NdChar / (1.0 + Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + Math.exp((EAccept / KbT))));
} else {
tmp = t_1;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NaChar / (1.0 + math.exp(((Vef + (Ev - (mu - EAccept))) / KbT))) t_1 = t_0 + (NdChar / (1.0 + math.exp((mu / KbT)))) tmp = 0 if mu <= -4.5e-38: tmp = t_1 elif mu <= -6.2e-260: tmp = t_0 + (NdChar / (2.0 + (mu * ((1.0 / KbT) + (EDonor / (mu * KbT)))))) elif mu <= 4.8e-128: tmp = (NaChar / (1.0 + math.exp((Ev / KbT)))) + (NdChar / (1.0 + math.exp((Ec / -KbT)))) elif mu <= 3.9e+107: tmp = (NdChar / (1.0 + math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + math.exp((EAccept / KbT)))) else: tmp = t_1 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Ev - Float64(mu - EAccept))) / KbT)))) t_1 = Float64(t_0 + Float64(NdChar / Float64(1.0 + exp(Float64(mu / KbT))))) tmp = 0.0 if (mu <= -4.5e-38) tmp = t_1; elseif (mu <= -6.2e-260) tmp = Float64(t_0 + Float64(NdChar / Float64(2.0 + Float64(mu * Float64(Float64(1.0 / KbT) + Float64(EDonor / Float64(mu * KbT))))))); elseif (mu <= 4.8e-128) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT)))) + Float64(NdChar / Float64(1.0 + exp(Float64(Ec / Float64(-KbT)))))); elseif (mu <= 3.9e+107) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) + Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT))))); else tmp = t_1; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NaChar / (1.0 + exp(((Vef + (Ev - (mu - EAccept))) / KbT))); t_1 = t_0 + (NdChar / (1.0 + exp((mu / KbT)))); tmp = 0.0; if (mu <= -4.5e-38) tmp = t_1; elseif (mu <= -6.2e-260) tmp = t_0 + (NdChar / (2.0 + (mu * ((1.0 / KbT) + (EDonor / (mu * KbT)))))); elseif (mu <= 4.8e-128) tmp = (NaChar / (1.0 + exp((Ev / KbT)))) + (NdChar / (1.0 + exp((Ec / -KbT)))); elseif (mu <= 3.9e+107) tmp = (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + exp((EAccept / KbT)))); else tmp = t_1; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(Ev - N[(mu - EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(t$95$0 + N[(NdChar / N[(1.0 + N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[mu, -4.5e-38], t$95$1, If[LessEqual[mu, -6.2e-260], N[(t$95$0 + N[(NdChar / N[(2.0 + N[(mu * N[(N[(1.0 / KbT), $MachinePrecision] + N[(EDonor / N[(mu * KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[mu, 4.8e-128], N[(N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(1.0 + N[Exp[N[(Ec / (-KbT)), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[mu, 3.9e+107], 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[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$1]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{Vef + \left(Ev - \left(mu - EAccept\right)\right)}{KbT}}}\\
t_1 := t\_0 + \frac{NdChar}{1 + e^{\frac{mu}{KbT}}}\\
\mathbf{if}\;mu \leq -4.5 \cdot 10^{-38}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;mu \leq -6.2 \cdot 10^{-260}:\\
\;\;\;\;t\_0 + \frac{NdChar}{2 + mu \cdot \left(\frac{1}{KbT} + \frac{EDonor}{mu \cdot KbT}\right)}\\
\mathbf{elif}\;mu \leq 4.8 \cdot 10^{-128}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Ev}{KbT}}} + \frac{NdChar}{1 + e^{\frac{Ec}{-KbT}}}\\
\mathbf{elif}\;mu \leq 3.9 \cdot 10^{+107}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}} + \frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;t\_1\\
\end{array}
\end{array}
if mu < -4.50000000000000009e-38 or 3.8999999999999998e107 < mu Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 89.3%
if -4.50000000000000009e-38 < mu < -6.19999999999999965e-260Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 68.4%
associate--l+68.4%
associate--l+68.4%
associate--l+68.4%
Simplified68.4%
Taylor expanded in EDonor around -inf 70.5%
Taylor expanded in mu around inf 72.4%
*-commutative72.4%
Simplified72.4%
Taylor expanded in mu around inf 75.5%
associate-*r/75.5%
mul-1-neg75.5%
*-commutative75.5%
Simplified75.5%
if -6.19999999999999965e-260 < mu < 4.7999999999999996e-128Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 78.7%
Taylor expanded in Ec around inf 71.0%
mul-1-neg71.0%
Simplified71.0%
if 4.7999999999999996e-128 < mu < 3.8999999999999998e107Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 84.1%
Final simplification82.4%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NdChar (+ 1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT)))))
(t_1 (+ t_0 (/ NaChar (+ 1.0 (exp (/ Vef KbT)))))))
(if (<= Vef -4e+82)
t_1
(if (<= Vef 1.65e-305)
(+ t_0 (/ NaChar (+ 1.0 (exp (/ EAccept KbT)))))
(if (<= Vef 1.45e+41)
(+
(/ NaChar (+ 1.0 (exp (/ (+ Vef (- Ev (- mu EAccept))) KbT))))
(/ NdChar (+ 1.0 (exp (/ mu KbT)))))
t_1)))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)));
double t_1 = t_0 + (NaChar / (1.0 + exp((Vef / KbT))));
double tmp;
if (Vef <= -4e+82) {
tmp = t_1;
} else if (Vef <= 1.65e-305) {
tmp = t_0 + (NaChar / (1.0 + exp((EAccept / KbT))));
} else if (Vef <= 1.45e+41) {
tmp = (NaChar / (1.0 + exp(((Vef + (Ev - (mu - EAccept))) / KbT)))) + (NdChar / (1.0 + exp((mu / KbT))));
} else {
tmp = t_1;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = ndchar / (1.0d0 + exp(((edonor + (mu + (vef - ec))) / kbt)))
t_1 = t_0 + (nachar / (1.0d0 + exp((vef / kbt))))
if (vef <= (-4d+82)) then
tmp = t_1
else if (vef <= 1.65d-305) then
tmp = t_0 + (nachar / (1.0d0 + exp((eaccept / kbt))))
else if (vef <= 1.45d+41) then
tmp = (nachar / (1.0d0 + exp(((vef + (ev - (mu - eaccept))) / kbt)))) + (ndchar / (1.0d0 + exp((mu / kbt))))
else
tmp = t_1
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (1.0 + Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)));
double t_1 = t_0 + (NaChar / (1.0 + Math.exp((Vef / KbT))));
double tmp;
if (Vef <= -4e+82) {
tmp = t_1;
} else if (Vef <= 1.65e-305) {
tmp = t_0 + (NaChar / (1.0 + Math.exp((EAccept / KbT))));
} else if (Vef <= 1.45e+41) {
tmp = (NaChar / (1.0 + Math.exp(((Vef + (Ev - (mu - EAccept))) / KbT)))) + (NdChar / (1.0 + Math.exp((mu / KbT))));
} else {
tmp = t_1;
}
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 = t_0 + (NaChar / (1.0 + math.exp((Vef / KbT)))) tmp = 0 if Vef <= -4e+82: tmp = t_1 elif Vef <= 1.65e-305: tmp = t_0 + (NaChar / (1.0 + math.exp((EAccept / KbT)))) elif Vef <= 1.45e+41: tmp = (NaChar / (1.0 + math.exp(((Vef + (Ev - (mu - EAccept))) / KbT)))) + (NdChar / (1.0 + math.exp((mu / KbT)))) else: tmp = t_1 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(t_0 + Float64(NaChar / Float64(1.0 + exp(Float64(Vef / KbT))))) tmp = 0.0 if (Vef <= -4e+82) tmp = t_1; elseif (Vef <= 1.65e-305) tmp = Float64(t_0 + Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT))))); elseif (Vef <= 1.45e+41) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Ev - Float64(mu - EAccept))) / KbT)))) + Float64(NdChar / Float64(1.0 + exp(Float64(mu / KbT))))); else tmp = t_1; 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 = t_0 + (NaChar / (1.0 + exp((Vef / KbT)))); tmp = 0.0; if (Vef <= -4e+82) tmp = t_1; elseif (Vef <= 1.65e-305) tmp = t_0 + (NaChar / (1.0 + exp((EAccept / KbT)))); elseif (Vef <= 1.45e+41) tmp = (NaChar / (1.0 + exp(((Vef + (Ev - (mu - EAccept))) / KbT)))) + (NdChar / (1.0 + exp((mu / KbT)))); else tmp = t_1; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(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[(t$95$0 + N[(NaChar / N[(1.0 + N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[Vef, -4e+82], t$95$1, If[LessEqual[Vef, 1.65e-305], N[(t$95$0 + N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[Vef, 1.45e+41], N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(Ev - N[(mu - EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(1.0 + N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$1]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{1 + e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}}\\
t_1 := t\_0 + \frac{NaChar}{1 + e^{\frac{Vef}{KbT}}}\\
\mathbf{if}\;Vef \leq -4 \cdot 10^{+82}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;Vef \leq 1.65 \cdot 10^{-305}:\\
\;\;\;\;t\_0 + \frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}}\\
\mathbf{elif}\;Vef \leq 1.45 \cdot 10^{+41}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Vef + \left(Ev - \left(mu - EAccept\right)\right)}{KbT}}} + \frac{NdChar}{1 + e^{\frac{mu}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;t\_1\\
\end{array}
\end{array}
if Vef < -3.9999999999999999e82 or 1.44999999999999994e41 < Vef Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 83.7%
if -3.9999999999999999e82 < Vef < 1.64999999999999991e-305Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 76.6%
if 1.64999999999999991e-305 < Vef < 1.44999999999999994e41Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 85.4%
Final simplification82.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 (- mu EAccept))) KbT)))))
(t_2
(+
t_1
(/
NdChar
(+ 2.0 (/ (* EDonor (+ 1.0 (/ (- (+ mu Vef) Ec) EDonor))) KbT))))))
(if (<= NaChar -2.25e-184)
t_2
(if (<= NaChar 1.32e-182)
(+
t_0
(/
NaChar
(-
1.0
(+
(/ mu KbT)
(- -1.0 (+ (/ EAccept KbT) (+ (/ Vef KbT) (/ Ev KbT))))))))
(if (<= NaChar 4.2e-96)
t_2
(if (<= NaChar 9.2e-54)
(+ t_0 (* NaChar (/ 1.0 (+ (/ EAccept KbT) 2.0))))
(+
t_1
(/
NdChar
(+
2.0
(-
(/ EDonor KbT)
(*
mu
(+ (/ -1.0 KbT) (/ (- (/ Ec KbT) (/ Vef KbT)) mu)))))))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)));
double t_1 = NaChar / (1.0 + exp(((Vef + (Ev - (mu - EAccept))) / KbT)));
double t_2 = t_1 + (NdChar / (2.0 + ((EDonor * (1.0 + (((mu + Vef) - Ec) / EDonor))) / KbT)));
double tmp;
if (NaChar <= -2.25e-184) {
tmp = t_2;
} else if (NaChar <= 1.32e-182) {
tmp = t_0 + (NaChar / (1.0 - ((mu / KbT) + (-1.0 - ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))))));
} else if (NaChar <= 4.2e-96) {
tmp = t_2;
} else if (NaChar <= 9.2e-54) {
tmp = t_0 + (NaChar * (1.0 / ((EAccept / KbT) + 2.0)));
} else {
tmp = t_1 + (NdChar / (2.0 + ((EDonor / KbT) - (mu * ((-1.0 / KbT) + (((Ec / KbT) - (Vef / KbT)) / mu))))));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: 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 - (mu - eaccept))) / kbt)))
t_2 = t_1 + (ndchar / (2.0d0 + ((edonor * (1.0d0 + (((mu + vef) - ec) / edonor))) / kbt)))
if (nachar <= (-2.25d-184)) then
tmp = t_2
else if (nachar <= 1.32d-182) then
tmp = t_0 + (nachar / (1.0d0 - ((mu / kbt) + ((-1.0d0) - ((eaccept / kbt) + ((vef / kbt) + (ev / kbt)))))))
else if (nachar <= 4.2d-96) then
tmp = t_2
else if (nachar <= 9.2d-54) then
tmp = t_0 + (nachar * (1.0d0 / ((eaccept / kbt) + 2.0d0)))
else
tmp = t_1 + (ndchar / (2.0d0 + ((edonor / kbt) - (mu * (((-1.0d0) / kbt) + (((ec / kbt) - (vef / kbt)) / mu))))))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (1.0 + Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)));
double t_1 = NaChar / (1.0 + Math.exp(((Vef + (Ev - (mu - EAccept))) / KbT)));
double t_2 = t_1 + (NdChar / (2.0 + ((EDonor * (1.0 + (((mu + Vef) - Ec) / EDonor))) / KbT)));
double tmp;
if (NaChar <= -2.25e-184) {
tmp = t_2;
} else if (NaChar <= 1.32e-182) {
tmp = t_0 + (NaChar / (1.0 - ((mu / KbT) + (-1.0 - ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))))));
} else if (NaChar <= 4.2e-96) {
tmp = t_2;
} else if (NaChar <= 9.2e-54) {
tmp = t_0 + (NaChar * (1.0 / ((EAccept / KbT) + 2.0)));
} else {
tmp = t_1 + (NdChar / (2.0 + ((EDonor / KbT) - (mu * ((-1.0 / KbT) + (((Ec / KbT) - (Vef / KbT)) / mu))))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NdChar / (1.0 + math.exp(((EDonor + (mu + (Vef - Ec))) / KbT))) t_1 = NaChar / (1.0 + math.exp(((Vef + (Ev - (mu - EAccept))) / KbT))) t_2 = t_1 + (NdChar / (2.0 + ((EDonor * (1.0 + (((mu + Vef) - Ec) / EDonor))) / KbT))) tmp = 0 if NaChar <= -2.25e-184: tmp = t_2 elif NaChar <= 1.32e-182: tmp = t_0 + (NaChar / (1.0 - ((mu / KbT) + (-1.0 - ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT))))))) elif NaChar <= 4.2e-96: tmp = t_2 elif NaChar <= 9.2e-54: tmp = t_0 + (NaChar * (1.0 / ((EAccept / KbT) + 2.0))) else: tmp = t_1 + (NdChar / (2.0 + ((EDonor / KbT) - (mu * ((-1.0 / KbT) + (((Ec / KbT) - (Vef / KbT)) / mu)))))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NdChar / Float64(1.0 + exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) t_1 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Ev - Float64(mu - EAccept))) / KbT)))) t_2 = Float64(t_1 + Float64(NdChar / Float64(2.0 + Float64(Float64(EDonor * Float64(1.0 + Float64(Float64(Float64(mu + Vef) - Ec) / EDonor))) / KbT)))) tmp = 0.0 if (NaChar <= -2.25e-184) tmp = t_2; elseif (NaChar <= 1.32e-182) tmp = Float64(t_0 + Float64(NaChar / Float64(1.0 - Float64(Float64(mu / KbT) + Float64(-1.0 - Float64(Float64(EAccept / KbT) + Float64(Float64(Vef / KbT) + Float64(Ev / KbT)))))))); elseif (NaChar <= 4.2e-96) tmp = t_2; elseif (NaChar <= 9.2e-54) tmp = Float64(t_0 + Float64(NaChar * Float64(1.0 / Float64(Float64(EAccept / KbT) + 2.0)))); else tmp = Float64(t_1 + Float64(NdChar / Float64(2.0 + Float64(Float64(EDonor / KbT) - Float64(mu * Float64(Float64(-1.0 / KbT) + Float64(Float64(Float64(Ec / KbT) - Float64(Vef / KbT)) / mu))))))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT))); t_1 = NaChar / (1.0 + exp(((Vef + (Ev - (mu - EAccept))) / KbT))); t_2 = t_1 + (NdChar / (2.0 + ((EDonor * (1.0 + (((mu + Vef) - Ec) / EDonor))) / KbT))); tmp = 0.0; if (NaChar <= -2.25e-184) tmp = t_2; elseif (NaChar <= 1.32e-182) tmp = t_0 + (NaChar / (1.0 - ((mu / KbT) + (-1.0 - ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT))))))); elseif (NaChar <= 4.2e-96) tmp = t_2; elseif (NaChar <= 9.2e-54) tmp = t_0 + (NaChar * (1.0 / ((EAccept / KbT) + 2.0))); else tmp = t_1 + (NdChar / (2.0 + ((EDonor / KbT) - (mu * ((-1.0 / KbT) + (((Ec / KbT) - (Vef / KbT)) / mu)))))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NdChar / N[(1.0 + N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(Ev - N[(mu - EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(t$95$1 + N[(NdChar / N[(2.0 + N[(N[(EDonor * N[(1.0 + N[(N[(N[(mu + Vef), $MachinePrecision] - Ec), $MachinePrecision] / EDonor), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -2.25e-184], t$95$2, If[LessEqual[NaChar, 1.32e-182], N[(t$95$0 + N[(NaChar / N[(1.0 - N[(N[(mu / KbT), $MachinePrecision] + N[(-1.0 - N[(N[(EAccept / KbT), $MachinePrecision] + N[(N[(Vef / KbT), $MachinePrecision] + N[(Ev / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 4.2e-96], t$95$2, If[LessEqual[NaChar, 9.2e-54], N[(t$95$0 + N[(NaChar * N[(1.0 / N[(N[(EAccept / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(t$95$1 + N[(NdChar / N[(2.0 + N[(N[(EDonor / KbT), $MachinePrecision] - N[(mu * N[(N[(-1.0 / KbT), $MachinePrecision] + N[(N[(N[(Ec / KbT), $MachinePrecision] - N[(Vef / KbT), $MachinePrecision]), $MachinePrecision] / mu), $MachinePrecision]), $MachinePrecision]), $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(mu - EAccept\right)\right)}{KbT}}}\\
t_2 := t\_1 + \frac{NdChar}{2 + \frac{EDonor \cdot \left(1 + \frac{\left(mu + Vef\right) - Ec}{EDonor}\right)}{KbT}}\\
\mathbf{if}\;NaChar \leq -2.25 \cdot 10^{-184}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;NaChar \leq 1.32 \cdot 10^{-182}:\\
\;\;\;\;t\_0 + \frac{NaChar}{1 - \left(\frac{mu}{KbT} + \left(-1 - \left(\frac{EAccept}{KbT} + \left(\frac{Vef}{KbT} + \frac{Ev}{KbT}\right)\right)\right)\right)}\\
\mathbf{elif}\;NaChar \leq 4.2 \cdot 10^{-96}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;NaChar \leq 9.2 \cdot 10^{-54}:\\
\;\;\;\;t\_0 + NaChar \cdot \frac{1}{\frac{EAccept}{KbT} + 2}\\
\mathbf{else}:\\
\;\;\;\;t\_1 + \frac{NdChar}{2 + \left(\frac{EDonor}{KbT} - mu \cdot \left(\frac{-1}{KbT} + \frac{\frac{Ec}{KbT} - \frac{Vef}{KbT}}{mu}\right)\right)}\\
\end{array}
\end{array}
if NaChar < -2.2500000000000001e-184 or 1.32e-182 < NaChar < 4.20000000000000002e-96Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 63.1%
associate--l+63.1%
associate--l+63.1%
associate--l+63.1%
Simplified63.1%
Taylor expanded in EDonor around -inf 71.3%
Taylor expanded in KbT around 0 74.5%
if -2.2500000000000001e-184 < NaChar < 1.32e-182Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 77.9%
+-commutative77.9%
Simplified77.9%
if 4.20000000000000002e-96 < NaChar < 9.1999999999999996e-54Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 86.5%
Taylor expanded in EAccept around 0 86.2%
div-inv86.2%
Applied egg-rr86.2%
if 9.1999999999999996e-54 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 73.7%
associate--l+73.7%
associate--l+73.7%
associate--l+73.7%
Simplified73.7%
Taylor expanded in mu around inf 66.1%
associate--l+66.1%
associate-/r*68.5%
associate-/r*72.1%
div-sub74.7%
Simplified74.7%
Final simplification75.5%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NdChar (+ 1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT)))))
(t_1 (/ NaChar (+ 1.0 (exp (/ (+ Vef (- Ev (- mu EAccept))) KbT)))))
(t_2
(+
t_1
(/
NdChar
(+ 2.0 (/ (* EDonor (+ 1.0 (/ (- (+ mu Vef) Ec) EDonor))) KbT))))))
(if (<= NaChar -6.1e-183)
t_2
(if (<= NaChar 2.1e-181)
(+
t_0
(/
NaChar
(-
1.0
(+
(/ mu KbT)
(- -1.0 (+ (/ EAccept KbT) (+ (/ Vef KbT) (/ Ev KbT))))))))
(if (<= NaChar 4.2e-94)
t_2
(if (<= NaChar 1.05e-54)
(+ t_0 (* NaChar (/ 1.0 (+ (/ EAccept KbT) 2.0))))
(+
t_1
(/
NdChar
(+ 2.0 (* EDonor (+ (/ 1.0 KbT) (/ mu (* 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 = NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)));
double t_1 = NaChar / (1.0 + exp(((Vef + (Ev - (mu - EAccept))) / KbT)));
double t_2 = t_1 + (NdChar / (2.0 + ((EDonor * (1.0 + (((mu + Vef) - Ec) / EDonor))) / KbT)));
double tmp;
if (NaChar <= -6.1e-183) {
tmp = t_2;
} else if (NaChar <= 2.1e-181) {
tmp = t_0 + (NaChar / (1.0 - ((mu / KbT) + (-1.0 - ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))))));
} else if (NaChar <= 4.2e-94) {
tmp = t_2;
} else if (NaChar <= 1.05e-54) {
tmp = t_0 + (NaChar * (1.0 / ((EAccept / KbT) + 2.0)));
} else {
tmp = t_1 + (NdChar / (2.0 + (EDonor * ((1.0 / KbT) + (mu / (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) :: 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 - (mu - eaccept))) / kbt)))
t_2 = t_1 + (ndchar / (2.0d0 + ((edonor * (1.0d0 + (((mu + vef) - ec) / edonor))) / kbt)))
if (nachar <= (-6.1d-183)) then
tmp = t_2
else if (nachar <= 2.1d-181) then
tmp = t_0 + (nachar / (1.0d0 - ((mu / kbt) + ((-1.0d0) - ((eaccept / kbt) + ((vef / kbt) + (ev / kbt)))))))
else if (nachar <= 4.2d-94) then
tmp = t_2
else if (nachar <= 1.05d-54) then
tmp = t_0 + (nachar * (1.0d0 / ((eaccept / kbt) + 2.0d0)))
else
tmp = t_1 + (ndchar / (2.0d0 + (edonor * ((1.0d0 / kbt) + (mu / (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 = NdChar / (1.0 + Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)));
double t_1 = NaChar / (1.0 + Math.exp(((Vef + (Ev - (mu - EAccept))) / KbT)));
double t_2 = t_1 + (NdChar / (2.0 + ((EDonor * (1.0 + (((mu + Vef) - Ec) / EDonor))) / KbT)));
double tmp;
if (NaChar <= -6.1e-183) {
tmp = t_2;
} else if (NaChar <= 2.1e-181) {
tmp = t_0 + (NaChar / (1.0 - ((mu / KbT) + (-1.0 - ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))))));
} else if (NaChar <= 4.2e-94) {
tmp = t_2;
} else if (NaChar <= 1.05e-54) {
tmp = t_0 + (NaChar * (1.0 / ((EAccept / KbT) + 2.0)));
} else {
tmp = t_1 + (NdChar / (2.0 + (EDonor * ((1.0 / KbT) + (mu / (EDonor * KbT))))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NdChar / (1.0 + math.exp(((EDonor + (mu + (Vef - Ec))) / KbT))) t_1 = NaChar / (1.0 + math.exp(((Vef + (Ev - (mu - EAccept))) / KbT))) t_2 = t_1 + (NdChar / (2.0 + ((EDonor * (1.0 + (((mu + Vef) - Ec) / EDonor))) / KbT))) tmp = 0 if NaChar <= -6.1e-183: tmp = t_2 elif NaChar <= 2.1e-181: tmp = t_0 + (NaChar / (1.0 - ((mu / KbT) + (-1.0 - ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT))))))) elif NaChar <= 4.2e-94: tmp = t_2 elif NaChar <= 1.05e-54: tmp = t_0 + (NaChar * (1.0 / ((EAccept / KbT) + 2.0))) else: tmp = t_1 + (NdChar / (2.0 + (EDonor * ((1.0 / KbT) + (mu / (EDonor * KbT)))))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NdChar / Float64(1.0 + exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) t_1 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Ev - Float64(mu - EAccept))) / KbT)))) t_2 = Float64(t_1 + Float64(NdChar / Float64(2.0 + Float64(Float64(EDonor * Float64(1.0 + Float64(Float64(Float64(mu + Vef) - Ec) / EDonor))) / KbT)))) tmp = 0.0 if (NaChar <= -6.1e-183) tmp = t_2; elseif (NaChar <= 2.1e-181) tmp = Float64(t_0 + Float64(NaChar / Float64(1.0 - Float64(Float64(mu / KbT) + Float64(-1.0 - Float64(Float64(EAccept / KbT) + Float64(Float64(Vef / KbT) + Float64(Ev / KbT)))))))); elseif (NaChar <= 4.2e-94) tmp = t_2; elseif (NaChar <= 1.05e-54) tmp = Float64(t_0 + Float64(NaChar * Float64(1.0 / Float64(Float64(EAccept / KbT) + 2.0)))); else tmp = Float64(t_1 + Float64(NdChar / Float64(2.0 + Float64(EDonor * Float64(Float64(1.0 / KbT) + Float64(mu / Float64(EDonor * KbT))))))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT))); t_1 = NaChar / (1.0 + exp(((Vef + (Ev - (mu - EAccept))) / KbT))); t_2 = t_1 + (NdChar / (2.0 + ((EDonor * (1.0 + (((mu + Vef) - Ec) / EDonor))) / KbT))); tmp = 0.0; if (NaChar <= -6.1e-183) tmp = t_2; elseif (NaChar <= 2.1e-181) tmp = t_0 + (NaChar / (1.0 - ((mu / KbT) + (-1.0 - ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT))))))); elseif (NaChar <= 4.2e-94) tmp = t_2; elseif (NaChar <= 1.05e-54) tmp = t_0 + (NaChar * (1.0 / ((EAccept / KbT) + 2.0))); else tmp = t_1 + (NdChar / (2.0 + (EDonor * ((1.0 / KbT) + (mu / (EDonor * KbT)))))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NdChar / N[(1.0 + N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(Ev - N[(mu - EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(t$95$1 + N[(NdChar / N[(2.0 + N[(N[(EDonor * N[(1.0 + N[(N[(N[(mu + Vef), $MachinePrecision] - Ec), $MachinePrecision] / EDonor), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -6.1e-183], t$95$2, If[LessEqual[NaChar, 2.1e-181], N[(t$95$0 + N[(NaChar / N[(1.0 - N[(N[(mu / KbT), $MachinePrecision] + N[(-1.0 - N[(N[(EAccept / KbT), $MachinePrecision] + N[(N[(Vef / KbT), $MachinePrecision] + N[(Ev / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 4.2e-94], t$95$2, If[LessEqual[NaChar, 1.05e-54], N[(t$95$0 + N[(NaChar * N[(1.0 / N[(N[(EAccept / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(t$95$1 + N[(NdChar / N[(2.0 + N[(EDonor * N[(N[(1.0 / KbT), $MachinePrecision] + N[(mu / N[(EDonor * KbT), $MachinePrecision]), $MachinePrecision]), $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(mu - EAccept\right)\right)}{KbT}}}\\
t_2 := t\_1 + \frac{NdChar}{2 + \frac{EDonor \cdot \left(1 + \frac{\left(mu + Vef\right) - Ec}{EDonor}\right)}{KbT}}\\
\mathbf{if}\;NaChar \leq -6.1 \cdot 10^{-183}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;NaChar \leq 2.1 \cdot 10^{-181}:\\
\;\;\;\;t\_0 + \frac{NaChar}{1 - \left(\frac{mu}{KbT} + \left(-1 - \left(\frac{EAccept}{KbT} + \left(\frac{Vef}{KbT} + \frac{Ev}{KbT}\right)\right)\right)\right)}\\
\mathbf{elif}\;NaChar \leq 4.2 \cdot 10^{-94}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;NaChar \leq 1.05 \cdot 10^{-54}:\\
\;\;\;\;t\_0 + NaChar \cdot \frac{1}{\frac{EAccept}{KbT} + 2}\\
\mathbf{else}:\\
\;\;\;\;t\_1 + \frac{NdChar}{2 + EDonor \cdot \left(\frac{1}{KbT} + \frac{mu}{EDonor \cdot KbT}\right)}\\
\end{array}
\end{array}
if NaChar < -6.1000000000000002e-183 or 2.10000000000000003e-181 < NaChar < 4.2000000000000002e-94Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 63.1%
associate--l+63.1%
associate--l+63.1%
associate--l+63.1%
Simplified63.1%
Taylor expanded in EDonor around -inf 71.3%
Taylor expanded in KbT around 0 74.5%
if -6.1000000000000002e-183 < NaChar < 2.10000000000000003e-181Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 77.9%
+-commutative77.9%
Simplified77.9%
if 4.2000000000000002e-94 < NaChar < 1.05e-54Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 86.5%
Taylor expanded in EAccept around 0 86.2%
div-inv86.2%
Applied egg-rr86.2%
if 1.05e-54 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 73.7%
associate--l+73.7%
associate--l+73.7%
associate--l+73.7%
Simplified73.7%
Taylor expanded in EDonor around -inf 74.9%
Taylor expanded in mu around inf 74.2%
*-commutative74.2%
Simplified74.2%
Final simplification75.3%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT)))
(t_1 (exp (/ (+ Vef (- Ev (- mu EAccept))) KbT)))
(t_2 (/ NaChar (- -1.0 t_1))))
(if (<= NaChar -1.22e-185)
(-
(/ NdChar (- 2.0 (* EDonor (- (/ 1.0 KbT) (/ (/ mu EDonor) KbT)))))
t_2)
(if (<= NaChar 7.5e-169)
(+ (/ NdChar (+ 1.0 t_0)) (/ NaChar (+ 1.0 (+ 1.0 (/ Ev KbT)))))
(if (<= NaChar 1.1e-133)
(-
(* KbT (/ NdChar (- EDonor (* Vef (+ -1.0 (/ (- Ec mu) Vef))))))
t_2)
(if (<= NaChar 1.15e-54)
(- (/ (* KbT NaChar) EAccept) (/ NdChar (- -1.0 t_0)))
(+
(/ NaChar (+ 1.0 t_1))
(/
NdChar
(- (+ (/ Vef KbT) (+ 2.0 (/ EDonor KbT))) (/ Ec KbT))))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = exp(((EDonor + (mu + (Vef - Ec))) / KbT));
double t_1 = exp(((Vef + (Ev - (mu - EAccept))) / KbT));
double t_2 = NaChar / (-1.0 - t_1);
double tmp;
if (NaChar <= -1.22e-185) {
tmp = (NdChar / (2.0 - (EDonor * ((1.0 / KbT) - ((mu / EDonor) / KbT))))) - t_2;
} else if (NaChar <= 7.5e-169) {
tmp = (NdChar / (1.0 + t_0)) + (NaChar / (1.0 + (1.0 + (Ev / KbT))));
} else if (NaChar <= 1.1e-133) {
tmp = (KbT * (NdChar / (EDonor - (Vef * (-1.0 + ((Ec - mu) / Vef)))))) - t_2;
} else if (NaChar <= 1.15e-54) {
tmp = ((KbT * NaChar) / EAccept) - (NdChar / (-1.0 - t_0));
} else {
tmp = (NaChar / (1.0 + t_1)) + (NdChar / (((Vef / KbT) + (2.0 + (EDonor / KbT))) - (Ec / KbT)));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: t_2
real(8) :: tmp
t_0 = exp(((edonor + (mu + (vef - ec))) / kbt))
t_1 = exp(((vef + (ev - (mu - eaccept))) / kbt))
t_2 = nachar / ((-1.0d0) - t_1)
if (nachar <= (-1.22d-185)) then
tmp = (ndchar / (2.0d0 - (edonor * ((1.0d0 / kbt) - ((mu / edonor) / kbt))))) - t_2
else if (nachar <= 7.5d-169) then
tmp = (ndchar / (1.0d0 + t_0)) + (nachar / (1.0d0 + (1.0d0 + (ev / kbt))))
else if (nachar <= 1.1d-133) then
tmp = (kbt * (ndchar / (edonor - (vef * ((-1.0d0) + ((ec - mu) / vef)))))) - t_2
else if (nachar <= 1.15d-54) then
tmp = ((kbt * nachar) / eaccept) - (ndchar / ((-1.0d0) - t_0))
else
tmp = (nachar / (1.0d0 + t_1)) + (ndchar / (((vef / kbt) + (2.0d0 + (edonor / kbt))) - (ec / kbt)))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT));
double t_1 = Math.exp(((Vef + (Ev - (mu - EAccept))) / KbT));
double t_2 = NaChar / (-1.0 - t_1);
double tmp;
if (NaChar <= -1.22e-185) {
tmp = (NdChar / (2.0 - (EDonor * ((1.0 / KbT) - ((mu / EDonor) / KbT))))) - t_2;
} else if (NaChar <= 7.5e-169) {
tmp = (NdChar / (1.0 + t_0)) + (NaChar / (1.0 + (1.0 + (Ev / KbT))));
} else if (NaChar <= 1.1e-133) {
tmp = (KbT * (NdChar / (EDonor - (Vef * (-1.0 + ((Ec - mu) / Vef)))))) - t_2;
} else if (NaChar <= 1.15e-54) {
tmp = ((KbT * NaChar) / EAccept) - (NdChar / (-1.0 - t_0));
} else {
tmp = (NaChar / (1.0 + t_1)) + (NdChar / (((Vef / KbT) + (2.0 + (EDonor / KbT))) - (Ec / KbT)));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)) t_1 = math.exp(((Vef + (Ev - (mu - EAccept))) / KbT)) t_2 = NaChar / (-1.0 - t_1) tmp = 0 if NaChar <= -1.22e-185: tmp = (NdChar / (2.0 - (EDonor * ((1.0 / KbT) - ((mu / EDonor) / KbT))))) - t_2 elif NaChar <= 7.5e-169: tmp = (NdChar / (1.0 + t_0)) + (NaChar / (1.0 + (1.0 + (Ev / KbT)))) elif NaChar <= 1.1e-133: tmp = (KbT * (NdChar / (EDonor - (Vef * (-1.0 + ((Ec - mu) / Vef)))))) - t_2 elif NaChar <= 1.15e-54: tmp = ((KbT * NaChar) / EAccept) - (NdChar / (-1.0 - t_0)) else: tmp = (NaChar / (1.0 + t_1)) + (NdChar / (((Vef / KbT) + (2.0 + (EDonor / KbT))) - (Ec / KbT))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)) t_1 = exp(Float64(Float64(Vef + Float64(Ev - Float64(mu - EAccept))) / KbT)) t_2 = Float64(NaChar / Float64(-1.0 - t_1)) tmp = 0.0 if (NaChar <= -1.22e-185) tmp = Float64(Float64(NdChar / Float64(2.0 - Float64(EDonor * Float64(Float64(1.0 / KbT) - Float64(Float64(mu / EDonor) / KbT))))) - t_2); elseif (NaChar <= 7.5e-169) tmp = Float64(Float64(NdChar / Float64(1.0 + t_0)) + Float64(NaChar / Float64(1.0 + Float64(1.0 + Float64(Ev / KbT))))); elseif (NaChar <= 1.1e-133) tmp = Float64(Float64(KbT * Float64(NdChar / Float64(EDonor - Float64(Vef * Float64(-1.0 + Float64(Float64(Ec - mu) / Vef)))))) - t_2); elseif (NaChar <= 1.15e-54) tmp = Float64(Float64(Float64(KbT * NaChar) / EAccept) - Float64(NdChar / Float64(-1.0 - t_0))); else tmp = Float64(Float64(NaChar / Float64(1.0 + t_1)) + Float64(NdChar / Float64(Float64(Float64(Vef / KbT) + Float64(2.0 + Float64(EDonor / KbT))) - Float64(Ec / KbT)))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = exp(((EDonor + (mu + (Vef - Ec))) / KbT)); t_1 = exp(((Vef + (Ev - (mu - EAccept))) / KbT)); t_2 = NaChar / (-1.0 - t_1); tmp = 0.0; if (NaChar <= -1.22e-185) tmp = (NdChar / (2.0 - (EDonor * ((1.0 / KbT) - ((mu / EDonor) / KbT))))) - t_2; elseif (NaChar <= 7.5e-169) tmp = (NdChar / (1.0 + t_0)) + (NaChar / (1.0 + (1.0 + (Ev / KbT)))); elseif (NaChar <= 1.1e-133) tmp = (KbT * (NdChar / (EDonor - (Vef * (-1.0 + ((Ec - mu) / Vef)))))) - t_2; elseif (NaChar <= 1.15e-54) tmp = ((KbT * NaChar) / EAccept) - (NdChar / (-1.0 - t_0)); else tmp = (NaChar / (1.0 + t_1)) + (NdChar / (((Vef / KbT) + (2.0 + (EDonor / KbT))) - (Ec / KbT))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[Exp[N[(N[(Vef + N[(Ev - N[(mu - EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$2 = N[(NaChar / N[(-1.0 - t$95$1), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -1.22e-185], N[(N[(NdChar / N[(2.0 - N[(EDonor * N[(N[(1.0 / KbT), $MachinePrecision] - N[(N[(mu / EDonor), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - t$95$2), $MachinePrecision], If[LessEqual[NaChar, 7.5e-169], N[(N[(NdChar / N[(1.0 + t$95$0), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[(1.0 + N[(Ev / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 1.1e-133], N[(N[(KbT * N[(NdChar / N[(EDonor - N[(Vef * N[(-1.0 + N[(N[(Ec - mu), $MachinePrecision] / Vef), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - t$95$2), $MachinePrecision], If[LessEqual[NaChar, 1.15e-54], N[(N[(N[(KbT * NaChar), $MachinePrecision] / EAccept), $MachinePrecision] - N[(NdChar / N[(-1.0 - t$95$0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar / N[(1.0 + t$95$1), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(N[(N[(Vef / KbT), $MachinePrecision] + N[(2.0 + N[(EDonor / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}\\
t_1 := e^{\frac{Vef + \left(Ev - \left(mu - EAccept\right)\right)}{KbT}}\\
t_2 := \frac{NaChar}{-1 - t\_1}\\
\mathbf{if}\;NaChar \leq -1.22 \cdot 10^{-185}:\\
\;\;\;\;\frac{NdChar}{2 - EDonor \cdot \left(\frac{1}{KbT} - \frac{\frac{mu}{EDonor}}{KbT}\right)} - t\_2\\
\mathbf{elif}\;NaChar \leq 7.5 \cdot 10^{-169}:\\
\;\;\;\;\frac{NdChar}{1 + t\_0} + \frac{NaChar}{1 + \left(1 + \frac{Ev}{KbT}\right)}\\
\mathbf{elif}\;NaChar \leq 1.1 \cdot 10^{-133}:\\
\;\;\;\;KbT \cdot \frac{NdChar}{EDonor - Vef \cdot \left(-1 + \frac{Ec - mu}{Vef}\right)} - t\_2\\
\mathbf{elif}\;NaChar \leq 1.15 \cdot 10^{-54}:\\
\;\;\;\;\frac{KbT \cdot NaChar}{EAccept} - \frac{NdChar}{-1 - t\_0}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + t\_1} + \frac{NdChar}{\left(\frac{Vef}{KbT} + \left(2 + \frac{EDonor}{KbT}\right)\right) - \frac{Ec}{KbT}}\\
\end{array}
\end{array}
if NaChar < -1.21999999999999996e-185Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 65.0%
associate--l+65.0%
associate--l+65.0%
associate--l+65.0%
Simplified65.0%
Taylor expanded in EDonor around -inf 71.7%
Taylor expanded in mu around inf 73.6%
*-commutative73.6%
Simplified73.6%
*-un-lft-identity73.6%
add-sqr-sqrt42.3%
sqrt-unprod74.7%
mul-1-neg74.7%
mul-1-neg74.7%
sqr-neg74.7%
sqrt-unprod33.5%
add-sqr-sqrt73.8%
Applied egg-rr72.7%
*-lft-identity72.7%
associate-/l/73.6%
associate-/r*73.5%
Simplified73.5%
if -1.21999999999999996e-185 < NaChar < 7.49999999999999978e-169Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 82.2%
Taylor expanded in Ev around 0 75.2%
if 7.49999999999999978e-169 < NaChar < 1.1e-133Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 84.3%
associate--l+84.3%
associate--l+84.3%
associate--l+84.3%
Simplified84.3%
Taylor expanded in Vef around inf 100.0%
associate--l+100.0%
associate-/r*100.0%
associate-/r*100.0%
div-sub100.0%
div-sub100.0%
Simplified100.0%
Taylor expanded in KbT around 0 100.0%
associate-/l*100.0%
associate--l+100.0%
div-sub100.0%
Simplified100.0%
if 1.1e-133 < NaChar < 1.1499999999999999e-54Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 59.9%
Taylor expanded in EAccept around 0 53.5%
Taylor expanded in EAccept around inf 52.0%
if 1.1499999999999999e-54 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 73.7%
associate--l+73.7%
associate--l+73.7%
associate--l+73.7%
Simplified73.7%
Taylor expanded in mu around 0 72.2%
associate-+r+72.2%
Simplified72.2%
Final simplification72.9%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NaChar (- -1.0 (exp (/ (+ Vef (- Ev (- mu EAccept))) KbT)))))
(t_1 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT)))
(t_2
(-
(/ NdChar (- 2.0 (* EDonor (- (/ 1.0 KbT) (/ (/ mu EDonor) KbT)))))
t_0)))
(if (<= NaChar -7.6e-182)
t_2
(if (<= NaChar 8.5e-169)
(+ (/ NdChar (+ 1.0 t_1)) (/ NaChar (+ 1.0 (+ 1.0 (/ Ev KbT)))))
(if (<= NaChar 4.1e-133)
(-
(* KbT (/ NdChar (- EDonor (* Vef (+ -1.0 (/ (- Ec mu) Vef))))))
t_0)
(if (<= NaChar 9.5e-55)
(- (/ (* KbT NaChar) EAccept) (/ NdChar (- -1.0 t_1)))
t_2))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NaChar / (-1.0 - exp(((Vef + (Ev - (mu - EAccept))) / KbT)));
double t_1 = exp(((EDonor + (mu + (Vef - Ec))) / KbT));
double t_2 = (NdChar / (2.0 - (EDonor * ((1.0 / KbT) - ((mu / EDonor) / KbT))))) - t_0;
double tmp;
if (NaChar <= -7.6e-182) {
tmp = t_2;
} else if (NaChar <= 8.5e-169) {
tmp = (NdChar / (1.0 + t_1)) + (NaChar / (1.0 + (1.0 + (Ev / KbT))));
} else if (NaChar <= 4.1e-133) {
tmp = (KbT * (NdChar / (EDonor - (Vef * (-1.0 + ((Ec - mu) / Vef)))))) - t_0;
} else if (NaChar <= 9.5e-55) {
tmp = ((KbT * NaChar) / EAccept) - (NdChar / (-1.0 - t_1));
} else {
tmp = t_2;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: t_2
real(8) :: tmp
t_0 = nachar / ((-1.0d0) - exp(((vef + (ev - (mu - eaccept))) / kbt)))
t_1 = exp(((edonor + (mu + (vef - ec))) / kbt))
t_2 = (ndchar / (2.0d0 - (edonor * ((1.0d0 / kbt) - ((mu / edonor) / kbt))))) - t_0
if (nachar <= (-7.6d-182)) then
tmp = t_2
else if (nachar <= 8.5d-169) then
tmp = (ndchar / (1.0d0 + t_1)) + (nachar / (1.0d0 + (1.0d0 + (ev / kbt))))
else if (nachar <= 4.1d-133) then
tmp = (kbt * (ndchar / (edonor - (vef * ((-1.0d0) + ((ec - mu) / vef)))))) - t_0
else if (nachar <= 9.5d-55) then
tmp = ((kbt * nachar) / eaccept) - (ndchar / ((-1.0d0) - t_1))
else
tmp = t_2
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NaChar / (-1.0 - Math.exp(((Vef + (Ev - (mu - EAccept))) / KbT)));
double t_1 = Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT));
double t_2 = (NdChar / (2.0 - (EDonor * ((1.0 / KbT) - ((mu / EDonor) / KbT))))) - t_0;
double tmp;
if (NaChar <= -7.6e-182) {
tmp = t_2;
} else if (NaChar <= 8.5e-169) {
tmp = (NdChar / (1.0 + t_1)) + (NaChar / (1.0 + (1.0 + (Ev / KbT))));
} else if (NaChar <= 4.1e-133) {
tmp = (KbT * (NdChar / (EDonor - (Vef * (-1.0 + ((Ec - mu) / Vef)))))) - t_0;
} else if (NaChar <= 9.5e-55) {
tmp = ((KbT * NaChar) / EAccept) - (NdChar / (-1.0 - t_1));
} else {
tmp = t_2;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NaChar / (-1.0 - math.exp(((Vef + (Ev - (mu - EAccept))) / KbT))) t_1 = math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)) t_2 = (NdChar / (2.0 - (EDonor * ((1.0 / KbT) - ((mu / EDonor) / KbT))))) - t_0 tmp = 0 if NaChar <= -7.6e-182: tmp = t_2 elif NaChar <= 8.5e-169: tmp = (NdChar / (1.0 + t_1)) + (NaChar / (1.0 + (1.0 + (Ev / KbT)))) elif NaChar <= 4.1e-133: tmp = (KbT * (NdChar / (EDonor - (Vef * (-1.0 + ((Ec - mu) / Vef)))))) - t_0 elif NaChar <= 9.5e-55: tmp = ((KbT * NaChar) / EAccept) - (NdChar / (-1.0 - t_1)) else: tmp = t_2 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NaChar / Float64(-1.0 - exp(Float64(Float64(Vef + Float64(Ev - Float64(mu - EAccept))) / KbT)))) t_1 = exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)) t_2 = Float64(Float64(NdChar / Float64(2.0 - Float64(EDonor * Float64(Float64(1.0 / KbT) - Float64(Float64(mu / EDonor) / KbT))))) - t_0) tmp = 0.0 if (NaChar <= -7.6e-182) tmp = t_2; elseif (NaChar <= 8.5e-169) tmp = Float64(Float64(NdChar / Float64(1.0 + t_1)) + Float64(NaChar / Float64(1.0 + Float64(1.0 + Float64(Ev / KbT))))); elseif (NaChar <= 4.1e-133) tmp = Float64(Float64(KbT * Float64(NdChar / Float64(EDonor - Float64(Vef * Float64(-1.0 + Float64(Float64(Ec - mu) / Vef)))))) - t_0); elseif (NaChar <= 9.5e-55) tmp = Float64(Float64(Float64(KbT * NaChar) / EAccept) - Float64(NdChar / Float64(-1.0 - t_1))); else tmp = t_2; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NaChar / (-1.0 - exp(((Vef + (Ev - (mu - EAccept))) / KbT))); t_1 = exp(((EDonor + (mu + (Vef - Ec))) / KbT)); t_2 = (NdChar / (2.0 - (EDonor * ((1.0 / KbT) - ((mu / EDonor) / KbT))))) - t_0; tmp = 0.0; if (NaChar <= -7.6e-182) tmp = t_2; elseif (NaChar <= 8.5e-169) tmp = (NdChar / (1.0 + t_1)) + (NaChar / (1.0 + (1.0 + (Ev / KbT)))); elseif (NaChar <= 4.1e-133) tmp = (KbT * (NdChar / (EDonor - (Vef * (-1.0 + ((Ec - mu) / Vef)))))) - t_0; elseif (NaChar <= 9.5e-55) tmp = ((KbT * NaChar) / EAccept) - (NdChar / (-1.0 - t_1)); else tmp = t_2; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NaChar / N[(-1.0 - N[Exp[N[(N[(Vef + N[(Ev - N[(mu - EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$2 = N[(N[(NdChar / N[(2.0 - N[(EDonor * N[(N[(1.0 / KbT), $MachinePrecision] - N[(N[(mu / EDonor), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - t$95$0), $MachinePrecision]}, If[LessEqual[NaChar, -7.6e-182], t$95$2, If[LessEqual[NaChar, 8.5e-169], N[(N[(NdChar / N[(1.0 + t$95$1), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[(1.0 + N[(Ev / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 4.1e-133], N[(N[(KbT * N[(NdChar / N[(EDonor - N[(Vef * N[(-1.0 + N[(N[(Ec - mu), $MachinePrecision] / Vef), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - t$95$0), $MachinePrecision], If[LessEqual[NaChar, 9.5e-55], N[(N[(N[(KbT * NaChar), $MachinePrecision] / EAccept), $MachinePrecision] - N[(NdChar / N[(-1.0 - t$95$1), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$2]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{-1 - e^{\frac{Vef + \left(Ev - \left(mu - EAccept\right)\right)}{KbT}}}\\
t_1 := e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}\\
t_2 := \frac{NdChar}{2 - EDonor \cdot \left(\frac{1}{KbT} - \frac{\frac{mu}{EDonor}}{KbT}\right)} - t\_0\\
\mathbf{if}\;NaChar \leq -7.6 \cdot 10^{-182}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;NaChar \leq 8.5 \cdot 10^{-169}:\\
\;\;\;\;\frac{NdChar}{1 + t\_1} + \frac{NaChar}{1 + \left(1 + \frac{Ev}{KbT}\right)}\\
\mathbf{elif}\;NaChar \leq 4.1 \cdot 10^{-133}:\\
\;\;\;\;KbT \cdot \frac{NdChar}{EDonor - Vef \cdot \left(-1 + \frac{Ec - mu}{Vef}\right)} - t\_0\\
\mathbf{elif}\;NaChar \leq 9.5 \cdot 10^{-55}:\\
\;\;\;\;\frac{KbT \cdot NaChar}{EAccept} - \frac{NdChar}{-1 - t\_1}\\
\mathbf{else}:\\
\;\;\;\;t\_2\\
\end{array}
\end{array}
if NaChar < -7.6000000000000006e-182 or 9.5000000000000006e-55 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 68.9%
associate--l+68.9%
associate--l+68.9%
associate--l+68.9%
Simplified68.9%
Taylor expanded in EDonor around -inf 73.1%
Taylor expanded in mu around inf 73.9%
*-commutative73.9%
Simplified73.9%
*-un-lft-identity73.9%
add-sqr-sqrt47.2%
sqrt-unprod74.9%
mul-1-neg74.9%
mul-1-neg74.9%
sqr-neg74.9%
sqrt-unprod31.5%
add-sqr-sqrt73.8%
Applied egg-rr72.4%
*-lft-identity72.4%
associate-/l/73.9%
associate-/r*72.8%
Simplified72.8%
if -7.6000000000000006e-182 < NaChar < 8.50000000000000054e-169Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 82.2%
Taylor expanded in Ev around 0 75.2%
if 8.50000000000000054e-169 < NaChar < 4.10000000000000022e-133Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 84.3%
associate--l+84.3%
associate--l+84.3%
associate--l+84.3%
Simplified84.3%
Taylor expanded in Vef around inf 100.0%
associate--l+100.0%
associate-/r*100.0%
associate-/r*100.0%
div-sub100.0%
div-sub100.0%
Simplified100.0%
Taylor expanded in KbT around 0 100.0%
associate-/l*100.0%
associate--l+100.0%
div-sub100.0%
Simplified100.0%
if 4.10000000000000022e-133 < NaChar < 9.5000000000000006e-55Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 59.9%
Taylor expanded in EAccept around 0 53.5%
Taylor expanded in EAccept around inf 52.0%
Final simplification72.8%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NaChar (+ 1.0 (exp (/ (+ Vef (- Ev (- mu EAccept))) KbT))))))
(if (<= NaChar -1.22e-182)
(+
t_0
(/
NdChar
(+ 2.0 (/ (* EDonor (+ 1.0 (/ (- (+ mu Vef) Ec) EDonor))) KbT))))
(if (<= NaChar 5.3e-189)
(+
(/ NdChar (+ 1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT))))
(/
NaChar
(-
1.0
(+
(/ mu KbT)
(- -1.0 (+ (/ EAccept KbT) (+ (/ Vef KbT) (/ Ev KbT))))))))
(+
t_0
(/
NdChar
(+
2.0
(*
Ec
(+
(/ (+ (/ EDonor KbT) (+ (/ Vef KbT) (/ mu KbT))) Ec)
(/ -1.0 KbT))))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NaChar / (1.0 + exp(((Vef + (Ev - (mu - EAccept))) / KbT)));
double tmp;
if (NaChar <= -1.22e-182) {
tmp = t_0 + (NdChar / (2.0 + ((EDonor * (1.0 + (((mu + Vef) - Ec) / EDonor))) / KbT)));
} else if (NaChar <= 5.3e-189) {
tmp = (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 - ((mu / KbT) + (-1.0 - ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))))));
} else {
tmp = t_0 + (NdChar / (2.0 + (Ec * ((((EDonor / KbT) + ((Vef / KbT) + (mu / KbT))) / Ec) + (-1.0 / 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 - (mu - eaccept))) / kbt)))
if (nachar <= (-1.22d-182)) then
tmp = t_0 + (ndchar / (2.0d0 + ((edonor * (1.0d0 + (((mu + vef) - ec) / edonor))) / kbt)))
else if (nachar <= 5.3d-189) then
tmp = (ndchar / (1.0d0 + exp(((edonor + (mu + (vef - ec))) / kbt)))) + (nachar / (1.0d0 - ((mu / kbt) + ((-1.0d0) - ((eaccept / kbt) + ((vef / kbt) + (ev / kbt)))))))
else
tmp = t_0 + (ndchar / (2.0d0 + (ec * ((((edonor / kbt) + ((vef / kbt) + (mu / kbt))) / ec) + ((-1.0d0) / kbt)))))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NaChar / (1.0 + Math.exp(((Vef + (Ev - (mu - EAccept))) / KbT)));
double tmp;
if (NaChar <= -1.22e-182) {
tmp = t_0 + (NdChar / (2.0 + ((EDonor * (1.0 + (((mu + Vef) - Ec) / EDonor))) / KbT)));
} else if (NaChar <= 5.3e-189) {
tmp = (NdChar / (1.0 + Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 - ((mu / KbT) + (-1.0 - ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))))));
} else {
tmp = t_0 + (NdChar / (2.0 + (Ec * ((((EDonor / KbT) + ((Vef / KbT) + (mu / KbT))) / Ec) + (-1.0 / KbT)))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NaChar / (1.0 + math.exp(((Vef + (Ev - (mu - EAccept))) / KbT))) tmp = 0 if NaChar <= -1.22e-182: tmp = t_0 + (NdChar / (2.0 + ((EDonor * (1.0 + (((mu + Vef) - Ec) / EDonor))) / KbT))) elif NaChar <= 5.3e-189: tmp = (NdChar / (1.0 + math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 - ((mu / KbT) + (-1.0 - ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT))))))) else: tmp = t_0 + (NdChar / (2.0 + (Ec * ((((EDonor / KbT) + ((Vef / KbT) + (mu / KbT))) / Ec) + (-1.0 / 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(mu - EAccept))) / KbT)))) tmp = 0.0 if (NaChar <= -1.22e-182) tmp = Float64(t_0 + Float64(NdChar / Float64(2.0 + Float64(Float64(EDonor * Float64(1.0 + Float64(Float64(Float64(mu + Vef) - Ec) / EDonor))) / KbT)))); elseif (NaChar <= 5.3e-189) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) + Float64(NaChar / Float64(1.0 - Float64(Float64(mu / KbT) + Float64(-1.0 - Float64(Float64(EAccept / KbT) + Float64(Float64(Vef / KbT) + Float64(Ev / KbT)))))))); else tmp = Float64(t_0 + Float64(NdChar / Float64(2.0 + Float64(Ec * Float64(Float64(Float64(Float64(EDonor / KbT) + Float64(Float64(Vef / KbT) + Float64(mu / KbT))) / Ec) + Float64(-1.0 / KbT)))))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NaChar / (1.0 + exp(((Vef + (Ev - (mu - EAccept))) / KbT))); tmp = 0.0; if (NaChar <= -1.22e-182) tmp = t_0 + (NdChar / (2.0 + ((EDonor * (1.0 + (((mu + Vef) - Ec) / EDonor))) / KbT))); elseif (NaChar <= 5.3e-189) tmp = (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 - ((mu / KbT) + (-1.0 - ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT))))))); else tmp = t_0 + (NdChar / (2.0 + (Ec * ((((EDonor / KbT) + ((Vef / KbT) + (mu / KbT))) / Ec) + (-1.0 / 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[(mu - EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -1.22e-182], N[(t$95$0 + N[(NdChar / N[(2.0 + N[(N[(EDonor * N[(1.0 + N[(N[(N[(mu + Vef), $MachinePrecision] - Ec), $MachinePrecision] / EDonor), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 5.3e-189], 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[(mu / KbT), $MachinePrecision] + N[(-1.0 - N[(N[(EAccept / KbT), $MachinePrecision] + N[(N[(Vef / KbT), $MachinePrecision] + N[(Ev / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(t$95$0 + N[(NdChar / N[(2.0 + N[(Ec * N[(N[(N[(N[(EDonor / KbT), $MachinePrecision] + N[(N[(Vef / KbT), $MachinePrecision] + N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / Ec), $MachinePrecision] + N[(-1.0 / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{Vef + \left(Ev - \left(mu - EAccept\right)\right)}{KbT}}}\\
\mathbf{if}\;NaChar \leq -1.22 \cdot 10^{-182}:\\
\;\;\;\;t\_0 + \frac{NdChar}{2 + \frac{EDonor \cdot \left(1 + \frac{\left(mu + Vef\right) - Ec}{EDonor}\right)}{KbT}}\\
\mathbf{elif}\;NaChar \leq 5.3 \cdot 10^{-189}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}} + \frac{NaChar}{1 - \left(\frac{mu}{KbT} + \left(-1 - \left(\frac{EAccept}{KbT} + \left(\frac{Vef}{KbT} + \frac{Ev}{KbT}\right)\right)\right)\right)}\\
\mathbf{else}:\\
\;\;\;\;t\_0 + \frac{NdChar}{2 + Ec \cdot \left(\frac{\frac{EDonor}{KbT} + \left(\frac{Vef}{KbT} + \frac{mu}{KbT}\right)}{Ec} + \frac{-1}{KbT}\right)}\\
\end{array}
\end{array}
if NaChar < -1.22e-182Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 65.0%
associate--l+65.0%
associate--l+65.0%
associate--l+65.0%
Simplified65.0%
Taylor expanded in EDonor around -inf 71.7%
Taylor expanded in KbT around 0 75.5%
if -1.22e-182 < NaChar < 5.2999999999999998e-189Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 77.9%
+-commutative77.9%
Simplified77.9%
if 5.2999999999999998e-189 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 68.2%
associate--l+68.2%
associate--l+68.2%
associate--l+68.2%
Simplified68.2%
Taylor expanded in Ec around -inf 72.8%
associate-*r*72.8%
mul-1-neg72.8%
+-commutative72.8%
mul-1-neg72.8%
unsub-neg72.8%
+-commutative72.8%
Simplified72.8%
Final simplification74.8%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (or (<= NaChar -5.4e-182) (not (<= NaChar 1.75e-181)))
(+
(/ NaChar (+ 1.0 (exp (/ (+ Vef (- Ev (- mu EAccept))) KbT))))
(/ NdChar (+ 2.0 (* EDonor (+ (/ 1.0 KbT) (/ mu (* EDonor KbT)))))))
(+
(/ NdChar (+ 1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT))))
(/
NaChar
(-
1.0
(+
(/ mu KbT)
(- -1.0 (+ (/ EAccept KbT) (+ (/ Vef KbT) (/ Ev KbT))))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NaChar <= -5.4e-182) || !(NaChar <= 1.75e-181)) {
tmp = (NaChar / (1.0 + exp(((Vef + (Ev - (mu - EAccept))) / KbT)))) + (NdChar / (2.0 + (EDonor * ((1.0 / KbT) + (mu / (EDonor * KbT))))));
} else {
tmp = (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 - ((mu / KbT) + (-1.0 - ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))))));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if ((nachar <= (-5.4d-182)) .or. (.not. (nachar <= 1.75d-181))) then
tmp = (nachar / (1.0d0 + exp(((vef + (ev - (mu - eaccept))) / kbt)))) + (ndchar / (2.0d0 + (edonor * ((1.0d0 / kbt) + (mu / (edonor * kbt))))))
else
tmp = (ndchar / (1.0d0 + exp(((edonor + (mu + (vef - ec))) / kbt)))) + (nachar / (1.0d0 - ((mu / kbt) + ((-1.0d0) - ((eaccept / kbt) + ((vef / kbt) + (ev / kbt)))))))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NaChar <= -5.4e-182) || !(NaChar <= 1.75e-181)) {
tmp = (NaChar / (1.0 + Math.exp(((Vef + (Ev - (mu - EAccept))) / KbT)))) + (NdChar / (2.0 + (EDonor * ((1.0 / KbT) + (mu / (EDonor * KbT))))));
} else {
tmp = (NdChar / (1.0 + Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 - ((mu / KbT) + (-1.0 - ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if (NaChar <= -5.4e-182) or not (NaChar <= 1.75e-181): tmp = (NaChar / (1.0 + math.exp(((Vef + (Ev - (mu - EAccept))) / KbT)))) + (NdChar / (2.0 + (EDonor * ((1.0 / KbT) + (mu / (EDonor * KbT)))))) else: tmp = (NdChar / (1.0 + math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 - ((mu / KbT) + (-1.0 - ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT))))))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if ((NaChar <= -5.4e-182) || !(NaChar <= 1.75e-181)) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Ev - Float64(mu - EAccept))) / KbT)))) + Float64(NdChar / Float64(2.0 + Float64(EDonor * Float64(Float64(1.0 / KbT) + Float64(mu / Float64(EDonor * KbT))))))); else tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) + Float64(NaChar / Float64(1.0 - Float64(Float64(mu / KbT) + Float64(-1.0 - Float64(Float64(EAccept / KbT) + Float64(Float64(Vef / KbT) + Float64(Ev / KbT)))))))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if ((NaChar <= -5.4e-182) || ~((NaChar <= 1.75e-181))) tmp = (NaChar / (1.0 + exp(((Vef + (Ev - (mu - EAccept))) / KbT)))) + (NdChar / (2.0 + (EDonor * ((1.0 / KbT) + (mu / (EDonor * KbT)))))); else tmp = (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 - ((mu / KbT) + (-1.0 - ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT))))))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[Or[LessEqual[NaChar, -5.4e-182], N[Not[LessEqual[NaChar, 1.75e-181]], $MachinePrecision]], N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(Ev - N[(mu - EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(2.0 + N[(EDonor * N[(N[(1.0 / KbT), $MachinePrecision] + N[(mu / N[(EDonor * KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 - N[(N[(mu / KbT), $MachinePrecision] + N[(-1.0 - N[(N[(EAccept / KbT), $MachinePrecision] + N[(N[(Vef / KbT), $MachinePrecision] + N[(Ev / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NaChar \leq -5.4 \cdot 10^{-182} \lor \neg \left(NaChar \leq 1.75 \cdot 10^{-181}\right):\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Vef + \left(Ev - \left(mu - EAccept\right)\right)}{KbT}}} + \frac{NdChar}{2 + EDonor \cdot \left(\frac{1}{KbT} + \frac{mu}{EDonor \cdot KbT}\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}} + \frac{NaChar}{1 - \left(\frac{mu}{KbT} + \left(-1 - \left(\frac{EAccept}{KbT} + \left(\frac{Vef}{KbT} + \frac{Ev}{KbT}\right)\right)\right)\right)}\\
\end{array}
\end{array}
if NaChar < -5.39999999999999999e-182 or 1.74999999999999998e-181 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 66.7%
associate--l+66.7%
associate--l+66.7%
associate--l+66.7%
Simplified66.7%
Taylor expanded in EDonor around -inf 71.8%
Taylor expanded in mu around inf 72.0%
*-commutative72.0%
Simplified72.0%
if -5.39999999999999999e-182 < NaChar < 1.74999999999999998e-181Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 77.9%
+-commutative77.9%
Simplified77.9%
Final simplification73.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))))))
(if (<= NdChar -1e-17)
(+ t_0 (/ NaChar (+ (/ EAccept KbT) 2.0)))
(if (<= NdChar 1.4e+59)
(-
(/ NdChar (+ 2.0 (* Vef (- (/ 1.0 KbT) (/ (- Ec mu) (* Vef KbT))))))
(/ NaChar (- -1.0 (exp (/ (+ Vef (- Ev (- mu EAccept))) KbT)))))
(+ t_0 (/ NaChar (+ 1.0 (+ 1.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 + (mu + (Vef - Ec))) / KbT)));
double tmp;
if (NdChar <= -1e-17) {
tmp = t_0 + (NaChar / ((EAccept / KbT) + 2.0));
} else if (NdChar <= 1.4e+59) {
tmp = (NdChar / (2.0 + (Vef * ((1.0 / KbT) - ((Ec - mu) / (Vef * KbT)))))) - (NaChar / (-1.0 - exp(((Vef + (Ev - (mu - EAccept))) / KbT))));
} else {
tmp = t_0 + (NaChar / (1.0 + (1.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 + (mu + (vef - ec))) / kbt)))
if (ndchar <= (-1d-17)) then
tmp = t_0 + (nachar / ((eaccept / kbt) + 2.0d0))
else if (ndchar <= 1.4d+59) then
tmp = (ndchar / (2.0d0 + (vef * ((1.0d0 / kbt) - ((ec - mu) / (vef * kbt)))))) - (nachar / ((-1.0d0) - exp(((vef + (ev - (mu - eaccept))) / kbt))))
else
tmp = t_0 + (nachar / (1.0d0 + (1.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 + (mu + (Vef - Ec))) / KbT)));
double tmp;
if (NdChar <= -1e-17) {
tmp = t_0 + (NaChar / ((EAccept / KbT) + 2.0));
} else if (NdChar <= 1.4e+59) {
tmp = (NdChar / (2.0 + (Vef * ((1.0 / KbT) - ((Ec - mu) / (Vef * KbT)))))) - (NaChar / (-1.0 - Math.exp(((Vef + (Ev - (mu - EAccept))) / KbT))));
} else {
tmp = t_0 + (NaChar / (1.0 + (1.0 + (Ev / 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 <= -1e-17: tmp = t_0 + (NaChar / ((EAccept / KbT) + 2.0)) elif NdChar <= 1.4e+59: tmp = (NdChar / (2.0 + (Vef * ((1.0 / KbT) - ((Ec - mu) / (Vef * KbT)))))) - (NaChar / (-1.0 - math.exp(((Vef + (Ev - (mu - EAccept))) / KbT)))) else: tmp = t_0 + (NaChar / (1.0 + (1.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(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) tmp = 0.0 if (NdChar <= -1e-17) tmp = Float64(t_0 + Float64(NaChar / Float64(Float64(EAccept / KbT) + 2.0))); elseif (NdChar <= 1.4e+59) tmp = Float64(Float64(NdChar / Float64(2.0 + Float64(Vef * Float64(Float64(1.0 / KbT) - Float64(Float64(Ec - mu) / Float64(Vef * KbT)))))) - Float64(NaChar / Float64(-1.0 - exp(Float64(Float64(Vef + Float64(Ev - Float64(mu - EAccept))) / KbT))))); else tmp = Float64(t_0 + Float64(NaChar / Float64(1.0 + Float64(1.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 + (mu + (Vef - Ec))) / KbT))); tmp = 0.0; if (NdChar <= -1e-17) tmp = t_0 + (NaChar / ((EAccept / KbT) + 2.0)); elseif (NdChar <= 1.4e+59) tmp = (NdChar / (2.0 + (Vef * ((1.0 / KbT) - ((Ec - mu) / (Vef * KbT)))))) - (NaChar / (-1.0 - exp(((Vef + (Ev - (mu - EAccept))) / KbT)))); else tmp = t_0 + (NaChar / (1.0 + (1.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[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NdChar, -1e-17], N[(t$95$0 + N[(NaChar / N[(N[(EAccept / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NdChar, 1.4e+59], N[(N[(NdChar / N[(2.0 + N[(Vef * N[(N[(1.0 / KbT), $MachinePrecision] - N[(N[(Ec - mu), $MachinePrecision] / N[(Vef * KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(NaChar / N[(-1.0 - N[Exp[N[(N[(Vef + N[(Ev - N[(mu - EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(t$95$0 + N[(NaChar / N[(1.0 + N[(1.0 + N[(Ev / 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}}}\\
\mathbf{if}\;NdChar \leq -1 \cdot 10^{-17}:\\
\;\;\;\;t\_0 + \frac{NaChar}{\frac{EAccept}{KbT} + 2}\\
\mathbf{elif}\;NdChar \leq 1.4 \cdot 10^{+59}:\\
\;\;\;\;\frac{NdChar}{2 + Vef \cdot \left(\frac{1}{KbT} - \frac{Ec - mu}{Vef \cdot KbT}\right)} - \frac{NaChar}{-1 - e^{\frac{Vef + \left(Ev - \left(mu - EAccept\right)\right)}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;t\_0 + \frac{NaChar}{1 + \left(1 + \frac{Ev}{KbT}\right)}\\
\end{array}
\end{array}
if NdChar < -1.00000000000000007e-17Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 74.5%
Taylor expanded in EAccept around 0 63.3%
if -1.00000000000000007e-17 < NdChar < 1.3999999999999999e59Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 70.4%
associate--l+70.4%
associate--l+70.4%
associate--l+70.4%
Simplified70.4%
Taylor expanded in Vef around inf 69.6%
associate--l+69.6%
associate-/r*70.9%
associate-/r*71.6%
div-sub72.3%
div-sub72.9%
Simplified72.9%
Taylor expanded in EDonor around 0 70.1%
associate--l+70.1%
div-sub73.6%
Simplified73.6%
if 1.3999999999999999e59 < NdChar Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 78.8%
Taylor expanded in Ev around 0 76.4%
Final simplification71.3%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NdChar (+ 1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT)))))
(t_1 (exp (/ (+ Vef (- Ev (- mu EAccept))) KbT))))
(if (<= NdChar -3e-21)
(+ t_0 (/ NaChar (+ (/ EAccept KbT) 2.0)))
(if (<= NdChar -2.3e-226)
(-
(* KbT (/ NdChar (- EDonor (* Vef (+ -1.0 (/ (- Ec mu) Vef))))))
(/ NaChar (- -1.0 t_1)))
(if (<= NdChar 2.6e+43)
(+
(/ NaChar (+ 1.0 t_1))
(/ NdChar (+ 2.0 (+ (/ Vef KbT) (/ EDonor KbT)))))
(+ t_0 (/ NaChar (+ 1.0 (+ 1.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 + (mu + (Vef - Ec))) / KbT)));
double t_1 = exp(((Vef + (Ev - (mu - EAccept))) / KbT));
double tmp;
if (NdChar <= -3e-21) {
tmp = t_0 + (NaChar / ((EAccept / KbT) + 2.0));
} else if (NdChar <= -2.3e-226) {
tmp = (KbT * (NdChar / (EDonor - (Vef * (-1.0 + ((Ec - mu) / Vef)))))) - (NaChar / (-1.0 - t_1));
} else if (NdChar <= 2.6e+43) {
tmp = (NaChar / (1.0 + t_1)) + (NdChar / (2.0 + ((Vef / KbT) + (EDonor / KbT))));
} else {
tmp = t_0 + (NaChar / (1.0 + (1.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) :: t_1
real(8) :: tmp
t_0 = ndchar / (1.0d0 + exp(((edonor + (mu + (vef - ec))) / kbt)))
t_1 = exp(((vef + (ev - (mu - eaccept))) / kbt))
if (ndchar <= (-3d-21)) then
tmp = t_0 + (nachar / ((eaccept / kbt) + 2.0d0))
else if (ndchar <= (-2.3d-226)) then
tmp = (kbt * (ndchar / (edonor - (vef * ((-1.0d0) + ((ec - mu) / vef)))))) - (nachar / ((-1.0d0) - t_1))
else if (ndchar <= 2.6d+43) then
tmp = (nachar / (1.0d0 + t_1)) + (ndchar / (2.0d0 + ((vef / kbt) + (edonor / kbt))))
else
tmp = t_0 + (nachar / (1.0d0 + (1.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 + (mu + (Vef - Ec))) / KbT)));
double t_1 = Math.exp(((Vef + (Ev - (mu - EAccept))) / KbT));
double tmp;
if (NdChar <= -3e-21) {
tmp = t_0 + (NaChar / ((EAccept / KbT) + 2.0));
} else if (NdChar <= -2.3e-226) {
tmp = (KbT * (NdChar / (EDonor - (Vef * (-1.0 + ((Ec - mu) / Vef)))))) - (NaChar / (-1.0 - t_1));
} else if (NdChar <= 2.6e+43) {
tmp = (NaChar / (1.0 + t_1)) + (NdChar / (2.0 + ((Vef / KbT) + (EDonor / KbT))));
} else {
tmp = t_0 + (NaChar / (1.0 + (1.0 + (Ev / 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 = math.exp(((Vef + (Ev - (mu - EAccept))) / KbT)) tmp = 0 if NdChar <= -3e-21: tmp = t_0 + (NaChar / ((EAccept / KbT) + 2.0)) elif NdChar <= -2.3e-226: tmp = (KbT * (NdChar / (EDonor - (Vef * (-1.0 + ((Ec - mu) / Vef)))))) - (NaChar / (-1.0 - t_1)) elif NdChar <= 2.6e+43: tmp = (NaChar / (1.0 + t_1)) + (NdChar / (2.0 + ((Vef / KbT) + (EDonor / KbT)))) else: tmp = t_0 + (NaChar / (1.0 + (1.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(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) t_1 = exp(Float64(Float64(Vef + Float64(Ev - Float64(mu - EAccept))) / KbT)) tmp = 0.0 if (NdChar <= -3e-21) tmp = Float64(t_0 + Float64(NaChar / Float64(Float64(EAccept / KbT) + 2.0))); elseif (NdChar <= -2.3e-226) tmp = Float64(Float64(KbT * Float64(NdChar / Float64(EDonor - Float64(Vef * Float64(-1.0 + Float64(Float64(Ec - mu) / Vef)))))) - Float64(NaChar / Float64(-1.0 - t_1))); elseif (NdChar <= 2.6e+43) tmp = Float64(Float64(NaChar / Float64(1.0 + t_1)) + Float64(NdChar / Float64(2.0 + Float64(Float64(Vef / KbT) + Float64(EDonor / KbT))))); else tmp = Float64(t_0 + Float64(NaChar / Float64(1.0 + Float64(1.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 + (mu + (Vef - Ec))) / KbT))); t_1 = exp(((Vef + (Ev - (mu - EAccept))) / KbT)); tmp = 0.0; if (NdChar <= -3e-21) tmp = t_0 + (NaChar / ((EAccept / KbT) + 2.0)); elseif (NdChar <= -2.3e-226) tmp = (KbT * (NdChar / (EDonor - (Vef * (-1.0 + ((Ec - mu) / Vef)))))) - (NaChar / (-1.0 - t_1)); elseif (NdChar <= 2.6e+43) tmp = (NaChar / (1.0 + t_1)) + (NdChar / (2.0 + ((Vef / KbT) + (EDonor / KbT)))); else tmp = t_0 + (NaChar / (1.0 + (1.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[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[Exp[N[(N[(Vef + N[(Ev - N[(mu - EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]}, If[LessEqual[NdChar, -3e-21], N[(t$95$0 + N[(NaChar / N[(N[(EAccept / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NdChar, -2.3e-226], N[(N[(KbT * N[(NdChar / N[(EDonor - N[(Vef * N[(-1.0 + N[(N[(Ec - mu), $MachinePrecision] / Vef), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(NaChar / N[(-1.0 - t$95$1), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NdChar, 2.6e+43], N[(N[(NaChar / N[(1.0 + t$95$1), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(2.0 + N[(N[(Vef / KbT), $MachinePrecision] + N[(EDonor / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(t$95$0 + N[(NaChar / N[(1.0 + N[(1.0 + N[(Ev / 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 := e^{\frac{Vef + \left(Ev - \left(mu - EAccept\right)\right)}{KbT}}\\
\mathbf{if}\;NdChar \leq -3 \cdot 10^{-21}:\\
\;\;\;\;t\_0 + \frac{NaChar}{\frac{EAccept}{KbT} + 2}\\
\mathbf{elif}\;NdChar \leq -2.3 \cdot 10^{-226}:\\
\;\;\;\;KbT \cdot \frac{NdChar}{EDonor - Vef \cdot \left(-1 + \frac{Ec - mu}{Vef}\right)} - \frac{NaChar}{-1 - t\_1}\\
\mathbf{elif}\;NdChar \leq 2.6 \cdot 10^{+43}:\\
\;\;\;\;\frac{NaChar}{1 + t\_1} + \frac{NdChar}{2 + \left(\frac{Vef}{KbT} + \frac{EDonor}{KbT}\right)}\\
\mathbf{else}:\\
\;\;\;\;t\_0 + \frac{NaChar}{1 + \left(1 + \frac{Ev}{KbT}\right)}\\
\end{array}
\end{array}
if NdChar < -2.99999999999999991e-21Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 74.5%
Taylor expanded in EAccept around 0 63.3%
if -2.99999999999999991e-21 < NdChar < -2.3e-226Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 66.6%
associate--l+66.6%
associate--l+66.6%
associate--l+66.6%
Simplified66.6%
Taylor expanded in Vef around inf 62.5%
associate--l+62.5%
associate-/r*66.4%
associate-/r*70.3%
div-sub70.3%
div-sub70.3%
Simplified70.3%
Taylor expanded in KbT around 0 63.9%
associate-/l*67.6%
associate--l+67.6%
div-sub67.6%
Simplified67.6%
if -2.3e-226 < NdChar < 2.60000000000000021e43Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 72.6%
associate--l+72.6%
associate--l+72.6%
associate--l+72.6%
Simplified72.6%
Taylor expanded in Vef around inf 72.5%
associate--l+72.5%
associate-/r*72.5%
associate-/r*71.5%
div-sub72.6%
div-sub73.7%
Simplified73.7%
Taylor expanded in Vef around inf 74.8%
if 2.60000000000000021e43 < NdChar Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 75.5%
Taylor expanded in Ev around 0 71.2%
Final simplification69.8%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (or (<= NaChar -1.28e-182) (not (<= NaChar 3.8e-169)))
(+
(/ NaChar (+ 1.0 (exp (/ (+ Vef (- Ev (- mu EAccept))) KbT))))
(/ NdChar (+ 2.0 (* EDonor (+ (/ 1.0 KbT) (/ mu (* EDonor KbT)))))))
(+
(/ NdChar (+ 1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT))))
(/ NaChar (+ 1.0 (+ 1.0 (/ Ev KbT)))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NaChar <= -1.28e-182) || !(NaChar <= 3.8e-169)) {
tmp = (NaChar / (1.0 + exp(((Vef + (Ev - (mu - EAccept))) / KbT)))) + (NdChar / (2.0 + (EDonor * ((1.0 / KbT) + (mu / (EDonor * KbT))))));
} else {
tmp = (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + (1.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) :: tmp
if ((nachar <= (-1.28d-182)) .or. (.not. (nachar <= 3.8d-169))) then
tmp = (nachar / (1.0d0 + exp(((vef + (ev - (mu - eaccept))) / kbt)))) + (ndchar / (2.0d0 + (edonor * ((1.0d0 / kbt) + (mu / (edonor * kbt))))))
else
tmp = (ndchar / (1.0d0 + exp(((edonor + (mu + (vef - ec))) / kbt)))) + (nachar / (1.0d0 + (1.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 tmp;
if ((NaChar <= -1.28e-182) || !(NaChar <= 3.8e-169)) {
tmp = (NaChar / (1.0 + Math.exp(((Vef + (Ev - (mu - EAccept))) / KbT)))) + (NdChar / (2.0 + (EDonor * ((1.0 / KbT) + (mu / (EDonor * KbT))))));
} else {
tmp = (NdChar / (1.0 + Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + (1.0 + (Ev / KbT))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if (NaChar <= -1.28e-182) or not (NaChar <= 3.8e-169): tmp = (NaChar / (1.0 + math.exp(((Vef + (Ev - (mu - EAccept))) / KbT)))) + (NdChar / (2.0 + (EDonor * ((1.0 / KbT) + (mu / (EDonor * KbT)))))) else: tmp = (NdChar / (1.0 + math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + (1.0 + (Ev / KbT)))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if ((NaChar <= -1.28e-182) || !(NaChar <= 3.8e-169)) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Ev - Float64(mu - EAccept))) / KbT)))) + Float64(NdChar / Float64(2.0 + Float64(EDonor * Float64(Float64(1.0 / KbT) + Float64(mu / Float64(EDonor * KbT))))))); else tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) + Float64(NaChar / Float64(1.0 + Float64(1.0 + Float64(Ev / KbT))))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if ((NaChar <= -1.28e-182) || ~((NaChar <= 3.8e-169))) tmp = (NaChar / (1.0 + exp(((Vef + (Ev - (mu - EAccept))) / KbT)))) + (NdChar / (2.0 + (EDonor * ((1.0 / KbT) + (mu / (EDonor * KbT)))))); else tmp = (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + (1.0 + (Ev / KbT)))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[Or[LessEqual[NaChar, -1.28e-182], N[Not[LessEqual[NaChar, 3.8e-169]], $MachinePrecision]], N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(Ev - N[(mu - EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(2.0 + N[(EDonor * N[(N[(1.0 / KbT), $MachinePrecision] + N[(mu / N[(EDonor * KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[(1.0 + N[(Ev / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NaChar \leq -1.28 \cdot 10^{-182} \lor \neg \left(NaChar \leq 3.8 \cdot 10^{-169}\right):\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Vef + \left(Ev - \left(mu - EAccept\right)\right)}{KbT}}} + \frac{NdChar}{2 + EDonor \cdot \left(\frac{1}{KbT} + \frac{mu}{EDonor \cdot KbT}\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}} + \frac{NaChar}{1 + \left(1 + \frac{Ev}{KbT}\right)}\\
\end{array}
\end{array}
if NaChar < -1.2800000000000001e-182 or 3.8e-169 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 66.8%
associate--l+66.8%
associate--l+66.8%
associate--l+66.8%
Simplified66.8%
Taylor expanded in EDonor around -inf 72.0%
Taylor expanded in mu around inf 72.2%
*-commutative72.2%
Simplified72.2%
if -1.2800000000000001e-182 < NaChar < 3.8e-169Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 82.2%
Taylor expanded in Ev around 0 75.2%
Final simplification72.8%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (exp (/ (+ Vef (- Ev (- mu EAccept))) KbT)))
(t_1
(+
(/ NdChar (+ 1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT))))
(/ NaChar (+ (/ EAccept KbT) 2.0)))))
(if (<= NdChar -1.6e-19)
t_1
(if (<= NdChar -1.8e-223)
(- (/ NaChar (+ 1.0 t_0)) (/ (* NdChar KbT) Ec))
(if (<= NdChar 1.85e+53)
(- (/ NdChar 2.0) (/ NaChar (- -1.0 t_0)))
t_1)))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = exp(((Vef + (Ev - (mu - EAccept))) / KbT));
double t_1 = (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / ((EAccept / KbT) + 2.0));
double tmp;
if (NdChar <= -1.6e-19) {
tmp = t_1;
} else if (NdChar <= -1.8e-223) {
tmp = (NaChar / (1.0 + t_0)) - ((NdChar * KbT) / Ec);
} else if (NdChar <= 1.85e+53) {
tmp = (NdChar / 2.0) - (NaChar / (-1.0 - t_0));
} else {
tmp = t_1;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = exp(((vef + (ev - (mu - eaccept))) / kbt))
t_1 = (ndchar / (1.0d0 + exp(((edonor + (mu + (vef - ec))) / kbt)))) + (nachar / ((eaccept / kbt) + 2.0d0))
if (ndchar <= (-1.6d-19)) then
tmp = t_1
else if (ndchar <= (-1.8d-223)) then
tmp = (nachar / (1.0d0 + t_0)) - ((ndchar * kbt) / ec)
else if (ndchar <= 1.85d+53) then
tmp = (ndchar / 2.0d0) - (nachar / ((-1.0d0) - t_0))
else
tmp = t_1
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = Math.exp(((Vef + (Ev - (mu - EAccept))) / KbT));
double t_1 = (NdChar / (1.0 + Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / ((EAccept / KbT) + 2.0));
double tmp;
if (NdChar <= -1.6e-19) {
tmp = t_1;
} else if (NdChar <= -1.8e-223) {
tmp = (NaChar / (1.0 + t_0)) - ((NdChar * KbT) / Ec);
} else if (NdChar <= 1.85e+53) {
tmp = (NdChar / 2.0) - (NaChar / (-1.0 - t_0));
} else {
tmp = t_1;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = math.exp(((Vef + (Ev - (mu - EAccept))) / KbT)) t_1 = (NdChar / (1.0 + math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / ((EAccept / KbT) + 2.0)) tmp = 0 if NdChar <= -1.6e-19: tmp = t_1 elif NdChar <= -1.8e-223: tmp = (NaChar / (1.0 + t_0)) - ((NdChar * KbT) / Ec) elif NdChar <= 1.85e+53: tmp = (NdChar / 2.0) - (NaChar / (-1.0 - t_0)) else: tmp = t_1 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = exp(Float64(Float64(Vef + Float64(Ev - Float64(mu - EAccept))) / KbT)) t_1 = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) + Float64(NaChar / Float64(Float64(EAccept / KbT) + 2.0))) tmp = 0.0 if (NdChar <= -1.6e-19) tmp = t_1; elseif (NdChar <= -1.8e-223) tmp = Float64(Float64(NaChar / Float64(1.0 + t_0)) - Float64(Float64(NdChar * KbT) / Ec)); elseif (NdChar <= 1.85e+53) tmp = Float64(Float64(NdChar / 2.0) - Float64(NaChar / Float64(-1.0 - t_0))); else tmp = t_1; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = exp(((Vef + (Ev - (mu - EAccept))) / KbT)); t_1 = (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / ((EAccept / KbT) + 2.0)); tmp = 0.0; if (NdChar <= -1.6e-19) tmp = t_1; elseif (NdChar <= -1.8e-223) tmp = (NaChar / (1.0 + t_0)) - ((NdChar * KbT) / Ec); elseif (NdChar <= 1.85e+53) tmp = (NdChar / 2.0) - (NaChar / (-1.0 - t_0)); else tmp = t_1; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[Exp[N[(N[(Vef + N[(Ev - N[(mu - EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = 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[(N[(EAccept / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NdChar, -1.6e-19], t$95$1, If[LessEqual[NdChar, -1.8e-223], N[(N[(NaChar / N[(1.0 + t$95$0), $MachinePrecision]), $MachinePrecision] - N[(N[(NdChar * KbT), $MachinePrecision] / Ec), $MachinePrecision]), $MachinePrecision], If[LessEqual[NdChar, 1.85e+53], N[(N[(NdChar / 2.0), $MachinePrecision] - N[(NaChar / N[(-1.0 - t$95$0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$1]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := e^{\frac{Vef + \left(Ev - \left(mu - EAccept\right)\right)}{KbT}}\\
t_1 := \frac{NdChar}{1 + e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}} + \frac{NaChar}{\frac{EAccept}{KbT} + 2}\\
\mathbf{if}\;NdChar \leq -1.6 \cdot 10^{-19}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;NdChar \leq -1.8 \cdot 10^{-223}:\\
\;\;\;\;\frac{NaChar}{1 + t\_0} - \frac{NdChar \cdot KbT}{Ec}\\
\mathbf{elif}\;NdChar \leq 1.85 \cdot 10^{+53}:\\
\;\;\;\;\frac{NdChar}{2} - \frac{NaChar}{-1 - t\_0}\\
\mathbf{else}:\\
\;\;\;\;t\_1\\
\end{array}
\end{array}
if NdChar < -1.59999999999999991e-19 or 1.85e53 < NdChar Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 77.7%
Taylor expanded in EAccept around 0 63.7%
if -1.59999999999999991e-19 < NdChar < -1.8000000000000002e-223Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 66.6%
associate--l+66.6%
associate--l+66.6%
associate--l+66.6%
Simplified66.6%
Taylor expanded in Ec around inf 58.8%
associate-*r/58.8%
associate-*r*58.8%
neg-mul-158.8%
Simplified58.8%
if -1.8000000000000002e-223 < NdChar < 1.85e53Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 65.1%
Final simplification63.3%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NdChar (+ 1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT))))))
(if (<= NdChar -7.8e-19)
(+ t_0 (/ NaChar (+ (/ EAccept KbT) 2.0)))
(if (<= NdChar 3.8e+43)
(+
(/ NaChar (+ 1.0 (exp (/ (+ Vef (- Ev (- mu EAccept))) KbT))))
(/ NdChar (+ 2.0 (+ (/ Vef KbT) (/ EDonor KbT)))))
(+ t_0 (/ NaChar (+ 1.0 (+ 1.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 + (mu + (Vef - Ec))) / KbT)));
double tmp;
if (NdChar <= -7.8e-19) {
tmp = t_0 + (NaChar / ((EAccept / KbT) + 2.0));
} else if (NdChar <= 3.8e+43) {
tmp = (NaChar / (1.0 + exp(((Vef + (Ev - (mu - EAccept))) / KbT)))) + (NdChar / (2.0 + ((Vef / KbT) + (EDonor / KbT))));
} else {
tmp = t_0 + (NaChar / (1.0 + (1.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 + (mu + (vef - ec))) / kbt)))
if (ndchar <= (-7.8d-19)) then
tmp = t_0 + (nachar / ((eaccept / kbt) + 2.0d0))
else if (ndchar <= 3.8d+43) then
tmp = (nachar / (1.0d0 + exp(((vef + (ev - (mu - eaccept))) / kbt)))) + (ndchar / (2.0d0 + ((vef / kbt) + (edonor / kbt))))
else
tmp = t_0 + (nachar / (1.0d0 + (1.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 + (mu + (Vef - Ec))) / KbT)));
double tmp;
if (NdChar <= -7.8e-19) {
tmp = t_0 + (NaChar / ((EAccept / KbT) + 2.0));
} else if (NdChar <= 3.8e+43) {
tmp = (NaChar / (1.0 + Math.exp(((Vef + (Ev - (mu - EAccept))) / KbT)))) + (NdChar / (2.0 + ((Vef / KbT) + (EDonor / KbT))));
} else {
tmp = t_0 + (NaChar / (1.0 + (1.0 + (Ev / 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 <= -7.8e-19: tmp = t_0 + (NaChar / ((EAccept / KbT) + 2.0)) elif NdChar <= 3.8e+43: tmp = (NaChar / (1.0 + math.exp(((Vef + (Ev - (mu - EAccept))) / KbT)))) + (NdChar / (2.0 + ((Vef / KbT) + (EDonor / KbT)))) else: tmp = t_0 + (NaChar / (1.0 + (1.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(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) tmp = 0.0 if (NdChar <= -7.8e-19) tmp = Float64(t_0 + Float64(NaChar / Float64(Float64(EAccept / KbT) + 2.0))); elseif (NdChar <= 3.8e+43) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Ev - Float64(mu - EAccept))) / KbT)))) + Float64(NdChar / Float64(2.0 + Float64(Float64(Vef / KbT) + Float64(EDonor / KbT))))); else tmp = Float64(t_0 + Float64(NaChar / Float64(1.0 + Float64(1.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 + (mu + (Vef - Ec))) / KbT))); tmp = 0.0; if (NdChar <= -7.8e-19) tmp = t_0 + (NaChar / ((EAccept / KbT) + 2.0)); elseif (NdChar <= 3.8e+43) tmp = (NaChar / (1.0 + exp(((Vef + (Ev - (mu - EAccept))) / KbT)))) + (NdChar / (2.0 + ((Vef / KbT) + (EDonor / KbT)))); else tmp = t_0 + (NaChar / (1.0 + (1.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[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NdChar, -7.8e-19], N[(t$95$0 + N[(NaChar / N[(N[(EAccept / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NdChar, 3.8e+43], N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(Ev - N[(mu - EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(2.0 + N[(N[(Vef / KbT), $MachinePrecision] + N[(EDonor / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(t$95$0 + N[(NaChar / N[(1.0 + N[(1.0 + N[(Ev / 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}}}\\
\mathbf{if}\;NdChar \leq -7.8 \cdot 10^{-19}:\\
\;\;\;\;t\_0 + \frac{NaChar}{\frac{EAccept}{KbT} + 2}\\
\mathbf{elif}\;NdChar \leq 3.8 \cdot 10^{+43}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Vef + \left(Ev - \left(mu - EAccept\right)\right)}{KbT}}} + \frac{NdChar}{2 + \left(\frac{Vef}{KbT} + \frac{EDonor}{KbT}\right)}\\
\mathbf{else}:\\
\;\;\;\;t\_0 + \frac{NaChar}{1 + \left(1 + \frac{Ev}{KbT}\right)}\\
\end{array}
\end{array}
if NdChar < -7.7999999999999999e-19Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 74.5%
Taylor expanded in EAccept around 0 63.3%
if -7.7999999999999999e-19 < NdChar < 3.80000000000000008e43Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 70.5%
associate--l+70.5%
associate--l+70.5%
associate--l+70.5%
Simplified70.5%
Taylor expanded in Vef around inf 69.0%
associate--l+69.0%
associate-/r*70.4%
associate-/r*71.1%
div-sub71.8%
div-sub72.5%
Simplified72.5%
Taylor expanded in Vef around inf 69.1%
if 3.80000000000000008e43 < NdChar Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 75.5%
Taylor expanded in Ev around 0 71.2%
Final simplification68.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))))))
(if (<= NdChar -6e-18)
(+ t_0 (/ NaChar (+ (/ EAccept KbT) 2.0)))
(if (<= NdChar 2000000000.0)
(-
(/ NdChar (- 2.0 (/ Ec KbT)))
(/ NaChar (- -1.0 (exp (/ (+ Vef (- Ev (- mu EAccept))) KbT)))))
(+ t_0 (/ NaChar (+ 1.0 (+ 1.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 + (mu + (Vef - Ec))) / KbT)));
double tmp;
if (NdChar <= -6e-18) {
tmp = t_0 + (NaChar / ((EAccept / KbT) + 2.0));
} else if (NdChar <= 2000000000.0) {
tmp = (NdChar / (2.0 - (Ec / KbT))) - (NaChar / (-1.0 - exp(((Vef + (Ev - (mu - EAccept))) / KbT))));
} else {
tmp = t_0 + (NaChar / (1.0 + (1.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 + (mu + (vef - ec))) / kbt)))
if (ndchar <= (-6d-18)) then
tmp = t_0 + (nachar / ((eaccept / kbt) + 2.0d0))
else if (ndchar <= 2000000000.0d0) then
tmp = (ndchar / (2.0d0 - (ec / kbt))) - (nachar / ((-1.0d0) - exp(((vef + (ev - (mu - eaccept))) / kbt))))
else
tmp = t_0 + (nachar / (1.0d0 + (1.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 + (mu + (Vef - Ec))) / KbT)));
double tmp;
if (NdChar <= -6e-18) {
tmp = t_0 + (NaChar / ((EAccept / KbT) + 2.0));
} else if (NdChar <= 2000000000.0) {
tmp = (NdChar / (2.0 - (Ec / KbT))) - (NaChar / (-1.0 - Math.exp(((Vef + (Ev - (mu - EAccept))) / KbT))));
} else {
tmp = t_0 + (NaChar / (1.0 + (1.0 + (Ev / 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 <= -6e-18: tmp = t_0 + (NaChar / ((EAccept / KbT) + 2.0)) elif NdChar <= 2000000000.0: tmp = (NdChar / (2.0 - (Ec / KbT))) - (NaChar / (-1.0 - math.exp(((Vef + (Ev - (mu - EAccept))) / KbT)))) else: tmp = t_0 + (NaChar / (1.0 + (1.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(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) tmp = 0.0 if (NdChar <= -6e-18) tmp = Float64(t_0 + Float64(NaChar / Float64(Float64(EAccept / KbT) + 2.0))); elseif (NdChar <= 2000000000.0) tmp = Float64(Float64(NdChar / Float64(2.0 - Float64(Ec / KbT))) - Float64(NaChar / Float64(-1.0 - exp(Float64(Float64(Vef + Float64(Ev - Float64(mu - EAccept))) / KbT))))); else tmp = Float64(t_0 + Float64(NaChar / Float64(1.0 + Float64(1.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 + (mu + (Vef - Ec))) / KbT))); tmp = 0.0; if (NdChar <= -6e-18) tmp = t_0 + (NaChar / ((EAccept / KbT) + 2.0)); elseif (NdChar <= 2000000000.0) tmp = (NdChar / (2.0 - (Ec / KbT))) - (NaChar / (-1.0 - exp(((Vef + (Ev - (mu - EAccept))) / KbT)))); else tmp = t_0 + (NaChar / (1.0 + (1.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[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NdChar, -6e-18], N[(t$95$0 + N[(NaChar / N[(N[(EAccept / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NdChar, 2000000000.0], N[(N[(NdChar / N[(2.0 - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(NaChar / N[(-1.0 - N[Exp[N[(N[(Vef + N[(Ev - N[(mu - EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(t$95$0 + N[(NaChar / N[(1.0 + N[(1.0 + N[(Ev / 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}}}\\
\mathbf{if}\;NdChar \leq -6 \cdot 10^{-18}:\\
\;\;\;\;t\_0 + \frac{NaChar}{\frac{EAccept}{KbT} + 2}\\
\mathbf{elif}\;NdChar \leq 2000000000:\\
\;\;\;\;\frac{NdChar}{2 - \frac{Ec}{KbT}} - \frac{NaChar}{-1 - e^{\frac{Vef + \left(Ev - \left(mu - EAccept\right)\right)}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;t\_0 + \frac{NaChar}{1 + \left(1 + \frac{Ev}{KbT}\right)}\\
\end{array}
\end{array}
if NdChar < -5.99999999999999966e-18Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 74.5%
Taylor expanded in EAccept around 0 63.3%
if -5.99999999999999966e-18 < NdChar < 2e9Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 73.1%
associate--l+73.1%
associate--l+73.1%
associate--l+73.1%
Simplified73.1%
Taylor expanded in Ec around inf 71.4%
neg-mul-171.4%
distribute-neg-frac271.4%
Simplified71.4%
if 2e9 < NdChar Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 70.7%
Taylor expanded in Ev around 0 63.7%
Final simplification67.7%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (+ (/ EAccept KbT) 2.0))
(t_1 (/ NdChar (+ 1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT))))))
(if (<= NdChar -1.25e-21)
(+ t_1 (/ NaChar t_0))
(if (<= NdChar 2.6e+54)
(-
(/ NdChar (- 2.0 (/ Ec KbT)))
(/ NaChar (- -1.0 (exp (/ (+ Vef (- Ev (- mu EAccept))) KbT)))))
(+ t_1 (* NaChar (/ 1.0 t_0)))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (EAccept / KbT) + 2.0;
double t_1 = NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)));
double tmp;
if (NdChar <= -1.25e-21) {
tmp = t_1 + (NaChar / t_0);
} else if (NdChar <= 2.6e+54) {
tmp = (NdChar / (2.0 - (Ec / KbT))) - (NaChar / (-1.0 - exp(((Vef + (Ev - (mu - EAccept))) / KbT))));
} else {
tmp = t_1 + (NaChar * (1.0 / t_0));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = (eaccept / kbt) + 2.0d0
t_1 = ndchar / (1.0d0 + exp(((edonor + (mu + (vef - ec))) / kbt)))
if (ndchar <= (-1.25d-21)) then
tmp = t_1 + (nachar / t_0)
else if (ndchar <= 2.6d+54) then
tmp = (ndchar / (2.0d0 - (ec / kbt))) - (nachar / ((-1.0d0) - exp(((vef + (ev - (mu - eaccept))) / kbt))))
else
tmp = t_1 + (nachar * (1.0d0 / t_0))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (EAccept / KbT) + 2.0;
double t_1 = NdChar / (1.0 + Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)));
double tmp;
if (NdChar <= -1.25e-21) {
tmp = t_1 + (NaChar / t_0);
} else if (NdChar <= 2.6e+54) {
tmp = (NdChar / (2.0 - (Ec / KbT))) - (NaChar / (-1.0 - Math.exp(((Vef + (Ev - (mu - EAccept))) / KbT))));
} else {
tmp = t_1 + (NaChar * (1.0 / t_0));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = (EAccept / KbT) + 2.0 t_1 = NdChar / (1.0 + math.exp(((EDonor + (mu + (Vef - Ec))) / KbT))) tmp = 0 if NdChar <= -1.25e-21: tmp = t_1 + (NaChar / t_0) elif NdChar <= 2.6e+54: tmp = (NdChar / (2.0 - (Ec / KbT))) - (NaChar / (-1.0 - math.exp(((Vef + (Ev - (mu - EAccept))) / KbT)))) else: tmp = t_1 + (NaChar * (1.0 / t_0)) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(EAccept / KbT) + 2.0) t_1 = Float64(NdChar / Float64(1.0 + exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) tmp = 0.0 if (NdChar <= -1.25e-21) tmp = Float64(t_1 + Float64(NaChar / t_0)); elseif (NdChar <= 2.6e+54) tmp = Float64(Float64(NdChar / Float64(2.0 - Float64(Ec / KbT))) - Float64(NaChar / Float64(-1.0 - exp(Float64(Float64(Vef + Float64(Ev - Float64(mu - EAccept))) / KbT))))); else tmp = Float64(t_1 + Float64(NaChar * Float64(1.0 / t_0))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = (EAccept / KbT) + 2.0; t_1 = NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT))); tmp = 0.0; if (NdChar <= -1.25e-21) tmp = t_1 + (NaChar / t_0); elseif (NdChar <= 2.6e+54) tmp = (NdChar / (2.0 - (Ec / KbT))) - (NaChar / (-1.0 - exp(((Vef + (Ev - (mu - EAccept))) / KbT)))); else tmp = t_1 + (NaChar * (1.0 / t_0)); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(EAccept / KbT), $MachinePrecision] + 2.0), $MachinePrecision]}, Block[{t$95$1 = N[(NdChar / N[(1.0 + N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NdChar, -1.25e-21], N[(t$95$1 + N[(NaChar / t$95$0), $MachinePrecision]), $MachinePrecision], If[LessEqual[NdChar, 2.6e+54], N[(N[(NdChar / N[(2.0 - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(NaChar / N[(-1.0 - N[Exp[N[(N[(Vef + N[(Ev - N[(mu - EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(t$95$1 + N[(NaChar * N[(1.0 / t$95$0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{EAccept}{KbT} + 2\\
t_1 := \frac{NdChar}{1 + e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}}\\
\mathbf{if}\;NdChar \leq -1.25 \cdot 10^{-21}:\\
\;\;\;\;t\_1 + \frac{NaChar}{t\_0}\\
\mathbf{elif}\;NdChar \leq 2.6 \cdot 10^{+54}:\\
\;\;\;\;\frac{NdChar}{2 - \frac{Ec}{KbT}} - \frac{NaChar}{-1 - e^{\frac{Vef + \left(Ev - \left(mu - EAccept\right)\right)}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;t\_1 + NaChar \cdot \frac{1}{t\_0}\\
\end{array}
\end{array}
if NdChar < -1.24999999999999993e-21Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 74.5%
Taylor expanded in EAccept around 0 63.3%
if -1.24999999999999993e-21 < NdChar < 2.60000000000000007e54Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 69.8%
associate--l+69.8%
associate--l+69.8%
associate--l+69.8%
Simplified69.8%
Taylor expanded in Ec around inf 67.7%
neg-mul-167.7%
distribute-neg-frac267.7%
Simplified67.7%
if 2.60000000000000007e54 < NdChar Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 82.3%
Taylor expanded in EAccept around 0 65.8%
div-inv65.8%
Applied egg-rr65.8%
Final simplification66.3%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT)))
(t_1 (exp (/ (+ Vef (- Ev (- mu EAccept))) KbT))))
(if (<= NdChar -2.4e-20)
(+ (/ NdChar (+ 1.0 t_0)) (* NaChar 0.5))
(if (<= NdChar -1.5e-227)
(- (/ NaChar (+ 1.0 t_1)) (/ (* NdChar KbT) Ec))
(if (<= NdChar 1.9e+53)
(- (/ NdChar 2.0) (/ NaChar (- -1.0 t_1)))
(- (/ NaChar 2.0) (/ NdChar (- -1.0 t_0))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = exp(((EDonor + (mu + (Vef - Ec))) / KbT));
double t_1 = exp(((Vef + (Ev - (mu - EAccept))) / KbT));
double tmp;
if (NdChar <= -2.4e-20) {
tmp = (NdChar / (1.0 + t_0)) + (NaChar * 0.5);
} else if (NdChar <= -1.5e-227) {
tmp = (NaChar / (1.0 + t_1)) - ((NdChar * KbT) / Ec);
} else if (NdChar <= 1.9e+53) {
tmp = (NdChar / 2.0) - (NaChar / (-1.0 - t_1));
} else {
tmp = (NaChar / 2.0) - (NdChar / (-1.0 - t_0));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = exp(((edonor + (mu + (vef - ec))) / kbt))
t_1 = exp(((vef + (ev - (mu - eaccept))) / kbt))
if (ndchar <= (-2.4d-20)) then
tmp = (ndchar / (1.0d0 + t_0)) + (nachar * 0.5d0)
else if (ndchar <= (-1.5d-227)) then
tmp = (nachar / (1.0d0 + t_1)) - ((ndchar * kbt) / ec)
else if (ndchar <= 1.9d+53) then
tmp = (ndchar / 2.0d0) - (nachar / ((-1.0d0) - t_1))
else
tmp = (nachar / 2.0d0) - (ndchar / ((-1.0d0) - t_0))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT));
double t_1 = Math.exp(((Vef + (Ev - (mu - EAccept))) / KbT));
double tmp;
if (NdChar <= -2.4e-20) {
tmp = (NdChar / (1.0 + t_0)) + (NaChar * 0.5);
} else if (NdChar <= -1.5e-227) {
tmp = (NaChar / (1.0 + t_1)) - ((NdChar * KbT) / Ec);
} else if (NdChar <= 1.9e+53) {
tmp = (NdChar / 2.0) - (NaChar / (-1.0 - t_1));
} else {
tmp = (NaChar / 2.0) - (NdChar / (-1.0 - t_0));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)) t_1 = math.exp(((Vef + (Ev - (mu - EAccept))) / KbT)) tmp = 0 if NdChar <= -2.4e-20: tmp = (NdChar / (1.0 + t_0)) + (NaChar * 0.5) elif NdChar <= -1.5e-227: tmp = (NaChar / (1.0 + t_1)) - ((NdChar * KbT) / Ec) elif NdChar <= 1.9e+53: tmp = (NdChar / 2.0) - (NaChar / (-1.0 - t_1)) else: tmp = (NaChar / 2.0) - (NdChar / (-1.0 - t_0)) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)) t_1 = exp(Float64(Float64(Vef + Float64(Ev - Float64(mu - EAccept))) / KbT)) tmp = 0.0 if (NdChar <= -2.4e-20) tmp = Float64(Float64(NdChar / Float64(1.0 + t_0)) + Float64(NaChar * 0.5)); elseif (NdChar <= -1.5e-227) tmp = Float64(Float64(NaChar / Float64(1.0 + t_1)) - Float64(Float64(NdChar * KbT) / Ec)); elseif (NdChar <= 1.9e+53) tmp = Float64(Float64(NdChar / 2.0) - Float64(NaChar / Float64(-1.0 - t_1))); else tmp = Float64(Float64(NaChar / 2.0) - Float64(NdChar / Float64(-1.0 - t_0))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = exp(((EDonor + (mu + (Vef - Ec))) / KbT)); t_1 = exp(((Vef + (Ev - (mu - EAccept))) / KbT)); tmp = 0.0; if (NdChar <= -2.4e-20) tmp = (NdChar / (1.0 + t_0)) + (NaChar * 0.5); elseif (NdChar <= -1.5e-227) tmp = (NaChar / (1.0 + t_1)) - ((NdChar * KbT) / Ec); elseif (NdChar <= 1.9e+53) tmp = (NdChar / 2.0) - (NaChar / (-1.0 - t_1)); else tmp = (NaChar / 2.0) - (NdChar / (-1.0 - t_0)); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[Exp[N[(N[(Vef + N[(Ev - N[(mu - EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]}, If[LessEqual[NdChar, -2.4e-20], N[(N[(NdChar / N[(1.0 + t$95$0), $MachinePrecision]), $MachinePrecision] + N[(NaChar * 0.5), $MachinePrecision]), $MachinePrecision], If[LessEqual[NdChar, -1.5e-227], N[(N[(NaChar / N[(1.0 + t$95$1), $MachinePrecision]), $MachinePrecision] - N[(N[(NdChar * KbT), $MachinePrecision] / Ec), $MachinePrecision]), $MachinePrecision], If[LessEqual[NdChar, 1.9e+53], N[(N[(NdChar / 2.0), $MachinePrecision] - N[(NaChar / N[(-1.0 - t$95$1), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar / 2.0), $MachinePrecision] - N[(NdChar / N[(-1.0 - t$95$0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}\\
t_1 := e^{\frac{Vef + \left(Ev - \left(mu - EAccept\right)\right)}{KbT}}\\
\mathbf{if}\;NdChar \leq -2.4 \cdot 10^{-20}:\\
\;\;\;\;\frac{NdChar}{1 + t\_0} + NaChar \cdot 0.5\\
\mathbf{elif}\;NdChar \leq -1.5 \cdot 10^{-227}:\\
\;\;\;\;\frac{NaChar}{1 + t\_1} - \frac{NdChar \cdot KbT}{Ec}\\
\mathbf{elif}\;NdChar \leq 1.9 \cdot 10^{+53}:\\
\;\;\;\;\frac{NdChar}{2} - \frac{NaChar}{-1 - t\_1}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{2} - \frac{NdChar}{-1 - t\_0}\\
\end{array}
\end{array}
if NdChar < -2.39999999999999993e-20Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 74.5%
Taylor expanded in EAccept around 0 63.3%
Taylor expanded in EAccept around 0 59.5%
if -2.39999999999999993e-20 < NdChar < -1.5e-227Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 66.6%
associate--l+66.6%
associate--l+66.6%
associate--l+66.6%
Simplified66.6%
Taylor expanded in Ec around inf 58.8%
associate-*r/58.8%
associate-*r*58.8%
neg-mul-158.8%
Simplified58.8%
if -1.5e-227 < NdChar < 1.89999999999999999e53Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 65.1%
if 1.89999999999999999e53 < NdChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 55.1%
Final simplification60.8%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (or (<= NdChar -5e-18) (not (<= NdChar 1.35e+54)))
(+
(/ NdChar (+ 1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT))))
(/ NaChar (+ (/ EAccept KbT) 2.0)))
(-
(/ NdChar (- 2.0 (/ Ec KbT)))
(/ NaChar (- -1.0 (exp (/ (+ Vef (- Ev (- mu EAccept))) KbT)))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NdChar <= -5e-18) || !(NdChar <= 1.35e+54)) {
tmp = (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / ((EAccept / KbT) + 2.0));
} else {
tmp = (NdChar / (2.0 - (Ec / KbT))) - (NaChar / (-1.0 - exp(((Vef + (Ev - (mu - 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) :: tmp
if ((ndchar <= (-5d-18)) .or. (.not. (ndchar <= 1.35d+54))) then
tmp = (ndchar / (1.0d0 + exp(((edonor + (mu + (vef - ec))) / kbt)))) + (nachar / ((eaccept / kbt) + 2.0d0))
else
tmp = (ndchar / (2.0d0 - (ec / kbt))) - (nachar / ((-1.0d0) - exp(((vef + (ev - (mu - 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 tmp;
if ((NdChar <= -5e-18) || !(NdChar <= 1.35e+54)) {
tmp = (NdChar / (1.0 + Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / ((EAccept / KbT) + 2.0));
} else {
tmp = (NdChar / (2.0 - (Ec / KbT))) - (NaChar / (-1.0 - Math.exp(((Vef + (Ev - (mu - EAccept))) / KbT))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if (NdChar <= -5e-18) or not (NdChar <= 1.35e+54): tmp = (NdChar / (1.0 + math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / ((EAccept / KbT) + 2.0)) else: tmp = (NdChar / (2.0 - (Ec / KbT))) - (NaChar / (-1.0 - math.exp(((Vef + (Ev - (mu - EAccept))) / KbT)))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if ((NdChar <= -5e-18) || !(NdChar <= 1.35e+54)) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) + Float64(NaChar / Float64(Float64(EAccept / KbT) + 2.0))); else tmp = Float64(Float64(NdChar / Float64(2.0 - Float64(Ec / KbT))) - Float64(NaChar / Float64(-1.0 - exp(Float64(Float64(Vef + Float64(Ev - Float64(mu - EAccept))) / KbT))))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if ((NdChar <= -5e-18) || ~((NdChar <= 1.35e+54))) tmp = (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / ((EAccept / KbT) + 2.0)); else tmp = (NdChar / (2.0 - (Ec / KbT))) - (NaChar / (-1.0 - exp(((Vef + (Ev - (mu - EAccept))) / KbT)))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[Or[LessEqual[NdChar, -5e-18], N[Not[LessEqual[NdChar, 1.35e+54]], $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[(N[(EAccept / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar / N[(2.0 - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(NaChar / N[(-1.0 - N[Exp[N[(N[(Vef + N[(Ev - N[(mu - EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NdChar \leq -5 \cdot 10^{-18} \lor \neg \left(NdChar \leq 1.35 \cdot 10^{+54}\right):\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}} + \frac{NaChar}{\frac{EAccept}{KbT} + 2}\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{2 - \frac{Ec}{KbT}} - \frac{NaChar}{-1 - e^{\frac{Vef + \left(Ev - \left(mu - EAccept\right)\right)}{KbT}}}\\
\end{array}
\end{array}
if NdChar < -5.00000000000000036e-18 or 1.35000000000000005e54 < NdChar Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 77.5%
Taylor expanded in EAccept around 0 64.3%
if -5.00000000000000036e-18 < NdChar < 1.35000000000000005e54Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 69.8%
associate--l+69.8%
associate--l+69.8%
associate--l+69.8%
Simplified69.8%
Taylor expanded in Ec around inf 67.7%
neg-mul-167.7%
distribute-neg-frac267.7%
Simplified67.7%
Final simplification66.3%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (or (<= NdChar -4.8e-21) (not (<= NdChar 1.8e+57)))
(+
(/ NdChar (+ 1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT))))
(/ NaChar (+ (/ EAccept KbT) 2.0)))
(+
(/ NaChar (+ 1.0 (exp (/ (+ Vef (- Ev (- mu EAccept))) KbT))))
(/ NdChar (+ (/ mu KbT) 2.0)))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NdChar <= -4.8e-21) || !(NdChar <= 1.8e+57)) {
tmp = (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / ((EAccept / KbT) + 2.0));
} else {
tmp = (NaChar / (1.0 + exp(((Vef + (Ev - (mu - EAccept))) / KbT)))) + (NdChar / ((mu / KbT) + 2.0));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if ((ndchar <= (-4.8d-21)) .or. (.not. (ndchar <= 1.8d+57))) then
tmp = (ndchar / (1.0d0 + exp(((edonor + (mu + (vef - ec))) / kbt)))) + (nachar / ((eaccept / kbt) + 2.0d0))
else
tmp = (nachar / (1.0d0 + exp(((vef + (ev - (mu - eaccept))) / kbt)))) + (ndchar / ((mu / kbt) + 2.0d0))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NdChar <= -4.8e-21) || !(NdChar <= 1.8e+57)) {
tmp = (NdChar / (1.0 + Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / ((EAccept / KbT) + 2.0));
} else {
tmp = (NaChar / (1.0 + Math.exp(((Vef + (Ev - (mu - EAccept))) / KbT)))) + (NdChar / ((mu / KbT) + 2.0));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if (NdChar <= -4.8e-21) or not (NdChar <= 1.8e+57): tmp = (NdChar / (1.0 + math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / ((EAccept / KbT) + 2.0)) else: tmp = (NaChar / (1.0 + math.exp(((Vef + (Ev - (mu - EAccept))) / KbT)))) + (NdChar / ((mu / KbT) + 2.0)) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if ((NdChar <= -4.8e-21) || !(NdChar <= 1.8e+57)) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) + Float64(NaChar / Float64(Float64(EAccept / KbT) + 2.0))); else tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Ev - Float64(mu - EAccept))) / KbT)))) + Float64(NdChar / Float64(Float64(mu / KbT) + 2.0))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if ((NdChar <= -4.8e-21) || ~((NdChar <= 1.8e+57))) tmp = (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / ((EAccept / KbT) + 2.0)); else tmp = (NaChar / (1.0 + exp(((Vef + (Ev - (mu - EAccept))) / KbT)))) + (NdChar / ((mu / KbT) + 2.0)); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[Or[LessEqual[NdChar, -4.8e-21], N[Not[LessEqual[NdChar, 1.8e+57]], $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[(N[(EAccept / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(Ev - N[(mu - EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(N[(mu / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NdChar \leq -4.8 \cdot 10^{-21} \lor \neg \left(NdChar \leq 1.8 \cdot 10^{+57}\right):\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}} + \frac{NaChar}{\frac{EAccept}{KbT} + 2}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Vef + \left(Ev - \left(mu - EAccept\right)\right)}{KbT}}} + \frac{NdChar}{\frac{mu}{KbT} + 2}\\
\end{array}
\end{array}
if NdChar < -4.7999999999999999e-21 or 1.8000000000000001e57 < NdChar Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 78.7%
Taylor expanded in EAccept around 0 65.3%
if -4.7999999999999999e-21 < NdChar < 1.8000000000000001e57Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 70.2%
associate--l+70.2%
associate--l+70.2%
associate--l+70.2%
Simplified70.2%
Taylor expanded in mu around inf 65.1%
Final simplification65.2%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (or (<= NdChar -1.05e-17) (not (<= NdChar 1.8e+57)))
(+
(/ NdChar (+ 1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT))))
(/ NaChar (+ (/ EAccept KbT) 2.0)))
(+
(/ NaChar (+ 1.0 (exp (/ (+ Vef (- Ev (- mu EAccept))) KbT))))
(/ 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 ((NdChar <= -1.05e-17) || !(NdChar <= 1.8e+57)) {
tmp = (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / ((EAccept / KbT) + 2.0));
} else {
tmp = (NaChar / (1.0 + exp(((Vef + (Ev - (mu - EAccept))) / KbT)))) + (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 ((ndchar <= (-1.05d-17)) .or. (.not. (ndchar <= 1.8d+57))) then
tmp = (ndchar / (1.0d0 + exp(((edonor + (mu + (vef - ec))) / kbt)))) + (nachar / ((eaccept / kbt) + 2.0d0))
else
tmp = (nachar / (1.0d0 + exp(((vef + (ev - (mu - eaccept))) / kbt)))) + (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 ((NdChar <= -1.05e-17) || !(NdChar <= 1.8e+57)) {
tmp = (NdChar / (1.0 + Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / ((EAccept / KbT) + 2.0));
} else {
tmp = (NaChar / (1.0 + Math.exp(((Vef + (Ev - (mu - EAccept))) / KbT)))) + (NdChar / (2.0 + (EDonor / KbT)));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if (NdChar <= -1.05e-17) or not (NdChar <= 1.8e+57): tmp = (NdChar / (1.0 + math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / ((EAccept / KbT) + 2.0)) else: tmp = (NaChar / (1.0 + math.exp(((Vef + (Ev - (mu - EAccept))) / KbT)))) + (NdChar / (2.0 + (EDonor / KbT))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if ((NdChar <= -1.05e-17) || !(NdChar <= 1.8e+57)) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) + Float64(NaChar / Float64(Float64(EAccept / KbT) + 2.0))); else tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Ev - Float64(mu - EAccept))) / KbT)))) + 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 ((NdChar <= -1.05e-17) || ~((NdChar <= 1.8e+57))) tmp = (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / ((EAccept / KbT) + 2.0)); else tmp = (NaChar / (1.0 + exp(((Vef + (Ev - (mu - EAccept))) / KbT)))) + (NdChar / (2.0 + (EDonor / KbT))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[Or[LessEqual[NdChar, -1.05e-17], N[Not[LessEqual[NdChar, 1.8e+57]], $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[(N[(EAccept / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(Ev - N[(mu - EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(2.0 + N[(EDonor / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NdChar \leq -1.05 \cdot 10^{-17} \lor \neg \left(NdChar \leq 1.8 \cdot 10^{+57}\right):\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}} + \frac{NaChar}{\frac{EAccept}{KbT} + 2}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Vef + \left(Ev - \left(mu - EAccept\right)\right)}{KbT}}} + \frac{NdChar}{2 + \frac{EDonor}{KbT}}\\
\end{array}
\end{array}
if NdChar < -1.04999999999999996e-17 or 1.8000000000000001e57 < NdChar Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 78.7%
Taylor expanded in EAccept around 0 65.3%
if -1.04999999999999996e-17 < NdChar < 1.8000000000000001e57Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 70.2%
associate--l+70.2%
associate--l+70.2%
associate--l+70.2%
Simplified70.2%
Taylor expanded in EDonor around inf 64.1%
Final simplification64.6%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (or (<= NdChar -1.7e-7) (not (<= NdChar 2.35e+53)))
(+
(/ NdChar (+ 1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT))))
(* NaChar 0.5))
(-
(/ NdChar 2.0)
(/ NaChar (- -1.0 (exp (/ (+ Vef (- Ev (- mu EAccept))) KbT)))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NdChar <= -1.7e-7) || !(NdChar <= 2.35e+53)) {
tmp = (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar * 0.5);
} else {
tmp = (NdChar / 2.0) - (NaChar / (-1.0 - exp(((Vef + (Ev - (mu - 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) :: tmp
if ((ndchar <= (-1.7d-7)) .or. (.not. (ndchar <= 2.35d+53))) then
tmp = (ndchar / (1.0d0 + exp(((edonor + (mu + (vef - ec))) / kbt)))) + (nachar * 0.5d0)
else
tmp = (ndchar / 2.0d0) - (nachar / ((-1.0d0) - exp(((vef + (ev - (mu - 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 tmp;
if ((NdChar <= -1.7e-7) || !(NdChar <= 2.35e+53)) {
tmp = (NdChar / (1.0 + Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar * 0.5);
} else {
tmp = (NdChar / 2.0) - (NaChar / (-1.0 - Math.exp(((Vef + (Ev - (mu - EAccept))) / KbT))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if (NdChar <= -1.7e-7) or not (NdChar <= 2.35e+53): tmp = (NdChar / (1.0 + math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar * 0.5) else: tmp = (NdChar / 2.0) - (NaChar / (-1.0 - math.exp(((Vef + (Ev - (mu - EAccept))) / KbT)))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if ((NdChar <= -1.7e-7) || !(NdChar <= 2.35e+53)) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) + Float64(NaChar * 0.5)); else tmp = Float64(Float64(NdChar / 2.0) - Float64(NaChar / Float64(-1.0 - exp(Float64(Float64(Vef + Float64(Ev - Float64(mu - EAccept))) / KbT))))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if ((NdChar <= -1.7e-7) || ~((NdChar <= 2.35e+53))) tmp = (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar * 0.5); else tmp = (NdChar / 2.0) - (NaChar / (-1.0 - exp(((Vef + (Ev - (mu - EAccept))) / KbT)))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[Or[LessEqual[NdChar, -1.7e-7], N[Not[LessEqual[NdChar, 2.35e+53]], $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 * 0.5), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar / 2.0), $MachinePrecision] - N[(NaChar / N[(-1.0 - N[Exp[N[(N[(Vef + N[(Ev - N[(mu - EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NdChar \leq -1.7 \cdot 10^{-7} \lor \neg \left(NdChar \leq 2.35 \cdot 10^{+53}\right):\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}} + NaChar \cdot 0.5\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{2} - \frac{NaChar}{-1 - e^{\frac{Vef + \left(Ev - \left(mu - EAccept\right)\right)}{KbT}}}\\
\end{array}
\end{array}
if NdChar < -1.69999999999999987e-7 or 2.34999999999999988e53 < NdChar Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 77.7%
Taylor expanded in EAccept around 0 63.2%
Taylor expanded in EAccept around 0 57.1%
if -1.69999999999999987e-7 < NdChar < 2.34999999999999988e53Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 60.2%
Final simplification58.9%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (or (<= NdChar -6.5e+129) (not (<= NdChar 7e+53)))
(+
(/ NdChar (+ 1.0 (exp (/ Ec (- KbT)))))
(/ NaChar (+ (/ EAccept KbT) 2.0)))
(-
(/ NdChar 2.0)
(/ NaChar (- -1.0 (exp (/ (+ Vef (- Ev (- mu EAccept))) KbT)))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NdChar <= -6.5e+129) || !(NdChar <= 7e+53)) {
tmp = (NdChar / (1.0 + exp((Ec / -KbT)))) + (NaChar / ((EAccept / KbT) + 2.0));
} else {
tmp = (NdChar / 2.0) - (NaChar / (-1.0 - exp(((Vef + (Ev - (mu - 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) :: tmp
if ((ndchar <= (-6.5d+129)) .or. (.not. (ndchar <= 7d+53))) then
tmp = (ndchar / (1.0d0 + exp((ec / -kbt)))) + (nachar / ((eaccept / kbt) + 2.0d0))
else
tmp = (ndchar / 2.0d0) - (nachar / ((-1.0d0) - exp(((vef + (ev - (mu - 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 tmp;
if ((NdChar <= -6.5e+129) || !(NdChar <= 7e+53)) {
tmp = (NdChar / (1.0 + Math.exp((Ec / -KbT)))) + (NaChar / ((EAccept / KbT) + 2.0));
} else {
tmp = (NdChar / 2.0) - (NaChar / (-1.0 - Math.exp(((Vef + (Ev - (mu - EAccept))) / KbT))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if (NdChar <= -6.5e+129) or not (NdChar <= 7e+53): tmp = (NdChar / (1.0 + math.exp((Ec / -KbT)))) + (NaChar / ((EAccept / KbT) + 2.0)) else: tmp = (NdChar / 2.0) - (NaChar / (-1.0 - math.exp(((Vef + (Ev - (mu - EAccept))) / KbT)))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if ((NdChar <= -6.5e+129) || !(NdChar <= 7e+53)) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Ec / Float64(-KbT))))) + Float64(NaChar / Float64(Float64(EAccept / KbT) + 2.0))); else tmp = Float64(Float64(NdChar / 2.0) - Float64(NaChar / Float64(-1.0 - exp(Float64(Float64(Vef + Float64(Ev - Float64(mu - EAccept))) / KbT))))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if ((NdChar <= -6.5e+129) || ~((NdChar <= 7e+53))) tmp = (NdChar / (1.0 + exp((Ec / -KbT)))) + (NaChar / ((EAccept / KbT) + 2.0)); else tmp = (NdChar / 2.0) - (NaChar / (-1.0 - exp(((Vef + (Ev - (mu - EAccept))) / KbT)))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[Or[LessEqual[NdChar, -6.5e+129], N[Not[LessEqual[NdChar, 7e+53]], $MachinePrecision]], N[(N[(NdChar / N[(1.0 + N[Exp[N[(Ec / (-KbT)), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(N[(EAccept / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar / 2.0), $MachinePrecision] - N[(NaChar / N[(-1.0 - N[Exp[N[(N[(Vef + N[(Ev - N[(mu - EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NdChar \leq -6.5 \cdot 10^{+129} \lor \neg \left(NdChar \leq 7 \cdot 10^{+53}\right):\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{Ec}{-KbT}}} + \frac{NaChar}{\frac{EAccept}{KbT} + 2}\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{2} - \frac{NaChar}{-1 - e^{\frac{Vef + \left(Ev - \left(mu - EAccept\right)\right)}{KbT}}}\\
\end{array}
\end{array}
if NdChar < -6.4999999999999995e129 or 7.00000000000000038e53 < NdChar Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 78.3%
Taylor expanded in EAccept around 0 64.6%
Taylor expanded in Ec around inf 51.9%
mul-1-neg60.0%
Simplified51.9%
if -6.4999999999999995e129 < NdChar < 7.00000000000000038e53Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 57.9%
Final simplification56.1%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT))))
(if (<= NdChar -3.2e-9)
(+ (/ NdChar (+ 1.0 t_0)) (* NaChar 0.5))
(if (<= NdChar 3.1e+53)
(-
(/ NdChar 2.0)
(/ NaChar (- -1.0 (exp (/ (+ Vef (- Ev (- mu EAccept))) KbT)))))
(- (/ NaChar 2.0) (/ NdChar (- -1.0 t_0)))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = exp(((EDonor + (mu + (Vef - Ec))) / KbT));
double tmp;
if (NdChar <= -3.2e-9) {
tmp = (NdChar / (1.0 + t_0)) + (NaChar * 0.5);
} else if (NdChar <= 3.1e+53) {
tmp = (NdChar / 2.0) - (NaChar / (-1.0 - exp(((Vef + (Ev - (mu - EAccept))) / KbT))));
} else {
tmp = (NaChar / 2.0) - (NdChar / (-1.0 - t_0));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: tmp
t_0 = exp(((edonor + (mu + (vef - ec))) / kbt))
if (ndchar <= (-3.2d-9)) then
tmp = (ndchar / (1.0d0 + t_0)) + (nachar * 0.5d0)
else if (ndchar <= 3.1d+53) then
tmp = (ndchar / 2.0d0) - (nachar / ((-1.0d0) - exp(((vef + (ev - (mu - eaccept))) / kbt))))
else
tmp = (nachar / 2.0d0) - (ndchar / ((-1.0d0) - t_0))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT));
double tmp;
if (NdChar <= -3.2e-9) {
tmp = (NdChar / (1.0 + t_0)) + (NaChar * 0.5);
} else if (NdChar <= 3.1e+53) {
tmp = (NdChar / 2.0) - (NaChar / (-1.0 - Math.exp(((Vef + (Ev - (mu - EAccept))) / KbT))));
} else {
tmp = (NaChar / 2.0) - (NdChar / (-1.0 - t_0));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)) tmp = 0 if NdChar <= -3.2e-9: tmp = (NdChar / (1.0 + t_0)) + (NaChar * 0.5) elif NdChar <= 3.1e+53: tmp = (NdChar / 2.0) - (NaChar / (-1.0 - math.exp(((Vef + (Ev - (mu - EAccept))) / KbT)))) else: tmp = (NaChar / 2.0) - (NdChar / (-1.0 - t_0)) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)) tmp = 0.0 if (NdChar <= -3.2e-9) tmp = Float64(Float64(NdChar / Float64(1.0 + t_0)) + Float64(NaChar * 0.5)); elseif (NdChar <= 3.1e+53) tmp = Float64(Float64(NdChar / 2.0) - Float64(NaChar / Float64(-1.0 - exp(Float64(Float64(Vef + Float64(Ev - Float64(mu - EAccept))) / KbT))))); else tmp = Float64(Float64(NaChar / 2.0) - Float64(NdChar / Float64(-1.0 - t_0))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = exp(((EDonor + (mu + (Vef - Ec))) / KbT)); tmp = 0.0; if (NdChar <= -3.2e-9) tmp = (NdChar / (1.0 + t_0)) + (NaChar * 0.5); elseif (NdChar <= 3.1e+53) tmp = (NdChar / 2.0) - (NaChar / (-1.0 - exp(((Vef + (Ev - (mu - EAccept))) / KbT)))); else tmp = (NaChar / 2.0) - (NdChar / (-1.0 - t_0)); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]}, If[LessEqual[NdChar, -3.2e-9], N[(N[(NdChar / N[(1.0 + t$95$0), $MachinePrecision]), $MachinePrecision] + N[(NaChar * 0.5), $MachinePrecision]), $MachinePrecision], If[LessEqual[NdChar, 3.1e+53], N[(N[(NdChar / 2.0), $MachinePrecision] - N[(NaChar / N[(-1.0 - N[Exp[N[(N[(Vef + N[(Ev - N[(mu - EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar / 2.0), $MachinePrecision] - N[(NdChar / N[(-1.0 - t$95$0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}\\
\mathbf{if}\;NdChar \leq -3.2 \cdot 10^{-9}:\\
\;\;\;\;\frac{NdChar}{1 + t\_0} + NaChar \cdot 0.5\\
\mathbf{elif}\;NdChar \leq 3.1 \cdot 10^{+53}:\\
\;\;\;\;\frac{NdChar}{2} - \frac{NaChar}{-1 - e^{\frac{Vef + \left(Ev - \left(mu - EAccept\right)\right)}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{2} - \frac{NdChar}{-1 - t\_0}\\
\end{array}
\end{array}
if NdChar < -3.20000000000000012e-9Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 74.3%
Taylor expanded in EAccept around 0 62.4%
Taylor expanded in EAccept around 0 58.3%
if -3.20000000000000012e-9 < NdChar < 3.10000000000000019e53Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 60.2%
if 3.10000000000000019e53 < NdChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 55.1%
Final simplification58.9%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NaChar (+ (/ EAccept KbT) 2.0))))
(if (<= Ec -1.9e-61)
(+ t_0 (/ NdChar (+ 1.0 (exp (/ EDonor KbT)))))
(if (<= Ec 2e+69)
(- (/ NdChar 2.0) (/ NaChar (- -1.0 (exp (/ EAccept KbT)))))
(+ (/ NdChar (+ 1.0 (exp (/ Ec (- KbT))))) t_0)))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NaChar / ((EAccept / KbT) + 2.0);
double tmp;
if (Ec <= -1.9e-61) {
tmp = t_0 + (NdChar / (1.0 + exp((EDonor / KbT))));
} else if (Ec <= 2e+69) {
tmp = (NdChar / 2.0) - (NaChar / (-1.0 - exp((EAccept / KbT))));
} else {
tmp = (NdChar / (1.0 + exp((Ec / -KbT)))) + t_0;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: tmp
t_0 = nachar / ((eaccept / kbt) + 2.0d0)
if (ec <= (-1.9d-61)) then
tmp = t_0 + (ndchar / (1.0d0 + exp((edonor / kbt))))
else if (ec <= 2d+69) then
tmp = (ndchar / 2.0d0) - (nachar / ((-1.0d0) - exp((eaccept / kbt))))
else
tmp = (ndchar / (1.0d0 + exp((ec / -kbt)))) + t_0
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NaChar / ((EAccept / KbT) + 2.0);
double tmp;
if (Ec <= -1.9e-61) {
tmp = t_0 + (NdChar / (1.0 + Math.exp((EDonor / KbT))));
} else if (Ec <= 2e+69) {
tmp = (NdChar / 2.0) - (NaChar / (-1.0 - Math.exp((EAccept / KbT))));
} else {
tmp = (NdChar / (1.0 + Math.exp((Ec / -KbT)))) + t_0;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NaChar / ((EAccept / KbT) + 2.0) tmp = 0 if Ec <= -1.9e-61: tmp = t_0 + (NdChar / (1.0 + math.exp((EDonor / KbT)))) elif Ec <= 2e+69: tmp = (NdChar / 2.0) - (NaChar / (-1.0 - math.exp((EAccept / KbT)))) else: tmp = (NdChar / (1.0 + math.exp((Ec / -KbT)))) + t_0 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NaChar / Float64(Float64(EAccept / KbT) + 2.0)) tmp = 0.0 if (Ec <= -1.9e-61) tmp = Float64(t_0 + Float64(NdChar / Float64(1.0 + exp(Float64(EDonor / KbT))))); elseif (Ec <= 2e+69) tmp = Float64(Float64(NdChar / 2.0) - Float64(NaChar / Float64(-1.0 - exp(Float64(EAccept / KbT))))); else tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Ec / Float64(-KbT))))) + t_0); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NaChar / ((EAccept / KbT) + 2.0); tmp = 0.0; if (Ec <= -1.9e-61) tmp = t_0 + (NdChar / (1.0 + exp((EDonor / KbT)))); elseif (Ec <= 2e+69) tmp = (NdChar / 2.0) - (NaChar / (-1.0 - exp((EAccept / KbT)))); else tmp = (NdChar / (1.0 + exp((Ec / -KbT)))) + t_0; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NaChar / N[(N[(EAccept / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[Ec, -1.9e-61], N[(t$95$0 + N[(NdChar / N[(1.0 + N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[Ec, 2e+69], N[(N[(NdChar / 2.0), $MachinePrecision] - N[(NaChar / N[(-1.0 - N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar / N[(1.0 + N[Exp[N[(Ec / (-KbT)), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + t$95$0), $MachinePrecision]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{\frac{EAccept}{KbT} + 2}\\
\mathbf{if}\;Ec \leq -1.9 \cdot 10^{-61}:\\
\;\;\;\;t\_0 + \frac{NdChar}{1 + e^{\frac{EDonor}{KbT}}}\\
\mathbf{elif}\;Ec \leq 2 \cdot 10^{+69}:\\
\;\;\;\;\frac{NdChar}{2} - \frac{NaChar}{-1 - e^{\frac{EAccept}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{Ec}{-KbT}}} + t\_0\\
\end{array}
\end{array}
if Ec < -1.8999999999999999e-61Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 73.4%
Taylor expanded in EAccept around 0 52.4%
Taylor expanded in EDonor around inf 44.0%
if -1.8999999999999999e-61 < Ec < 2.0000000000000001e69Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 57.6%
Taylor expanded in EAccept around inf 41.5%
if 2.0000000000000001e69 < Ec Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 70.2%
Taylor expanded in EAccept around 0 60.4%
Taylor expanded in Ec around inf 58.7%
mul-1-neg81.5%
Simplified58.7%
Final simplification45.8%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (<= EAccept -3.1e-246)
(+ (/ NaChar (+ 1.0 (exp (/ Ev KbT)))) (/ NdChar 2.0))
(if (<= EAccept 1.06e+133)
(- (/ NdChar 2.0) (/ NaChar (- -1.0 (exp (/ mu (- KbT))))))
(- (/ NdChar 2.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 tmp;
if (EAccept <= -3.1e-246) {
tmp = (NaChar / (1.0 + exp((Ev / KbT)))) + (NdChar / 2.0);
} else if (EAccept <= 1.06e+133) {
tmp = (NdChar / 2.0) - (NaChar / (-1.0 - exp((mu / -KbT))));
} else {
tmp = (NdChar / 2.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) :: tmp
if (eaccept <= (-3.1d-246)) then
tmp = (nachar / (1.0d0 + exp((ev / kbt)))) + (ndchar / 2.0d0)
else if (eaccept <= 1.06d+133) then
tmp = (ndchar / 2.0d0) - (nachar / ((-1.0d0) - exp((mu / -kbt))))
else
tmp = (ndchar / 2.0d0) - (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 tmp;
if (EAccept <= -3.1e-246) {
tmp = (NaChar / (1.0 + Math.exp((Ev / KbT)))) + (NdChar / 2.0);
} else if (EAccept <= 1.06e+133) {
tmp = (NdChar / 2.0) - (NaChar / (-1.0 - Math.exp((mu / -KbT))));
} else {
tmp = (NdChar / 2.0) - (NaChar / (-1.0 - Math.exp((EAccept / KbT))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if EAccept <= -3.1e-246: tmp = (NaChar / (1.0 + math.exp((Ev / KbT)))) + (NdChar / 2.0) elif EAccept <= 1.06e+133: tmp = (NdChar / 2.0) - (NaChar / (-1.0 - math.exp((mu / -KbT)))) else: tmp = (NdChar / 2.0) - (NaChar / (-1.0 - math.exp((EAccept / KbT)))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (EAccept <= -3.1e-246) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT)))) + Float64(NdChar / 2.0)); elseif (EAccept <= 1.06e+133) tmp = Float64(Float64(NdChar / 2.0) - Float64(NaChar / Float64(-1.0 - exp(Float64(mu / Float64(-KbT)))))); else tmp = Float64(Float64(NdChar / 2.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) tmp = 0.0; if (EAccept <= -3.1e-246) tmp = (NaChar / (1.0 + exp((Ev / KbT)))) + (NdChar / 2.0); elseif (EAccept <= 1.06e+133) tmp = (NdChar / 2.0) - (NaChar / (-1.0 - exp((mu / -KbT)))); else tmp = (NdChar / 2.0) - (NaChar / (-1.0 - exp((EAccept / KbT)))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[EAccept, -3.1e-246], N[(N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[EAccept, 1.06e+133], N[(N[(NdChar / 2.0), $MachinePrecision] - N[(NaChar / N[(-1.0 - N[Exp[N[(mu / (-KbT)), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar / 2.0), $MachinePrecision] - N[(NaChar / N[(-1.0 - N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;EAccept \leq -3.1 \cdot 10^{-246}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Ev}{KbT}}} + \frac{NdChar}{2}\\
\mathbf{elif}\;EAccept \leq 1.06 \cdot 10^{+133}:\\
\;\;\;\;\frac{NdChar}{2} - \frac{NaChar}{-1 - e^{\frac{mu}{-KbT}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{2} - \frac{NaChar}{-1 - e^{\frac{EAccept}{KbT}}}\\
\end{array}
\end{array}
if EAccept < -3.1e-246Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 50.9%
Taylor expanded in Ev around inf 35.0%
if -3.1e-246 < EAccept < 1.06e133Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 49.4%
Taylor expanded in mu around inf 37.5%
associate-*r/37.5%
mul-1-neg37.5%
Simplified37.5%
if 1.06e133 < EAccept Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 59.0%
Taylor expanded in EAccept around inf 54.3%
Final simplification39.2%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (<= EAccept 8.5e-282)
(+ (/ NaChar (+ 1.0 (exp (/ Ev KbT)))) (/ NdChar 2.0))
(if (<= EAccept 6.2e-20)
(- (/ NaChar 2.0) (/ NdChar (- -1.0 (exp (/ mu KbT)))))
(- (/ NdChar 2.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 tmp;
if (EAccept <= 8.5e-282) {
tmp = (NaChar / (1.0 + exp((Ev / KbT)))) + (NdChar / 2.0);
} else if (EAccept <= 6.2e-20) {
tmp = (NaChar / 2.0) - (NdChar / (-1.0 - exp((mu / KbT))));
} else {
tmp = (NdChar / 2.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) :: tmp
if (eaccept <= 8.5d-282) then
tmp = (nachar / (1.0d0 + exp((ev / kbt)))) + (ndchar / 2.0d0)
else if (eaccept <= 6.2d-20) then
tmp = (nachar / 2.0d0) - (ndchar / ((-1.0d0) - exp((mu / kbt))))
else
tmp = (ndchar / 2.0d0) - (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 tmp;
if (EAccept <= 8.5e-282) {
tmp = (NaChar / (1.0 + Math.exp((Ev / KbT)))) + (NdChar / 2.0);
} else if (EAccept <= 6.2e-20) {
tmp = (NaChar / 2.0) - (NdChar / (-1.0 - Math.exp((mu / KbT))));
} else {
tmp = (NdChar / 2.0) - (NaChar / (-1.0 - Math.exp((EAccept / KbT))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if EAccept <= 8.5e-282: tmp = (NaChar / (1.0 + math.exp((Ev / KbT)))) + (NdChar / 2.0) elif EAccept <= 6.2e-20: tmp = (NaChar / 2.0) - (NdChar / (-1.0 - math.exp((mu / KbT)))) else: tmp = (NdChar / 2.0) - (NaChar / (-1.0 - math.exp((EAccept / KbT)))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (EAccept <= 8.5e-282) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT)))) + Float64(NdChar / 2.0)); elseif (EAccept <= 6.2e-20) tmp = Float64(Float64(NaChar / 2.0) - Float64(NdChar / Float64(-1.0 - exp(Float64(mu / KbT))))); else tmp = Float64(Float64(NdChar / 2.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) tmp = 0.0; if (EAccept <= 8.5e-282) tmp = (NaChar / (1.0 + exp((Ev / KbT)))) + (NdChar / 2.0); elseif (EAccept <= 6.2e-20) tmp = (NaChar / 2.0) - (NdChar / (-1.0 - exp((mu / KbT)))); else tmp = (NdChar / 2.0) - (NaChar / (-1.0 - exp((EAccept / KbT)))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[EAccept, 8.5e-282], N[(N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[EAccept, 6.2e-20], N[(N[(NaChar / 2.0), $MachinePrecision] - N[(NdChar / N[(-1.0 - N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar / 2.0), $MachinePrecision] - N[(NaChar / N[(-1.0 - N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;EAccept \leq 8.5 \cdot 10^{-282}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Ev}{KbT}}} + \frac{NdChar}{2}\\
\mathbf{elif}\;EAccept \leq 6.2 \cdot 10^{-20}:\\
\;\;\;\;\frac{NaChar}{2} - \frac{NdChar}{-1 - e^{\frac{mu}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{2} - \frac{NaChar}{-1 - e^{\frac{EAccept}{KbT}}}\\
\end{array}
\end{array}
if EAccept < 8.499999999999999e-282Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 50.4%
Taylor expanded in Ev around inf 35.8%
if 8.499999999999999e-282 < EAccept < 6.19999999999999999e-20Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 72.4%
Taylor expanded in KbT around inf 42.2%
if 6.19999999999999999e-20 < EAccept Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 57.6%
Taylor expanded in EAccept around inf 47.0%
Final simplification40.7%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (<= Ec -3.8e-59)
(+
(/ NaChar (+ (/ EAccept KbT) 2.0))
(/ NdChar (+ 1.0 (exp (/ EDonor KbT)))))
(- (/ NdChar 2.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 tmp;
if (Ec <= -3.8e-59) {
tmp = (NaChar / ((EAccept / KbT) + 2.0)) + (NdChar / (1.0 + exp((EDonor / KbT))));
} else {
tmp = (NdChar / 2.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) :: tmp
if (ec <= (-3.8d-59)) then
tmp = (nachar / ((eaccept / kbt) + 2.0d0)) + (ndchar / (1.0d0 + exp((edonor / kbt))))
else
tmp = (ndchar / 2.0d0) - (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 tmp;
if (Ec <= -3.8e-59) {
tmp = (NaChar / ((EAccept / KbT) + 2.0)) + (NdChar / (1.0 + Math.exp((EDonor / KbT))));
} else {
tmp = (NdChar / 2.0) - (NaChar / (-1.0 - Math.exp((EAccept / KbT))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if Ec <= -3.8e-59: tmp = (NaChar / ((EAccept / KbT) + 2.0)) + (NdChar / (1.0 + math.exp((EDonor / KbT)))) else: tmp = (NdChar / 2.0) - (NaChar / (-1.0 - math.exp((EAccept / KbT)))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (Ec <= -3.8e-59) tmp = Float64(Float64(NaChar / Float64(Float64(EAccept / KbT) + 2.0)) + Float64(NdChar / Float64(1.0 + exp(Float64(EDonor / KbT))))); else tmp = Float64(Float64(NdChar / 2.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) tmp = 0.0; if (Ec <= -3.8e-59) tmp = (NaChar / ((EAccept / KbT) + 2.0)) + (NdChar / (1.0 + exp((EDonor / KbT)))); else tmp = (NdChar / 2.0) - (NaChar / (-1.0 - exp((EAccept / KbT)))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[Ec, -3.8e-59], N[(N[(NaChar / N[(N[(EAccept / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(1.0 + N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar / 2.0), $MachinePrecision] - N[(NaChar / N[(-1.0 - N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;Ec \leq -3.8 \cdot 10^{-59}:\\
\;\;\;\;\frac{NaChar}{\frac{EAccept}{KbT} + 2} + \frac{NdChar}{1 + e^{\frac{EDonor}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{2} - \frac{NaChar}{-1 - e^{\frac{EAccept}{KbT}}}\\
\end{array}
\end{array}
if Ec < -3.79999999999999983e-59Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 73.4%
Taylor expanded in EAccept around 0 52.4%
Taylor expanded in EDonor around inf 44.0%
if -3.79999999999999983e-59 < Ec Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 55.1%
Taylor expanded in EAccept around inf 40.7%
Final simplification41.7%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (if (<= Ev -1.55e+93) (+ (/ NaChar (+ 1.0 (exp (/ Ev KbT)))) (/ NdChar 2.0)) (- (/ NdChar 2.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 tmp;
if (Ev <= -1.55e+93) {
tmp = (NaChar / (1.0 + exp((Ev / KbT)))) + (NdChar / 2.0);
} else {
tmp = (NdChar / 2.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) :: tmp
if (ev <= (-1.55d+93)) then
tmp = (nachar / (1.0d0 + exp((ev / kbt)))) + (ndchar / 2.0d0)
else
tmp = (ndchar / 2.0d0) - (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 tmp;
if (Ev <= -1.55e+93) {
tmp = (NaChar / (1.0 + Math.exp((Ev / KbT)))) + (NdChar / 2.0);
} else {
tmp = (NdChar / 2.0) - (NaChar / (-1.0 - Math.exp((EAccept / KbT))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if Ev <= -1.55e+93: tmp = (NaChar / (1.0 + math.exp((Ev / KbT)))) + (NdChar / 2.0) else: tmp = (NdChar / 2.0) - (NaChar / (-1.0 - math.exp((EAccept / KbT)))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (Ev <= -1.55e+93) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT)))) + Float64(NdChar / 2.0)); else tmp = Float64(Float64(NdChar / 2.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) tmp = 0.0; if (Ev <= -1.55e+93) tmp = (NaChar / (1.0 + exp((Ev / KbT)))) + (NdChar / 2.0); else tmp = (NdChar / 2.0) - (NaChar / (-1.0 - exp((EAccept / KbT)))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[Ev, -1.55e+93], N[(N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar / 2.0), $MachinePrecision] - N[(NaChar / N[(-1.0 - N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;Ev \leq -1.55 \cdot 10^{+93}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Ev}{KbT}}} + \frac{NdChar}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{2} - \frac{NaChar}{-1 - e^{\frac{EAccept}{KbT}}}\\
\end{array}
\end{array}
if Ev < -1.5500000000000001e93Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 44.7%
Taylor expanded in Ev around inf 38.3%
if -1.5500000000000001e93 < Ev Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 53.4%
Taylor expanded in EAccept around inf 40.8%
Final simplification40.3%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (- (/ NdChar 2.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) {
return (NdChar / 2.0) - (NaChar / (-1.0 - exp((EAccept / KbT))));
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
code = (ndchar / 2.0d0) - (nachar / ((-1.0d0) - exp((eaccept / kbt))))
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NdChar / 2.0) - (NaChar / (-1.0 - Math.exp((EAccept / KbT))));
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return (NdChar / 2.0) - (NaChar / (-1.0 - math.exp((EAccept / KbT))))
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(Float64(NdChar / 2.0) - Float64(NaChar / Float64(-1.0 - exp(Float64(EAccept / KbT))))) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = (NdChar / 2.0) - (NaChar / (-1.0 - exp((EAccept / KbT)))); end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(N[(NdChar / 2.0), $MachinePrecision] - N[(NaChar / N[(-1.0 - N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{NdChar}{2} - \frac{NaChar}{-1 - e^{\frac{EAccept}{KbT}}}
\end{array}
Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 51.6%
Taylor expanded in EAccept around inf 39.3%
Final simplification39.3%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (<= Ec -1.3e-189)
(+
(/
NdChar
(+
2.0
(*
EDonor
(- (/ 1.0 KbT) (/ (- (/ Ec KbT) (+ (/ Vef KbT) (/ mu KbT))) EDonor)))))
(/
NaChar
(- (+ 2.0 (+ (/ EAccept KbT) (+ (/ Vef KbT) (/ Ev KbT)))) (/ mu KbT))))
(+ (/ NdChar 2.0) (/ NaChar 2.0))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (Ec <= -1.3e-189) {
tmp = (NdChar / (2.0 + (EDonor * ((1.0 / KbT) - (((Ec / KbT) - ((Vef / KbT) + (mu / KbT))) / EDonor))))) + (NaChar / ((2.0 + ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) - (mu / KbT)));
} else {
tmp = (NdChar / 2.0) + (NaChar / 2.0);
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if (ec <= (-1.3d-189)) then
tmp = (ndchar / (2.0d0 + (edonor * ((1.0d0 / kbt) - (((ec / kbt) - ((vef / kbt) + (mu / kbt))) / edonor))))) + (nachar / ((2.0d0 + ((eaccept / kbt) + ((vef / kbt) + (ev / kbt)))) - (mu / kbt)))
else
tmp = (ndchar / 2.0d0) + (nachar / 2.0d0)
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (Ec <= -1.3e-189) {
tmp = (NdChar / (2.0 + (EDonor * ((1.0 / KbT) - (((Ec / KbT) - ((Vef / KbT) + (mu / KbT))) / EDonor))))) + (NaChar / ((2.0 + ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) - (mu / KbT)));
} else {
tmp = (NdChar / 2.0) + (NaChar / 2.0);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if Ec <= -1.3e-189: tmp = (NdChar / (2.0 + (EDonor * ((1.0 / KbT) - (((Ec / KbT) - ((Vef / KbT) + (mu / KbT))) / EDonor))))) + (NaChar / ((2.0 + ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) - (mu / KbT))) else: tmp = (NdChar / 2.0) + (NaChar / 2.0) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (Ec <= -1.3e-189) tmp = Float64(Float64(NdChar / Float64(2.0 + Float64(EDonor * Float64(Float64(1.0 / KbT) - Float64(Float64(Float64(Ec / KbT) - Float64(Float64(Vef / KbT) + Float64(mu / KbT))) / EDonor))))) + Float64(NaChar / Float64(Float64(2.0 + Float64(Float64(EAccept / KbT) + Float64(Float64(Vef / KbT) + Float64(Ev / KbT)))) - Float64(mu / KbT)))); else tmp = Float64(Float64(NdChar / 2.0) + Float64(NaChar / 2.0)); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (Ec <= -1.3e-189) tmp = (NdChar / (2.0 + (EDonor * ((1.0 / KbT) - (((Ec / KbT) - ((Vef / KbT) + (mu / KbT))) / EDonor))))) + (NaChar / ((2.0 + ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) - (mu / KbT))); else tmp = (NdChar / 2.0) + (NaChar / 2.0); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[Ec, -1.3e-189], N[(N[(NdChar / N[(2.0 + N[(EDonor * N[(N[(1.0 / KbT), $MachinePrecision] - N[(N[(N[(Ec / KbT), $MachinePrecision] - N[(N[(Vef / KbT), $MachinePrecision] + N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / EDonor), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(N[(2.0 + N[(N[(EAccept / KbT), $MachinePrecision] + N[(N[(Vef / KbT), $MachinePrecision] + N[(Ev / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar / 2.0), $MachinePrecision] + N[(NaChar / 2.0), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;Ec \leq -1.3 \cdot 10^{-189}:\\
\;\;\;\;\frac{NdChar}{2 + EDonor \cdot \left(\frac{1}{KbT} - \frac{\frac{Ec}{KbT} - \left(\frac{Vef}{KbT} + \frac{mu}{KbT}\right)}{EDonor}\right)} + \frac{NaChar}{\left(2 + \left(\frac{EAccept}{KbT} + \left(\frac{Vef}{KbT} + \frac{Ev}{KbT}\right)\right)\right) - \frac{mu}{KbT}}\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{2} + \frac{NaChar}{2}\\
\end{array}
\end{array}
if Ec < -1.2999999999999999e-189Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 60.0%
associate--l+60.0%
associate--l+60.0%
associate--l+60.0%
Simplified60.0%
Taylor expanded in EDonor around -inf 65.5%
Taylor expanded in KbT around inf 37.7%
if -1.2999999999999999e-189 < Ec Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 53.3%
Taylor expanded in KbT around inf 25.9%
Final simplification30.8%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (<= Ec -5.5e-188)
(+
(/
NaChar
(- (+ 2.0 (+ (/ EAccept KbT) (+ (/ Vef KbT) (/ Ev KbT)))) (/ mu KbT)))
(/
NdChar
(+ 2.0 (+ (/ EDonor KbT) (+ (/ Vef KbT) (- (/ mu KbT) (/ Ec KbT)))))))
(+ (/ NdChar 2.0) (/ NaChar 2.0))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (Ec <= -5.5e-188) {
tmp = (NaChar / ((2.0 + ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) - (mu / KbT))) + (NdChar / (2.0 + ((EDonor / KbT) + ((Vef / KbT) + ((mu / KbT) - (Ec / KbT))))));
} else {
tmp = (NdChar / 2.0) + (NaChar / 2.0);
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if (ec <= (-5.5d-188)) then
tmp = (nachar / ((2.0d0 + ((eaccept / kbt) + ((vef / kbt) + (ev / kbt)))) - (mu / kbt))) + (ndchar / (2.0d0 + ((edonor / kbt) + ((vef / kbt) + ((mu / kbt) - (ec / kbt))))))
else
tmp = (ndchar / 2.0d0) + (nachar / 2.0d0)
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (Ec <= -5.5e-188) {
tmp = (NaChar / ((2.0 + ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) - (mu / KbT))) + (NdChar / (2.0 + ((EDonor / KbT) + ((Vef / KbT) + ((mu / KbT) - (Ec / KbT))))));
} else {
tmp = (NdChar / 2.0) + (NaChar / 2.0);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if Ec <= -5.5e-188: tmp = (NaChar / ((2.0 + ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) - (mu / KbT))) + (NdChar / (2.0 + ((EDonor / KbT) + ((Vef / KbT) + ((mu / KbT) - (Ec / KbT)))))) else: tmp = (NdChar / 2.0) + (NaChar / 2.0) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (Ec <= -5.5e-188) tmp = Float64(Float64(NaChar / Float64(Float64(2.0 + Float64(Float64(EAccept / KbT) + Float64(Float64(Vef / KbT) + Float64(Ev / KbT)))) - Float64(mu / KbT))) + Float64(NdChar / Float64(2.0 + Float64(Float64(EDonor / KbT) + Float64(Float64(Vef / KbT) + Float64(Float64(mu / KbT) - Float64(Ec / KbT))))))); else tmp = Float64(Float64(NdChar / 2.0) + Float64(NaChar / 2.0)); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (Ec <= -5.5e-188) tmp = (NaChar / ((2.0 + ((EAccept / KbT) + ((Vef / KbT) + (Ev / KbT)))) - (mu / KbT))) + (NdChar / (2.0 + ((EDonor / KbT) + ((Vef / KbT) + ((mu / KbT) - (Ec / KbT)))))); else tmp = (NdChar / 2.0) + (NaChar / 2.0); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[Ec, -5.5e-188], N[(N[(NaChar / N[(N[(2.0 + N[(N[(EAccept / KbT), $MachinePrecision] + N[(N[(Vef / KbT), $MachinePrecision] + N[(Ev / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(2.0 + N[(N[(EDonor / KbT), $MachinePrecision] + N[(N[(Vef / KbT), $MachinePrecision] + N[(N[(mu / KbT), $MachinePrecision] - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar / 2.0), $MachinePrecision] + N[(NaChar / 2.0), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;Ec \leq -5.5 \cdot 10^{-188}:\\
\;\;\;\;\frac{NaChar}{\left(2 + \left(\frac{EAccept}{KbT} + \left(\frac{Vef}{KbT} + \frac{Ev}{KbT}\right)\right)\right) - \frac{mu}{KbT}} + \frac{NdChar}{2 + \left(\frac{EDonor}{KbT} + \left(\frac{Vef}{KbT} + \left(\frac{mu}{KbT} - \frac{Ec}{KbT}\right)\right)\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{2} + \frac{NaChar}{2}\\
\end{array}
\end{array}
if Ec < -5.5000000000000002e-188Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 60.0%
associate--l+60.0%
associate--l+60.0%
associate--l+60.0%
Simplified60.0%
Taylor expanded in KbT around inf 36.8%
if -5.5000000000000002e-188 < Ec Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 53.3%
Taylor expanded in KbT around inf 25.9%
Final simplification30.4%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (<= Ec -5e-176)
(-
(/ NaChar (+ (/ EAccept KbT) 2.0))
(/
NdChar
(- (/ Ec KbT) (+ 2.0 (+ (/ EDonor KbT) (+ (/ Vef KbT) (/ mu KbT)))))))
(+ (/ NdChar 2.0) (/ NaChar 2.0))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (Ec <= -5e-176) {
tmp = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / ((Ec / KbT) - (2.0 + ((EDonor / KbT) + ((Vef / KbT) + (mu / KbT))))));
} else {
tmp = (NdChar / 2.0) + (NaChar / 2.0);
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if (ec <= (-5d-176)) then
tmp = (nachar / ((eaccept / kbt) + 2.0d0)) - (ndchar / ((ec / kbt) - (2.0d0 + ((edonor / kbt) + ((vef / kbt) + (mu / kbt))))))
else
tmp = (ndchar / 2.0d0) + (nachar / 2.0d0)
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (Ec <= -5e-176) {
tmp = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / ((Ec / KbT) - (2.0 + ((EDonor / KbT) + ((Vef / KbT) + (mu / KbT))))));
} else {
tmp = (NdChar / 2.0) + (NaChar / 2.0);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if Ec <= -5e-176: tmp = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / ((Ec / KbT) - (2.0 + ((EDonor / KbT) + ((Vef / KbT) + (mu / KbT)))))) else: tmp = (NdChar / 2.0) + (NaChar / 2.0) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (Ec <= -5e-176) tmp = Float64(Float64(NaChar / Float64(Float64(EAccept / KbT) + 2.0)) - Float64(NdChar / Float64(Float64(Ec / KbT) - Float64(2.0 + Float64(Float64(EDonor / KbT) + Float64(Float64(Vef / KbT) + Float64(mu / KbT))))))); else tmp = Float64(Float64(NdChar / 2.0) + Float64(NaChar / 2.0)); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (Ec <= -5e-176) tmp = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / ((Ec / KbT) - (2.0 + ((EDonor / KbT) + ((Vef / KbT) + (mu / KbT)))))); else tmp = (NdChar / 2.0) + (NaChar / 2.0); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[Ec, -5e-176], N[(N[(NaChar / N[(N[(EAccept / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision] - N[(NdChar / N[(N[(Ec / KbT), $MachinePrecision] - N[(2.0 + N[(N[(EDonor / KbT), $MachinePrecision] + N[(N[(Vef / KbT), $MachinePrecision] + N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar / 2.0), $MachinePrecision] + N[(NaChar / 2.0), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;Ec \leq -5 \cdot 10^{-176}:\\
\;\;\;\;\frac{NaChar}{\frac{EAccept}{KbT} + 2} - \frac{NdChar}{\frac{Ec}{KbT} - \left(2 + \left(\frac{EDonor}{KbT} + \left(\frac{Vef}{KbT} + \frac{mu}{KbT}\right)\right)\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{2} + \frac{NaChar}{2}\\
\end{array}
\end{array}
if Ec < -5e-176Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 71.0%
Taylor expanded in EAccept around 0 51.5%
Taylor expanded in KbT around inf 34.1%
if -5e-176 < Ec Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 53.7%
Taylor expanded in KbT around inf 26.5%
Final simplification29.5%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (+ (/ NdChar 2.0) (/ NaChar 2.0)))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NdChar / 2.0) + (NaChar / 2.0);
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
code = (ndchar / 2.0d0) + (nachar / 2.0d0)
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NdChar / 2.0) + (NaChar / 2.0);
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return (NdChar / 2.0) + (NaChar / 2.0)
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(Float64(NdChar / 2.0) + Float64(NaChar / 2.0)) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = (NdChar / 2.0) + (NaChar / 2.0); end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(N[(NdChar / 2.0), $MachinePrecision] + N[(NaChar / 2.0), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{NdChar}{2} + \frac{NaChar}{2}
\end{array}
Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 51.6%
Taylor expanded in KbT around inf 28.0%
herbie shell --seed 2024103
(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))))))