
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (+ (/ NdChar (+ 1.0 (exp (/ (- (- (- (- Ec Vef) EDonor) mu)) KbT)))) (/ NaChar (+ 1.0 (exp (/ (+ (+ (+ Ev Vef) EAccept) (- mu)) KbT))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NdChar / (1.0 + exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + exp(((((Ev + Vef) + EAccept) + -mu) / KbT))));
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
code = (ndchar / (1.0d0 + exp((-(((ec - vef) - edonor) - mu) / kbt)))) + (nachar / (1.0d0 + exp(((((ev + vef) + eaccept) + -mu) / kbt))))
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NdChar / (1.0 + Math.exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + Math.exp(((((Ev + Vef) + EAccept) + -mu) / KbT))));
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return (NdChar / (1.0 + math.exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + math.exp(((((Ev + Vef) + EAccept) + -mu) / KbT))))
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(-Float64(Float64(Float64(Ec - Vef) - EDonor) - mu)) / KbT)))) + Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(Float64(Ev + Vef) + EAccept) + Float64(-mu)) / KbT))))) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = (NdChar / (1.0 + exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + exp(((((Ev + Vef) + EAccept) + -mu) / KbT)))); end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(N[(NdChar / N[(1.0 + N[Exp[N[((-N[(N[(N[(Ec - Vef), $MachinePrecision] - EDonor), $MachinePrecision] - mu), $MachinePrecision]) / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Exp[N[(N[(N[(N[(Ev + Vef), $MachinePrecision] + EAccept), $MachinePrecision] + (-mu)), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{NdChar}{1 + e^{\frac{-\left(\left(\left(Ec - Vef\right) - EDonor\right) - mu\right)}{KbT}}} + \frac{NaChar}{1 + e^{\frac{\left(\left(Ev + Vef\right) + EAccept\right) + \left(-mu\right)}{KbT}}}
\end{array}
Sampling outcomes in binary64 precision:
Herbie found 25 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (+ (/ NdChar (+ 1.0 (exp (/ (- (- (- (- Ec Vef) EDonor) mu)) KbT)))) (/ NaChar (+ 1.0 (exp (/ (+ (+ (+ Ev Vef) EAccept) (- mu)) KbT))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NdChar / (1.0 + exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + exp(((((Ev + Vef) + EAccept) + -mu) / KbT))));
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
code = (ndchar / (1.0d0 + exp((-(((ec - vef) - edonor) - mu) / kbt)))) + (nachar / (1.0d0 + exp(((((ev + vef) + eaccept) + -mu) / kbt))))
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NdChar / (1.0 + Math.exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + Math.exp(((((Ev + Vef) + EAccept) + -mu) / KbT))));
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return (NdChar / (1.0 + math.exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + math.exp(((((Ev + Vef) + EAccept) + -mu) / KbT))))
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(-Float64(Float64(Float64(Ec - Vef) - EDonor) - mu)) / KbT)))) + Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(Float64(Ev + Vef) + EAccept) + Float64(-mu)) / KbT))))) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = (NdChar / (1.0 + exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + exp(((((Ev + Vef) + EAccept) + -mu) / KbT)))); end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(N[(NdChar / N[(1.0 + N[Exp[N[((-N[(N[(N[(Ec - Vef), $MachinePrecision] - EDonor), $MachinePrecision] - mu), $MachinePrecision]) / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Exp[N[(N[(N[(N[(Ev + Vef), $MachinePrecision] + EAccept), $MachinePrecision] + (-mu)), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{NdChar}{1 + e^{\frac{-\left(\left(\left(Ec - Vef\right) - EDonor\right) - mu\right)}{KbT}}} + \frac{NaChar}{1 + e^{\frac{\left(\left(Ev + Vef\right) + EAccept\right) + \left(-mu\right)}{KbT}}}
\end{array}
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (+ (/ NdChar (+ 1.0 (exp (/ (+ mu (+ EDonor (- Vef Ec))) KbT)))) (/ NaChar (+ 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(((mu + (EDonor + (Vef - Ec))) / KbT)))) + (NaChar / (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(((mu + (edonor + (vef - ec))) / kbt)))) + (nachar / (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(((mu + (EDonor + (Vef - Ec))) / KbT)))) + (NaChar / (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(((mu + (EDonor + (Vef - Ec))) / KbT)))) + (NaChar / (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(mu + Float64(EDonor + Float64(Vef - Ec))) / KbT)))) + Float64(NaChar / 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(((mu + (EDonor + (Vef - Ec))) / KbT)))) + (NaChar / (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[(mu + N[(EDonor + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(EAccept + N[(Ev - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{NdChar}{1 + e^{\frac{mu + \left(EDonor + \left(Vef - Ec\right)\right)}{KbT}}} + \frac{NaChar}{1 + e^{\frac{Vef + \left(EAccept + \left(Ev - mu\right)\right)}{KbT}}}
\end{array}
Initial program 100.0%
Simplified100.0%
Final simplification100.0%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NdChar (+ 1.0 (exp (/ (+ mu (+ EDonor (- Vef Ec))) KbT)))))
(t_1 (+ t_0 (/ NaChar (+ 1.0 (+ 1.0 (/ Ev KbT))))))
(t_2
(+
(/ NaChar (+ 1.0 (exp (/ (+ Vef (+ EAccept (- Ev mu))) KbT))))
(/ NdChar (- (+ 2.0 (+ (/ Vef KbT) (/ EDonor KbT))) (/ Ec KbT))))))
(if (<= NaChar -1.25e+48)
t_2
(if (<= NaChar -1.05e-8)
t_1
(if (<= NaChar -4.2e-105)
t_2
(if (<= NaChar 1.9e-147)
(+
t_0
(/
NaChar
(-
(+ 2.0 (+ (/ EAccept KbT) (+ (/ Ev KbT) (/ Vef KbT))))
(/ mu KbT))))
(if (<= NaChar 1.9e-34)
(+
(/ NaChar (+ 1.0 (exp (/ Ev KbT))))
(/ NdChar (+ 1.0 (exp (- (/ Ec KbT))))))
(if (<= NaChar 1.5e-20) t_1 t_2))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (1.0 + exp(((mu + (EDonor + (Vef - Ec))) / KbT)));
double t_1 = t_0 + (NaChar / (1.0 + (1.0 + (Ev / KbT))));
double t_2 = (NaChar / (1.0 + exp(((Vef + (EAccept + (Ev - mu))) / KbT)))) + (NdChar / ((2.0 + ((Vef / KbT) + (EDonor / KbT))) - (Ec / KbT)));
double tmp;
if (NaChar <= -1.25e+48) {
tmp = t_2;
} else if (NaChar <= -1.05e-8) {
tmp = t_1;
} else if (NaChar <= -4.2e-105) {
tmp = t_2;
} else if (NaChar <= 1.9e-147) {
tmp = t_0 + (NaChar / ((2.0 + ((EAccept / KbT) + ((Ev / KbT) + (Vef / KbT)))) - (mu / KbT)));
} else if (NaChar <= 1.9e-34) {
tmp = (NaChar / (1.0 + exp((Ev / KbT)))) + (NdChar / (1.0 + exp(-(Ec / KbT))));
} else if (NaChar <= 1.5e-20) {
tmp = t_1;
} else {
tmp = t_2;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: t_2
real(8) :: tmp
t_0 = ndchar / (1.0d0 + exp(((mu + (edonor + (vef - ec))) / kbt)))
t_1 = t_0 + (nachar / (1.0d0 + (1.0d0 + (ev / kbt))))
t_2 = (nachar / (1.0d0 + exp(((vef + (eaccept + (ev - mu))) / kbt)))) + (ndchar / ((2.0d0 + ((vef / kbt) + (edonor / kbt))) - (ec / kbt)))
if (nachar <= (-1.25d+48)) then
tmp = t_2
else if (nachar <= (-1.05d-8)) then
tmp = t_1
else if (nachar <= (-4.2d-105)) then
tmp = t_2
else if (nachar <= 1.9d-147) then
tmp = t_0 + (nachar / ((2.0d0 + ((eaccept / kbt) + ((ev / kbt) + (vef / kbt)))) - (mu / kbt)))
else if (nachar <= 1.9d-34) then
tmp = (nachar / (1.0d0 + exp((ev / kbt)))) + (ndchar / (1.0d0 + exp(-(ec / kbt))))
else if (nachar <= 1.5d-20) then
tmp = t_1
else
tmp = t_2
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (1.0 + Math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)));
double t_1 = t_0 + (NaChar / (1.0 + (1.0 + (Ev / KbT))));
double t_2 = (NaChar / (1.0 + Math.exp(((Vef + (EAccept + (Ev - mu))) / KbT)))) + (NdChar / ((2.0 + ((Vef / KbT) + (EDonor / KbT))) - (Ec / KbT)));
double tmp;
if (NaChar <= -1.25e+48) {
tmp = t_2;
} else if (NaChar <= -1.05e-8) {
tmp = t_1;
} else if (NaChar <= -4.2e-105) {
tmp = t_2;
} else if (NaChar <= 1.9e-147) {
tmp = t_0 + (NaChar / ((2.0 + ((EAccept / KbT) + ((Ev / KbT) + (Vef / KbT)))) - (mu / KbT)));
} else if (NaChar <= 1.9e-34) {
tmp = (NaChar / (1.0 + Math.exp((Ev / KbT)))) + (NdChar / (1.0 + Math.exp(-(Ec / KbT))));
} else if (NaChar <= 1.5e-20) {
tmp = t_1;
} else {
tmp = t_2;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NdChar / (1.0 + math.exp(((mu + (EDonor + (Vef - Ec))) / KbT))) t_1 = t_0 + (NaChar / (1.0 + (1.0 + (Ev / KbT)))) t_2 = (NaChar / (1.0 + math.exp(((Vef + (EAccept + (Ev - mu))) / KbT)))) + (NdChar / ((2.0 + ((Vef / KbT) + (EDonor / KbT))) - (Ec / KbT))) tmp = 0 if NaChar <= -1.25e+48: tmp = t_2 elif NaChar <= -1.05e-8: tmp = t_1 elif NaChar <= -4.2e-105: tmp = t_2 elif NaChar <= 1.9e-147: tmp = t_0 + (NaChar / ((2.0 + ((EAccept / KbT) + ((Ev / KbT) + (Vef / KbT)))) - (mu / KbT))) elif NaChar <= 1.9e-34: tmp = (NaChar / (1.0 + math.exp((Ev / KbT)))) + (NdChar / (1.0 + math.exp(-(Ec / KbT)))) elif NaChar <= 1.5e-20: tmp = t_1 else: tmp = t_2 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NdChar / Float64(1.0 + exp(Float64(Float64(mu + Float64(EDonor + Float64(Vef - Ec))) / KbT)))) t_1 = Float64(t_0 + Float64(NaChar / Float64(1.0 + Float64(1.0 + Float64(Ev / KbT))))) t_2 = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(EAccept + Float64(Ev - mu))) / KbT)))) + Float64(NdChar / Float64(Float64(2.0 + Float64(Float64(Vef / KbT) + Float64(EDonor / KbT))) - Float64(Ec / KbT)))) tmp = 0.0 if (NaChar <= -1.25e+48) tmp = t_2; elseif (NaChar <= -1.05e-8) tmp = t_1; elseif (NaChar <= -4.2e-105) tmp = t_2; elseif (NaChar <= 1.9e-147) tmp = Float64(t_0 + Float64(NaChar / Float64(Float64(2.0 + Float64(Float64(EAccept / KbT) + Float64(Float64(Ev / KbT) + Float64(Vef / KbT)))) - Float64(mu / KbT)))); elseif (NaChar <= 1.9e-34) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT)))) + Float64(NdChar / Float64(1.0 + exp(Float64(-Float64(Ec / KbT)))))); elseif (NaChar <= 1.5e-20) tmp = t_1; else tmp = t_2; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NdChar / (1.0 + exp(((mu + (EDonor + (Vef - Ec))) / KbT))); t_1 = t_0 + (NaChar / (1.0 + (1.0 + (Ev / KbT)))); t_2 = (NaChar / (1.0 + exp(((Vef + (EAccept + (Ev - mu))) / KbT)))) + (NdChar / ((2.0 + ((Vef / KbT) + (EDonor / KbT))) - (Ec / KbT))); tmp = 0.0; if (NaChar <= -1.25e+48) tmp = t_2; elseif (NaChar <= -1.05e-8) tmp = t_1; elseif (NaChar <= -4.2e-105) tmp = t_2; elseif (NaChar <= 1.9e-147) tmp = t_0 + (NaChar / ((2.0 + ((EAccept / KbT) + ((Ev / KbT) + (Vef / KbT)))) - (mu / KbT))); elseif (NaChar <= 1.9e-34) tmp = (NaChar / (1.0 + exp((Ev / KbT)))) + (NdChar / (1.0 + exp(-(Ec / KbT)))); elseif (NaChar <= 1.5e-20) tmp = t_1; else tmp = t_2; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NdChar / N[(1.0 + N[Exp[N[(N[(mu + N[(EDonor + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(t$95$0 + N[(NaChar / N[(1.0 + N[(1.0 + N[(Ev / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(EAccept + N[(Ev - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(N[(2.0 + N[(N[(Vef / KbT), $MachinePrecision] + N[(EDonor / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -1.25e+48], t$95$2, If[LessEqual[NaChar, -1.05e-8], t$95$1, If[LessEqual[NaChar, -4.2e-105], t$95$2, If[LessEqual[NaChar, 1.9e-147], N[(t$95$0 + N[(NaChar / N[(N[(2.0 + N[(N[(EAccept / KbT), $MachinePrecision] + N[(N[(Ev / KbT), $MachinePrecision] + N[(Vef / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 1.9e-34], N[(N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(1.0 + N[Exp[(-N[(Ec / KbT), $MachinePrecision])], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 1.5e-20], t$95$1, t$95$2]]]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{1 + e^{\frac{mu + \left(EDonor + \left(Vef - Ec\right)\right)}{KbT}}}\\
t_1 := t_0 + \frac{NaChar}{1 + \left(1 + \frac{Ev}{KbT}\right)}\\
t_2 := \frac{NaChar}{1 + e^{\frac{Vef + \left(EAccept + \left(Ev - mu\right)\right)}{KbT}}} + \frac{NdChar}{\left(2 + \left(\frac{Vef}{KbT} + \frac{EDonor}{KbT}\right)\right) - \frac{Ec}{KbT}}\\
\mathbf{if}\;NaChar \leq -1.25 \cdot 10^{+48}:\\
\;\;\;\;t_2\\
\mathbf{elif}\;NaChar \leq -1.05 \cdot 10^{-8}:\\
\;\;\;\;t_1\\
\mathbf{elif}\;NaChar \leq -4.2 \cdot 10^{-105}:\\
\;\;\;\;t_2\\
\mathbf{elif}\;NaChar \leq 1.9 \cdot 10^{-147}:\\
\;\;\;\;t_0 + \frac{NaChar}{\left(2 + \left(\frac{EAccept}{KbT} + \left(\frac{Ev}{KbT} + \frac{Vef}{KbT}\right)\right)\right) - \frac{mu}{KbT}}\\
\mathbf{elif}\;NaChar \leq 1.9 \cdot 10^{-34}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Ev}{KbT}}} + \frac{NdChar}{1 + e^{-\frac{Ec}{KbT}}}\\
\mathbf{elif}\;NaChar \leq 1.5 \cdot 10^{-20}:\\
\;\;\;\;t_1\\
\mathbf{else}:\\
\;\;\;\;t_2\\
\end{array}
\end{array}
if NaChar < -1.24999999999999993e48 or -1.04999999999999997e-8 < NaChar < -4.2e-105 or 1.50000000000000014e-20 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 66.1%
Taylor expanded in mu around 0 71.3%
if -1.24999999999999993e48 < NaChar < -1.04999999999999997e-8 or 1.9000000000000001e-34 < NaChar < 1.50000000000000014e-20Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 85.1%
Taylor expanded in Ev around 0 71.3%
if -4.2e-105 < NaChar < 1.90000000000000014e-147Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 73.6%
if 1.90000000000000014e-147 < NaChar < 1.9000000000000001e-34Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 88.8%
Taylor expanded in Ec around inf 81.1%
neg-mul-181.1%
distribute-neg-frac81.1%
Simplified81.1%
Final simplification72.7%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0
(+
(/ NaChar (+ 1.0 (exp (/ (+ Vef (+ EAccept (- Ev mu))) KbT))))
(/ NdChar (- (+ 2.0 (+ (/ Vef KbT) (/ EDonor KbT))) (/ Ec KbT)))))
(t_1 (/ NdChar (+ 1.0 (exp (/ (+ mu (+ EDonor (- Vef Ec))) KbT)))))
(t_2 (+ t_1 (/ NaChar (+ 1.0 (exp (/ EAccept KbT)))))))
(if (<= EAccept -3.9e-156)
t_2
(if (<= EAccept -2.75e-241)
t_0
(if (<= EAccept -5.5e-300)
(+ t_1 (/ NaChar (+ 1.0 (+ 1.0 (/ Ev KbT)))))
(if (<= EAccept 1.18e+30) 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(((Vef + (EAccept + (Ev - mu))) / KbT)))) + (NdChar / ((2.0 + ((Vef / KbT) + (EDonor / KbT))) - (Ec / KbT)));
double t_1 = NdChar / (1.0 + exp(((mu + (EDonor + (Vef - Ec))) / KbT)));
double t_2 = t_1 + (NaChar / (1.0 + exp((EAccept / KbT))));
double tmp;
if (EAccept <= -3.9e-156) {
tmp = t_2;
} else if (EAccept <= -2.75e-241) {
tmp = t_0;
} else if (EAccept <= -5.5e-300) {
tmp = t_1 + (NaChar / (1.0 + (1.0 + (Ev / KbT))));
} else if (EAccept <= 1.18e+30) {
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(((vef + (eaccept + (ev - mu))) / kbt)))) + (ndchar / ((2.0d0 + ((vef / kbt) + (edonor / kbt))) - (ec / kbt)))
t_1 = ndchar / (1.0d0 + exp(((mu + (edonor + (vef - ec))) / kbt)))
t_2 = t_1 + (nachar / (1.0d0 + exp((eaccept / kbt))))
if (eaccept <= (-3.9d-156)) then
tmp = t_2
else if (eaccept <= (-2.75d-241)) then
tmp = t_0
else if (eaccept <= (-5.5d-300)) then
tmp = t_1 + (nachar / (1.0d0 + (1.0d0 + (ev / kbt))))
else if (eaccept <= 1.18d+30) 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(((Vef + (EAccept + (Ev - mu))) / KbT)))) + (NdChar / ((2.0 + ((Vef / KbT) + (EDonor / KbT))) - (Ec / KbT)));
double t_1 = NdChar / (1.0 + Math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)));
double t_2 = t_1 + (NaChar / (1.0 + Math.exp((EAccept / KbT))));
double tmp;
if (EAccept <= -3.9e-156) {
tmp = t_2;
} else if (EAccept <= -2.75e-241) {
tmp = t_0;
} else if (EAccept <= -5.5e-300) {
tmp = t_1 + (NaChar / (1.0 + (1.0 + (Ev / KbT))));
} else if (EAccept <= 1.18e+30) {
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(((Vef + (EAccept + (Ev - mu))) / KbT)))) + (NdChar / ((2.0 + ((Vef / KbT) + (EDonor / KbT))) - (Ec / KbT))) t_1 = NdChar / (1.0 + math.exp(((mu + (EDonor + (Vef - Ec))) / KbT))) t_2 = t_1 + (NaChar / (1.0 + math.exp((EAccept / KbT)))) tmp = 0 if EAccept <= -3.9e-156: tmp = t_2 elif EAccept <= -2.75e-241: tmp = t_0 elif EAccept <= -5.5e-300: tmp = t_1 + (NaChar / (1.0 + (1.0 + (Ev / KbT)))) elif EAccept <= 1.18e+30: 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(Float64(Vef + Float64(EAccept + Float64(Ev - mu))) / KbT)))) + Float64(NdChar / Float64(Float64(2.0 + Float64(Float64(Vef / KbT) + Float64(EDonor / KbT))) - Float64(Ec / KbT)))) t_1 = Float64(NdChar / Float64(1.0 + exp(Float64(Float64(mu + Float64(EDonor + Float64(Vef - Ec))) / KbT)))) t_2 = Float64(t_1 + Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT))))) tmp = 0.0 if (EAccept <= -3.9e-156) tmp = t_2; elseif (EAccept <= -2.75e-241) tmp = t_0; elseif (EAccept <= -5.5e-300) tmp = Float64(t_1 + Float64(NaChar / Float64(1.0 + Float64(1.0 + Float64(Ev / KbT))))); elseif (EAccept <= 1.18e+30) 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(((Vef + (EAccept + (Ev - mu))) / KbT)))) + (NdChar / ((2.0 + ((Vef / KbT) + (EDonor / KbT))) - (Ec / KbT))); t_1 = NdChar / (1.0 + exp(((mu + (EDonor + (Vef - Ec))) / KbT))); t_2 = t_1 + (NaChar / (1.0 + exp((EAccept / KbT)))); tmp = 0.0; if (EAccept <= -3.9e-156) tmp = t_2; elseif (EAccept <= -2.75e-241) tmp = t_0; elseif (EAccept <= -5.5e-300) tmp = t_1 + (NaChar / (1.0 + (1.0 + (Ev / KbT)))); elseif (EAccept <= 1.18e+30) 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[(N[(Vef + N[(EAccept + N[(Ev - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(N[(2.0 + N[(N[(Vef / KbT), $MachinePrecision] + N[(EDonor / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(NdChar / N[(1.0 + N[Exp[N[(N[(mu + N[(EDonor + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(t$95$1 + N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[EAccept, -3.9e-156], t$95$2, If[LessEqual[EAccept, -2.75e-241], t$95$0, If[LessEqual[EAccept, -5.5e-300], N[(t$95$1 + N[(NaChar / N[(1.0 + N[(1.0 + N[(Ev / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[EAccept, 1.18e+30], t$95$0, t$95$2]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{Vef + \left(EAccept + \left(Ev - mu\right)\right)}{KbT}}} + \frac{NdChar}{\left(2 + \left(\frac{Vef}{KbT} + \frac{EDonor}{KbT}\right)\right) - \frac{Ec}{KbT}}\\
t_1 := \frac{NdChar}{1 + e^{\frac{mu + \left(EDonor + \left(Vef - Ec\right)\right)}{KbT}}}\\
t_2 := t_1 + \frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}}\\
\mathbf{if}\;EAccept \leq -3.9 \cdot 10^{-156}:\\
\;\;\;\;t_2\\
\mathbf{elif}\;EAccept \leq -2.75 \cdot 10^{-241}:\\
\;\;\;\;t_0\\
\mathbf{elif}\;EAccept \leq -5.5 \cdot 10^{-300}:\\
\;\;\;\;t_1 + \frac{NaChar}{1 + \left(1 + \frac{Ev}{KbT}\right)}\\
\mathbf{elif}\;EAccept \leq 1.18 \cdot 10^{+30}:\\
\;\;\;\;t_0\\
\mathbf{else}:\\
\;\;\;\;t_2\\
\end{array}
\end{array}
if EAccept < -3.9000000000000001e-156 or 1.18e30 < EAccept Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 77.1%
if -3.9000000000000001e-156 < EAccept < -2.7499999999999999e-241 or -5.4999999999999999e-300 < EAccept < 1.18e30Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 68.5%
Taylor expanded in mu around 0 74.6%
if -2.7499999999999999e-241 < EAccept < -5.4999999999999999e-300Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 71.3%
Taylor expanded in Ev around 0 56.6%
Final simplification75.3%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NdChar (+ 1.0 (exp (/ (+ mu (+ EDonor (- Vef Ec))) KbT)))))
(t_1 (+ t_0 (/ NaChar (+ 1.0 (exp (/ Vef KbT)))))))
(if (<= Ev -2.6e+58)
(+ t_0 (/ NaChar (+ 1.0 (exp (/ Ev KbT)))))
(if (<= Ev -7.5e-19)
t_1
(if (<= Ev -1.35e-206)
(+ t_0 (/ NaChar (+ 1.0 (exp (/ (- mu) KbT)))))
(if (<= Ev 2.5e-194)
t_1
(+ t_0 (/ NaChar (+ 1.0 (exp (/ EAccept KbT)))))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (1.0 + exp(((mu + (EDonor + (Vef - Ec))) / KbT)));
double t_1 = t_0 + (NaChar / (1.0 + exp((Vef / KbT))));
double tmp;
if (Ev <= -2.6e+58) {
tmp = t_0 + (NaChar / (1.0 + exp((Ev / KbT))));
} else if (Ev <= -7.5e-19) {
tmp = t_1;
} else if (Ev <= -1.35e-206) {
tmp = t_0 + (NaChar / (1.0 + exp((-mu / KbT))));
} else if (Ev <= 2.5e-194) {
tmp = t_1;
} else {
tmp = t_0 + (NaChar / (1.0 + exp((EAccept / KbT))));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = ndchar / (1.0d0 + exp(((mu + (edonor + (vef - ec))) / kbt)))
t_1 = t_0 + (nachar / (1.0d0 + exp((vef / kbt))))
if (ev <= (-2.6d+58)) then
tmp = t_0 + (nachar / (1.0d0 + exp((ev / kbt))))
else if (ev <= (-7.5d-19)) then
tmp = t_1
else if (ev <= (-1.35d-206)) then
tmp = t_0 + (nachar / (1.0d0 + exp((-mu / kbt))))
else if (ev <= 2.5d-194) then
tmp = t_1
else
tmp = t_0 + (nachar / (1.0d0 + exp((eaccept / kbt))))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (1.0 + Math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)));
double t_1 = t_0 + (NaChar / (1.0 + Math.exp((Vef / KbT))));
double tmp;
if (Ev <= -2.6e+58) {
tmp = t_0 + (NaChar / (1.0 + Math.exp((Ev / KbT))));
} else if (Ev <= -7.5e-19) {
tmp = t_1;
} else if (Ev <= -1.35e-206) {
tmp = t_0 + (NaChar / (1.0 + Math.exp((-mu / KbT))));
} else if (Ev <= 2.5e-194) {
tmp = t_1;
} else {
tmp = t_0 + (NaChar / (1.0 + Math.exp((EAccept / KbT))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NdChar / (1.0 + math.exp(((mu + (EDonor + (Vef - Ec))) / KbT))) t_1 = t_0 + (NaChar / (1.0 + math.exp((Vef / KbT)))) tmp = 0 if Ev <= -2.6e+58: tmp = t_0 + (NaChar / (1.0 + math.exp((Ev / KbT)))) elif Ev <= -7.5e-19: tmp = t_1 elif Ev <= -1.35e-206: tmp = t_0 + (NaChar / (1.0 + math.exp((-mu / KbT)))) elif Ev <= 2.5e-194: tmp = t_1 else: tmp = t_0 + (NaChar / (1.0 + math.exp((EAccept / KbT)))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NdChar / Float64(1.0 + exp(Float64(Float64(mu + Float64(EDonor + Float64(Vef - Ec))) / KbT)))) t_1 = Float64(t_0 + Float64(NaChar / Float64(1.0 + exp(Float64(Vef / KbT))))) tmp = 0.0 if (Ev <= -2.6e+58) tmp = Float64(t_0 + Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT))))); elseif (Ev <= -7.5e-19) tmp = t_1; elseif (Ev <= -1.35e-206) tmp = Float64(t_0 + Float64(NaChar / Float64(1.0 + exp(Float64(Float64(-mu) / KbT))))); elseif (Ev <= 2.5e-194) tmp = t_1; else tmp = Float64(t_0 + Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT))))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NdChar / (1.0 + exp(((mu + (EDonor + (Vef - Ec))) / KbT))); t_1 = t_0 + (NaChar / (1.0 + exp((Vef / KbT)))); tmp = 0.0; if (Ev <= -2.6e+58) tmp = t_0 + (NaChar / (1.0 + exp((Ev / KbT)))); elseif (Ev <= -7.5e-19) tmp = t_1; elseif (Ev <= -1.35e-206) tmp = t_0 + (NaChar / (1.0 + exp((-mu / KbT)))); elseif (Ev <= 2.5e-194) tmp = t_1; else tmp = t_0 + (NaChar / (1.0 + exp((EAccept / KbT)))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NdChar / N[(1.0 + N[Exp[N[(N[(mu + N[(EDonor + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(t$95$0 + N[(NaChar / N[(1.0 + N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[Ev, -2.6e+58], N[(t$95$0 + N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[Ev, -7.5e-19], t$95$1, If[LessEqual[Ev, -1.35e-206], N[(t$95$0 + N[(NaChar / N[(1.0 + N[Exp[N[((-mu) / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[Ev, 2.5e-194], t$95$1, N[(t$95$0 + N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{1 + e^{\frac{mu + \left(EDonor + \left(Vef - Ec\right)\right)}{KbT}}}\\
t_1 := t_0 + \frac{NaChar}{1 + e^{\frac{Vef}{KbT}}}\\
\mathbf{if}\;Ev \leq -2.6 \cdot 10^{+58}:\\
\;\;\;\;t_0 + \frac{NaChar}{1 + e^{\frac{Ev}{KbT}}}\\
\mathbf{elif}\;Ev \leq -7.5 \cdot 10^{-19}:\\
\;\;\;\;t_1\\
\mathbf{elif}\;Ev \leq -1.35 \cdot 10^{-206}:\\
\;\;\;\;t_0 + \frac{NaChar}{1 + e^{\frac{-mu}{KbT}}}\\
\mathbf{elif}\;Ev \leq 2.5 \cdot 10^{-194}:\\
\;\;\;\;t_1\\
\mathbf{else}:\\
\;\;\;\;t_0 + \frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}}\\
\end{array}
\end{array}
if Ev < -2.59999999999999988e58Initial program 99.9%
Simplified99.9%
Taylor expanded in Ev around inf 89.7%
if -2.59999999999999988e58 < Ev < -7.49999999999999957e-19 or -1.35e-206 < Ev < 2.5000000000000001e-194Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 70.6%
if -7.49999999999999957e-19 < Ev < -1.35e-206Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 71.9%
associate-*r/71.9%
mul-1-neg71.9%
Simplified71.9%
if 2.5000000000000001e-194 < Ev Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 73.5%
Final simplification75.4%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NdChar (+ 1.0 (exp (/ (+ mu (+ EDonor (- Vef Ec))) KbT)))))
(t_1 (+ t_0 (/ NaChar (+ 1.0 (exp (/ Vef KbT)))))))
(if (<= Ev -6.2e+58)
(+ t_0 (/ NaChar (+ 1.0 (pow E (/ Ev KbT)))))
(if (<= Ev -4.8e-22)
t_1
(if (<= Ev -1.5e-205)
(+ t_0 (/ NaChar (+ 1.0 (exp (/ (- mu) KbT)))))
(if (<= Ev 9.5e-196)
t_1
(+ t_0 (/ NaChar (+ 1.0 (exp (/ EAccept KbT)))))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (1.0 + exp(((mu + (EDonor + (Vef - Ec))) / KbT)));
double t_1 = t_0 + (NaChar / (1.0 + exp((Vef / KbT))));
double tmp;
if (Ev <= -6.2e+58) {
tmp = t_0 + (NaChar / (1.0 + pow(((double) M_E), (Ev / KbT))));
} else if (Ev <= -4.8e-22) {
tmp = t_1;
} else if (Ev <= -1.5e-205) {
tmp = t_0 + (NaChar / (1.0 + exp((-mu / KbT))));
} else if (Ev <= 9.5e-196) {
tmp = t_1;
} else {
tmp = t_0 + (NaChar / (1.0 + exp((EAccept / KbT))));
}
return tmp;
}
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (1.0 + Math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)));
double t_1 = t_0 + (NaChar / (1.0 + Math.exp((Vef / KbT))));
double tmp;
if (Ev <= -6.2e+58) {
tmp = t_0 + (NaChar / (1.0 + Math.pow(Math.E, (Ev / KbT))));
} else if (Ev <= -4.8e-22) {
tmp = t_1;
} else if (Ev <= -1.5e-205) {
tmp = t_0 + (NaChar / (1.0 + Math.exp((-mu / KbT))));
} else if (Ev <= 9.5e-196) {
tmp = t_1;
} else {
tmp = t_0 + (NaChar / (1.0 + Math.exp((EAccept / KbT))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NdChar / (1.0 + math.exp(((mu + (EDonor + (Vef - Ec))) / KbT))) t_1 = t_0 + (NaChar / (1.0 + math.exp((Vef / KbT)))) tmp = 0 if Ev <= -6.2e+58: tmp = t_0 + (NaChar / (1.0 + math.pow(math.e, (Ev / KbT)))) elif Ev <= -4.8e-22: tmp = t_1 elif Ev <= -1.5e-205: tmp = t_0 + (NaChar / (1.0 + math.exp((-mu / KbT)))) elif Ev <= 9.5e-196: tmp = t_1 else: tmp = t_0 + (NaChar / (1.0 + math.exp((EAccept / KbT)))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NdChar / Float64(1.0 + exp(Float64(Float64(mu + Float64(EDonor + Float64(Vef - Ec))) / KbT)))) t_1 = Float64(t_0 + Float64(NaChar / Float64(1.0 + exp(Float64(Vef / KbT))))) tmp = 0.0 if (Ev <= -6.2e+58) tmp = Float64(t_0 + Float64(NaChar / Float64(1.0 + (exp(1) ^ Float64(Ev / KbT))))); elseif (Ev <= -4.8e-22) tmp = t_1; elseif (Ev <= -1.5e-205) tmp = Float64(t_0 + Float64(NaChar / Float64(1.0 + exp(Float64(Float64(-mu) / KbT))))); elseif (Ev <= 9.5e-196) tmp = t_1; else tmp = Float64(t_0 + Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT))))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NdChar / (1.0 + exp(((mu + (EDonor + (Vef - Ec))) / KbT))); t_1 = t_0 + (NaChar / (1.0 + exp((Vef / KbT)))); tmp = 0.0; if (Ev <= -6.2e+58) tmp = t_0 + (NaChar / (1.0 + (2.71828182845904523536 ^ (Ev / KbT)))); elseif (Ev <= -4.8e-22) tmp = t_1; elseif (Ev <= -1.5e-205) tmp = t_0 + (NaChar / (1.0 + exp((-mu / KbT)))); elseif (Ev <= 9.5e-196) tmp = t_1; else tmp = t_0 + (NaChar / (1.0 + exp((EAccept / KbT)))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NdChar / N[(1.0 + N[Exp[N[(N[(mu + N[(EDonor + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(t$95$0 + N[(NaChar / N[(1.0 + N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[Ev, -6.2e+58], N[(t$95$0 + N[(NaChar / N[(1.0 + N[Power[E, N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[Ev, -4.8e-22], t$95$1, If[LessEqual[Ev, -1.5e-205], N[(t$95$0 + N[(NaChar / N[(1.0 + N[Exp[N[((-mu) / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[Ev, 9.5e-196], t$95$1, N[(t$95$0 + N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{1 + e^{\frac{mu + \left(EDonor + \left(Vef - Ec\right)\right)}{KbT}}}\\
t_1 := t_0 + \frac{NaChar}{1 + e^{\frac{Vef}{KbT}}}\\
\mathbf{if}\;Ev \leq -6.2 \cdot 10^{+58}:\\
\;\;\;\;t_0 + \frac{NaChar}{1 + {e}^{\left(\frac{Ev}{KbT}\right)}}\\
\mathbf{elif}\;Ev \leq -4.8 \cdot 10^{-22}:\\
\;\;\;\;t_1\\
\mathbf{elif}\;Ev \leq -1.5 \cdot 10^{-205}:\\
\;\;\;\;t_0 + \frac{NaChar}{1 + e^{\frac{-mu}{KbT}}}\\
\mathbf{elif}\;Ev \leq 9.5 \cdot 10^{-196}:\\
\;\;\;\;t_1\\
\mathbf{else}:\\
\;\;\;\;t_0 + \frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}}\\
\end{array}
\end{array}
if Ev < -6.1999999999999998e58Initial program 99.9%
Simplified99.9%
Taylor expanded in Ev around inf 89.7%
*-un-lft-identity89.7%
exp-prod89.7%
Applied egg-rr89.7%
exp-1-e89.7%
Simplified89.7%
if -6.1999999999999998e58 < Ev < -4.80000000000000005e-22 or -1.5e-205 < Ev < 9.50000000000000032e-196Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 70.6%
if -4.80000000000000005e-22 < Ev < -1.5e-205Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 71.9%
associate-*r/71.9%
mul-1-neg71.9%
Simplified71.9%
if 9.50000000000000032e-196 < Ev Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 73.5%
Final simplification75.4%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NdChar (+ 1.0 (exp (/ (+ mu (+ EDonor (- Vef Ec))) KbT))))))
(if (<= EAccept 9.5e-270)
(+ t_0 (/ NaChar (+ 1.0 (exp (/ Ev KbT)))))
(if (<= EAccept 7.5e+29)
(+
(/ NaChar (+ 1.0 (exp (/ (+ Vef (+ EAccept (- Ev mu))) KbT))))
(/ NdChar (- (+ 2.0 (+ (/ Vef KbT) (/ EDonor KbT))) (/ Ec KbT))))
(+ t_0 (/ NaChar (+ 1.0 (exp (/ EAccept KbT)))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (1.0 + exp(((mu + (EDonor + (Vef - Ec))) / KbT)));
double tmp;
if (EAccept <= 9.5e-270) {
tmp = t_0 + (NaChar / (1.0 + exp((Ev / KbT))));
} else if (EAccept <= 7.5e+29) {
tmp = (NaChar / (1.0 + exp(((Vef + (EAccept + (Ev - mu))) / KbT)))) + (NdChar / ((2.0 + ((Vef / KbT) + (EDonor / KbT))) - (Ec / KbT)));
} else {
tmp = t_0 + (NaChar / (1.0 + exp((EAccept / KbT))));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: tmp
t_0 = ndchar / (1.0d0 + exp(((mu + (edonor + (vef - ec))) / kbt)))
if (eaccept <= 9.5d-270) then
tmp = t_0 + (nachar / (1.0d0 + exp((ev / kbt))))
else if (eaccept <= 7.5d+29) then
tmp = (nachar / (1.0d0 + exp(((vef + (eaccept + (ev - mu))) / kbt)))) + (ndchar / ((2.0d0 + ((vef / kbt) + (edonor / kbt))) - (ec / kbt)))
else
tmp = t_0 + (nachar / (1.0d0 + exp((eaccept / kbt))))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (1.0 + Math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)));
double tmp;
if (EAccept <= 9.5e-270) {
tmp = t_0 + (NaChar / (1.0 + Math.exp((Ev / KbT))));
} else if (EAccept <= 7.5e+29) {
tmp = (NaChar / (1.0 + Math.exp(((Vef + (EAccept + (Ev - mu))) / KbT)))) + (NdChar / ((2.0 + ((Vef / KbT) + (EDonor / KbT))) - (Ec / KbT)));
} else {
tmp = t_0 + (NaChar / (1.0 + Math.exp((EAccept / KbT))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NdChar / (1.0 + math.exp(((mu + (EDonor + (Vef - Ec))) / KbT))) tmp = 0 if EAccept <= 9.5e-270: tmp = t_0 + (NaChar / (1.0 + math.exp((Ev / KbT)))) elif EAccept <= 7.5e+29: tmp = (NaChar / (1.0 + math.exp(((Vef + (EAccept + (Ev - mu))) / KbT)))) + (NdChar / ((2.0 + ((Vef / KbT) + (EDonor / KbT))) - (Ec / KbT))) else: tmp = t_0 + (NaChar / (1.0 + math.exp((EAccept / KbT)))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NdChar / Float64(1.0 + exp(Float64(Float64(mu + Float64(EDonor + Float64(Vef - Ec))) / KbT)))) tmp = 0.0 if (EAccept <= 9.5e-270) tmp = Float64(t_0 + Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT))))); elseif (EAccept <= 7.5e+29) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(EAccept + Float64(Ev - mu))) / KbT)))) + Float64(NdChar / Float64(Float64(2.0 + Float64(Float64(Vef / KbT) + Float64(EDonor / KbT))) - Float64(Ec / KbT)))); else tmp = Float64(t_0 + Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT))))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NdChar / (1.0 + exp(((mu + (EDonor + (Vef - Ec))) / KbT))); tmp = 0.0; if (EAccept <= 9.5e-270) tmp = t_0 + (NaChar / (1.0 + exp((Ev / KbT)))); elseif (EAccept <= 7.5e+29) tmp = (NaChar / (1.0 + exp(((Vef + (EAccept + (Ev - mu))) / KbT)))) + (NdChar / ((2.0 + ((Vef / KbT) + (EDonor / KbT))) - (Ec / KbT))); else tmp = t_0 + (NaChar / (1.0 + exp((EAccept / KbT)))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NdChar / N[(1.0 + N[Exp[N[(N[(mu + N[(EDonor + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[EAccept, 9.5e-270], N[(t$95$0 + N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[EAccept, 7.5e+29], N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(EAccept + N[(Ev - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(N[(2.0 + N[(N[(Vef / KbT), $MachinePrecision] + N[(EDonor / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(t$95$0 + N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{1 + e^{\frac{mu + \left(EDonor + \left(Vef - Ec\right)\right)}{KbT}}}\\
\mathbf{if}\;EAccept \leq 9.5 \cdot 10^{-270}:\\
\;\;\;\;t_0 + \frac{NaChar}{1 + e^{\frac{Ev}{KbT}}}\\
\mathbf{elif}\;EAccept \leq 7.5 \cdot 10^{+29}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Vef + \left(EAccept + \left(Ev - mu\right)\right)}{KbT}}} + \frac{NdChar}{\left(2 + \left(\frac{Vef}{KbT} + \frac{EDonor}{KbT}\right)\right) - \frac{Ec}{KbT}}\\
\mathbf{else}:\\
\;\;\;\;t_0 + \frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}}\\
\end{array}
\end{array}
if EAccept < 9.5000000000000006e-270Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 66.3%
if 9.5000000000000006e-270 < EAccept < 7.49999999999999945e29Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 71.7%
Taylor expanded in mu around 0 74.6%
if 7.49999999999999945e29 < EAccept Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 84.1%
Final simplification72.9%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NdChar (+ 1.0 (exp (/ (+ mu (+ EDonor (- Vef Ec))) KbT))))))
(if (<= Ev -3.1e+58)
(+ t_0 (/ NaChar (+ 1.0 (exp (/ Ev KbT)))))
(if (<= Ev 1.22e-194)
(+ t_0 (/ NaChar (+ 1.0 (exp (/ Vef KbT)))))
(+ t_0 (/ NaChar (+ 1.0 (exp (/ EAccept KbT)))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (1.0 + exp(((mu + (EDonor + (Vef - Ec))) / KbT)));
double tmp;
if (Ev <= -3.1e+58) {
tmp = t_0 + (NaChar / (1.0 + exp((Ev / KbT))));
} else if (Ev <= 1.22e-194) {
tmp = t_0 + (NaChar / (1.0 + exp((Vef / KbT))));
} else {
tmp = t_0 + (NaChar / (1.0 + exp((EAccept / KbT))));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: tmp
t_0 = ndchar / (1.0d0 + exp(((mu + (edonor + (vef - ec))) / kbt)))
if (ev <= (-3.1d+58)) then
tmp = t_0 + (nachar / (1.0d0 + exp((ev / kbt))))
else if (ev <= 1.22d-194) then
tmp = t_0 + (nachar / (1.0d0 + exp((vef / kbt))))
else
tmp = t_0 + (nachar / (1.0d0 + exp((eaccept / kbt))))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (1.0 + Math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)));
double tmp;
if (Ev <= -3.1e+58) {
tmp = t_0 + (NaChar / (1.0 + Math.exp((Ev / KbT))));
} else if (Ev <= 1.22e-194) {
tmp = t_0 + (NaChar / (1.0 + Math.exp((Vef / KbT))));
} else {
tmp = t_0 + (NaChar / (1.0 + Math.exp((EAccept / KbT))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NdChar / (1.0 + math.exp(((mu + (EDonor + (Vef - Ec))) / KbT))) tmp = 0 if Ev <= -3.1e+58: tmp = t_0 + (NaChar / (1.0 + math.exp((Ev / KbT)))) elif Ev <= 1.22e-194: tmp = t_0 + (NaChar / (1.0 + math.exp((Vef / KbT)))) else: tmp = t_0 + (NaChar / (1.0 + math.exp((EAccept / KbT)))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NdChar / Float64(1.0 + exp(Float64(Float64(mu + Float64(EDonor + Float64(Vef - Ec))) / KbT)))) tmp = 0.0 if (Ev <= -3.1e+58) tmp = Float64(t_0 + Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT))))); elseif (Ev <= 1.22e-194) tmp = Float64(t_0 + Float64(NaChar / Float64(1.0 + exp(Float64(Vef / KbT))))); else tmp = Float64(t_0 + Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT))))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NdChar / (1.0 + exp(((mu + (EDonor + (Vef - Ec))) / KbT))); tmp = 0.0; if (Ev <= -3.1e+58) tmp = t_0 + (NaChar / (1.0 + exp((Ev / KbT)))); elseif (Ev <= 1.22e-194) tmp = t_0 + (NaChar / (1.0 + exp((Vef / KbT)))); else tmp = t_0 + (NaChar / (1.0 + exp((EAccept / KbT)))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NdChar / N[(1.0 + N[Exp[N[(N[(mu + N[(EDonor + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[Ev, -3.1e+58], N[(t$95$0 + N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[Ev, 1.22e-194], N[(t$95$0 + N[(NaChar / N[(1.0 + N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(t$95$0 + N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{1 + e^{\frac{mu + \left(EDonor + \left(Vef - Ec\right)\right)}{KbT}}}\\
\mathbf{if}\;Ev \leq -3.1 \cdot 10^{+58}:\\
\;\;\;\;t_0 + \frac{NaChar}{1 + e^{\frac{Ev}{KbT}}}\\
\mathbf{elif}\;Ev \leq 1.22 \cdot 10^{-194}:\\
\;\;\;\;t_0 + \frac{NaChar}{1 + e^{\frac{Vef}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;t_0 + \frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}}\\
\end{array}
\end{array}
if Ev < -3.0999999999999999e58Initial program 99.9%
Simplified99.9%
Taylor expanded in Ev around inf 89.7%
if -3.0999999999999999e58 < Ev < 1.2200000000000001e-194Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 72.8%
if 1.2200000000000001e-194 < Ev Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 73.5%
Final simplification76.2%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NdChar (+ 1.0 (exp (/ (+ mu (+ EDonor (- Vef Ec))) KbT)))))
(t_1
(+
(/ NaChar (+ 1.0 (exp (/ (+ Vef (+ EAccept (- Ev mu))) KbT))))
(/ NdChar (- (+ 2.0 (+ (/ Vef KbT) (/ EDonor KbT))) (/ Ec KbT))))))
(if (<= NaChar -3.2e+49)
t_1
(if (<= NaChar -1.8e-8)
(+ t_0 (/ NaChar (+ 1.0 (+ 1.0 (/ Ev KbT)))))
(if (or (<= NaChar -6e-104) (not (<= NaChar 1.15e-70)))
t_1
(+
t_0
(/
NaChar
(-
(+ 2.0 (+ (/ EAccept KbT) (+ (/ Ev KbT) (/ Vef KbT))))
(/ mu KbT)))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (1.0 + exp(((mu + (EDonor + (Vef - Ec))) / KbT)));
double t_1 = (NaChar / (1.0 + exp(((Vef + (EAccept + (Ev - mu))) / KbT)))) + (NdChar / ((2.0 + ((Vef / KbT) + (EDonor / KbT))) - (Ec / KbT)));
double tmp;
if (NaChar <= -3.2e+49) {
tmp = t_1;
} else if (NaChar <= -1.8e-8) {
tmp = t_0 + (NaChar / (1.0 + (1.0 + (Ev / KbT))));
} else if ((NaChar <= -6e-104) || !(NaChar <= 1.15e-70)) {
tmp = t_1;
} else {
tmp = t_0 + (NaChar / ((2.0 + ((EAccept / KbT) + ((Ev / KbT) + (Vef / KbT)))) - (mu / KbT)));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = ndchar / (1.0d0 + exp(((mu + (edonor + (vef - ec))) / kbt)))
t_1 = (nachar / (1.0d0 + exp(((vef + (eaccept + (ev - mu))) / kbt)))) + (ndchar / ((2.0d0 + ((vef / kbt) + (edonor / kbt))) - (ec / kbt)))
if (nachar <= (-3.2d+49)) then
tmp = t_1
else if (nachar <= (-1.8d-8)) then
tmp = t_0 + (nachar / (1.0d0 + (1.0d0 + (ev / kbt))))
else if ((nachar <= (-6d-104)) .or. (.not. (nachar <= 1.15d-70))) then
tmp = t_1
else
tmp = t_0 + (nachar / ((2.0d0 + ((eaccept / kbt) + ((ev / kbt) + (vef / kbt)))) - (mu / kbt)))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (1.0 + Math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)));
double t_1 = (NaChar / (1.0 + Math.exp(((Vef + (EAccept + (Ev - mu))) / KbT)))) + (NdChar / ((2.0 + ((Vef / KbT) + (EDonor / KbT))) - (Ec / KbT)));
double tmp;
if (NaChar <= -3.2e+49) {
tmp = t_1;
} else if (NaChar <= -1.8e-8) {
tmp = t_0 + (NaChar / (1.0 + (1.0 + (Ev / KbT))));
} else if ((NaChar <= -6e-104) || !(NaChar <= 1.15e-70)) {
tmp = t_1;
} else {
tmp = t_0 + (NaChar / ((2.0 + ((EAccept / KbT) + ((Ev / KbT) + (Vef / KbT)))) - (mu / KbT)));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NdChar / (1.0 + math.exp(((mu + (EDonor + (Vef - Ec))) / KbT))) t_1 = (NaChar / (1.0 + math.exp(((Vef + (EAccept + (Ev - mu))) / KbT)))) + (NdChar / ((2.0 + ((Vef / KbT) + (EDonor / KbT))) - (Ec / KbT))) tmp = 0 if NaChar <= -3.2e+49: tmp = t_1 elif NaChar <= -1.8e-8: tmp = t_0 + (NaChar / (1.0 + (1.0 + (Ev / KbT)))) elif (NaChar <= -6e-104) or not (NaChar <= 1.15e-70): tmp = t_1 else: tmp = t_0 + (NaChar / ((2.0 + ((EAccept / KbT) + ((Ev / KbT) + (Vef / KbT)))) - (mu / KbT))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NdChar / Float64(1.0 + exp(Float64(Float64(mu + Float64(EDonor + Float64(Vef - Ec))) / KbT)))) t_1 = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(EAccept + Float64(Ev - mu))) / KbT)))) + Float64(NdChar / Float64(Float64(2.0 + Float64(Float64(Vef / KbT) + Float64(EDonor / KbT))) - Float64(Ec / KbT)))) tmp = 0.0 if (NaChar <= -3.2e+49) tmp = t_1; elseif (NaChar <= -1.8e-8) tmp = Float64(t_0 + Float64(NaChar / Float64(1.0 + Float64(1.0 + Float64(Ev / KbT))))); elseif ((NaChar <= -6e-104) || !(NaChar <= 1.15e-70)) tmp = t_1; else tmp = Float64(t_0 + Float64(NaChar / Float64(Float64(2.0 + Float64(Float64(EAccept / KbT) + Float64(Float64(Ev / KbT) + Float64(Vef / KbT)))) - Float64(mu / KbT)))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NdChar / (1.0 + exp(((mu + (EDonor + (Vef - Ec))) / KbT))); t_1 = (NaChar / (1.0 + exp(((Vef + (EAccept + (Ev - mu))) / KbT)))) + (NdChar / ((2.0 + ((Vef / KbT) + (EDonor / KbT))) - (Ec / KbT))); tmp = 0.0; if (NaChar <= -3.2e+49) tmp = t_1; elseif (NaChar <= -1.8e-8) tmp = t_0 + (NaChar / (1.0 + (1.0 + (Ev / KbT)))); elseif ((NaChar <= -6e-104) || ~((NaChar <= 1.15e-70))) tmp = t_1; else tmp = t_0 + (NaChar / ((2.0 + ((EAccept / KbT) + ((Ev / KbT) + (Vef / KbT)))) - (mu / KbT))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NdChar / N[(1.0 + N[Exp[N[(N[(mu + N[(EDonor + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(EAccept + N[(Ev - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(N[(2.0 + N[(N[(Vef / KbT), $MachinePrecision] + N[(EDonor / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -3.2e+49], t$95$1, If[LessEqual[NaChar, -1.8e-8], N[(t$95$0 + N[(NaChar / N[(1.0 + N[(1.0 + N[(Ev / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[Or[LessEqual[NaChar, -6e-104], N[Not[LessEqual[NaChar, 1.15e-70]], $MachinePrecision]], t$95$1, N[(t$95$0 + N[(NaChar / N[(N[(2.0 + N[(N[(EAccept / KbT), $MachinePrecision] + N[(N[(Ev / KbT), $MachinePrecision] + N[(Vef / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{1 + e^{\frac{mu + \left(EDonor + \left(Vef - Ec\right)\right)}{KbT}}}\\
t_1 := \frac{NaChar}{1 + e^{\frac{Vef + \left(EAccept + \left(Ev - mu\right)\right)}{KbT}}} + \frac{NdChar}{\left(2 + \left(\frac{Vef}{KbT} + \frac{EDonor}{KbT}\right)\right) - \frac{Ec}{KbT}}\\
\mathbf{if}\;NaChar \leq -3.2 \cdot 10^{+49}:\\
\;\;\;\;t_1\\
\mathbf{elif}\;NaChar \leq -1.8 \cdot 10^{-8}:\\
\;\;\;\;t_0 + \frac{NaChar}{1 + \left(1 + \frac{Ev}{KbT}\right)}\\
\mathbf{elif}\;NaChar \leq -6 \cdot 10^{-104} \lor \neg \left(NaChar \leq 1.15 \cdot 10^{-70}\right):\\
\;\;\;\;t_1\\
\mathbf{else}:\\
\;\;\;\;t_0 + \frac{NaChar}{\left(2 + \left(\frac{EAccept}{KbT} + \left(\frac{Ev}{KbT} + \frac{Vef}{KbT}\right)\right)\right) - \frac{mu}{KbT}}\\
\end{array}
\end{array}
if NaChar < -3.20000000000000014e49 or -1.79999999999999991e-8 < NaChar < -6.0000000000000005e-104 or 1.15e-70 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 65.3%
Taylor expanded in mu around 0 70.3%
if -3.20000000000000014e49 < NaChar < -1.79999999999999991e-8Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 82.6%
Taylor expanded in Ev around 0 66.5%
if -6.0000000000000005e-104 < NaChar < 1.15e-70Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 73.1%
Final simplification71.0%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (or (<= NaChar -6.1e+50)
(not
(or (<= NaChar -1.25e-8)
(and (not (<= NaChar -2.75e-145)) (<= NaChar 2.4e-23)))))
(+
(/ NaChar (+ 1.0 (exp (/ (+ Vef (+ EAccept (- Ev mu))) KbT))))
(/ NdChar (- (+ 2.0 (+ (/ Vef KbT) (/ EDonor KbT))) (/ Ec KbT))))
(+
(/ NdChar (+ 1.0 (exp (/ (+ mu (+ EDonor (- Vef Ec))) KbT))))
(/ NaChar (+ 1.0 (+ 1.0 (/ Ev KbT)))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NaChar <= -6.1e+50) || !((NaChar <= -1.25e-8) || (!(NaChar <= -2.75e-145) && (NaChar <= 2.4e-23)))) {
tmp = (NaChar / (1.0 + exp(((Vef + (EAccept + (Ev - mu))) / KbT)))) + (NdChar / ((2.0 + ((Vef / KbT) + (EDonor / KbT))) - (Ec / KbT)));
} else {
tmp = (NdChar / (1.0 + exp(((mu + (EDonor + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + (1.0 + (Ev / KbT))));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if ((nachar <= (-6.1d+50)) .or. (.not. (nachar <= (-1.25d-8)) .or. (.not. (nachar <= (-2.75d-145))) .and. (nachar <= 2.4d-23))) then
tmp = (nachar / (1.0d0 + exp(((vef + (eaccept + (ev - mu))) / kbt)))) + (ndchar / ((2.0d0 + ((vef / kbt) + (edonor / kbt))) - (ec / kbt)))
else
tmp = (ndchar / (1.0d0 + exp(((mu + (edonor + (vef - ec))) / kbt)))) + (nachar / (1.0d0 + (1.0d0 + (ev / kbt))))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NaChar <= -6.1e+50) || !((NaChar <= -1.25e-8) || (!(NaChar <= -2.75e-145) && (NaChar <= 2.4e-23)))) {
tmp = (NaChar / (1.0 + Math.exp(((Vef + (EAccept + (Ev - mu))) / KbT)))) + (NdChar / ((2.0 + ((Vef / KbT) + (EDonor / KbT))) - (Ec / KbT)));
} else {
tmp = (NdChar / (1.0 + Math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + (1.0 + (Ev / KbT))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if (NaChar <= -6.1e+50) or not ((NaChar <= -1.25e-8) or (not (NaChar <= -2.75e-145) and (NaChar <= 2.4e-23))): tmp = (NaChar / (1.0 + math.exp(((Vef + (EAccept + (Ev - mu))) / KbT)))) + (NdChar / ((2.0 + ((Vef / KbT) + (EDonor / KbT))) - (Ec / KbT))) else: tmp = (NdChar / (1.0 + math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + (1.0 + (Ev / KbT)))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if ((NaChar <= -6.1e+50) || !((NaChar <= -1.25e-8) || (!(NaChar <= -2.75e-145) && (NaChar <= 2.4e-23)))) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(EAccept + Float64(Ev - mu))) / KbT)))) + Float64(NdChar / Float64(Float64(2.0 + Float64(Float64(Vef / KbT) + Float64(EDonor / KbT))) - Float64(Ec / KbT)))); else tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(mu + Float64(EDonor + Float64(Vef - Ec))) / KbT)))) + Float64(NaChar / Float64(1.0 + Float64(1.0 + Float64(Ev / KbT))))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if ((NaChar <= -6.1e+50) || ~(((NaChar <= -1.25e-8) || (~((NaChar <= -2.75e-145)) && (NaChar <= 2.4e-23))))) tmp = (NaChar / (1.0 + exp(((Vef + (EAccept + (Ev - mu))) / KbT)))) + (NdChar / ((2.0 + ((Vef / KbT) + (EDonor / KbT))) - (Ec / KbT))); else tmp = (NdChar / (1.0 + exp(((mu + (EDonor + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + (1.0 + (Ev / KbT)))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[Or[LessEqual[NaChar, -6.1e+50], N[Not[Or[LessEqual[NaChar, -1.25e-8], And[N[Not[LessEqual[NaChar, -2.75e-145]], $MachinePrecision], LessEqual[NaChar, 2.4e-23]]]], $MachinePrecision]], N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(EAccept + N[(Ev - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(N[(2.0 + N[(N[(Vef / KbT), $MachinePrecision] + N[(EDonor / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(mu + N[(EDonor + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[(1.0 + N[(Ev / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NaChar \leq -6.1 \cdot 10^{+50} \lor \neg \left(NaChar \leq -1.25 \cdot 10^{-8} \lor \neg \left(NaChar \leq -2.75 \cdot 10^{-145}\right) \land NaChar \leq 2.4 \cdot 10^{-23}\right):\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Vef + \left(EAccept + \left(Ev - mu\right)\right)}{KbT}}} + \frac{NdChar}{\left(2 + \left(\frac{Vef}{KbT} + \frac{EDonor}{KbT}\right)\right) - \frac{Ec}{KbT}}\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{mu + \left(EDonor + \left(Vef - Ec\right)\right)}{KbT}}} + \frac{NaChar}{1 + \left(1 + \frac{Ev}{KbT}\right)}\\
\end{array}
\end{array}
if NaChar < -6.10000000000000026e50 or -1.2499999999999999e-8 < NaChar < -2.75000000000000008e-145 or 2.39999999999999996e-23 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 65.2%
Taylor expanded in mu around 0 70.7%
if -6.10000000000000026e50 < NaChar < -1.2499999999999999e-8 or -2.75000000000000008e-145 < NaChar < 2.39999999999999996e-23Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 79.4%
Taylor expanded in Ev around 0 70.4%
Final simplification70.6%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0
(+
(/ NdChar (+ 1.0 (exp (/ (+ mu (+ EDonor (- Vef Ec))) KbT))))
(/ NaChar (+ 1.0 (+ 1.0 (/ Ev KbT))))))
(t_1 (/ NaChar (+ 1.0 (exp (/ (+ Vef (+ EAccept (- Ev mu))) KbT)))))
(t_2 (+ t_1 (/ NdChar 2.0))))
(if (<= NaChar -2.85e+48)
t_2
(if (<= NaChar -7.5e-9)
t_0
(if (<= NaChar -2.8e-98)
(+ t_1 (/ KbT (/ Vef NdChar)))
(if (<= NaChar 1.25e-19) t_0 t_2))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NdChar / (1.0 + exp(((mu + (EDonor + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + (1.0 + (Ev / KbT))));
double t_1 = NaChar / (1.0 + exp(((Vef + (EAccept + (Ev - mu))) / KbT)));
double t_2 = t_1 + (NdChar / 2.0);
double tmp;
if (NaChar <= -2.85e+48) {
tmp = t_2;
} else if (NaChar <= -7.5e-9) {
tmp = t_0;
} else if (NaChar <= -2.8e-98) {
tmp = t_1 + (KbT / (Vef / NdChar));
} else if (NaChar <= 1.25e-19) {
tmp = t_0;
} else {
tmp = t_2;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: t_2
real(8) :: tmp
t_0 = (ndchar / (1.0d0 + exp(((mu + (edonor + (vef - ec))) / kbt)))) + (nachar / (1.0d0 + (1.0d0 + (ev / kbt))))
t_1 = nachar / (1.0d0 + exp(((vef + (eaccept + (ev - mu))) / kbt)))
t_2 = t_1 + (ndchar / 2.0d0)
if (nachar <= (-2.85d+48)) then
tmp = t_2
else if (nachar <= (-7.5d-9)) then
tmp = t_0
else if (nachar <= (-2.8d-98)) then
tmp = t_1 + (kbt / (vef / ndchar))
else if (nachar <= 1.25d-19) then
tmp = t_0
else
tmp = t_2
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NdChar / (1.0 + Math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + (1.0 + (Ev / KbT))));
double t_1 = NaChar / (1.0 + Math.exp(((Vef + (EAccept + (Ev - mu))) / KbT)));
double t_2 = t_1 + (NdChar / 2.0);
double tmp;
if (NaChar <= -2.85e+48) {
tmp = t_2;
} else if (NaChar <= -7.5e-9) {
tmp = t_0;
} else if (NaChar <= -2.8e-98) {
tmp = t_1 + (KbT / (Vef / NdChar));
} else if (NaChar <= 1.25e-19) {
tmp = t_0;
} else {
tmp = t_2;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = (NdChar / (1.0 + math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + (1.0 + (Ev / KbT)))) t_1 = NaChar / (1.0 + math.exp(((Vef + (EAccept + (Ev - mu))) / KbT))) t_2 = t_1 + (NdChar / 2.0) tmp = 0 if NaChar <= -2.85e+48: tmp = t_2 elif NaChar <= -7.5e-9: tmp = t_0 elif NaChar <= -2.8e-98: tmp = t_1 + (KbT / (Vef / NdChar)) elif NaChar <= 1.25e-19: tmp = t_0 else: tmp = t_2 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(mu + Float64(EDonor + Float64(Vef - Ec))) / KbT)))) + Float64(NaChar / Float64(1.0 + Float64(1.0 + Float64(Ev / KbT))))) t_1 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(EAccept + Float64(Ev - mu))) / KbT)))) t_2 = Float64(t_1 + Float64(NdChar / 2.0)) tmp = 0.0 if (NaChar <= -2.85e+48) tmp = t_2; elseif (NaChar <= -7.5e-9) tmp = t_0; elseif (NaChar <= -2.8e-98) tmp = Float64(t_1 + Float64(KbT / Float64(Vef / NdChar))); elseif (NaChar <= 1.25e-19) tmp = t_0; else tmp = t_2; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = (NdChar / (1.0 + exp(((mu + (EDonor + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + (1.0 + (Ev / KbT)))); t_1 = NaChar / (1.0 + exp(((Vef + (EAccept + (Ev - mu))) / KbT))); t_2 = t_1 + (NdChar / 2.0); tmp = 0.0; if (NaChar <= -2.85e+48) tmp = t_2; elseif (NaChar <= -7.5e-9) tmp = t_0; elseif (NaChar <= -2.8e-98) tmp = t_1 + (KbT / (Vef / NdChar)); elseif (NaChar <= 1.25e-19) tmp = t_0; else tmp = t_2; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(mu + N[(EDonor + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[(1.0 + N[(Ev / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(EAccept + N[(Ev - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(t$95$1 + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -2.85e+48], t$95$2, If[LessEqual[NaChar, -7.5e-9], t$95$0, If[LessEqual[NaChar, -2.8e-98], N[(t$95$1 + N[(KbT / N[(Vef / NdChar), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 1.25e-19], t$95$0, t$95$2]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{1 + e^{\frac{mu + \left(EDonor + \left(Vef - Ec\right)\right)}{KbT}}} + \frac{NaChar}{1 + \left(1 + \frac{Ev}{KbT}\right)}\\
t_1 := \frac{NaChar}{1 + e^{\frac{Vef + \left(EAccept + \left(Ev - mu\right)\right)}{KbT}}}\\
t_2 := t_1 + \frac{NdChar}{2}\\
\mathbf{if}\;NaChar \leq -2.85 \cdot 10^{+48}:\\
\;\;\;\;t_2\\
\mathbf{elif}\;NaChar \leq -7.5 \cdot 10^{-9}:\\
\;\;\;\;t_0\\
\mathbf{elif}\;NaChar \leq -2.8 \cdot 10^{-98}:\\
\;\;\;\;t_1 + \frac{KbT}{\frac{Vef}{NdChar}}\\
\mathbf{elif}\;NaChar \leq 1.25 \cdot 10^{-19}:\\
\;\;\;\;t_0\\
\mathbf{else}:\\
\;\;\;\;t_2\\
\end{array}
\end{array}
if NaChar < -2.84999999999999984e48 or 1.2500000000000001e-19 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 60.2%
if -2.84999999999999984e48 < NaChar < -7.49999999999999933e-9 or -2.7999999999999999e-98 < NaChar < 1.2500000000000001e-19Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 78.9%
Taylor expanded in Ev around 0 69.0%
if -7.49999999999999933e-9 < NaChar < -2.7999999999999999e-98Initial program 99.7%
Simplified99.7%
Taylor expanded in KbT around inf 69.7%
Taylor expanded in Vef around inf 45.2%
associate-/l*45.2%
Simplified45.2%
Final simplification62.9%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0
(+
(/ NaChar (+ 1.0 (exp (/ (+ Vef (+ EAccept (- Ev mu))) KbT))))
(/ KbT (/ Vef NdChar))))
(t_1
(+
(/ NdChar (+ 1.0 (exp (/ (+ mu (+ EDonor (- Vef Ec))) KbT))))
(/ NaChar 2.0))))
(if (<= KbT -2.55e-139)
t_1
(if (<= KbT 1.75e-230)
t_0
(if (<= KbT 2.65e-204)
(+
(/ NaChar 2.0)
(/ NdChar (+ 1.0 (exp (/ (- (+ mu EDonor) Ec) KbT)))))
(if (<= KbT 2.5e+38) t_0 t_1))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar / (1.0 + exp(((Vef + (EAccept + (Ev - mu))) / KbT)))) + (KbT / (Vef / NdChar));
double t_1 = (NdChar / (1.0 + exp(((mu + (EDonor + (Vef - Ec))) / KbT)))) + (NaChar / 2.0);
double tmp;
if (KbT <= -2.55e-139) {
tmp = t_1;
} else if (KbT <= 1.75e-230) {
tmp = t_0;
} else if (KbT <= 2.65e-204) {
tmp = (NaChar / 2.0) + (NdChar / (1.0 + exp((((mu + EDonor) - Ec) / KbT))));
} else if (KbT <= 2.5e+38) {
tmp = t_0;
} else {
tmp = t_1;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = (nachar / (1.0d0 + exp(((vef + (eaccept + (ev - mu))) / kbt)))) + (kbt / (vef / ndchar))
t_1 = (ndchar / (1.0d0 + exp(((mu + (edonor + (vef - ec))) / kbt)))) + (nachar / 2.0d0)
if (kbt <= (-2.55d-139)) then
tmp = t_1
else if (kbt <= 1.75d-230) then
tmp = t_0
else if (kbt <= 2.65d-204) then
tmp = (nachar / 2.0d0) + (ndchar / (1.0d0 + exp((((mu + edonor) - ec) / kbt))))
else if (kbt <= 2.5d+38) then
tmp = t_0
else
tmp = t_1
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar / (1.0 + Math.exp(((Vef + (EAccept + (Ev - mu))) / KbT)))) + (KbT / (Vef / NdChar));
double t_1 = (NdChar / (1.0 + Math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)))) + (NaChar / 2.0);
double tmp;
if (KbT <= -2.55e-139) {
tmp = t_1;
} else if (KbT <= 1.75e-230) {
tmp = t_0;
} else if (KbT <= 2.65e-204) {
tmp = (NaChar / 2.0) + (NdChar / (1.0 + Math.exp((((mu + EDonor) - Ec) / KbT))));
} else if (KbT <= 2.5e+38) {
tmp = t_0;
} 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 + (EAccept + (Ev - mu))) / KbT)))) + (KbT / (Vef / NdChar)) t_1 = (NdChar / (1.0 + math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)))) + (NaChar / 2.0) tmp = 0 if KbT <= -2.55e-139: tmp = t_1 elif KbT <= 1.75e-230: tmp = t_0 elif KbT <= 2.65e-204: tmp = (NaChar / 2.0) + (NdChar / (1.0 + math.exp((((mu + EDonor) - Ec) / KbT)))) elif KbT <= 2.5e+38: tmp = t_0 else: tmp = t_1 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(EAccept + Float64(Ev - mu))) / KbT)))) + Float64(KbT / Float64(Vef / NdChar))) t_1 = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(mu + Float64(EDonor + Float64(Vef - Ec))) / KbT)))) + Float64(NaChar / 2.0)) tmp = 0.0 if (KbT <= -2.55e-139) tmp = t_1; elseif (KbT <= 1.75e-230) tmp = t_0; elseif (KbT <= 2.65e-204) tmp = Float64(Float64(NaChar / 2.0) + Float64(NdChar / Float64(1.0 + exp(Float64(Float64(Float64(mu + EDonor) - Ec) / KbT))))); elseif (KbT <= 2.5e+38) tmp = t_0; else tmp = t_1; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = (NaChar / (1.0 + exp(((Vef + (EAccept + (Ev - mu))) / KbT)))) + (KbT / (Vef / NdChar)); t_1 = (NdChar / (1.0 + exp(((mu + (EDonor + (Vef - Ec))) / KbT)))) + (NaChar / 2.0); tmp = 0.0; if (KbT <= -2.55e-139) tmp = t_1; elseif (KbT <= 1.75e-230) tmp = t_0; elseif (KbT <= 2.65e-204) tmp = (NaChar / 2.0) + (NdChar / (1.0 + exp((((mu + EDonor) - Ec) / KbT)))); elseif (KbT <= 2.5e+38) tmp = t_0; else tmp = t_1; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(EAccept + N[(Ev - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(KbT / N[(Vef / NdChar), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(mu + N[(EDonor + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / 2.0), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[KbT, -2.55e-139], t$95$1, If[LessEqual[KbT, 1.75e-230], t$95$0, If[LessEqual[KbT, 2.65e-204], N[(N[(NaChar / 2.0), $MachinePrecision] + N[(NdChar / N[(1.0 + N[Exp[N[(N[(N[(mu + EDonor), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[KbT, 2.5e+38], t$95$0, t$95$1]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{Vef + \left(EAccept + \left(Ev - mu\right)\right)}{KbT}}} + \frac{KbT}{\frac{Vef}{NdChar}}\\
t_1 := \frac{NdChar}{1 + e^{\frac{mu + \left(EDonor + \left(Vef - Ec\right)\right)}{KbT}}} + \frac{NaChar}{2}\\
\mathbf{if}\;KbT \leq -2.55 \cdot 10^{-139}:\\
\;\;\;\;t_1\\
\mathbf{elif}\;KbT \leq 1.75 \cdot 10^{-230}:\\
\;\;\;\;t_0\\
\mathbf{elif}\;KbT \leq 2.65 \cdot 10^{-204}:\\
\;\;\;\;\frac{NaChar}{2} + \frac{NdChar}{1 + e^{\frac{\left(mu + EDonor\right) - Ec}{KbT}}}\\
\mathbf{elif}\;KbT \leq 2.5 \cdot 10^{+38}:\\
\;\;\;\;t_0\\
\mathbf{else}:\\
\;\;\;\;t_1\\
\end{array}
\end{array}
if KbT < -2.55000000000000018e-139 or 2.49999999999999985e38 < KbT Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 59.3%
if -2.55000000000000018e-139 < KbT < 1.74999999999999994e-230 or 2.6499999999999999e-204 < KbT < 2.49999999999999985e38Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 54.4%
Taylor expanded in Vef around inf 54.8%
associate-/l*51.4%
Simplified51.4%
if 1.74999999999999994e-230 < KbT < 2.6499999999999999e-204Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 65.6%
Taylor expanded in Vef around 0 65.6%
Final simplification56.4%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (+ (/ NaChar (+ 1.0 (exp (/ Ev KbT)))) (* NdChar 0.5)))
(t_1 (/ NdChar (+ 1.0 (exp (/ mu KbT))))))
(if (<= mu -1e+188)
t_1
(if (<= mu -2e-23)
t_0
(if (<= mu -2.8e-144)
(+ (/ NaChar 2.0) (/ NdChar (+ 1.0 (exp (/ Vef KbT)))))
(if (<= mu 1.7e+126) t_0 t_1))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar / (1.0 + exp((Ev / KbT)))) + (NdChar * 0.5);
double t_1 = NdChar / (1.0 + exp((mu / KbT)));
double tmp;
if (mu <= -1e+188) {
tmp = t_1;
} else if (mu <= -2e-23) {
tmp = t_0;
} else if (mu <= -2.8e-144) {
tmp = (NaChar / 2.0) + (NdChar / (1.0 + exp((Vef / KbT))));
} else if (mu <= 1.7e+126) {
tmp = t_0;
} else {
tmp = t_1;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = (nachar / (1.0d0 + exp((ev / kbt)))) + (ndchar * 0.5d0)
t_1 = ndchar / (1.0d0 + exp((mu / kbt)))
if (mu <= (-1d+188)) then
tmp = t_1
else if (mu <= (-2d-23)) then
tmp = t_0
else if (mu <= (-2.8d-144)) then
tmp = (nachar / 2.0d0) + (ndchar / (1.0d0 + exp((vef / kbt))))
else if (mu <= 1.7d+126) then
tmp = t_0
else
tmp = t_1
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar / (1.0 + Math.exp((Ev / KbT)))) + (NdChar * 0.5);
double t_1 = NdChar / (1.0 + Math.exp((mu / KbT)));
double tmp;
if (mu <= -1e+188) {
tmp = t_1;
} else if (mu <= -2e-23) {
tmp = t_0;
} else if (mu <= -2.8e-144) {
tmp = (NaChar / 2.0) + (NdChar / (1.0 + Math.exp((Vef / KbT))));
} else if (mu <= 1.7e+126) {
tmp = t_0;
} else {
tmp = t_1;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = (NaChar / (1.0 + math.exp((Ev / KbT)))) + (NdChar * 0.5) t_1 = NdChar / (1.0 + math.exp((mu / KbT))) tmp = 0 if mu <= -1e+188: tmp = t_1 elif mu <= -2e-23: tmp = t_0 elif mu <= -2.8e-144: tmp = (NaChar / 2.0) + (NdChar / (1.0 + math.exp((Vef / KbT)))) elif mu <= 1.7e+126: tmp = t_0 else: tmp = t_1 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT)))) + Float64(NdChar * 0.5)) t_1 = Float64(NdChar / Float64(1.0 + exp(Float64(mu / KbT)))) tmp = 0.0 if (mu <= -1e+188) tmp = t_1; elseif (mu <= -2e-23) tmp = t_0; elseif (mu <= -2.8e-144) tmp = Float64(Float64(NaChar / 2.0) + Float64(NdChar / Float64(1.0 + exp(Float64(Vef / KbT))))); elseif (mu <= 1.7e+126) tmp = t_0; else tmp = t_1; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = (NaChar / (1.0 + exp((Ev / KbT)))) + (NdChar * 0.5); t_1 = NdChar / (1.0 + exp((mu / KbT))); tmp = 0.0; if (mu <= -1e+188) tmp = t_1; elseif (mu <= -2e-23) tmp = t_0; elseif (mu <= -2.8e-144) tmp = (NaChar / 2.0) + (NdChar / (1.0 + exp((Vef / KbT)))); elseif (mu <= 1.7e+126) tmp = t_0; else tmp = t_1; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar * 0.5), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(NdChar / N[(1.0 + N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[mu, -1e+188], t$95$1, If[LessEqual[mu, -2e-23], t$95$0, If[LessEqual[mu, -2.8e-144], N[(N[(NaChar / 2.0), $MachinePrecision] + N[(NdChar / N[(1.0 + N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[mu, 1.7e+126], t$95$0, t$95$1]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{Ev}{KbT}}} + NdChar \cdot 0.5\\
t_1 := \frac{NdChar}{1 + e^{\frac{mu}{KbT}}}\\
\mathbf{if}\;mu \leq -1 \cdot 10^{+188}:\\
\;\;\;\;t_1\\
\mathbf{elif}\;mu \leq -2 \cdot 10^{-23}:\\
\;\;\;\;t_0\\
\mathbf{elif}\;mu \leq -2.8 \cdot 10^{-144}:\\
\;\;\;\;\frac{NaChar}{2} + \frac{NdChar}{1 + e^{\frac{Vef}{KbT}}}\\
\mathbf{elif}\;mu \leq 1.7 \cdot 10^{+126}:\\
\;\;\;\;t_0\\
\mathbf{else}:\\
\;\;\;\;t_1\\
\end{array}
\end{array}
if mu < -1e188 or 1.69999999999999995e126 < mu Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 42.5%
Taylor expanded in mu around inf 36.4%
Taylor expanded in NdChar around inf 54.2%
if -1e188 < mu < -1.99999999999999992e-23 or -2.79999999999999998e-144 < mu < 1.69999999999999995e126Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 66.8%
Taylor expanded in KbT around inf 42.3%
if -1.99999999999999992e-23 < mu < -2.79999999999999998e-144Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 62.7%
Taylor expanded in Vef around inf 50.5%
Final simplification46.1%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (or (<= NaChar -2.35e-111) (not (<= NaChar 4.1e-31)))
(+
(/ NaChar (+ 1.0 (exp (/ (+ Vef (+ EAccept (- Ev mu))) KbT))))
(/ NdChar 2.0))
(+
(/ NdChar (+ 1.0 (exp (/ (+ mu (+ EDonor (- Vef Ec))) KbT))))
(/ NaChar 2.0))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NaChar <= -2.35e-111) || !(NaChar <= 4.1e-31)) {
tmp = (NaChar / (1.0 + exp(((Vef + (EAccept + (Ev - mu))) / KbT)))) + (NdChar / 2.0);
} else {
tmp = (NdChar / (1.0 + exp(((mu + (EDonor + (Vef - Ec))) / KbT)))) + (NaChar / 2.0);
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if ((nachar <= (-2.35d-111)) .or. (.not. (nachar <= 4.1d-31))) then
tmp = (nachar / (1.0d0 + exp(((vef + (eaccept + (ev - mu))) / kbt)))) + (ndchar / 2.0d0)
else
tmp = (ndchar / (1.0d0 + exp(((mu + (edonor + (vef - ec))) / kbt)))) + (nachar / 2.0d0)
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NaChar <= -2.35e-111) || !(NaChar <= 4.1e-31)) {
tmp = (NaChar / (1.0 + Math.exp(((Vef + (EAccept + (Ev - mu))) / KbT)))) + (NdChar / 2.0);
} else {
tmp = (NdChar / (1.0 + Math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)))) + (NaChar / 2.0);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if (NaChar <= -2.35e-111) or not (NaChar <= 4.1e-31): tmp = (NaChar / (1.0 + math.exp(((Vef + (EAccept + (Ev - mu))) / KbT)))) + (NdChar / 2.0) else: tmp = (NdChar / (1.0 + math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)))) + (NaChar / 2.0) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if ((NaChar <= -2.35e-111) || !(NaChar <= 4.1e-31)) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(EAccept + Float64(Ev - mu))) / KbT)))) + Float64(NdChar / 2.0)); else tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(mu + Float64(EDonor + Float64(Vef - Ec))) / KbT)))) + Float64(NaChar / 2.0)); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if ((NaChar <= -2.35e-111) || ~((NaChar <= 4.1e-31))) tmp = (NaChar / (1.0 + exp(((Vef + (EAccept + (Ev - mu))) / KbT)))) + (NdChar / 2.0); else tmp = (NdChar / (1.0 + exp(((mu + (EDonor + (Vef - Ec))) / KbT)))) + (NaChar / 2.0); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[Or[LessEqual[NaChar, -2.35e-111], N[Not[LessEqual[NaChar, 4.1e-31]], $MachinePrecision]], N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(EAccept + N[(Ev - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(mu + N[(EDonor + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / 2.0), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NaChar \leq -2.35 \cdot 10^{-111} \lor \neg \left(NaChar \leq 4.1 \cdot 10^{-31}\right):\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Vef + \left(EAccept + \left(Ev - mu\right)\right)}{KbT}}} + \frac{NdChar}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{mu + \left(EDonor + \left(Vef - Ec\right)\right)}{KbT}}} + \frac{NaChar}{2}\\
\end{array}
\end{array}
if NaChar < -2.35000000000000003e-111 or 4.0999999999999996e-31 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 56.1%
if -2.35000000000000003e-111 < NaChar < 4.0999999999999996e-31Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 64.1%
Final simplification59.0%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (<= Ev -2.15e+139)
(+ (/ NaChar (+ 1.0 (exp (/ Ev KbT)))) (/ NdChar (+ 2.0 (/ EDonor KbT))))
(+
(/ NdChar (+ 1.0 (exp (/ (+ mu (+ EDonor (- Vef Ec))) KbT))))
(/ NaChar 2.0))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (Ev <= -2.15e+139) {
tmp = (NaChar / (1.0 + exp((Ev / KbT)))) + (NdChar / (2.0 + (EDonor / KbT)));
} else {
tmp = (NdChar / (1.0 + exp(((mu + (EDonor + (Vef - Ec))) / KbT)))) + (NaChar / 2.0);
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if (ev <= (-2.15d+139)) then
tmp = (nachar / (1.0d0 + exp((ev / kbt)))) + (ndchar / (2.0d0 + (edonor / kbt)))
else
tmp = (ndchar / (1.0d0 + exp(((mu + (edonor + (vef - ec))) / kbt)))) + (nachar / 2.0d0)
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (Ev <= -2.15e+139) {
tmp = (NaChar / (1.0 + Math.exp((Ev / KbT)))) + (NdChar / (2.0 + (EDonor / KbT)));
} else {
tmp = (NdChar / (1.0 + Math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)))) + (NaChar / 2.0);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if Ev <= -2.15e+139: tmp = (NaChar / (1.0 + math.exp((Ev / KbT)))) + (NdChar / (2.0 + (EDonor / KbT))) else: tmp = (NdChar / (1.0 + math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)))) + (NaChar / 2.0) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (Ev <= -2.15e+139) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT)))) + Float64(NdChar / Float64(2.0 + Float64(EDonor / KbT)))); else tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(mu + Float64(EDonor + Float64(Vef - Ec))) / KbT)))) + Float64(NaChar / 2.0)); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (Ev <= -2.15e+139) tmp = (NaChar / (1.0 + exp((Ev / KbT)))) + (NdChar / (2.0 + (EDonor / KbT))); else tmp = (NdChar / (1.0 + exp(((mu + (EDonor + (Vef - Ec))) / KbT)))) + (NaChar / 2.0); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[Ev, -2.15e+139], N[(N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(2.0 + N[(EDonor / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(mu + N[(EDonor + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / 2.0), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;Ev \leq -2.15 \cdot 10^{+139}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Ev}{KbT}}} + \frac{NdChar}{2 + \frac{EDonor}{KbT}}\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{mu + \left(EDonor + \left(Vef - Ec\right)\right)}{KbT}}} + \frac{NaChar}{2}\\
\end{array}
\end{array}
if Ev < -2.1499999999999999e139Initial program 99.9%
Simplified99.9%
Taylor expanded in Ev around inf 94.3%
Taylor expanded in EDonor around inf 75.8%
Taylor expanded in EDonor around 0 64.4%
if -2.1499999999999999e139 < Ev Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 47.6%
Final simplification49.8%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (if (or (<= mu -1e+188) (not (<= mu 6.5e+125))) (/ NdChar (+ 1.0 (exp (/ mu KbT)))) (+ (/ NaChar (+ 1.0 (exp (/ Ev KbT)))) (* NdChar 0.5))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((mu <= -1e+188) || !(mu <= 6.5e+125)) {
tmp = NdChar / (1.0 + exp((mu / KbT)));
} else {
tmp = (NaChar / (1.0 + exp((Ev / KbT)))) + (NdChar * 0.5);
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if ((mu <= (-1d+188)) .or. (.not. (mu <= 6.5d+125))) then
tmp = ndchar / (1.0d0 + exp((mu / kbt)))
else
tmp = (nachar / (1.0d0 + exp((ev / kbt)))) + (ndchar * 0.5d0)
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((mu <= -1e+188) || !(mu <= 6.5e+125)) {
tmp = NdChar / (1.0 + Math.exp((mu / KbT)));
} else {
tmp = (NaChar / (1.0 + Math.exp((Ev / KbT)))) + (NdChar * 0.5);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if (mu <= -1e+188) or not (mu <= 6.5e+125): tmp = NdChar / (1.0 + math.exp((mu / KbT))) else: tmp = (NaChar / (1.0 + math.exp((Ev / KbT)))) + (NdChar * 0.5) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if ((mu <= -1e+188) || !(mu <= 6.5e+125)) tmp = Float64(NdChar / Float64(1.0 + exp(Float64(mu / KbT)))); else tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT)))) + Float64(NdChar * 0.5)); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if ((mu <= -1e+188) || ~((mu <= 6.5e+125))) tmp = NdChar / (1.0 + exp((mu / KbT))); else tmp = (NaChar / (1.0 + exp((Ev / KbT)))) + (NdChar * 0.5); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[Or[LessEqual[mu, -1e+188], N[Not[LessEqual[mu, 6.5e+125]], $MachinePrecision]], N[(NdChar / N[(1.0 + N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar * 0.5), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;mu \leq -1 \cdot 10^{+188} \lor \neg \left(mu \leq 6.5 \cdot 10^{+125}\right):\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{mu}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Ev}{KbT}}} + NdChar \cdot 0.5\\
\end{array}
\end{array}
if mu < -1e188 or 6.4999999999999999e125 < mu Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 42.5%
Taylor expanded in mu around inf 36.4%
Taylor expanded in NdChar around inf 54.2%
if -1e188 < mu < 6.4999999999999999e125Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 67.0%
Taylor expanded in KbT around inf 40.7%
Final simplification43.7%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (if (<= Ev -7.6e+58) (+ (/ NaChar (+ 1.0 (exp (/ Ev KbT)))) (* NdChar 0.5)) (+ (/ NaChar 2.0) (/ NdChar (+ 1.0 (exp (/ (- (+ mu EDonor) 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 (Ev <= -7.6e+58) {
tmp = (NaChar / (1.0 + exp((Ev / KbT)))) + (NdChar * 0.5);
} else {
tmp = (NaChar / 2.0) + (NdChar / (1.0 + exp((((mu + EDonor) - 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 (ev <= (-7.6d+58)) then
tmp = (nachar / (1.0d0 + exp((ev / kbt)))) + (ndchar * 0.5d0)
else
tmp = (nachar / 2.0d0) + (ndchar / (1.0d0 + exp((((mu + edonor) - 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 (Ev <= -7.6e+58) {
tmp = (NaChar / (1.0 + Math.exp((Ev / KbT)))) + (NdChar * 0.5);
} else {
tmp = (NaChar / 2.0) + (NdChar / (1.0 + Math.exp((((mu + EDonor) - Ec) / KbT))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if Ev <= -7.6e+58: tmp = (NaChar / (1.0 + math.exp((Ev / KbT)))) + (NdChar * 0.5) else: tmp = (NaChar / 2.0) + (NdChar / (1.0 + math.exp((((mu + EDonor) - Ec) / KbT)))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (Ev <= -7.6e+58) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT)))) + Float64(NdChar * 0.5)); else tmp = Float64(Float64(NaChar / 2.0) + Float64(NdChar / Float64(1.0 + exp(Float64(Float64(Float64(mu + EDonor) - Ec) / KbT))))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (Ev <= -7.6e+58) tmp = (NaChar / (1.0 + exp((Ev / KbT)))) + (NdChar * 0.5); else tmp = (NaChar / 2.0) + (NdChar / (1.0 + exp((((mu + EDonor) - Ec) / KbT)))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[Ev, -7.6e+58], N[(N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar * 0.5), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar / 2.0), $MachinePrecision] + N[(NdChar / N[(1.0 + N[Exp[N[(N[(N[(mu + EDonor), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;Ev \leq -7.6 \cdot 10^{+58}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Ev}{KbT}}} + NdChar \cdot 0.5\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{2} + \frac{NdChar}{1 + e^{\frac{\left(mu + EDonor\right) - Ec}{KbT}}}\\
\end{array}
\end{array}
if Ev < -7.5999999999999997e58Initial program 99.9%
Simplified99.9%
Taylor expanded in Ev around inf 89.7%
Taylor expanded in KbT around inf 56.1%
if -7.5999999999999997e58 < Ev Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 46.5%
Taylor expanded in Vef around 0 44.7%
Final simplification46.8%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (if (<= Ev -9.2e+58) (+ (/ NaChar (+ 1.0 (exp (/ Ev KbT)))) (/ NdChar (+ 2.0 (/ EDonor KbT)))) (+ (/ NaChar 2.0) (/ NdChar (+ 1.0 (exp (/ (- (+ mu EDonor) 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 (Ev <= -9.2e+58) {
tmp = (NaChar / (1.0 + exp((Ev / KbT)))) + (NdChar / (2.0 + (EDonor / KbT)));
} else {
tmp = (NaChar / 2.0) + (NdChar / (1.0 + exp((((mu + EDonor) - 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 (ev <= (-9.2d+58)) then
tmp = (nachar / (1.0d0 + exp((ev / kbt)))) + (ndchar / (2.0d0 + (edonor / kbt)))
else
tmp = (nachar / 2.0d0) + (ndchar / (1.0d0 + exp((((mu + edonor) - 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 (Ev <= -9.2e+58) {
tmp = (NaChar / (1.0 + Math.exp((Ev / KbT)))) + (NdChar / (2.0 + (EDonor / KbT)));
} else {
tmp = (NaChar / 2.0) + (NdChar / (1.0 + Math.exp((((mu + EDonor) - Ec) / KbT))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if Ev <= -9.2e+58: tmp = (NaChar / (1.0 + math.exp((Ev / KbT)))) + (NdChar / (2.0 + (EDonor / KbT))) else: tmp = (NaChar / 2.0) + (NdChar / (1.0 + math.exp((((mu + EDonor) - Ec) / KbT)))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (Ev <= -9.2e+58) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT)))) + Float64(NdChar / Float64(2.0 + Float64(EDonor / KbT)))); else tmp = Float64(Float64(NaChar / 2.0) + Float64(NdChar / Float64(1.0 + exp(Float64(Float64(Float64(mu + EDonor) - Ec) / KbT))))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (Ev <= -9.2e+58) tmp = (NaChar / (1.0 + exp((Ev / KbT)))) + (NdChar / (2.0 + (EDonor / KbT))); else tmp = (NaChar / 2.0) + (NdChar / (1.0 + exp((((mu + EDonor) - Ec) / KbT)))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[Ev, -9.2e+58], N[(N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(2.0 + N[(EDonor / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar / 2.0), $MachinePrecision] + N[(NdChar / N[(1.0 + N[Exp[N[(N[(N[(mu + EDonor), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;Ev \leq -9.2 \cdot 10^{+58}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Ev}{KbT}}} + \frac{NdChar}{2 + \frac{EDonor}{KbT}}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{2} + \frac{NdChar}{1 + e^{\frac{\left(mu + EDonor\right) - Ec}{KbT}}}\\
\end{array}
\end{array}
if Ev < -9.2000000000000001e58Initial program 99.9%
Simplified99.9%
Taylor expanded in Ev around inf 89.7%
Taylor expanded in EDonor around inf 70.9%
Taylor expanded in EDonor around 0 60.6%
if -9.2000000000000001e58 < Ev Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 46.5%
Taylor expanded in Vef around 0 44.7%
Final simplification47.6%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (<= KbT -1200000000000.0)
(+
(/ NaChar 2.0)
(/
NdChar
(- (+ 2.0 (+ (/ EDonor KbT) (+ (/ Vef KbT) (/ mu KbT)))) (/ Ec KbT))))
(if (<= KbT 3.2e+94)
(/ NdChar (+ 1.0 (+ 1.0 (expm1 (/ mu KbT)))))
(+ (/ NaChar 2.0) (/ NdChar (+ 2.0 (/ mu KbT)))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (KbT <= -1200000000000.0) {
tmp = (NaChar / 2.0) + (NdChar / ((2.0 + ((EDonor / KbT) + ((Vef / KbT) + (mu / KbT)))) - (Ec / KbT)));
} else if (KbT <= 3.2e+94) {
tmp = NdChar / (1.0 + (1.0 + expm1((mu / KbT))));
} else {
tmp = (NaChar / 2.0) + (NdChar / (2.0 + (mu / KbT)));
}
return tmp;
}
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 <= -1200000000000.0) {
tmp = (NaChar / 2.0) + (NdChar / ((2.0 + ((EDonor / KbT) + ((Vef / KbT) + (mu / KbT)))) - (Ec / KbT)));
} else if (KbT <= 3.2e+94) {
tmp = NdChar / (1.0 + (1.0 + Math.expm1((mu / KbT))));
} else {
tmp = (NaChar / 2.0) + (NdChar / (2.0 + (mu / KbT)));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if KbT <= -1200000000000.0: tmp = (NaChar / 2.0) + (NdChar / ((2.0 + ((EDonor / KbT) + ((Vef / KbT) + (mu / KbT)))) - (Ec / KbT))) elif KbT <= 3.2e+94: tmp = NdChar / (1.0 + (1.0 + math.expm1((mu / KbT)))) else: tmp = (NaChar / 2.0) + (NdChar / (2.0 + (mu / KbT))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (KbT <= -1200000000000.0) tmp = Float64(Float64(NaChar / 2.0) + Float64(NdChar / Float64(Float64(2.0 + Float64(Float64(EDonor / KbT) + Float64(Float64(Vef / KbT) + Float64(mu / KbT)))) - Float64(Ec / KbT)))); elseif (KbT <= 3.2e+94) tmp = Float64(NdChar / Float64(1.0 + Float64(1.0 + expm1(Float64(mu / KbT))))); else tmp = Float64(Float64(NaChar / 2.0) + Float64(NdChar / Float64(2.0 + Float64(mu / KbT)))); end return tmp end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[KbT, -1200000000000.0], N[(N[(NaChar / 2.0), $MachinePrecision] + N[(NdChar / N[(N[(2.0 + N[(N[(EDonor / KbT), $MachinePrecision] + N[(N[(Vef / KbT), $MachinePrecision] + N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[KbT, 3.2e+94], N[(NdChar / N[(1.0 + N[(1.0 + N[(Exp[N[(mu / KbT), $MachinePrecision]] - 1), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar / 2.0), $MachinePrecision] + N[(NdChar / N[(2.0 + N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;KbT \leq -1200000000000:\\
\;\;\;\;\frac{NaChar}{2} + \frac{NdChar}{\left(2 + \left(\frac{EDonor}{KbT} + \left(\frac{Vef}{KbT} + \frac{mu}{KbT}\right)\right)\right) - \frac{Ec}{KbT}}\\
\mathbf{elif}\;KbT \leq 3.2 \cdot 10^{+94}:\\
\;\;\;\;\frac{NdChar}{1 + \left(1 + \mathsf{expm1}\left(\frac{mu}{KbT}\right)\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{2} + \frac{NdChar}{2 + \frac{mu}{KbT}}\\
\end{array}
\end{array}
if KbT < -1.2e12Initial program 99.9%
Simplified99.9%
Taylor expanded in KbT around inf 63.5%
Taylor expanded in KbT around inf 45.6%
if -1.2e12 < KbT < 3.20000000000000014e94Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 32.2%
Taylor expanded in mu around inf 22.7%
Taylor expanded in NdChar around inf 29.0%
expm1-log1p-u29.0%
expm1-udef29.0%
log1p-udef29.0%
add-exp-log29.0%
Applied egg-rr29.0%
associate--l+29.0%
expm1-def29.0%
Simplified29.0%
if 3.20000000000000014e94 < KbT Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 76.4%
Taylor expanded in mu around inf 63.1%
Taylor expanded in mu around 0 62.7%
Final simplification38.2%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (if (<= Ev -2.1e+58) (+ (/ NaChar (+ 1.0 (exp (/ Ev KbT)))) (* NdChar 0.5)) (+ (/ NaChar 2.0) (/ NdChar (+ 1.0 (exp (/ (+ mu EDonor) KbT)))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (Ev <= -2.1e+58) {
tmp = (NaChar / (1.0 + exp((Ev / KbT)))) + (NdChar * 0.5);
} else {
tmp = (NaChar / 2.0) + (NdChar / (1.0 + exp(((mu + EDonor) / KbT))));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if (ev <= (-2.1d+58)) then
tmp = (nachar / (1.0d0 + exp((ev / kbt)))) + (ndchar * 0.5d0)
else
tmp = (nachar / 2.0d0) + (ndchar / (1.0d0 + exp(((mu + edonor) / kbt))))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (Ev <= -2.1e+58) {
tmp = (NaChar / (1.0 + Math.exp((Ev / KbT)))) + (NdChar * 0.5);
} else {
tmp = (NaChar / 2.0) + (NdChar / (1.0 + Math.exp(((mu + EDonor) / KbT))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if Ev <= -2.1e+58: tmp = (NaChar / (1.0 + math.exp((Ev / KbT)))) + (NdChar * 0.5) else: tmp = (NaChar / 2.0) + (NdChar / (1.0 + math.exp(((mu + EDonor) / KbT)))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (Ev <= -2.1e+58) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT)))) + Float64(NdChar * 0.5)); else tmp = Float64(Float64(NaChar / 2.0) + Float64(NdChar / Float64(1.0 + exp(Float64(Float64(mu + EDonor) / KbT))))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (Ev <= -2.1e+58) tmp = (NaChar / (1.0 + exp((Ev / KbT)))) + (NdChar * 0.5); else tmp = (NaChar / 2.0) + (NdChar / (1.0 + exp(((mu + EDonor) / KbT)))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[Ev, -2.1e+58], N[(N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar * 0.5), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar / 2.0), $MachinePrecision] + N[(NdChar / N[(1.0 + N[Exp[N[(N[(mu + EDonor), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;Ev \leq -2.1 \cdot 10^{+58}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Ev}{KbT}}} + NdChar \cdot 0.5\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{2} + \frac{NdChar}{1 + e^{\frac{mu + EDonor}{KbT}}}\\
\end{array}
\end{array}
if Ev < -2.10000000000000012e58Initial program 99.9%
Simplified99.9%
Taylor expanded in Ev around inf 89.7%
Taylor expanded in KbT around inf 56.1%
if -2.10000000000000012e58 < Ev Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 46.5%
Taylor expanded in Vef around 0 44.7%
Taylor expanded in Ec around 0 39.7%
+-commutative39.7%
Simplified39.7%
Final simplification42.7%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (<= KbT -1200000000000.0)
(+
(/ NaChar 2.0)
(/
NdChar
(- (+ 2.0 (+ (/ EDonor KbT) (+ (/ Vef KbT) (/ mu KbT)))) (/ Ec KbT))))
(if (<= KbT 3.4e+90)
(/ NdChar (+ 1.0 (exp (/ mu KbT))))
(+ (/ NaChar 2.0) (/ NdChar (+ 2.0 (/ mu KbT)))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (KbT <= -1200000000000.0) {
tmp = (NaChar / 2.0) + (NdChar / ((2.0 + ((EDonor / KbT) + ((Vef / KbT) + (mu / KbT)))) - (Ec / KbT)));
} else if (KbT <= 3.4e+90) {
tmp = NdChar / (1.0 + exp((mu / KbT)));
} else {
tmp = (NaChar / 2.0) + (NdChar / (2.0 + (mu / KbT)));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if (kbt <= (-1200000000000.0d0)) then
tmp = (nachar / 2.0d0) + (ndchar / ((2.0d0 + ((edonor / kbt) + ((vef / kbt) + (mu / kbt)))) - (ec / kbt)))
else if (kbt <= 3.4d+90) then
tmp = ndchar / (1.0d0 + exp((mu / kbt)))
else
tmp = (nachar / 2.0d0) + (ndchar / (2.0d0 + (mu / kbt)))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (KbT <= -1200000000000.0) {
tmp = (NaChar / 2.0) + (NdChar / ((2.0 + ((EDonor / KbT) + ((Vef / KbT) + (mu / KbT)))) - (Ec / KbT)));
} else if (KbT <= 3.4e+90) {
tmp = NdChar / (1.0 + Math.exp((mu / KbT)));
} else {
tmp = (NaChar / 2.0) + (NdChar / (2.0 + (mu / KbT)));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if KbT <= -1200000000000.0: tmp = (NaChar / 2.0) + (NdChar / ((2.0 + ((EDonor / KbT) + ((Vef / KbT) + (mu / KbT)))) - (Ec / KbT))) elif KbT <= 3.4e+90: tmp = NdChar / (1.0 + math.exp((mu / KbT))) else: tmp = (NaChar / 2.0) + (NdChar / (2.0 + (mu / KbT))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (KbT <= -1200000000000.0) tmp = Float64(Float64(NaChar / 2.0) + Float64(NdChar / Float64(Float64(2.0 + Float64(Float64(EDonor / KbT) + Float64(Float64(Vef / KbT) + Float64(mu / KbT)))) - Float64(Ec / KbT)))); elseif (KbT <= 3.4e+90) tmp = Float64(NdChar / Float64(1.0 + exp(Float64(mu / KbT)))); else tmp = Float64(Float64(NaChar / 2.0) + Float64(NdChar / Float64(2.0 + Float64(mu / KbT)))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (KbT <= -1200000000000.0) tmp = (NaChar / 2.0) + (NdChar / ((2.0 + ((EDonor / KbT) + ((Vef / KbT) + (mu / KbT)))) - (Ec / KbT))); elseif (KbT <= 3.4e+90) tmp = NdChar / (1.0 + exp((mu / KbT))); else tmp = (NaChar / 2.0) + (NdChar / (2.0 + (mu / KbT))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[KbT, -1200000000000.0], N[(N[(NaChar / 2.0), $MachinePrecision] + N[(NdChar / N[(N[(2.0 + N[(N[(EDonor / KbT), $MachinePrecision] + N[(N[(Vef / KbT), $MachinePrecision] + N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[KbT, 3.4e+90], N[(NdChar / N[(1.0 + N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar / 2.0), $MachinePrecision] + N[(NdChar / N[(2.0 + N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;KbT \leq -1200000000000:\\
\;\;\;\;\frac{NaChar}{2} + \frac{NdChar}{\left(2 + \left(\frac{EDonor}{KbT} + \left(\frac{Vef}{KbT} + \frac{mu}{KbT}\right)\right)\right) - \frac{Ec}{KbT}}\\
\mathbf{elif}\;KbT \leq 3.4 \cdot 10^{+90}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{mu}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{2} + \frac{NdChar}{2 + \frac{mu}{KbT}}\\
\end{array}
\end{array}
if KbT < -1.2e12Initial program 99.9%
Simplified99.9%
Taylor expanded in KbT around inf 63.5%
Taylor expanded in KbT around inf 45.6%
if -1.2e12 < KbT < 3.40000000000000018e90Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 32.2%
Taylor expanded in mu around inf 22.7%
Taylor expanded in NdChar around inf 29.0%
if 3.40000000000000018e90 < KbT Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 76.4%
Taylor expanded in mu around inf 63.1%
Taylor expanded in mu around 0 62.7%
Final simplification38.2%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (<= KbT -19500000000.0)
(+
(/ NaChar 2.0)
(/
NdChar
(- (+ 2.0 (+ (/ EDonor KbT) (+ (/ Vef KbT) (/ mu KbT)))) (/ Ec KbT))))
(if (<= KbT 6.2e-198)
(/ NdChar (+ 2.0 (/ mu KbT)))
(* 0.5 (+ NdChar NaChar)))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (KbT <= -19500000000.0) {
tmp = (NaChar / 2.0) + (NdChar / ((2.0 + ((EDonor / KbT) + ((Vef / KbT) + (mu / KbT)))) - (Ec / KbT)));
} else if (KbT <= 6.2e-198) {
tmp = NdChar / (2.0 + (mu / KbT));
} else {
tmp = 0.5 * (NdChar + NaChar);
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if (kbt <= (-19500000000.0d0)) then
tmp = (nachar / 2.0d0) + (ndchar / ((2.0d0 + ((edonor / kbt) + ((vef / kbt) + (mu / kbt)))) - (ec / kbt)))
else if (kbt <= 6.2d-198) then
tmp = ndchar / (2.0d0 + (mu / kbt))
else
tmp = 0.5d0 * (ndchar + nachar)
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (KbT <= -19500000000.0) {
tmp = (NaChar / 2.0) + (NdChar / ((2.0 + ((EDonor / KbT) + ((Vef / KbT) + (mu / KbT)))) - (Ec / KbT)));
} else if (KbT <= 6.2e-198) {
tmp = NdChar / (2.0 + (mu / KbT));
} else {
tmp = 0.5 * (NdChar + NaChar);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if KbT <= -19500000000.0: tmp = (NaChar / 2.0) + (NdChar / ((2.0 + ((EDonor / KbT) + ((Vef / KbT) + (mu / KbT)))) - (Ec / KbT))) elif KbT <= 6.2e-198: tmp = NdChar / (2.0 + (mu / KbT)) else: tmp = 0.5 * (NdChar + NaChar) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (KbT <= -19500000000.0) tmp = Float64(Float64(NaChar / 2.0) + Float64(NdChar / Float64(Float64(2.0 + Float64(Float64(EDonor / KbT) + Float64(Float64(Vef / KbT) + Float64(mu / KbT)))) - Float64(Ec / KbT)))); elseif (KbT <= 6.2e-198) tmp = Float64(NdChar / Float64(2.0 + Float64(mu / KbT))); else tmp = Float64(0.5 * Float64(NdChar + NaChar)); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (KbT <= -19500000000.0) tmp = (NaChar / 2.0) + (NdChar / ((2.0 + ((EDonor / KbT) + ((Vef / KbT) + (mu / KbT)))) - (Ec / KbT))); elseif (KbT <= 6.2e-198) tmp = NdChar / (2.0 + (mu / KbT)); else tmp = 0.5 * (NdChar + NaChar); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[KbT, -19500000000.0], N[(N[(NaChar / 2.0), $MachinePrecision] + N[(NdChar / N[(N[(2.0 + N[(N[(EDonor / KbT), $MachinePrecision] + N[(N[(Vef / KbT), $MachinePrecision] + N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[KbT, 6.2e-198], N[(NdChar / N[(2.0 + N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(0.5 * N[(NdChar + NaChar), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;KbT \leq -19500000000:\\
\;\;\;\;\frac{NaChar}{2} + \frac{NdChar}{\left(2 + \left(\frac{EDonor}{KbT} + \left(\frac{Vef}{KbT} + \frac{mu}{KbT}\right)\right)\right) - \frac{Ec}{KbT}}\\
\mathbf{elif}\;KbT \leq 6.2 \cdot 10^{-198}:\\
\;\;\;\;\frac{NdChar}{2 + \frac{mu}{KbT}}\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \left(NdChar + NaChar\right)\\
\end{array}
\end{array}
if KbT < -1.95e10Initial program 99.9%
Simplified99.9%
Taylor expanded in KbT around inf 63.5%
Taylor expanded in KbT around inf 45.6%
if -1.95e10 < KbT < 6.1999999999999997e-198Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 30.7%
Taylor expanded in mu around inf 19.4%
Taylor expanded in NdChar around inf 32.5%
Taylor expanded in mu around 0 22.8%
if 6.1999999999999997e-198 < KbT Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 51.6%
Taylor expanded in mu around inf 42.1%
Taylor expanded in mu around 0 36.1%
distribute-lft-out36.1%
Simplified36.1%
Final simplification33.2%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (<= KbT -19500000000.0)
(+ (/ NaChar 2.0) (/ NdChar (+ 2.0 (+ (/ EDonor KbT) (/ (- mu Ec) KbT)))))
(if (<= KbT 6.2e-198)
(/ NdChar (+ 2.0 (/ mu KbT)))
(* 0.5 (+ NdChar NaChar)))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (KbT <= -19500000000.0) {
tmp = (NaChar / 2.0) + (NdChar / (2.0 + ((EDonor / KbT) + ((mu - Ec) / KbT))));
} else if (KbT <= 6.2e-198) {
tmp = NdChar / (2.0 + (mu / KbT));
} else {
tmp = 0.5 * (NdChar + NaChar);
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if (kbt <= (-19500000000.0d0)) then
tmp = (nachar / 2.0d0) + (ndchar / (2.0d0 + ((edonor / kbt) + ((mu - ec) / kbt))))
else if (kbt <= 6.2d-198) then
tmp = ndchar / (2.0d0 + (mu / kbt))
else
tmp = 0.5d0 * (ndchar + nachar)
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (KbT <= -19500000000.0) {
tmp = (NaChar / 2.0) + (NdChar / (2.0 + ((EDonor / KbT) + ((mu - Ec) / KbT))));
} else if (KbT <= 6.2e-198) {
tmp = NdChar / (2.0 + (mu / KbT));
} else {
tmp = 0.5 * (NdChar + NaChar);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if KbT <= -19500000000.0: tmp = (NaChar / 2.0) + (NdChar / (2.0 + ((EDonor / KbT) + ((mu - Ec) / KbT)))) elif KbT <= 6.2e-198: tmp = NdChar / (2.0 + (mu / KbT)) else: tmp = 0.5 * (NdChar + NaChar) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (KbT <= -19500000000.0) tmp = Float64(Float64(NaChar / 2.0) + Float64(NdChar / Float64(2.0 + Float64(Float64(EDonor / KbT) + Float64(Float64(mu - Ec) / KbT))))); elseif (KbT <= 6.2e-198) tmp = Float64(NdChar / Float64(2.0 + Float64(mu / KbT))); else tmp = Float64(0.5 * Float64(NdChar + NaChar)); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (KbT <= -19500000000.0) tmp = (NaChar / 2.0) + (NdChar / (2.0 + ((EDonor / KbT) + ((mu - Ec) / KbT)))); elseif (KbT <= 6.2e-198) tmp = NdChar / (2.0 + (mu / KbT)); else tmp = 0.5 * (NdChar + NaChar); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[KbT, -19500000000.0], N[(N[(NaChar / 2.0), $MachinePrecision] + N[(NdChar / N[(2.0 + N[(N[(EDonor / KbT), $MachinePrecision] + N[(N[(mu - Ec), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[KbT, 6.2e-198], N[(NdChar / N[(2.0 + N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(0.5 * N[(NdChar + NaChar), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;KbT \leq -19500000000:\\
\;\;\;\;\frac{NaChar}{2} + \frac{NdChar}{2 + \left(\frac{EDonor}{KbT} + \frac{mu - Ec}{KbT}\right)}\\
\mathbf{elif}\;KbT \leq 6.2 \cdot 10^{-198}:\\
\;\;\;\;\frac{NdChar}{2 + \frac{mu}{KbT}}\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \left(NdChar + NaChar\right)\\
\end{array}
\end{array}
if KbT < -1.95e10Initial program 99.9%
Simplified99.9%
Taylor expanded in KbT around inf 63.5%
Taylor expanded in Vef around 0 60.9%
Taylor expanded in KbT around inf 45.6%
associate--l+45.6%
associate--l+45.6%
div-sub45.6%
Simplified45.6%
if -1.95e10 < KbT < 6.1999999999999997e-198Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 30.7%
Taylor expanded in mu around inf 19.4%
Taylor expanded in NdChar around inf 32.5%
Taylor expanded in mu around 0 22.8%
if 6.1999999999999997e-198 < KbT Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 51.6%
Taylor expanded in mu around inf 42.1%
Taylor expanded in mu around 0 36.1%
distribute-lft-out36.1%
Simplified36.1%
Final simplification33.1%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (if (or (<= KbT -155000000000.0) (not (<= KbT 6.5e-198))) (* 0.5 (+ NdChar NaChar)) (/ NdChar (+ 2.0 (/ mu KbT)))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((KbT <= -155000000000.0) || !(KbT <= 6.5e-198)) {
tmp = 0.5 * (NdChar + NaChar);
} else {
tmp = NdChar / (2.0 + (mu / KbT));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if ((kbt <= (-155000000000.0d0)) .or. (.not. (kbt <= 6.5d-198))) then
tmp = 0.5d0 * (ndchar + nachar)
else
tmp = ndchar / (2.0d0 + (mu / kbt))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((KbT <= -155000000000.0) || !(KbT <= 6.5e-198)) {
tmp = 0.5 * (NdChar + NaChar);
} else {
tmp = NdChar / (2.0 + (mu / KbT));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if (KbT <= -155000000000.0) or not (KbT <= 6.5e-198): tmp = 0.5 * (NdChar + NaChar) else: tmp = NdChar / (2.0 + (mu / KbT)) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if ((KbT <= -155000000000.0) || !(KbT <= 6.5e-198)) tmp = Float64(0.5 * Float64(NdChar + NaChar)); else tmp = Float64(NdChar / Float64(2.0 + Float64(mu / KbT))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if ((KbT <= -155000000000.0) || ~((KbT <= 6.5e-198))) tmp = 0.5 * (NdChar + NaChar); else tmp = NdChar / (2.0 + (mu / KbT)); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[Or[LessEqual[KbT, -155000000000.0], N[Not[LessEqual[KbT, 6.5e-198]], $MachinePrecision]], N[(0.5 * N[(NdChar + NaChar), $MachinePrecision]), $MachinePrecision], N[(NdChar / N[(2.0 + N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;KbT \leq -155000000000 \lor \neg \left(KbT \leq 6.5 \cdot 10^{-198}\right):\\
\;\;\;\;0.5 \cdot \left(NdChar + NaChar\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{2 + \frac{mu}{KbT}}\\
\end{array}
\end{array}
if KbT < -1.55e11 or 6.5000000000000004e-198 < KbT Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 55.5%
Taylor expanded in mu around inf 43.9%
Taylor expanded in mu around 0 39.1%
distribute-lft-out39.1%
Simplified39.1%
if -1.55e11 < KbT < 6.5000000000000004e-198Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 30.7%
Taylor expanded in mu around inf 19.4%
Taylor expanded in NdChar around inf 32.5%
Taylor expanded in mu around 0 22.8%
Final simplification33.1%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (* 0.5 (+ NdChar NaChar)))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return 0.5 * (NdChar + NaChar);
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
code = 0.5d0 * (ndchar + nachar)
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return 0.5 * (NdChar + NaChar);
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return 0.5 * (NdChar + NaChar)
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(0.5 * Float64(NdChar + NaChar)) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.5 * (NdChar + NaChar); end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(0.5 * N[(NdChar + NaChar), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
0.5 \cdot \left(NdChar + NaChar\right)
\end{array}
Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 46.3%
Taylor expanded in mu around inf 34.8%
Taylor expanded in mu around 0 28.6%
distribute-lft-out28.6%
Simplified28.6%
Final simplification28.6%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (* NdChar 0.5))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return NdChar * 0.5;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
code = ndchar * 0.5d0
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return NdChar * 0.5;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return NdChar * 0.5
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(NdChar * 0.5) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = NdChar * 0.5; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(NdChar * 0.5), $MachinePrecision]
\begin{array}{l}
\\
NdChar \cdot 0.5
\end{array}
Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 46.3%
Taylor expanded in mu around inf 34.8%
Taylor expanded in NdChar around inf 30.6%
Taylor expanded in mu around 0 18.0%
Final simplification18.0%
herbie shell --seed 2024022
(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))))))