
(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 (+ (exp (/ (- EDonor (- (- Ec Vef) mu)) KbT)) 1.0)) (/ NaChar (- -1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NdChar / (exp(((EDonor - ((Ec - Vef) - mu)) / KbT)) + 1.0)) - (NaChar / (-1.0 - exp(((Vef - ((mu - EAccept) - Ev)) / KbT))));
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
code = (ndchar / (exp(((edonor - ((ec - vef) - mu)) / kbt)) + 1.0d0)) - (nachar / ((-1.0d0) - exp(((vef - ((mu - eaccept) - ev)) / kbt))))
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NdChar / (Math.exp(((EDonor - ((Ec - Vef) - mu)) / KbT)) + 1.0)) - (NaChar / (-1.0 - Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT))));
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return (NdChar / (math.exp(((EDonor - ((Ec - Vef) - mu)) / KbT)) + 1.0)) - (NaChar / (-1.0 - math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT))))
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(Float64(NdChar / Float64(exp(Float64(Float64(EDonor - Float64(Float64(Ec - Vef) - mu)) / KbT)) + 1.0)) - Float64(NaChar / Float64(-1.0 - exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT))))) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = (NdChar / (exp(((EDonor - ((Ec - Vef) - mu)) / KbT)) + 1.0)) - (NaChar / (-1.0 - exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))); end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(N[(NdChar / N[(N[Exp[N[(N[(EDonor - N[(N[(Ec - Vef), $MachinePrecision] - mu), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] - N[(NaChar / N[(-1.0 - N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{NdChar}{e^{\frac{EDonor - \left(\left(Ec - Vef\right) - mu\right)}{KbT}} + 1} - \frac{NaChar}{-1 - e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}}
\end{array}
Initial program 100.0%
Simplified100.0%
Final simplification100.0%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NaChar (+ (exp (/ (- (+ Vef Ev) mu) KbT)) 1.0)))
(t_1 (+ (/ NdChar (+ (exp (/ Vef KbT)) 1.0)) t_0))
(t_2 (/ NdChar (+ (exp (/ mu KbT)) 1.0)))
(t_3 (+ (/ NdChar (+ (exp (- (/ Ec KbT))) 1.0)) t_0)))
(if (<= Ec -5e+117)
t_3
(if (<= Ec -8.4e-75)
t_1
(if (<= Ec -5.4e-128)
t_2
(if (<= Ec 8.5e-248)
t_1
(if (<= Ec 2.35e-63)
(+ t_2 (/ NaChar (+ (exp (/ EAccept KbT)) 1.0)))
(if (<= Ec 3.5e+94) t_1 t_3))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NaChar / (exp((((Vef + Ev) - mu) / KbT)) + 1.0);
double t_1 = (NdChar / (exp((Vef / KbT)) + 1.0)) + t_0;
double t_2 = NdChar / (exp((mu / KbT)) + 1.0);
double t_3 = (NdChar / (exp(-(Ec / KbT)) + 1.0)) + t_0;
double tmp;
if (Ec <= -5e+117) {
tmp = t_3;
} else if (Ec <= -8.4e-75) {
tmp = t_1;
} else if (Ec <= -5.4e-128) {
tmp = t_2;
} else if (Ec <= 8.5e-248) {
tmp = t_1;
} else if (Ec <= 2.35e-63) {
tmp = t_2 + (NaChar / (exp((EAccept / KbT)) + 1.0));
} else if (Ec <= 3.5e+94) {
tmp = t_1;
} else {
tmp = t_3;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: t_2
real(8) :: t_3
real(8) :: tmp
t_0 = nachar / (exp((((vef + ev) - mu) / kbt)) + 1.0d0)
t_1 = (ndchar / (exp((vef / kbt)) + 1.0d0)) + t_0
t_2 = ndchar / (exp((mu / kbt)) + 1.0d0)
t_3 = (ndchar / (exp(-(ec / kbt)) + 1.0d0)) + t_0
if (ec <= (-5d+117)) then
tmp = t_3
else if (ec <= (-8.4d-75)) then
tmp = t_1
else if (ec <= (-5.4d-128)) then
tmp = t_2
else if (ec <= 8.5d-248) then
tmp = t_1
else if (ec <= 2.35d-63) then
tmp = t_2 + (nachar / (exp((eaccept / kbt)) + 1.0d0))
else if (ec <= 3.5d+94) then
tmp = t_1
else
tmp = t_3
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 / (Math.exp((((Vef + Ev) - mu) / KbT)) + 1.0);
double t_1 = (NdChar / (Math.exp((Vef / KbT)) + 1.0)) + t_0;
double t_2 = NdChar / (Math.exp((mu / KbT)) + 1.0);
double t_3 = (NdChar / (Math.exp(-(Ec / KbT)) + 1.0)) + t_0;
double tmp;
if (Ec <= -5e+117) {
tmp = t_3;
} else if (Ec <= -8.4e-75) {
tmp = t_1;
} else if (Ec <= -5.4e-128) {
tmp = t_2;
} else if (Ec <= 8.5e-248) {
tmp = t_1;
} else if (Ec <= 2.35e-63) {
tmp = t_2 + (NaChar / (Math.exp((EAccept / KbT)) + 1.0));
} else if (Ec <= 3.5e+94) {
tmp = t_1;
} else {
tmp = t_3;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NaChar / (math.exp((((Vef + Ev) - mu) / KbT)) + 1.0) t_1 = (NdChar / (math.exp((Vef / KbT)) + 1.0)) + t_0 t_2 = NdChar / (math.exp((mu / KbT)) + 1.0) t_3 = (NdChar / (math.exp(-(Ec / KbT)) + 1.0)) + t_0 tmp = 0 if Ec <= -5e+117: tmp = t_3 elif Ec <= -8.4e-75: tmp = t_1 elif Ec <= -5.4e-128: tmp = t_2 elif Ec <= 8.5e-248: tmp = t_1 elif Ec <= 2.35e-63: tmp = t_2 + (NaChar / (math.exp((EAccept / KbT)) + 1.0)) elif Ec <= 3.5e+94: tmp = t_1 else: tmp = t_3 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NaChar / Float64(exp(Float64(Float64(Float64(Vef + Ev) - mu) / KbT)) + 1.0)) t_1 = Float64(Float64(NdChar / Float64(exp(Float64(Vef / KbT)) + 1.0)) + t_0) t_2 = Float64(NdChar / Float64(exp(Float64(mu / KbT)) + 1.0)) t_3 = Float64(Float64(NdChar / Float64(exp(Float64(-Float64(Ec / KbT))) + 1.0)) + t_0) tmp = 0.0 if (Ec <= -5e+117) tmp = t_3; elseif (Ec <= -8.4e-75) tmp = t_1; elseif (Ec <= -5.4e-128) tmp = t_2; elseif (Ec <= 8.5e-248) tmp = t_1; elseif (Ec <= 2.35e-63) tmp = Float64(t_2 + Float64(NaChar / Float64(exp(Float64(EAccept / KbT)) + 1.0))); elseif (Ec <= 3.5e+94) tmp = t_1; else tmp = t_3; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NaChar / (exp((((Vef + Ev) - mu) / KbT)) + 1.0); t_1 = (NdChar / (exp((Vef / KbT)) + 1.0)) + t_0; t_2 = NdChar / (exp((mu / KbT)) + 1.0); t_3 = (NdChar / (exp(-(Ec / KbT)) + 1.0)) + t_0; tmp = 0.0; if (Ec <= -5e+117) tmp = t_3; elseif (Ec <= -8.4e-75) tmp = t_1; elseif (Ec <= -5.4e-128) tmp = t_2; elseif (Ec <= 8.5e-248) tmp = t_1; elseif (Ec <= 2.35e-63) tmp = t_2 + (NaChar / (exp((EAccept / KbT)) + 1.0)); elseif (Ec <= 3.5e+94) tmp = t_1; else tmp = t_3; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NaChar / N[(N[Exp[N[(N[(N[(Vef + Ev), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NdChar / N[(N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + t$95$0), $MachinePrecision]}, Block[{t$95$2 = N[(NdChar / N[(N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$3 = N[(N[(NdChar / N[(N[Exp[(-N[(Ec / KbT), $MachinePrecision])], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + t$95$0), $MachinePrecision]}, If[LessEqual[Ec, -5e+117], t$95$3, If[LessEqual[Ec, -8.4e-75], t$95$1, If[LessEqual[Ec, -5.4e-128], t$95$2, If[LessEqual[Ec, 8.5e-248], t$95$1, If[LessEqual[Ec, 2.35e-63], N[(t$95$2 + N[(NaChar / N[(N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[Ec, 3.5e+94], t$95$1, t$95$3]]]]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{e^{\frac{\left(Vef + Ev\right) - mu}{KbT}} + 1}\\
t_1 := \frac{NdChar}{e^{\frac{Vef}{KbT}} + 1} + t\_0\\
t_2 := \frac{NdChar}{e^{\frac{mu}{KbT}} + 1}\\
t_3 := \frac{NdChar}{e^{-\frac{Ec}{KbT}} + 1} + t\_0\\
\mathbf{if}\;Ec \leq -5 \cdot 10^{+117}:\\
\;\;\;\;t\_3\\
\mathbf{elif}\;Ec \leq -8.4 \cdot 10^{-75}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;Ec \leq -5.4 \cdot 10^{-128}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;Ec \leq 8.5 \cdot 10^{-248}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;Ec \leq 2.35 \cdot 10^{-63}:\\
\;\;\;\;t\_2 + \frac{NaChar}{e^{\frac{EAccept}{KbT}} + 1}\\
\mathbf{elif}\;Ec \leq 3.5 \cdot 10^{+94}:\\
\;\;\;\;t\_1\\
\mathbf{else}:\\
\;\;\;\;t\_3\\
\end{array}
\end{array}
if Ec < -4.99999999999999983e117 or 3.4999999999999997e94 < Ec Initial program 100.0%
Simplified100.0%
Taylor expanded in Ec around inf 93.4%
associate-*r/93.4%
mul-1-neg93.4%
Simplified93.4%
Taylor expanded in EAccept around 0 88.8%
if -4.99999999999999983e117 < Ec < -8.4000000000000004e-75 or -5.40000000000000011e-128 < Ec < 8.5000000000000003e-248 or 2.35e-63 < Ec < 3.4999999999999997e94Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 84.1%
Taylor expanded in EAccept around 0 81.2%
if -8.4000000000000004e-75 < Ec < -5.40000000000000011e-128Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 88.4%
Taylor expanded in KbT around inf 59.8%
Taylor expanded in Vef around inf 2.6%
Taylor expanded in NdChar around inf 81.6%
if 8.5000000000000003e-248 < Ec < 2.35e-63Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 87.4%
Taylor expanded in EAccept around inf 69.4%
Final simplification82.1%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0
(+
(/ NaChar (+ (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT)) 1.0))
(/ NdChar (+ (exp (/ Vef KbT)) 1.0))))
(t_1
(+
(/ NdChar (+ (exp (- (/ Ec KbT))) 1.0))
(/ NaChar (+ (exp (/ (- (+ Vef Ev) mu) KbT)) 1.0)))))
(if (<= Ec -1.52e+121)
t_1
(if (<= Ec -1.12e-92)
t_0
(if (<= Ec -1.16e-127)
(-
(/ NaChar (+ (exp (/ Ev KbT)) 1.0))
(/ NdChar (- -1.0 (exp (/ mu KbT)))))
(if (<= Ec 2.5e+87) 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 / (exp(((Vef - ((mu - EAccept) - Ev)) / KbT)) + 1.0)) + (NdChar / (exp((Vef / KbT)) + 1.0));
double t_1 = (NdChar / (exp(-(Ec / KbT)) + 1.0)) + (NaChar / (exp((((Vef + Ev) - mu) / KbT)) + 1.0));
double tmp;
if (Ec <= -1.52e+121) {
tmp = t_1;
} else if (Ec <= -1.12e-92) {
tmp = t_0;
} else if (Ec <= -1.16e-127) {
tmp = (NaChar / (exp((Ev / KbT)) + 1.0)) - (NdChar / (-1.0 - exp((mu / KbT))));
} else if (Ec <= 2.5e+87) {
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 / (exp(((vef - ((mu - eaccept) - ev)) / kbt)) + 1.0d0)) + (ndchar / (exp((vef / kbt)) + 1.0d0))
t_1 = (ndchar / (exp(-(ec / kbt)) + 1.0d0)) + (nachar / (exp((((vef + ev) - mu) / kbt)) + 1.0d0))
if (ec <= (-1.52d+121)) then
tmp = t_1
else if (ec <= (-1.12d-92)) then
tmp = t_0
else if (ec <= (-1.16d-127)) then
tmp = (nachar / (exp((ev / kbt)) + 1.0d0)) - (ndchar / ((-1.0d0) - exp((mu / kbt))))
else if (ec <= 2.5d+87) 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 / (Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)) + 1.0)) + (NdChar / (Math.exp((Vef / KbT)) + 1.0));
double t_1 = (NdChar / (Math.exp(-(Ec / KbT)) + 1.0)) + (NaChar / (Math.exp((((Vef + Ev) - mu) / KbT)) + 1.0));
double tmp;
if (Ec <= -1.52e+121) {
tmp = t_1;
} else if (Ec <= -1.12e-92) {
tmp = t_0;
} else if (Ec <= -1.16e-127) {
tmp = (NaChar / (Math.exp((Ev / KbT)) + 1.0)) - (NdChar / (-1.0 - Math.exp((mu / KbT))));
} else if (Ec <= 2.5e+87) {
tmp = t_0;
} else {
tmp = t_1;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = (NaChar / (math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)) + 1.0)) + (NdChar / (math.exp((Vef / KbT)) + 1.0)) t_1 = (NdChar / (math.exp(-(Ec / KbT)) + 1.0)) + (NaChar / (math.exp((((Vef + Ev) - mu) / KbT)) + 1.0)) tmp = 0 if Ec <= -1.52e+121: tmp = t_1 elif Ec <= -1.12e-92: tmp = t_0 elif Ec <= -1.16e-127: tmp = (NaChar / (math.exp((Ev / KbT)) + 1.0)) - (NdChar / (-1.0 - math.exp((mu / KbT)))) elif Ec <= 2.5e+87: 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(exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT)) + 1.0)) + Float64(NdChar / Float64(exp(Float64(Vef / KbT)) + 1.0))) t_1 = Float64(Float64(NdChar / Float64(exp(Float64(-Float64(Ec / KbT))) + 1.0)) + Float64(NaChar / Float64(exp(Float64(Float64(Float64(Vef + Ev) - mu) / KbT)) + 1.0))) tmp = 0.0 if (Ec <= -1.52e+121) tmp = t_1; elseif (Ec <= -1.12e-92) tmp = t_0; elseif (Ec <= -1.16e-127) tmp = Float64(Float64(NaChar / Float64(exp(Float64(Ev / KbT)) + 1.0)) - Float64(NdChar / Float64(-1.0 - exp(Float64(mu / KbT))))); elseif (Ec <= 2.5e+87) 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 / (exp(((Vef - ((mu - EAccept) - Ev)) / KbT)) + 1.0)) + (NdChar / (exp((Vef / KbT)) + 1.0)); t_1 = (NdChar / (exp(-(Ec / KbT)) + 1.0)) + (NaChar / (exp((((Vef + Ev) - mu) / KbT)) + 1.0)); tmp = 0.0; if (Ec <= -1.52e+121) tmp = t_1; elseif (Ec <= -1.12e-92) tmp = t_0; elseif (Ec <= -1.16e-127) tmp = (NaChar / (exp((Ev / KbT)) + 1.0)) - (NdChar / (-1.0 - exp((mu / KbT)))); elseif (Ec <= 2.5e+87) 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[(N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NdChar / N[(N[Exp[(-N[(Ec / KbT), $MachinePrecision])], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(N[Exp[N[(N[(N[(Vef + Ev), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[Ec, -1.52e+121], t$95$1, If[LessEqual[Ec, -1.12e-92], t$95$0, If[LessEqual[Ec, -1.16e-127], N[(N[(NaChar / N[(N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] - N[(NdChar / N[(-1.0 - N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[Ec, 2.5e+87], t$95$0, t$95$1]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}} + 1} + \frac{NdChar}{e^{\frac{Vef}{KbT}} + 1}\\
t_1 := \frac{NdChar}{e^{-\frac{Ec}{KbT}} + 1} + \frac{NaChar}{e^{\frac{\left(Vef + Ev\right) - mu}{KbT}} + 1}\\
\mathbf{if}\;Ec \leq -1.52 \cdot 10^{+121}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;Ec \leq -1.12 \cdot 10^{-92}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;Ec \leq -1.16 \cdot 10^{-127}:\\
\;\;\;\;\frac{NaChar}{e^{\frac{Ev}{KbT}} + 1} - \frac{NdChar}{-1 - e^{\frac{mu}{KbT}}}\\
\mathbf{elif}\;Ec \leq 2.5 \cdot 10^{+87}:\\
\;\;\;\;t\_0\\
\mathbf{else}:\\
\;\;\;\;t\_1\\
\end{array}
\end{array}
if Ec < -1.5199999999999999e121 or 2.4999999999999999e87 < Ec Initial program 100.0%
Simplified100.0%
Taylor expanded in Ec around inf 93.4%
associate-*r/93.4%
mul-1-neg93.4%
Simplified93.4%
Taylor expanded in EAccept around 0 88.8%
if -1.5199999999999999e121 < Ec < -1.11999999999999999e-92 or -1.16e-127 < Ec < 2.4999999999999999e87Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 80.1%
if -1.11999999999999999e-92 < Ec < -1.16e-127Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 92.6%
Taylor expanded in Ev around inf 74.7%
Final simplification82.7%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NaChar (- -1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT)))))
(t_1 (- (/ NdChar (+ (exp (- (/ Ec KbT))) 1.0)) t_0)))
(if (<= Ec -1.6e+119)
t_1
(if (<= Ec -3.9e-69)
(+
(/ NdChar (+ (exp (/ Vef KbT)) 1.0))
(/ NaChar (+ (exp (/ (- (+ Vef Ev) mu) KbT)) 1.0)))
(if (<= Ec 1.55e+149)
(- (/ NdChar (+ (exp (/ mu KbT)) 1.0)) t_0)
t_1)))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NaChar / (-1.0 - exp(((Vef - ((mu - EAccept) - Ev)) / KbT)));
double t_1 = (NdChar / (exp(-(Ec / KbT)) + 1.0)) - t_0;
double tmp;
if (Ec <= -1.6e+119) {
tmp = t_1;
} else if (Ec <= -3.9e-69) {
tmp = (NdChar / (exp((Vef / KbT)) + 1.0)) + (NaChar / (exp((((Vef + Ev) - mu) / KbT)) + 1.0));
} else if (Ec <= 1.55e+149) {
tmp = (NdChar / (exp((mu / KbT)) + 1.0)) - t_0;
} else {
tmp = t_1;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = nachar / ((-1.0d0) - exp(((vef - ((mu - eaccept) - ev)) / kbt)))
t_1 = (ndchar / (exp(-(ec / kbt)) + 1.0d0)) - t_0
if (ec <= (-1.6d+119)) then
tmp = t_1
else if (ec <= (-3.9d-69)) then
tmp = (ndchar / (exp((vef / kbt)) + 1.0d0)) + (nachar / (exp((((vef + ev) - mu) / kbt)) + 1.0d0))
else if (ec <= 1.55d+149) then
tmp = (ndchar / (exp((mu / kbt)) + 1.0d0)) - t_0
else
tmp = t_1
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NaChar / (-1.0 - Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)));
double t_1 = (NdChar / (Math.exp(-(Ec / KbT)) + 1.0)) - t_0;
double tmp;
if (Ec <= -1.6e+119) {
tmp = t_1;
} else if (Ec <= -3.9e-69) {
tmp = (NdChar / (Math.exp((Vef / KbT)) + 1.0)) + (NaChar / (Math.exp((((Vef + Ev) - mu) / KbT)) + 1.0));
} else if (Ec <= 1.55e+149) {
tmp = (NdChar / (Math.exp((mu / KbT)) + 1.0)) - 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 - ((mu - EAccept) - Ev)) / KbT))) t_1 = (NdChar / (math.exp(-(Ec / KbT)) + 1.0)) - t_0 tmp = 0 if Ec <= -1.6e+119: tmp = t_1 elif Ec <= -3.9e-69: tmp = (NdChar / (math.exp((Vef / KbT)) + 1.0)) + (NaChar / (math.exp((((Vef + Ev) - mu) / KbT)) + 1.0)) elif Ec <= 1.55e+149: tmp = (NdChar / (math.exp((mu / KbT)) + 1.0)) - t_0 else: tmp = t_1 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NaChar / Float64(-1.0 - exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT)))) t_1 = Float64(Float64(NdChar / Float64(exp(Float64(-Float64(Ec / KbT))) + 1.0)) - t_0) tmp = 0.0 if (Ec <= -1.6e+119) tmp = t_1; elseif (Ec <= -3.9e-69) tmp = Float64(Float64(NdChar / Float64(exp(Float64(Vef / KbT)) + 1.0)) + Float64(NaChar / Float64(exp(Float64(Float64(Float64(Vef + Ev) - mu) / KbT)) + 1.0))); elseif (Ec <= 1.55e+149) tmp = Float64(Float64(NdChar / Float64(exp(Float64(mu / KbT)) + 1.0)) - t_0); else tmp = t_1; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NaChar / (-1.0 - exp(((Vef - ((mu - EAccept) - Ev)) / KbT))); t_1 = (NdChar / (exp(-(Ec / KbT)) + 1.0)) - t_0; tmp = 0.0; if (Ec <= -1.6e+119) tmp = t_1; elseif (Ec <= -3.9e-69) tmp = (NdChar / (exp((Vef / KbT)) + 1.0)) + (NaChar / (exp((((Vef + Ev) - mu) / KbT)) + 1.0)); elseif (Ec <= 1.55e+149) tmp = (NdChar / (exp((mu / KbT)) + 1.0)) - t_0; else tmp = t_1; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NaChar / N[(-1.0 - N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NdChar / N[(N[Exp[(-N[(Ec / KbT), $MachinePrecision])], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] - t$95$0), $MachinePrecision]}, If[LessEqual[Ec, -1.6e+119], t$95$1, If[LessEqual[Ec, -3.9e-69], N[(N[(NdChar / N[(N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(N[Exp[N[(N[(N[(Vef + Ev), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[Ec, 1.55e+149], N[(N[(NdChar / N[(N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] - t$95$0), $MachinePrecision], t$95$1]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{-1 - e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}}\\
t_1 := \frac{NdChar}{e^{-\frac{Ec}{KbT}} + 1} - t\_0\\
\mathbf{if}\;Ec \leq -1.6 \cdot 10^{+119}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;Ec \leq -3.9 \cdot 10^{-69}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{Vef}{KbT}} + 1} + \frac{NaChar}{e^{\frac{\left(Vef + Ev\right) - mu}{KbT}} + 1}\\
\mathbf{elif}\;Ec \leq 1.55 \cdot 10^{+149}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{mu}{KbT}} + 1} - t\_0\\
\mathbf{else}:\\
\;\;\;\;t\_1\\
\end{array}
\end{array}
if Ec < -1.59999999999999995e119 or 1.54999999999999993e149 < Ec Initial program 100.0%
Simplified100.0%
Taylor expanded in Ec around inf 96.1%
associate-*r/96.1%
mul-1-neg96.1%
Simplified96.1%
if -1.59999999999999995e119 < Ec < -3.89999999999999981e-69Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 84.3%
Taylor expanded in EAccept around 0 84.3%
if -3.89999999999999981e-69 < Ec < 1.54999999999999993e149Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 83.9%
Final simplification87.5%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (+ (exp (/ Vef KbT)) 1.0))
(t_1
(+
(/ NdChar (+ (exp (/ mu KbT)) 1.0))
(/ NaChar (+ (exp (/ mu (- KbT))) 1.0))))
(t_2
(-
(/ NdChar (+ 2.0 (/ (- EDonor (- (- Ec Vef) mu)) KbT)))
(/ NaChar (- -1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT)))))))
(if (<= mu -6e+52)
t_1
(if (<= mu 5.8e-264)
t_2
(if (<= mu 6.4e-55)
(+ (/ NdChar t_0) (/ NaChar t_0))
(if (<= mu 4.5e+150) t_2 t_1))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = exp((Vef / KbT)) + 1.0;
double t_1 = (NdChar / (exp((mu / KbT)) + 1.0)) + (NaChar / (exp((mu / -KbT)) + 1.0));
double t_2 = (NdChar / (2.0 + ((EDonor - ((Ec - Vef) - mu)) / KbT))) - (NaChar / (-1.0 - exp(((Vef - ((mu - EAccept) - Ev)) / KbT))));
double tmp;
if (mu <= -6e+52) {
tmp = t_1;
} else if (mu <= 5.8e-264) {
tmp = t_2;
} else if (mu <= 6.4e-55) {
tmp = (NdChar / t_0) + (NaChar / t_0);
} else if (mu <= 4.5e+150) {
tmp = t_2;
} else {
tmp = t_1;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: t_2
real(8) :: tmp
t_0 = exp((vef / kbt)) + 1.0d0
t_1 = (ndchar / (exp((mu / kbt)) + 1.0d0)) + (nachar / (exp((mu / -kbt)) + 1.0d0))
t_2 = (ndchar / (2.0d0 + ((edonor - ((ec - vef) - mu)) / kbt))) - (nachar / ((-1.0d0) - exp(((vef - ((mu - eaccept) - ev)) / kbt))))
if (mu <= (-6d+52)) then
tmp = t_1
else if (mu <= 5.8d-264) then
tmp = t_2
else if (mu <= 6.4d-55) then
tmp = (ndchar / t_0) + (nachar / t_0)
else if (mu <= 4.5d+150) then
tmp = t_2
else
tmp = t_1
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = Math.exp((Vef / KbT)) + 1.0;
double t_1 = (NdChar / (Math.exp((mu / KbT)) + 1.0)) + (NaChar / (Math.exp((mu / -KbT)) + 1.0));
double t_2 = (NdChar / (2.0 + ((EDonor - ((Ec - Vef) - mu)) / KbT))) - (NaChar / (-1.0 - Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT))));
double tmp;
if (mu <= -6e+52) {
tmp = t_1;
} else if (mu <= 5.8e-264) {
tmp = t_2;
} else if (mu <= 6.4e-55) {
tmp = (NdChar / t_0) + (NaChar / t_0);
} else if (mu <= 4.5e+150) {
tmp = t_2;
} else {
tmp = t_1;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = math.exp((Vef / KbT)) + 1.0 t_1 = (NdChar / (math.exp((mu / KbT)) + 1.0)) + (NaChar / (math.exp((mu / -KbT)) + 1.0)) t_2 = (NdChar / (2.0 + ((EDonor - ((Ec - Vef) - mu)) / KbT))) - (NaChar / (-1.0 - math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) tmp = 0 if mu <= -6e+52: tmp = t_1 elif mu <= 5.8e-264: tmp = t_2 elif mu <= 6.4e-55: tmp = (NdChar / t_0) + (NaChar / t_0) elif mu <= 4.5e+150: tmp = t_2 else: tmp = t_1 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(exp(Float64(Vef / KbT)) + 1.0) t_1 = Float64(Float64(NdChar / Float64(exp(Float64(mu / KbT)) + 1.0)) + Float64(NaChar / Float64(exp(Float64(mu / Float64(-KbT))) + 1.0))) t_2 = Float64(Float64(NdChar / Float64(2.0 + Float64(Float64(EDonor - Float64(Float64(Ec - Vef) - mu)) / KbT))) - Float64(NaChar / Float64(-1.0 - exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT))))) tmp = 0.0 if (mu <= -6e+52) tmp = t_1; elseif (mu <= 5.8e-264) tmp = t_2; elseif (mu <= 6.4e-55) tmp = Float64(Float64(NdChar / t_0) + Float64(NaChar / t_0)); elseif (mu <= 4.5e+150) tmp = t_2; else tmp = t_1; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = exp((Vef / KbT)) + 1.0; t_1 = (NdChar / (exp((mu / KbT)) + 1.0)) + (NaChar / (exp((mu / -KbT)) + 1.0)); t_2 = (NdChar / (2.0 + ((EDonor - ((Ec - Vef) - mu)) / KbT))) - (NaChar / (-1.0 - exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))); tmp = 0.0; if (mu <= -6e+52) tmp = t_1; elseif (mu <= 5.8e-264) tmp = t_2; elseif (mu <= 6.4e-55) tmp = (NdChar / t_0) + (NaChar / t_0); elseif (mu <= 4.5e+150) tmp = t_2; 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[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NdChar / N[(N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(N[Exp[N[(mu / (-KbT)), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(N[(NdChar / N[(2.0 + N[(N[(EDonor - N[(N[(Ec - Vef), $MachinePrecision] - mu), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(NaChar / N[(-1.0 - N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[mu, -6e+52], t$95$1, If[LessEqual[mu, 5.8e-264], t$95$2, If[LessEqual[mu, 6.4e-55], N[(N[(NdChar / t$95$0), $MachinePrecision] + N[(NaChar / t$95$0), $MachinePrecision]), $MachinePrecision], If[LessEqual[mu, 4.5e+150], t$95$2, t$95$1]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := e^{\frac{Vef}{KbT}} + 1\\
t_1 := \frac{NdChar}{e^{\frac{mu}{KbT}} + 1} + \frac{NaChar}{e^{\frac{mu}{-KbT}} + 1}\\
t_2 := \frac{NdChar}{2 + \frac{EDonor - \left(\left(Ec - Vef\right) - mu\right)}{KbT}} - \frac{NaChar}{-1 - e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}}\\
\mathbf{if}\;mu \leq -6 \cdot 10^{+52}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;mu \leq 5.8 \cdot 10^{-264}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;mu \leq 6.4 \cdot 10^{-55}:\\
\;\;\;\;\frac{NdChar}{t\_0} + \frac{NaChar}{t\_0}\\
\mathbf{elif}\;mu \leq 4.5 \cdot 10^{+150}:\\
\;\;\;\;t\_2\\
\mathbf{else}:\\
\;\;\;\;t\_1\\
\end{array}
\end{array}
if mu < -6e52 or 4.5e150 < mu Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 88.9%
Taylor expanded in mu around inf 77.1%
associate-*r/77.1%
mul-1-neg77.1%
Simplified77.1%
if -6e52 < mu < 5.7999999999999997e-264 or 6.4000000000000003e-55 < mu < 4.5e150Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around -inf 60.8%
Taylor expanded in KbT around inf 73.6%
associate-*r/73.6%
mul-1-neg73.6%
+-commutative73.6%
associate-+r-73.6%
+-commutative73.6%
associate--l+73.6%
Simplified73.6%
if 5.7999999999999997e-264 < mu < 6.4000000000000003e-55Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 88.5%
Taylor expanded in EAccept around 0 83.6%
Taylor expanded in Vef around inf 83.6%
Final simplification75.7%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT))))
(if (or (<= Vef -2.45e+126) (not (<= Vef 1.02e+102)))
(+ (/ NaChar (+ t_0 1.0)) (/ NdChar (+ (exp (/ Vef KbT)) 1.0)))
(- (/ NdChar (+ (exp (/ mu KbT)) 1.0)) (/ NaChar (- -1.0 t_0))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = exp(((Vef - ((mu - EAccept) - Ev)) / KbT));
double tmp;
if ((Vef <= -2.45e+126) || !(Vef <= 1.02e+102)) {
tmp = (NaChar / (t_0 + 1.0)) + (NdChar / (exp((Vef / KbT)) + 1.0));
} else {
tmp = (NdChar / (exp((mu / KbT)) + 1.0)) - (NaChar / (-1.0 - t_0));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: tmp
t_0 = exp(((vef - ((mu - eaccept) - ev)) / kbt))
if ((vef <= (-2.45d+126)) .or. (.not. (vef <= 1.02d+102))) then
tmp = (nachar / (t_0 + 1.0d0)) + (ndchar / (exp((vef / kbt)) + 1.0d0))
else
tmp = (ndchar / (exp((mu / kbt)) + 1.0d0)) - (nachar / ((-1.0d0) - t_0))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT));
double tmp;
if ((Vef <= -2.45e+126) || !(Vef <= 1.02e+102)) {
tmp = (NaChar / (t_0 + 1.0)) + (NdChar / (Math.exp((Vef / KbT)) + 1.0));
} else {
tmp = (NdChar / (Math.exp((mu / KbT)) + 1.0)) - (NaChar / (-1.0 - t_0));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)) tmp = 0 if (Vef <= -2.45e+126) or not (Vef <= 1.02e+102): tmp = (NaChar / (t_0 + 1.0)) + (NdChar / (math.exp((Vef / KbT)) + 1.0)) else: tmp = (NdChar / (math.exp((mu / KbT)) + 1.0)) - (NaChar / (-1.0 - t_0)) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT)) tmp = 0.0 if ((Vef <= -2.45e+126) || !(Vef <= 1.02e+102)) tmp = Float64(Float64(NaChar / Float64(t_0 + 1.0)) + Float64(NdChar / Float64(exp(Float64(Vef / KbT)) + 1.0))); else tmp = Float64(Float64(NdChar / Float64(exp(Float64(mu / KbT)) + 1.0)) - Float64(NaChar / Float64(-1.0 - t_0))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = exp(((Vef - ((mu - EAccept) - Ev)) / KbT)); tmp = 0.0; if ((Vef <= -2.45e+126) || ~((Vef <= 1.02e+102))) tmp = (NaChar / (t_0 + 1.0)) + (NdChar / (exp((Vef / KbT)) + 1.0)); else tmp = (NdChar / (exp((mu / KbT)) + 1.0)) - (NaChar / (-1.0 - t_0)); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]}, If[Or[LessEqual[Vef, -2.45e+126], N[Not[LessEqual[Vef, 1.02e+102]], $MachinePrecision]], N[(N[(NaChar / N[(t$95$0 + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar / N[(N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] - N[(NaChar / N[(-1.0 - t$95$0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}\\
\mathbf{if}\;Vef \leq -2.45 \cdot 10^{+126} \lor \neg \left(Vef \leq 1.02 \cdot 10^{+102}\right):\\
\;\;\;\;\frac{NaChar}{t\_0 + 1} + \frac{NdChar}{e^{\frac{Vef}{KbT}} + 1}\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{mu}{KbT}} + 1} - \frac{NaChar}{-1 - t\_0}\\
\end{array}
\end{array}
if Vef < -2.45e126 or 1.01999999999999999e102 < Vef Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 89.0%
if -2.45e126 < Vef < 1.01999999999999999e102Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 83.2%
Final simplification84.8%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (or (<= Vef -3.3e-171) (not (<= Vef 4.8e-67)))
(+
(/ NdChar (+ (exp (/ Vef KbT)) 1.0))
(/ NaChar (+ (exp (/ (- (+ Vef Ev) mu) KbT)) 1.0)))
(+
(/ NdChar (+ (exp (/ mu KbT)) 1.0))
(/ NaChar (+ (exp (/ mu (- KbT))) 1.0)))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((Vef <= -3.3e-171) || !(Vef <= 4.8e-67)) {
tmp = (NdChar / (exp((Vef / KbT)) + 1.0)) + (NaChar / (exp((((Vef + Ev) - mu) / KbT)) + 1.0));
} else {
tmp = (NdChar / (exp((mu / KbT)) + 1.0)) + (NaChar / (exp((mu / -KbT)) + 1.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 ((vef <= (-3.3d-171)) .or. (.not. (vef <= 4.8d-67))) then
tmp = (ndchar / (exp((vef / kbt)) + 1.0d0)) + (nachar / (exp((((vef + ev) - mu) / kbt)) + 1.0d0))
else
tmp = (ndchar / (exp((mu / kbt)) + 1.0d0)) + (nachar / (exp((mu / -kbt)) + 1.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 ((Vef <= -3.3e-171) || !(Vef <= 4.8e-67)) {
tmp = (NdChar / (Math.exp((Vef / KbT)) + 1.0)) + (NaChar / (Math.exp((((Vef + Ev) - mu) / KbT)) + 1.0));
} else {
tmp = (NdChar / (Math.exp((mu / KbT)) + 1.0)) + (NaChar / (Math.exp((mu / -KbT)) + 1.0));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if (Vef <= -3.3e-171) or not (Vef <= 4.8e-67): tmp = (NdChar / (math.exp((Vef / KbT)) + 1.0)) + (NaChar / (math.exp((((Vef + Ev) - mu) / KbT)) + 1.0)) else: tmp = (NdChar / (math.exp((mu / KbT)) + 1.0)) + (NaChar / (math.exp((mu / -KbT)) + 1.0)) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if ((Vef <= -3.3e-171) || !(Vef <= 4.8e-67)) tmp = Float64(Float64(NdChar / Float64(exp(Float64(Vef / KbT)) + 1.0)) + Float64(NaChar / Float64(exp(Float64(Float64(Float64(Vef + Ev) - mu) / KbT)) + 1.0))); else tmp = Float64(Float64(NdChar / Float64(exp(Float64(mu / KbT)) + 1.0)) + Float64(NaChar / Float64(exp(Float64(mu / Float64(-KbT))) + 1.0))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if ((Vef <= -3.3e-171) || ~((Vef <= 4.8e-67))) tmp = (NdChar / (exp((Vef / KbT)) + 1.0)) + (NaChar / (exp((((Vef + Ev) - mu) / KbT)) + 1.0)); else tmp = (NdChar / (exp((mu / KbT)) + 1.0)) + (NaChar / (exp((mu / -KbT)) + 1.0)); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[Or[LessEqual[Vef, -3.3e-171], N[Not[LessEqual[Vef, 4.8e-67]], $MachinePrecision]], N[(N[(NdChar / N[(N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(N[Exp[N[(N[(N[(Vef + Ev), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar / N[(N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(N[Exp[N[(mu / (-KbT)), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;Vef \leq -3.3 \cdot 10^{-171} \lor \neg \left(Vef \leq 4.8 \cdot 10^{-67}\right):\\
\;\;\;\;\frac{NdChar}{e^{\frac{Vef}{KbT}} + 1} + \frac{NaChar}{e^{\frac{\left(Vef + Ev\right) - mu}{KbT}} + 1}\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{mu}{KbT}} + 1} + \frac{NaChar}{e^{\frac{mu}{-KbT}} + 1}\\
\end{array}
\end{array}
if Vef < -3.3000000000000002e-171 or 4.8e-67 < Vef Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 81.0%
Taylor expanded in EAccept around 0 76.0%
if -3.3000000000000002e-171 < Vef < 4.8e-67Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 85.3%
Taylor expanded in mu around inf 75.2%
associate-*r/75.2%
mul-1-neg75.2%
Simplified75.2%
Final simplification75.7%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ (- EDonor (- (- Ec Vef) mu)) KbT)))
(if (<= NdChar -1.6e-56)
(+ (/ NdChar (+ (exp t_0) 1.0)) (/ NaChar (+ (/ Ev KbT) 2.0)))
(if (<= NdChar 1.1e+79)
(-
(/ NdChar (+ 2.0 t_0))
(/ NaChar (- -1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT)))))
(+
(/ NdChar (+ (exp (/ mu KbT)) 1.0))
(/ NaChar (+ (exp (/ EAccept KbT)) 1.0)))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (EDonor - ((Ec - Vef) - mu)) / KbT;
double tmp;
if (NdChar <= -1.6e-56) {
tmp = (NdChar / (exp(t_0) + 1.0)) + (NaChar / ((Ev / KbT) + 2.0));
} else if (NdChar <= 1.1e+79) {
tmp = (NdChar / (2.0 + t_0)) - (NaChar / (-1.0 - exp(((Vef - ((mu - EAccept) - Ev)) / KbT))));
} else {
tmp = (NdChar / (exp((mu / KbT)) + 1.0)) + (NaChar / (exp((EAccept / KbT)) + 1.0));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: tmp
t_0 = (edonor - ((ec - vef) - mu)) / kbt
if (ndchar <= (-1.6d-56)) then
tmp = (ndchar / (exp(t_0) + 1.0d0)) + (nachar / ((ev / kbt) + 2.0d0))
else if (ndchar <= 1.1d+79) then
tmp = (ndchar / (2.0d0 + t_0)) - (nachar / ((-1.0d0) - exp(((vef - ((mu - eaccept) - ev)) / kbt))))
else
tmp = (ndchar / (exp((mu / kbt)) + 1.0d0)) + (nachar / (exp((eaccept / kbt)) + 1.0d0))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (EDonor - ((Ec - Vef) - mu)) / KbT;
double tmp;
if (NdChar <= -1.6e-56) {
tmp = (NdChar / (Math.exp(t_0) + 1.0)) + (NaChar / ((Ev / KbT) + 2.0));
} else if (NdChar <= 1.1e+79) {
tmp = (NdChar / (2.0 + t_0)) - (NaChar / (-1.0 - Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT))));
} else {
tmp = (NdChar / (Math.exp((mu / KbT)) + 1.0)) + (NaChar / (Math.exp((EAccept / KbT)) + 1.0));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = (EDonor - ((Ec - Vef) - mu)) / KbT tmp = 0 if NdChar <= -1.6e-56: tmp = (NdChar / (math.exp(t_0) + 1.0)) + (NaChar / ((Ev / KbT) + 2.0)) elif NdChar <= 1.1e+79: tmp = (NdChar / (2.0 + t_0)) - (NaChar / (-1.0 - math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) else: tmp = (NdChar / (math.exp((mu / KbT)) + 1.0)) + (NaChar / (math.exp((EAccept / KbT)) + 1.0)) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(EDonor - Float64(Float64(Ec - Vef) - mu)) / KbT) tmp = 0.0 if (NdChar <= -1.6e-56) tmp = Float64(Float64(NdChar / Float64(exp(t_0) + 1.0)) + Float64(NaChar / Float64(Float64(Ev / KbT) + 2.0))); elseif (NdChar <= 1.1e+79) tmp = Float64(Float64(NdChar / Float64(2.0 + t_0)) - Float64(NaChar / Float64(-1.0 - exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT))))); else tmp = Float64(Float64(NdChar / Float64(exp(Float64(mu / KbT)) + 1.0)) + Float64(NaChar / Float64(exp(Float64(EAccept / KbT)) + 1.0))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = (EDonor - ((Ec - Vef) - mu)) / KbT; tmp = 0.0; if (NdChar <= -1.6e-56) tmp = (NdChar / (exp(t_0) + 1.0)) + (NaChar / ((Ev / KbT) + 2.0)); elseif (NdChar <= 1.1e+79) tmp = (NdChar / (2.0 + t_0)) - (NaChar / (-1.0 - exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))); else tmp = (NdChar / (exp((mu / KbT)) + 1.0)) + (NaChar / (exp((EAccept / KbT)) + 1.0)); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(EDonor - N[(N[(Ec - Vef), $MachinePrecision] - mu), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]}, If[LessEqual[NdChar, -1.6e-56], N[(N[(NdChar / N[(N[Exp[t$95$0], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(N[(Ev / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NdChar, 1.1e+79], N[(N[(NdChar / N[(2.0 + t$95$0), $MachinePrecision]), $MachinePrecision] - N[(NaChar / N[(-1.0 - N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar / N[(N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{EDonor - \left(\left(Ec - Vef\right) - mu\right)}{KbT}\\
\mathbf{if}\;NdChar \leq -1.6 \cdot 10^{-56}:\\
\;\;\;\;\frac{NdChar}{e^{t\_0} + 1} + \frac{NaChar}{\frac{Ev}{KbT} + 2}\\
\mathbf{elif}\;NdChar \leq 1.1 \cdot 10^{+79}:\\
\;\;\;\;\frac{NdChar}{2 + t\_0} - \frac{NaChar}{-1 - e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{mu}{KbT}} + 1} + \frac{NaChar}{e^{\frac{EAccept}{KbT}} + 1}\\
\end{array}
\end{array}
if NdChar < -1.59999999999999993e-56Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 75.4%
Taylor expanded in Ev around 0 67.2%
if -1.59999999999999993e-56 < NdChar < 1.0999999999999999e79Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around -inf 62.3%
Taylor expanded in KbT around inf 77.1%
associate-*r/77.1%
mul-1-neg77.1%
+-commutative77.1%
associate-+r-77.1%
+-commutative77.1%
associate--l+77.1%
Simplified77.1%
if 1.0999999999999999e79 < NdChar Initial program 99.9%
Simplified99.9%
Taylor expanded in mu around inf 68.2%
Taylor expanded in EAccept around inf 50.8%
Final simplification70.0%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (exp (/ mu KbT))) (t_1 (/ NdChar (+ t_0 1.0))))
(if (<= NdChar -2.1e+220)
t_1
(if (<= NdChar -1.15e+194)
(+
(/ NdChar (+ (exp (- (/ Ec KbT))) 1.0))
(/ NaChar (+ (/ Vef KbT) 1.0)))
(if (<= NdChar -5.8e-43)
(- (/ NaChar (+ (/ Ev KbT) 1.0)) (/ NdChar (- -1.0 t_0)))
(if (<= NdChar 6.1e+32)
(-
(/ NdChar 2.0)
(/ NaChar (- -1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT)))))
(+ t_1 (/ NaChar (+ (/ EAccept KbT) 1.0)))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = exp((mu / KbT));
double t_1 = NdChar / (t_0 + 1.0);
double tmp;
if (NdChar <= -2.1e+220) {
tmp = t_1;
} else if (NdChar <= -1.15e+194) {
tmp = (NdChar / (exp(-(Ec / KbT)) + 1.0)) + (NaChar / ((Vef / KbT) + 1.0));
} else if (NdChar <= -5.8e-43) {
tmp = (NaChar / ((Ev / KbT) + 1.0)) - (NdChar / (-1.0 - t_0));
} else if (NdChar <= 6.1e+32) {
tmp = (NdChar / 2.0) - (NaChar / (-1.0 - exp(((Vef - ((mu - EAccept) - Ev)) / KbT))));
} else {
tmp = t_1 + (NaChar / ((EAccept / KbT) + 1.0));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = exp((mu / kbt))
t_1 = ndchar / (t_0 + 1.0d0)
if (ndchar <= (-2.1d+220)) then
tmp = t_1
else if (ndchar <= (-1.15d+194)) then
tmp = (ndchar / (exp(-(ec / kbt)) + 1.0d0)) + (nachar / ((vef / kbt) + 1.0d0))
else if (ndchar <= (-5.8d-43)) then
tmp = (nachar / ((ev / kbt) + 1.0d0)) - (ndchar / ((-1.0d0) - t_0))
else if (ndchar <= 6.1d+32) then
tmp = (ndchar / 2.0d0) - (nachar / ((-1.0d0) - exp(((vef - ((mu - eaccept) - ev)) / kbt))))
else
tmp = t_1 + (nachar / ((eaccept / kbt) + 1.0d0))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = Math.exp((mu / KbT));
double t_1 = NdChar / (t_0 + 1.0);
double tmp;
if (NdChar <= -2.1e+220) {
tmp = t_1;
} else if (NdChar <= -1.15e+194) {
tmp = (NdChar / (Math.exp(-(Ec / KbT)) + 1.0)) + (NaChar / ((Vef / KbT) + 1.0));
} else if (NdChar <= -5.8e-43) {
tmp = (NaChar / ((Ev / KbT) + 1.0)) - (NdChar / (-1.0 - t_0));
} else if (NdChar <= 6.1e+32) {
tmp = (NdChar / 2.0) - (NaChar / (-1.0 - Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT))));
} else {
tmp = t_1 + (NaChar / ((EAccept / KbT) + 1.0));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = math.exp((mu / KbT)) t_1 = NdChar / (t_0 + 1.0) tmp = 0 if NdChar <= -2.1e+220: tmp = t_1 elif NdChar <= -1.15e+194: tmp = (NdChar / (math.exp(-(Ec / KbT)) + 1.0)) + (NaChar / ((Vef / KbT) + 1.0)) elif NdChar <= -5.8e-43: tmp = (NaChar / ((Ev / KbT) + 1.0)) - (NdChar / (-1.0 - t_0)) elif NdChar <= 6.1e+32: tmp = (NdChar / 2.0) - (NaChar / (-1.0 - math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) else: tmp = t_1 + (NaChar / ((EAccept / KbT) + 1.0)) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = exp(Float64(mu / KbT)) t_1 = Float64(NdChar / Float64(t_0 + 1.0)) tmp = 0.0 if (NdChar <= -2.1e+220) tmp = t_1; elseif (NdChar <= -1.15e+194) tmp = Float64(Float64(NdChar / Float64(exp(Float64(-Float64(Ec / KbT))) + 1.0)) + Float64(NaChar / Float64(Float64(Vef / KbT) + 1.0))); elseif (NdChar <= -5.8e-43) tmp = Float64(Float64(NaChar / Float64(Float64(Ev / KbT) + 1.0)) - Float64(NdChar / Float64(-1.0 - t_0))); elseif (NdChar <= 6.1e+32) tmp = Float64(Float64(NdChar / 2.0) - Float64(NaChar / Float64(-1.0 - exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT))))); else tmp = Float64(t_1 + Float64(NaChar / Float64(Float64(EAccept / KbT) + 1.0))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = exp((mu / KbT)); t_1 = NdChar / (t_0 + 1.0); tmp = 0.0; if (NdChar <= -2.1e+220) tmp = t_1; elseif (NdChar <= -1.15e+194) tmp = (NdChar / (exp(-(Ec / KbT)) + 1.0)) + (NaChar / ((Vef / KbT) + 1.0)); elseif (NdChar <= -5.8e-43) tmp = (NaChar / ((Ev / KbT) + 1.0)) - (NdChar / (-1.0 - t_0)); elseif (NdChar <= 6.1e+32) tmp = (NdChar / 2.0) - (NaChar / (-1.0 - exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))); else tmp = t_1 + (NaChar / ((EAccept / KbT) + 1.0)); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[(NdChar / N[(t$95$0 + 1.0), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NdChar, -2.1e+220], t$95$1, If[LessEqual[NdChar, -1.15e+194], N[(N[(NdChar / N[(N[Exp[(-N[(Ec / KbT), $MachinePrecision])], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(N[(Vef / KbT), $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NdChar, -5.8e-43], N[(N[(NaChar / N[(N[(Ev / KbT), $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] - N[(NdChar / N[(-1.0 - t$95$0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NdChar, 6.1e+32], N[(N[(NdChar / 2.0), $MachinePrecision] - N[(NaChar / N[(-1.0 - N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(t$95$1 + N[(NaChar / N[(N[(EAccept / KbT), $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := e^{\frac{mu}{KbT}}\\
t_1 := \frac{NdChar}{t\_0 + 1}\\
\mathbf{if}\;NdChar \leq -2.1 \cdot 10^{+220}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;NdChar \leq -1.15 \cdot 10^{+194}:\\
\;\;\;\;\frac{NdChar}{e^{-\frac{Ec}{KbT}} + 1} + \frac{NaChar}{\frac{Vef}{KbT} + 1}\\
\mathbf{elif}\;NdChar \leq -5.8 \cdot 10^{-43}:\\
\;\;\;\;\frac{NaChar}{\frac{Ev}{KbT} + 1} - \frac{NdChar}{-1 - t\_0}\\
\mathbf{elif}\;NdChar \leq 6.1 \cdot 10^{+32}:\\
\;\;\;\;\frac{NdChar}{2} - \frac{NaChar}{-1 - e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;t\_1 + \frac{NaChar}{\frac{EAccept}{KbT} + 1}\\
\end{array}
\end{array}
if NdChar < -2.10000000000000007e220Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 75.0%
Taylor expanded in KbT around inf 58.1%
Taylor expanded in Vef around inf 45.2%
Taylor expanded in NdChar around inf 62.2%
if -2.10000000000000007e220 < NdChar < -1.15000000000000003e194Initial program 100.0%
Simplified100.0%
Taylor expanded in Ec around inf 86.5%
associate-*r/86.5%
mul-1-neg86.5%
Simplified86.5%
Taylor expanded in KbT around inf 86.5%
Taylor expanded in Vef around inf 86.5%
if -1.15000000000000003e194 < NdChar < -5.8000000000000003e-43Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 73.8%
Taylor expanded in KbT around inf 47.6%
Taylor expanded in Ev around inf 49.7%
if -5.8000000000000003e-43 < NdChar < 6.10000000000000027e32Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 64.9%
if 6.10000000000000027e32 < NdChar Initial program 99.9%
Simplified99.9%
Taylor expanded in mu around inf 72.1%
Taylor expanded in KbT around inf 43.9%
Taylor expanded in EAccept around inf 57.2%
Final simplification60.9%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ (- EDonor (- (- Ec Vef) mu)) KbT)))
(if (or (<= NdChar -3.8e-61) (not (<= NdChar 1.75e+81)))
(+ (/ NdChar (+ (exp t_0) 1.0)) (/ NaChar (+ (/ Ev KbT) 2.0)))
(-
(/ NdChar (+ 2.0 t_0))
(/ NaChar (- -1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (EDonor - ((Ec - Vef) - mu)) / KbT;
double tmp;
if ((NdChar <= -3.8e-61) || !(NdChar <= 1.75e+81)) {
tmp = (NdChar / (exp(t_0) + 1.0)) + (NaChar / ((Ev / KbT) + 2.0));
} else {
tmp = (NdChar / (2.0 + t_0)) - (NaChar / (-1.0 - exp(((Vef - ((mu - EAccept) - Ev)) / KbT))));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: tmp
t_0 = (edonor - ((ec - vef) - mu)) / kbt
if ((ndchar <= (-3.8d-61)) .or. (.not. (ndchar <= 1.75d+81))) then
tmp = (ndchar / (exp(t_0) + 1.0d0)) + (nachar / ((ev / kbt) + 2.0d0))
else
tmp = (ndchar / (2.0d0 + t_0)) - (nachar / ((-1.0d0) - exp(((vef - ((mu - eaccept) - ev)) / kbt))))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (EDonor - ((Ec - Vef) - mu)) / KbT;
double tmp;
if ((NdChar <= -3.8e-61) || !(NdChar <= 1.75e+81)) {
tmp = (NdChar / (Math.exp(t_0) + 1.0)) + (NaChar / ((Ev / KbT) + 2.0));
} else {
tmp = (NdChar / (2.0 + t_0)) - (NaChar / (-1.0 - Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = (EDonor - ((Ec - Vef) - mu)) / KbT tmp = 0 if (NdChar <= -3.8e-61) or not (NdChar <= 1.75e+81): tmp = (NdChar / (math.exp(t_0) + 1.0)) + (NaChar / ((Ev / KbT) + 2.0)) else: tmp = (NdChar / (2.0 + t_0)) - (NaChar / (-1.0 - math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(EDonor - Float64(Float64(Ec - Vef) - mu)) / KbT) tmp = 0.0 if ((NdChar <= -3.8e-61) || !(NdChar <= 1.75e+81)) tmp = Float64(Float64(NdChar / Float64(exp(t_0) + 1.0)) + Float64(NaChar / Float64(Float64(Ev / KbT) + 2.0))); else tmp = Float64(Float64(NdChar / Float64(2.0 + t_0)) - Float64(NaChar / Float64(-1.0 - exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT))))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = (EDonor - ((Ec - Vef) - mu)) / KbT; tmp = 0.0; if ((NdChar <= -3.8e-61) || ~((NdChar <= 1.75e+81))) tmp = (NdChar / (exp(t_0) + 1.0)) + (NaChar / ((Ev / KbT) + 2.0)); else tmp = (NdChar / (2.0 + t_0)) - (NaChar / (-1.0 - exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(EDonor - N[(N[(Ec - Vef), $MachinePrecision] - mu), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]}, If[Or[LessEqual[NdChar, -3.8e-61], N[Not[LessEqual[NdChar, 1.75e+81]], $MachinePrecision]], N[(N[(NdChar / N[(N[Exp[t$95$0], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(N[(Ev / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar / N[(2.0 + t$95$0), $MachinePrecision]), $MachinePrecision] - N[(NaChar / N[(-1.0 - N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{EDonor - \left(\left(Ec - Vef\right) - mu\right)}{KbT}\\
\mathbf{if}\;NdChar \leq -3.8 \cdot 10^{-61} \lor \neg \left(NdChar \leq 1.75 \cdot 10^{+81}\right):\\
\;\;\;\;\frac{NdChar}{e^{t\_0} + 1} + \frac{NaChar}{\frac{Ev}{KbT} + 2}\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{2 + t\_0} - \frac{NaChar}{-1 - e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}}\\
\end{array}
\end{array}
if NdChar < -3.7999999999999998e-61 or 1.75e81 < NdChar Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 77.7%
Taylor expanded in Ev around 0 65.8%
if -3.7999999999999998e-61 < NdChar < 1.75e81Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around -inf 61.8%
Taylor expanded in KbT around inf 76.7%
associate-*r/76.7%
mul-1-neg76.7%
+-commutative76.7%
associate-+r-76.7%
+-commutative76.7%
associate--l+76.7%
Simplified76.7%
Final simplification71.8%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NdChar (+ (exp (/ mu KbT)) 1.0))))
(if (<= NdChar -1.4e+220)
t_0
(if (<= NdChar -1.12e+195)
(+ (/ NdChar (+ (exp (- (/ Ec KbT))) 1.0)) (/ (* KbT NaChar) Vef))
(if (or (<= NdChar -4.6e+34) (not (<= NdChar 9.2e+36)))
t_0
(+
(/ NaChar (+ (exp (/ (- (+ Vef Ev) mu) KbT)) 1.0))
(/ NdChar 2.0)))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (exp((mu / KbT)) + 1.0);
double tmp;
if (NdChar <= -1.4e+220) {
tmp = t_0;
} else if (NdChar <= -1.12e+195) {
tmp = (NdChar / (exp(-(Ec / KbT)) + 1.0)) + ((KbT * NaChar) / Vef);
} else if ((NdChar <= -4.6e+34) || !(NdChar <= 9.2e+36)) {
tmp = t_0;
} else {
tmp = (NaChar / (exp((((Vef + Ev) - mu) / KbT)) + 1.0)) + (NdChar / 2.0);
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: tmp
t_0 = ndchar / (exp((mu / kbt)) + 1.0d0)
if (ndchar <= (-1.4d+220)) then
tmp = t_0
else if (ndchar <= (-1.12d+195)) then
tmp = (ndchar / (exp(-(ec / kbt)) + 1.0d0)) + ((kbt * nachar) / vef)
else if ((ndchar <= (-4.6d+34)) .or. (.not. (ndchar <= 9.2d+36))) then
tmp = t_0
else
tmp = (nachar / (exp((((vef + ev) - mu) / kbt)) + 1.0d0)) + (ndchar / 2.0d0)
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (Math.exp((mu / KbT)) + 1.0);
double tmp;
if (NdChar <= -1.4e+220) {
tmp = t_0;
} else if (NdChar <= -1.12e+195) {
tmp = (NdChar / (Math.exp(-(Ec / KbT)) + 1.0)) + ((KbT * NaChar) / Vef);
} else if ((NdChar <= -4.6e+34) || !(NdChar <= 9.2e+36)) {
tmp = t_0;
} else {
tmp = (NaChar / (Math.exp((((Vef + Ev) - mu) / KbT)) + 1.0)) + (NdChar / 2.0);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NdChar / (math.exp((mu / KbT)) + 1.0) tmp = 0 if NdChar <= -1.4e+220: tmp = t_0 elif NdChar <= -1.12e+195: tmp = (NdChar / (math.exp(-(Ec / KbT)) + 1.0)) + ((KbT * NaChar) / Vef) elif (NdChar <= -4.6e+34) or not (NdChar <= 9.2e+36): tmp = t_0 else: tmp = (NaChar / (math.exp((((Vef + Ev) - mu) / KbT)) + 1.0)) + (NdChar / 2.0) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NdChar / Float64(exp(Float64(mu / KbT)) + 1.0)) tmp = 0.0 if (NdChar <= -1.4e+220) tmp = t_0; elseif (NdChar <= -1.12e+195) tmp = Float64(Float64(NdChar / Float64(exp(Float64(-Float64(Ec / KbT))) + 1.0)) + Float64(Float64(KbT * NaChar) / Vef)); elseif ((NdChar <= -4.6e+34) || !(NdChar <= 9.2e+36)) tmp = t_0; else tmp = Float64(Float64(NaChar / Float64(exp(Float64(Float64(Float64(Vef + Ev) - mu) / KbT)) + 1.0)) + Float64(NdChar / 2.0)); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NdChar / (exp((mu / KbT)) + 1.0); tmp = 0.0; if (NdChar <= -1.4e+220) tmp = t_0; elseif (NdChar <= -1.12e+195) tmp = (NdChar / (exp(-(Ec / KbT)) + 1.0)) + ((KbT * NaChar) / Vef); elseif ((NdChar <= -4.6e+34) || ~((NdChar <= 9.2e+36))) tmp = t_0; else tmp = (NaChar / (exp((((Vef + Ev) - mu) / KbT)) + 1.0)) + (NdChar / 2.0); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NdChar / N[(N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NdChar, -1.4e+220], t$95$0, If[LessEqual[NdChar, -1.12e+195], N[(N[(NdChar / N[(N[Exp[(-N[(Ec / KbT), $MachinePrecision])], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(N[(KbT * NaChar), $MachinePrecision] / Vef), $MachinePrecision]), $MachinePrecision], If[Or[LessEqual[NdChar, -4.6e+34], N[Not[LessEqual[NdChar, 9.2e+36]], $MachinePrecision]], t$95$0, N[(N[(NaChar / N[(N[Exp[N[(N[(N[(Vef + Ev), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{e^{\frac{mu}{KbT}} + 1}\\
\mathbf{if}\;NdChar \leq -1.4 \cdot 10^{+220}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;NdChar \leq -1.12 \cdot 10^{+195}:\\
\;\;\;\;\frac{NdChar}{e^{-\frac{Ec}{KbT}} + 1} + \frac{KbT \cdot NaChar}{Vef}\\
\mathbf{elif}\;NdChar \leq -4.6 \cdot 10^{+34} \lor \neg \left(NdChar \leq 9.2 \cdot 10^{+36}\right):\\
\;\;\;\;t\_0\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{e^{\frac{\left(Vef + Ev\right) - mu}{KbT}} + 1} + \frac{NdChar}{2}\\
\end{array}
\end{array}
if NdChar < -1.4e220 or -1.12000000000000004e195 < NdChar < -4.5999999999999996e34 or 9.19999999999999986e36 < NdChar Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 74.1%
Taylor expanded in KbT around inf 50.8%
Taylor expanded in Vef around inf 23.4%
Taylor expanded in NdChar around inf 54.0%
if -1.4e220 < NdChar < -1.12000000000000004e195Initial program 100.0%
Simplified100.0%
Taylor expanded in Ec around inf 86.5%
associate-*r/86.5%
mul-1-neg86.5%
Simplified86.5%
Taylor expanded in KbT around inf 86.5%
Taylor expanded in Vef around inf 84.3%
if -4.5999999999999996e34 < NdChar < 9.19999999999999986e36Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 62.0%
Taylor expanded in EAccept around 0 56.8%
Final simplification56.3%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (exp (/ mu KbT))) (t_1 (/ NdChar (+ t_0 1.0))))
(if (<= NdChar -1.4e+223)
t_1
(if (<= NdChar -9e+194)
(+
(/ NdChar (+ (exp (- (/ Ec KbT))) 1.0))
(/ NaChar (+ (/ Vef KbT) 1.0)))
(if (<= NdChar -3.9e-44)
(- (/ NaChar (+ (/ Ev KbT) 1.0)) (/ NdChar (- -1.0 t_0)))
(if (<= NdChar 2.4e+27)
(+
(/ NaChar (+ (exp (/ (- (+ Vef Ev) mu) KbT)) 1.0))
(/ NdChar 2.0))
(+ t_1 (/ NaChar (+ (/ EAccept KbT) 1.0)))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = exp((mu / KbT));
double t_1 = NdChar / (t_0 + 1.0);
double tmp;
if (NdChar <= -1.4e+223) {
tmp = t_1;
} else if (NdChar <= -9e+194) {
tmp = (NdChar / (exp(-(Ec / KbT)) + 1.0)) + (NaChar / ((Vef / KbT) + 1.0));
} else if (NdChar <= -3.9e-44) {
tmp = (NaChar / ((Ev / KbT) + 1.0)) - (NdChar / (-1.0 - t_0));
} else if (NdChar <= 2.4e+27) {
tmp = (NaChar / (exp((((Vef + Ev) - mu) / KbT)) + 1.0)) + (NdChar / 2.0);
} else {
tmp = t_1 + (NaChar / ((EAccept / KbT) + 1.0));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = exp((mu / kbt))
t_1 = ndchar / (t_0 + 1.0d0)
if (ndchar <= (-1.4d+223)) then
tmp = t_1
else if (ndchar <= (-9d+194)) then
tmp = (ndchar / (exp(-(ec / kbt)) + 1.0d0)) + (nachar / ((vef / kbt) + 1.0d0))
else if (ndchar <= (-3.9d-44)) then
tmp = (nachar / ((ev / kbt) + 1.0d0)) - (ndchar / ((-1.0d0) - t_0))
else if (ndchar <= 2.4d+27) then
tmp = (nachar / (exp((((vef + ev) - mu) / kbt)) + 1.0d0)) + (ndchar / 2.0d0)
else
tmp = t_1 + (nachar / ((eaccept / kbt) + 1.0d0))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = Math.exp((mu / KbT));
double t_1 = NdChar / (t_0 + 1.0);
double tmp;
if (NdChar <= -1.4e+223) {
tmp = t_1;
} else if (NdChar <= -9e+194) {
tmp = (NdChar / (Math.exp(-(Ec / KbT)) + 1.0)) + (NaChar / ((Vef / KbT) + 1.0));
} else if (NdChar <= -3.9e-44) {
tmp = (NaChar / ((Ev / KbT) + 1.0)) - (NdChar / (-1.0 - t_0));
} else if (NdChar <= 2.4e+27) {
tmp = (NaChar / (Math.exp((((Vef + Ev) - mu) / KbT)) + 1.0)) + (NdChar / 2.0);
} else {
tmp = t_1 + (NaChar / ((EAccept / KbT) + 1.0));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = math.exp((mu / KbT)) t_1 = NdChar / (t_0 + 1.0) tmp = 0 if NdChar <= -1.4e+223: tmp = t_1 elif NdChar <= -9e+194: tmp = (NdChar / (math.exp(-(Ec / KbT)) + 1.0)) + (NaChar / ((Vef / KbT) + 1.0)) elif NdChar <= -3.9e-44: tmp = (NaChar / ((Ev / KbT) + 1.0)) - (NdChar / (-1.0 - t_0)) elif NdChar <= 2.4e+27: tmp = (NaChar / (math.exp((((Vef + Ev) - mu) / KbT)) + 1.0)) + (NdChar / 2.0) else: tmp = t_1 + (NaChar / ((EAccept / KbT) + 1.0)) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = exp(Float64(mu / KbT)) t_1 = Float64(NdChar / Float64(t_0 + 1.0)) tmp = 0.0 if (NdChar <= -1.4e+223) tmp = t_1; elseif (NdChar <= -9e+194) tmp = Float64(Float64(NdChar / Float64(exp(Float64(-Float64(Ec / KbT))) + 1.0)) + Float64(NaChar / Float64(Float64(Vef / KbT) + 1.0))); elseif (NdChar <= -3.9e-44) tmp = Float64(Float64(NaChar / Float64(Float64(Ev / KbT) + 1.0)) - Float64(NdChar / Float64(-1.0 - t_0))); elseif (NdChar <= 2.4e+27) tmp = Float64(Float64(NaChar / Float64(exp(Float64(Float64(Float64(Vef + Ev) - mu) / KbT)) + 1.0)) + Float64(NdChar / 2.0)); else tmp = Float64(t_1 + Float64(NaChar / Float64(Float64(EAccept / KbT) + 1.0))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = exp((mu / KbT)); t_1 = NdChar / (t_0 + 1.0); tmp = 0.0; if (NdChar <= -1.4e+223) tmp = t_1; elseif (NdChar <= -9e+194) tmp = (NdChar / (exp(-(Ec / KbT)) + 1.0)) + (NaChar / ((Vef / KbT) + 1.0)); elseif (NdChar <= -3.9e-44) tmp = (NaChar / ((Ev / KbT) + 1.0)) - (NdChar / (-1.0 - t_0)); elseif (NdChar <= 2.4e+27) tmp = (NaChar / (exp((((Vef + Ev) - mu) / KbT)) + 1.0)) + (NdChar / 2.0); else tmp = t_1 + (NaChar / ((EAccept / KbT) + 1.0)); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[(NdChar / N[(t$95$0 + 1.0), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NdChar, -1.4e+223], t$95$1, If[LessEqual[NdChar, -9e+194], N[(N[(NdChar / N[(N[Exp[(-N[(Ec / KbT), $MachinePrecision])], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(N[(Vef / KbT), $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NdChar, -3.9e-44], N[(N[(NaChar / N[(N[(Ev / KbT), $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] - N[(NdChar / N[(-1.0 - t$95$0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NdChar, 2.4e+27], N[(N[(NaChar / N[(N[Exp[N[(N[(N[(Vef + Ev), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision], N[(t$95$1 + N[(NaChar / N[(N[(EAccept / KbT), $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := e^{\frac{mu}{KbT}}\\
t_1 := \frac{NdChar}{t\_0 + 1}\\
\mathbf{if}\;NdChar \leq -1.4 \cdot 10^{+223}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;NdChar \leq -9 \cdot 10^{+194}:\\
\;\;\;\;\frac{NdChar}{e^{-\frac{Ec}{KbT}} + 1} + \frac{NaChar}{\frac{Vef}{KbT} + 1}\\
\mathbf{elif}\;NdChar \leq -3.9 \cdot 10^{-44}:\\
\;\;\;\;\frac{NaChar}{\frac{Ev}{KbT} + 1} - \frac{NdChar}{-1 - t\_0}\\
\mathbf{elif}\;NdChar \leq 2.4 \cdot 10^{+27}:\\
\;\;\;\;\frac{NaChar}{e^{\frac{\left(Vef + Ev\right) - mu}{KbT}} + 1} + \frac{NdChar}{2}\\
\mathbf{else}:\\
\;\;\;\;t\_1 + \frac{NaChar}{\frac{EAccept}{KbT} + 1}\\
\end{array}
\end{array}
if NdChar < -1.3999999999999999e223Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 75.0%
Taylor expanded in KbT around inf 58.1%
Taylor expanded in Vef around inf 45.2%
Taylor expanded in NdChar around inf 62.2%
if -1.3999999999999999e223 < NdChar < -8.9999999999999997e194Initial program 100.0%
Simplified100.0%
Taylor expanded in Ec around inf 86.5%
associate-*r/86.5%
mul-1-neg86.5%
Simplified86.5%
Taylor expanded in KbT around inf 86.5%
Taylor expanded in Vef around inf 86.5%
if -8.9999999999999997e194 < NdChar < -3.9000000000000002e-44Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 73.8%
Taylor expanded in KbT around inf 47.6%
Taylor expanded in Ev around inf 49.7%
if -3.9000000000000002e-44 < NdChar < 2.39999999999999998e27Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 64.9%
Taylor expanded in EAccept around 0 59.0%
if 2.39999999999999998e27 < NdChar Initial program 99.9%
Simplified99.9%
Taylor expanded in mu around inf 72.1%
Taylor expanded in KbT around inf 43.9%
Taylor expanded in EAccept around inf 57.2%
Final simplification57.9%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (exp (/ mu KbT))) (t_1 (/ NdChar (+ t_0 1.0))))
(if (<= NdChar -1.4e+220)
t_1
(if (<= NdChar -1.06e+195)
(+ (/ NdChar (+ (exp (- (/ Ec KbT))) 1.0)) (/ (* KbT NaChar) Vef))
(if (<= NdChar -5.2e-44)
(- (/ NaChar (+ (/ Ev KbT) 1.0)) (/ NdChar (- -1.0 t_0)))
(if (<= NdChar 1.56e+32)
(+
(/ NaChar (+ (exp (/ (- (+ Vef Ev) mu) KbT)) 1.0))
(/ NdChar 2.0))
(+ t_1 (/ NaChar (+ (/ EAccept KbT) 1.0)))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = exp((mu / KbT));
double t_1 = NdChar / (t_0 + 1.0);
double tmp;
if (NdChar <= -1.4e+220) {
tmp = t_1;
} else if (NdChar <= -1.06e+195) {
tmp = (NdChar / (exp(-(Ec / KbT)) + 1.0)) + ((KbT * NaChar) / Vef);
} else if (NdChar <= -5.2e-44) {
tmp = (NaChar / ((Ev / KbT) + 1.0)) - (NdChar / (-1.0 - t_0));
} else if (NdChar <= 1.56e+32) {
tmp = (NaChar / (exp((((Vef + Ev) - mu) / KbT)) + 1.0)) + (NdChar / 2.0);
} else {
tmp = t_1 + (NaChar / ((EAccept / KbT) + 1.0));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = exp((mu / kbt))
t_1 = ndchar / (t_0 + 1.0d0)
if (ndchar <= (-1.4d+220)) then
tmp = t_1
else if (ndchar <= (-1.06d+195)) then
tmp = (ndchar / (exp(-(ec / kbt)) + 1.0d0)) + ((kbt * nachar) / vef)
else if (ndchar <= (-5.2d-44)) then
tmp = (nachar / ((ev / kbt) + 1.0d0)) - (ndchar / ((-1.0d0) - t_0))
else if (ndchar <= 1.56d+32) then
tmp = (nachar / (exp((((vef + ev) - mu) / kbt)) + 1.0d0)) + (ndchar / 2.0d0)
else
tmp = t_1 + (nachar / ((eaccept / kbt) + 1.0d0))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = Math.exp((mu / KbT));
double t_1 = NdChar / (t_0 + 1.0);
double tmp;
if (NdChar <= -1.4e+220) {
tmp = t_1;
} else if (NdChar <= -1.06e+195) {
tmp = (NdChar / (Math.exp(-(Ec / KbT)) + 1.0)) + ((KbT * NaChar) / Vef);
} else if (NdChar <= -5.2e-44) {
tmp = (NaChar / ((Ev / KbT) + 1.0)) - (NdChar / (-1.0 - t_0));
} else if (NdChar <= 1.56e+32) {
tmp = (NaChar / (Math.exp((((Vef + Ev) - mu) / KbT)) + 1.0)) + (NdChar / 2.0);
} else {
tmp = t_1 + (NaChar / ((EAccept / KbT) + 1.0));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = math.exp((mu / KbT)) t_1 = NdChar / (t_0 + 1.0) tmp = 0 if NdChar <= -1.4e+220: tmp = t_1 elif NdChar <= -1.06e+195: tmp = (NdChar / (math.exp(-(Ec / KbT)) + 1.0)) + ((KbT * NaChar) / Vef) elif NdChar <= -5.2e-44: tmp = (NaChar / ((Ev / KbT) + 1.0)) - (NdChar / (-1.0 - t_0)) elif NdChar <= 1.56e+32: tmp = (NaChar / (math.exp((((Vef + Ev) - mu) / KbT)) + 1.0)) + (NdChar / 2.0) else: tmp = t_1 + (NaChar / ((EAccept / KbT) + 1.0)) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = exp(Float64(mu / KbT)) t_1 = Float64(NdChar / Float64(t_0 + 1.0)) tmp = 0.0 if (NdChar <= -1.4e+220) tmp = t_1; elseif (NdChar <= -1.06e+195) tmp = Float64(Float64(NdChar / Float64(exp(Float64(-Float64(Ec / KbT))) + 1.0)) + Float64(Float64(KbT * NaChar) / Vef)); elseif (NdChar <= -5.2e-44) tmp = Float64(Float64(NaChar / Float64(Float64(Ev / KbT) + 1.0)) - Float64(NdChar / Float64(-1.0 - t_0))); elseif (NdChar <= 1.56e+32) tmp = Float64(Float64(NaChar / Float64(exp(Float64(Float64(Float64(Vef + Ev) - mu) / KbT)) + 1.0)) + Float64(NdChar / 2.0)); else tmp = Float64(t_1 + Float64(NaChar / Float64(Float64(EAccept / KbT) + 1.0))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = exp((mu / KbT)); t_1 = NdChar / (t_0 + 1.0); tmp = 0.0; if (NdChar <= -1.4e+220) tmp = t_1; elseif (NdChar <= -1.06e+195) tmp = (NdChar / (exp(-(Ec / KbT)) + 1.0)) + ((KbT * NaChar) / Vef); elseif (NdChar <= -5.2e-44) tmp = (NaChar / ((Ev / KbT) + 1.0)) - (NdChar / (-1.0 - t_0)); elseif (NdChar <= 1.56e+32) tmp = (NaChar / (exp((((Vef + Ev) - mu) / KbT)) + 1.0)) + (NdChar / 2.0); else tmp = t_1 + (NaChar / ((EAccept / KbT) + 1.0)); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[(NdChar / N[(t$95$0 + 1.0), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NdChar, -1.4e+220], t$95$1, If[LessEqual[NdChar, -1.06e+195], N[(N[(NdChar / N[(N[Exp[(-N[(Ec / KbT), $MachinePrecision])], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(N[(KbT * NaChar), $MachinePrecision] / Vef), $MachinePrecision]), $MachinePrecision], If[LessEqual[NdChar, -5.2e-44], N[(N[(NaChar / N[(N[(Ev / KbT), $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] - N[(NdChar / N[(-1.0 - t$95$0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NdChar, 1.56e+32], N[(N[(NaChar / N[(N[Exp[N[(N[(N[(Vef + Ev), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision], N[(t$95$1 + N[(NaChar / N[(N[(EAccept / KbT), $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := e^{\frac{mu}{KbT}}\\
t_1 := \frac{NdChar}{t\_0 + 1}\\
\mathbf{if}\;NdChar \leq -1.4 \cdot 10^{+220}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;NdChar \leq -1.06 \cdot 10^{+195}:\\
\;\;\;\;\frac{NdChar}{e^{-\frac{Ec}{KbT}} + 1} + \frac{KbT \cdot NaChar}{Vef}\\
\mathbf{elif}\;NdChar \leq -5.2 \cdot 10^{-44}:\\
\;\;\;\;\frac{NaChar}{\frac{Ev}{KbT} + 1} - \frac{NdChar}{-1 - t\_0}\\
\mathbf{elif}\;NdChar \leq 1.56 \cdot 10^{+32}:\\
\;\;\;\;\frac{NaChar}{e^{\frac{\left(Vef + Ev\right) - mu}{KbT}} + 1} + \frac{NdChar}{2}\\
\mathbf{else}:\\
\;\;\;\;t\_1 + \frac{NaChar}{\frac{EAccept}{KbT} + 1}\\
\end{array}
\end{array}
if NdChar < -1.4e220Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 75.0%
Taylor expanded in KbT around inf 58.1%
Taylor expanded in Vef around inf 45.2%
Taylor expanded in NdChar around inf 62.2%
if -1.4e220 < NdChar < -1.06000000000000001e195Initial program 100.0%
Simplified100.0%
Taylor expanded in Ec around inf 86.5%
associate-*r/86.5%
mul-1-neg86.5%
Simplified86.5%
Taylor expanded in KbT around inf 86.5%
Taylor expanded in Vef around inf 84.3%
if -1.06000000000000001e195 < NdChar < -5.1999999999999996e-44Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 73.8%
Taylor expanded in KbT around inf 47.6%
Taylor expanded in Ev around inf 49.7%
if -5.1999999999999996e-44 < NdChar < 1.56e32Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 64.9%
Taylor expanded in EAccept around 0 59.0%
if 1.56e32 < NdChar Initial program 99.9%
Simplified99.9%
Taylor expanded in mu around inf 72.1%
Taylor expanded in KbT around inf 43.9%
Taylor expanded in EAccept around inf 57.2%
Final simplification57.8%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NdChar (+ (exp (/ mu KbT)) 1.0))))
(if (<= NdChar -1.4e+220)
t_0
(if (<= NdChar -1.12e+195)
(+ (/ NdChar (+ (exp (- (/ Ec KbT))) 1.0)) (/ (* KbT NaChar) Vef))
(if (<= NdChar -4.5e+29)
t_0
(if (<= NdChar 5e+26)
(+
(/ NaChar (+ (exp (/ (- (+ Vef Ev) mu) KbT)) 1.0))
(/ NdChar 2.0))
(+ t_0 (/ NaChar (+ (/ EAccept KbT) 1.0)))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (exp((mu / KbT)) + 1.0);
double tmp;
if (NdChar <= -1.4e+220) {
tmp = t_0;
} else if (NdChar <= -1.12e+195) {
tmp = (NdChar / (exp(-(Ec / KbT)) + 1.0)) + ((KbT * NaChar) / Vef);
} else if (NdChar <= -4.5e+29) {
tmp = t_0;
} else if (NdChar <= 5e+26) {
tmp = (NaChar / (exp((((Vef + Ev) - mu) / KbT)) + 1.0)) + (NdChar / 2.0);
} else {
tmp = t_0 + (NaChar / ((EAccept / KbT) + 1.0));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: tmp
t_0 = ndchar / (exp((mu / kbt)) + 1.0d0)
if (ndchar <= (-1.4d+220)) then
tmp = t_0
else if (ndchar <= (-1.12d+195)) then
tmp = (ndchar / (exp(-(ec / kbt)) + 1.0d0)) + ((kbt * nachar) / vef)
else if (ndchar <= (-4.5d+29)) then
tmp = t_0
else if (ndchar <= 5d+26) then
tmp = (nachar / (exp((((vef + ev) - mu) / kbt)) + 1.0d0)) + (ndchar / 2.0d0)
else
tmp = t_0 + (nachar / ((eaccept / kbt) + 1.0d0))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (Math.exp((mu / KbT)) + 1.0);
double tmp;
if (NdChar <= -1.4e+220) {
tmp = t_0;
} else if (NdChar <= -1.12e+195) {
tmp = (NdChar / (Math.exp(-(Ec / KbT)) + 1.0)) + ((KbT * NaChar) / Vef);
} else if (NdChar <= -4.5e+29) {
tmp = t_0;
} else if (NdChar <= 5e+26) {
tmp = (NaChar / (Math.exp((((Vef + Ev) - mu) / KbT)) + 1.0)) + (NdChar / 2.0);
} else {
tmp = t_0 + (NaChar / ((EAccept / KbT) + 1.0));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NdChar / (math.exp((mu / KbT)) + 1.0) tmp = 0 if NdChar <= -1.4e+220: tmp = t_0 elif NdChar <= -1.12e+195: tmp = (NdChar / (math.exp(-(Ec / KbT)) + 1.0)) + ((KbT * NaChar) / Vef) elif NdChar <= -4.5e+29: tmp = t_0 elif NdChar <= 5e+26: tmp = (NaChar / (math.exp((((Vef + Ev) - mu) / KbT)) + 1.0)) + (NdChar / 2.0) else: tmp = t_0 + (NaChar / ((EAccept / KbT) + 1.0)) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NdChar / Float64(exp(Float64(mu / KbT)) + 1.0)) tmp = 0.0 if (NdChar <= -1.4e+220) tmp = t_0; elseif (NdChar <= -1.12e+195) tmp = Float64(Float64(NdChar / Float64(exp(Float64(-Float64(Ec / KbT))) + 1.0)) + Float64(Float64(KbT * NaChar) / Vef)); elseif (NdChar <= -4.5e+29) tmp = t_0; elseif (NdChar <= 5e+26) tmp = Float64(Float64(NaChar / Float64(exp(Float64(Float64(Float64(Vef + Ev) - mu) / KbT)) + 1.0)) + Float64(NdChar / 2.0)); else tmp = Float64(t_0 + Float64(NaChar / Float64(Float64(EAccept / KbT) + 1.0))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NdChar / (exp((mu / KbT)) + 1.0); tmp = 0.0; if (NdChar <= -1.4e+220) tmp = t_0; elseif (NdChar <= -1.12e+195) tmp = (NdChar / (exp(-(Ec / KbT)) + 1.0)) + ((KbT * NaChar) / Vef); elseif (NdChar <= -4.5e+29) tmp = t_0; elseif (NdChar <= 5e+26) tmp = (NaChar / (exp((((Vef + Ev) - mu) / KbT)) + 1.0)) + (NdChar / 2.0); else tmp = t_0 + (NaChar / ((EAccept / KbT) + 1.0)); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NdChar / N[(N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NdChar, -1.4e+220], t$95$0, If[LessEqual[NdChar, -1.12e+195], N[(N[(NdChar / N[(N[Exp[(-N[(Ec / KbT), $MachinePrecision])], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(N[(KbT * NaChar), $MachinePrecision] / Vef), $MachinePrecision]), $MachinePrecision], If[LessEqual[NdChar, -4.5e+29], t$95$0, If[LessEqual[NdChar, 5e+26], N[(N[(NaChar / N[(N[Exp[N[(N[(N[(Vef + Ev), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision], N[(t$95$0 + N[(NaChar / N[(N[(EAccept / KbT), $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{e^{\frac{mu}{KbT}} + 1}\\
\mathbf{if}\;NdChar \leq -1.4 \cdot 10^{+220}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;NdChar \leq -1.12 \cdot 10^{+195}:\\
\;\;\;\;\frac{NdChar}{e^{-\frac{Ec}{KbT}} + 1} + \frac{KbT \cdot NaChar}{Vef}\\
\mathbf{elif}\;NdChar \leq -4.5 \cdot 10^{+29}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;NdChar \leq 5 \cdot 10^{+26}:\\
\;\;\;\;\frac{NaChar}{e^{\frac{\left(Vef + Ev\right) - mu}{KbT}} + 1} + \frac{NdChar}{2}\\
\mathbf{else}:\\
\;\;\;\;t\_0 + \frac{NaChar}{\frac{EAccept}{KbT} + 1}\\
\end{array}
\end{array}
if NdChar < -1.4e220 or -1.12000000000000004e195 < NdChar < -4.5000000000000002e29Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 76.6%
Taylor expanded in KbT around inf 56.9%
Taylor expanded in Vef around inf 30.1%
Taylor expanded in NdChar around inf 59.2%
if -1.4e220 < NdChar < -1.12000000000000004e195Initial program 100.0%
Simplified100.0%
Taylor expanded in Ec around inf 86.5%
associate-*r/86.5%
mul-1-neg86.5%
Simplified86.5%
Taylor expanded in KbT around inf 86.5%
Taylor expanded in Vef around inf 84.3%
if -4.5000000000000002e29 < NdChar < 5.0000000000000001e26Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 61.7%
Taylor expanded in EAccept around 0 56.5%
if 5.0000000000000001e26 < NdChar Initial program 99.9%
Simplified99.9%
Taylor expanded in mu around inf 72.1%
Taylor expanded in KbT around inf 43.9%
Taylor expanded in EAccept around inf 57.2%
Final simplification57.9%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (or (<= NdChar -4.5e-55) (not (<= NdChar 1.2e+89)))
(+
(/ NdChar (+ (exp (/ (- EDonor (- (- Ec Vef) mu)) KbT)) 1.0))
(/ NaChar (+ (/ Ev KbT) 2.0)))
(+
(/ NaChar (+ (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT)) 1.0))
(/ NdChar (+ (/ Vef KbT) 2.0)))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NdChar <= -4.5e-55) || !(NdChar <= 1.2e+89)) {
tmp = (NdChar / (exp(((EDonor - ((Ec - Vef) - mu)) / KbT)) + 1.0)) + (NaChar / ((Ev / KbT) + 2.0));
} else {
tmp = (NaChar / (exp(((Vef - ((mu - EAccept) - Ev)) / KbT)) + 1.0)) + (NdChar / ((Vef / KbT) + 2.0));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if ((ndchar <= (-4.5d-55)) .or. (.not. (ndchar <= 1.2d+89))) then
tmp = (ndchar / (exp(((edonor - ((ec - vef) - mu)) / kbt)) + 1.0d0)) + (nachar / ((ev / kbt) + 2.0d0))
else
tmp = (nachar / (exp(((vef - ((mu - eaccept) - ev)) / kbt)) + 1.0d0)) + (ndchar / ((vef / kbt) + 2.0d0))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NdChar <= -4.5e-55) || !(NdChar <= 1.2e+89)) {
tmp = (NdChar / (Math.exp(((EDonor - ((Ec - Vef) - mu)) / KbT)) + 1.0)) + (NaChar / ((Ev / KbT) + 2.0));
} else {
tmp = (NaChar / (Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)) + 1.0)) + (NdChar / ((Vef / KbT) + 2.0));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if (NdChar <= -4.5e-55) or not (NdChar <= 1.2e+89): tmp = (NdChar / (math.exp(((EDonor - ((Ec - Vef) - mu)) / KbT)) + 1.0)) + (NaChar / ((Ev / KbT) + 2.0)) else: tmp = (NaChar / (math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)) + 1.0)) + (NdChar / ((Vef / KbT) + 2.0)) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if ((NdChar <= -4.5e-55) || !(NdChar <= 1.2e+89)) tmp = Float64(Float64(NdChar / Float64(exp(Float64(Float64(EDonor - Float64(Float64(Ec - Vef) - mu)) / KbT)) + 1.0)) + Float64(NaChar / Float64(Float64(Ev / KbT) + 2.0))); else tmp = Float64(Float64(NaChar / Float64(exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT)) + 1.0)) + Float64(NdChar / Float64(Float64(Vef / KbT) + 2.0))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if ((NdChar <= -4.5e-55) || ~((NdChar <= 1.2e+89))) tmp = (NdChar / (exp(((EDonor - ((Ec - Vef) - mu)) / KbT)) + 1.0)) + (NaChar / ((Ev / KbT) + 2.0)); else tmp = (NaChar / (exp(((Vef - ((mu - EAccept) - Ev)) / KbT)) + 1.0)) + (NdChar / ((Vef / KbT) + 2.0)); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[Or[LessEqual[NdChar, -4.5e-55], N[Not[LessEqual[NdChar, 1.2e+89]], $MachinePrecision]], N[(N[(NdChar / N[(N[Exp[N[(N[(EDonor - N[(N[(Ec - Vef), $MachinePrecision] - mu), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(N[(Ev / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar / N[(N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(N[(Vef / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NdChar \leq -4.5 \cdot 10^{-55} \lor \neg \left(NdChar \leq 1.2 \cdot 10^{+89}\right):\\
\;\;\;\;\frac{NdChar}{e^{\frac{EDonor - \left(\left(Ec - Vef\right) - mu\right)}{KbT}} + 1} + \frac{NaChar}{\frac{Ev}{KbT} + 2}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}} + 1} + \frac{NdChar}{\frac{Vef}{KbT} + 2}\\
\end{array}
\end{array}
if NdChar < -4.4999999999999997e-55 or 1.20000000000000002e89 < NdChar Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 77.6%
Taylor expanded in Ev around 0 65.5%
if -4.4999999999999997e-55 < NdChar < 1.20000000000000002e89Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 82.8%
Taylor expanded in Vef around 0 72.2%
Final simplification69.1%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (or (<= NdChar -6.5e-55) (not (<= NdChar 1.6e+89)))
(+
(/ NdChar (+ (exp (/ (- EDonor (- (- Ec Vef) mu)) KbT)) 1.0))
(/ NaChar (+ (/ Ev KbT) 2.0)))
(+
(/ NaChar (+ (exp (/ (- (+ Vef Ev) mu) KbT)) 1.0))
(/ NdChar (+ (/ Vef KbT) 2.0)))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NdChar <= -6.5e-55) || !(NdChar <= 1.6e+89)) {
tmp = (NdChar / (exp(((EDonor - ((Ec - Vef) - mu)) / KbT)) + 1.0)) + (NaChar / ((Ev / KbT) + 2.0));
} else {
tmp = (NaChar / (exp((((Vef + Ev) - mu) / KbT)) + 1.0)) + (NdChar / ((Vef / KbT) + 2.0));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if ((ndchar <= (-6.5d-55)) .or. (.not. (ndchar <= 1.6d+89))) then
tmp = (ndchar / (exp(((edonor - ((ec - vef) - mu)) / kbt)) + 1.0d0)) + (nachar / ((ev / kbt) + 2.0d0))
else
tmp = (nachar / (exp((((vef + ev) - mu) / kbt)) + 1.0d0)) + (ndchar / ((vef / kbt) + 2.0d0))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NdChar <= -6.5e-55) || !(NdChar <= 1.6e+89)) {
tmp = (NdChar / (Math.exp(((EDonor - ((Ec - Vef) - mu)) / KbT)) + 1.0)) + (NaChar / ((Ev / KbT) + 2.0));
} else {
tmp = (NaChar / (Math.exp((((Vef + Ev) - mu) / KbT)) + 1.0)) + (NdChar / ((Vef / KbT) + 2.0));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if (NdChar <= -6.5e-55) or not (NdChar <= 1.6e+89): tmp = (NdChar / (math.exp(((EDonor - ((Ec - Vef) - mu)) / KbT)) + 1.0)) + (NaChar / ((Ev / KbT) + 2.0)) else: tmp = (NaChar / (math.exp((((Vef + Ev) - mu) / KbT)) + 1.0)) + (NdChar / ((Vef / KbT) + 2.0)) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if ((NdChar <= -6.5e-55) || !(NdChar <= 1.6e+89)) tmp = Float64(Float64(NdChar / Float64(exp(Float64(Float64(EDonor - Float64(Float64(Ec - Vef) - mu)) / KbT)) + 1.0)) + Float64(NaChar / Float64(Float64(Ev / KbT) + 2.0))); else tmp = Float64(Float64(NaChar / Float64(exp(Float64(Float64(Float64(Vef + Ev) - mu) / KbT)) + 1.0)) + Float64(NdChar / Float64(Float64(Vef / KbT) + 2.0))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if ((NdChar <= -6.5e-55) || ~((NdChar <= 1.6e+89))) tmp = (NdChar / (exp(((EDonor - ((Ec - Vef) - mu)) / KbT)) + 1.0)) + (NaChar / ((Ev / KbT) + 2.0)); else tmp = (NaChar / (exp((((Vef + Ev) - mu) / KbT)) + 1.0)) + (NdChar / ((Vef / KbT) + 2.0)); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[Or[LessEqual[NdChar, -6.5e-55], N[Not[LessEqual[NdChar, 1.6e+89]], $MachinePrecision]], N[(N[(NdChar / N[(N[Exp[N[(N[(EDonor - N[(N[(Ec - Vef), $MachinePrecision] - mu), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(N[(Ev / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar / N[(N[Exp[N[(N[(N[(Vef + Ev), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(N[(Vef / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NdChar \leq -6.5 \cdot 10^{-55} \lor \neg \left(NdChar \leq 1.6 \cdot 10^{+89}\right):\\
\;\;\;\;\frac{NdChar}{e^{\frac{EDonor - \left(\left(Ec - Vef\right) - mu\right)}{KbT}} + 1} + \frac{NaChar}{\frac{Ev}{KbT} + 2}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{e^{\frac{\left(Vef + Ev\right) - mu}{KbT}} + 1} + \frac{NdChar}{\frac{Vef}{KbT} + 2}\\
\end{array}
\end{array}
if NdChar < -6.50000000000000006e-55 or 1.59999999999999994e89 < NdChar Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 77.6%
Taylor expanded in Ev around 0 65.5%
if -6.50000000000000006e-55 < NdChar < 1.59999999999999994e89Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 82.8%
Taylor expanded in EAccept around 0 76.0%
Taylor expanded in Vef around 0 66.1%
Final simplification65.8%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (or (<= NdChar -5.5e-73) (not (<= NdChar 3.6e+88)))
(+
(/ NdChar (+ (exp (/ (- EDonor (- (- Ec Vef) mu)) KbT)) 1.0))
(* NaChar 0.5))
(+
(/ NaChar (+ (exp (/ (- (+ Vef Ev) mu) KbT)) 1.0))
(/ NdChar (+ (/ Vef KbT) 2.0)))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NdChar <= -5.5e-73) || !(NdChar <= 3.6e+88)) {
tmp = (NdChar / (exp(((EDonor - ((Ec - Vef) - mu)) / KbT)) + 1.0)) + (NaChar * 0.5);
} else {
tmp = (NaChar / (exp((((Vef + Ev) - mu) / KbT)) + 1.0)) + (NdChar / ((Vef / KbT) + 2.0));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if ((ndchar <= (-5.5d-73)) .or. (.not. (ndchar <= 3.6d+88))) then
tmp = (ndchar / (exp(((edonor - ((ec - vef) - mu)) / kbt)) + 1.0d0)) + (nachar * 0.5d0)
else
tmp = (nachar / (exp((((vef + ev) - mu) / kbt)) + 1.0d0)) + (ndchar / ((vef / kbt) + 2.0d0))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NdChar <= -5.5e-73) || !(NdChar <= 3.6e+88)) {
tmp = (NdChar / (Math.exp(((EDonor - ((Ec - Vef) - mu)) / KbT)) + 1.0)) + (NaChar * 0.5);
} else {
tmp = (NaChar / (Math.exp((((Vef + Ev) - mu) / KbT)) + 1.0)) + (NdChar / ((Vef / KbT) + 2.0));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if (NdChar <= -5.5e-73) or not (NdChar <= 3.6e+88): tmp = (NdChar / (math.exp(((EDonor - ((Ec - Vef) - mu)) / KbT)) + 1.0)) + (NaChar * 0.5) else: tmp = (NaChar / (math.exp((((Vef + Ev) - mu) / KbT)) + 1.0)) + (NdChar / ((Vef / KbT) + 2.0)) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if ((NdChar <= -5.5e-73) || !(NdChar <= 3.6e+88)) tmp = Float64(Float64(NdChar / Float64(exp(Float64(Float64(EDonor - Float64(Float64(Ec - Vef) - mu)) / KbT)) + 1.0)) + Float64(NaChar * 0.5)); else tmp = Float64(Float64(NaChar / Float64(exp(Float64(Float64(Float64(Vef + Ev) - mu) / KbT)) + 1.0)) + Float64(NdChar / Float64(Float64(Vef / KbT) + 2.0))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if ((NdChar <= -5.5e-73) || ~((NdChar <= 3.6e+88))) tmp = (NdChar / (exp(((EDonor - ((Ec - Vef) - mu)) / KbT)) + 1.0)) + (NaChar * 0.5); else tmp = (NaChar / (exp((((Vef + Ev) - mu) / KbT)) + 1.0)) + (NdChar / ((Vef / KbT) + 2.0)); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[Or[LessEqual[NdChar, -5.5e-73], N[Not[LessEqual[NdChar, 3.6e+88]], $MachinePrecision]], N[(N[(NdChar / N[(N[Exp[N[(N[(EDonor - N[(N[(Ec - Vef), $MachinePrecision] - mu), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NaChar * 0.5), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar / N[(N[Exp[N[(N[(N[(Vef + Ev), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(N[(Vef / KbT), $MachinePrecision] + 2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NdChar \leq -5.5 \cdot 10^{-73} \lor \neg \left(NdChar \leq 3.6 \cdot 10^{+88}\right):\\
\;\;\;\;\frac{NdChar}{e^{\frac{EDonor - \left(\left(Ec - Vef\right) - mu\right)}{KbT}} + 1} + NaChar \cdot 0.5\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{e^{\frac{\left(Vef + Ev\right) - mu}{KbT}} + 1} + \frac{NdChar}{\frac{Vef}{KbT} + 2}\\
\end{array}
\end{array}
if NdChar < -5.50000000000000006e-73 or 3.6000000000000002e88 < NdChar Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 77.9%
Taylor expanded in Ev around 0 58.5%
if -5.50000000000000006e-73 < NdChar < 3.6000000000000002e88Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 82.5%
Taylor expanded in EAccept around 0 75.7%
Taylor expanded in Vef around 0 66.2%
Final simplification62.7%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NdChar (+ (exp (/ mu KbT)) 1.0))))
(if (<= KbT -4.8e+211)
(+ (/ NdChar 2.0) (/ NaChar (+ 2.0 (- (/ Ev KbT) (/ (- mu Vef) KbT)))))
(if (<= KbT 1e+65)
t_0
(if (<= KbT 3.6e+164)
(+ (/ NdChar 2.0) (/ NaChar (+ (/ EAccept KbT) 1.0)))
(if (<= KbT 4.7e+173) t_0 (+ (* NaChar 0.5) (/ NdChar 2.0))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (exp((mu / KbT)) + 1.0);
double tmp;
if (KbT <= -4.8e+211) {
tmp = (NdChar / 2.0) + (NaChar / (2.0 + ((Ev / KbT) - ((mu - Vef) / KbT))));
} else if (KbT <= 1e+65) {
tmp = t_0;
} else if (KbT <= 3.6e+164) {
tmp = (NdChar / 2.0) + (NaChar / ((EAccept / KbT) + 1.0));
} else if (KbT <= 4.7e+173) {
tmp = t_0;
} else {
tmp = (NaChar * 0.5) + (NdChar / 2.0);
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: tmp
t_0 = ndchar / (exp((mu / kbt)) + 1.0d0)
if (kbt <= (-4.8d+211)) then
tmp = (ndchar / 2.0d0) + (nachar / (2.0d0 + ((ev / kbt) - ((mu - vef) / kbt))))
else if (kbt <= 1d+65) then
tmp = t_0
else if (kbt <= 3.6d+164) then
tmp = (ndchar / 2.0d0) + (nachar / ((eaccept / kbt) + 1.0d0))
else if (kbt <= 4.7d+173) then
tmp = t_0
else
tmp = (nachar * 0.5d0) + (ndchar / 2.0d0)
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (Math.exp((mu / KbT)) + 1.0);
double tmp;
if (KbT <= -4.8e+211) {
tmp = (NdChar / 2.0) + (NaChar / (2.0 + ((Ev / KbT) - ((mu - Vef) / KbT))));
} else if (KbT <= 1e+65) {
tmp = t_0;
} else if (KbT <= 3.6e+164) {
tmp = (NdChar / 2.0) + (NaChar / ((EAccept / KbT) + 1.0));
} else if (KbT <= 4.7e+173) {
tmp = t_0;
} else {
tmp = (NaChar * 0.5) + (NdChar / 2.0);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NdChar / (math.exp((mu / KbT)) + 1.0) tmp = 0 if KbT <= -4.8e+211: tmp = (NdChar / 2.0) + (NaChar / (2.0 + ((Ev / KbT) - ((mu - Vef) / KbT)))) elif KbT <= 1e+65: tmp = t_0 elif KbT <= 3.6e+164: tmp = (NdChar / 2.0) + (NaChar / ((EAccept / KbT) + 1.0)) elif KbT <= 4.7e+173: tmp = t_0 else: tmp = (NaChar * 0.5) + (NdChar / 2.0) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NdChar / Float64(exp(Float64(mu / KbT)) + 1.0)) tmp = 0.0 if (KbT <= -4.8e+211) tmp = Float64(Float64(NdChar / 2.0) + Float64(NaChar / Float64(2.0 + Float64(Float64(Ev / KbT) - Float64(Float64(mu - Vef) / KbT))))); elseif (KbT <= 1e+65) tmp = t_0; elseif (KbT <= 3.6e+164) tmp = Float64(Float64(NdChar / 2.0) + Float64(NaChar / Float64(Float64(EAccept / KbT) + 1.0))); elseif (KbT <= 4.7e+173) tmp = t_0; else tmp = Float64(Float64(NaChar * 0.5) + Float64(NdChar / 2.0)); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NdChar / (exp((mu / KbT)) + 1.0); tmp = 0.0; if (KbT <= -4.8e+211) tmp = (NdChar / 2.0) + (NaChar / (2.0 + ((Ev / KbT) - ((mu - Vef) / KbT)))); elseif (KbT <= 1e+65) tmp = t_0; elseif (KbT <= 3.6e+164) tmp = (NdChar / 2.0) + (NaChar / ((EAccept / KbT) + 1.0)); elseif (KbT <= 4.7e+173) tmp = t_0; else tmp = (NaChar * 0.5) + (NdChar / 2.0); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NdChar / N[(N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[KbT, -4.8e+211], N[(N[(NdChar / 2.0), $MachinePrecision] + N[(NaChar / N[(2.0 + N[(N[(Ev / KbT), $MachinePrecision] - N[(N[(mu - Vef), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[KbT, 1e+65], t$95$0, If[LessEqual[KbT, 3.6e+164], N[(N[(NdChar / 2.0), $MachinePrecision] + N[(NaChar / N[(N[(EAccept / KbT), $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[KbT, 4.7e+173], t$95$0, N[(N[(NaChar * 0.5), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{e^{\frac{mu}{KbT}} + 1}\\
\mathbf{if}\;KbT \leq -4.8 \cdot 10^{+211}:\\
\;\;\;\;\frac{NdChar}{2} + \frac{NaChar}{2 + \left(\frac{Ev}{KbT} - \frac{mu - Vef}{KbT}\right)}\\
\mathbf{elif}\;KbT \leq 10^{+65}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;KbT \leq 3.6 \cdot 10^{+164}:\\
\;\;\;\;\frac{NdChar}{2} + \frac{NaChar}{\frac{EAccept}{KbT} + 1}\\
\mathbf{elif}\;KbT \leq 4.7 \cdot 10^{+173}:\\
\;\;\;\;t\_0\\
\mathbf{else}:\\
\;\;\;\;NaChar \cdot 0.5 + \frac{NdChar}{2}\\
\end{array}
\end{array}
if KbT < -4.80000000000000035e211Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 97.8%
Taylor expanded in KbT around inf 93.1%
div-inv93.1%
Applied egg-rr93.1%
Taylor expanded in EAccept around 0 93.9%
associate--l+93.9%
associate--l+93.9%
div-sub93.9%
Simplified93.9%
if -4.80000000000000035e211 < KbT < 9.9999999999999999e64 or 3.5999999999999999e164 < KbT < 4.70000000000000015e173Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 73.5%
Taylor expanded in KbT around inf 34.4%
Taylor expanded in Vef around inf 18.4%
Taylor expanded in NdChar around inf 43.1%
if 9.9999999999999999e64 < KbT < 3.5999999999999999e164Initial program 99.9%
Simplified99.9%
Taylor expanded in KbT around inf 69.3%
Taylor expanded in KbT around inf 29.2%
Taylor expanded in EAccept around inf 41.3%
if 4.70000000000000015e173 < KbT Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 73.6%
Taylor expanded in KbT around inf 61.4%
Taylor expanded in KbT around inf 62.5%
*-commutative62.5%
Simplified62.5%
Final simplification49.8%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (or (<= NdChar -8.2e-74) (not (<= NdChar 3.3e+36)))
(+
(/ NdChar (+ (exp (/ (- EDonor (- (- Ec Vef) mu)) KbT)) 1.0))
(* NaChar 0.5))
(-
(/ NdChar 2.0)
(/ NaChar (- -1.0 (exp (/ (- Vef (- (- mu EAccept) Ev)) KbT)))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NdChar <= -8.2e-74) || !(NdChar <= 3.3e+36)) {
tmp = (NdChar / (exp(((EDonor - ((Ec - Vef) - mu)) / KbT)) + 1.0)) + (NaChar * 0.5);
} else {
tmp = (NdChar / 2.0) - (NaChar / (-1.0 - exp(((Vef - ((mu - EAccept) - 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 ((ndchar <= (-8.2d-74)) .or. (.not. (ndchar <= 3.3d+36))) then
tmp = (ndchar / (exp(((edonor - ((ec - vef) - mu)) / kbt)) + 1.0d0)) + (nachar * 0.5d0)
else
tmp = (ndchar / 2.0d0) - (nachar / ((-1.0d0) - exp(((vef - ((mu - eaccept) - 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 ((NdChar <= -8.2e-74) || !(NdChar <= 3.3e+36)) {
tmp = (NdChar / (Math.exp(((EDonor - ((Ec - Vef) - mu)) / KbT)) + 1.0)) + (NaChar * 0.5);
} else {
tmp = (NdChar / 2.0) - (NaChar / (-1.0 - Math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if (NdChar <= -8.2e-74) or not (NdChar <= 3.3e+36): tmp = (NdChar / (math.exp(((EDonor - ((Ec - Vef) - mu)) / KbT)) + 1.0)) + (NaChar * 0.5) else: tmp = (NdChar / 2.0) - (NaChar / (-1.0 - math.exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if ((NdChar <= -8.2e-74) || !(NdChar <= 3.3e+36)) tmp = Float64(Float64(NdChar / Float64(exp(Float64(Float64(EDonor - Float64(Float64(Ec - Vef) - mu)) / KbT)) + 1.0)) + Float64(NaChar * 0.5)); else tmp = Float64(Float64(NdChar / 2.0) - Float64(NaChar / Float64(-1.0 - exp(Float64(Float64(Vef - Float64(Float64(mu - EAccept) - Ev)) / KbT))))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if ((NdChar <= -8.2e-74) || ~((NdChar <= 3.3e+36))) tmp = (NdChar / (exp(((EDonor - ((Ec - Vef) - mu)) / KbT)) + 1.0)) + (NaChar * 0.5); else tmp = (NdChar / 2.0) - (NaChar / (-1.0 - exp(((Vef - ((mu - EAccept) - Ev)) / KbT)))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[Or[LessEqual[NdChar, -8.2e-74], N[Not[LessEqual[NdChar, 3.3e+36]], $MachinePrecision]], N[(N[(NdChar / N[(N[Exp[N[(N[(EDonor - N[(N[(Ec - Vef), $MachinePrecision] - mu), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NaChar * 0.5), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar / 2.0), $MachinePrecision] - N[(NaChar / N[(-1.0 - N[Exp[N[(N[(Vef - N[(N[(mu - EAccept), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NdChar \leq -8.2 \cdot 10^{-74} \lor \neg \left(NdChar \leq 3.3 \cdot 10^{+36}\right):\\
\;\;\;\;\frac{NdChar}{e^{\frac{EDonor - \left(\left(Ec - Vef\right) - mu\right)}{KbT}} + 1} + NaChar \cdot 0.5\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{2} - \frac{NaChar}{-1 - e^{\frac{Vef - \left(\left(mu - EAccept\right) - Ev\right)}{KbT}}}\\
\end{array}
\end{array}
if NdChar < -8.20000000000000063e-74 or 3.2999999999999999e36 < NdChar Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 77.4%
Taylor expanded in Ev around 0 56.9%
if -8.20000000000000063e-74 < NdChar < 3.2999999999999999e36Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 65.8%
Final simplification61.2%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (if (or (<= KbT -6.5e+105) (not (<= KbT 6.6e+41))) (+ (/ NaChar (+ (exp (/ Ev KbT)) 1.0)) (/ NdChar 2.0)) (/ NdChar (+ (exp (/ mu KbT)) 1.0))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((KbT <= -6.5e+105) || !(KbT <= 6.6e+41)) {
tmp = (NaChar / (exp((Ev / KbT)) + 1.0)) + (NdChar / 2.0);
} else {
tmp = NdChar / (exp((mu / KbT)) + 1.0);
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if ((kbt <= (-6.5d+105)) .or. (.not. (kbt <= 6.6d+41))) then
tmp = (nachar / (exp((ev / kbt)) + 1.0d0)) + (ndchar / 2.0d0)
else
tmp = ndchar / (exp((mu / kbt)) + 1.0d0)
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((KbT <= -6.5e+105) || !(KbT <= 6.6e+41)) {
tmp = (NaChar / (Math.exp((Ev / KbT)) + 1.0)) + (NdChar / 2.0);
} else {
tmp = NdChar / (Math.exp((mu / KbT)) + 1.0);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if (KbT <= -6.5e+105) or not (KbT <= 6.6e+41): tmp = (NaChar / (math.exp((Ev / KbT)) + 1.0)) + (NdChar / 2.0) else: tmp = NdChar / (math.exp((mu / KbT)) + 1.0) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if ((KbT <= -6.5e+105) || !(KbT <= 6.6e+41)) tmp = Float64(Float64(NaChar / Float64(exp(Float64(Ev / KbT)) + 1.0)) + Float64(NdChar / 2.0)); else tmp = Float64(NdChar / Float64(exp(Float64(mu / KbT)) + 1.0)); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if ((KbT <= -6.5e+105) || ~((KbT <= 6.6e+41))) tmp = (NaChar / (exp((Ev / KbT)) + 1.0)) + (NdChar / 2.0); else tmp = NdChar / (exp((mu / KbT)) + 1.0); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[Or[LessEqual[KbT, -6.5e+105], N[Not[LessEqual[KbT, 6.6e+41]], $MachinePrecision]], N[(N[(NaChar / N[(N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision], N[(NdChar / N[(N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;KbT \leq -6.5 \cdot 10^{+105} \lor \neg \left(KbT \leq 6.6 \cdot 10^{+41}\right):\\
\;\;\;\;\frac{NaChar}{e^{\frac{Ev}{KbT}} + 1} + \frac{NdChar}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{mu}{KbT}} + 1}\\
\end{array}
\end{array}
if KbT < -6.50000000000000049e105 or 6.6000000000000001e41 < KbT Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 76.0%
Taylor expanded in Ev around inf 64.1%
if -6.50000000000000049e105 < KbT < 6.6000000000000001e41Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 71.4%
Taylor expanded in KbT around inf 34.9%
Taylor expanded in Vef around inf 20.2%
Taylor expanded in NdChar around inf 41.8%
Final simplification51.2%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (if (or (<= mu -7.5e+50) (not (<= mu 2.1e-108))) (/ NdChar (+ (exp (/ mu KbT)) 1.0)) (+ (/ NaChar (+ (exp (/ EAccept KbT)) 1.0)) (/ NdChar 2.0))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((mu <= -7.5e+50) || !(mu <= 2.1e-108)) {
tmp = NdChar / (exp((mu / KbT)) + 1.0);
} else {
tmp = (NaChar / (exp((EAccept / KbT)) + 1.0)) + (NdChar / 2.0);
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if ((mu <= (-7.5d+50)) .or. (.not. (mu <= 2.1d-108))) then
tmp = ndchar / (exp((mu / kbt)) + 1.0d0)
else
tmp = (nachar / (exp((eaccept / kbt)) + 1.0d0)) + (ndchar / 2.0d0)
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((mu <= -7.5e+50) || !(mu <= 2.1e-108)) {
tmp = NdChar / (Math.exp((mu / KbT)) + 1.0);
} else {
tmp = (NaChar / (Math.exp((EAccept / KbT)) + 1.0)) + (NdChar / 2.0);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if (mu <= -7.5e+50) or not (mu <= 2.1e-108): tmp = NdChar / (math.exp((mu / KbT)) + 1.0) else: tmp = (NaChar / (math.exp((EAccept / KbT)) + 1.0)) + (NdChar / 2.0) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if ((mu <= -7.5e+50) || !(mu <= 2.1e-108)) tmp = Float64(NdChar / Float64(exp(Float64(mu / KbT)) + 1.0)); else tmp = Float64(Float64(NaChar / Float64(exp(Float64(EAccept / KbT)) + 1.0)) + Float64(NdChar / 2.0)); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if ((mu <= -7.5e+50) || ~((mu <= 2.1e-108))) tmp = NdChar / (exp((mu / KbT)) + 1.0); else tmp = (NaChar / (exp((EAccept / KbT)) + 1.0)) + (NdChar / 2.0); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[Or[LessEqual[mu, -7.5e+50], N[Not[LessEqual[mu, 2.1e-108]], $MachinePrecision]], N[(NdChar / N[(N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar / N[(N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;mu \leq -7.5 \cdot 10^{+50} \lor \neg \left(mu \leq 2.1 \cdot 10^{-108}\right):\\
\;\;\;\;\frac{NdChar}{e^{\frac{mu}{KbT}} + 1}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{e^{\frac{EAccept}{KbT}} + 1} + \frac{NdChar}{2}\\
\end{array}
\end{array}
if mu < -7.4999999999999999e50 or 2.0999999999999999e-108 < mu Initial program 100.0%
Simplified100.0%
Taylor expanded in mu around inf 82.2%
Taylor expanded in KbT around inf 47.0%
Taylor expanded in Vef around inf 19.1%
Taylor expanded in NdChar around inf 49.9%
if -7.4999999999999999e50 < mu < 2.0999999999999999e-108Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 63.8%
Taylor expanded in EAccept around inf 49.0%
Final simplification49.6%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (<= KbT -2.4e+208)
(+ (/ NdChar 2.0) (/ NaChar (+ 2.0 (- (/ Ev KbT) (/ (- mu Vef) KbT)))))
(if (<= KbT 9e-191)
(+ (/ NdChar 2.0) (/ NaChar (+ (/ Ev KbT) 1.0)))
(if (<= KbT 2.6e+138)
(+ (/ NdChar 2.0) (/ NaChar (+ (/ EAccept KbT) 1.0)))
(+ (* NaChar 0.5) (/ NdChar 2.0))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (KbT <= -2.4e+208) {
tmp = (NdChar / 2.0) + (NaChar / (2.0 + ((Ev / KbT) - ((mu - Vef) / KbT))));
} else if (KbT <= 9e-191) {
tmp = (NdChar / 2.0) + (NaChar / ((Ev / KbT) + 1.0));
} else if (KbT <= 2.6e+138) {
tmp = (NdChar / 2.0) + (NaChar / ((EAccept / KbT) + 1.0));
} else {
tmp = (NaChar * 0.5) + (NdChar / 2.0);
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if (kbt <= (-2.4d+208)) then
tmp = (ndchar / 2.0d0) + (nachar / (2.0d0 + ((ev / kbt) - ((mu - vef) / kbt))))
else if (kbt <= 9d-191) then
tmp = (ndchar / 2.0d0) + (nachar / ((ev / kbt) + 1.0d0))
else if (kbt <= 2.6d+138) then
tmp = (ndchar / 2.0d0) + (nachar / ((eaccept / kbt) + 1.0d0))
else
tmp = (nachar * 0.5d0) + (ndchar / 2.0d0)
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (KbT <= -2.4e+208) {
tmp = (NdChar / 2.0) + (NaChar / (2.0 + ((Ev / KbT) - ((mu - Vef) / KbT))));
} else if (KbT <= 9e-191) {
tmp = (NdChar / 2.0) + (NaChar / ((Ev / KbT) + 1.0));
} else if (KbT <= 2.6e+138) {
tmp = (NdChar / 2.0) + (NaChar / ((EAccept / KbT) + 1.0));
} else {
tmp = (NaChar * 0.5) + (NdChar / 2.0);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if KbT <= -2.4e+208: tmp = (NdChar / 2.0) + (NaChar / (2.0 + ((Ev / KbT) - ((mu - Vef) / KbT)))) elif KbT <= 9e-191: tmp = (NdChar / 2.0) + (NaChar / ((Ev / KbT) + 1.0)) elif KbT <= 2.6e+138: tmp = (NdChar / 2.0) + (NaChar / ((EAccept / KbT) + 1.0)) else: tmp = (NaChar * 0.5) + (NdChar / 2.0) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (KbT <= -2.4e+208) tmp = Float64(Float64(NdChar / 2.0) + Float64(NaChar / Float64(2.0 + Float64(Float64(Ev / KbT) - Float64(Float64(mu - Vef) / KbT))))); elseif (KbT <= 9e-191) tmp = Float64(Float64(NdChar / 2.0) + Float64(NaChar / Float64(Float64(Ev / KbT) + 1.0))); elseif (KbT <= 2.6e+138) tmp = Float64(Float64(NdChar / 2.0) + Float64(NaChar / Float64(Float64(EAccept / KbT) + 1.0))); else tmp = Float64(Float64(NaChar * 0.5) + Float64(NdChar / 2.0)); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (KbT <= -2.4e+208) tmp = (NdChar / 2.0) + (NaChar / (2.0 + ((Ev / KbT) - ((mu - Vef) / KbT)))); elseif (KbT <= 9e-191) tmp = (NdChar / 2.0) + (NaChar / ((Ev / KbT) + 1.0)); elseif (KbT <= 2.6e+138) tmp = (NdChar / 2.0) + (NaChar / ((EAccept / KbT) + 1.0)); else tmp = (NaChar * 0.5) + (NdChar / 2.0); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[KbT, -2.4e+208], N[(N[(NdChar / 2.0), $MachinePrecision] + N[(NaChar / N[(2.0 + N[(N[(Ev / KbT), $MachinePrecision] - N[(N[(mu - Vef), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[KbT, 9e-191], N[(N[(NdChar / 2.0), $MachinePrecision] + N[(NaChar / N[(N[(Ev / KbT), $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[KbT, 2.6e+138], N[(N[(NdChar / 2.0), $MachinePrecision] + N[(NaChar / N[(N[(EAccept / KbT), $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar * 0.5), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision]]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;KbT \leq -2.4 \cdot 10^{+208}:\\
\;\;\;\;\frac{NdChar}{2} + \frac{NaChar}{2 + \left(\frac{Ev}{KbT} - \frac{mu - Vef}{KbT}\right)}\\
\mathbf{elif}\;KbT \leq 9 \cdot 10^{-191}:\\
\;\;\;\;\frac{NdChar}{2} + \frac{NaChar}{\frac{Ev}{KbT} + 1}\\
\mathbf{elif}\;KbT \leq 2.6 \cdot 10^{+138}:\\
\;\;\;\;\frac{NdChar}{2} + \frac{NaChar}{\frac{EAccept}{KbT} + 1}\\
\mathbf{else}:\\
\;\;\;\;NaChar \cdot 0.5 + \frac{NdChar}{2}\\
\end{array}
\end{array}
if KbT < -2.39999999999999987e208Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 94.2%
Taylor expanded in KbT around inf 89.0%
div-inv89.0%
Applied egg-rr89.0%
Taylor expanded in EAccept around 0 89.7%
associate--l+89.7%
associate--l+89.7%
div-sub89.7%
Simplified89.7%
if -2.39999999999999987e208 < KbT < 9.00000000000000017e-191Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 38.5%
Taylor expanded in KbT around inf 15.3%
Taylor expanded in Ev around inf 19.9%
if 9.00000000000000017e-191 < KbT < 2.6000000000000001e138Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 45.6%
Taylor expanded in KbT around inf 15.6%
Taylor expanded in EAccept around inf 31.3%
if 2.6000000000000001e138 < KbT Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 73.2%
Taylor expanded in KbT around inf 57.0%
Taylor expanded in KbT around inf 58.5%
*-commutative58.5%
Simplified58.5%
Final simplification35.2%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (+ (* NaChar 0.5) (/ NdChar 2.0))))
(if (<= KbT -3.8e+205)
t_0
(if (<= KbT 9e-191)
(+ (/ NdChar 2.0) (/ NaChar (+ (/ Ev KbT) 1.0)))
(if (<= KbT 1.65e+138)
(+ (/ NdChar 2.0) (/ NaChar (+ (/ EAccept KbT) 1.0)))
t_0)))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar * 0.5) + (NdChar / 2.0);
double tmp;
if (KbT <= -3.8e+205) {
tmp = t_0;
} else if (KbT <= 9e-191) {
tmp = (NdChar / 2.0) + (NaChar / ((Ev / KbT) + 1.0));
} else if (KbT <= 1.65e+138) {
tmp = (NdChar / 2.0) + (NaChar / ((EAccept / KbT) + 1.0));
} else {
tmp = t_0;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: tmp
t_0 = (nachar * 0.5d0) + (ndchar / 2.0d0)
if (kbt <= (-3.8d+205)) then
tmp = t_0
else if (kbt <= 9d-191) then
tmp = (ndchar / 2.0d0) + (nachar / ((ev / kbt) + 1.0d0))
else if (kbt <= 1.65d+138) then
tmp = (ndchar / 2.0d0) + (nachar / ((eaccept / kbt) + 1.0d0))
else
tmp = t_0
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar * 0.5) + (NdChar / 2.0);
double tmp;
if (KbT <= -3.8e+205) {
tmp = t_0;
} else if (KbT <= 9e-191) {
tmp = (NdChar / 2.0) + (NaChar / ((Ev / KbT) + 1.0));
} else if (KbT <= 1.65e+138) {
tmp = (NdChar / 2.0) + (NaChar / ((EAccept / KbT) + 1.0));
} else {
tmp = t_0;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = (NaChar * 0.5) + (NdChar / 2.0) tmp = 0 if KbT <= -3.8e+205: tmp = t_0 elif KbT <= 9e-191: tmp = (NdChar / 2.0) + (NaChar / ((Ev / KbT) + 1.0)) elif KbT <= 1.65e+138: tmp = (NdChar / 2.0) + (NaChar / ((EAccept / KbT) + 1.0)) else: tmp = t_0 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(NaChar * 0.5) + Float64(NdChar / 2.0)) tmp = 0.0 if (KbT <= -3.8e+205) tmp = t_0; elseif (KbT <= 9e-191) tmp = Float64(Float64(NdChar / 2.0) + Float64(NaChar / Float64(Float64(Ev / KbT) + 1.0))); elseif (KbT <= 1.65e+138) tmp = Float64(Float64(NdChar / 2.0) + Float64(NaChar / Float64(Float64(EAccept / KbT) + 1.0))); else tmp = t_0; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = (NaChar * 0.5) + (NdChar / 2.0); tmp = 0.0; if (KbT <= -3.8e+205) tmp = t_0; elseif (KbT <= 9e-191) tmp = (NdChar / 2.0) + (NaChar / ((Ev / KbT) + 1.0)); elseif (KbT <= 1.65e+138) tmp = (NdChar / 2.0) + (NaChar / ((EAccept / KbT) + 1.0)); else tmp = t_0; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(NaChar * 0.5), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[KbT, -3.8e+205], t$95$0, If[LessEqual[KbT, 9e-191], N[(N[(NdChar / 2.0), $MachinePrecision] + N[(NaChar / N[(N[(Ev / KbT), $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[KbT, 1.65e+138], N[(N[(NdChar / 2.0), $MachinePrecision] + N[(NaChar / N[(N[(EAccept / KbT), $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$0]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := NaChar \cdot 0.5 + \frac{NdChar}{2}\\
\mathbf{if}\;KbT \leq -3.8 \cdot 10^{+205}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;KbT \leq 9 \cdot 10^{-191}:\\
\;\;\;\;\frac{NdChar}{2} + \frac{NaChar}{\frac{Ev}{KbT} + 1}\\
\mathbf{elif}\;KbT \leq 1.65 \cdot 10^{+138}:\\
\;\;\;\;\frac{NdChar}{2} + \frac{NaChar}{\frac{EAccept}{KbT} + 1}\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if KbT < -3.8e205 or 1.64999999999999989e138 < KbT Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 80.1%
Taylor expanded in KbT around inf 67.5%
Taylor expanded in KbT around inf 68.7%
*-commutative68.7%
Simplified68.7%
if -3.8e205 < KbT < 9.00000000000000017e-191Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 38.5%
Taylor expanded in KbT around inf 15.3%
Taylor expanded in Ev around inf 19.9%
if 9.00000000000000017e-191 < KbT < 1.64999999999999989e138Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 45.6%
Taylor expanded in KbT around inf 15.6%
Taylor expanded in EAccept around inf 31.3%
Final simplification35.2%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (if (<= EDonor -1.9e-139) (+ (* NaChar 0.5) (/ NdChar 2.0)) (+ (/ NdChar 2.0) (/ NaChar (+ (/ EAccept KbT) 1.0)))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (EDonor <= -1.9e-139) {
tmp = (NaChar * 0.5) + (NdChar / 2.0);
} else {
tmp = (NdChar / 2.0) + (NaChar / ((EAccept / KbT) + 1.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 (edonor <= (-1.9d-139)) then
tmp = (nachar * 0.5d0) + (ndchar / 2.0d0)
else
tmp = (ndchar / 2.0d0) + (nachar / ((eaccept / kbt) + 1.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 (EDonor <= -1.9e-139) {
tmp = (NaChar * 0.5) + (NdChar / 2.0);
} else {
tmp = (NdChar / 2.0) + (NaChar / ((EAccept / KbT) + 1.0));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if EDonor <= -1.9e-139: tmp = (NaChar * 0.5) + (NdChar / 2.0) else: tmp = (NdChar / 2.0) + (NaChar / ((EAccept / KbT) + 1.0)) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (EDonor <= -1.9e-139) tmp = Float64(Float64(NaChar * 0.5) + Float64(NdChar / 2.0)); else tmp = Float64(Float64(NdChar / 2.0) + Float64(NaChar / Float64(Float64(EAccept / KbT) + 1.0))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (EDonor <= -1.9e-139) tmp = (NaChar * 0.5) + (NdChar / 2.0); else tmp = (NdChar / 2.0) + (NaChar / ((EAccept / KbT) + 1.0)); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[EDonor, -1.9e-139], N[(N[(NaChar * 0.5), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar / 2.0), $MachinePrecision] + N[(NaChar / N[(N[(EAccept / KbT), $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;EDonor \leq -1.9 \cdot 10^{-139}:\\
\;\;\;\;NaChar \cdot 0.5 + \frac{NdChar}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{2} + \frac{NaChar}{\frac{EAccept}{KbT} + 1}\\
\end{array}
\end{array}
if EDonor < -1.90000000000000004e-139Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 49.2%
Taylor expanded in KbT around inf 30.9%
Taylor expanded in KbT around inf 33.1%
*-commutative33.1%
Simplified33.1%
if -1.90000000000000004e-139 < EDonor Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 52.0%
Taylor expanded in KbT around inf 28.0%
Taylor expanded in EAccept around inf 34.2%
Final simplification33.8%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (+ (* NaChar 0.5) (/ NdChar 2.0)))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NaChar * 0.5) + (NdChar / 2.0);
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
code = (nachar * 0.5d0) + (ndchar / 2.0d0)
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NaChar * 0.5) + (NdChar / 2.0);
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return (NaChar * 0.5) + (NdChar / 2.0)
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(Float64(NaChar * 0.5) + Float64(NdChar / 2.0)) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = (NaChar * 0.5) + (NdChar / 2.0); end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(N[(NaChar * 0.5), $MachinePrecision] + N[(NdChar / 2.0), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
NaChar \cdot 0.5 + \frac{NdChar}{2}
\end{array}
Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 51.0%
Taylor expanded in KbT around inf 29.0%
Taylor expanded in KbT around inf 31.1%
*-commutative31.1%
Simplified31.1%
Final simplification31.1%
herbie shell --seed 2024091
(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))))))