
(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 41 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 (+ 1.0 (exp (/ (+ Vef (+ EAccept (- Ev mu))) KbT)))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar * (1.0 / (1.0 + exp(((Vef + (EAccept + (Ev - mu))) / KbT)))));
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
code = (ndchar / (1.0d0 + exp(((edonor + (mu + (vef - ec))) / kbt)))) + (nachar * (1.0d0 / (1.0d0 + exp(((vef + (eaccept + (ev - mu))) / kbt)))))
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NdChar / (1.0 + Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar * (1.0 / (1.0 + Math.exp(((Vef + (EAccept + (Ev - mu))) / KbT)))));
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return (NdChar / (1.0 + math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar * (1.0 / (1.0 + math.exp(((Vef + (EAccept + (Ev - mu))) / KbT)))))
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) + Float64(NaChar * Float64(1.0 / Float64(1.0 + exp(Float64(Float64(Vef + Float64(EAccept + Float64(Ev - mu))) / KbT)))))) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar * (1.0 / (1.0 + exp(((Vef + (EAccept + (Ev - mu))) / KbT))))); end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar * N[(1.0 / N[(1.0 + N[Exp[N[(N[(Vef + N[(EAccept + N[(Ev - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{NdChar}{1 + e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}} + NaChar \cdot \frac{1}{1 + e^{\frac{Vef + \left(EAccept + \left(Ev - mu\right)\right)}{KbT}}}
\end{array}
Initial program 100.0%
Simplified100.0%
div-inv100.0%
+-commutative100.0%
associate-+l-100.0%
Applied egg-rr100.0%
Final simplification100.0%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (exp (/ (- (+ mu Vef) Ec) KbT)))
(t_1 (/ NdChar (+ 1.0 t_0)))
(t_2 (+ (/ NaChar (+ 1.0 (exp (/ Vef KbT)))) t_1))
(t_3 (+ (/ NaChar (+ 1.0 (exp (/ EAccept KbT)))) t_1))
(t_4 (/ NaChar (+ 1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT))))))
(if (<= Vef -1.95e+143)
t_2
(if (<= Vef -1.9e+109)
t_3
(if (<= Vef -36.0)
t_2
(if (<= Vef -5.2e-279)
t_3
(if (<= Vef 2.15e-190)
(+
t_4
(/
NdChar
(*
mu
(+
(/ 1.0 KbT)
(/
(- (+ 2.0 (+ (/ Vef KbT) (/ EDonor KbT))) (/ Ec KbT))
mu)))))
(if (<= Vef 1.9e-99)
t_3
(if (<= Vef 6e+87)
(-
(/ NaChar (+ 1.0 (exp (/ Ev KbT))))
(/ NdChar (- -1.0 t_0)))
(if (<= Vef 2e+101)
(+
t_4
(/
NdChar
(*
EDonor
(+
(/ 1.0 KbT)
(/
(- (+ 2.0 (+ (/ Vef KbT) (/ mu KbT))) (/ Ec KbT))
EDonor)))))
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 = exp((((mu + Vef) - Ec) / KbT));
double t_1 = NdChar / (1.0 + t_0);
double t_2 = (NaChar / (1.0 + exp((Vef / KbT)))) + t_1;
double t_3 = (NaChar / (1.0 + exp((EAccept / KbT)))) + t_1;
double t_4 = NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)));
double tmp;
if (Vef <= -1.95e+143) {
tmp = t_2;
} else if (Vef <= -1.9e+109) {
tmp = t_3;
} else if (Vef <= -36.0) {
tmp = t_2;
} else if (Vef <= -5.2e-279) {
tmp = t_3;
} else if (Vef <= 2.15e-190) {
tmp = t_4 + (NdChar / (mu * ((1.0 / KbT) + (((2.0 + ((Vef / KbT) + (EDonor / KbT))) - (Ec / KbT)) / mu))));
} else if (Vef <= 1.9e-99) {
tmp = t_3;
} else if (Vef <= 6e+87) {
tmp = (NaChar / (1.0 + exp((Ev / KbT)))) - (NdChar / (-1.0 - t_0));
} else if (Vef <= 2e+101) {
tmp = t_4 + (NdChar / (EDonor * ((1.0 / KbT) + (((2.0 + ((Vef / KbT) + (mu / KbT))) - (Ec / KbT)) / EDonor))));
} else {
tmp = t_2;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: t_2
real(8) :: t_3
real(8) :: t_4
real(8) :: tmp
t_0 = exp((((mu + vef) - ec) / kbt))
t_1 = ndchar / (1.0d0 + t_0)
t_2 = (nachar / (1.0d0 + exp((vef / kbt)))) + t_1
t_3 = (nachar / (1.0d0 + exp((eaccept / kbt)))) + t_1
t_4 = nachar / (1.0d0 + exp(((vef - ((mu - eaccept) - ev)) / kbt)))
if (vef <= (-1.95d+143)) then
tmp = t_2
else if (vef <= (-1.9d+109)) then
tmp = t_3
else if (vef <= (-36.0d0)) then
tmp = t_2
else if (vef <= (-5.2d-279)) then
tmp = t_3
else if (vef <= 2.15d-190) then
tmp = t_4 + (ndchar / (mu * ((1.0d0 / kbt) + (((2.0d0 + ((vef / kbt) + (edonor / kbt))) - (ec / kbt)) / mu))))
else if (vef <= 1.9d-99) then
tmp = t_3
else if (vef <= 6d+87) then
tmp = (nachar / (1.0d0 + exp((ev / kbt)))) - (ndchar / ((-1.0d0) - t_0))
else if (vef <= 2d+101) then
tmp = t_4 + (ndchar / (edonor * ((1.0d0 / kbt) + (((2.0d0 + ((vef / kbt) + (mu / kbt))) - (ec / kbt)) / edonor))))
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 = Math.exp((((mu + Vef) - Ec) / KbT));
double t_1 = NdChar / (1.0 + t_0);
double t_2 = (NaChar / (1.0 + Math.exp((Vef / KbT)))) + t_1;
double t_3 = (NaChar / (1.0 + Math.exp((EAccept / KbT)))) + t_1;
double t_4 = NaChar / (1.0 + Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)));
double tmp;
if (Vef <= -1.95e+143) {
tmp = t_2;
} else if (Vef <= -1.9e+109) {
tmp = t_3;
} else if (Vef <= -36.0) {
tmp = t_2;
} else if (Vef <= -5.2e-279) {
tmp = t_3;
} else if (Vef <= 2.15e-190) {
tmp = t_4 + (NdChar / (mu * ((1.0 / KbT) + (((2.0 + ((Vef / KbT) + (EDonor / KbT))) - (Ec / KbT)) / mu))));
} else if (Vef <= 1.9e-99) {
tmp = t_3;
} else if (Vef <= 6e+87) {
tmp = (NaChar / (1.0 + Math.exp((Ev / KbT)))) - (NdChar / (-1.0 - t_0));
} else if (Vef <= 2e+101) {
tmp = t_4 + (NdChar / (EDonor * ((1.0 / KbT) + (((2.0 + ((Vef / KbT) + (mu / KbT))) - (Ec / KbT)) / EDonor))));
} else {
tmp = t_2;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = math.exp((((mu + Vef) - Ec) / KbT)) t_1 = NdChar / (1.0 + t_0) t_2 = (NaChar / (1.0 + math.exp((Vef / KbT)))) + t_1 t_3 = (NaChar / (1.0 + math.exp((EAccept / KbT)))) + t_1 t_4 = NaChar / (1.0 + math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT))) tmp = 0 if Vef <= -1.95e+143: tmp = t_2 elif Vef <= -1.9e+109: tmp = t_3 elif Vef <= -36.0: tmp = t_2 elif Vef <= -5.2e-279: tmp = t_3 elif Vef <= 2.15e-190: tmp = t_4 + (NdChar / (mu * ((1.0 / KbT) + (((2.0 + ((Vef / KbT) + (EDonor / KbT))) - (Ec / KbT)) / mu)))) elif Vef <= 1.9e-99: tmp = t_3 elif Vef <= 6e+87: tmp = (NaChar / (1.0 + math.exp((Ev / KbT)))) - (NdChar / (-1.0 - t_0)) elif Vef <= 2e+101: tmp = t_4 + (NdChar / (EDonor * ((1.0 / KbT) + (((2.0 + ((Vef / KbT) + (mu / KbT))) - (Ec / KbT)) / EDonor)))) else: tmp = t_2 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = exp(Float64(Float64(Float64(mu + Vef) - Ec) / KbT)) t_1 = Float64(NdChar / Float64(1.0 + t_0)) t_2 = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Vef / KbT)))) + t_1) t_3 = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT)))) + t_1) t_4 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT)))) tmp = 0.0 if (Vef <= -1.95e+143) tmp = t_2; elseif (Vef <= -1.9e+109) tmp = t_3; elseif (Vef <= -36.0) tmp = t_2; elseif (Vef <= -5.2e-279) tmp = t_3; elseif (Vef <= 2.15e-190) tmp = Float64(t_4 + Float64(NdChar / Float64(mu * Float64(Float64(1.0 / KbT) + Float64(Float64(Float64(2.0 + Float64(Float64(Vef / KbT) + Float64(EDonor / KbT))) - Float64(Ec / KbT)) / mu))))); elseif (Vef <= 1.9e-99) tmp = t_3; elseif (Vef <= 6e+87) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT)))) - Float64(NdChar / Float64(-1.0 - t_0))); elseif (Vef <= 2e+101) tmp = Float64(t_4 + Float64(NdChar / Float64(EDonor * Float64(Float64(1.0 / KbT) + Float64(Float64(Float64(2.0 + Float64(Float64(Vef / KbT) + Float64(mu / KbT))) - Float64(Ec / KbT)) / EDonor))))); else tmp = t_2; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = exp((((mu + Vef) - Ec) / KbT)); t_1 = NdChar / (1.0 + t_0); t_2 = (NaChar / (1.0 + exp((Vef / KbT)))) + t_1; t_3 = (NaChar / (1.0 + exp((EAccept / KbT)))) + t_1; t_4 = NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT))); tmp = 0.0; if (Vef <= -1.95e+143) tmp = t_2; elseif (Vef <= -1.9e+109) tmp = t_3; elseif (Vef <= -36.0) tmp = t_2; elseif (Vef <= -5.2e-279) tmp = t_3; elseif (Vef <= 2.15e-190) tmp = t_4 + (NdChar / (mu * ((1.0 / KbT) + (((2.0 + ((Vef / KbT) + (EDonor / KbT))) - (Ec / KbT)) / mu)))); elseif (Vef <= 1.9e-99) tmp = t_3; elseif (Vef <= 6e+87) tmp = (NaChar / (1.0 + exp((Ev / KbT)))) - (NdChar / (-1.0 - t_0)); elseif (Vef <= 2e+101) tmp = t_4 + (NdChar / (EDonor * ((1.0 / KbT) + (((2.0 + ((Vef / KbT) + (mu / KbT))) - (Ec / KbT)) / EDonor)))); else tmp = t_2; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[Exp[N[(N[(N[(mu + Vef), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[(NdChar / N[(1.0 + t$95$0), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(N[(NaChar / N[(1.0 + N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + t$95$1), $MachinePrecision]}, Block[{t$95$3 = N[(N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + t$95$1), $MachinePrecision]}, Block[{t$95$4 = N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[Vef, -1.95e+143], t$95$2, If[LessEqual[Vef, -1.9e+109], t$95$3, If[LessEqual[Vef, -36.0], t$95$2, If[LessEqual[Vef, -5.2e-279], t$95$3, If[LessEqual[Vef, 2.15e-190], N[(t$95$4 + N[(NdChar / N[(mu * N[(N[(1.0 / KbT), $MachinePrecision] + N[(N[(N[(2.0 + N[(N[(Vef / KbT), $MachinePrecision] + N[(EDonor / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision] / mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[Vef, 1.9e-99], t$95$3, If[LessEqual[Vef, 6e+87], N[(N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(NdChar / N[(-1.0 - t$95$0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[Vef, 2e+101], N[(t$95$4 + N[(NdChar / N[(EDonor * N[(N[(1.0 / KbT), $MachinePrecision] + N[(N[(N[(2.0 + N[(N[(Vef / KbT), $MachinePrecision] + N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision] / EDonor), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$2]]]]]]]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := e^{\frac{\left(mu + Vef\right) - Ec}{KbT}}\\
t_1 := \frac{NdChar}{1 + t\_0}\\
t_2 := \frac{NaChar}{1 + e^{\frac{Vef}{KbT}}} + t\_1\\
t_3 := \frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}} + t\_1\\
t_4 := \frac{NaChar}{1 + e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}}\\
\mathbf{if}\;Vef \leq -1.95 \cdot 10^{+143}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;Vef \leq -1.9 \cdot 10^{+109}:\\
\;\;\;\;t\_3\\
\mathbf{elif}\;Vef \leq -36:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;Vef \leq -5.2 \cdot 10^{-279}:\\
\;\;\;\;t\_3\\
\mathbf{elif}\;Vef \leq 2.15 \cdot 10^{-190}:\\
\;\;\;\;t\_4 + \frac{NdChar}{mu \cdot \left(\frac{1}{KbT} + \frac{\left(2 + \left(\frac{Vef}{KbT} + \frac{EDonor}{KbT}\right)\right) - \frac{Ec}{KbT}}{mu}\right)}\\
\mathbf{elif}\;Vef \leq 1.9 \cdot 10^{-99}:\\
\;\;\;\;t\_3\\
\mathbf{elif}\;Vef \leq 6 \cdot 10^{+87}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Ev}{KbT}}} - \frac{NdChar}{-1 - t\_0}\\
\mathbf{elif}\;Vef \leq 2 \cdot 10^{+101}:\\
\;\;\;\;t\_4 + \frac{NdChar}{EDonor \cdot \left(\frac{1}{KbT} + \frac{\left(2 + \left(\frac{Vef}{KbT} + \frac{mu}{KbT}\right)\right) - \frac{Ec}{KbT}}{EDonor}\right)}\\
\mathbf{else}:\\
\;\;\;\;t\_2\\
\end{array}
\end{array}
if Vef < -1.9499999999999999e143 or -1.90000000000000019e109 < Vef < -36 or 2e101 < Vef Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 88.0%
Taylor expanded in EDonor around 0 85.8%
if -1.9499999999999999e143 < Vef < -1.90000000000000019e109 or -36 < Vef < -5.2000000000000004e-279 or 2.15e-190 < Vef < 1.8999999999999998e-99Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 79.3%
Taylor expanded in EDonor around 0 75.9%
if -5.2000000000000004e-279 < Vef < 2.15e-190Initial program 99.9%
Simplified99.9%
Taylor expanded in KbT around inf 68.3%
Taylor expanded in mu around -inf 82.0%
if 1.8999999999999998e-99 < Vef < 5.9999999999999998e87Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 84.6%
Taylor expanded in EDonor around 0 78.2%
if 5.9999999999999998e87 < Vef < 2e101Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 57.7%
Taylor expanded in EDonor around -inf 100.0%
Final simplification81.2%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0
(+
(/ NaChar (+ 1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT))))
(/ NdChar (+ 1.0 (exp (/ mu KbT))))))
(t_1 (/ NdChar (- -1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT)))))
(t_2 (- (/ NaChar (+ 1.0 (exp (/ Vef KbT)))) t_1))
(t_3 (- (/ NaChar (+ 1.0 (exp (/ Ev KbT)))) t_1)))
(if (<= Vef -1.05e+147)
t_2
(if (<= Vef -6.8e+108)
t_0
(if (<= Vef -1.7e-112)
t_3
(if (<= Vef 3e-222)
t_0
(if (<= Vef 3.3e-99)
(- (* NaChar (/ 1.0 (+ 1.0 (exp (/ EAccept KbT))))) t_1)
(if (<= Vef 3.2e+87) t_3 t_2))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / (1.0 + exp((mu / KbT))));
double t_1 = NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT)));
double t_2 = (NaChar / (1.0 + exp((Vef / KbT)))) - t_1;
double t_3 = (NaChar / (1.0 + exp((Ev / KbT)))) - t_1;
double tmp;
if (Vef <= -1.05e+147) {
tmp = t_2;
} else if (Vef <= -6.8e+108) {
tmp = t_0;
} else if (Vef <= -1.7e-112) {
tmp = t_3;
} else if (Vef <= 3e-222) {
tmp = t_0;
} else if (Vef <= 3.3e-99) {
tmp = (NaChar * (1.0 / (1.0 + exp((EAccept / KbT))))) - t_1;
} else if (Vef <= 3.2e+87) {
tmp = t_3;
} else {
tmp = t_2;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: t_2
real(8) :: t_3
real(8) :: tmp
t_0 = (nachar / (1.0d0 + exp(((vef - ((mu - eaccept) - ev)) / kbt)))) + (ndchar / (1.0d0 + exp((mu / kbt))))
t_1 = ndchar / ((-1.0d0) - exp(((edonor + (mu + (vef - ec))) / kbt)))
t_2 = (nachar / (1.0d0 + exp((vef / kbt)))) - t_1
t_3 = (nachar / (1.0d0 + exp((ev / kbt)))) - t_1
if (vef <= (-1.05d+147)) then
tmp = t_2
else if (vef <= (-6.8d+108)) then
tmp = t_0
else if (vef <= (-1.7d-112)) then
tmp = t_3
else if (vef <= 3d-222) then
tmp = t_0
else if (vef <= 3.3d-99) then
tmp = (nachar * (1.0d0 / (1.0d0 + exp((eaccept / kbt))))) - t_1
else if (vef <= 3.2d+87) then
tmp = t_3
else
tmp = t_2
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar / (1.0 + Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / (1.0 + Math.exp((mu / KbT))));
double t_1 = NdChar / (-1.0 - Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)));
double t_2 = (NaChar / (1.0 + Math.exp((Vef / KbT)))) - t_1;
double t_3 = (NaChar / (1.0 + Math.exp((Ev / KbT)))) - t_1;
double tmp;
if (Vef <= -1.05e+147) {
tmp = t_2;
} else if (Vef <= -6.8e+108) {
tmp = t_0;
} else if (Vef <= -1.7e-112) {
tmp = t_3;
} else if (Vef <= 3e-222) {
tmp = t_0;
} else if (Vef <= 3.3e-99) {
tmp = (NaChar * (1.0 / (1.0 + Math.exp((EAccept / KbT))))) - t_1;
} else if (Vef <= 3.2e+87) {
tmp = t_3;
} else {
tmp = t_2;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = (NaChar / (1.0 + math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / (1.0 + math.exp((mu / KbT)))) t_1 = NdChar / (-1.0 - math.exp(((EDonor + (mu + (Vef - Ec))) / KbT))) t_2 = (NaChar / (1.0 + math.exp((Vef / KbT)))) - t_1 t_3 = (NaChar / (1.0 + math.exp((Ev / KbT)))) - t_1 tmp = 0 if Vef <= -1.05e+147: tmp = t_2 elif Vef <= -6.8e+108: tmp = t_0 elif Vef <= -1.7e-112: tmp = t_3 elif Vef <= 3e-222: tmp = t_0 elif Vef <= 3.3e-99: tmp = (NaChar * (1.0 / (1.0 + math.exp((EAccept / KbT))))) - t_1 elif Vef <= 3.2e+87: tmp = t_3 else: tmp = t_2 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT)))) + Float64(NdChar / Float64(1.0 + exp(Float64(mu / KbT))))) t_1 = Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) t_2 = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Vef / KbT)))) - t_1) t_3 = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT)))) - t_1) tmp = 0.0 if (Vef <= -1.05e+147) tmp = t_2; elseif (Vef <= -6.8e+108) tmp = t_0; elseif (Vef <= -1.7e-112) tmp = t_3; elseif (Vef <= 3e-222) tmp = t_0; elseif (Vef <= 3.3e-99) tmp = Float64(Float64(NaChar * Float64(1.0 / Float64(1.0 + exp(Float64(EAccept / KbT))))) - t_1); elseif (Vef <= 3.2e+87) tmp = t_3; else tmp = t_2; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = (NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / (1.0 + exp((mu / KbT)))); t_1 = NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT))); t_2 = (NaChar / (1.0 + exp((Vef / KbT)))) - t_1; t_3 = (NaChar / (1.0 + exp((Ev / KbT)))) - t_1; tmp = 0.0; if (Vef <= -1.05e+147) tmp = t_2; elseif (Vef <= -6.8e+108) tmp = t_0; elseif (Vef <= -1.7e-112) tmp = t_3; elseif (Vef <= 3e-222) tmp = t_0; elseif (Vef <= 3.3e-99) tmp = (NaChar * (1.0 / (1.0 + exp((EAccept / KbT))))) - t_1; elseif (Vef <= 3.2e+87) tmp = t_3; else tmp = t_2; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(1.0 + N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, 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]}, Block[{t$95$2 = N[(N[(NaChar / N[(1.0 + N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - t$95$1), $MachinePrecision]}, Block[{t$95$3 = N[(N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - t$95$1), $MachinePrecision]}, If[LessEqual[Vef, -1.05e+147], t$95$2, If[LessEqual[Vef, -6.8e+108], t$95$0, If[LessEqual[Vef, -1.7e-112], t$95$3, If[LessEqual[Vef, 3e-222], t$95$0, If[LessEqual[Vef, 3.3e-99], N[(N[(NaChar * N[(1.0 / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - t$95$1), $MachinePrecision], If[LessEqual[Vef, 3.2e+87], t$95$3, t$95$2]]]]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}} + \frac{NdChar}{1 + e^{\frac{mu}{KbT}}}\\
t_1 := \frac{NdChar}{-1 - e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}}\\
t_2 := \frac{NaChar}{1 + e^{\frac{Vef}{KbT}}} - t\_1\\
t_3 := \frac{NaChar}{1 + e^{\frac{Ev}{KbT}}} - t\_1\\
\mathbf{if}\;Vef \leq -1.05 \cdot 10^{+147}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;Vef \leq -6.8 \cdot 10^{+108}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;Vef \leq -1.7 \cdot 10^{-112}:\\
\;\;\;\;t\_3\\
\mathbf{elif}\;Vef \leq 3 \cdot 10^{-222}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;Vef \leq 3.3 \cdot 10^{-99}:\\
\;\;\;\;NaChar \cdot \frac{1}{1 + e^{\frac{EAccept}{KbT}}} - t\_1\\
\mathbf{elif}\;Vef \leq 3.2 \cdot 10^{+87}:\\
\;\;\;\;t\_3\\
\mathbf{else}:\\
\;\;\;\;t\_2\\
\end{array}
\end{array}
if Vef < -1.05000000000000003e147 or 3.2e87 < Vef Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 85.6%
if -1.05000000000000003e147 < Vef < -6.79999999999999992e108 or -1.6999999999999999e-112 < Vef < 3.0000000000000003e-222Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 91.6%
if -6.79999999999999992e108 < Vef < -1.6999999999999999e-112 or 3.29999999999999986e-99 < Vef < 3.2e87Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 80.2%
if 3.0000000000000003e-222 < Vef < 3.29999999999999986e-99Initial program 99.9%
Simplified99.9%
div-inv100.0%
+-commutative100.0%
associate-+l-100.0%
Applied egg-rr100.0%
Taylor expanded in EAccept around inf 75.8%
Final simplification84.4%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0
(+
(/ NaChar (+ 1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT))))
(/ NdChar (+ 1.0 (exp (/ mu KbT))))))
(t_1 (/ NdChar (- -1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT)))))
(t_2 (- (/ NaChar (+ 1.0 (exp (/ Vef KbT)))) t_1))
(t_3 (- (/ NaChar (+ 1.0 (exp (/ Ev KbT)))) t_1)))
(if (<= Vef -2.4e+142)
t_2
(if (<= Vef -1.4e+109)
t_0
(if (<= Vef -9e-113)
t_3
(if (<= Vef 1.5e-222)
t_0
(if (<= Vef 1.16e-101)
(- (/ NaChar (+ 1.0 (exp (/ EAccept KbT)))) t_1)
(if (<= Vef 8.6e+85) t_3 t_2))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / (1.0 + exp((mu / KbT))));
double t_1 = NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT)));
double t_2 = (NaChar / (1.0 + exp((Vef / KbT)))) - t_1;
double t_3 = (NaChar / (1.0 + exp((Ev / KbT)))) - t_1;
double tmp;
if (Vef <= -2.4e+142) {
tmp = t_2;
} else if (Vef <= -1.4e+109) {
tmp = t_0;
} else if (Vef <= -9e-113) {
tmp = t_3;
} else if (Vef <= 1.5e-222) {
tmp = t_0;
} else if (Vef <= 1.16e-101) {
tmp = (NaChar / (1.0 + exp((EAccept / KbT)))) - t_1;
} else if (Vef <= 8.6e+85) {
tmp = t_3;
} else {
tmp = t_2;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: t_2
real(8) :: t_3
real(8) :: tmp
t_0 = (nachar / (1.0d0 + exp(((vef - ((mu - eaccept) - ev)) / kbt)))) + (ndchar / (1.0d0 + exp((mu / kbt))))
t_1 = ndchar / ((-1.0d0) - exp(((edonor + (mu + (vef - ec))) / kbt)))
t_2 = (nachar / (1.0d0 + exp((vef / kbt)))) - t_1
t_3 = (nachar / (1.0d0 + exp((ev / kbt)))) - t_1
if (vef <= (-2.4d+142)) then
tmp = t_2
else if (vef <= (-1.4d+109)) then
tmp = t_0
else if (vef <= (-9d-113)) then
tmp = t_3
else if (vef <= 1.5d-222) then
tmp = t_0
else if (vef <= 1.16d-101) then
tmp = (nachar / (1.0d0 + exp((eaccept / kbt)))) - t_1
else if (vef <= 8.6d+85) then
tmp = t_3
else
tmp = t_2
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar / (1.0 + Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / (1.0 + Math.exp((mu / KbT))));
double t_1 = NdChar / (-1.0 - Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)));
double t_2 = (NaChar / (1.0 + Math.exp((Vef / KbT)))) - t_1;
double t_3 = (NaChar / (1.0 + Math.exp((Ev / KbT)))) - t_1;
double tmp;
if (Vef <= -2.4e+142) {
tmp = t_2;
} else if (Vef <= -1.4e+109) {
tmp = t_0;
} else if (Vef <= -9e-113) {
tmp = t_3;
} else if (Vef <= 1.5e-222) {
tmp = t_0;
} else if (Vef <= 1.16e-101) {
tmp = (NaChar / (1.0 + Math.exp((EAccept / KbT)))) - t_1;
} else if (Vef <= 8.6e+85) {
tmp = t_3;
} else {
tmp = t_2;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = (NaChar / (1.0 + math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / (1.0 + math.exp((mu / KbT)))) t_1 = NdChar / (-1.0 - math.exp(((EDonor + (mu + (Vef - Ec))) / KbT))) t_2 = (NaChar / (1.0 + math.exp((Vef / KbT)))) - t_1 t_3 = (NaChar / (1.0 + math.exp((Ev / KbT)))) - t_1 tmp = 0 if Vef <= -2.4e+142: tmp = t_2 elif Vef <= -1.4e+109: tmp = t_0 elif Vef <= -9e-113: tmp = t_3 elif Vef <= 1.5e-222: tmp = t_0 elif Vef <= 1.16e-101: tmp = (NaChar / (1.0 + math.exp((EAccept / KbT)))) - t_1 elif Vef <= 8.6e+85: tmp = t_3 else: tmp = t_2 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT)))) + Float64(NdChar / Float64(1.0 + exp(Float64(mu / KbT))))) t_1 = Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) t_2 = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Vef / KbT)))) - t_1) t_3 = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT)))) - t_1) tmp = 0.0 if (Vef <= -2.4e+142) tmp = t_2; elseif (Vef <= -1.4e+109) tmp = t_0; elseif (Vef <= -9e-113) tmp = t_3; elseif (Vef <= 1.5e-222) tmp = t_0; elseif (Vef <= 1.16e-101) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT)))) - t_1); elseif (Vef <= 8.6e+85) tmp = t_3; else tmp = t_2; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = (NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / (1.0 + exp((mu / KbT)))); t_1 = NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT))); t_2 = (NaChar / (1.0 + exp((Vef / KbT)))) - t_1; t_3 = (NaChar / (1.0 + exp((Ev / KbT)))) - t_1; tmp = 0.0; if (Vef <= -2.4e+142) tmp = t_2; elseif (Vef <= -1.4e+109) tmp = t_0; elseif (Vef <= -9e-113) tmp = t_3; elseif (Vef <= 1.5e-222) tmp = t_0; elseif (Vef <= 1.16e-101) tmp = (NaChar / (1.0 + exp((EAccept / KbT)))) - t_1; elseif (Vef <= 8.6e+85) tmp = t_3; else tmp = t_2; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(1.0 + N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, 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]}, Block[{t$95$2 = N[(N[(NaChar / N[(1.0 + N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - t$95$1), $MachinePrecision]}, Block[{t$95$3 = N[(N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - t$95$1), $MachinePrecision]}, If[LessEqual[Vef, -2.4e+142], t$95$2, If[LessEqual[Vef, -1.4e+109], t$95$0, If[LessEqual[Vef, -9e-113], t$95$3, If[LessEqual[Vef, 1.5e-222], t$95$0, If[LessEqual[Vef, 1.16e-101], N[(N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - t$95$1), $MachinePrecision], If[LessEqual[Vef, 8.6e+85], t$95$3, t$95$2]]]]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}} + \frac{NdChar}{1 + e^{\frac{mu}{KbT}}}\\
t_1 := \frac{NdChar}{-1 - e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}}\\
t_2 := \frac{NaChar}{1 + e^{\frac{Vef}{KbT}}} - t\_1\\
t_3 := \frac{NaChar}{1 + e^{\frac{Ev}{KbT}}} - t\_1\\
\mathbf{if}\;Vef \leq -2.4 \cdot 10^{+142}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;Vef \leq -1.4 \cdot 10^{+109}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;Vef \leq -9 \cdot 10^{-113}:\\
\;\;\;\;t\_3\\
\mathbf{elif}\;Vef \leq 1.5 \cdot 10^{-222}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;Vef \leq 1.16 \cdot 10^{-101}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}} - t\_1\\
\mathbf{elif}\;Vef \leq 8.6 \cdot 10^{+85}:\\
\;\;\;\;t\_3\\
\mathbf{else}:\\
\;\;\;\;t\_2\\
\end{array}
\end{array}
if Vef < -2.3999999999999999e142 or 8.5999999999999998e85 < Vef Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 85.6%
if -2.3999999999999999e142 < Vef < -1.4000000000000001e109 or -9.0000000000000002e-113 < Vef < 1.50000000000000015e-222Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 91.6%
if -1.4000000000000001e109 < Vef < -9.0000000000000002e-113 or 1.15999999999999995e-101 < Vef < 8.5999999999999998e85Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 80.2%
if 1.50000000000000015e-222 < Vef < 1.15999999999999995e-101Initial program 99.9%
Simplified99.9%
Taylor expanded in EAccept around inf 75.8%
Final simplification84.4%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0
(-
(/ NaChar (+ 1.0 (exp (/ EAccept KbT))))
(/ NdChar (- -1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT))))))
(t_1 (/ NaChar (+ 1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT)))))
(t_2 (+ t_1 (/ NdChar (+ 1.0 (exp (/ mu KbT)))))))
(if (<= mu -5e+149)
t_2
(if (<= mu -1.25e-179)
t_0
(if (<= mu -7.5e-253)
(+
t_1
(/
NdChar
(*
EDonor
(+
(/ 1.0 KbT)
(/ (- (+ 2.0 (+ (/ Vef KbT) (/ mu KbT))) (/ Ec KbT)) EDonor)))))
(if (<= mu 8.3e-259)
t_0
(if (<= mu 3.1e-195)
(+
t_1
(/
NdChar
(*
mu
(+
(/ 1.0 KbT)
(/
(- (+ 2.0 (+ (/ Vef KbT) (/ EDonor KbT))) (/ Ec KbT))
mu)))))
(if (<= mu 5.5e+50) t_0 t_2))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar / (1.0 + exp((EAccept / KbT)))) - (NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT))));
double t_1 = NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)));
double t_2 = t_1 + (NdChar / (1.0 + exp((mu / KbT))));
double tmp;
if (mu <= -5e+149) {
tmp = t_2;
} else if (mu <= -1.25e-179) {
tmp = t_0;
} else if (mu <= -7.5e-253) {
tmp = t_1 + (NdChar / (EDonor * ((1.0 / KbT) + (((2.0 + ((Vef / KbT) + (mu / KbT))) - (Ec / KbT)) / EDonor))));
} else if (mu <= 8.3e-259) {
tmp = t_0;
} else if (mu <= 3.1e-195) {
tmp = t_1 + (NdChar / (mu * ((1.0 / KbT) + (((2.0 + ((Vef / KbT) + (EDonor / KbT))) - (Ec / KbT)) / mu))));
} else if (mu <= 5.5e+50) {
tmp = t_0;
} else {
tmp = t_2;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: t_2
real(8) :: tmp
t_0 = (nachar / (1.0d0 + exp((eaccept / kbt)))) - (ndchar / ((-1.0d0) - exp(((edonor + (mu + (vef - ec))) / kbt))))
t_1 = nachar / (1.0d0 + exp(((vef - ((mu - eaccept) - ev)) / kbt)))
t_2 = t_1 + (ndchar / (1.0d0 + exp((mu / kbt))))
if (mu <= (-5d+149)) then
tmp = t_2
else if (mu <= (-1.25d-179)) then
tmp = t_0
else if (mu <= (-7.5d-253)) then
tmp = t_1 + (ndchar / (edonor * ((1.0d0 / kbt) + (((2.0d0 + ((vef / kbt) + (mu / kbt))) - (ec / kbt)) / edonor))))
else if (mu <= 8.3d-259) then
tmp = t_0
else if (mu <= 3.1d-195) then
tmp = t_1 + (ndchar / (mu * ((1.0d0 / kbt) + (((2.0d0 + ((vef / kbt) + (edonor / kbt))) - (ec / kbt)) / mu))))
else if (mu <= 5.5d+50) then
tmp = t_0
else
tmp = t_2
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar / (1.0 + Math.exp((EAccept / KbT)))) - (NdChar / (-1.0 - Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT))));
double t_1 = NaChar / (1.0 + Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)));
double t_2 = t_1 + (NdChar / (1.0 + Math.exp((mu / KbT))));
double tmp;
if (mu <= -5e+149) {
tmp = t_2;
} else if (mu <= -1.25e-179) {
tmp = t_0;
} else if (mu <= -7.5e-253) {
tmp = t_1 + (NdChar / (EDonor * ((1.0 / KbT) + (((2.0 + ((Vef / KbT) + (mu / KbT))) - (Ec / KbT)) / EDonor))));
} else if (mu <= 8.3e-259) {
tmp = t_0;
} else if (mu <= 3.1e-195) {
tmp = t_1 + (NdChar / (mu * ((1.0 / KbT) + (((2.0 + ((Vef / KbT) + (EDonor / KbT))) - (Ec / KbT)) / mu))));
} else if (mu <= 5.5e+50) {
tmp = t_0;
} else {
tmp = t_2;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = (NaChar / (1.0 + math.exp((EAccept / KbT)))) - (NdChar / (-1.0 - math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) t_1 = NaChar / (1.0 + math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT))) t_2 = t_1 + (NdChar / (1.0 + math.exp((mu / KbT)))) tmp = 0 if mu <= -5e+149: tmp = t_2 elif mu <= -1.25e-179: tmp = t_0 elif mu <= -7.5e-253: tmp = t_1 + (NdChar / (EDonor * ((1.0 / KbT) + (((2.0 + ((Vef / KbT) + (mu / KbT))) - (Ec / KbT)) / EDonor)))) elif mu <= 8.3e-259: tmp = t_0 elif mu <= 3.1e-195: tmp = t_1 + (NdChar / (mu * ((1.0 / KbT) + (((2.0 + ((Vef / KbT) + (EDonor / KbT))) - (Ec / KbT)) / mu)))) elif mu <= 5.5e+50: tmp = t_0 else: tmp = t_2 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT)))) - Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT))))) t_1 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT)))) t_2 = Float64(t_1 + Float64(NdChar / Float64(1.0 + exp(Float64(mu / KbT))))) tmp = 0.0 if (mu <= -5e+149) tmp = t_2; elseif (mu <= -1.25e-179) tmp = t_0; elseif (mu <= -7.5e-253) tmp = Float64(t_1 + Float64(NdChar / Float64(EDonor * Float64(Float64(1.0 / KbT) + Float64(Float64(Float64(2.0 + Float64(Float64(Vef / KbT) + Float64(mu / KbT))) - Float64(Ec / KbT)) / EDonor))))); elseif (mu <= 8.3e-259) tmp = t_0; elseif (mu <= 3.1e-195) tmp = Float64(t_1 + Float64(NdChar / Float64(mu * Float64(Float64(1.0 / KbT) + Float64(Float64(Float64(2.0 + Float64(Float64(Vef / KbT) + Float64(EDonor / KbT))) - Float64(Ec / KbT)) / mu))))); elseif (mu <= 5.5e+50) tmp = t_0; else tmp = t_2; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = (NaChar / (1.0 + exp((EAccept / KbT)))) - (NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT)))); t_1 = NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT))); t_2 = t_1 + (NdChar / (1.0 + exp((mu / KbT)))); tmp = 0.0; if (mu <= -5e+149) tmp = t_2; elseif (mu <= -1.25e-179) tmp = t_0; elseif (mu <= -7.5e-253) tmp = t_1 + (NdChar / (EDonor * ((1.0 / KbT) + (((2.0 + ((Vef / KbT) + (mu / KbT))) - (Ec / KbT)) / EDonor)))); elseif (mu <= 8.3e-259) tmp = t_0; elseif (mu <= 3.1e-195) tmp = t_1 + (NdChar / (mu * ((1.0 / KbT) + (((2.0 + ((Vef / KbT) + (EDonor / KbT))) - (Ec / KbT)) / mu)))); elseif (mu <= 5.5e+50) tmp = t_0; else tmp = t_2; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(NdChar / N[(-1.0 - N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(t$95$1 + N[(NdChar / N[(1.0 + N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[mu, -5e+149], t$95$2, If[LessEqual[mu, -1.25e-179], t$95$0, If[LessEqual[mu, -7.5e-253], N[(t$95$1 + N[(NdChar / N[(EDonor * N[(N[(1.0 / KbT), $MachinePrecision] + N[(N[(N[(2.0 + N[(N[(Vef / KbT), $MachinePrecision] + N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision] / EDonor), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[mu, 8.3e-259], t$95$0, If[LessEqual[mu, 3.1e-195], N[(t$95$1 + N[(NdChar / N[(mu * N[(N[(1.0 / KbT), $MachinePrecision] + N[(N[(N[(2.0 + N[(N[(Vef / KbT), $MachinePrecision] + N[(EDonor / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision] / mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[mu, 5.5e+50], t$95$0, t$95$2]]]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}} - \frac{NdChar}{-1 - e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}}\\
t_1 := \frac{NaChar}{1 + e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}}\\
t_2 := t\_1 + \frac{NdChar}{1 + e^{\frac{mu}{KbT}}}\\
\mathbf{if}\;mu \leq -5 \cdot 10^{+149}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;mu \leq -1.25 \cdot 10^{-179}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;mu \leq -7.5 \cdot 10^{-253}:\\
\;\;\;\;t\_1 + \frac{NdChar}{EDonor \cdot \left(\frac{1}{KbT} + \frac{\left(2 + \left(\frac{Vef}{KbT} + \frac{mu}{KbT}\right)\right) - \frac{Ec}{KbT}}{EDonor}\right)}\\
\mathbf{elif}\;mu \leq 8.3 \cdot 10^{-259}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;mu \leq 3.1 \cdot 10^{-195}:\\
\;\;\;\;t\_1 + \frac{NdChar}{mu \cdot \left(\frac{1}{KbT} + \frac{\left(2 + \left(\frac{Vef}{KbT} + \frac{EDonor}{KbT}\right)\right) - \frac{Ec}{KbT}}{mu}\right)}\\
\mathbf{elif}\;mu \leq 5.5 \cdot 10^{+50}:\\
\;\;\;\;t\_0\\
\mathbf{else}:\\
\;\;\;\;t\_2\\
\end{array}
\end{array}
if mu < -4.9999999999999999e149 or 5.4999999999999998e50 < mu Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 90.5%
if -4.9999999999999999e149 < mu < -1.2499999999999999e-179 or -7.49999999999999987e-253 < mu < 8.3000000000000003e-259 or 3.10000000000000002e-195 < mu < 5.4999999999999998e50Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 78.3%
if -1.2499999999999999e-179 < mu < -7.49999999999999987e-253Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 70.7%
Taylor expanded in EDonor around -inf 85.8%
if 8.3000000000000003e-259 < mu < 3.10000000000000002e-195Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 71.6%
Taylor expanded in mu around -inf 94.3%
Final simplification83.4%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NaChar (+ 1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT)))))
(t_1 (exp (/ (- (+ mu Vef) Ec) KbT))))
(if (<= EAccept 3.5e-169)
(- (/ NaChar (+ 1.0 (exp (/ Ev KbT)))) (/ NdChar (- -1.0 t_1)))
(if (<= EAccept 5.9e-61)
(+
t_0
(/
NdChar
(*
Ec
(+
(/ (+ 2.0 (+ (+ (/ Vef KbT) (/ mu KbT)) (/ EDonor KbT))) Ec)
(/ -1.0 KbT)))))
(if (<= EAccept 3.2e-18)
(+
(/ NaChar (+ 1.0 (exp (/ Vef KbT))))
(/ NdChar (+ 1.0 (exp (/ Ec (- KbT))))))
(if (<= EAccept 6.5e+67)
(+
t_0
(/
NdChar
(*
mu
(+
(/ 1.0 KbT)
(/ (- (+ 2.0 (+ (/ Vef KbT) (/ EDonor KbT))) (/ Ec KbT)) mu)))))
(+
(/ NaChar (+ 1.0 (exp (/ EAccept KbT))))
(/ NdChar (+ 1.0 t_1)))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)));
double t_1 = exp((((mu + Vef) - Ec) / KbT));
double tmp;
if (EAccept <= 3.5e-169) {
tmp = (NaChar / (1.0 + exp((Ev / KbT)))) - (NdChar / (-1.0 - t_1));
} else if (EAccept <= 5.9e-61) {
tmp = t_0 + (NdChar / (Ec * (((2.0 + (((Vef / KbT) + (mu / KbT)) + (EDonor / KbT))) / Ec) + (-1.0 / KbT))));
} else if (EAccept <= 3.2e-18) {
tmp = (NaChar / (1.0 + exp((Vef / KbT)))) + (NdChar / (1.0 + exp((Ec / -KbT))));
} else if (EAccept <= 6.5e+67) {
tmp = t_0 + (NdChar / (mu * ((1.0 / KbT) + (((2.0 + ((Vef / KbT) + (EDonor / KbT))) - (Ec / KbT)) / mu))));
} else {
tmp = (NaChar / (1.0 + exp((EAccept / KbT)))) + (NdChar / (1.0 + t_1));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = nachar / (1.0d0 + exp(((vef - ((mu - eaccept) - ev)) / kbt)))
t_1 = exp((((mu + vef) - ec) / kbt))
if (eaccept <= 3.5d-169) then
tmp = (nachar / (1.0d0 + exp((ev / kbt)))) - (ndchar / ((-1.0d0) - t_1))
else if (eaccept <= 5.9d-61) then
tmp = t_0 + (ndchar / (ec * (((2.0d0 + (((vef / kbt) + (mu / kbt)) + (edonor / kbt))) / ec) + ((-1.0d0) / kbt))))
else if (eaccept <= 3.2d-18) then
tmp = (nachar / (1.0d0 + exp((vef / kbt)))) + (ndchar / (1.0d0 + exp((ec / -kbt))))
else if (eaccept <= 6.5d+67) then
tmp = t_0 + (ndchar / (mu * ((1.0d0 / kbt) + (((2.0d0 + ((vef / kbt) + (edonor / kbt))) - (ec / kbt)) / mu))))
else
tmp = (nachar / (1.0d0 + exp((eaccept / kbt)))) + (ndchar / (1.0d0 + t_1))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NaChar / (1.0 + Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)));
double t_1 = Math.exp((((mu + Vef) - Ec) / KbT));
double tmp;
if (EAccept <= 3.5e-169) {
tmp = (NaChar / (1.0 + Math.exp((Ev / KbT)))) - (NdChar / (-1.0 - t_1));
} else if (EAccept <= 5.9e-61) {
tmp = t_0 + (NdChar / (Ec * (((2.0 + (((Vef / KbT) + (mu / KbT)) + (EDonor / KbT))) / Ec) + (-1.0 / KbT))));
} else if (EAccept <= 3.2e-18) {
tmp = (NaChar / (1.0 + Math.exp((Vef / KbT)))) + (NdChar / (1.0 + Math.exp((Ec / -KbT))));
} else if (EAccept <= 6.5e+67) {
tmp = t_0 + (NdChar / (mu * ((1.0 / KbT) + (((2.0 + ((Vef / KbT) + (EDonor / KbT))) - (Ec / KbT)) / mu))));
} else {
tmp = (NaChar / (1.0 + Math.exp((EAccept / KbT)))) + (NdChar / (1.0 + t_1));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NaChar / (1.0 + math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT))) t_1 = math.exp((((mu + Vef) - Ec) / KbT)) tmp = 0 if EAccept <= 3.5e-169: tmp = (NaChar / (1.0 + math.exp((Ev / KbT)))) - (NdChar / (-1.0 - t_1)) elif EAccept <= 5.9e-61: tmp = t_0 + (NdChar / (Ec * (((2.0 + (((Vef / KbT) + (mu / KbT)) + (EDonor / KbT))) / Ec) + (-1.0 / KbT)))) elif EAccept <= 3.2e-18: tmp = (NaChar / (1.0 + math.exp((Vef / KbT)))) + (NdChar / (1.0 + math.exp((Ec / -KbT)))) elif EAccept <= 6.5e+67: tmp = t_0 + (NdChar / (mu * ((1.0 / KbT) + (((2.0 + ((Vef / KbT) + (EDonor / KbT))) - (Ec / KbT)) / mu)))) else: tmp = (NaChar / (1.0 + math.exp((EAccept / KbT)))) + (NdChar / (1.0 + t_1)) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT)))) t_1 = exp(Float64(Float64(Float64(mu + Vef) - Ec) / KbT)) tmp = 0.0 if (EAccept <= 3.5e-169) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT)))) - Float64(NdChar / Float64(-1.0 - t_1))); elseif (EAccept <= 5.9e-61) tmp = Float64(t_0 + Float64(NdChar / Float64(Ec * Float64(Float64(Float64(2.0 + Float64(Float64(Float64(Vef / KbT) + Float64(mu / KbT)) + Float64(EDonor / KbT))) / Ec) + Float64(-1.0 / KbT))))); elseif (EAccept <= 3.2e-18) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Vef / KbT)))) + Float64(NdChar / Float64(1.0 + exp(Float64(Ec / Float64(-KbT)))))); elseif (EAccept <= 6.5e+67) tmp = Float64(t_0 + Float64(NdChar / Float64(mu * Float64(Float64(1.0 / KbT) + Float64(Float64(Float64(2.0 + Float64(Float64(Vef / KbT) + Float64(EDonor / KbT))) - Float64(Ec / KbT)) / mu))))); else tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT)))) + Float64(NdChar / Float64(1.0 + t_1))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT))); t_1 = exp((((mu + Vef) - Ec) / KbT)); tmp = 0.0; if (EAccept <= 3.5e-169) tmp = (NaChar / (1.0 + exp((Ev / KbT)))) - (NdChar / (-1.0 - t_1)); elseif (EAccept <= 5.9e-61) tmp = t_0 + (NdChar / (Ec * (((2.0 + (((Vef / KbT) + (mu / KbT)) + (EDonor / KbT))) / Ec) + (-1.0 / KbT)))); elseif (EAccept <= 3.2e-18) tmp = (NaChar / (1.0 + exp((Vef / KbT)))) + (NdChar / (1.0 + exp((Ec / -KbT)))); elseif (EAccept <= 6.5e+67) tmp = t_0 + (NdChar / (mu * ((1.0 / KbT) + (((2.0 + ((Vef / KbT) + (EDonor / KbT))) - (Ec / KbT)) / mu)))); else tmp = (NaChar / (1.0 + exp((EAccept / KbT)))) + (NdChar / (1.0 + t_1)); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[Exp[N[(N[(N[(mu + Vef), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]}, If[LessEqual[EAccept, 3.5e-169], N[(N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(NdChar / N[(-1.0 - t$95$1), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[EAccept, 5.9e-61], N[(t$95$0 + N[(NdChar / N[(Ec * N[(N[(N[(2.0 + N[(N[(N[(Vef / KbT), $MachinePrecision] + N[(mu / KbT), $MachinePrecision]), $MachinePrecision] + N[(EDonor / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / Ec), $MachinePrecision] + N[(-1.0 / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[EAccept, 3.2e-18], N[(N[(NaChar / N[(1.0 + N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(1.0 + N[Exp[N[(Ec / (-KbT)), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[EAccept, 6.5e+67], N[(t$95$0 + N[(NdChar / N[(mu * N[(N[(1.0 / KbT), $MachinePrecision] + N[(N[(N[(2.0 + N[(N[(Vef / KbT), $MachinePrecision] + N[(EDonor / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision] / mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(1.0 + t$95$1), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}}\\
t_1 := e^{\frac{\left(mu + Vef\right) - Ec}{KbT}}\\
\mathbf{if}\;EAccept \leq 3.5 \cdot 10^{-169}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Ev}{KbT}}} - \frac{NdChar}{-1 - t\_1}\\
\mathbf{elif}\;EAccept \leq 5.9 \cdot 10^{-61}:\\
\;\;\;\;t\_0 + \frac{NdChar}{Ec \cdot \left(\frac{2 + \left(\left(\frac{Vef}{KbT} + \frac{mu}{KbT}\right) + \frac{EDonor}{KbT}\right)}{Ec} + \frac{-1}{KbT}\right)}\\
\mathbf{elif}\;EAccept \leq 3.2 \cdot 10^{-18}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Vef}{KbT}}} + \frac{NdChar}{1 + e^{\frac{Ec}{-KbT}}}\\
\mathbf{elif}\;EAccept \leq 6.5 \cdot 10^{+67}:\\
\;\;\;\;t\_0 + \frac{NdChar}{mu \cdot \left(\frac{1}{KbT} + \frac{\left(2 + \left(\frac{Vef}{KbT} + \frac{EDonor}{KbT}\right)\right) - \frac{Ec}{KbT}}{mu}\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}} + \frac{NdChar}{1 + t\_1}\\
\end{array}
\end{array}
if EAccept < 3.5000000000000003e-169Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 72.7%
Taylor expanded in EDonor around 0 66.0%
if 3.5000000000000003e-169 < EAccept < 5.89999999999999972e-61Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 87.3%
Taylor expanded in Ec around -inf 96.3%
associate-*r*96.3%
mul-1-neg96.3%
+-commutative96.3%
mul-1-neg96.3%
unsub-neg96.3%
+-commutative96.3%
Simplified96.3%
if 5.89999999999999972e-61 < EAccept < 3.1999999999999999e-18Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 72.4%
Taylor expanded in Ec around inf 71.4%
mul-1-neg71.4%
distribute-neg-frac271.4%
Simplified71.4%
if 3.1999999999999999e-18 < EAccept < 6.4999999999999995e67Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 37.8%
Taylor expanded in mu around -inf 60.9%
if 6.4999999999999995e67 < EAccept Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 87.0%
Taylor expanded in EDonor around 0 85.4%
Final simplification71.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 (/ Ev KbT)))) t_0)))
(if (<= EAccept 3.4e-169)
t_1
(if (<= EAccept 2.2e-59)
(+
(/ NaChar (+ 1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT))))
(/
NdChar
(*
Ec
(+
(/ (+ 2.0 (+ (+ (/ Vef KbT) (/ mu KbT)) (/ EDonor KbT))) Ec)
(/ -1.0 KbT)))))
(if (<= EAccept 4.2e+64)
t_1
(- (/ NaChar (+ 1.0 (exp (/ EAccept 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 = NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT)));
double t_1 = (NaChar / (1.0 + exp((Ev / KbT)))) - t_0;
double tmp;
if (EAccept <= 3.4e-169) {
tmp = t_1;
} else if (EAccept <= 2.2e-59) {
tmp = (NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / (Ec * (((2.0 + (((Vef / KbT) + (mu / KbT)) + (EDonor / KbT))) / Ec) + (-1.0 / KbT))));
} else if (EAccept <= 4.2e+64) {
tmp = t_1;
} else {
tmp = (NaChar / (1.0 + exp((EAccept / 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) :: t_1
real(8) :: tmp
t_0 = ndchar / ((-1.0d0) - exp(((edonor + (mu + (vef - ec))) / kbt)))
t_1 = (nachar / (1.0d0 + exp((ev / kbt)))) - t_0
if (eaccept <= 3.4d-169) then
tmp = t_1
else if (eaccept <= 2.2d-59) then
tmp = (nachar / (1.0d0 + exp(((vef - ((mu - eaccept) - ev)) / kbt)))) + (ndchar / (ec * (((2.0d0 + (((vef / kbt) + (mu / kbt)) + (edonor / kbt))) / ec) + ((-1.0d0) / kbt))))
else if (eaccept <= 4.2d+64) then
tmp = t_1
else
tmp = (nachar / (1.0d0 + exp((eaccept / 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 = NdChar / (-1.0 - Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)));
double t_1 = (NaChar / (1.0 + Math.exp((Ev / KbT)))) - t_0;
double tmp;
if (EAccept <= 3.4e-169) {
tmp = t_1;
} else if (EAccept <= 2.2e-59) {
tmp = (NaChar / (1.0 + Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / (Ec * (((2.0 + (((Vef / KbT) + (mu / KbT)) + (EDonor / KbT))) / Ec) + (-1.0 / KbT))));
} else if (EAccept <= 4.2e+64) {
tmp = t_1;
} else {
tmp = (NaChar / (1.0 + Math.exp((EAccept / KbT)))) - t_0;
}
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((Ev / KbT)))) - t_0 tmp = 0 if EAccept <= 3.4e-169: tmp = t_1 elif EAccept <= 2.2e-59: tmp = (NaChar / (1.0 + math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / (Ec * (((2.0 + (((Vef / KbT) + (mu / KbT)) + (EDonor / KbT))) / Ec) + (-1.0 / KbT)))) elif EAccept <= 4.2e+64: tmp = t_1 else: tmp = (NaChar / (1.0 + math.exp((EAccept / KbT)))) - t_0 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(Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT)))) - t_0) tmp = 0.0 if (EAccept <= 3.4e-169) tmp = t_1; elseif (EAccept <= 2.2e-59) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT)))) + Float64(NdChar / Float64(Ec * Float64(Float64(Float64(2.0 + Float64(Float64(Float64(Vef / KbT) + Float64(mu / KbT)) + Float64(EDonor / KbT))) / Ec) + Float64(-1.0 / KbT))))); elseif (EAccept <= 4.2e+64) tmp = t_1; else tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT)))) - t_0); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT))); t_1 = (NaChar / (1.0 + exp((Ev / KbT)))) - t_0; tmp = 0.0; if (EAccept <= 3.4e-169) tmp = t_1; elseif (EAccept <= 2.2e-59) tmp = (NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / (Ec * (((2.0 + (((Vef / KbT) + (mu / KbT)) + (EDonor / KbT))) / Ec) + (-1.0 / KbT)))); elseif (EAccept <= 4.2e+64) tmp = t_1; else tmp = (NaChar / (1.0 + exp((EAccept / KbT)))) - t_0; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NdChar / N[(-1.0 - N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - t$95$0), $MachinePrecision]}, If[LessEqual[EAccept, 3.4e-169], t$95$1, If[LessEqual[EAccept, 2.2e-59], N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(Ec * N[(N[(N[(2.0 + N[(N[(N[(Vef / KbT), $MachinePrecision] + N[(mu / KbT), $MachinePrecision]), $MachinePrecision] + N[(EDonor / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / Ec), $MachinePrecision] + N[(-1.0 / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[EAccept, 4.2e+64], t$95$1, N[(N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - t$95$0), $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{Ev}{KbT}}} - t\_0\\
\mathbf{if}\;EAccept \leq 3.4 \cdot 10^{-169}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;EAccept \leq 2.2 \cdot 10^{-59}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}} + \frac{NdChar}{Ec \cdot \left(\frac{2 + \left(\left(\frac{Vef}{KbT} + \frac{mu}{KbT}\right) + \frac{EDonor}{KbT}\right)}{Ec} + \frac{-1}{KbT}\right)}\\
\mathbf{elif}\;EAccept \leq 4.2 \cdot 10^{+64}:\\
\;\;\;\;t\_1\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}} - t\_0\\
\end{array}
\end{array}
if EAccept < 3.4e-169 or 2.1999999999999999e-59 < EAccept < 4.2000000000000001e64Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 72.9%
if 3.4e-169 < EAccept < 2.1999999999999999e-59Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 88.3%
Taylor expanded in Ec around -inf 96.6%
associate-*r*96.6%
mul-1-neg96.6%
+-commutative96.6%
mul-1-neg96.6%
unsub-neg96.6%
+-commutative96.6%
Simplified96.6%
if 4.2000000000000001e64 < EAccept Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 87.0%
Final simplification76.8%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NaChar (+ 1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT))))))
(if (<= NaChar -4.6e-20)
(+
t_0
(/
NdChar
(*
mu
(+
(/ 1.0 KbT)
(/ (- (+ 2.0 (+ (/ Vef KbT) (/ EDonor KbT))) (/ Ec KbT)) mu)))))
(if (<= NaChar 8.5e-96)
(-
(/ NaChar (+ (/ EAccept KbT) 2.0))
(/ NdChar (- -1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT)))))
(if (<= NaChar 780000.0)
(+
t_0
(/
NdChar
(*
EDonor
(-
(/ 1.0 KbT)
(*
mu
(+
(/
(-
(- (/ (/ Ec EDonor) KbT) (/ Vef (* EDonor KbT)))
(/ 2.0 EDonor))
mu)
(/ -1.0 (* EDonor KbT))))))))
(if (<= NaChar 5e+38)
(+
(/ NaChar (+ 1.0 (exp (/ Ev KbT))))
(/ NdChar (+ 1.0 (exp (/ EDonor KbT)))))
(+
t_0
(/
NdChar
(*
EDonor
(+
(/ 1.0 KbT)
(/
(- (+ 2.0 (+ (/ Vef KbT) (/ mu KbT))) (/ Ec KbT))
EDonor)))))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)));
double tmp;
if (NaChar <= -4.6e-20) {
tmp = t_0 + (NdChar / (mu * ((1.0 / KbT) + (((2.0 + ((Vef / KbT) + (EDonor / KbT))) - (Ec / KbT)) / mu))));
} else if (NaChar <= 8.5e-96) {
tmp = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT))));
} else if (NaChar <= 780000.0) {
tmp = t_0 + (NdChar / (EDonor * ((1.0 / KbT) - (mu * ((((((Ec / EDonor) / KbT) - (Vef / (EDonor * KbT))) - (2.0 / EDonor)) / mu) + (-1.0 / (EDonor * KbT)))))));
} else if (NaChar <= 5e+38) {
tmp = (NaChar / (1.0 + exp((Ev / KbT)))) + (NdChar / (1.0 + exp((EDonor / KbT))));
} else {
tmp = t_0 + (NdChar / (EDonor * ((1.0 / KbT) + (((2.0 + ((Vef / KbT) + (mu / KbT))) - (Ec / KbT)) / EDonor))));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: tmp
t_0 = nachar / (1.0d0 + exp(((vef - ((mu - eaccept) - ev)) / kbt)))
if (nachar <= (-4.6d-20)) then
tmp = t_0 + (ndchar / (mu * ((1.0d0 / kbt) + (((2.0d0 + ((vef / kbt) + (edonor / kbt))) - (ec / kbt)) / mu))))
else if (nachar <= 8.5d-96) then
tmp = (nachar / ((eaccept / kbt) + 2.0d0)) - (ndchar / ((-1.0d0) - exp(((edonor + (mu + (vef - ec))) / kbt))))
else if (nachar <= 780000.0d0) then
tmp = t_0 + (ndchar / (edonor * ((1.0d0 / kbt) - (mu * ((((((ec / edonor) / kbt) - (vef / (edonor * kbt))) - (2.0d0 / edonor)) / mu) + ((-1.0d0) / (edonor * kbt)))))))
else if (nachar <= 5d+38) then
tmp = (nachar / (1.0d0 + exp((ev / kbt)))) + (ndchar / (1.0d0 + exp((edonor / kbt))))
else
tmp = t_0 + (ndchar / (edonor * ((1.0d0 / kbt) + (((2.0d0 + ((vef / kbt) + (mu / kbt))) - (ec / kbt)) / edonor))))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NaChar / (1.0 + Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)));
double tmp;
if (NaChar <= -4.6e-20) {
tmp = t_0 + (NdChar / (mu * ((1.0 / KbT) + (((2.0 + ((Vef / KbT) + (EDonor / KbT))) - (Ec / KbT)) / mu))));
} else if (NaChar <= 8.5e-96) {
tmp = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT))));
} else if (NaChar <= 780000.0) {
tmp = t_0 + (NdChar / (EDonor * ((1.0 / KbT) - (mu * ((((((Ec / EDonor) / KbT) - (Vef / (EDonor * KbT))) - (2.0 / EDonor)) / mu) + (-1.0 / (EDonor * KbT)))))));
} else if (NaChar <= 5e+38) {
tmp = (NaChar / (1.0 + Math.exp((Ev / KbT)))) + (NdChar / (1.0 + Math.exp((EDonor / KbT))));
} else {
tmp = t_0 + (NdChar / (EDonor * ((1.0 / KbT) + (((2.0 + ((Vef / KbT) + (mu / KbT))) - (Ec / KbT)) / EDonor))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NaChar / (1.0 + math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT))) tmp = 0 if NaChar <= -4.6e-20: tmp = t_0 + (NdChar / (mu * ((1.0 / KbT) + (((2.0 + ((Vef / KbT) + (EDonor / KbT))) - (Ec / KbT)) / mu)))) elif NaChar <= 8.5e-96: tmp = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) elif NaChar <= 780000.0: tmp = t_0 + (NdChar / (EDonor * ((1.0 / KbT) - (mu * ((((((Ec / EDonor) / KbT) - (Vef / (EDonor * KbT))) - (2.0 / EDonor)) / mu) + (-1.0 / (EDonor * KbT))))))) elif NaChar <= 5e+38: tmp = (NaChar / (1.0 + math.exp((Ev / KbT)))) + (NdChar / (1.0 + math.exp((EDonor / KbT)))) else: tmp = t_0 + (NdChar / (EDonor * ((1.0 / KbT) + (((2.0 + ((Vef / KbT) + (mu / KbT))) - (Ec / KbT)) / EDonor)))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT)))) tmp = 0.0 if (NaChar <= -4.6e-20) tmp = Float64(t_0 + Float64(NdChar / Float64(mu * Float64(Float64(1.0 / KbT) + Float64(Float64(Float64(2.0 + Float64(Float64(Vef / KbT) + Float64(EDonor / KbT))) - Float64(Ec / KbT)) / mu))))); elseif (NaChar <= 8.5e-96) tmp = Float64(Float64(NaChar / Float64(Float64(EAccept / KbT) + 2.0)) - Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT))))); elseif (NaChar <= 780000.0) tmp = Float64(t_0 + Float64(NdChar / Float64(EDonor * Float64(Float64(1.0 / KbT) - Float64(mu * Float64(Float64(Float64(Float64(Float64(Float64(Ec / EDonor) / KbT) - Float64(Vef / Float64(EDonor * KbT))) - Float64(2.0 / EDonor)) / mu) + Float64(-1.0 / Float64(EDonor * KbT)))))))); elseif (NaChar <= 5e+38) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT)))) + Float64(NdChar / Float64(1.0 + exp(Float64(EDonor / KbT))))); else tmp = Float64(t_0 + Float64(NdChar / Float64(EDonor * Float64(Float64(1.0 / KbT) + Float64(Float64(Float64(2.0 + Float64(Float64(Vef / KbT) + Float64(mu / KbT))) - Float64(Ec / KbT)) / EDonor))))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT))); tmp = 0.0; if (NaChar <= -4.6e-20) tmp = t_0 + (NdChar / (mu * ((1.0 / KbT) + (((2.0 + ((Vef / KbT) + (EDonor / KbT))) - (Ec / KbT)) / mu)))); elseif (NaChar <= 8.5e-96) tmp = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT)))); elseif (NaChar <= 780000.0) tmp = t_0 + (NdChar / (EDonor * ((1.0 / KbT) - (mu * ((((((Ec / EDonor) / KbT) - (Vef / (EDonor * KbT))) - (2.0 / EDonor)) / mu) + (-1.0 / (EDonor * KbT))))))); elseif (NaChar <= 5e+38) tmp = (NaChar / (1.0 + exp((Ev / KbT)))) + (NdChar / (1.0 + exp((EDonor / KbT)))); else tmp = t_0 + (NdChar / (EDonor * ((1.0 / KbT) + (((2.0 + ((Vef / KbT) + (mu / KbT))) - (Ec / KbT)) / EDonor)))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -4.6e-20], N[(t$95$0 + N[(NdChar / N[(mu * N[(N[(1.0 / KbT), $MachinePrecision] + N[(N[(N[(2.0 + N[(N[(Vef / KbT), $MachinePrecision] + N[(EDonor / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision] / mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 8.5e-96], N[(N[(NaChar / N[(N[(EAccept / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision] - N[(NdChar / N[(-1.0 - N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 780000.0], N[(t$95$0 + N[(NdChar / N[(EDonor * N[(N[(1.0 / KbT), $MachinePrecision] - N[(mu * N[(N[(N[(N[(N[(N[(Ec / EDonor), $MachinePrecision] / KbT), $MachinePrecision] - N[(Vef / N[(EDonor * KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(2.0 / EDonor), $MachinePrecision]), $MachinePrecision] / mu), $MachinePrecision] + N[(-1.0 / N[(EDonor * KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 5e+38], N[(N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(1.0 + N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(t$95$0 + N[(NdChar / N[(EDonor * N[(N[(1.0 / KbT), $MachinePrecision] + N[(N[(N[(2.0 + N[(N[(Vef / KbT), $MachinePrecision] + N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision] / EDonor), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}}\\
\mathbf{if}\;NaChar \leq -4.6 \cdot 10^{-20}:\\
\;\;\;\;t\_0 + \frac{NdChar}{mu \cdot \left(\frac{1}{KbT} + \frac{\left(2 + \left(\frac{Vef}{KbT} + \frac{EDonor}{KbT}\right)\right) - \frac{Ec}{KbT}}{mu}\right)}\\
\mathbf{elif}\;NaChar \leq 8.5 \cdot 10^{-96}:\\
\;\;\;\;\frac{NaChar}{\frac{EAccept}{KbT} + 2} - \frac{NdChar}{-1 - e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}}\\
\mathbf{elif}\;NaChar \leq 780000:\\
\;\;\;\;t\_0 + \frac{NdChar}{EDonor \cdot \left(\frac{1}{KbT} - mu \cdot \left(\frac{\left(\frac{\frac{Ec}{EDonor}}{KbT} - \frac{Vef}{EDonor \cdot KbT}\right) - \frac{2}{EDonor}}{mu} + \frac{-1}{EDonor \cdot KbT}\right)\right)}\\
\mathbf{elif}\;NaChar \leq 5 \cdot 10^{+38}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Ev}{KbT}}} + \frac{NdChar}{1 + e^{\frac{EDonor}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;t\_0 + \frac{NdChar}{EDonor \cdot \left(\frac{1}{KbT} + \frac{\left(2 + \left(\frac{Vef}{KbT} + \frac{mu}{KbT}\right)\right) - \frac{Ec}{KbT}}{EDonor}\right)}\\
\end{array}
\end{array}
if NaChar < -4.5999999999999998e-20Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 64.4%
Taylor expanded in mu around -inf 75.2%
if -4.5999999999999998e-20 < NaChar < 8.49999999999999983e-96Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 86.0%
Taylor expanded in EAccept around 0 78.6%
+-commutative78.6%
Simplified78.6%
if 8.49999999999999983e-96 < NaChar < 7.8e5Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 42.3%
Taylor expanded in EDonor around -inf 60.0%
Taylor expanded in mu around -inf 64.6%
associate-*r*64.6%
neg-mul-164.6%
associate-*r/64.6%
mul-1-neg64.6%
associate--l+64.6%
associate-*r/64.6%
metadata-eval64.6%
*-commutative64.6%
associate-/r*69.1%
*-commutative69.1%
Simplified69.1%
if 7.8e5 < NaChar < 4.9999999999999997e38Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 89.8%
Taylor expanded in EDonor around inf 69.5%
if 4.9999999999999997e38 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 63.3%
Taylor expanded in EDonor around -inf 74.2%
Final simplification75.6%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NaChar (+ 1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT)))))
(t_1 (exp (/ (- (+ mu Vef) Ec) KbT))))
(if (<= Ec -7.6e+192)
(- (/ NaChar (+ 1.0 (exp (/ Ev KbT)))) (/ NdChar (- -1.0 t_1)))
(if (<= Ec 2.4e-10)
(+ t_0 (/ NdChar (+ 1.0 (exp (/ mu KbT)))))
(if (<= Ec 6.5e+52)
(-
t_0
(/
NdChar
(+
(/ Ec KbT)
(-
(*
mu
(- (/ -1.0 KbT) (+ (/ Vef (* mu KbT)) (/ EDonor (* mu KbT)))))
2.0))))
(+
(/ NaChar (+ 1.0 (exp (/ EAccept KbT))))
(/ NdChar (+ 1.0 t_1))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)));
double t_1 = exp((((mu + Vef) - Ec) / KbT));
double tmp;
if (Ec <= -7.6e+192) {
tmp = (NaChar / (1.0 + exp((Ev / KbT)))) - (NdChar / (-1.0 - t_1));
} else if (Ec <= 2.4e-10) {
tmp = t_0 + (NdChar / (1.0 + exp((mu / KbT))));
} else if (Ec <= 6.5e+52) {
tmp = t_0 - (NdChar / ((Ec / KbT) + ((mu * ((-1.0 / KbT) - ((Vef / (mu * KbT)) + (EDonor / (mu * KbT))))) - 2.0)));
} else {
tmp = (NaChar / (1.0 + exp((EAccept / KbT)))) + (NdChar / (1.0 + t_1));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = nachar / (1.0d0 + exp(((vef - ((mu - eaccept) - ev)) / kbt)))
t_1 = exp((((mu + vef) - ec) / kbt))
if (ec <= (-7.6d+192)) then
tmp = (nachar / (1.0d0 + exp((ev / kbt)))) - (ndchar / ((-1.0d0) - t_1))
else if (ec <= 2.4d-10) then
tmp = t_0 + (ndchar / (1.0d0 + exp((mu / kbt))))
else if (ec <= 6.5d+52) then
tmp = t_0 - (ndchar / ((ec / kbt) + ((mu * (((-1.0d0) / kbt) - ((vef / (mu * kbt)) + (edonor / (mu * kbt))))) - 2.0d0)))
else
tmp = (nachar / (1.0d0 + exp((eaccept / kbt)))) + (ndchar / (1.0d0 + t_1))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NaChar / (1.0 + Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)));
double t_1 = Math.exp((((mu + Vef) - Ec) / KbT));
double tmp;
if (Ec <= -7.6e+192) {
tmp = (NaChar / (1.0 + Math.exp((Ev / KbT)))) - (NdChar / (-1.0 - t_1));
} else if (Ec <= 2.4e-10) {
tmp = t_0 + (NdChar / (1.0 + Math.exp((mu / KbT))));
} else if (Ec <= 6.5e+52) {
tmp = t_0 - (NdChar / ((Ec / KbT) + ((mu * ((-1.0 / KbT) - ((Vef / (mu * KbT)) + (EDonor / (mu * KbT))))) - 2.0)));
} else {
tmp = (NaChar / (1.0 + Math.exp((EAccept / KbT)))) + (NdChar / (1.0 + t_1));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NaChar / (1.0 + math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT))) t_1 = math.exp((((mu + Vef) - Ec) / KbT)) tmp = 0 if Ec <= -7.6e+192: tmp = (NaChar / (1.0 + math.exp((Ev / KbT)))) - (NdChar / (-1.0 - t_1)) elif Ec <= 2.4e-10: tmp = t_0 + (NdChar / (1.0 + math.exp((mu / KbT)))) elif Ec <= 6.5e+52: tmp = t_0 - (NdChar / ((Ec / KbT) + ((mu * ((-1.0 / KbT) - ((Vef / (mu * KbT)) + (EDonor / (mu * KbT))))) - 2.0))) else: tmp = (NaChar / (1.0 + math.exp((EAccept / KbT)))) + (NdChar / (1.0 + t_1)) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT)))) t_1 = exp(Float64(Float64(Float64(mu + Vef) - Ec) / KbT)) tmp = 0.0 if (Ec <= -7.6e+192) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT)))) - Float64(NdChar / Float64(-1.0 - t_1))); elseif (Ec <= 2.4e-10) tmp = Float64(t_0 + Float64(NdChar / Float64(1.0 + exp(Float64(mu / KbT))))); elseif (Ec <= 6.5e+52) tmp = Float64(t_0 - Float64(NdChar / Float64(Float64(Ec / KbT) + Float64(Float64(mu * Float64(Float64(-1.0 / KbT) - Float64(Float64(Vef / Float64(mu * KbT)) + Float64(EDonor / Float64(mu * KbT))))) - 2.0)))); else tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT)))) + Float64(NdChar / Float64(1.0 + t_1))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT))); t_1 = exp((((mu + Vef) - Ec) / KbT)); tmp = 0.0; if (Ec <= -7.6e+192) tmp = (NaChar / (1.0 + exp((Ev / KbT)))) - (NdChar / (-1.0 - t_1)); elseif (Ec <= 2.4e-10) tmp = t_0 + (NdChar / (1.0 + exp((mu / KbT)))); elseif (Ec <= 6.5e+52) tmp = t_0 - (NdChar / ((Ec / KbT) + ((mu * ((-1.0 / KbT) - ((Vef / (mu * KbT)) + (EDonor / (mu * KbT))))) - 2.0))); else tmp = (NaChar / (1.0 + exp((EAccept / KbT)))) + (NdChar / (1.0 + t_1)); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[Exp[N[(N[(N[(mu + Vef), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]}, If[LessEqual[Ec, -7.6e+192], N[(N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(NdChar / N[(-1.0 - t$95$1), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[Ec, 2.4e-10], N[(t$95$0 + N[(NdChar / N[(1.0 + N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[Ec, 6.5e+52], N[(t$95$0 - N[(NdChar / N[(N[(Ec / KbT), $MachinePrecision] + N[(N[(mu * N[(N[(-1.0 / KbT), $MachinePrecision] - N[(N[(Vef / N[(mu * KbT), $MachinePrecision]), $MachinePrecision] + N[(EDonor / N[(mu * KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - 2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(1.0 + t$95$1), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}}\\
t_1 := e^{\frac{\left(mu + Vef\right) - Ec}{KbT}}\\
\mathbf{if}\;Ec \leq -7.6 \cdot 10^{+192}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Ev}{KbT}}} - \frac{NdChar}{-1 - t\_1}\\
\mathbf{elif}\;Ec \leq 2.4 \cdot 10^{-10}:\\
\;\;\;\;t\_0 + \frac{NdChar}{1 + e^{\frac{mu}{KbT}}}\\
\mathbf{elif}\;Ec \leq 6.5 \cdot 10^{+52}:\\
\;\;\;\;t\_0 - \frac{NdChar}{\frac{Ec}{KbT} + \left(mu \cdot \left(\frac{-1}{KbT} - \left(\frac{Vef}{mu \cdot KbT} + \frac{EDonor}{mu \cdot KbT}\right)\right) - 2\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}} + \frac{NdChar}{1 + t\_1}\\
\end{array}
\end{array}
if Ec < -7.5999999999999999e192Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 75.3%
Taylor expanded in EDonor around 0 71.5%
if -7.5999999999999999e192 < Ec < 2.4e-10Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 81.1%
if 2.4e-10 < Ec < 6.49999999999999996e52Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 54.7%
Taylor expanded in mu around inf 81.4%
+-commutative81.4%
*-commutative81.4%
*-commutative81.4%
Simplified81.4%
if 6.49999999999999996e52 < Ec Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 72.2%
Taylor expanded in EDonor around 0 69.5%
Final simplification77.5%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NaChar (+ 1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT))))))
(if (<= NaChar -7e-55)
(+
t_0
(/
NdChar
(*
mu
(+
(/ 1.0 KbT)
(/ (- (+ 2.0 (+ (/ Vef KbT) (/ EDonor KbT))) (/ Ec KbT)) mu)))))
(if (<= NaChar 2.12e-47)
(+
(/ NaChar (+ 1.0 (exp (/ EAccept KbT))))
(/ NdChar (+ 1.0 (exp (/ (- (+ mu Vef) Ec) KbT)))))
(+
t_0
(/
NdChar
(*
EDonor
(+
(/ 1.0 KbT)
(/ (- (+ 2.0 (+ (/ Vef KbT) (/ mu KbT))) (/ Ec KbT)) EDonor)))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)));
double tmp;
if (NaChar <= -7e-55) {
tmp = t_0 + (NdChar / (mu * ((1.0 / KbT) + (((2.0 + ((Vef / KbT) + (EDonor / KbT))) - (Ec / KbT)) / mu))));
} else if (NaChar <= 2.12e-47) {
tmp = (NaChar / (1.0 + exp((EAccept / KbT)))) + (NdChar / (1.0 + exp((((mu + Vef) - Ec) / KbT))));
} else {
tmp = t_0 + (NdChar / (EDonor * ((1.0 / KbT) + (((2.0 + ((Vef / KbT) + (mu / KbT))) - (Ec / KbT)) / EDonor))));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: tmp
t_0 = nachar / (1.0d0 + exp(((vef - ((mu - eaccept) - ev)) / kbt)))
if (nachar <= (-7d-55)) then
tmp = t_0 + (ndchar / (mu * ((1.0d0 / kbt) + (((2.0d0 + ((vef / kbt) + (edonor / kbt))) - (ec / kbt)) / mu))))
else if (nachar <= 2.12d-47) then
tmp = (nachar / (1.0d0 + exp((eaccept / kbt)))) + (ndchar / (1.0d0 + exp((((mu + vef) - ec) / kbt))))
else
tmp = t_0 + (ndchar / (edonor * ((1.0d0 / kbt) + (((2.0d0 + ((vef / kbt) + (mu / kbt))) - (ec / kbt)) / edonor))))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NaChar / (1.0 + Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)));
double tmp;
if (NaChar <= -7e-55) {
tmp = t_0 + (NdChar / (mu * ((1.0 / KbT) + (((2.0 + ((Vef / KbT) + (EDonor / KbT))) - (Ec / KbT)) / mu))));
} else if (NaChar <= 2.12e-47) {
tmp = (NaChar / (1.0 + Math.exp((EAccept / KbT)))) + (NdChar / (1.0 + Math.exp((((mu + Vef) - Ec) / KbT))));
} else {
tmp = t_0 + (NdChar / (EDonor * ((1.0 / KbT) + (((2.0 + ((Vef / KbT) + (mu / KbT))) - (Ec / KbT)) / EDonor))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NaChar / (1.0 + math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT))) tmp = 0 if NaChar <= -7e-55: tmp = t_0 + (NdChar / (mu * ((1.0 / KbT) + (((2.0 + ((Vef / KbT) + (EDonor / KbT))) - (Ec / KbT)) / mu)))) elif NaChar <= 2.12e-47: tmp = (NaChar / (1.0 + math.exp((EAccept / KbT)))) + (NdChar / (1.0 + math.exp((((mu + Vef) - Ec) / KbT)))) else: tmp = t_0 + (NdChar / (EDonor * ((1.0 / KbT) + (((2.0 + ((Vef / KbT) + (mu / KbT))) - (Ec / KbT)) / EDonor)))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT)))) tmp = 0.0 if (NaChar <= -7e-55) tmp = Float64(t_0 + Float64(NdChar / Float64(mu * Float64(Float64(1.0 / KbT) + Float64(Float64(Float64(2.0 + Float64(Float64(Vef / KbT) + Float64(EDonor / KbT))) - Float64(Ec / KbT)) / mu))))); elseif (NaChar <= 2.12e-47) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT)))) + Float64(NdChar / Float64(1.0 + exp(Float64(Float64(Float64(mu + Vef) - Ec) / KbT))))); else tmp = Float64(t_0 + Float64(NdChar / Float64(EDonor * Float64(Float64(1.0 / KbT) + Float64(Float64(Float64(2.0 + Float64(Float64(Vef / KbT) + Float64(mu / KbT))) - Float64(Ec / KbT)) / EDonor))))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT))); tmp = 0.0; if (NaChar <= -7e-55) tmp = t_0 + (NdChar / (mu * ((1.0 / KbT) + (((2.0 + ((Vef / KbT) + (EDonor / KbT))) - (Ec / KbT)) / mu)))); elseif (NaChar <= 2.12e-47) tmp = (NaChar / (1.0 + exp((EAccept / KbT)))) + (NdChar / (1.0 + exp((((mu + Vef) - Ec) / KbT)))); else tmp = t_0 + (NdChar / (EDonor * ((1.0 / KbT) + (((2.0 + ((Vef / KbT) + (mu / KbT))) - (Ec / KbT)) / EDonor)))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -7e-55], N[(t$95$0 + N[(NdChar / N[(mu * N[(N[(1.0 / KbT), $MachinePrecision] + N[(N[(N[(2.0 + N[(N[(Vef / KbT), $MachinePrecision] + N[(EDonor / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision] / mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 2.12e-47], N[(N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(1.0 + N[Exp[N[(N[(N[(mu + Vef), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(t$95$0 + N[(NdChar / N[(EDonor * N[(N[(1.0 / KbT), $MachinePrecision] + N[(N[(N[(2.0 + N[(N[(Vef / KbT), $MachinePrecision] + N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision] / EDonor), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}}\\
\mathbf{if}\;NaChar \leq -7 \cdot 10^{-55}:\\
\;\;\;\;t\_0 + \frac{NdChar}{mu \cdot \left(\frac{1}{KbT} + \frac{\left(2 + \left(\frac{Vef}{KbT} + \frac{EDonor}{KbT}\right)\right) - \frac{Ec}{KbT}}{mu}\right)}\\
\mathbf{elif}\;NaChar \leq 2.12 \cdot 10^{-47}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}} + \frac{NdChar}{1 + e^{\frac{\left(mu + Vef\right) - Ec}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;t\_0 + \frac{NdChar}{EDonor \cdot \left(\frac{1}{KbT} + \frac{\left(2 + \left(\frac{Vef}{KbT} + \frac{mu}{KbT}\right)\right) - \frac{Ec}{KbT}}{EDonor}\right)}\\
\end{array}
\end{array}
if NaChar < -7.00000000000000051e-55Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 65.0%
Taylor expanded in mu around -inf 75.2%
if -7.00000000000000051e-55 < NaChar < 2.12e-47Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 84.9%
Taylor expanded in EDonor around 0 79.0%
if 2.12e-47 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 58.6%
Taylor expanded in EDonor around -inf 70.5%
Final simplification75.3%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (- (/ NaChar (+ 1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT)))) (/ NdChar (- -1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) - (NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / 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 = (nachar / (1.0d0 + exp(((vef - ((mu - eaccept) - ev)) / kbt)))) - (ndchar / ((-1.0d0) - exp(((edonor + (mu + (vef - ec))) / 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 (NaChar / (1.0 + Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) - (NdChar / (-1.0 - Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT))));
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return (NaChar / (1.0 + math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) - (NdChar / (-1.0 - math.exp(((EDonor + (mu + (Vef - Ec))) / KbT))))
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT)))) - Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT))))) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = (NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) - (NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT)))); end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(NdChar / N[(-1.0 - N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{NaChar}{1 + e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}} - \frac{NdChar}{-1 - e^{\frac{EDonor + \left(mu + \left(Vef - Ec\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 (/ NaChar (+ 1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT)))))
(t_1
(-
t_0
(/
NdChar
(+
(/ Ec KbT)
(-
(*
mu
(- (/ -1.0 KbT) (+ (/ Vef (* mu KbT)) (/ EDonor (* mu KbT)))))
2.0)))))
(t_2
(-
(/ NaChar (+ (/ EAccept KbT) 2.0))
(/ NdChar (- -1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT)))))))
(if (<= NaChar -3.2e-17)
t_1
(if (<= NaChar 1.85e-51)
t_2
(if (<= NaChar 3600000.0)
(+
t_0
(/ NdChar (/ (* EDonor (+ 1.0 (/ (- (+ mu Vef) Ec) EDonor))) KbT)))
(if (<= NaChar 7.6e+25)
t_2
(if (or (<= NaChar 5e+110) (not (<= NaChar 2.4e+245)))
t_1
(+
t_0
(/
NdChar
(*
Ec
(+
(/ (+ 2.0 (+ (+ (/ Vef KbT) (/ mu KbT)) (/ EDonor 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 - ((mu - EAccept) - Ev)) / KbT)));
double t_1 = t_0 - (NdChar / ((Ec / KbT) + ((mu * ((-1.0 / KbT) - ((Vef / (mu * KbT)) + (EDonor / (mu * KbT))))) - 2.0)));
double t_2 = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT))));
double tmp;
if (NaChar <= -3.2e-17) {
tmp = t_1;
} else if (NaChar <= 1.85e-51) {
tmp = t_2;
} else if (NaChar <= 3600000.0) {
tmp = t_0 + (NdChar / ((EDonor * (1.0 + (((mu + Vef) - Ec) / EDonor))) / KbT));
} else if (NaChar <= 7.6e+25) {
tmp = t_2;
} else if ((NaChar <= 5e+110) || !(NaChar <= 2.4e+245)) {
tmp = t_1;
} else {
tmp = t_0 + (NdChar / (Ec * (((2.0 + (((Vef / KbT) + (mu / KbT)) + (EDonor / 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) :: t_1
real(8) :: t_2
real(8) :: tmp
t_0 = nachar / (1.0d0 + exp(((vef - ((mu - eaccept) - ev)) / kbt)))
t_1 = t_0 - (ndchar / ((ec / kbt) + ((mu * (((-1.0d0) / kbt) - ((vef / (mu * kbt)) + (edonor / (mu * kbt))))) - 2.0d0)))
t_2 = (nachar / ((eaccept / kbt) + 2.0d0)) - (ndchar / ((-1.0d0) - exp(((edonor + (mu + (vef - ec))) / kbt))))
if (nachar <= (-3.2d-17)) then
tmp = t_1
else if (nachar <= 1.85d-51) then
tmp = t_2
else if (nachar <= 3600000.0d0) then
tmp = t_0 + (ndchar / ((edonor * (1.0d0 + (((mu + vef) - ec) / edonor))) / kbt))
else if (nachar <= 7.6d+25) then
tmp = t_2
else if ((nachar <= 5d+110) .or. (.not. (nachar <= 2.4d+245))) then
tmp = t_1
else
tmp = t_0 + (ndchar / (ec * (((2.0d0 + (((vef / kbt) + (mu / kbt)) + (edonor / 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 - ((mu - EAccept) - Ev)) / KbT)));
double t_1 = t_0 - (NdChar / ((Ec / KbT) + ((mu * ((-1.0 / KbT) - ((Vef / (mu * KbT)) + (EDonor / (mu * KbT))))) - 2.0)));
double t_2 = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT))));
double tmp;
if (NaChar <= -3.2e-17) {
tmp = t_1;
} else if (NaChar <= 1.85e-51) {
tmp = t_2;
} else if (NaChar <= 3600000.0) {
tmp = t_0 + (NdChar / ((EDonor * (1.0 + (((mu + Vef) - Ec) / EDonor))) / KbT));
} else if (NaChar <= 7.6e+25) {
tmp = t_2;
} else if ((NaChar <= 5e+110) || !(NaChar <= 2.4e+245)) {
tmp = t_1;
} else {
tmp = t_0 + (NdChar / (Ec * (((2.0 + (((Vef / KbT) + (mu / KbT)) + (EDonor / 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 - ((mu - EAccept) - Ev)) / KbT))) t_1 = t_0 - (NdChar / ((Ec / KbT) + ((mu * ((-1.0 / KbT) - ((Vef / (mu * KbT)) + (EDonor / (mu * KbT))))) - 2.0))) t_2 = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) tmp = 0 if NaChar <= -3.2e-17: tmp = t_1 elif NaChar <= 1.85e-51: tmp = t_2 elif NaChar <= 3600000.0: tmp = t_0 + (NdChar / ((EDonor * (1.0 + (((mu + Vef) - Ec) / EDonor))) / KbT)) elif NaChar <= 7.6e+25: tmp = t_2 elif (NaChar <= 5e+110) or not (NaChar <= 2.4e+245): tmp = t_1 else: tmp = t_0 + (NdChar / (Ec * (((2.0 + (((Vef / KbT) + (mu / KbT)) + (EDonor / 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(Float64(mu - EAccept) - Ev)) / KbT)))) t_1 = Float64(t_0 - Float64(NdChar / Float64(Float64(Ec / KbT) + Float64(Float64(mu * Float64(Float64(-1.0 / KbT) - Float64(Float64(Vef / Float64(mu * KbT)) + Float64(EDonor / Float64(mu * KbT))))) - 2.0)))) t_2 = Float64(Float64(NaChar / Float64(Float64(EAccept / KbT) + 2.0)) - Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT))))) tmp = 0.0 if (NaChar <= -3.2e-17) tmp = t_1; elseif (NaChar <= 1.85e-51) tmp = t_2; elseif (NaChar <= 3600000.0) tmp = Float64(t_0 + Float64(NdChar / Float64(Float64(EDonor * Float64(1.0 + Float64(Float64(Float64(mu + Vef) - Ec) / EDonor))) / KbT))); elseif (NaChar <= 7.6e+25) tmp = t_2; elseif ((NaChar <= 5e+110) || !(NaChar <= 2.4e+245)) tmp = t_1; else tmp = Float64(t_0 + Float64(NdChar / Float64(Ec * Float64(Float64(Float64(2.0 + Float64(Float64(Float64(Vef / KbT) + Float64(mu / KbT)) + Float64(EDonor / 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 - ((mu - EAccept) - Ev)) / KbT))); t_1 = t_0 - (NdChar / ((Ec / KbT) + ((mu * ((-1.0 / KbT) - ((Vef / (mu * KbT)) + (EDonor / (mu * KbT))))) - 2.0))); t_2 = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT)))); tmp = 0.0; if (NaChar <= -3.2e-17) tmp = t_1; elseif (NaChar <= 1.85e-51) tmp = t_2; elseif (NaChar <= 3600000.0) tmp = t_0 + (NdChar / ((EDonor * (1.0 + (((mu + Vef) - Ec) / EDonor))) / KbT)); elseif (NaChar <= 7.6e+25) tmp = t_2; elseif ((NaChar <= 5e+110) || ~((NaChar <= 2.4e+245))) tmp = t_1; else tmp = t_0 + (NdChar / (Ec * (((2.0 + (((Vef / KbT) + (mu / KbT)) + (EDonor / 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[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(t$95$0 - N[(NdChar / N[(N[(Ec / KbT), $MachinePrecision] + N[(N[(mu * N[(N[(-1.0 / KbT), $MachinePrecision] - N[(N[(Vef / N[(mu * KbT), $MachinePrecision]), $MachinePrecision] + N[(EDonor / N[(mu * KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - 2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(N[(NaChar / N[(N[(EAccept / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision] - N[(NdChar / N[(-1.0 - N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -3.2e-17], t$95$1, If[LessEqual[NaChar, 1.85e-51], t$95$2, If[LessEqual[NaChar, 3600000.0], N[(t$95$0 + N[(NdChar / N[(N[(EDonor * N[(1.0 + N[(N[(N[(mu + Vef), $MachinePrecision] - Ec), $MachinePrecision] / EDonor), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 7.6e+25], t$95$2, If[Or[LessEqual[NaChar, 5e+110], N[Not[LessEqual[NaChar, 2.4e+245]], $MachinePrecision]], t$95$1, N[(t$95$0 + N[(NdChar / N[(Ec * N[(N[(N[(2.0 + N[(N[(N[(Vef / KbT), $MachinePrecision] + N[(mu / KbT), $MachinePrecision]), $MachinePrecision] + N[(EDonor / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / Ec), $MachinePrecision] + N[(-1.0 / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}}\\
t_1 := t\_0 - \frac{NdChar}{\frac{Ec}{KbT} + \left(mu \cdot \left(\frac{-1}{KbT} - \left(\frac{Vef}{mu \cdot KbT} + \frac{EDonor}{mu \cdot KbT}\right)\right) - 2\right)}\\
t_2 := \frac{NaChar}{\frac{EAccept}{KbT} + 2} - \frac{NdChar}{-1 - e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}}\\
\mathbf{if}\;NaChar \leq -3.2 \cdot 10^{-17}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;NaChar \leq 1.85 \cdot 10^{-51}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;NaChar \leq 3600000:\\
\;\;\;\;t\_0 + \frac{NdChar}{\frac{EDonor \cdot \left(1 + \frac{\left(mu + Vef\right) - Ec}{EDonor}\right)}{KbT}}\\
\mathbf{elif}\;NaChar \leq 7.6 \cdot 10^{+25}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;NaChar \leq 5 \cdot 10^{+110} \lor \neg \left(NaChar \leq 2.4 \cdot 10^{+245}\right):\\
\;\;\;\;t\_1\\
\mathbf{else}:\\
\;\;\;\;t\_0 + \frac{NdChar}{Ec \cdot \left(\frac{2 + \left(\left(\frac{Vef}{KbT} + \frac{mu}{KbT}\right) + \frac{EDonor}{KbT}\right)}{Ec} + \frac{-1}{KbT}\right)}\\
\end{array}
\end{array}
if NaChar < -3.2000000000000002e-17 or 7.6000000000000001e25 < NaChar < 4.99999999999999978e110 or 2.3999999999999998e245 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 60.6%
Taylor expanded in mu around inf 73.0%
+-commutative73.0%
*-commutative73.0%
*-commutative73.0%
Simplified73.0%
if -3.2000000000000002e-17 < NaChar < 1.84999999999999987e-51 or 3.6e6 < NaChar < 7.6000000000000001e25Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 84.6%
Taylor expanded in EAccept around 0 75.7%
+-commutative75.7%
Simplified75.7%
if 1.84999999999999987e-51 < NaChar < 3.6e6Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 47.9%
Taylor expanded in EDonor around -inf 69.2%
Taylor expanded in KbT around 0 69.8%
if 4.99999999999999978e110 < NaChar < 2.3999999999999998e245Initial program 99.9%
Simplified99.9%
Taylor expanded in KbT around inf 73.9%
Taylor expanded in Ec around -inf 81.6%
associate-*r*81.6%
mul-1-neg81.6%
+-commutative81.6%
mul-1-neg81.6%
unsub-neg81.6%
+-commutative81.6%
Simplified81.6%
Final simplification74.9%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0
(-
(/ NaChar (+ (/ EAccept KbT) 2.0))
(/ NdChar (- -1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT))))))
(t_1 (/ NaChar (+ 1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT))))))
(if (<= NaChar -1.65e-20)
(+
t_1
(/
NdChar
(*
mu
(+
(/ 1.0 KbT)
(/ (- (+ 2.0 (+ (/ Vef KbT) (/ EDonor KbT))) (/ Ec KbT)) mu)))))
(if (<= NaChar 6.5e-96)
t_0
(if (<= NaChar 54000000.0)
(+
t_1
(/
NdChar
(*
EDonor
(-
(/ 1.0 KbT)
(*
mu
(+
(/
(-
(- (/ (/ Ec EDonor) KbT) (/ Vef (* EDonor KbT)))
(/ 2.0 EDonor))
mu)
(/ -1.0 (* EDonor KbT))))))))
(if (<= NaChar 4.2e+31)
t_0
(+
t_1
(/
NdChar
(*
EDonor
(+
(/ 1.0 KbT)
(/
(- (+ 2.0 (+ (/ Vef KbT) (/ mu KbT))) (/ Ec KbT))
EDonor)))))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT))));
double t_1 = NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)));
double tmp;
if (NaChar <= -1.65e-20) {
tmp = t_1 + (NdChar / (mu * ((1.0 / KbT) + (((2.0 + ((Vef / KbT) + (EDonor / KbT))) - (Ec / KbT)) / mu))));
} else if (NaChar <= 6.5e-96) {
tmp = t_0;
} else if (NaChar <= 54000000.0) {
tmp = t_1 + (NdChar / (EDonor * ((1.0 / KbT) - (mu * ((((((Ec / EDonor) / KbT) - (Vef / (EDonor * KbT))) - (2.0 / EDonor)) / mu) + (-1.0 / (EDonor * KbT)))))));
} else if (NaChar <= 4.2e+31) {
tmp = t_0;
} else {
tmp = t_1 + (NdChar / (EDonor * ((1.0 / KbT) + (((2.0 + ((Vef / KbT) + (mu / KbT))) - (Ec / KbT)) / EDonor))));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = (nachar / ((eaccept / kbt) + 2.0d0)) - (ndchar / ((-1.0d0) - exp(((edonor + (mu + (vef - ec))) / kbt))))
t_1 = nachar / (1.0d0 + exp(((vef - ((mu - eaccept) - ev)) / kbt)))
if (nachar <= (-1.65d-20)) then
tmp = t_1 + (ndchar / (mu * ((1.0d0 / kbt) + (((2.0d0 + ((vef / kbt) + (edonor / kbt))) - (ec / kbt)) / mu))))
else if (nachar <= 6.5d-96) then
tmp = t_0
else if (nachar <= 54000000.0d0) then
tmp = t_1 + (ndchar / (edonor * ((1.0d0 / kbt) - (mu * ((((((ec / edonor) / kbt) - (vef / (edonor * kbt))) - (2.0d0 / edonor)) / mu) + ((-1.0d0) / (edonor * kbt)))))))
else if (nachar <= 4.2d+31) then
tmp = t_0
else
tmp = t_1 + (ndchar / (edonor * ((1.0d0 / kbt) + (((2.0d0 + ((vef / kbt) + (mu / kbt))) - (ec / kbt)) / edonor))))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT))));
double t_1 = NaChar / (1.0 + Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)));
double tmp;
if (NaChar <= -1.65e-20) {
tmp = t_1 + (NdChar / (mu * ((1.0 / KbT) + (((2.0 + ((Vef / KbT) + (EDonor / KbT))) - (Ec / KbT)) / mu))));
} else if (NaChar <= 6.5e-96) {
tmp = t_0;
} else if (NaChar <= 54000000.0) {
tmp = t_1 + (NdChar / (EDonor * ((1.0 / KbT) - (mu * ((((((Ec / EDonor) / KbT) - (Vef / (EDonor * KbT))) - (2.0 / EDonor)) / mu) + (-1.0 / (EDonor * KbT)))))));
} else if (NaChar <= 4.2e+31) {
tmp = t_0;
} else {
tmp = t_1 + (NdChar / (EDonor * ((1.0 / KbT) + (((2.0 + ((Vef / KbT) + (mu / KbT))) - (Ec / KbT)) / EDonor))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) t_1 = NaChar / (1.0 + math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT))) tmp = 0 if NaChar <= -1.65e-20: tmp = t_1 + (NdChar / (mu * ((1.0 / KbT) + (((2.0 + ((Vef / KbT) + (EDonor / KbT))) - (Ec / KbT)) / mu)))) elif NaChar <= 6.5e-96: tmp = t_0 elif NaChar <= 54000000.0: tmp = t_1 + (NdChar / (EDonor * ((1.0 / KbT) - (mu * ((((((Ec / EDonor) / KbT) - (Vef / (EDonor * KbT))) - (2.0 / EDonor)) / mu) + (-1.0 / (EDonor * KbT))))))) elif NaChar <= 4.2e+31: tmp = t_0 else: tmp = t_1 + (NdChar / (EDonor * ((1.0 / KbT) + (((2.0 + ((Vef / KbT) + (mu / KbT))) - (Ec / KbT)) / EDonor)))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(NaChar / Float64(Float64(EAccept / KbT) + 2.0)) - Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT))))) t_1 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT)))) tmp = 0.0 if (NaChar <= -1.65e-20) tmp = Float64(t_1 + Float64(NdChar / Float64(mu * Float64(Float64(1.0 / KbT) + Float64(Float64(Float64(2.0 + Float64(Float64(Vef / KbT) + Float64(EDonor / KbT))) - Float64(Ec / KbT)) / mu))))); elseif (NaChar <= 6.5e-96) tmp = t_0; elseif (NaChar <= 54000000.0) tmp = Float64(t_1 + Float64(NdChar / Float64(EDonor * Float64(Float64(1.0 / KbT) - Float64(mu * Float64(Float64(Float64(Float64(Float64(Float64(Ec / EDonor) / KbT) - Float64(Vef / Float64(EDonor * KbT))) - Float64(2.0 / EDonor)) / mu) + Float64(-1.0 / Float64(EDonor * KbT)))))))); elseif (NaChar <= 4.2e+31) tmp = t_0; else tmp = Float64(t_1 + Float64(NdChar / Float64(EDonor * Float64(Float64(1.0 / KbT) + Float64(Float64(Float64(2.0 + Float64(Float64(Vef / KbT) + Float64(mu / KbT))) - Float64(Ec / KbT)) / EDonor))))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT)))); t_1 = NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT))); tmp = 0.0; if (NaChar <= -1.65e-20) tmp = t_1 + (NdChar / (mu * ((1.0 / KbT) + (((2.0 + ((Vef / KbT) + (EDonor / KbT))) - (Ec / KbT)) / mu)))); elseif (NaChar <= 6.5e-96) tmp = t_0; elseif (NaChar <= 54000000.0) tmp = t_1 + (NdChar / (EDonor * ((1.0 / KbT) - (mu * ((((((Ec / EDonor) / KbT) - (Vef / (EDonor * KbT))) - (2.0 / EDonor)) / mu) + (-1.0 / (EDonor * KbT))))))); elseif (NaChar <= 4.2e+31) tmp = t_0; else tmp = t_1 + (NdChar / (EDonor * ((1.0 / KbT) + (((2.0 + ((Vef / KbT) + (mu / KbT))) - (Ec / KbT)) / EDonor)))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(NaChar / N[(N[(EAccept / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision] - N[(NdChar / N[(-1.0 - N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -1.65e-20], N[(t$95$1 + N[(NdChar / N[(mu * N[(N[(1.0 / KbT), $MachinePrecision] + N[(N[(N[(2.0 + N[(N[(Vef / KbT), $MachinePrecision] + N[(EDonor / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision] / mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 6.5e-96], t$95$0, If[LessEqual[NaChar, 54000000.0], N[(t$95$1 + N[(NdChar / N[(EDonor * N[(N[(1.0 / KbT), $MachinePrecision] - N[(mu * N[(N[(N[(N[(N[(N[(Ec / EDonor), $MachinePrecision] / KbT), $MachinePrecision] - N[(Vef / N[(EDonor * KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(2.0 / EDonor), $MachinePrecision]), $MachinePrecision] / mu), $MachinePrecision] + N[(-1.0 / N[(EDonor * KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 4.2e+31], t$95$0, N[(t$95$1 + N[(NdChar / N[(EDonor * N[(N[(1.0 / KbT), $MachinePrecision] + N[(N[(N[(2.0 + N[(N[(Vef / KbT), $MachinePrecision] + N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision] / EDonor), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{\frac{EAccept}{KbT} + 2} - \frac{NdChar}{-1 - e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}}\\
t_1 := \frac{NaChar}{1 + e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}}\\
\mathbf{if}\;NaChar \leq -1.65 \cdot 10^{-20}:\\
\;\;\;\;t\_1 + \frac{NdChar}{mu \cdot \left(\frac{1}{KbT} + \frac{\left(2 + \left(\frac{Vef}{KbT} + \frac{EDonor}{KbT}\right)\right) - \frac{Ec}{KbT}}{mu}\right)}\\
\mathbf{elif}\;NaChar \leq 6.5 \cdot 10^{-96}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;NaChar \leq 54000000:\\
\;\;\;\;t\_1 + \frac{NdChar}{EDonor \cdot \left(\frac{1}{KbT} - mu \cdot \left(\frac{\left(\frac{\frac{Ec}{EDonor}}{KbT} - \frac{Vef}{EDonor \cdot KbT}\right) - \frac{2}{EDonor}}{mu} + \frac{-1}{EDonor \cdot KbT}\right)\right)}\\
\mathbf{elif}\;NaChar \leq 4.2 \cdot 10^{+31}:\\
\;\;\;\;t\_0\\
\mathbf{else}:\\
\;\;\;\;t\_1 + \frac{NdChar}{EDonor \cdot \left(\frac{1}{KbT} + \frac{\left(2 + \left(\frac{Vef}{KbT} + \frac{mu}{KbT}\right)\right) - \frac{Ec}{KbT}}{EDonor}\right)}\\
\end{array}
\end{array}
if NaChar < -1.65e-20Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 64.4%
Taylor expanded in mu around -inf 75.2%
if -1.65e-20 < NaChar < 6.50000000000000001e-96 or 5.4e7 < NaChar < 4.19999999999999958e31Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 85.1%
Taylor expanded in EAccept around 0 78.2%
+-commutative78.2%
Simplified78.2%
if 6.50000000000000001e-96 < NaChar < 5.4e7Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 42.9%
Taylor expanded in EDonor around -inf 59.9%
Taylor expanded in mu around -inf 64.3%
associate-*r*64.3%
neg-mul-164.3%
associate-*r/64.3%
mul-1-neg64.3%
associate--l+64.3%
associate-*r/64.3%
metadata-eval64.3%
*-commutative64.3%
associate-/r*68.6%
*-commutative68.6%
Simplified68.6%
if 4.19999999999999958e31 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 63.3%
Taylor expanded in EDonor around -inf 74.2%
Final simplification75.6%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (or (<= NaChar -4.6e-20) (not (<= NaChar 3.9e-95)))
(+
(/ NaChar (+ 1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT))))
(/
NdChar
(*
Ec
(+
(/ (+ 2.0 (+ (+ (/ Vef KbT) (/ mu KbT)) (/ EDonor KbT))) Ec)
(/ -1.0 KbT)))))
(-
(/ NaChar (+ (/ EAccept KbT) 2.0))
(/ NdChar (- -1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT)))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NaChar <= -4.6e-20) || !(NaChar <= 3.9e-95)) {
tmp = (NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / (Ec * (((2.0 + (((Vef / KbT) + (mu / KbT)) + (EDonor / KbT))) / Ec) + (-1.0 / KbT))));
} else {
tmp = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT))));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if ((nachar <= (-4.6d-20)) .or. (.not. (nachar <= 3.9d-95))) then
tmp = (nachar / (1.0d0 + exp(((vef - ((mu - eaccept) - ev)) / kbt)))) + (ndchar / (ec * (((2.0d0 + (((vef / kbt) + (mu / kbt)) + (edonor / kbt))) / ec) + ((-1.0d0) / kbt))))
else
tmp = (nachar / ((eaccept / kbt) + 2.0d0)) - (ndchar / ((-1.0d0) - exp(((edonor + (mu + (vef - ec))) / kbt))))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NaChar <= -4.6e-20) || !(NaChar <= 3.9e-95)) {
tmp = (NaChar / (1.0 + Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / (Ec * (((2.0 + (((Vef / KbT) + (mu / KbT)) + (EDonor / KbT))) / Ec) + (-1.0 / KbT))));
} else {
tmp = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if (NaChar <= -4.6e-20) or not (NaChar <= 3.9e-95): tmp = (NaChar / (1.0 + math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / (Ec * (((2.0 + (((Vef / KbT) + (mu / KbT)) + (EDonor / KbT))) / Ec) + (-1.0 / KbT)))) else: tmp = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if ((NaChar <= -4.6e-20) || !(NaChar <= 3.9e-95)) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT)))) + Float64(NdChar / Float64(Ec * Float64(Float64(Float64(2.0 + Float64(Float64(Float64(Vef / KbT) + Float64(mu / KbT)) + Float64(EDonor / KbT))) / Ec) + Float64(-1.0 / KbT))))); else tmp = Float64(Float64(NaChar / Float64(Float64(EAccept / KbT) + 2.0)) - Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT))))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if ((NaChar <= -4.6e-20) || ~((NaChar <= 3.9e-95))) tmp = (NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / (Ec * (((2.0 + (((Vef / KbT) + (mu / KbT)) + (EDonor / KbT))) / Ec) + (-1.0 / KbT)))); else tmp = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT)))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[Or[LessEqual[NaChar, -4.6e-20], N[Not[LessEqual[NaChar, 3.9e-95]], $MachinePrecision]], N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(Ec * N[(N[(N[(2.0 + N[(N[(N[(Vef / KbT), $MachinePrecision] + N[(mu / KbT), $MachinePrecision]), $MachinePrecision] + N[(EDonor / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / Ec), $MachinePrecision] + N[(-1.0 / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar / N[(N[(EAccept / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision] - N[(NdChar / N[(-1.0 - N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NaChar \leq -4.6 \cdot 10^{-20} \lor \neg \left(NaChar \leq 3.9 \cdot 10^{-95}\right):\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}} + \frac{NdChar}{Ec \cdot \left(\frac{2 + \left(\left(\frac{Vef}{KbT} + \frac{mu}{KbT}\right) + \frac{EDonor}{KbT}\right)}{Ec} + \frac{-1}{KbT}\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{\frac{EAccept}{KbT} + 2} - \frac{NdChar}{-1 - e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}}\\
\end{array}
\end{array}
if NaChar < -4.5999999999999998e-20 or 3.9e-95 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 60.0%
Taylor expanded in Ec around -inf 65.8%
associate-*r*65.8%
mul-1-neg65.8%
+-commutative65.8%
mul-1-neg65.8%
unsub-neg65.8%
+-commutative65.8%
Simplified65.8%
if -4.5999999999999998e-20 < NaChar < 3.9e-95Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 86.2%
Taylor expanded in EAccept around 0 78.1%
+-commutative78.1%
Simplified78.1%
Final simplification70.7%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NaChar (+ 1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT))))))
(if (<= NaChar -5.4e-21)
(+
t_0
(/
NdChar
(*
mu
(+
(/ 1.0 KbT)
(/ (- (+ 2.0 (+ (/ Vef KbT) (/ EDonor KbT))) (/ Ec KbT)) mu)))))
(if (<= NaChar 3.7e-95)
(-
(/ NaChar (+ (/ EAccept KbT) 2.0))
(/ NdChar (- -1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT)))))
(+
t_0
(/
NdChar
(*
EDonor
(+
(/ 1.0 KbT)
(/ (- (+ 2.0 (+ (/ Vef KbT) (/ mu KbT))) (/ Ec KbT)) EDonor)))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)));
double tmp;
if (NaChar <= -5.4e-21) {
tmp = t_0 + (NdChar / (mu * ((1.0 / KbT) + (((2.0 + ((Vef / KbT) + (EDonor / KbT))) - (Ec / KbT)) / mu))));
} else if (NaChar <= 3.7e-95) {
tmp = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT))));
} else {
tmp = t_0 + (NdChar / (EDonor * ((1.0 / KbT) + (((2.0 + ((Vef / KbT) + (mu / KbT))) - (Ec / KbT)) / EDonor))));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: tmp
t_0 = nachar / (1.0d0 + exp(((vef - ((mu - eaccept) - ev)) / kbt)))
if (nachar <= (-5.4d-21)) then
tmp = t_0 + (ndchar / (mu * ((1.0d0 / kbt) + (((2.0d0 + ((vef / kbt) + (edonor / kbt))) - (ec / kbt)) / mu))))
else if (nachar <= 3.7d-95) then
tmp = (nachar / ((eaccept / kbt) + 2.0d0)) - (ndchar / ((-1.0d0) - exp(((edonor + (mu + (vef - ec))) / kbt))))
else
tmp = t_0 + (ndchar / (edonor * ((1.0d0 / kbt) + (((2.0d0 + ((vef / kbt) + (mu / kbt))) - (ec / kbt)) / edonor))))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NaChar / (1.0 + Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)));
double tmp;
if (NaChar <= -5.4e-21) {
tmp = t_0 + (NdChar / (mu * ((1.0 / KbT) + (((2.0 + ((Vef / KbT) + (EDonor / KbT))) - (Ec / KbT)) / mu))));
} else if (NaChar <= 3.7e-95) {
tmp = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT))));
} else {
tmp = t_0 + (NdChar / (EDonor * ((1.0 / KbT) + (((2.0 + ((Vef / KbT) + (mu / KbT))) - (Ec / KbT)) / EDonor))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NaChar / (1.0 + math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT))) tmp = 0 if NaChar <= -5.4e-21: tmp = t_0 + (NdChar / (mu * ((1.0 / KbT) + (((2.0 + ((Vef / KbT) + (EDonor / KbT))) - (Ec / KbT)) / mu)))) elif NaChar <= 3.7e-95: tmp = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) else: tmp = t_0 + (NdChar / (EDonor * ((1.0 / KbT) + (((2.0 + ((Vef / KbT) + (mu / KbT))) - (Ec / KbT)) / EDonor)))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT)))) tmp = 0.0 if (NaChar <= -5.4e-21) tmp = Float64(t_0 + Float64(NdChar / Float64(mu * Float64(Float64(1.0 / KbT) + Float64(Float64(Float64(2.0 + Float64(Float64(Vef / KbT) + Float64(EDonor / KbT))) - Float64(Ec / KbT)) / mu))))); elseif (NaChar <= 3.7e-95) tmp = Float64(Float64(NaChar / Float64(Float64(EAccept / KbT) + 2.0)) - Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT))))); else tmp = Float64(t_0 + Float64(NdChar / Float64(EDonor * Float64(Float64(1.0 / KbT) + Float64(Float64(Float64(2.0 + Float64(Float64(Vef / KbT) + Float64(mu / KbT))) - Float64(Ec / KbT)) / EDonor))))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT))); tmp = 0.0; if (NaChar <= -5.4e-21) tmp = t_0 + (NdChar / (mu * ((1.0 / KbT) + (((2.0 + ((Vef / KbT) + (EDonor / KbT))) - (Ec / KbT)) / mu)))); elseif (NaChar <= 3.7e-95) tmp = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT)))); else tmp = t_0 + (NdChar / (EDonor * ((1.0 / KbT) + (((2.0 + ((Vef / KbT) + (mu / KbT))) - (Ec / KbT)) / EDonor)))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -5.4e-21], N[(t$95$0 + N[(NdChar / N[(mu * N[(N[(1.0 / KbT), $MachinePrecision] + N[(N[(N[(2.0 + N[(N[(Vef / KbT), $MachinePrecision] + N[(EDonor / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision] / mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 3.7e-95], N[(N[(NaChar / N[(N[(EAccept / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision] - N[(NdChar / N[(-1.0 - N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(t$95$0 + N[(NdChar / N[(EDonor * N[(N[(1.0 / KbT), $MachinePrecision] + N[(N[(N[(2.0 + N[(N[(Vef / KbT), $MachinePrecision] + N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision] / EDonor), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}}\\
\mathbf{if}\;NaChar \leq -5.4 \cdot 10^{-21}:\\
\;\;\;\;t\_0 + \frac{NdChar}{mu \cdot \left(\frac{1}{KbT} + \frac{\left(2 + \left(\frac{Vef}{KbT} + \frac{EDonor}{KbT}\right)\right) - \frac{Ec}{KbT}}{mu}\right)}\\
\mathbf{elif}\;NaChar \leq 3.7 \cdot 10^{-95}:\\
\;\;\;\;\frac{NaChar}{\frac{EAccept}{KbT} + 2} - \frac{NdChar}{-1 - e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;t\_0 + \frac{NdChar}{EDonor \cdot \left(\frac{1}{KbT} + \frac{\left(2 + \left(\frac{Vef}{KbT} + \frac{mu}{KbT}\right)\right) - \frac{Ec}{KbT}}{EDonor}\right)}\\
\end{array}
\end{array}
if NaChar < -5.4000000000000002e-21Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 64.4%
Taylor expanded in mu around -inf 75.2%
if -5.4000000000000002e-21 < NaChar < 3.69999999999999994e-95Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 86.2%
Taylor expanded in EAccept around 0 78.1%
+-commutative78.1%
Simplified78.1%
if 3.69999999999999994e-95 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 57.0%
Taylor expanded in EDonor around -inf 68.8%
Final simplification74.1%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NaChar (+ 1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT))))))
(if (<= NaChar -7e-12)
(-
t_0
(/
NdChar
(+
(/ Ec KbT)
(-
(* mu (- (/ -1.0 KbT) (+ (/ Vef (* mu KbT)) (/ EDonor (* mu KbT)))))
2.0))))
(if (<= NaChar 3.1e-95)
(-
(/ NaChar (+ (/ EAccept KbT) 2.0))
(/ NdChar (- -1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT)))))
(+
t_0
(/
NdChar
(*
EDonor
(+
(/ 1.0 KbT)
(/ (- (+ 2.0 (+ (/ Vef KbT) (/ mu KbT))) (/ Ec KbT)) EDonor)))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)));
double tmp;
if (NaChar <= -7e-12) {
tmp = t_0 - (NdChar / ((Ec / KbT) + ((mu * ((-1.0 / KbT) - ((Vef / (mu * KbT)) + (EDonor / (mu * KbT))))) - 2.0)));
} else if (NaChar <= 3.1e-95) {
tmp = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT))));
} else {
tmp = t_0 + (NdChar / (EDonor * ((1.0 / KbT) + (((2.0 + ((Vef / KbT) + (mu / KbT))) - (Ec / KbT)) / EDonor))));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: tmp
t_0 = nachar / (1.0d0 + exp(((vef - ((mu - eaccept) - ev)) / kbt)))
if (nachar <= (-7d-12)) then
tmp = t_0 - (ndchar / ((ec / kbt) + ((mu * (((-1.0d0) / kbt) - ((vef / (mu * kbt)) + (edonor / (mu * kbt))))) - 2.0d0)))
else if (nachar <= 3.1d-95) then
tmp = (nachar / ((eaccept / kbt) + 2.0d0)) - (ndchar / ((-1.0d0) - exp(((edonor + (mu + (vef - ec))) / kbt))))
else
tmp = t_0 + (ndchar / (edonor * ((1.0d0 / kbt) + (((2.0d0 + ((vef / kbt) + (mu / kbt))) - (ec / kbt)) / edonor))))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NaChar / (1.0 + Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)));
double tmp;
if (NaChar <= -7e-12) {
tmp = t_0 - (NdChar / ((Ec / KbT) + ((mu * ((-1.0 / KbT) - ((Vef / (mu * KbT)) + (EDonor / (mu * KbT))))) - 2.0)));
} else if (NaChar <= 3.1e-95) {
tmp = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT))));
} else {
tmp = t_0 + (NdChar / (EDonor * ((1.0 / KbT) + (((2.0 + ((Vef / KbT) + (mu / KbT))) - (Ec / KbT)) / EDonor))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NaChar / (1.0 + math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT))) tmp = 0 if NaChar <= -7e-12: tmp = t_0 - (NdChar / ((Ec / KbT) + ((mu * ((-1.0 / KbT) - ((Vef / (mu * KbT)) + (EDonor / (mu * KbT))))) - 2.0))) elif NaChar <= 3.1e-95: tmp = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) else: tmp = t_0 + (NdChar / (EDonor * ((1.0 / KbT) + (((2.0 + ((Vef / KbT) + (mu / KbT))) - (Ec / KbT)) / EDonor)))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT)))) tmp = 0.0 if (NaChar <= -7e-12) tmp = Float64(t_0 - Float64(NdChar / Float64(Float64(Ec / KbT) + Float64(Float64(mu * Float64(Float64(-1.0 / KbT) - Float64(Float64(Vef / Float64(mu * KbT)) + Float64(EDonor / Float64(mu * KbT))))) - 2.0)))); elseif (NaChar <= 3.1e-95) tmp = Float64(Float64(NaChar / Float64(Float64(EAccept / KbT) + 2.0)) - Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT))))); else tmp = Float64(t_0 + Float64(NdChar / Float64(EDonor * Float64(Float64(1.0 / KbT) + Float64(Float64(Float64(2.0 + Float64(Float64(Vef / KbT) + Float64(mu / KbT))) - Float64(Ec / KbT)) / EDonor))))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT))); tmp = 0.0; if (NaChar <= -7e-12) tmp = t_0 - (NdChar / ((Ec / KbT) + ((mu * ((-1.0 / KbT) - ((Vef / (mu * KbT)) + (EDonor / (mu * KbT))))) - 2.0))); elseif (NaChar <= 3.1e-95) tmp = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT)))); else tmp = t_0 + (NdChar / (EDonor * ((1.0 / KbT) + (((2.0 + ((Vef / KbT) + (mu / KbT))) - (Ec / KbT)) / EDonor)))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -7e-12], N[(t$95$0 - N[(NdChar / N[(N[(Ec / KbT), $MachinePrecision] + N[(N[(mu * N[(N[(-1.0 / KbT), $MachinePrecision] - N[(N[(Vef / N[(mu * KbT), $MachinePrecision]), $MachinePrecision] + N[(EDonor / N[(mu * KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - 2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 3.1e-95], N[(N[(NaChar / N[(N[(EAccept / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision] - N[(NdChar / N[(-1.0 - N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(t$95$0 + N[(NdChar / N[(EDonor * N[(N[(1.0 / KbT), $MachinePrecision] + N[(N[(N[(2.0 + N[(N[(Vef / KbT), $MachinePrecision] + N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision] / EDonor), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}}\\
\mathbf{if}\;NaChar \leq -7 \cdot 10^{-12}:\\
\;\;\;\;t\_0 - \frac{NdChar}{\frac{Ec}{KbT} + \left(mu \cdot \left(\frac{-1}{KbT} - \left(\frac{Vef}{mu \cdot KbT} + \frac{EDonor}{mu \cdot KbT}\right)\right) - 2\right)}\\
\mathbf{elif}\;NaChar \leq 3.1 \cdot 10^{-95}:\\
\;\;\;\;\frac{NaChar}{\frac{EAccept}{KbT} + 2} - \frac{NdChar}{-1 - e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;t\_0 + \frac{NdChar}{EDonor \cdot \left(\frac{1}{KbT} + \frac{\left(2 + \left(\frac{Vef}{KbT} + \frac{mu}{KbT}\right)\right) - \frac{Ec}{KbT}}{EDonor}\right)}\\
\end{array}
\end{array}
if NaChar < -7.0000000000000001e-12Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 63.8%
Taylor expanded in mu around inf 73.0%
+-commutative73.0%
*-commutative73.0%
*-commutative73.0%
Simplified73.0%
if -7.0000000000000001e-12 < NaChar < 3.09999999999999992e-95Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 86.4%
Taylor expanded in EAccept around 0 77.4%
+-commutative77.4%
Simplified77.4%
if 3.09999999999999992e-95 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 57.0%
Taylor expanded in EDonor around -inf 68.8%
Final simplification73.3%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NaChar (+ 1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT))))))
(if (<= NaChar -2e-14)
(+
t_0
(/
NdChar
(-
(+ 2.0 (- (/ EDonor KbT) (* mu (- (/ -1.0 KbT) (/ Vef (* mu KbT))))))
(/ Ec KbT))))
(if (<= NaChar 1.85e-51)
(-
(/ NaChar (+ (/ EAccept KbT) 2.0))
(/ NdChar (- -1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT)))))
(+
t_0
(/ NdChar (/ (* EDonor (+ 1.0 (/ (- (+ mu Vef) Ec) EDonor))) KbT)))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)));
double tmp;
if (NaChar <= -2e-14) {
tmp = t_0 + (NdChar / ((2.0 + ((EDonor / KbT) - (mu * ((-1.0 / KbT) - (Vef / (mu * KbT)))))) - (Ec / KbT)));
} else if (NaChar <= 1.85e-51) {
tmp = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT))));
} else {
tmp = t_0 + (NdChar / ((EDonor * (1.0 + (((mu + Vef) - Ec) / EDonor))) / KbT));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: tmp
t_0 = nachar / (1.0d0 + exp(((vef - ((mu - eaccept) - ev)) / kbt)))
if (nachar <= (-2d-14)) then
tmp = t_0 + (ndchar / ((2.0d0 + ((edonor / kbt) - (mu * (((-1.0d0) / kbt) - (vef / (mu * kbt)))))) - (ec / kbt)))
else if (nachar <= 1.85d-51) then
tmp = (nachar / ((eaccept / kbt) + 2.0d0)) - (ndchar / ((-1.0d0) - exp(((edonor + (mu + (vef - ec))) / kbt))))
else
tmp = t_0 + (ndchar / ((edonor * (1.0d0 + (((mu + vef) - ec) / edonor))) / kbt))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NaChar / (1.0 + Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)));
double tmp;
if (NaChar <= -2e-14) {
tmp = t_0 + (NdChar / ((2.0 + ((EDonor / KbT) - (mu * ((-1.0 / KbT) - (Vef / (mu * KbT)))))) - (Ec / KbT)));
} else if (NaChar <= 1.85e-51) {
tmp = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT))));
} else {
tmp = t_0 + (NdChar / ((EDonor * (1.0 + (((mu + Vef) - Ec) / EDonor))) / KbT));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NaChar / (1.0 + math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT))) tmp = 0 if NaChar <= -2e-14: tmp = t_0 + (NdChar / ((2.0 + ((EDonor / KbT) - (mu * ((-1.0 / KbT) - (Vef / (mu * KbT)))))) - (Ec / KbT))) elif NaChar <= 1.85e-51: tmp = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) else: tmp = t_0 + (NdChar / ((EDonor * (1.0 + (((mu + Vef) - Ec) / EDonor))) / KbT)) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT)))) tmp = 0.0 if (NaChar <= -2e-14) tmp = Float64(t_0 + Float64(NdChar / Float64(Float64(2.0 + Float64(Float64(EDonor / KbT) - Float64(mu * Float64(Float64(-1.0 / KbT) - Float64(Vef / Float64(mu * KbT)))))) - Float64(Ec / KbT)))); elseif (NaChar <= 1.85e-51) tmp = Float64(Float64(NaChar / Float64(Float64(EAccept / KbT) + 2.0)) - Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT))))); else tmp = Float64(t_0 + Float64(NdChar / Float64(Float64(EDonor * Float64(1.0 + Float64(Float64(Float64(mu + Vef) - Ec) / EDonor))) / KbT))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT))); tmp = 0.0; if (NaChar <= -2e-14) tmp = t_0 + (NdChar / ((2.0 + ((EDonor / KbT) - (mu * ((-1.0 / KbT) - (Vef / (mu * KbT)))))) - (Ec / KbT))); elseif (NaChar <= 1.85e-51) tmp = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT)))); else tmp = t_0 + (NdChar / ((EDonor * (1.0 + (((mu + Vef) - Ec) / EDonor))) / KbT)); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -2e-14], N[(t$95$0 + N[(NdChar / N[(N[(2.0 + N[(N[(EDonor / KbT), $MachinePrecision] - N[(mu * N[(N[(-1.0 / KbT), $MachinePrecision] - N[(Vef / N[(mu * KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 1.85e-51], N[(N[(NaChar / N[(N[(EAccept / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision] - N[(NdChar / N[(-1.0 - N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(t$95$0 + N[(NdChar / N[(N[(EDonor * N[(1.0 + N[(N[(N[(mu + Vef), $MachinePrecision] - Ec), $MachinePrecision] / EDonor), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}}\\
\mathbf{if}\;NaChar \leq -2 \cdot 10^{-14}:\\
\;\;\;\;t\_0 + \frac{NdChar}{\left(2 + \left(\frac{EDonor}{KbT} - mu \cdot \left(\frac{-1}{KbT} - \frac{Vef}{mu \cdot KbT}\right)\right)\right) - \frac{Ec}{KbT}}\\
\mathbf{elif}\;NaChar \leq 1.85 \cdot 10^{-51}:\\
\;\;\;\;\frac{NaChar}{\frac{EAccept}{KbT} + 2} - \frac{NdChar}{-1 - e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;t\_0 + \frac{NdChar}{\frac{EDonor \cdot \left(1 + \frac{\left(mu + Vef\right) - Ec}{EDonor}\right)}{KbT}}\\
\end{array}
\end{array}
if NaChar < -2e-14Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 63.8%
Taylor expanded in mu around inf 70.0%
*-commutative70.0%
Simplified70.0%
if -2e-14 < NaChar < 1.84999999999999987e-51Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 84.8%
Taylor expanded in EAccept around 0 75.4%
+-commutative75.4%
Simplified75.4%
if 1.84999999999999987e-51 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 57.9%
Taylor expanded in EDonor around -inf 69.7%
Taylor expanded in KbT around 0 62.0%
Final simplification69.7%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NaChar (+ 1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT))))))
(if (<= NaChar -7.5e-14)
(+ t_0 (/ NdChar 2.0))
(if (<= NaChar 1.08e-44)
(-
(* NaChar 0.5)
(/ NdChar (- -1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT)))))
(if (<= NaChar 0.00037)
(+ t_0 (/ NdChar (/ EDonor KbT)))
(if (<= NaChar 9.2e+48)
(-
(/ NaChar (+ (/ Vef KbT) 2.0))
(/ NdChar (- -1.0 (exp (/ (- (+ mu Vef) Ec) KbT)))))
(-
(/ NdChar 2.0)
(*
NaChar
(/
1.0
(- -1.0 (exp (/ (+ Vef (+ EAccept (- Ev mu))) KbT))))))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)));
double tmp;
if (NaChar <= -7.5e-14) {
tmp = t_0 + (NdChar / 2.0);
} else if (NaChar <= 1.08e-44) {
tmp = (NaChar * 0.5) - (NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT))));
} else if (NaChar <= 0.00037) {
tmp = t_0 + (NdChar / (EDonor / KbT));
} else if (NaChar <= 9.2e+48) {
tmp = (NaChar / ((Vef / KbT) + 2.0)) - (NdChar / (-1.0 - exp((((mu + Vef) - Ec) / KbT))));
} else {
tmp = (NdChar / 2.0) - (NaChar * (1.0 / (-1.0 - exp(((Vef + (EAccept + (Ev - mu))) / KbT)))));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: tmp
t_0 = nachar / (1.0d0 + exp(((vef - ((mu - eaccept) - ev)) / kbt)))
if (nachar <= (-7.5d-14)) then
tmp = t_0 + (ndchar / 2.0d0)
else if (nachar <= 1.08d-44) then
tmp = (nachar * 0.5d0) - (ndchar / ((-1.0d0) - exp(((edonor + (mu + (vef - ec))) / kbt))))
else if (nachar <= 0.00037d0) then
tmp = t_0 + (ndchar / (edonor / kbt))
else if (nachar <= 9.2d+48) then
tmp = (nachar / ((vef / kbt) + 2.0d0)) - (ndchar / ((-1.0d0) - exp((((mu + vef) - ec) / kbt))))
else
tmp = (ndchar / 2.0d0) - (nachar * (1.0d0 / ((-1.0d0) - exp(((vef + (eaccept + (ev - mu))) / kbt)))))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NaChar / (1.0 + Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)));
double tmp;
if (NaChar <= -7.5e-14) {
tmp = t_0 + (NdChar / 2.0);
} else if (NaChar <= 1.08e-44) {
tmp = (NaChar * 0.5) - (NdChar / (-1.0 - Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT))));
} else if (NaChar <= 0.00037) {
tmp = t_0 + (NdChar / (EDonor / KbT));
} else if (NaChar <= 9.2e+48) {
tmp = (NaChar / ((Vef / KbT) + 2.0)) - (NdChar / (-1.0 - Math.exp((((mu + Vef) - Ec) / KbT))));
} else {
tmp = (NdChar / 2.0) - (NaChar * (1.0 / (-1.0 - Math.exp(((Vef + (EAccept + (Ev - mu))) / KbT)))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NaChar / (1.0 + math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT))) tmp = 0 if NaChar <= -7.5e-14: tmp = t_0 + (NdChar / 2.0) elif NaChar <= 1.08e-44: tmp = (NaChar * 0.5) - (NdChar / (-1.0 - math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) elif NaChar <= 0.00037: tmp = t_0 + (NdChar / (EDonor / KbT)) elif NaChar <= 9.2e+48: tmp = (NaChar / ((Vef / KbT) + 2.0)) - (NdChar / (-1.0 - math.exp((((mu + Vef) - Ec) / KbT)))) else: tmp = (NdChar / 2.0) - (NaChar * (1.0 / (-1.0 - math.exp(((Vef + (EAccept + (Ev - mu))) / KbT))))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT)))) tmp = 0.0 if (NaChar <= -7.5e-14) tmp = Float64(t_0 + Float64(NdChar / 2.0)); elseif (NaChar <= 1.08e-44) tmp = Float64(Float64(NaChar * 0.5) - Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT))))); elseif (NaChar <= 0.00037) tmp = Float64(t_0 + Float64(NdChar / Float64(EDonor / KbT))); elseif (NaChar <= 9.2e+48) tmp = Float64(Float64(NaChar / Float64(Float64(Vef / KbT) + 2.0)) - Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(Float64(mu + Vef) - Ec) / KbT))))); else tmp = Float64(Float64(NdChar / 2.0) - Float64(NaChar * Float64(1.0 / Float64(-1.0 - exp(Float64(Float64(Vef + Float64(EAccept + Float64(Ev - mu))) / KbT)))))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT))); tmp = 0.0; if (NaChar <= -7.5e-14) tmp = t_0 + (NdChar / 2.0); elseif (NaChar <= 1.08e-44) tmp = (NaChar * 0.5) - (NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT)))); elseif (NaChar <= 0.00037) tmp = t_0 + (NdChar / (EDonor / KbT)); elseif (NaChar <= 9.2e+48) tmp = (NaChar / ((Vef / KbT) + 2.0)) - (NdChar / (-1.0 - exp((((mu + Vef) - Ec) / KbT)))); else tmp = (NdChar / 2.0) - (NaChar * (1.0 / (-1.0 - exp(((Vef + (EAccept + (Ev - mu))) / KbT))))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -7.5e-14], N[(t$95$0 + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 1.08e-44], N[(N[(NaChar * 0.5), $MachinePrecision] - N[(NdChar / N[(-1.0 - N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 0.00037], N[(t$95$0 + N[(NdChar / N[(EDonor / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 9.2e+48], N[(N[(NaChar / N[(N[(Vef / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision] - N[(NdChar / N[(-1.0 - N[Exp[N[(N[(N[(mu + Vef), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar / 2.0), $MachinePrecision] - N[(NaChar * N[(1.0 / N[(-1.0 - N[Exp[N[(N[(Vef + N[(EAccept + N[(Ev - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}}\\
\mathbf{if}\;NaChar \leq -7.5 \cdot 10^{-14}:\\
\;\;\;\;t\_0 + \frac{NdChar}{2}\\
\mathbf{elif}\;NaChar \leq 1.08 \cdot 10^{-44}:\\
\;\;\;\;NaChar \cdot 0.5 - \frac{NdChar}{-1 - e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}}\\
\mathbf{elif}\;NaChar \leq 0.00037:\\
\;\;\;\;t\_0 + \frac{NdChar}{\frac{EDonor}{KbT}}\\
\mathbf{elif}\;NaChar \leq 9.2 \cdot 10^{+48}:\\
\;\;\;\;\frac{NaChar}{\frac{Vef}{KbT} + 2} - \frac{NdChar}{-1 - e^{\frac{\left(mu + Vef\right) - Ec}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{2} - NaChar \cdot \frac{1}{-1 - e^{\frac{Vef + \left(EAccept + \left(Ev - mu\right)\right)}{KbT}}}\\
\end{array}
\end{array}
if NaChar < -7.4999999999999996e-14Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 61.9%
if -7.4999999999999996e-14 < NaChar < 1.07999999999999994e-44Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 68.6%
*-commutative68.6%
Simplified68.6%
if 1.07999999999999994e-44 < NaChar < 3.6999999999999999e-4Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 45.0%
Taylor expanded in EDonor around inf 67.7%
if 3.6999999999999999e-4 < NaChar < 9.2000000000000001e48Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 60.8%
Taylor expanded in Vef around 0 45.4%
+-commutative45.4%
Simplified45.4%
Taylor expanded in EDonor around 0 45.4%
if 9.2000000000000001e48 < NaChar Initial program 99.9%
Simplified99.9%
div-inv100.0%
+-commutative100.0%
associate-+l-100.0%
Applied egg-rr100.0%
Taylor expanded in KbT around inf 58.0%
Final simplification63.4%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NaChar (+ 1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT))))))
(if (<= NaChar -4.5e-11)
(+ t_0 (/ NdChar 2.0))
(if (<= NaChar 1.09e-44)
(-
(* NaChar 0.5)
(/ NdChar (- -1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT)))))
(if (<= NaChar 0.00037)
(+ t_0 (* KbT (/ NdChar EDonor)))
(if (<= NaChar 3.8e+49)
(-
(/ NaChar (+ (/ Vef KbT) 2.0))
(/ NdChar (- -1.0 (exp (/ (- (+ mu Vef) Ec) KbT)))))
(-
(/ NdChar 2.0)
(*
NaChar
(/
1.0
(- -1.0 (exp (/ (+ Vef (+ EAccept (- Ev mu))) KbT))))))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)));
double tmp;
if (NaChar <= -4.5e-11) {
tmp = t_0 + (NdChar / 2.0);
} else if (NaChar <= 1.09e-44) {
tmp = (NaChar * 0.5) - (NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT))));
} else if (NaChar <= 0.00037) {
tmp = t_0 + (KbT * (NdChar / EDonor));
} else if (NaChar <= 3.8e+49) {
tmp = (NaChar / ((Vef / KbT) + 2.0)) - (NdChar / (-1.0 - exp((((mu + Vef) - Ec) / KbT))));
} else {
tmp = (NdChar / 2.0) - (NaChar * (1.0 / (-1.0 - exp(((Vef + (EAccept + (Ev - mu))) / KbT)))));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: tmp
t_0 = nachar / (1.0d0 + exp(((vef - ((mu - eaccept) - ev)) / kbt)))
if (nachar <= (-4.5d-11)) then
tmp = t_0 + (ndchar / 2.0d0)
else if (nachar <= 1.09d-44) then
tmp = (nachar * 0.5d0) - (ndchar / ((-1.0d0) - exp(((edonor + (mu + (vef - ec))) / kbt))))
else if (nachar <= 0.00037d0) then
tmp = t_0 + (kbt * (ndchar / edonor))
else if (nachar <= 3.8d+49) then
tmp = (nachar / ((vef / kbt) + 2.0d0)) - (ndchar / ((-1.0d0) - exp((((mu + vef) - ec) / kbt))))
else
tmp = (ndchar / 2.0d0) - (nachar * (1.0d0 / ((-1.0d0) - exp(((vef + (eaccept + (ev - mu))) / kbt)))))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NaChar / (1.0 + Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)));
double tmp;
if (NaChar <= -4.5e-11) {
tmp = t_0 + (NdChar / 2.0);
} else if (NaChar <= 1.09e-44) {
tmp = (NaChar * 0.5) - (NdChar / (-1.0 - Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT))));
} else if (NaChar <= 0.00037) {
tmp = t_0 + (KbT * (NdChar / EDonor));
} else if (NaChar <= 3.8e+49) {
tmp = (NaChar / ((Vef / KbT) + 2.0)) - (NdChar / (-1.0 - Math.exp((((mu + Vef) - Ec) / KbT))));
} else {
tmp = (NdChar / 2.0) - (NaChar * (1.0 / (-1.0 - Math.exp(((Vef + (EAccept + (Ev - mu))) / KbT)))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NaChar / (1.0 + math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT))) tmp = 0 if NaChar <= -4.5e-11: tmp = t_0 + (NdChar / 2.0) elif NaChar <= 1.09e-44: tmp = (NaChar * 0.5) - (NdChar / (-1.0 - math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) elif NaChar <= 0.00037: tmp = t_0 + (KbT * (NdChar / EDonor)) elif NaChar <= 3.8e+49: tmp = (NaChar / ((Vef / KbT) + 2.0)) - (NdChar / (-1.0 - math.exp((((mu + Vef) - Ec) / KbT)))) else: tmp = (NdChar / 2.0) - (NaChar * (1.0 / (-1.0 - math.exp(((Vef + (EAccept + (Ev - mu))) / KbT))))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT)))) tmp = 0.0 if (NaChar <= -4.5e-11) tmp = Float64(t_0 + Float64(NdChar / 2.0)); elseif (NaChar <= 1.09e-44) tmp = Float64(Float64(NaChar * 0.5) - Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT))))); elseif (NaChar <= 0.00037) tmp = Float64(t_0 + Float64(KbT * Float64(NdChar / EDonor))); elseif (NaChar <= 3.8e+49) tmp = Float64(Float64(NaChar / Float64(Float64(Vef / KbT) + 2.0)) - Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(Float64(mu + Vef) - Ec) / KbT))))); else tmp = Float64(Float64(NdChar / 2.0) - Float64(NaChar * Float64(1.0 / Float64(-1.0 - exp(Float64(Float64(Vef + Float64(EAccept + Float64(Ev - mu))) / KbT)))))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT))); tmp = 0.0; if (NaChar <= -4.5e-11) tmp = t_0 + (NdChar / 2.0); elseif (NaChar <= 1.09e-44) tmp = (NaChar * 0.5) - (NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT)))); elseif (NaChar <= 0.00037) tmp = t_0 + (KbT * (NdChar / EDonor)); elseif (NaChar <= 3.8e+49) tmp = (NaChar / ((Vef / KbT) + 2.0)) - (NdChar / (-1.0 - exp((((mu + Vef) - Ec) / KbT)))); else tmp = (NdChar / 2.0) - (NaChar * (1.0 / (-1.0 - exp(((Vef + (EAccept + (Ev - mu))) / KbT))))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -4.5e-11], N[(t$95$0 + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 1.09e-44], N[(N[(NaChar * 0.5), $MachinePrecision] - N[(NdChar / N[(-1.0 - N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 0.00037], N[(t$95$0 + N[(KbT * N[(NdChar / EDonor), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 3.8e+49], N[(N[(NaChar / N[(N[(Vef / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision] - N[(NdChar / N[(-1.0 - N[Exp[N[(N[(N[(mu + Vef), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar / 2.0), $MachinePrecision] - N[(NaChar * N[(1.0 / N[(-1.0 - N[Exp[N[(N[(Vef + N[(EAccept + N[(Ev - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}}\\
\mathbf{if}\;NaChar \leq -4.5 \cdot 10^{-11}:\\
\;\;\;\;t\_0 + \frac{NdChar}{2}\\
\mathbf{elif}\;NaChar \leq 1.09 \cdot 10^{-44}:\\
\;\;\;\;NaChar \cdot 0.5 - \frac{NdChar}{-1 - e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}}\\
\mathbf{elif}\;NaChar \leq 0.00037:\\
\;\;\;\;t\_0 + KbT \cdot \frac{NdChar}{EDonor}\\
\mathbf{elif}\;NaChar \leq 3.8 \cdot 10^{+49}:\\
\;\;\;\;\frac{NaChar}{\frac{Vef}{KbT} + 2} - \frac{NdChar}{-1 - e^{\frac{\left(mu + Vef\right) - Ec}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{2} - NaChar \cdot \frac{1}{-1 - e^{\frac{Vef + \left(EAccept + \left(Ev - mu\right)\right)}{KbT}}}\\
\end{array}
\end{array}
if NaChar < -4.5e-11Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 61.9%
if -4.5e-11 < NaChar < 1.09e-44Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 68.6%
*-commutative68.6%
Simplified68.6%
if 1.09e-44 < NaChar < 3.6999999999999999e-4Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 45.0%
Taylor expanded in EDonor around -inf 78.3%
Taylor expanded in EDonor around inf 67.7%
associate-/l*67.7%
Simplified67.7%
if 3.6999999999999999e-4 < NaChar < 3.7999999999999999e49Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 60.8%
Taylor expanded in Vef around 0 45.4%
+-commutative45.4%
Simplified45.4%
Taylor expanded in EDonor around 0 45.4%
if 3.7999999999999999e49 < NaChar Initial program 99.9%
Simplified99.9%
div-inv100.0%
+-commutative100.0%
associate-+l-100.0%
Applied egg-rr100.0%
Taylor expanded in KbT around inf 58.0%
Final simplification63.4%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NaChar (+ 1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT))))))
(if (<= NaChar -3.2e-15)
(+ t_0 (/ NdChar 2.0))
(if (<= NaChar 8.8e-45)
(-
(* NaChar 0.5)
(/ NdChar (- -1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT)))))
(if (<= NaChar 0.00091)
(+ t_0 (* KbT (/ NdChar EDonor)))
(if (<= NaChar 9.8e+48)
(-
(/ NaChar (+ (/ Vef KbT) 2.0))
(/ NdChar (- -1.0 (exp (/ Vef KbT)))))
(-
(/ NdChar 2.0)
(*
NaChar
(/
1.0
(- -1.0 (exp (/ (+ Vef (+ EAccept (- Ev mu))) KbT))))))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)));
double tmp;
if (NaChar <= -3.2e-15) {
tmp = t_0 + (NdChar / 2.0);
} else if (NaChar <= 8.8e-45) {
tmp = (NaChar * 0.5) - (NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT))));
} else if (NaChar <= 0.00091) {
tmp = t_0 + (KbT * (NdChar / EDonor));
} else if (NaChar <= 9.8e+48) {
tmp = (NaChar / ((Vef / KbT) + 2.0)) - (NdChar / (-1.0 - exp((Vef / KbT))));
} else {
tmp = (NdChar / 2.0) - (NaChar * (1.0 / (-1.0 - exp(((Vef + (EAccept + (Ev - mu))) / KbT)))));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: tmp
t_0 = nachar / (1.0d0 + exp(((vef - ((mu - eaccept) - ev)) / kbt)))
if (nachar <= (-3.2d-15)) then
tmp = t_0 + (ndchar / 2.0d0)
else if (nachar <= 8.8d-45) then
tmp = (nachar * 0.5d0) - (ndchar / ((-1.0d0) - exp(((edonor + (mu + (vef - ec))) / kbt))))
else if (nachar <= 0.00091d0) then
tmp = t_0 + (kbt * (ndchar / edonor))
else if (nachar <= 9.8d+48) then
tmp = (nachar / ((vef / kbt) + 2.0d0)) - (ndchar / ((-1.0d0) - exp((vef / kbt))))
else
tmp = (ndchar / 2.0d0) - (nachar * (1.0d0 / ((-1.0d0) - exp(((vef + (eaccept + (ev - mu))) / kbt)))))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NaChar / (1.0 + Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)));
double tmp;
if (NaChar <= -3.2e-15) {
tmp = t_0 + (NdChar / 2.0);
} else if (NaChar <= 8.8e-45) {
tmp = (NaChar * 0.5) - (NdChar / (-1.0 - Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT))));
} else if (NaChar <= 0.00091) {
tmp = t_0 + (KbT * (NdChar / EDonor));
} else if (NaChar <= 9.8e+48) {
tmp = (NaChar / ((Vef / KbT) + 2.0)) - (NdChar / (-1.0 - Math.exp((Vef / KbT))));
} else {
tmp = (NdChar / 2.0) - (NaChar * (1.0 / (-1.0 - Math.exp(((Vef + (EAccept + (Ev - mu))) / KbT)))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NaChar / (1.0 + math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT))) tmp = 0 if NaChar <= -3.2e-15: tmp = t_0 + (NdChar / 2.0) elif NaChar <= 8.8e-45: tmp = (NaChar * 0.5) - (NdChar / (-1.0 - math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) elif NaChar <= 0.00091: tmp = t_0 + (KbT * (NdChar / EDonor)) elif NaChar <= 9.8e+48: tmp = (NaChar / ((Vef / KbT) + 2.0)) - (NdChar / (-1.0 - math.exp((Vef / KbT)))) else: tmp = (NdChar / 2.0) - (NaChar * (1.0 / (-1.0 - math.exp(((Vef + (EAccept + (Ev - mu))) / KbT))))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT)))) tmp = 0.0 if (NaChar <= -3.2e-15) tmp = Float64(t_0 + Float64(NdChar / 2.0)); elseif (NaChar <= 8.8e-45) tmp = Float64(Float64(NaChar * 0.5) - Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT))))); elseif (NaChar <= 0.00091) tmp = Float64(t_0 + Float64(KbT * Float64(NdChar / EDonor))); elseif (NaChar <= 9.8e+48) tmp = Float64(Float64(NaChar / Float64(Float64(Vef / KbT) + 2.0)) - Float64(NdChar / Float64(-1.0 - exp(Float64(Vef / KbT))))); else tmp = Float64(Float64(NdChar / 2.0) - Float64(NaChar * Float64(1.0 / Float64(-1.0 - exp(Float64(Float64(Vef + Float64(EAccept + Float64(Ev - mu))) / KbT)))))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT))); tmp = 0.0; if (NaChar <= -3.2e-15) tmp = t_0 + (NdChar / 2.0); elseif (NaChar <= 8.8e-45) tmp = (NaChar * 0.5) - (NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT)))); elseif (NaChar <= 0.00091) tmp = t_0 + (KbT * (NdChar / EDonor)); elseif (NaChar <= 9.8e+48) tmp = (NaChar / ((Vef / KbT) + 2.0)) - (NdChar / (-1.0 - exp((Vef / KbT)))); else tmp = (NdChar / 2.0) - (NaChar * (1.0 / (-1.0 - exp(((Vef + (EAccept + (Ev - mu))) / KbT))))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -3.2e-15], N[(t$95$0 + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 8.8e-45], N[(N[(NaChar * 0.5), $MachinePrecision] - N[(NdChar / N[(-1.0 - N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 0.00091], N[(t$95$0 + N[(KbT * N[(NdChar / EDonor), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 9.8e+48], N[(N[(NaChar / N[(N[(Vef / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision] - N[(NdChar / N[(-1.0 - N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar / 2.0), $MachinePrecision] - N[(NaChar * N[(1.0 / N[(-1.0 - N[Exp[N[(N[(Vef + N[(EAccept + N[(Ev - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}}\\
\mathbf{if}\;NaChar \leq -3.2 \cdot 10^{-15}:\\
\;\;\;\;t\_0 + \frac{NdChar}{2}\\
\mathbf{elif}\;NaChar \leq 8.8 \cdot 10^{-45}:\\
\;\;\;\;NaChar \cdot 0.5 - \frac{NdChar}{-1 - e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}}\\
\mathbf{elif}\;NaChar \leq 0.00091:\\
\;\;\;\;t\_0 + KbT \cdot \frac{NdChar}{EDonor}\\
\mathbf{elif}\;NaChar \leq 9.8 \cdot 10^{+48}:\\
\;\;\;\;\frac{NaChar}{\frac{Vef}{KbT} + 2} - \frac{NdChar}{-1 - e^{\frac{Vef}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{2} - NaChar \cdot \frac{1}{-1 - e^{\frac{Vef + \left(EAccept + \left(Ev - mu\right)\right)}{KbT}}}\\
\end{array}
\end{array}
if NaChar < -3.1999999999999999e-15Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 61.9%
if -3.1999999999999999e-15 < NaChar < 8.79999999999999974e-45Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 68.6%
*-commutative68.6%
Simplified68.6%
if 8.79999999999999974e-45 < NaChar < 9.1e-4Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 45.0%
Taylor expanded in EDonor around -inf 78.3%
Taylor expanded in EDonor around inf 67.7%
associate-/l*67.7%
Simplified67.7%
if 9.1e-4 < NaChar < 9.80000000000000059e48Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 60.8%
Taylor expanded in Vef around 0 45.4%
+-commutative45.4%
Simplified45.4%
Taylor expanded in EDonor around 0 45.4%
Taylor expanded in Vef around inf 45.2%
if 9.80000000000000059e48 < NaChar Initial program 99.9%
Simplified99.9%
div-inv100.0%
+-commutative100.0%
associate-+l-100.0%
Applied egg-rr100.0%
Taylor expanded in KbT around inf 58.0%
Final simplification63.4%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NaChar (+ 1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT))))))
(if (<= NaChar -6.8e-20)
(+
t_0
(/
NdChar
(- (+ 2.0 (+ (+ (/ Vef KbT) (/ mu KbT)) (/ EDonor KbT))) (/ Ec KbT))))
(if (<= NaChar 1.85e-51)
(-
(/ NaChar (+ (/ EAccept KbT) 2.0))
(/ NdChar (- -1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT)))))
(+
t_0
(/ NdChar (/ (* EDonor (+ 1.0 (/ (- (+ mu Vef) Ec) EDonor))) KbT)))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)));
double tmp;
if (NaChar <= -6.8e-20) {
tmp = t_0 + (NdChar / ((2.0 + (((Vef / KbT) + (mu / KbT)) + (EDonor / KbT))) - (Ec / KbT)));
} else if (NaChar <= 1.85e-51) {
tmp = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT))));
} else {
tmp = t_0 + (NdChar / ((EDonor * (1.0 + (((mu + Vef) - Ec) / EDonor))) / KbT));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: tmp
t_0 = nachar / (1.0d0 + exp(((vef - ((mu - eaccept) - ev)) / kbt)))
if (nachar <= (-6.8d-20)) then
tmp = t_0 + (ndchar / ((2.0d0 + (((vef / kbt) + (mu / kbt)) + (edonor / kbt))) - (ec / kbt)))
else if (nachar <= 1.85d-51) then
tmp = (nachar / ((eaccept / kbt) + 2.0d0)) - (ndchar / ((-1.0d0) - exp(((edonor + (mu + (vef - ec))) / kbt))))
else
tmp = t_0 + (ndchar / ((edonor * (1.0d0 + (((mu + vef) - ec) / edonor))) / kbt))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NaChar / (1.0 + Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)));
double tmp;
if (NaChar <= -6.8e-20) {
tmp = t_0 + (NdChar / ((2.0 + (((Vef / KbT) + (mu / KbT)) + (EDonor / KbT))) - (Ec / KbT)));
} else if (NaChar <= 1.85e-51) {
tmp = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT))));
} else {
tmp = t_0 + (NdChar / ((EDonor * (1.0 + (((mu + Vef) - Ec) / EDonor))) / KbT));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NaChar / (1.0 + math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT))) tmp = 0 if NaChar <= -6.8e-20: tmp = t_0 + (NdChar / ((2.0 + (((Vef / KbT) + (mu / KbT)) + (EDonor / KbT))) - (Ec / KbT))) elif NaChar <= 1.85e-51: tmp = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) else: tmp = t_0 + (NdChar / ((EDonor * (1.0 + (((mu + Vef) - Ec) / EDonor))) / KbT)) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT)))) tmp = 0.0 if (NaChar <= -6.8e-20) tmp = Float64(t_0 + Float64(NdChar / Float64(Float64(2.0 + Float64(Float64(Float64(Vef / KbT) + Float64(mu / KbT)) + Float64(EDonor / KbT))) - Float64(Ec / KbT)))); elseif (NaChar <= 1.85e-51) tmp = Float64(Float64(NaChar / Float64(Float64(EAccept / KbT) + 2.0)) - Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT))))); else tmp = Float64(t_0 + Float64(NdChar / Float64(Float64(EDonor * Float64(1.0 + Float64(Float64(Float64(mu + Vef) - Ec) / EDonor))) / KbT))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT))); tmp = 0.0; if (NaChar <= -6.8e-20) tmp = t_0 + (NdChar / ((2.0 + (((Vef / KbT) + (mu / KbT)) + (EDonor / KbT))) - (Ec / KbT))); elseif (NaChar <= 1.85e-51) tmp = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT)))); else tmp = t_0 + (NdChar / ((EDonor * (1.0 + (((mu + Vef) - Ec) / EDonor))) / KbT)); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -6.8e-20], N[(t$95$0 + N[(NdChar / N[(N[(2.0 + N[(N[(N[(Vef / KbT), $MachinePrecision] + N[(mu / KbT), $MachinePrecision]), $MachinePrecision] + N[(EDonor / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 1.85e-51], N[(N[(NaChar / N[(N[(EAccept / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision] - N[(NdChar / N[(-1.0 - N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(t$95$0 + N[(NdChar / N[(N[(EDonor * N[(1.0 + N[(N[(N[(mu + Vef), $MachinePrecision] - Ec), $MachinePrecision] / EDonor), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}}\\
\mathbf{if}\;NaChar \leq -6.8 \cdot 10^{-20}:\\
\;\;\;\;t\_0 + \frac{NdChar}{\left(2 + \left(\left(\frac{Vef}{KbT} + \frac{mu}{KbT}\right) + \frac{EDonor}{KbT}\right)\right) - \frac{Ec}{KbT}}\\
\mathbf{elif}\;NaChar \leq 1.85 \cdot 10^{-51}:\\
\;\;\;\;\frac{NaChar}{\frac{EAccept}{KbT} + 2} - \frac{NdChar}{-1 - e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;t\_0 + \frac{NdChar}{\frac{EDonor \cdot \left(1 + \frac{\left(mu + Vef\right) - Ec}{EDonor}\right)}{KbT}}\\
\end{array}
\end{array}
if NaChar < -6.7999999999999994e-20Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 64.4%
if -6.7999999999999994e-20 < NaChar < 1.84999999999999987e-51Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 84.6%
Taylor expanded in EAccept around 0 76.1%
+-commutative76.1%
Simplified76.1%
if 1.84999999999999987e-51 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 57.9%
Taylor expanded in EDonor around -inf 69.7%
Taylor expanded in KbT around 0 62.0%
Final simplification68.6%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NaChar (+ 1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT))))))
(if (<= NaChar -40000000000000.0)
(+ t_0 (/ NdChar 2.0))
(if (<= NaChar 6.6e-52)
(-
(/ NaChar (+ (/ EAccept KbT) 2.0))
(/ NdChar (- -1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT)))))
(+
t_0
(/ NdChar (/ (* EDonor (+ 1.0 (/ (- (+ mu Vef) Ec) EDonor))) KbT)))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)));
double tmp;
if (NaChar <= -40000000000000.0) {
tmp = t_0 + (NdChar / 2.0);
} else if (NaChar <= 6.6e-52) {
tmp = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT))));
} else {
tmp = t_0 + (NdChar / ((EDonor * (1.0 + (((mu + Vef) - Ec) / EDonor))) / KbT));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: tmp
t_0 = nachar / (1.0d0 + exp(((vef - ((mu - eaccept) - ev)) / kbt)))
if (nachar <= (-40000000000000.0d0)) then
tmp = t_0 + (ndchar / 2.0d0)
else if (nachar <= 6.6d-52) then
tmp = (nachar / ((eaccept / kbt) + 2.0d0)) - (ndchar / ((-1.0d0) - exp(((edonor + (mu + (vef - ec))) / kbt))))
else
tmp = t_0 + (ndchar / ((edonor * (1.0d0 + (((mu + vef) - ec) / edonor))) / kbt))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NaChar / (1.0 + Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)));
double tmp;
if (NaChar <= -40000000000000.0) {
tmp = t_0 + (NdChar / 2.0);
} else if (NaChar <= 6.6e-52) {
tmp = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT))));
} else {
tmp = t_0 + (NdChar / ((EDonor * (1.0 + (((mu + Vef) - Ec) / EDonor))) / KbT));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NaChar / (1.0 + math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT))) tmp = 0 if NaChar <= -40000000000000.0: tmp = t_0 + (NdChar / 2.0) elif NaChar <= 6.6e-52: tmp = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) else: tmp = t_0 + (NdChar / ((EDonor * (1.0 + (((mu + Vef) - Ec) / EDonor))) / KbT)) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT)))) tmp = 0.0 if (NaChar <= -40000000000000.0) tmp = Float64(t_0 + Float64(NdChar / 2.0)); elseif (NaChar <= 6.6e-52) tmp = Float64(Float64(NaChar / Float64(Float64(EAccept / KbT) + 2.0)) - Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT))))); else tmp = Float64(t_0 + Float64(NdChar / Float64(Float64(EDonor * Float64(1.0 + Float64(Float64(Float64(mu + Vef) - Ec) / EDonor))) / KbT))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT))); tmp = 0.0; if (NaChar <= -40000000000000.0) tmp = t_0 + (NdChar / 2.0); elseif (NaChar <= 6.6e-52) tmp = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT)))); else tmp = t_0 + (NdChar / ((EDonor * (1.0 + (((mu + Vef) - Ec) / EDonor))) / KbT)); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -40000000000000.0], N[(t$95$0 + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 6.6e-52], N[(N[(NaChar / N[(N[(EAccept / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision] - N[(NdChar / N[(-1.0 - N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(t$95$0 + N[(NdChar / N[(N[(EDonor * N[(1.0 + N[(N[(N[(mu + Vef), $MachinePrecision] - Ec), $MachinePrecision] / EDonor), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}}\\
\mathbf{if}\;NaChar \leq -40000000000000:\\
\;\;\;\;t\_0 + \frac{NdChar}{2}\\
\mathbf{elif}\;NaChar \leq 6.6 \cdot 10^{-52}:\\
\;\;\;\;\frac{NaChar}{\frac{EAccept}{KbT} + 2} - \frac{NdChar}{-1 - e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;t\_0 + \frac{NdChar}{\frac{EDonor \cdot \left(1 + \frac{\left(mu + Vef\right) - Ec}{EDonor}\right)}{KbT}}\\
\end{array}
\end{array}
if NaChar < -4e13Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 66.0%
if -4e13 < NaChar < 6.5999999999999999e-52Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 83.1%
Taylor expanded in EAccept around 0 73.5%
+-commutative73.5%
Simplified73.5%
if 6.5999999999999999e-52 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 57.9%
Taylor expanded in EDonor around -inf 69.7%
Taylor expanded in KbT around 0 62.0%
Final simplification68.1%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NaChar (+ 1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT)))))
(t_1 (+ t_0 (/ NdChar 2.0))))
(if (<= NaChar -7.2e-14)
t_1
(if (<= NaChar 1.09e-44)
(-
(* NaChar 0.5)
(/ NdChar (- -1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT)))))
(if (<= NaChar 0.00037)
(+ t_0 (* KbT (/ NdChar EDonor)))
(if (<= NaChar 1.65e+49)
(-
(/ NaChar (+ (/ Vef KbT) 2.0))
(/ NdChar (- -1.0 (exp (/ 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 - ((mu - EAccept) - Ev)) / KbT)));
double t_1 = t_0 + (NdChar / 2.0);
double tmp;
if (NaChar <= -7.2e-14) {
tmp = t_1;
} else if (NaChar <= 1.09e-44) {
tmp = (NaChar * 0.5) - (NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT))));
} else if (NaChar <= 0.00037) {
tmp = t_0 + (KbT * (NdChar / EDonor));
} else if (NaChar <= 1.65e+49) {
tmp = (NaChar / ((Vef / KbT) + 2.0)) - (NdChar / (-1.0 - exp((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 - ((mu - eaccept) - ev)) / kbt)))
t_1 = t_0 + (ndchar / 2.0d0)
if (nachar <= (-7.2d-14)) then
tmp = t_1
else if (nachar <= 1.09d-44) then
tmp = (nachar * 0.5d0) - (ndchar / ((-1.0d0) - exp(((edonor + (mu + (vef - ec))) / kbt))))
else if (nachar <= 0.00037d0) then
tmp = t_0 + (kbt * (ndchar / edonor))
else if (nachar <= 1.65d+49) then
tmp = (nachar / ((vef / kbt) + 2.0d0)) - (ndchar / ((-1.0d0) - exp((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 - ((mu - EAccept) - Ev)) / KbT)));
double t_1 = t_0 + (NdChar / 2.0);
double tmp;
if (NaChar <= -7.2e-14) {
tmp = t_1;
} else if (NaChar <= 1.09e-44) {
tmp = (NaChar * 0.5) - (NdChar / (-1.0 - Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT))));
} else if (NaChar <= 0.00037) {
tmp = t_0 + (KbT * (NdChar / EDonor));
} else if (NaChar <= 1.65e+49) {
tmp = (NaChar / ((Vef / KbT) + 2.0)) - (NdChar / (-1.0 - Math.exp((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 - ((mu - EAccept) - Ev)) / KbT))) t_1 = t_0 + (NdChar / 2.0) tmp = 0 if NaChar <= -7.2e-14: tmp = t_1 elif NaChar <= 1.09e-44: tmp = (NaChar * 0.5) - (NdChar / (-1.0 - math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) elif NaChar <= 0.00037: tmp = t_0 + (KbT * (NdChar / EDonor)) elif NaChar <= 1.65e+49: tmp = (NaChar / ((Vef / KbT) + 2.0)) - (NdChar / (-1.0 - math.exp((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(Float64(mu - EAccept) - Ev)) / KbT)))) t_1 = Float64(t_0 + Float64(NdChar / 2.0)) tmp = 0.0 if (NaChar <= -7.2e-14) tmp = t_1; elseif (NaChar <= 1.09e-44) tmp = Float64(Float64(NaChar * 0.5) - Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT))))); elseif (NaChar <= 0.00037) tmp = Float64(t_0 + Float64(KbT * Float64(NdChar / EDonor))); elseif (NaChar <= 1.65e+49) tmp = Float64(Float64(NaChar / Float64(Float64(Vef / KbT) + 2.0)) - Float64(NdChar / Float64(-1.0 - exp(Float64(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 - ((mu - EAccept) - Ev)) / KbT))); t_1 = t_0 + (NdChar / 2.0); tmp = 0.0; if (NaChar <= -7.2e-14) tmp = t_1; elseif (NaChar <= 1.09e-44) tmp = (NaChar * 0.5) - (NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT)))); elseif (NaChar <= 0.00037) tmp = t_0 + (KbT * (NdChar / EDonor)); elseif (NaChar <= 1.65e+49) tmp = (NaChar / ((Vef / KbT) + 2.0)) - (NdChar / (-1.0 - exp((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[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(t$95$0 + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -7.2e-14], t$95$1, If[LessEqual[NaChar, 1.09e-44], N[(N[(NaChar * 0.5), $MachinePrecision] - N[(NdChar / N[(-1.0 - N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 0.00037], N[(t$95$0 + N[(KbT * N[(NdChar / EDonor), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 1.65e+49], N[(N[(NaChar / N[(N[(Vef / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision] - N[(NdChar / N[(-1.0 - N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$1]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}}\\
t_1 := t\_0 + \frac{NdChar}{2}\\
\mathbf{if}\;NaChar \leq -7.2 \cdot 10^{-14}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;NaChar \leq 1.09 \cdot 10^{-44}:\\
\;\;\;\;NaChar \cdot 0.5 - \frac{NdChar}{-1 - e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}}\\
\mathbf{elif}\;NaChar \leq 0.00037:\\
\;\;\;\;t\_0 + KbT \cdot \frac{NdChar}{EDonor}\\
\mathbf{elif}\;NaChar \leq 1.65 \cdot 10^{+49}:\\
\;\;\;\;\frac{NaChar}{\frac{Vef}{KbT} + 2} - \frac{NdChar}{-1 - e^{\frac{Vef}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;t\_1\\
\end{array}
\end{array}
if NaChar < -7.1999999999999996e-14 or 1.6499999999999999e49 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 60.0%
if -7.1999999999999996e-14 < NaChar < 1.09e-44Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 68.6%
*-commutative68.6%
Simplified68.6%
if 1.09e-44 < NaChar < 3.6999999999999999e-4Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 45.0%
Taylor expanded in EDonor around -inf 78.3%
Taylor expanded in EDonor around inf 67.7%
associate-/l*67.7%
Simplified67.7%
if 3.6999999999999999e-4 < NaChar < 1.6499999999999999e49Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 60.8%
Taylor expanded in Vef around 0 45.4%
+-commutative45.4%
Simplified45.4%
Taylor expanded in EDonor around 0 45.4%
Taylor expanded in Vef around inf 45.2%
Final simplification63.3%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NaChar (+ 1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT))))))
(if (<= NaChar -1200000000.0)
(+ t_0 (/ NdChar 2.0))
(if (<= NaChar 1.3e-45)
(-
(/ NaChar (+ (/ EAccept KbT) 2.0))
(/ NdChar (- -1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT)))))
(+ t_0 (/ NdChar (/ (- (+ EDonor (+ mu Vef)) Ec) KbT)))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)));
double tmp;
if (NaChar <= -1200000000.0) {
tmp = t_0 + (NdChar / 2.0);
} else if (NaChar <= 1.3e-45) {
tmp = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT))));
} else {
tmp = t_0 + (NdChar / (((EDonor + (mu + Vef)) - Ec) / KbT));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: tmp
t_0 = nachar / (1.0d0 + exp(((vef - ((mu - eaccept) - ev)) / kbt)))
if (nachar <= (-1200000000.0d0)) then
tmp = t_0 + (ndchar / 2.0d0)
else if (nachar <= 1.3d-45) then
tmp = (nachar / ((eaccept / kbt) + 2.0d0)) - (ndchar / ((-1.0d0) - exp(((edonor + (mu + (vef - ec))) / kbt))))
else
tmp = t_0 + (ndchar / (((edonor + (mu + vef)) - ec) / kbt))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NaChar / (1.0 + Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)));
double tmp;
if (NaChar <= -1200000000.0) {
tmp = t_0 + (NdChar / 2.0);
} else if (NaChar <= 1.3e-45) {
tmp = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT))));
} else {
tmp = t_0 + (NdChar / (((EDonor + (mu + Vef)) - Ec) / KbT));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NaChar / (1.0 + math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT))) tmp = 0 if NaChar <= -1200000000.0: tmp = t_0 + (NdChar / 2.0) elif NaChar <= 1.3e-45: tmp = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) else: tmp = t_0 + (NdChar / (((EDonor + (mu + Vef)) - Ec) / KbT)) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT)))) tmp = 0.0 if (NaChar <= -1200000000.0) tmp = Float64(t_0 + Float64(NdChar / 2.0)); elseif (NaChar <= 1.3e-45) tmp = Float64(Float64(NaChar / Float64(Float64(EAccept / KbT) + 2.0)) - Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT))))); else tmp = Float64(t_0 + Float64(NdChar / Float64(Float64(Float64(EDonor + Float64(mu + Vef)) - Ec) / KbT))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT))); tmp = 0.0; if (NaChar <= -1200000000.0) tmp = t_0 + (NdChar / 2.0); elseif (NaChar <= 1.3e-45) tmp = (NaChar / ((EAccept / KbT) + 2.0)) - (NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT)))); else tmp = t_0 + (NdChar / (((EDonor + (mu + Vef)) - Ec) / KbT)); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -1200000000.0], N[(t$95$0 + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 1.3e-45], N[(N[(NaChar / N[(N[(EAccept / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision] - N[(NdChar / N[(-1.0 - N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(t$95$0 + N[(NdChar / N[(N[(N[(EDonor + N[(mu + Vef), $MachinePrecision]), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}}\\
\mathbf{if}\;NaChar \leq -1200000000:\\
\;\;\;\;t\_0 + \frac{NdChar}{2}\\
\mathbf{elif}\;NaChar \leq 1.3 \cdot 10^{-45}:\\
\;\;\;\;\frac{NaChar}{\frac{EAccept}{KbT} + 2} - \frac{NdChar}{-1 - e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;t\_0 + \frac{NdChar}{\frac{\left(EDonor + \left(mu + Vef\right)\right) - Ec}{KbT}}\\
\end{array}
\end{array}
if NaChar < -1.2e9Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 66.0%
if -1.2e9 < NaChar < 1.29999999999999993e-45Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 82.6%
Taylor expanded in EAccept around 0 72.3%
+-commutative72.3%
Simplified72.3%
if 1.29999999999999993e-45 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 59.3%
Taylor expanded in KbT around 0 58.7%
Final simplification66.6%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (+ (/ NaChar (+ 1.0 (exp (/ EAccept KbT)))) (/ NdChar 2.0))))
(if (<= NaChar -3.9e+153)
t_0
(if (<= NaChar -3.1e-16)
(+ (/ NaChar (+ 1.0 (exp (/ Vef KbT)))) (/ NdChar 2.0))
(if (<= NaChar 2.9e-98)
(+ (/ NdChar (+ 1.0 (exp (/ Ec (- KbT))))) (* NaChar 0.5))
(if (<= NaChar 6.8e+195)
(+ (/ NdChar 2.0) (* NaChar (/ 1.0 (+ 1.0 (exp (/ mu (- KbT)))))))
t_0))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar / (1.0 + exp((EAccept / KbT)))) + (NdChar / 2.0);
double tmp;
if (NaChar <= -3.9e+153) {
tmp = t_0;
} else if (NaChar <= -3.1e-16) {
tmp = (NaChar / (1.0 + exp((Vef / KbT)))) + (NdChar / 2.0);
} else if (NaChar <= 2.9e-98) {
tmp = (NdChar / (1.0 + exp((Ec / -KbT)))) + (NaChar * 0.5);
} else if (NaChar <= 6.8e+195) {
tmp = (NdChar / 2.0) + (NaChar * (1.0 / (1.0 + exp((mu / -KbT)))));
} else {
tmp = t_0;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: tmp
t_0 = (nachar / (1.0d0 + exp((eaccept / kbt)))) + (ndchar / 2.0d0)
if (nachar <= (-3.9d+153)) then
tmp = t_0
else if (nachar <= (-3.1d-16)) then
tmp = (nachar / (1.0d0 + exp((vef / kbt)))) + (ndchar / 2.0d0)
else if (nachar <= 2.9d-98) then
tmp = (ndchar / (1.0d0 + exp((ec / -kbt)))) + (nachar * 0.5d0)
else if (nachar <= 6.8d+195) then
tmp = (ndchar / 2.0d0) + (nachar * (1.0d0 / (1.0d0 + exp((mu / -kbt)))))
else
tmp = t_0
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar / (1.0 + Math.exp((EAccept / KbT)))) + (NdChar / 2.0);
double tmp;
if (NaChar <= -3.9e+153) {
tmp = t_0;
} else if (NaChar <= -3.1e-16) {
tmp = (NaChar / (1.0 + Math.exp((Vef / KbT)))) + (NdChar / 2.0);
} else if (NaChar <= 2.9e-98) {
tmp = (NdChar / (1.0 + Math.exp((Ec / -KbT)))) + (NaChar * 0.5);
} else if (NaChar <= 6.8e+195) {
tmp = (NdChar / 2.0) + (NaChar * (1.0 / (1.0 + Math.exp((mu / -KbT)))));
} else {
tmp = t_0;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = (NaChar / (1.0 + math.exp((EAccept / KbT)))) + (NdChar / 2.0) tmp = 0 if NaChar <= -3.9e+153: tmp = t_0 elif NaChar <= -3.1e-16: tmp = (NaChar / (1.0 + math.exp((Vef / KbT)))) + (NdChar / 2.0) elif NaChar <= 2.9e-98: tmp = (NdChar / (1.0 + math.exp((Ec / -KbT)))) + (NaChar * 0.5) elif NaChar <= 6.8e+195: tmp = (NdChar / 2.0) + (NaChar * (1.0 / (1.0 + math.exp((mu / -KbT))))) else: tmp = t_0 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT)))) + Float64(NdChar / 2.0)) tmp = 0.0 if (NaChar <= -3.9e+153) tmp = t_0; elseif (NaChar <= -3.1e-16) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Vef / KbT)))) + Float64(NdChar / 2.0)); elseif (NaChar <= 2.9e-98) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Ec / Float64(-KbT))))) + Float64(NaChar * 0.5)); elseif (NaChar <= 6.8e+195) tmp = Float64(Float64(NdChar / 2.0) + Float64(NaChar * Float64(1.0 / Float64(1.0 + exp(Float64(mu / Float64(-KbT))))))); else tmp = t_0; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = (NaChar / (1.0 + exp((EAccept / KbT)))) + (NdChar / 2.0); tmp = 0.0; if (NaChar <= -3.9e+153) tmp = t_0; elseif (NaChar <= -3.1e-16) tmp = (NaChar / (1.0 + exp((Vef / KbT)))) + (NdChar / 2.0); elseif (NaChar <= 2.9e-98) tmp = (NdChar / (1.0 + exp((Ec / -KbT)))) + (NaChar * 0.5); elseif (NaChar <= 6.8e+195) tmp = (NdChar / 2.0) + (NaChar * (1.0 / (1.0 + exp((mu / -KbT))))); else tmp = t_0; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -3.9e+153], t$95$0, If[LessEqual[NaChar, -3.1e-16], N[(N[(NaChar / N[(1.0 + N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 2.9e-98], N[(N[(NdChar / N[(1.0 + N[Exp[N[(Ec / (-KbT)), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar * 0.5), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 6.8e+195], N[(N[(NdChar / 2.0), $MachinePrecision] + N[(NaChar * N[(1.0 / N[(1.0 + N[Exp[N[(mu / (-KbT)), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$0]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}} + \frac{NdChar}{2}\\
\mathbf{if}\;NaChar \leq -3.9 \cdot 10^{+153}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;NaChar \leq -3.1 \cdot 10^{-16}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Vef}{KbT}}} + \frac{NdChar}{2}\\
\mathbf{elif}\;NaChar \leq 2.9 \cdot 10^{-98}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{Ec}{-KbT}}} + NaChar \cdot 0.5\\
\mathbf{elif}\;NaChar \leq 6.8 \cdot 10^{+195}:\\
\;\;\;\;\frac{NdChar}{2} + NaChar \cdot \frac{1}{1 + e^{\frac{mu}{-KbT}}}\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if NaChar < -3.89999999999999983e153 or 6.80000000000000021e195 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 56.7%
Taylor expanded in KbT around inf 38.8%
if -3.89999999999999983e153 < NaChar < -3.1000000000000001e-16Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 83.1%
Taylor expanded in KbT around inf 52.2%
if -3.1000000000000001e-16 < NaChar < 2.9e-98Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 70.7%
*-commutative70.7%
Simplified70.7%
Taylor expanded in Ec around inf 52.4%
mul-1-neg58.1%
distribute-neg-frac258.1%
Simplified52.4%
if 2.9e-98 < NaChar < 6.80000000000000021e195Initial program 99.9%
Simplified99.9%
Taylor expanded in KbT around inf 46.1%
Taylor expanded in mu around inf 37.9%
associate-*r/37.9%
mul-1-neg37.9%
Simplified37.9%
div-inv38.0%
distribute-frac-neg38.0%
Applied egg-rr38.0%
Final simplification45.6%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (+ (/ NaChar (+ 1.0 (exp (/ EAccept KbT)))) (/ NdChar 2.0))))
(if (<= NaChar -5.2e+157)
t_0
(if (<= NaChar -9e-16)
(+ (/ NaChar (+ 1.0 (exp (/ Vef KbT)))) (/ NdChar 2.0))
(if (<= NaChar 1.04e-103)
(+ (/ NdChar (+ 1.0 (exp (/ Ec (- KbT))))) (* NaChar 0.5))
(if (<= NaChar 2.6e+202)
(+ (/ NdChar 2.0) (/ NaChar (+ 1.0 (exp (/ mu (- KbT))))))
t_0))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar / (1.0 + exp((EAccept / KbT)))) + (NdChar / 2.0);
double tmp;
if (NaChar <= -5.2e+157) {
tmp = t_0;
} else if (NaChar <= -9e-16) {
tmp = (NaChar / (1.0 + exp((Vef / KbT)))) + (NdChar / 2.0);
} else if (NaChar <= 1.04e-103) {
tmp = (NdChar / (1.0 + exp((Ec / -KbT)))) + (NaChar * 0.5);
} else if (NaChar <= 2.6e+202) {
tmp = (NdChar / 2.0) + (NaChar / (1.0 + exp((mu / -KbT))));
} else {
tmp = t_0;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: tmp
t_0 = (nachar / (1.0d0 + exp((eaccept / kbt)))) + (ndchar / 2.0d0)
if (nachar <= (-5.2d+157)) then
tmp = t_0
else if (nachar <= (-9d-16)) then
tmp = (nachar / (1.0d0 + exp((vef / kbt)))) + (ndchar / 2.0d0)
else if (nachar <= 1.04d-103) then
tmp = (ndchar / (1.0d0 + exp((ec / -kbt)))) + (nachar * 0.5d0)
else if (nachar <= 2.6d+202) then
tmp = (ndchar / 2.0d0) + (nachar / (1.0d0 + exp((mu / -kbt))))
else
tmp = t_0
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar / (1.0 + Math.exp((EAccept / KbT)))) + (NdChar / 2.0);
double tmp;
if (NaChar <= -5.2e+157) {
tmp = t_0;
} else if (NaChar <= -9e-16) {
tmp = (NaChar / (1.0 + Math.exp((Vef / KbT)))) + (NdChar / 2.0);
} else if (NaChar <= 1.04e-103) {
tmp = (NdChar / (1.0 + Math.exp((Ec / -KbT)))) + (NaChar * 0.5);
} else if (NaChar <= 2.6e+202) {
tmp = (NdChar / 2.0) + (NaChar / (1.0 + Math.exp((mu / -KbT))));
} else {
tmp = t_0;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = (NaChar / (1.0 + math.exp((EAccept / KbT)))) + (NdChar / 2.0) tmp = 0 if NaChar <= -5.2e+157: tmp = t_0 elif NaChar <= -9e-16: tmp = (NaChar / (1.0 + math.exp((Vef / KbT)))) + (NdChar / 2.0) elif NaChar <= 1.04e-103: tmp = (NdChar / (1.0 + math.exp((Ec / -KbT)))) + (NaChar * 0.5) elif NaChar <= 2.6e+202: tmp = (NdChar / 2.0) + (NaChar / (1.0 + math.exp((mu / -KbT)))) else: tmp = t_0 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT)))) + Float64(NdChar / 2.0)) tmp = 0.0 if (NaChar <= -5.2e+157) tmp = t_0; elseif (NaChar <= -9e-16) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Vef / KbT)))) + Float64(NdChar / 2.0)); elseif (NaChar <= 1.04e-103) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Ec / Float64(-KbT))))) + Float64(NaChar * 0.5)); elseif (NaChar <= 2.6e+202) tmp = Float64(Float64(NdChar / 2.0) + Float64(NaChar / Float64(1.0 + exp(Float64(mu / Float64(-KbT)))))); else tmp = t_0; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = (NaChar / (1.0 + exp((EAccept / KbT)))) + (NdChar / 2.0); tmp = 0.0; if (NaChar <= -5.2e+157) tmp = t_0; elseif (NaChar <= -9e-16) tmp = (NaChar / (1.0 + exp((Vef / KbT)))) + (NdChar / 2.0); elseif (NaChar <= 1.04e-103) tmp = (NdChar / (1.0 + exp((Ec / -KbT)))) + (NaChar * 0.5); elseif (NaChar <= 2.6e+202) tmp = (NdChar / 2.0) + (NaChar / (1.0 + exp((mu / -KbT)))); else tmp = t_0; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -5.2e+157], t$95$0, If[LessEqual[NaChar, -9e-16], N[(N[(NaChar / N[(1.0 + N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 1.04e-103], N[(N[(NdChar / N[(1.0 + N[Exp[N[(Ec / (-KbT)), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar * 0.5), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 2.6e+202], N[(N[(NdChar / 2.0), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Exp[N[(mu / (-KbT)), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$0]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}} + \frac{NdChar}{2}\\
\mathbf{if}\;NaChar \leq -5.2 \cdot 10^{+157}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;NaChar \leq -9 \cdot 10^{-16}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Vef}{KbT}}} + \frac{NdChar}{2}\\
\mathbf{elif}\;NaChar \leq 1.04 \cdot 10^{-103}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{Ec}{-KbT}}} + NaChar \cdot 0.5\\
\mathbf{elif}\;NaChar \leq 2.6 \cdot 10^{+202}:\\
\;\;\;\;\frac{NdChar}{2} + \frac{NaChar}{1 + e^{\frac{mu}{-KbT}}}\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if NaChar < -5.20000000000000022e157 or 2.6000000000000002e202 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 56.7%
Taylor expanded in KbT around inf 38.8%
if -5.20000000000000022e157 < NaChar < -9.0000000000000003e-16Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 83.1%
Taylor expanded in KbT around inf 52.2%
if -9.0000000000000003e-16 < NaChar < 1.04000000000000001e-103Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 70.7%
*-commutative70.7%
Simplified70.7%
Taylor expanded in Ec around inf 52.4%
mul-1-neg58.1%
distribute-neg-frac258.1%
Simplified52.4%
if 1.04000000000000001e-103 < NaChar < 2.6000000000000002e202Initial program 99.9%
Simplified99.9%
Taylor expanded in KbT around inf 46.1%
Taylor expanded in mu around inf 37.9%
associate-*r/37.9%
mul-1-neg37.9%
Simplified37.9%
Final simplification45.6%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (+ (/ NaChar (+ 1.0 (exp (/ EAccept KbT)))) (/ NdChar 2.0))))
(if (<= NaChar -2.7e+157)
t_0
(if (<= NaChar -1.15e-10)
(+ (/ NaChar (+ 1.0 (exp (/ Vef KbT)))) (/ NdChar 2.0))
(if (<= NaChar 1.12e-95)
(+ (/ NdChar (+ 1.0 (exp (/ mu KbT)))) (* NaChar 0.5))
(if (<= NaChar 2.35e+198)
(+ (/ NdChar 2.0) (/ NaChar (+ 1.0 (exp (/ mu (- KbT))))))
t_0))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar / (1.0 + exp((EAccept / KbT)))) + (NdChar / 2.0);
double tmp;
if (NaChar <= -2.7e+157) {
tmp = t_0;
} else if (NaChar <= -1.15e-10) {
tmp = (NaChar / (1.0 + exp((Vef / KbT)))) + (NdChar / 2.0);
} else if (NaChar <= 1.12e-95) {
tmp = (NdChar / (1.0 + exp((mu / KbT)))) + (NaChar * 0.5);
} else if (NaChar <= 2.35e+198) {
tmp = (NdChar / 2.0) + (NaChar / (1.0 + exp((mu / -KbT))));
} else {
tmp = t_0;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: tmp
t_0 = (nachar / (1.0d0 + exp((eaccept / kbt)))) + (ndchar / 2.0d0)
if (nachar <= (-2.7d+157)) then
tmp = t_0
else if (nachar <= (-1.15d-10)) then
tmp = (nachar / (1.0d0 + exp((vef / kbt)))) + (ndchar / 2.0d0)
else if (nachar <= 1.12d-95) then
tmp = (ndchar / (1.0d0 + exp((mu / kbt)))) + (nachar * 0.5d0)
else if (nachar <= 2.35d+198) then
tmp = (ndchar / 2.0d0) + (nachar / (1.0d0 + exp((mu / -kbt))))
else
tmp = t_0
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar / (1.0 + Math.exp((EAccept / KbT)))) + (NdChar / 2.0);
double tmp;
if (NaChar <= -2.7e+157) {
tmp = t_0;
} else if (NaChar <= -1.15e-10) {
tmp = (NaChar / (1.0 + Math.exp((Vef / KbT)))) + (NdChar / 2.0);
} else if (NaChar <= 1.12e-95) {
tmp = (NdChar / (1.0 + Math.exp((mu / KbT)))) + (NaChar * 0.5);
} else if (NaChar <= 2.35e+198) {
tmp = (NdChar / 2.0) + (NaChar / (1.0 + Math.exp((mu / -KbT))));
} else {
tmp = t_0;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = (NaChar / (1.0 + math.exp((EAccept / KbT)))) + (NdChar / 2.0) tmp = 0 if NaChar <= -2.7e+157: tmp = t_0 elif NaChar <= -1.15e-10: tmp = (NaChar / (1.0 + math.exp((Vef / KbT)))) + (NdChar / 2.0) elif NaChar <= 1.12e-95: tmp = (NdChar / (1.0 + math.exp((mu / KbT)))) + (NaChar * 0.5) elif NaChar <= 2.35e+198: tmp = (NdChar / 2.0) + (NaChar / (1.0 + math.exp((mu / -KbT)))) else: tmp = t_0 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT)))) + Float64(NdChar / 2.0)) tmp = 0.0 if (NaChar <= -2.7e+157) tmp = t_0; elseif (NaChar <= -1.15e-10) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Vef / KbT)))) + Float64(NdChar / 2.0)); elseif (NaChar <= 1.12e-95) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(mu / KbT)))) + Float64(NaChar * 0.5)); elseif (NaChar <= 2.35e+198) tmp = Float64(Float64(NdChar / 2.0) + Float64(NaChar / Float64(1.0 + exp(Float64(mu / Float64(-KbT)))))); else tmp = t_0; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = (NaChar / (1.0 + exp((EAccept / KbT)))) + (NdChar / 2.0); tmp = 0.0; if (NaChar <= -2.7e+157) tmp = t_0; elseif (NaChar <= -1.15e-10) tmp = (NaChar / (1.0 + exp((Vef / KbT)))) + (NdChar / 2.0); elseif (NaChar <= 1.12e-95) tmp = (NdChar / (1.0 + exp((mu / KbT)))) + (NaChar * 0.5); elseif (NaChar <= 2.35e+198) tmp = (NdChar / 2.0) + (NaChar / (1.0 + exp((mu / -KbT)))); else tmp = t_0; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -2.7e+157], t$95$0, If[LessEqual[NaChar, -1.15e-10], N[(N[(NaChar / N[(1.0 + N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 1.12e-95], N[(N[(NdChar / N[(1.0 + N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar * 0.5), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 2.35e+198], N[(N[(NdChar / 2.0), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Exp[N[(mu / (-KbT)), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$0]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}} + \frac{NdChar}{2}\\
\mathbf{if}\;NaChar \leq -2.7 \cdot 10^{+157}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;NaChar \leq -1.15 \cdot 10^{-10}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Vef}{KbT}}} + \frac{NdChar}{2}\\
\mathbf{elif}\;NaChar \leq 1.12 \cdot 10^{-95}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{mu}{KbT}}} + NaChar \cdot 0.5\\
\mathbf{elif}\;NaChar \leq 2.35 \cdot 10^{+198}:\\
\;\;\;\;\frac{NdChar}{2} + \frac{NaChar}{1 + e^{\frac{mu}{-KbT}}}\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if NaChar < -2.7e157 or 2.3500000000000001e198 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 56.7%
Taylor expanded in KbT around inf 38.8%
if -2.7e157 < NaChar < -1.15000000000000004e-10Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 83.1%
Taylor expanded in KbT around inf 52.2%
if -1.15000000000000004e-10 < NaChar < 1.12000000000000006e-95Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 70.9%
*-commutative70.9%
Simplified70.9%
Taylor expanded in mu around inf 50.1%
if 1.12000000000000006e-95 < NaChar < 2.3500000000000001e198Initial program 99.9%
Simplified99.9%
Taylor expanded in KbT around inf 46.2%
Taylor expanded in mu around inf 37.9%
associate-*r/37.9%
mul-1-neg37.9%
Simplified37.9%
Final simplification44.8%
(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 -3.6e-9)
(- (/ NaChar (+ (/ Vef KbT) 2.0)) t_0)
(if (<= NdChar 5.2e-120)
(-
(/ NdChar 2.0)
(*
NaChar
(/ 1.0 (- -1.0 (exp (/ (+ Vef (+ EAccept (- Ev mu))) KbT))))))
(- (/ NaChar (+ (/ Ev KbT) 2.0)) t_0)))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT)));
double tmp;
if (NdChar <= -3.6e-9) {
tmp = (NaChar / ((Vef / KbT) + 2.0)) - t_0;
} else if (NdChar <= 5.2e-120) {
tmp = (NdChar / 2.0) - (NaChar * (1.0 / (-1.0 - exp(((Vef + (EAccept + (Ev - mu))) / KbT)))));
} else {
tmp = (NaChar / ((Ev / KbT) + 2.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 = ndchar / ((-1.0d0) - exp(((edonor + (mu + (vef - ec))) / kbt)))
if (ndchar <= (-3.6d-9)) then
tmp = (nachar / ((vef / kbt) + 2.0d0)) - t_0
else if (ndchar <= 5.2d-120) then
tmp = (ndchar / 2.0d0) - (nachar * (1.0d0 / ((-1.0d0) - exp(((vef + (eaccept + (ev - mu))) / kbt)))))
else
tmp = (nachar / ((ev / kbt) + 2.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 = NdChar / (-1.0 - Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)));
double tmp;
if (NdChar <= -3.6e-9) {
tmp = (NaChar / ((Vef / KbT) + 2.0)) - t_0;
} else if (NdChar <= 5.2e-120) {
tmp = (NdChar / 2.0) - (NaChar * (1.0 / (-1.0 - Math.exp(((Vef + (EAccept + (Ev - mu))) / KbT)))));
} else {
tmp = (NaChar / ((Ev / KbT) + 2.0)) - t_0;
}
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 <= -3.6e-9: tmp = (NaChar / ((Vef / KbT) + 2.0)) - t_0 elif NdChar <= 5.2e-120: tmp = (NdChar / 2.0) - (NaChar * (1.0 / (-1.0 - math.exp(((Vef + (EAccept + (Ev - mu))) / KbT))))) else: tmp = (NaChar / ((Ev / KbT) + 2.0)) - t_0 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 <= -3.6e-9) tmp = Float64(Float64(NaChar / Float64(Float64(Vef / KbT) + 2.0)) - t_0); elseif (NdChar <= 5.2e-120) tmp = Float64(Float64(NdChar / 2.0) - Float64(NaChar * Float64(1.0 / Float64(-1.0 - exp(Float64(Float64(Vef + Float64(EAccept + Float64(Ev - mu))) / KbT)))))); else tmp = Float64(Float64(NaChar / Float64(Float64(Ev / KbT) + 2.0)) - t_0); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT))); tmp = 0.0; if (NdChar <= -3.6e-9) tmp = (NaChar / ((Vef / KbT) + 2.0)) - t_0; elseif (NdChar <= 5.2e-120) tmp = (NdChar / 2.0) - (NaChar * (1.0 / (-1.0 - exp(((Vef + (EAccept + (Ev - mu))) / KbT))))); else tmp = (NaChar / ((Ev / KbT) + 2.0)) - t_0; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NdChar / N[(-1.0 - N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NdChar, -3.6e-9], N[(N[(NaChar / N[(N[(Vef / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision] - t$95$0), $MachinePrecision], If[LessEqual[NdChar, 5.2e-120], N[(N[(NdChar / 2.0), $MachinePrecision] - N[(NaChar * N[(1.0 / N[(-1.0 - N[Exp[N[(N[(Vef + N[(EAccept + N[(Ev - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar / N[(N[(Ev / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision] - t$95$0), $MachinePrecision]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{-1 - e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}}\\
\mathbf{if}\;NdChar \leq -3.6 \cdot 10^{-9}:\\
\;\;\;\;\frac{NaChar}{\frac{Vef}{KbT} + 2} - t\_0\\
\mathbf{elif}\;NdChar \leq 5.2 \cdot 10^{-120}:\\
\;\;\;\;\frac{NdChar}{2} - NaChar \cdot \frac{1}{-1 - e^{\frac{Vef + \left(EAccept + \left(Ev - mu\right)\right)}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{\frac{Ev}{KbT} + 2} - t\_0\\
\end{array}
\end{array}
if NdChar < -3.6e-9Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 77.2%
Taylor expanded in Vef around 0 66.7%
+-commutative66.7%
Simplified66.7%
if -3.6e-9 < NdChar < 5.2000000000000002e-120Initial program 100.0%
Simplified100.0%
div-inv100.0%
+-commutative100.0%
associate-+l-100.0%
Applied egg-rr100.0%
Taylor expanded in KbT around inf 65.4%
if 5.2000000000000002e-120 < NdChar Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 74.0%
Taylor expanded in Ev around 0 60.9%
Final simplification64.2%
(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.4e-9)
(- (/ NaChar (+ (/ EAccept KbT) 2.0)) t_0)
(if (<= NdChar 1.7e-121)
(-
(/ NdChar 2.0)
(*
NaChar
(/ 1.0 (- -1.0 (exp (/ (+ Vef (+ EAccept (- Ev mu))) KbT))))))
(- (/ NaChar (+ (/ Ev KbT) 2.0)) t_0)))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT)));
double tmp;
if (NdChar <= -7.4e-9) {
tmp = (NaChar / ((EAccept / KbT) + 2.0)) - t_0;
} else if (NdChar <= 1.7e-121) {
tmp = (NdChar / 2.0) - (NaChar * (1.0 / (-1.0 - exp(((Vef + (EAccept + (Ev - mu))) / KbT)))));
} else {
tmp = (NaChar / ((Ev / KbT) + 2.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 = ndchar / ((-1.0d0) - exp(((edonor + (mu + (vef - ec))) / kbt)))
if (ndchar <= (-7.4d-9)) then
tmp = (nachar / ((eaccept / kbt) + 2.0d0)) - t_0
else if (ndchar <= 1.7d-121) then
tmp = (ndchar / 2.0d0) - (nachar * (1.0d0 / ((-1.0d0) - exp(((vef + (eaccept + (ev - mu))) / kbt)))))
else
tmp = (nachar / ((ev / kbt) + 2.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 = NdChar / (-1.0 - Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)));
double tmp;
if (NdChar <= -7.4e-9) {
tmp = (NaChar / ((EAccept / KbT) + 2.0)) - t_0;
} else if (NdChar <= 1.7e-121) {
tmp = (NdChar / 2.0) - (NaChar * (1.0 / (-1.0 - Math.exp(((Vef + (EAccept + (Ev - mu))) / KbT)))));
} else {
tmp = (NaChar / ((Ev / KbT) + 2.0)) - t_0;
}
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.4e-9: tmp = (NaChar / ((EAccept / KbT) + 2.0)) - t_0 elif NdChar <= 1.7e-121: tmp = (NdChar / 2.0) - (NaChar * (1.0 / (-1.0 - math.exp(((Vef + (EAccept + (Ev - mu))) / KbT))))) else: tmp = (NaChar / ((Ev / KbT) + 2.0)) - t_0 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.4e-9) tmp = Float64(Float64(NaChar / Float64(Float64(EAccept / KbT) + 2.0)) - t_0); elseif (NdChar <= 1.7e-121) tmp = Float64(Float64(NdChar / 2.0) - Float64(NaChar * Float64(1.0 / Float64(-1.0 - exp(Float64(Float64(Vef + Float64(EAccept + Float64(Ev - mu))) / KbT)))))); else tmp = Float64(Float64(NaChar / Float64(Float64(Ev / KbT) + 2.0)) - t_0); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT))); tmp = 0.0; if (NdChar <= -7.4e-9) tmp = (NaChar / ((EAccept / KbT) + 2.0)) - t_0; elseif (NdChar <= 1.7e-121) tmp = (NdChar / 2.0) - (NaChar * (1.0 / (-1.0 - exp(((Vef + (EAccept + (Ev - mu))) / KbT))))); else tmp = (NaChar / ((Ev / KbT) + 2.0)) - t_0; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NdChar / N[(-1.0 - N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NdChar, -7.4e-9], N[(N[(NaChar / N[(N[(EAccept / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision] - t$95$0), $MachinePrecision], If[LessEqual[NdChar, 1.7e-121], N[(N[(NdChar / 2.0), $MachinePrecision] - N[(NaChar * N[(1.0 / N[(-1.0 - N[Exp[N[(N[(Vef + N[(EAccept + N[(Ev - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar / N[(N[(Ev / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision] - t$95$0), $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.4 \cdot 10^{-9}:\\
\;\;\;\;\frac{NaChar}{\frac{EAccept}{KbT} + 2} - t\_0\\
\mathbf{elif}\;NdChar \leq 1.7 \cdot 10^{-121}:\\
\;\;\;\;\frac{NdChar}{2} - NaChar \cdot \frac{1}{-1 - e^{\frac{Vef + \left(EAccept + \left(Ev - mu\right)\right)}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{\frac{Ev}{KbT} + 2} - t\_0\\
\end{array}
\end{array}
if NdChar < -7.4e-9Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 80.8%
Taylor expanded in EAccept around 0 64.8%
+-commutative64.8%
Simplified64.8%
if -7.4e-9 < NdChar < 1.70000000000000001e-121Initial program 100.0%
Simplified100.0%
div-inv100.0%
+-commutative100.0%
associate-+l-100.0%
Applied egg-rr100.0%
Taylor expanded in KbT around inf 65.4%
if 1.70000000000000001e-121 < NdChar Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 74.0%
Taylor expanded in Ev around 0 60.9%
Final simplification63.7%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (<= NaChar -5.7e+18)
(+
(/ NaChar (+ 1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT))))
(/ NdChar 2.0))
(if (<= NaChar 4.8e+48)
(-
(/ NaChar (+ (/ Ev KbT) 2.0))
(/ NdChar (- -1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT)))))
(-
(/ NdChar 2.0)
(*
NaChar
(/ 1.0 (- -1.0 (exp (/ (+ Vef (+ EAccept (- Ev mu))) KbT)))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (NaChar <= -5.7e+18) {
tmp = (NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / 2.0);
} else if (NaChar <= 4.8e+48) {
tmp = (NaChar / ((Ev / KbT) + 2.0)) - (NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT))));
} else {
tmp = (NdChar / 2.0) - (NaChar * (1.0 / (-1.0 - exp(((Vef + (EAccept + (Ev - mu))) / KbT)))));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if (nachar <= (-5.7d+18)) then
tmp = (nachar / (1.0d0 + exp(((vef - ((mu - eaccept) - ev)) / kbt)))) + (ndchar / 2.0d0)
else if (nachar <= 4.8d+48) then
tmp = (nachar / ((ev / kbt) + 2.0d0)) - (ndchar / ((-1.0d0) - exp(((edonor + (mu + (vef - ec))) / kbt))))
else
tmp = (ndchar / 2.0d0) - (nachar * (1.0d0 / ((-1.0d0) - exp(((vef + (eaccept + (ev - mu))) / kbt)))))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (NaChar <= -5.7e+18) {
tmp = (NaChar / (1.0 + Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / 2.0);
} else if (NaChar <= 4.8e+48) {
tmp = (NaChar / ((Ev / KbT) + 2.0)) - (NdChar / (-1.0 - Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT))));
} else {
tmp = (NdChar / 2.0) - (NaChar * (1.0 / (-1.0 - Math.exp(((Vef + (EAccept + (Ev - mu))) / KbT)))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if NaChar <= -5.7e+18: tmp = (NaChar / (1.0 + math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / 2.0) elif NaChar <= 4.8e+48: tmp = (NaChar / ((Ev / KbT) + 2.0)) - (NdChar / (-1.0 - math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) else: tmp = (NdChar / 2.0) - (NaChar * (1.0 / (-1.0 - math.exp(((Vef + (EAccept + (Ev - mu))) / KbT))))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (NaChar <= -5.7e+18) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT)))) + Float64(NdChar / 2.0)); elseif (NaChar <= 4.8e+48) tmp = Float64(Float64(NaChar / Float64(Float64(Ev / KbT) + 2.0)) - Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT))))); else tmp = Float64(Float64(NdChar / 2.0) - Float64(NaChar * Float64(1.0 / Float64(-1.0 - exp(Float64(Float64(Vef + Float64(EAccept + Float64(Ev - mu))) / KbT)))))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (NaChar <= -5.7e+18) tmp = (NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / 2.0); elseif (NaChar <= 4.8e+48) tmp = (NaChar / ((Ev / KbT) + 2.0)) - (NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT)))); else tmp = (NdChar / 2.0) - (NaChar * (1.0 / (-1.0 - exp(((Vef + (EAccept + (Ev - mu))) / KbT))))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[NaChar, -5.7e+18], N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 4.8e+48], N[(N[(NaChar / N[(N[(Ev / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision] - N[(NdChar / N[(-1.0 - N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar / 2.0), $MachinePrecision] - N[(NaChar * N[(1.0 / N[(-1.0 - N[Exp[N[(N[(Vef + N[(EAccept + N[(Ev - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NaChar \leq -5.7 \cdot 10^{+18}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}} + \frac{NdChar}{2}\\
\mathbf{elif}\;NaChar \leq 4.8 \cdot 10^{+48}:\\
\;\;\;\;\frac{NaChar}{\frac{Ev}{KbT} + 2} - \frac{NdChar}{-1 - e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{2} - NaChar \cdot \frac{1}{-1 - e^{\frac{Vef + \left(EAccept + \left(Ev - mu\right)\right)}{KbT}}}\\
\end{array}
\end{array}
if NaChar < -5.7e18Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 66.2%
if -5.7e18 < NaChar < 4.8000000000000002e48Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 77.3%
Taylor expanded in Ev around 0 67.6%
if 4.8000000000000002e48 < NaChar Initial program 99.9%
Simplified99.9%
div-inv100.0%
+-commutative100.0%
associate-+l-100.0%
Applied egg-rr100.0%
Taylor expanded in KbT around inf 58.0%
Final simplification65.1%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (or (<= NaChar -8.5e-12) (not (<= NaChar 6.5e-45)))
(+
(/ NaChar (+ 1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT))))
(/ NdChar 2.0))
(-
(* NaChar 0.5)
(/ NdChar (- -1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT)))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NaChar <= -8.5e-12) || !(NaChar <= 6.5e-45)) {
tmp = (NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / 2.0);
} else {
tmp = (NaChar * 0.5) - (NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT))));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if ((nachar <= (-8.5d-12)) .or. (.not. (nachar <= 6.5d-45))) then
tmp = (nachar / (1.0d0 + exp(((vef - ((mu - eaccept) - ev)) / kbt)))) + (ndchar / 2.0d0)
else
tmp = (nachar * 0.5d0) - (ndchar / ((-1.0d0) - exp(((edonor + (mu + (vef - ec))) / kbt))))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NaChar <= -8.5e-12) || !(NaChar <= 6.5e-45)) {
tmp = (NaChar / (1.0 + Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / 2.0);
} else {
tmp = (NaChar * 0.5) - (NdChar / (-1.0 - Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if (NaChar <= -8.5e-12) or not (NaChar <= 6.5e-45): tmp = (NaChar / (1.0 + math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / 2.0) else: tmp = (NaChar * 0.5) - (NdChar / (-1.0 - math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if ((NaChar <= -8.5e-12) || !(NaChar <= 6.5e-45)) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT)))) + Float64(NdChar / 2.0)); else tmp = Float64(Float64(NaChar * 0.5) - Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT))))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if ((NaChar <= -8.5e-12) || ~((NaChar <= 6.5e-45))) tmp = (NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / 2.0); else tmp = (NaChar * 0.5) - (NdChar / (-1.0 - exp(((EDonor + (mu + (Vef - Ec))) / KbT)))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[Or[LessEqual[NaChar, -8.5e-12], N[Not[LessEqual[NaChar, 6.5e-45]], $MachinePrecision]], N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar * 0.5), $MachinePrecision] - N[(NdChar / N[(-1.0 - N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NaChar \leq -8.5 \cdot 10^{-12} \lor \neg \left(NaChar \leq 6.5 \cdot 10^{-45}\right):\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}} + \frac{NdChar}{2}\\
\mathbf{else}:\\
\;\;\;\;NaChar \cdot 0.5 - \frac{NdChar}{-1 - e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}}\\
\end{array}
\end{array}
if NaChar < -8.4999999999999997e-12 or 6.4999999999999995e-45 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 55.9%
if -8.4999999999999997e-12 < NaChar < 6.4999999999999995e-45Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 68.6%
*-commutative68.6%
Simplified68.6%
Final simplification61.5%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (or (<= NaChar -7e-11) (not (<= NaChar 1.22e-45)))
(+
(/ NaChar (+ 1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT))))
(/ NdChar 2.0))
(+ (/ NdChar (+ 1.0 (exp (/ (- (+ mu Vef) Ec) KbT)))) (* NaChar 0.5))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NaChar <= -7e-11) || !(NaChar <= 1.22e-45)) {
tmp = (NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / 2.0);
} else {
tmp = (NdChar / (1.0 + exp((((mu + Vef) - Ec) / KbT)))) + (NaChar * 0.5);
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if ((nachar <= (-7d-11)) .or. (.not. (nachar <= 1.22d-45))) then
tmp = (nachar / (1.0d0 + exp(((vef - ((mu - eaccept) - ev)) / kbt)))) + (ndchar / 2.0d0)
else
tmp = (ndchar / (1.0d0 + exp((((mu + vef) - ec) / kbt)))) + (nachar * 0.5d0)
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NaChar <= -7e-11) || !(NaChar <= 1.22e-45)) {
tmp = (NaChar / (1.0 + Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / 2.0);
} else {
tmp = (NdChar / (1.0 + Math.exp((((mu + Vef) - Ec) / KbT)))) + (NaChar * 0.5);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if (NaChar <= -7e-11) or not (NaChar <= 1.22e-45): tmp = (NaChar / (1.0 + math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / 2.0) else: tmp = (NdChar / (1.0 + math.exp((((mu + Vef) - Ec) / KbT)))) + (NaChar * 0.5) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if ((NaChar <= -7e-11) || !(NaChar <= 1.22e-45)) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT)))) + Float64(NdChar / 2.0)); else tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(Float64(mu + Vef) - Ec) / KbT)))) + Float64(NaChar * 0.5)); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if ((NaChar <= -7e-11) || ~((NaChar <= 1.22e-45))) tmp = (NaChar / (1.0 + exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) + (NdChar / 2.0); else tmp = (NdChar / (1.0 + exp((((mu + Vef) - Ec) / KbT)))) + (NaChar * 0.5); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[Or[LessEqual[NaChar, -7e-11], N[Not[LessEqual[NaChar, 1.22e-45]], $MachinePrecision]], N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(N[(mu + Vef), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar * 0.5), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NaChar \leq -7 \cdot 10^{-11} \lor \neg \left(NaChar \leq 1.22 \cdot 10^{-45}\right):\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}} + \frac{NdChar}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{\left(mu + Vef\right) - Ec}{KbT}}} + NaChar \cdot 0.5\\
\end{array}
\end{array}
if NaChar < -7.00000000000000038e-11 or 1.22000000000000007e-45 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 55.9%
if -7.00000000000000038e-11 < NaChar < 1.22000000000000007e-45Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 68.6%
*-commutative68.6%
Simplified68.6%
Taylor expanded in EDonor around 0 63.0%
Final simplification59.0%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (exp (/ Vef KbT))))
(if (<= NdChar -7.4e-9)
(- (/ NaChar (+ (/ Vef KbT) 2.0)) (/ NdChar (- -1.0 t_0)))
(if (<= NdChar -6.1e-289)
(+ (/ NaChar (+ 1.0 (exp (/ EAccept KbT)))) (/ NdChar 2.0))
(if (<= NdChar 4e-120)
(+ (/ NaChar (+ 1.0 t_0)) (/ NdChar 2.0))
(+ (/ NdChar (+ 1.0 (exp (/ Ec (- KbT))))) (* NaChar 0.5)))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = exp((Vef / KbT));
double tmp;
if (NdChar <= -7.4e-9) {
tmp = (NaChar / ((Vef / KbT) + 2.0)) - (NdChar / (-1.0 - t_0));
} else if (NdChar <= -6.1e-289) {
tmp = (NaChar / (1.0 + exp((EAccept / KbT)))) + (NdChar / 2.0);
} else if (NdChar <= 4e-120) {
tmp = (NaChar / (1.0 + t_0)) + (NdChar / 2.0);
} else {
tmp = (NdChar / (1.0 + exp((Ec / -KbT)))) + (NaChar * 0.5);
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: tmp
t_0 = exp((vef / kbt))
if (ndchar <= (-7.4d-9)) then
tmp = (nachar / ((vef / kbt) + 2.0d0)) - (ndchar / ((-1.0d0) - t_0))
else if (ndchar <= (-6.1d-289)) then
tmp = (nachar / (1.0d0 + exp((eaccept / kbt)))) + (ndchar / 2.0d0)
else if (ndchar <= 4d-120) then
tmp = (nachar / (1.0d0 + t_0)) + (ndchar / 2.0d0)
else
tmp = (ndchar / (1.0d0 + exp((ec / -kbt)))) + (nachar * 0.5d0)
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = Math.exp((Vef / KbT));
double tmp;
if (NdChar <= -7.4e-9) {
tmp = (NaChar / ((Vef / KbT) + 2.0)) - (NdChar / (-1.0 - t_0));
} else if (NdChar <= -6.1e-289) {
tmp = (NaChar / (1.0 + Math.exp((EAccept / KbT)))) + (NdChar / 2.0);
} else if (NdChar <= 4e-120) {
tmp = (NaChar / (1.0 + t_0)) + (NdChar / 2.0);
} else {
tmp = (NdChar / (1.0 + Math.exp((Ec / -KbT)))) + (NaChar * 0.5);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = math.exp((Vef / KbT)) tmp = 0 if NdChar <= -7.4e-9: tmp = (NaChar / ((Vef / KbT) + 2.0)) - (NdChar / (-1.0 - t_0)) elif NdChar <= -6.1e-289: tmp = (NaChar / (1.0 + math.exp((EAccept / KbT)))) + (NdChar / 2.0) elif NdChar <= 4e-120: tmp = (NaChar / (1.0 + t_0)) + (NdChar / 2.0) else: tmp = (NdChar / (1.0 + math.exp((Ec / -KbT)))) + (NaChar * 0.5) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = exp(Float64(Vef / KbT)) tmp = 0.0 if (NdChar <= -7.4e-9) tmp = Float64(Float64(NaChar / Float64(Float64(Vef / KbT) + 2.0)) - Float64(NdChar / Float64(-1.0 - t_0))); elseif (NdChar <= -6.1e-289) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT)))) + Float64(NdChar / 2.0)); elseif (NdChar <= 4e-120) tmp = Float64(Float64(NaChar / Float64(1.0 + t_0)) + Float64(NdChar / 2.0)); else tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Ec / Float64(-KbT))))) + Float64(NaChar * 0.5)); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = exp((Vef / KbT)); tmp = 0.0; if (NdChar <= -7.4e-9) tmp = (NaChar / ((Vef / KbT) + 2.0)) - (NdChar / (-1.0 - t_0)); elseif (NdChar <= -6.1e-289) tmp = (NaChar / (1.0 + exp((EAccept / KbT)))) + (NdChar / 2.0); elseif (NdChar <= 4e-120) tmp = (NaChar / (1.0 + t_0)) + (NdChar / 2.0); else tmp = (NdChar / (1.0 + exp((Ec / -KbT)))) + (NaChar * 0.5); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]}, If[LessEqual[NdChar, -7.4e-9], N[(N[(NaChar / N[(N[(Vef / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision] - N[(NdChar / N[(-1.0 - t$95$0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NdChar, -6.1e-289], N[(N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[NdChar, 4e-120], N[(N[(NaChar / N[(1.0 + t$95$0), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar / N[(1.0 + N[Exp[N[(Ec / (-KbT)), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar * 0.5), $MachinePrecision]), $MachinePrecision]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := e^{\frac{Vef}{KbT}}\\
\mathbf{if}\;NdChar \leq -7.4 \cdot 10^{-9}:\\
\;\;\;\;\frac{NaChar}{\frac{Vef}{KbT} + 2} - \frac{NdChar}{-1 - t\_0}\\
\mathbf{elif}\;NdChar \leq -6.1 \cdot 10^{-289}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}} + \frac{NdChar}{2}\\
\mathbf{elif}\;NdChar \leq 4 \cdot 10^{-120}:\\
\;\;\;\;\frac{NaChar}{1 + t\_0} + \frac{NdChar}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{Ec}{-KbT}}} + NaChar \cdot 0.5\\
\end{array}
\end{array}
if NdChar < -7.4e-9Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 77.2%
Taylor expanded in Vef around 0 66.7%
+-commutative66.7%
Simplified66.7%
Taylor expanded in EDonor around 0 58.9%
Taylor expanded in Vef around inf 49.1%
if -7.4e-9 < NdChar < -6.0999999999999998e-289Initial program 99.9%
Simplified99.9%
Taylor expanded in EAccept around inf 64.7%
Taylor expanded in KbT around inf 43.2%
if -6.0999999999999998e-289 < NdChar < 3.99999999999999991e-120Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 72.6%
Taylor expanded in KbT around inf 54.7%
if 3.99999999999999991e-120 < NdChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 53.2%
*-commutative53.2%
Simplified53.2%
Taylor expanded in Ec around inf 42.8%
mul-1-neg52.2%
distribute-neg-frac252.2%
Simplified42.8%
Final simplification46.6%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (<= NdChar -1e+25)
(+ (/ NdChar (+ 1.0 (exp (/ EDonor KbT)))) (/ NaChar (+ (/ Vef KbT) 2.0)))
(if (<= NdChar -1.56e-288)
(+ (/ NaChar (+ 1.0 (exp (/ EAccept KbT)))) (/ NdChar 2.0))
(if (<= NdChar 3e-121)
(+ (/ NaChar (+ 1.0 (exp (/ Vef KbT)))) (/ NdChar 2.0))
(+ (/ NdChar (+ 1.0 (exp (/ Ec (- KbT))))) (* NaChar 0.5))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (NdChar <= -1e+25) {
tmp = (NdChar / (1.0 + exp((EDonor / KbT)))) + (NaChar / ((Vef / KbT) + 2.0));
} else if (NdChar <= -1.56e-288) {
tmp = (NaChar / (1.0 + exp((EAccept / KbT)))) + (NdChar / 2.0);
} else if (NdChar <= 3e-121) {
tmp = (NaChar / (1.0 + exp((Vef / KbT)))) + (NdChar / 2.0);
} else {
tmp = (NdChar / (1.0 + exp((Ec / -KbT)))) + (NaChar * 0.5);
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if (ndchar <= (-1d+25)) then
tmp = (ndchar / (1.0d0 + exp((edonor / kbt)))) + (nachar / ((vef / kbt) + 2.0d0))
else if (ndchar <= (-1.56d-288)) then
tmp = (nachar / (1.0d0 + exp((eaccept / kbt)))) + (ndchar / 2.0d0)
else if (ndchar <= 3d-121) then
tmp = (nachar / (1.0d0 + exp((vef / kbt)))) + (ndchar / 2.0d0)
else
tmp = (ndchar / (1.0d0 + exp((ec / -kbt)))) + (nachar * 0.5d0)
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (NdChar <= -1e+25) {
tmp = (NdChar / (1.0 + Math.exp((EDonor / KbT)))) + (NaChar / ((Vef / KbT) + 2.0));
} else if (NdChar <= -1.56e-288) {
tmp = (NaChar / (1.0 + Math.exp((EAccept / KbT)))) + (NdChar / 2.0);
} else if (NdChar <= 3e-121) {
tmp = (NaChar / (1.0 + Math.exp((Vef / KbT)))) + (NdChar / 2.0);
} else {
tmp = (NdChar / (1.0 + Math.exp((Ec / -KbT)))) + (NaChar * 0.5);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if NdChar <= -1e+25: tmp = (NdChar / (1.0 + math.exp((EDonor / KbT)))) + (NaChar / ((Vef / KbT) + 2.0)) elif NdChar <= -1.56e-288: tmp = (NaChar / (1.0 + math.exp((EAccept / KbT)))) + (NdChar / 2.0) elif NdChar <= 3e-121: tmp = (NaChar / (1.0 + math.exp((Vef / KbT)))) + (NdChar / 2.0) else: tmp = (NdChar / (1.0 + math.exp((Ec / -KbT)))) + (NaChar * 0.5) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (NdChar <= -1e+25) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(EDonor / KbT)))) + Float64(NaChar / Float64(Float64(Vef / KbT) + 2.0))); elseif (NdChar <= -1.56e-288) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT)))) + Float64(NdChar / 2.0)); elseif (NdChar <= 3e-121) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Vef / KbT)))) + Float64(NdChar / 2.0)); else tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Ec / Float64(-KbT))))) + Float64(NaChar * 0.5)); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (NdChar <= -1e+25) tmp = (NdChar / (1.0 + exp((EDonor / KbT)))) + (NaChar / ((Vef / KbT) + 2.0)); elseif (NdChar <= -1.56e-288) tmp = (NaChar / (1.0 + exp((EAccept / KbT)))) + (NdChar / 2.0); elseif (NdChar <= 3e-121) tmp = (NaChar / (1.0 + exp((Vef / KbT)))) + (NdChar / 2.0); else tmp = (NdChar / (1.0 + exp((Ec / -KbT)))) + (NaChar * 0.5); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[NdChar, -1e+25], N[(N[(NdChar / N[(1.0 + N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(N[(Vef / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NdChar, -1.56e-288], N[(N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[NdChar, 3e-121], N[(N[(NaChar / N[(1.0 + N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar / N[(1.0 + N[Exp[N[(Ec / (-KbT)), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar * 0.5), $MachinePrecision]), $MachinePrecision]]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NdChar \leq -1 \cdot 10^{+25}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{EDonor}{KbT}}} + \frac{NaChar}{\frac{Vef}{KbT} + 2}\\
\mathbf{elif}\;NdChar \leq -1.56 \cdot 10^{-288}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}} + \frac{NdChar}{2}\\
\mathbf{elif}\;NdChar \leq 3 \cdot 10^{-121}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Vef}{KbT}}} + \frac{NdChar}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{Ec}{-KbT}}} + NaChar \cdot 0.5\\
\end{array}
\end{array}
if NdChar < -1.00000000000000009e25Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 78.8%
Taylor expanded in EDonor around inf 50.8%
Taylor expanded in Vef around 0 46.1%
+-commutative68.7%
Simplified46.1%
if -1.00000000000000009e25 < NdChar < -1.5599999999999999e-288Initial program 99.9%
Simplified99.9%
Taylor expanded in EAccept around inf 65.3%
Taylor expanded in KbT around inf 42.4%
if -1.5599999999999999e-288 < NdChar < 2.9999999999999999e-121Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 72.6%
Taylor expanded in KbT around inf 54.7%
if 2.9999999999999999e-121 < NdChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 53.2%
*-commutative53.2%
Simplified53.2%
Taylor expanded in Ec around inf 42.8%
mul-1-neg52.2%
distribute-neg-frac252.2%
Simplified42.8%
Final simplification45.4%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (+ (/ NaChar (+ 1.0 (exp (/ EAccept KbT)))) (/ NdChar 2.0))))
(if (<= NaChar -2e+156)
t_0
(if (<= NaChar -5.8e-13)
(+ (/ NaChar (+ 1.0 (exp (/ Vef KbT)))) (/ NdChar 2.0))
(if (<= NaChar 2e+18)
(+ (/ NdChar (+ 1.0 (exp (/ mu KbT)))) (* NaChar 0.5))
t_0)))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar / (1.0 + exp((EAccept / KbT)))) + (NdChar / 2.0);
double tmp;
if (NaChar <= -2e+156) {
tmp = t_0;
} else if (NaChar <= -5.8e-13) {
tmp = (NaChar / (1.0 + exp((Vef / KbT)))) + (NdChar / 2.0);
} else if (NaChar <= 2e+18) {
tmp = (NdChar / (1.0 + exp((mu / KbT)))) + (NaChar * 0.5);
} else {
tmp = t_0;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: tmp
t_0 = (nachar / (1.0d0 + exp((eaccept / kbt)))) + (ndchar / 2.0d0)
if (nachar <= (-2d+156)) then
tmp = t_0
else if (nachar <= (-5.8d-13)) then
tmp = (nachar / (1.0d0 + exp((vef / kbt)))) + (ndchar / 2.0d0)
else if (nachar <= 2d+18) then
tmp = (ndchar / (1.0d0 + exp((mu / kbt)))) + (nachar * 0.5d0)
else
tmp = t_0
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar / (1.0 + Math.exp((EAccept / KbT)))) + (NdChar / 2.0);
double tmp;
if (NaChar <= -2e+156) {
tmp = t_0;
} else if (NaChar <= -5.8e-13) {
tmp = (NaChar / (1.0 + Math.exp((Vef / KbT)))) + (NdChar / 2.0);
} else if (NaChar <= 2e+18) {
tmp = (NdChar / (1.0 + Math.exp((mu / KbT)))) + (NaChar * 0.5);
} else {
tmp = t_0;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = (NaChar / (1.0 + math.exp((EAccept / KbT)))) + (NdChar / 2.0) tmp = 0 if NaChar <= -2e+156: tmp = t_0 elif NaChar <= -5.8e-13: tmp = (NaChar / (1.0 + math.exp((Vef / KbT)))) + (NdChar / 2.0) elif NaChar <= 2e+18: tmp = (NdChar / (1.0 + math.exp((mu / KbT)))) + (NaChar * 0.5) else: tmp = t_0 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT)))) + Float64(NdChar / 2.0)) tmp = 0.0 if (NaChar <= -2e+156) tmp = t_0; elseif (NaChar <= -5.8e-13) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Vef / KbT)))) + Float64(NdChar / 2.0)); elseif (NaChar <= 2e+18) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(mu / KbT)))) + Float64(NaChar * 0.5)); else tmp = t_0; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = (NaChar / (1.0 + exp((EAccept / KbT)))) + (NdChar / 2.0); tmp = 0.0; if (NaChar <= -2e+156) tmp = t_0; elseif (NaChar <= -5.8e-13) tmp = (NaChar / (1.0 + exp((Vef / KbT)))) + (NdChar / 2.0); elseif (NaChar <= 2e+18) tmp = (NdChar / (1.0 + exp((mu / KbT)))) + (NaChar * 0.5); else tmp = t_0; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -2e+156], t$95$0, If[LessEqual[NaChar, -5.8e-13], N[(N[(NaChar / N[(1.0 + N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 2e+18], N[(N[(NdChar / N[(1.0 + N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar * 0.5), $MachinePrecision]), $MachinePrecision], t$95$0]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}} + \frac{NdChar}{2}\\
\mathbf{if}\;NaChar \leq -2 \cdot 10^{+156}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;NaChar \leq -5.8 \cdot 10^{-13}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Vef}{KbT}}} + \frac{NdChar}{2}\\
\mathbf{elif}\;NaChar \leq 2 \cdot 10^{+18}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{mu}{KbT}}} + NaChar \cdot 0.5\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if NaChar < -2e156 or 2e18 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 56.2%
Taylor expanded in KbT around inf 37.0%
if -2e156 < NaChar < -5.7999999999999995e-13Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 83.1%
Taylor expanded in KbT around inf 52.2%
if -5.7999999999999995e-13 < NaChar < 2e18Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 64.5%
*-commutative64.5%
Simplified64.5%
Taylor expanded in mu around inf 46.1%
Final simplification43.4%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (if (or (<= NaChar -9e+101) (not (<= NaChar 1.2e+85))) (+ (/ NaChar (+ 1.0 (exp (/ EAccept KbT)))) (/ NdChar 2.0)) (+ (/ NdChar (+ 1.0 (exp (/ (- (+ mu Vef) Ec) KbT)))) (* NaChar 0.5))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NaChar <= -9e+101) || !(NaChar <= 1.2e+85)) {
tmp = (NaChar / (1.0 + exp((EAccept / KbT)))) + (NdChar / 2.0);
} else {
tmp = (NdChar / (1.0 + exp((((mu + Vef) - Ec) / KbT)))) + (NaChar * 0.5);
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if ((nachar <= (-9d+101)) .or. (.not. (nachar <= 1.2d+85))) then
tmp = (nachar / (1.0d0 + exp((eaccept / kbt)))) + (ndchar / 2.0d0)
else
tmp = (ndchar / (1.0d0 + exp((((mu + vef) - ec) / kbt)))) + (nachar * 0.5d0)
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NaChar <= -9e+101) || !(NaChar <= 1.2e+85)) {
tmp = (NaChar / (1.0 + Math.exp((EAccept / KbT)))) + (NdChar / 2.0);
} else {
tmp = (NdChar / (1.0 + Math.exp((((mu + Vef) - Ec) / KbT)))) + (NaChar * 0.5);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if (NaChar <= -9e+101) or not (NaChar <= 1.2e+85): tmp = (NaChar / (1.0 + math.exp((EAccept / KbT)))) + (NdChar / 2.0) else: tmp = (NdChar / (1.0 + math.exp((((mu + Vef) - Ec) / KbT)))) + (NaChar * 0.5) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if ((NaChar <= -9e+101) || !(NaChar <= 1.2e+85)) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT)))) + Float64(NdChar / 2.0)); else tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(Float64(mu + Vef) - Ec) / KbT)))) + Float64(NaChar * 0.5)); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if ((NaChar <= -9e+101) || ~((NaChar <= 1.2e+85))) tmp = (NaChar / (1.0 + exp((EAccept / KbT)))) + (NdChar / 2.0); else tmp = (NdChar / (1.0 + exp((((mu + Vef) - Ec) / KbT)))) + (NaChar * 0.5); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[Or[LessEqual[NaChar, -9e+101], N[Not[LessEqual[NaChar, 1.2e+85]], $MachinePrecision]], N[(N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(N[(mu + Vef), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar * 0.5), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NaChar \leq -9 \cdot 10^{+101} \lor \neg \left(NaChar \leq 1.2 \cdot 10^{+85}\right):\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}} + \frac{NdChar}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{\left(mu + Vef\right) - Ec}{KbT}}} + NaChar \cdot 0.5\\
\end{array}
\end{array}
if NaChar < -9.0000000000000004e101 or 1.19999999999999998e85 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 57.7%
Taylor expanded in KbT around inf 40.0%
if -9.0000000000000004e101 < NaChar < 1.19999999999999998e85Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 59.4%
*-commutative59.4%
Simplified59.4%
Taylor expanded in EDonor around 0 55.1%
Final simplification49.5%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (<= KbT -2e-274)
(+ (/ NaChar (+ 1.0 (exp (/ EAccept KbT)))) (/ NdChar 2.0))
(if (<= KbT 4.2e-201)
(+ (/ NdChar (+ 1.0 (exp (/ EDonor KbT)))) (* NaChar 0.5))
(- (/ NdChar 2.0) (/ NaChar (- -1.0 (exp (/ Ev KbT))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (KbT <= -2e-274) {
tmp = (NaChar / (1.0 + exp((EAccept / KbT)))) + (NdChar / 2.0);
} else if (KbT <= 4.2e-201) {
tmp = (NdChar / (1.0 + exp((EDonor / KbT)))) + (NaChar * 0.5);
} else {
tmp = (NdChar / 2.0) - (NaChar / (-1.0 - exp((Ev / KbT))));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if (kbt <= (-2d-274)) then
tmp = (nachar / (1.0d0 + exp((eaccept / kbt)))) + (ndchar / 2.0d0)
else if (kbt <= 4.2d-201) then
tmp = (ndchar / (1.0d0 + exp((edonor / kbt)))) + (nachar * 0.5d0)
else
tmp = (ndchar / 2.0d0) - (nachar / ((-1.0d0) - exp((ev / kbt))))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (KbT <= -2e-274) {
tmp = (NaChar / (1.0 + Math.exp((EAccept / KbT)))) + (NdChar / 2.0);
} else if (KbT <= 4.2e-201) {
tmp = (NdChar / (1.0 + Math.exp((EDonor / KbT)))) + (NaChar * 0.5);
} else {
tmp = (NdChar / 2.0) - (NaChar / (-1.0 - Math.exp((Ev / KbT))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if KbT <= -2e-274: tmp = (NaChar / (1.0 + math.exp((EAccept / KbT)))) + (NdChar / 2.0) elif KbT <= 4.2e-201: tmp = (NdChar / (1.0 + math.exp((EDonor / KbT)))) + (NaChar * 0.5) else: tmp = (NdChar / 2.0) - (NaChar / (-1.0 - math.exp((Ev / KbT)))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (KbT <= -2e-274) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT)))) + Float64(NdChar / 2.0)); elseif (KbT <= 4.2e-201) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(EDonor / KbT)))) + Float64(NaChar * 0.5)); else tmp = Float64(Float64(NdChar / 2.0) - Float64(NaChar / Float64(-1.0 - exp(Float64(Ev / KbT))))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (KbT <= -2e-274) tmp = (NaChar / (1.0 + exp((EAccept / KbT)))) + (NdChar / 2.0); elseif (KbT <= 4.2e-201) tmp = (NdChar / (1.0 + exp((EDonor / KbT)))) + (NaChar * 0.5); else tmp = (NdChar / 2.0) - (NaChar / (-1.0 - exp((Ev / KbT)))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[KbT, -2e-274], N[(N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[KbT, 4.2e-201], N[(N[(NdChar / N[(1.0 + N[Exp[N[(EDonor / 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[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;KbT \leq -2 \cdot 10^{-274}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}} + \frac{NdChar}{2}\\
\mathbf{elif}\;KbT \leq 4.2 \cdot 10^{-201}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{EDonor}{KbT}}} + NaChar \cdot 0.5\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{2} - \frac{NaChar}{-1 - e^{\frac{Ev}{KbT}}}\\
\end{array}
\end{array}
if KbT < -1.99999999999999993e-274Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 62.7%
Taylor expanded in KbT around inf 37.0%
if -1.99999999999999993e-274 < KbT < 4.20000000000000024e-201Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 41.1%
*-commutative41.1%
Simplified41.1%
Taylor expanded in EDonor around inf 37.0%
if 4.20000000000000024e-201 < KbT Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 48.0%
Taylor expanded in Ev around inf 36.2%
Final simplification36.6%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (if (<= EAccept 5.2e+63) (- (/ NdChar 2.0) (/ NaChar (- -1.0 (exp (/ Ev KbT))))) (+ (/ NaChar (+ 1.0 (exp (/ EAccept KbT)))) (/ NdChar 2.0))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (EAccept <= 5.2e+63) {
tmp = (NdChar / 2.0) - (NaChar / (-1.0 - exp((Ev / KbT))));
} else {
tmp = (NaChar / (1.0 + exp((EAccept / KbT)))) + (NdChar / 2.0);
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if (eaccept <= 5.2d+63) then
tmp = (ndchar / 2.0d0) - (nachar / ((-1.0d0) - exp((ev / kbt))))
else
tmp = (nachar / (1.0d0 + exp((eaccept / kbt)))) + (ndchar / 2.0d0)
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (EAccept <= 5.2e+63) {
tmp = (NdChar / 2.0) - (NaChar / (-1.0 - Math.exp((Ev / KbT))));
} else {
tmp = (NaChar / (1.0 + Math.exp((EAccept / KbT)))) + (NdChar / 2.0);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if EAccept <= 5.2e+63: tmp = (NdChar / 2.0) - (NaChar / (-1.0 - math.exp((Ev / KbT)))) else: tmp = (NaChar / (1.0 + math.exp((EAccept / KbT)))) + (NdChar / 2.0) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (EAccept <= 5.2e+63) tmp = Float64(Float64(NdChar / 2.0) - Float64(NaChar / Float64(-1.0 - exp(Float64(Ev / KbT))))); else tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT)))) + Float64(NdChar / 2.0)); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (EAccept <= 5.2e+63) tmp = (NdChar / 2.0) - (NaChar / (-1.0 - exp((Ev / KbT)))); else tmp = (NaChar / (1.0 + exp((EAccept / KbT)))) + (NdChar / 2.0); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[EAccept, 5.2e+63], N[(N[(NdChar / 2.0), $MachinePrecision] - N[(NaChar / N[(-1.0 - N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;EAccept \leq 5.2 \cdot 10^{+63}:\\
\;\;\;\;\frac{NdChar}{2} - \frac{NaChar}{-1 - e^{\frac{Ev}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}} + \frac{NdChar}{2}\\
\end{array}
\end{array}
if EAccept < 5.2000000000000002e63Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 46.3%
Taylor expanded in Ev around inf 36.6%
if 5.2000000000000002e63 < EAccept Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 87.0%
Taylor expanded in KbT around inf 44.6%
Final simplification38.2%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (+ (/ NaChar (+ 1.0 (exp (/ EAccept KbT)))) (/ NdChar 2.0)))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NaChar / (1.0 + exp((EAccept / KbT)))) + (NdChar / 2.0);
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
code = (nachar / (1.0d0 + exp((eaccept / kbt)))) + (ndchar / 2.0d0)
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NaChar / (1.0 + Math.exp((EAccept / KbT)))) + (NdChar / 2.0);
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return (NaChar / (1.0 + math.exp((EAccept / KbT)))) + (NdChar / 2.0)
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT)))) + Float64(NdChar / 2.0)) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = (NaChar / (1.0 + exp((EAccept / KbT)))) + (NdChar / 2.0); end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}} + \frac{NdChar}{2}
\end{array}
Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 69.9%
Taylor expanded in KbT around inf 35.1%
Final simplification35.1%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (<= KbT 1.05e-284)
(+
(/ NaChar (+ (/ Vef KbT) 2.0))
(/ NdChar (+ 2.0 (+ (/ Vef KbT) (/ (- mu 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 (KbT <= 1.05e-284) {
tmp = (NaChar / ((Vef / KbT) + 2.0)) + (NdChar / (2.0 + ((Vef / KbT) + ((mu - 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 (kbt <= 1.05d-284) then
tmp = (nachar / ((vef / kbt) + 2.0d0)) + (ndchar / (2.0d0 + ((vef / kbt) + ((mu - 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 (KbT <= 1.05e-284) {
tmp = (NaChar / ((Vef / KbT) + 2.0)) + (NdChar / (2.0 + ((Vef / KbT) + ((mu - 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 KbT <= 1.05e-284: tmp = (NaChar / ((Vef / KbT) + 2.0)) + (NdChar / (2.0 + ((Vef / KbT) + ((mu - 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 (KbT <= 1.05e-284) tmp = Float64(Float64(NaChar / Float64(Float64(Vef / KbT) + 2.0)) + Float64(NdChar / Float64(2.0 + Float64(Float64(Vef / KbT) + Float64(Float64(mu - 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 (KbT <= 1.05e-284) tmp = (NaChar / ((Vef / KbT) + 2.0)) + (NdChar / (2.0 + ((Vef / KbT) + ((mu - 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[KbT, 1.05e-284], N[(N[(NaChar / N[(N[(Vef / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(2.0 + N[(N[(Vef / KbT), $MachinePrecision] + N[(N[(mu - Ec), $MachinePrecision] / KbT), $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}\;KbT \leq 1.05 \cdot 10^{-284}:\\
\;\;\;\;\frac{NaChar}{\frac{Vef}{KbT} + 2} + \frac{NdChar}{2 + \left(\frac{Vef}{KbT} + \frac{mu - Ec}{KbT}\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{2} + \frac{NaChar}{2}\\
\end{array}
\end{array}
if KbT < 1.04999999999999996e-284Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 73.0%
Taylor expanded in Vef around 0 55.8%
+-commutative55.8%
Simplified55.8%
Taylor expanded in EDonor around 0 51.5%
Taylor expanded in KbT around inf 32.3%
associate-+r-32.3%
associate--l+32.3%
div-sub33.1%
Simplified33.1%
if 1.04999999999999996e-284 < KbT Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 45.2%
Taylor expanded in KbT around inf 28.3%
Final simplification30.8%
(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 47.2%
Taylor expanded in KbT around inf 29.0%
herbie shell --seed 2024102
(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))))))