
(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 20 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 (+ (/ NaChar (+ (exp (/ (- (+ EAccept (+ Ev Vef)) mu) KbT)) 1.0)) (/ NdChar (+ (exp (/ (- mu (- (- Ec Vef) EDonor)) KbT)) 1.0))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NaChar / (exp((((EAccept + (Ev + Vef)) - mu) / KbT)) + 1.0)) + (NdChar / (exp(((mu - ((Ec - Vef) - EDonor)) / KbT)) + 1.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 / (exp((((eaccept + (ev + vef)) - mu) / kbt)) + 1.0d0)) + (ndchar / (exp(((mu - ((ec - vef) - edonor)) / kbt)) + 1.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 / (Math.exp((((EAccept + (Ev + Vef)) - mu) / KbT)) + 1.0)) + (NdChar / (Math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)) + 1.0));
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return (NaChar / (math.exp((((EAccept + (Ev + Vef)) - mu) / KbT)) + 1.0)) + (NdChar / (math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)) + 1.0))
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(Float64(NaChar / Float64(exp(Float64(Float64(Float64(EAccept + Float64(Ev + Vef)) - mu) / KbT)) + 1.0)) + Float64(NdChar / Float64(exp(Float64(Float64(mu - Float64(Float64(Ec - Vef) - EDonor)) / KbT)) + 1.0))) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = (NaChar / (exp((((EAccept + (Ev + Vef)) - mu) / KbT)) + 1.0)) + (NdChar / (exp(((mu - ((Ec - Vef) - EDonor)) / KbT)) + 1.0)); end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(N[(NaChar / N[(N[Exp[N[(N[(N[(EAccept + N[(Ev + Vef), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(N[Exp[N[(N[(mu - N[(N[(Ec - Vef), $MachinePrecision] - EDonor), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{NaChar}{e^{\frac{\left(EAccept + \left(Ev + Vef\right)\right) - mu}{KbT}} + 1} + \frac{NdChar}{e^{\frac{mu - \left(\left(Ec - Vef\right) - EDonor\right)}{KbT}} + 1}
\end{array}
Initial program 100.0%
Final simplification100.0%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NdChar (+ (exp (/ (- mu (- (- Ec Vef) EDonor)) KbT)) 1.0)))
(t_1 (/ NaChar (+ (exp (/ (- (+ EAccept (+ Ev Vef)) mu) KbT)) 1.0)))
(t_2 (+ t_1 t_0)))
(if (<= t_2 -1e+55)
(+ (/ NaChar (+ 1.0 1.0)) t_0)
(if (<= t_2 5e-64)
t_1
(if (<= t_2 2e-41)
(/ NdChar (+ (exp (/ (- (+ (+ mu Vef) EDonor) Ec) KbT)) 1.0))
(+ (* 0.5 NdChar) t_1))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (exp(((mu - ((Ec - Vef) - EDonor)) / KbT)) + 1.0);
double t_1 = NaChar / (exp((((EAccept + (Ev + Vef)) - mu) / KbT)) + 1.0);
double t_2 = t_1 + t_0;
double tmp;
if (t_2 <= -1e+55) {
tmp = (NaChar / (1.0 + 1.0)) + t_0;
} else if (t_2 <= 5e-64) {
tmp = t_1;
} else if (t_2 <= 2e-41) {
tmp = NdChar / (exp(((((mu + Vef) + EDonor) - Ec) / KbT)) + 1.0);
} else {
tmp = (0.5 * NdChar) + 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 = ndchar / (exp(((mu - ((ec - vef) - edonor)) / kbt)) + 1.0d0)
t_1 = nachar / (exp((((eaccept + (ev + vef)) - mu) / kbt)) + 1.0d0)
t_2 = t_1 + t_0
if (t_2 <= (-1d+55)) then
tmp = (nachar / (1.0d0 + 1.0d0)) + t_0
else if (t_2 <= 5d-64) then
tmp = t_1
else if (t_2 <= 2d-41) then
tmp = ndchar / (exp(((((mu + vef) + edonor) - ec) / kbt)) + 1.0d0)
else
tmp = (0.5d0 * ndchar) + t_1
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (Math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)) + 1.0);
double t_1 = NaChar / (Math.exp((((EAccept + (Ev + Vef)) - mu) / KbT)) + 1.0);
double t_2 = t_1 + t_0;
double tmp;
if (t_2 <= -1e+55) {
tmp = (NaChar / (1.0 + 1.0)) + t_0;
} else if (t_2 <= 5e-64) {
tmp = t_1;
} else if (t_2 <= 2e-41) {
tmp = NdChar / (Math.exp(((((mu + Vef) + EDonor) - Ec) / KbT)) + 1.0);
} else {
tmp = (0.5 * NdChar) + t_1;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NdChar / (math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)) + 1.0) t_1 = NaChar / (math.exp((((EAccept + (Ev + Vef)) - mu) / KbT)) + 1.0) t_2 = t_1 + t_0 tmp = 0 if t_2 <= -1e+55: tmp = (NaChar / (1.0 + 1.0)) + t_0 elif t_2 <= 5e-64: tmp = t_1 elif t_2 <= 2e-41: tmp = NdChar / (math.exp(((((mu + Vef) + EDonor) - Ec) / KbT)) + 1.0) else: tmp = (0.5 * NdChar) + t_1 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NdChar / Float64(exp(Float64(Float64(mu - Float64(Float64(Ec - Vef) - EDonor)) / KbT)) + 1.0)) t_1 = Float64(NaChar / Float64(exp(Float64(Float64(Float64(EAccept + Float64(Ev + Vef)) - mu) / KbT)) + 1.0)) t_2 = Float64(t_1 + t_0) tmp = 0.0 if (t_2 <= -1e+55) tmp = Float64(Float64(NaChar / Float64(1.0 + 1.0)) + t_0); elseif (t_2 <= 5e-64) tmp = t_1; elseif (t_2 <= 2e-41) tmp = Float64(NdChar / Float64(exp(Float64(Float64(Float64(Float64(mu + Vef) + EDonor) - Ec) / KbT)) + 1.0)); else tmp = Float64(Float64(0.5 * NdChar) + t_1); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NdChar / (exp(((mu - ((Ec - Vef) - EDonor)) / KbT)) + 1.0); t_1 = NaChar / (exp((((EAccept + (Ev + Vef)) - mu) / KbT)) + 1.0); t_2 = t_1 + t_0; tmp = 0.0; if (t_2 <= -1e+55) tmp = (NaChar / (1.0 + 1.0)) + t_0; elseif (t_2 <= 5e-64) tmp = t_1; elseif (t_2 <= 2e-41) tmp = NdChar / (exp(((((mu + Vef) + EDonor) - Ec) / KbT)) + 1.0); else tmp = (0.5 * NdChar) + t_1; 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[(N[(mu - N[(N[(Ec - Vef), $MachinePrecision] - EDonor), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(NaChar / N[(N[Exp[N[(N[(N[(EAccept + N[(Ev + Vef), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(t$95$1 + t$95$0), $MachinePrecision]}, If[LessEqual[t$95$2, -1e+55], N[(N[(NaChar / N[(1.0 + 1.0), $MachinePrecision]), $MachinePrecision] + t$95$0), $MachinePrecision], If[LessEqual[t$95$2, 5e-64], t$95$1, If[LessEqual[t$95$2, 2e-41], N[(NdChar / N[(N[Exp[N[(N[(N[(N[(mu + Vef), $MachinePrecision] + EDonor), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], N[(N[(0.5 * NdChar), $MachinePrecision] + t$95$1), $MachinePrecision]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{e^{\frac{mu - \left(\left(Ec - Vef\right) - EDonor\right)}{KbT}} + 1}\\
t_1 := \frac{NaChar}{e^{\frac{\left(EAccept + \left(Ev + Vef\right)\right) - mu}{KbT}} + 1}\\
t_2 := t\_1 + t\_0\\
\mathbf{if}\;t\_2 \leq -1 \cdot 10^{+55}:\\
\;\;\;\;\frac{NaChar}{1 + 1} + t\_0\\
\mathbf{elif}\;t\_2 \leq 5 \cdot 10^{-64}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;t\_2 \leq 2 \cdot 10^{-41}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{\left(\left(mu + Vef\right) + EDonor\right) - Ec}{KbT}} + 1}\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot NdChar + t\_1\\
\end{array}
\end{array}
if (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < -1.00000000000000001e55Initial program 100.0%
Taylor expanded in KbT around inf
Applied rewrites74.6%
if -1.00000000000000001e55 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < 5.00000000000000033e-64Initial program 100.0%
Taylor expanded in NdChar around 0
lower-/.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
lower--.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower-+.f6470.6
Applied rewrites70.6%
if 5.00000000000000033e-64 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < 2.00000000000000001e-41Initial program 100.0%
Taylor expanded in NdChar around inf
lower-/.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
lower--.f64N/A
+-commutativeN/A
lower-+.f64N/A
+-commutativeN/A
lower-+.f64100.0
Applied rewrites100.0%
if 2.00000000000000001e-41 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) Initial program 100.0%
Taylor expanded in KbT around inf
lower-*.f6472.6
Applied rewrites72.6%
Final simplification72.6%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NdChar (+ (exp (/ (- mu (- (- Ec Vef) EDonor)) KbT)) 1.0)))
(t_1 (/ NaChar (+ (exp (/ (- (+ EAccept (+ Ev Vef)) mu) KbT)) 1.0)))
(t_2 (+ t_1 t_0)))
(if (<= t_2 -1e-206)
(+ (/ NaChar (+ (exp (/ Vef KbT)) 1.0)) t_0)
(if (<= t_2 5e-158)
(/ NdChar (+ (exp (/ (- (+ (+ mu Vef) EDonor) Ec) KbT)) 1.0))
(+ (/ NdChar (+ (exp (/ EDonor KbT)) 1.0)) t_1)))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (exp(((mu - ((Ec - Vef) - EDonor)) / KbT)) + 1.0);
double t_1 = NaChar / (exp((((EAccept + (Ev + Vef)) - mu) / KbT)) + 1.0);
double t_2 = t_1 + t_0;
double tmp;
if (t_2 <= -1e-206) {
tmp = (NaChar / (exp((Vef / KbT)) + 1.0)) + t_0;
} else if (t_2 <= 5e-158) {
tmp = NdChar / (exp(((((mu + Vef) + EDonor) - Ec) / KbT)) + 1.0);
} else {
tmp = (NdChar / (exp((EDonor / KbT)) + 1.0)) + t_1;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: t_2
real(8) :: tmp
t_0 = ndchar / (exp(((mu - ((ec - vef) - edonor)) / kbt)) + 1.0d0)
t_1 = nachar / (exp((((eaccept + (ev + vef)) - mu) / kbt)) + 1.0d0)
t_2 = t_1 + t_0
if (t_2 <= (-1d-206)) then
tmp = (nachar / (exp((vef / kbt)) + 1.0d0)) + t_0
else if (t_2 <= 5d-158) then
tmp = ndchar / (exp(((((mu + vef) + edonor) - ec) / kbt)) + 1.0d0)
else
tmp = (ndchar / (exp((edonor / kbt)) + 1.0d0)) + t_1
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (Math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)) + 1.0);
double t_1 = NaChar / (Math.exp((((EAccept + (Ev + Vef)) - mu) / KbT)) + 1.0);
double t_2 = t_1 + t_0;
double tmp;
if (t_2 <= -1e-206) {
tmp = (NaChar / (Math.exp((Vef / KbT)) + 1.0)) + t_0;
} else if (t_2 <= 5e-158) {
tmp = NdChar / (Math.exp(((((mu + Vef) + EDonor) - Ec) / KbT)) + 1.0);
} else {
tmp = (NdChar / (Math.exp((EDonor / KbT)) + 1.0)) + t_1;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NdChar / (math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)) + 1.0) t_1 = NaChar / (math.exp((((EAccept + (Ev + Vef)) - mu) / KbT)) + 1.0) t_2 = t_1 + t_0 tmp = 0 if t_2 <= -1e-206: tmp = (NaChar / (math.exp((Vef / KbT)) + 1.0)) + t_0 elif t_2 <= 5e-158: tmp = NdChar / (math.exp(((((mu + Vef) + EDonor) - Ec) / KbT)) + 1.0) else: tmp = (NdChar / (math.exp((EDonor / KbT)) + 1.0)) + t_1 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NdChar / Float64(exp(Float64(Float64(mu - Float64(Float64(Ec - Vef) - EDonor)) / KbT)) + 1.0)) t_1 = Float64(NaChar / Float64(exp(Float64(Float64(Float64(EAccept + Float64(Ev + Vef)) - mu) / KbT)) + 1.0)) t_2 = Float64(t_1 + t_0) tmp = 0.0 if (t_2 <= -1e-206) tmp = Float64(Float64(NaChar / Float64(exp(Float64(Vef / KbT)) + 1.0)) + t_0); elseif (t_2 <= 5e-158) tmp = Float64(NdChar / Float64(exp(Float64(Float64(Float64(Float64(mu + Vef) + EDonor) - Ec) / KbT)) + 1.0)); else tmp = Float64(Float64(NdChar / Float64(exp(Float64(EDonor / KbT)) + 1.0)) + t_1); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NdChar / (exp(((mu - ((Ec - Vef) - EDonor)) / KbT)) + 1.0); t_1 = NaChar / (exp((((EAccept + (Ev + Vef)) - mu) / KbT)) + 1.0); t_2 = t_1 + t_0; tmp = 0.0; if (t_2 <= -1e-206) tmp = (NaChar / (exp((Vef / KbT)) + 1.0)) + t_0; elseif (t_2 <= 5e-158) tmp = NdChar / (exp(((((mu + Vef) + EDonor) - Ec) / KbT)) + 1.0); else tmp = (NdChar / (exp((EDonor / KbT)) + 1.0)) + t_1; 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[(N[(mu - N[(N[(Ec - Vef), $MachinePrecision] - EDonor), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(NaChar / N[(N[Exp[N[(N[(N[(EAccept + N[(Ev + Vef), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(t$95$1 + t$95$0), $MachinePrecision]}, If[LessEqual[t$95$2, -1e-206], N[(N[(NaChar / N[(N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + t$95$0), $MachinePrecision], If[LessEqual[t$95$2, 5e-158], N[(NdChar / N[(N[Exp[N[(N[(N[(N[(mu + Vef), $MachinePrecision] + EDonor), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar / N[(N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + t$95$1), $MachinePrecision]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{e^{\frac{mu - \left(\left(Ec - Vef\right) - EDonor\right)}{KbT}} + 1}\\
t_1 := \frac{NaChar}{e^{\frac{\left(EAccept + \left(Ev + Vef\right)\right) - mu}{KbT}} + 1}\\
t_2 := t\_1 + t\_0\\
\mathbf{if}\;t\_2 \leq -1 \cdot 10^{-206}:\\
\;\;\;\;\frac{NaChar}{e^{\frac{Vef}{KbT}} + 1} + t\_0\\
\mathbf{elif}\;t\_2 \leq 5 \cdot 10^{-158}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{\left(\left(mu + Vef\right) + EDonor\right) - Ec}{KbT}} + 1}\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{EDonor}{KbT}} + 1} + t\_1\\
\end{array}
\end{array}
if (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < -1.00000000000000003e-206Initial program 100.0%
Taylor expanded in Vef around inf
lower-/.f6477.0
Applied rewrites77.0%
if -1.00000000000000003e-206 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < 4.99999999999999972e-158Initial program 100.0%
Taylor expanded in NdChar around inf
lower-/.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
lower--.f64N/A
+-commutativeN/A
lower-+.f64N/A
+-commutativeN/A
lower-+.f6481.7
Applied rewrites81.7%
if 4.99999999999999972e-158 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) Initial program 100.0%
Taylor expanded in EDonor around inf
lower-/.f6480.8
Applied rewrites80.8%
Final simplification79.8%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NaChar (+ (exp (/ (- (+ EAccept (+ Ev Vef)) mu) KbT)) 1.0)))
(t_1 (+ (/ NdChar (+ (exp (/ EDonor KbT)) 1.0)) t_0))
(t_2
(+
t_0
(/ NdChar (+ (exp (/ (- mu (- (- Ec Vef) EDonor)) KbT)) 1.0)))))
(if (<= t_2 -5e-67)
t_1
(if (<= t_2 5e-158)
(/ NdChar (+ (exp (/ (- (+ (+ mu Vef) EDonor) Ec) KbT)) 1.0))
t_1))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NaChar / (exp((((EAccept + (Ev + Vef)) - mu) / KbT)) + 1.0);
double t_1 = (NdChar / (exp((EDonor / KbT)) + 1.0)) + t_0;
double t_2 = t_0 + (NdChar / (exp(((mu - ((Ec - Vef) - EDonor)) / KbT)) + 1.0));
double tmp;
if (t_2 <= -5e-67) {
tmp = t_1;
} else if (t_2 <= 5e-158) {
tmp = NdChar / (exp(((((mu + Vef) + EDonor) - Ec) / KbT)) + 1.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) :: t_2
real(8) :: tmp
t_0 = nachar / (exp((((eaccept + (ev + vef)) - mu) / kbt)) + 1.0d0)
t_1 = (ndchar / (exp((edonor / kbt)) + 1.0d0)) + t_0
t_2 = t_0 + (ndchar / (exp(((mu - ((ec - vef) - edonor)) / kbt)) + 1.0d0))
if (t_2 <= (-5d-67)) then
tmp = t_1
else if (t_2 <= 5d-158) then
tmp = ndchar / (exp(((((mu + vef) + edonor) - ec) / kbt)) + 1.0d0)
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((((EAccept + (Ev + Vef)) - mu) / KbT)) + 1.0);
double t_1 = (NdChar / (Math.exp((EDonor / KbT)) + 1.0)) + t_0;
double t_2 = t_0 + (NdChar / (Math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)) + 1.0));
double tmp;
if (t_2 <= -5e-67) {
tmp = t_1;
} else if (t_2 <= 5e-158) {
tmp = NdChar / (Math.exp(((((mu + Vef) + EDonor) - Ec) / KbT)) + 1.0);
} else {
tmp = t_1;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NaChar / (math.exp((((EAccept + (Ev + Vef)) - mu) / KbT)) + 1.0) t_1 = (NdChar / (math.exp((EDonor / KbT)) + 1.0)) + t_0 t_2 = t_0 + (NdChar / (math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)) + 1.0)) tmp = 0 if t_2 <= -5e-67: tmp = t_1 elif t_2 <= 5e-158: tmp = NdChar / (math.exp(((((mu + Vef) + EDonor) - Ec) / KbT)) + 1.0) else: tmp = t_1 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NaChar / Float64(exp(Float64(Float64(Float64(EAccept + Float64(Ev + Vef)) - mu) / KbT)) + 1.0)) t_1 = Float64(Float64(NdChar / Float64(exp(Float64(EDonor / KbT)) + 1.0)) + t_0) t_2 = Float64(t_0 + Float64(NdChar / Float64(exp(Float64(Float64(mu - Float64(Float64(Ec - Vef) - EDonor)) / KbT)) + 1.0))) tmp = 0.0 if (t_2 <= -5e-67) tmp = t_1; elseif (t_2 <= 5e-158) tmp = Float64(NdChar / Float64(exp(Float64(Float64(Float64(Float64(mu + Vef) + EDonor) - Ec) / KbT)) + 1.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((((EAccept + (Ev + Vef)) - mu) / KbT)) + 1.0); t_1 = (NdChar / (exp((EDonor / KbT)) + 1.0)) + t_0; t_2 = t_0 + (NdChar / (exp(((mu - ((Ec - Vef) - EDonor)) / KbT)) + 1.0)); tmp = 0.0; if (t_2 <= -5e-67) tmp = t_1; elseif (t_2 <= 5e-158) tmp = NdChar / (exp(((((mu + Vef) + EDonor) - Ec) / KbT)) + 1.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[(N[Exp[N[(N[(N[(EAccept + N[(Ev + Vef), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NdChar / N[(N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + t$95$0), $MachinePrecision]}, Block[{t$95$2 = N[(t$95$0 + N[(NdChar / N[(N[Exp[N[(N[(mu - N[(N[(Ec - Vef), $MachinePrecision] - EDonor), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$2, -5e-67], t$95$1, If[LessEqual[t$95$2, 5e-158], N[(NdChar / N[(N[Exp[N[(N[(N[(N[(mu + Vef), $MachinePrecision] + EDonor), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], t$95$1]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{e^{\frac{\left(EAccept + \left(Ev + Vef\right)\right) - mu}{KbT}} + 1}\\
t_1 := \frac{NdChar}{e^{\frac{EDonor}{KbT}} + 1} + t\_0\\
t_2 := t\_0 + \frac{NdChar}{e^{\frac{mu - \left(\left(Ec - Vef\right) - EDonor\right)}{KbT}} + 1}\\
\mathbf{if}\;t\_2 \leq -5 \cdot 10^{-67}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;t\_2 \leq 5 \cdot 10^{-158}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{\left(\left(mu + Vef\right) + EDonor\right) - Ec}{KbT}} + 1}\\
\mathbf{else}:\\
\;\;\;\;t\_1\\
\end{array}
\end{array}
if (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < -4.9999999999999999e-67 or 4.99999999999999972e-158 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) Initial program 100.0%
Taylor expanded in EDonor around inf
lower-/.f6481.0
Applied rewrites81.0%
if -4.9999999999999999e-67 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < 4.99999999999999972e-158Initial program 100.0%
Taylor expanded in NdChar around inf
lower-/.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
lower--.f64N/A
+-commutativeN/A
lower-+.f64N/A
+-commutativeN/A
lower-+.f6474.8
Applied rewrites74.8%
Final simplification78.6%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (* (+ NaChar NdChar) 0.5))
(t_1
(+
(/ NaChar (+ (exp (/ (- (+ EAccept (+ Ev Vef)) mu) KbT)) 1.0))
(/ NdChar (+ (exp (/ (- mu (- (- Ec Vef) EDonor)) KbT)) 1.0)))))
(if (<= t_1 -2e-146)
t_0
(if (<= t_1 2e-167)
(/
NdChar
(- (+ (+ (/ mu KbT) (/ Vef KbT)) (+ 2.0 (/ EDonor KbT))) (/ Ec KbT)))
t_0))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar + NdChar) * 0.5;
double t_1 = (NaChar / (exp((((EAccept + (Ev + Vef)) - mu) / KbT)) + 1.0)) + (NdChar / (exp(((mu - ((Ec - Vef) - EDonor)) / KbT)) + 1.0));
double tmp;
if (t_1 <= -2e-146) {
tmp = t_0;
} else if (t_1 <= 2e-167) {
tmp = NdChar / ((((mu / KbT) + (Vef / KbT)) + (2.0 + (EDonor / KbT))) - (Ec / KbT));
} else {
tmp = t_0;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = (nachar + ndchar) * 0.5d0
t_1 = (nachar / (exp((((eaccept + (ev + vef)) - mu) / kbt)) + 1.0d0)) + (ndchar / (exp(((mu - ((ec - vef) - edonor)) / kbt)) + 1.0d0))
if (t_1 <= (-2d-146)) then
tmp = t_0
else if (t_1 <= 2d-167) then
tmp = ndchar / ((((mu / kbt) + (vef / kbt)) + (2.0d0 + (edonor / kbt))) - (ec / kbt))
else
tmp = t_0
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar + NdChar) * 0.5;
double t_1 = (NaChar / (Math.exp((((EAccept + (Ev + Vef)) - mu) / KbT)) + 1.0)) + (NdChar / (Math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)) + 1.0));
double tmp;
if (t_1 <= -2e-146) {
tmp = t_0;
} else if (t_1 <= 2e-167) {
tmp = NdChar / ((((mu / KbT) + (Vef / KbT)) + (2.0 + (EDonor / KbT))) - (Ec / KbT));
} else {
tmp = t_0;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = (NaChar + NdChar) * 0.5 t_1 = (NaChar / (math.exp((((EAccept + (Ev + Vef)) - mu) / KbT)) + 1.0)) + (NdChar / (math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)) + 1.0)) tmp = 0 if t_1 <= -2e-146: tmp = t_0 elif t_1 <= 2e-167: tmp = NdChar / ((((mu / KbT) + (Vef / KbT)) + (2.0 + (EDonor / KbT))) - (Ec / KbT)) else: tmp = t_0 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(NaChar + NdChar) * 0.5) t_1 = Float64(Float64(NaChar / Float64(exp(Float64(Float64(Float64(EAccept + Float64(Ev + Vef)) - mu) / KbT)) + 1.0)) + Float64(NdChar / Float64(exp(Float64(Float64(mu - Float64(Float64(Ec - Vef) - EDonor)) / KbT)) + 1.0))) tmp = 0.0 if (t_1 <= -2e-146) tmp = t_0; elseif (t_1 <= 2e-167) tmp = Float64(NdChar / Float64(Float64(Float64(Float64(mu / KbT) + Float64(Vef / KbT)) + Float64(2.0 + Float64(EDonor / KbT))) - Float64(Ec / KbT))); else tmp = t_0; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = (NaChar + NdChar) * 0.5; t_1 = (NaChar / (exp((((EAccept + (Ev + Vef)) - mu) / KbT)) + 1.0)) + (NdChar / (exp(((mu - ((Ec - Vef) - EDonor)) / KbT)) + 1.0)); tmp = 0.0; if (t_1 <= -2e-146) tmp = t_0; elseif (t_1 <= 2e-167) tmp = NdChar / ((((mu / KbT) + (Vef / KbT)) + (2.0 + (EDonor / KbT))) - (Ec / KbT)); else tmp = t_0; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(NaChar + NdChar), $MachinePrecision] * 0.5), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NaChar / N[(N[Exp[N[(N[(N[(EAccept + N[(Ev + Vef), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(N[Exp[N[(N[(mu - N[(N[(Ec - Vef), $MachinePrecision] - EDonor), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$1, -2e-146], t$95$0, If[LessEqual[t$95$1, 2e-167], N[(NdChar / N[(N[(N[(N[(mu / KbT), $MachinePrecision] + N[(Vef / KbT), $MachinePrecision]), $MachinePrecision] + N[(2.0 + N[(EDonor / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(Ec / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$0]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(NaChar + NdChar\right) \cdot 0.5\\
t_1 := \frac{NaChar}{e^{\frac{\left(EAccept + \left(Ev + Vef\right)\right) - mu}{KbT}} + 1} + \frac{NdChar}{e^{\frac{mu - \left(\left(Ec - Vef\right) - EDonor\right)}{KbT}} + 1}\\
\mathbf{if}\;t\_1 \leq -2 \cdot 10^{-146}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;t\_1 \leq 2 \cdot 10^{-167}:\\
\;\;\;\;\frac{NdChar}{\left(\left(\frac{mu}{KbT} + \frac{Vef}{KbT}\right) + \left(2 + \frac{EDonor}{KbT}\right)\right) - \frac{Ec}{KbT}}\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < -2.00000000000000005e-146 or 2e-167 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) Initial program 100.0%
Taylor expanded in KbT around inf
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6434.1
Applied rewrites34.1%
if -2.00000000000000005e-146 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < 2e-167Initial program 100.0%
Taylor expanded in NdChar around inf
lower-/.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
lower--.f64N/A
+-commutativeN/A
lower-+.f64N/A
+-commutativeN/A
lower-+.f6478.0
Applied rewrites78.0%
Taylor expanded in KbT around inf
Applied rewrites37.8%
Final simplification35.3%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (* (+ NaChar NdChar) 0.5))
(t_1
(+
(/ NaChar (+ (exp (/ (- (+ EAccept (+ Ev Vef)) mu) KbT)) 1.0))
(/ NdChar (+ (exp (/ (- mu (- (- Ec Vef) EDonor)) KbT)) 1.0)))))
(if (<= t_1 -5e-160)
t_0
(if (<= t_1 0.0)
(/
NaChar
(- (+ (+ (/ Ev KbT) (/ Vef KbT)) (+ 2.0 (/ EAccept KbT))) (/ mu KbT)))
t_0))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar + NdChar) * 0.5;
double t_1 = (NaChar / (exp((((EAccept + (Ev + Vef)) - mu) / KbT)) + 1.0)) + (NdChar / (exp(((mu - ((Ec - Vef) - EDonor)) / KbT)) + 1.0));
double tmp;
if (t_1 <= -5e-160) {
tmp = t_0;
} else if (t_1 <= 0.0) {
tmp = NaChar / ((((Ev / KbT) + (Vef / KbT)) + (2.0 + (EAccept / KbT))) - (mu / KbT));
} else {
tmp = t_0;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = (nachar + ndchar) * 0.5d0
t_1 = (nachar / (exp((((eaccept + (ev + vef)) - mu) / kbt)) + 1.0d0)) + (ndchar / (exp(((mu - ((ec - vef) - edonor)) / kbt)) + 1.0d0))
if (t_1 <= (-5d-160)) then
tmp = t_0
else if (t_1 <= 0.0d0) then
tmp = nachar / ((((ev / kbt) + (vef / kbt)) + (2.0d0 + (eaccept / kbt))) - (mu / kbt))
else
tmp = t_0
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar + NdChar) * 0.5;
double t_1 = (NaChar / (Math.exp((((EAccept + (Ev + Vef)) - mu) / KbT)) + 1.0)) + (NdChar / (Math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)) + 1.0));
double tmp;
if (t_1 <= -5e-160) {
tmp = t_0;
} else if (t_1 <= 0.0) {
tmp = NaChar / ((((Ev / KbT) + (Vef / KbT)) + (2.0 + (EAccept / KbT))) - (mu / KbT));
} else {
tmp = t_0;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = (NaChar + NdChar) * 0.5 t_1 = (NaChar / (math.exp((((EAccept + (Ev + Vef)) - mu) / KbT)) + 1.0)) + (NdChar / (math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)) + 1.0)) tmp = 0 if t_1 <= -5e-160: tmp = t_0 elif t_1 <= 0.0: tmp = NaChar / ((((Ev / KbT) + (Vef / KbT)) + (2.0 + (EAccept / KbT))) - (mu / KbT)) else: tmp = t_0 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(NaChar + NdChar) * 0.5) t_1 = Float64(Float64(NaChar / Float64(exp(Float64(Float64(Float64(EAccept + Float64(Ev + Vef)) - mu) / KbT)) + 1.0)) + Float64(NdChar / Float64(exp(Float64(Float64(mu - Float64(Float64(Ec - Vef) - EDonor)) / KbT)) + 1.0))) tmp = 0.0 if (t_1 <= -5e-160) tmp = t_0; elseif (t_1 <= 0.0) tmp = Float64(NaChar / Float64(Float64(Float64(Float64(Ev / KbT) + Float64(Vef / KbT)) + Float64(2.0 + Float64(EAccept / KbT))) - Float64(mu / KbT))); else tmp = t_0; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = (NaChar + NdChar) * 0.5; t_1 = (NaChar / (exp((((EAccept + (Ev + Vef)) - mu) / KbT)) + 1.0)) + (NdChar / (exp(((mu - ((Ec - Vef) - EDonor)) / KbT)) + 1.0)); tmp = 0.0; if (t_1 <= -5e-160) tmp = t_0; elseif (t_1 <= 0.0) tmp = NaChar / ((((Ev / KbT) + (Vef / KbT)) + (2.0 + (EAccept / KbT))) - (mu / KbT)); else tmp = t_0; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(NaChar + NdChar), $MachinePrecision] * 0.5), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NaChar / N[(N[Exp[N[(N[(N[(EAccept + N[(Ev + Vef), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(N[Exp[N[(N[(mu - N[(N[(Ec - Vef), $MachinePrecision] - EDonor), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$1, -5e-160], t$95$0, If[LessEqual[t$95$1, 0.0], N[(NaChar / N[(N[(N[(N[(Ev / KbT), $MachinePrecision] + N[(Vef / KbT), $MachinePrecision]), $MachinePrecision] + N[(2.0 + N[(EAccept / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$0]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(NaChar + NdChar\right) \cdot 0.5\\
t_1 := \frac{NaChar}{e^{\frac{\left(EAccept + \left(Ev + Vef\right)\right) - mu}{KbT}} + 1} + \frac{NdChar}{e^{\frac{mu - \left(\left(Ec - Vef\right) - EDonor\right)}{KbT}} + 1}\\
\mathbf{if}\;t\_1 \leq -5 \cdot 10^{-160}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;t\_1 \leq 0:\\
\;\;\;\;\frac{NaChar}{\left(\left(\frac{Ev}{KbT} + \frac{Vef}{KbT}\right) + \left(2 + \frac{EAccept}{KbT}\right)\right) - \frac{mu}{KbT}}\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < -4.99999999999999994e-160 or -0.0 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) Initial program 100.0%
Taylor expanded in KbT around inf
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6433.3
Applied rewrites33.3%
if -4.99999999999999994e-160 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < -0.0Initial program 100.0%
Taylor expanded in EDonor around inf
lower-/.f6435.6
Applied rewrites35.6%
Taylor expanded in NdChar around 0
lower-/.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
lower--.f64N/A
+-commutativeN/A
lower-+.f64N/A
+-commutativeN/A
lower-+.f6485.6
Applied rewrites85.6%
Taylor expanded in KbT around inf
Applied rewrites40.0%
Final simplification35.0%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (* (+ NaChar NdChar) 0.5))
(t_1
(+
(/ NaChar (+ (exp (/ (- (+ EAccept (+ Ev Vef)) mu) KbT)) 1.0))
(/ NdChar (+ (exp (/ (- mu (- (- Ec Vef) EDonor)) KbT)) 1.0)))))
(if (<= t_1 -1e-195)
t_0
(if (<= t_1 0.0)
(*
(/
1.0
(/
(fma (/ (- (/ (* NdChar NdChar) NaChar) NdChar) NaChar) -1.0 -1.0)
(- NaChar)))
0.5)
t_0))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar + NdChar) * 0.5;
double t_1 = (NaChar / (exp((((EAccept + (Ev + Vef)) - mu) / KbT)) + 1.0)) + (NdChar / (exp(((mu - ((Ec - Vef) - EDonor)) / KbT)) + 1.0));
double tmp;
if (t_1 <= -1e-195) {
tmp = t_0;
} else if (t_1 <= 0.0) {
tmp = (1.0 / (fma(((((NdChar * NdChar) / NaChar) - NdChar) / NaChar), -1.0, -1.0) / -NaChar)) * 0.5;
} else {
tmp = t_0;
}
return tmp;
}
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(NaChar + NdChar) * 0.5) t_1 = Float64(Float64(NaChar / Float64(exp(Float64(Float64(Float64(EAccept + Float64(Ev + Vef)) - mu) / KbT)) + 1.0)) + Float64(NdChar / Float64(exp(Float64(Float64(mu - Float64(Float64(Ec - Vef) - EDonor)) / KbT)) + 1.0))) tmp = 0.0 if (t_1 <= -1e-195) tmp = t_0; elseif (t_1 <= 0.0) tmp = Float64(Float64(1.0 / Float64(fma(Float64(Float64(Float64(Float64(NdChar * NdChar) / NaChar) - NdChar) / NaChar), -1.0, -1.0) / Float64(-NaChar))) * 0.5); else tmp = t_0; end return tmp end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(NaChar + NdChar), $MachinePrecision] * 0.5), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NaChar / N[(N[Exp[N[(N[(N[(EAccept + N[(Ev + Vef), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(N[Exp[N[(N[(mu - N[(N[(Ec - Vef), $MachinePrecision] - EDonor), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$1, -1e-195], t$95$0, If[LessEqual[t$95$1, 0.0], N[(N[(1.0 / N[(N[(N[(N[(N[(N[(NdChar * NdChar), $MachinePrecision] / NaChar), $MachinePrecision] - NdChar), $MachinePrecision] / NaChar), $MachinePrecision] * -1.0 + -1.0), $MachinePrecision] / (-NaChar)), $MachinePrecision]), $MachinePrecision] * 0.5), $MachinePrecision], t$95$0]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(NaChar + NdChar\right) \cdot 0.5\\
t_1 := \frac{NaChar}{e^{\frac{\left(EAccept + \left(Ev + Vef\right)\right) - mu}{KbT}} + 1} + \frac{NdChar}{e^{\frac{mu - \left(\left(Ec - Vef\right) - EDonor\right)}{KbT}} + 1}\\
\mathbf{if}\;t\_1 \leq -1 \cdot 10^{-195}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;t\_1 \leq 0:\\
\;\;\;\;\frac{1}{\frac{\mathsf{fma}\left(\frac{\frac{NdChar \cdot NdChar}{NaChar} - NdChar}{NaChar}, -1, -1\right)}{-NaChar}} \cdot 0.5\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < -1.0000000000000001e-195 or -0.0 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) Initial program 100.0%
Taylor expanded in KbT around inf
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6432.7
Applied rewrites32.7%
if -1.0000000000000001e-195 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < -0.0Initial program 100.0%
Taylor expanded in KbT around inf
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f643.2
Applied rewrites3.2%
Applied rewrites4.5%
Taylor expanded in NaChar around -inf
Applied rewrites40.0%
Final simplification34.3%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (* (+ NaChar NdChar) 0.5))
(t_1
(+
(/ NaChar (+ (exp (/ (- (+ EAccept (+ Ev Vef)) mu) KbT)) 1.0))
(/ NdChar (+ (exp (/ (- mu (- (- Ec Vef) EDonor)) KbT)) 1.0)))))
(if (<= t_1 -1e-206)
t_0
(if (<= t_1 0.0)
(* (/ 1.0 (- (/ 1.0 NaChar) (/ NdChar (* NaChar NaChar)))) 0.5)
t_0))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar + NdChar) * 0.5;
double t_1 = (NaChar / (exp((((EAccept + (Ev + Vef)) - mu) / KbT)) + 1.0)) + (NdChar / (exp(((mu - ((Ec - Vef) - EDonor)) / KbT)) + 1.0));
double tmp;
if (t_1 <= -1e-206) {
tmp = t_0;
} else if (t_1 <= 0.0) {
tmp = (1.0 / ((1.0 / NaChar) - (NdChar / (NaChar * NaChar)))) * 0.5;
} else {
tmp = t_0;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = (nachar + ndchar) * 0.5d0
t_1 = (nachar / (exp((((eaccept + (ev + vef)) - mu) / kbt)) + 1.0d0)) + (ndchar / (exp(((mu - ((ec - vef) - edonor)) / kbt)) + 1.0d0))
if (t_1 <= (-1d-206)) then
tmp = t_0
else if (t_1 <= 0.0d0) then
tmp = (1.0d0 / ((1.0d0 / nachar) - (ndchar / (nachar * nachar)))) * 0.5d0
else
tmp = t_0
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar + NdChar) * 0.5;
double t_1 = (NaChar / (Math.exp((((EAccept + (Ev + Vef)) - mu) / KbT)) + 1.0)) + (NdChar / (Math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)) + 1.0));
double tmp;
if (t_1 <= -1e-206) {
tmp = t_0;
} else if (t_1 <= 0.0) {
tmp = (1.0 / ((1.0 / NaChar) - (NdChar / (NaChar * NaChar)))) * 0.5;
} else {
tmp = t_0;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = (NaChar + NdChar) * 0.5 t_1 = (NaChar / (math.exp((((EAccept + (Ev + Vef)) - mu) / KbT)) + 1.0)) + (NdChar / (math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)) + 1.0)) tmp = 0 if t_1 <= -1e-206: tmp = t_0 elif t_1 <= 0.0: tmp = (1.0 / ((1.0 / NaChar) - (NdChar / (NaChar * NaChar)))) * 0.5 else: tmp = t_0 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(NaChar + NdChar) * 0.5) t_1 = Float64(Float64(NaChar / Float64(exp(Float64(Float64(Float64(EAccept + Float64(Ev + Vef)) - mu) / KbT)) + 1.0)) + Float64(NdChar / Float64(exp(Float64(Float64(mu - Float64(Float64(Ec - Vef) - EDonor)) / KbT)) + 1.0))) tmp = 0.0 if (t_1 <= -1e-206) tmp = t_0; elseif (t_1 <= 0.0) tmp = Float64(Float64(1.0 / Float64(Float64(1.0 / NaChar) - Float64(NdChar / Float64(NaChar * NaChar)))) * 0.5); else tmp = t_0; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = (NaChar + NdChar) * 0.5; t_1 = (NaChar / (exp((((EAccept + (Ev + Vef)) - mu) / KbT)) + 1.0)) + (NdChar / (exp(((mu - ((Ec - Vef) - EDonor)) / KbT)) + 1.0)); tmp = 0.0; if (t_1 <= -1e-206) tmp = t_0; elseif (t_1 <= 0.0) tmp = (1.0 / ((1.0 / NaChar) - (NdChar / (NaChar * NaChar)))) * 0.5; else tmp = t_0; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(NaChar + NdChar), $MachinePrecision] * 0.5), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NaChar / N[(N[Exp[N[(N[(N[(EAccept + N[(Ev + Vef), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(N[Exp[N[(N[(mu - N[(N[(Ec - Vef), $MachinePrecision] - EDonor), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$1, -1e-206], t$95$0, If[LessEqual[t$95$1, 0.0], N[(N[(1.0 / N[(N[(1.0 / NaChar), $MachinePrecision] - N[(NdChar / N[(NaChar * NaChar), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * 0.5), $MachinePrecision], t$95$0]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(NaChar + NdChar\right) \cdot 0.5\\
t_1 := \frac{NaChar}{e^{\frac{\left(EAccept + \left(Ev + Vef\right)\right) - mu}{KbT}} + 1} + \frac{NdChar}{e^{\frac{mu - \left(\left(Ec - Vef\right) - EDonor\right)}{KbT}} + 1}\\
\mathbf{if}\;t\_1 \leq -1 \cdot 10^{-206}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;t\_1 \leq 0:\\
\;\;\;\;\frac{1}{\frac{1}{NaChar} - \frac{NdChar}{NaChar \cdot NaChar}} \cdot 0.5\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < -1.00000000000000003e-206 or -0.0 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) Initial program 100.0%
Taylor expanded in KbT around inf
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6432.4
Applied rewrites32.4%
if -1.00000000000000003e-206 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < -0.0Initial program 100.0%
Taylor expanded in KbT around inf
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f642.9
Applied rewrites2.9%
Applied rewrites4.5%
Taylor expanded in NdChar around 0
Applied rewrites30.9%
Final simplification32.1%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (* (+ NaChar NdChar) 0.5))
(t_1
(+
(/ NaChar (+ (exp (/ (- (+ EAccept (+ Ev Vef)) mu) KbT)) 1.0))
(/ NdChar (+ (exp (/ (- mu (- (- Ec Vef) EDonor)) KbT)) 1.0)))))
(if (<= t_1 -1e-206)
t_0
(if (<= t_1 0.0) (* (* NaChar NaChar) (/ 0.5 (- NaChar NdChar))) 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 + NdChar) * 0.5;
double t_1 = (NaChar / (exp((((EAccept + (Ev + Vef)) - mu) / KbT)) + 1.0)) + (NdChar / (exp(((mu - ((Ec - Vef) - EDonor)) / KbT)) + 1.0));
double tmp;
if (t_1 <= -1e-206) {
tmp = t_0;
} else if (t_1 <= 0.0) {
tmp = (NaChar * NaChar) * (0.5 / (NaChar - NdChar));
} 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) :: t_1
real(8) :: tmp
t_0 = (nachar + ndchar) * 0.5d0
t_1 = (nachar / (exp((((eaccept + (ev + vef)) - mu) / kbt)) + 1.0d0)) + (ndchar / (exp(((mu - ((ec - vef) - edonor)) / kbt)) + 1.0d0))
if (t_1 <= (-1d-206)) then
tmp = t_0
else if (t_1 <= 0.0d0) then
tmp = (nachar * nachar) * (0.5d0 / (nachar - ndchar))
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 + NdChar) * 0.5;
double t_1 = (NaChar / (Math.exp((((EAccept + (Ev + Vef)) - mu) / KbT)) + 1.0)) + (NdChar / (Math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)) + 1.0));
double tmp;
if (t_1 <= -1e-206) {
tmp = t_0;
} else if (t_1 <= 0.0) {
tmp = (NaChar * NaChar) * (0.5 / (NaChar - NdChar));
} else {
tmp = t_0;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = (NaChar + NdChar) * 0.5 t_1 = (NaChar / (math.exp((((EAccept + (Ev + Vef)) - mu) / KbT)) + 1.0)) + (NdChar / (math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)) + 1.0)) tmp = 0 if t_1 <= -1e-206: tmp = t_0 elif t_1 <= 0.0: tmp = (NaChar * NaChar) * (0.5 / (NaChar - NdChar)) else: tmp = t_0 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(NaChar + NdChar) * 0.5) t_1 = Float64(Float64(NaChar / Float64(exp(Float64(Float64(Float64(EAccept + Float64(Ev + Vef)) - mu) / KbT)) + 1.0)) + Float64(NdChar / Float64(exp(Float64(Float64(mu - Float64(Float64(Ec - Vef) - EDonor)) / KbT)) + 1.0))) tmp = 0.0 if (t_1 <= -1e-206) tmp = t_0; elseif (t_1 <= 0.0) tmp = Float64(Float64(NaChar * NaChar) * Float64(0.5 / Float64(NaChar - NdChar))); else tmp = t_0; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = (NaChar + NdChar) * 0.5; t_1 = (NaChar / (exp((((EAccept + (Ev + Vef)) - mu) / KbT)) + 1.0)) + (NdChar / (exp(((mu - ((Ec - Vef) - EDonor)) / KbT)) + 1.0)); tmp = 0.0; if (t_1 <= -1e-206) tmp = t_0; elseif (t_1 <= 0.0) tmp = (NaChar * NaChar) * (0.5 / (NaChar - NdChar)); 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 + NdChar), $MachinePrecision] * 0.5), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NaChar / N[(N[Exp[N[(N[(N[(EAccept + N[(Ev + Vef), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(N[Exp[N[(N[(mu - N[(N[(Ec - Vef), $MachinePrecision] - EDonor), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$1, -1e-206], t$95$0, If[LessEqual[t$95$1, 0.0], N[(N[(NaChar * NaChar), $MachinePrecision] * N[(0.5 / N[(NaChar - NdChar), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$0]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(NaChar + NdChar\right) \cdot 0.5\\
t_1 := \frac{NaChar}{e^{\frac{\left(EAccept + \left(Ev + Vef\right)\right) - mu}{KbT}} + 1} + \frac{NdChar}{e^{\frac{mu - \left(\left(Ec - Vef\right) - EDonor\right)}{KbT}} + 1}\\
\mathbf{if}\;t\_1 \leq -1 \cdot 10^{-206}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;t\_1 \leq 0:\\
\;\;\;\;\left(NaChar \cdot NaChar\right) \cdot \frac{0.5}{NaChar - NdChar}\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < -1.00000000000000003e-206 or -0.0 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) Initial program 100.0%
Taylor expanded in KbT around inf
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6432.4
Applied rewrites32.4%
if -1.00000000000000003e-206 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < -0.0Initial program 100.0%
Taylor expanded in KbT around inf
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f642.9
Applied rewrites2.9%
Applied rewrites4.5%
Applied rewrites4.5%
Taylor expanded in NdChar around 0
Applied rewrites30.8%
Final simplification32.1%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NaChar (+ (exp (/ (- (+ EAccept (+ Ev Vef)) mu) KbT)) 1.0))))
(if (<= NdChar -5.2e+235)
t_0
(if (<= NdChar -2.6e+153)
(/ NdChar (+ (exp (/ Vef KbT)) 1.0))
(if (<= NdChar 5.8e+214)
t_0
(/ NdChar (+ (exp (/ EDonor 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 = NaChar / (exp((((EAccept + (Ev + Vef)) - mu) / KbT)) + 1.0);
double tmp;
if (NdChar <= -5.2e+235) {
tmp = t_0;
} else if (NdChar <= -2.6e+153) {
tmp = NdChar / (exp((Vef / KbT)) + 1.0);
} else if (NdChar <= 5.8e+214) {
tmp = t_0;
} else {
tmp = NdChar / (exp((EDonor / 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 = nachar / (exp((((eaccept + (ev + vef)) - mu) / kbt)) + 1.0d0)
if (ndchar <= (-5.2d+235)) then
tmp = t_0
else if (ndchar <= (-2.6d+153)) then
tmp = ndchar / (exp((vef / kbt)) + 1.0d0)
else if (ndchar <= 5.8d+214) then
tmp = t_0
else
tmp = ndchar / (exp((edonor / 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 = NaChar / (Math.exp((((EAccept + (Ev + Vef)) - mu) / KbT)) + 1.0);
double tmp;
if (NdChar <= -5.2e+235) {
tmp = t_0;
} else if (NdChar <= -2.6e+153) {
tmp = NdChar / (Math.exp((Vef / KbT)) + 1.0);
} else if (NdChar <= 5.8e+214) {
tmp = t_0;
} else {
tmp = NdChar / (Math.exp((EDonor / KbT)) + 1.0);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NaChar / (math.exp((((EAccept + (Ev + Vef)) - mu) / KbT)) + 1.0) tmp = 0 if NdChar <= -5.2e+235: tmp = t_0 elif NdChar <= -2.6e+153: tmp = NdChar / (math.exp((Vef / KbT)) + 1.0) elif NdChar <= 5.8e+214: tmp = t_0 else: tmp = NdChar / (math.exp((EDonor / KbT)) + 1.0) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NaChar / Float64(exp(Float64(Float64(Float64(EAccept + Float64(Ev + Vef)) - mu) / KbT)) + 1.0)) tmp = 0.0 if (NdChar <= -5.2e+235) tmp = t_0; elseif (NdChar <= -2.6e+153) tmp = Float64(NdChar / Float64(exp(Float64(Vef / KbT)) + 1.0)); elseif (NdChar <= 5.8e+214) tmp = t_0; else tmp = Float64(NdChar / Float64(exp(Float64(EDonor / KbT)) + 1.0)); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NaChar / (exp((((EAccept + (Ev + Vef)) - mu) / KbT)) + 1.0); tmp = 0.0; if (NdChar <= -5.2e+235) tmp = t_0; elseif (NdChar <= -2.6e+153) tmp = NdChar / (exp((Vef / KbT)) + 1.0); elseif (NdChar <= 5.8e+214) tmp = t_0; else tmp = NdChar / (exp((EDonor / KbT)) + 1.0); 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[(EAccept + N[(Ev + Vef), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NdChar, -5.2e+235], t$95$0, If[LessEqual[NdChar, -2.6e+153], N[(NdChar / N[(N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[NdChar, 5.8e+214], t$95$0, N[(NdChar / N[(N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{e^{\frac{\left(EAccept + \left(Ev + Vef\right)\right) - mu}{KbT}} + 1}\\
\mathbf{if}\;NdChar \leq -5.2 \cdot 10^{+235}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;NdChar \leq -2.6 \cdot 10^{+153}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{Vef}{KbT}} + 1}\\
\mathbf{elif}\;NdChar \leq 5.8 \cdot 10^{+214}:\\
\;\;\;\;t\_0\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{EDonor}{KbT}} + 1}\\
\end{array}
\end{array}
if NdChar < -5.1999999999999996e235 or -2.5999999999999999e153 < NdChar < 5.7999999999999999e214Initial program 100.0%
Taylor expanded in NdChar around 0
lower-/.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
lower--.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower-+.f6465.0
Applied rewrites65.0%
if -5.1999999999999996e235 < NdChar < -2.5999999999999999e153Initial program 100.0%
Taylor expanded in NdChar around inf
lower-/.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
lower--.f64N/A
+-commutativeN/A
lower-+.f64N/A
+-commutativeN/A
lower-+.f6489.0
Applied rewrites89.0%
Taylor expanded in Vef around inf
Applied rewrites75.2%
if 5.7999999999999999e214 < NdChar Initial program 100.0%
Taylor expanded in NdChar around inf
lower-/.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
lower--.f64N/A
+-commutativeN/A
lower-+.f64N/A
+-commutativeN/A
lower-+.f6484.6
Applied rewrites84.6%
Taylor expanded in EDonor around inf
Applied rewrites77.7%
Final simplification66.5%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NaChar (+ (exp (/ Ev KbT)) 1.0)))
(t_1 (+ (exp (/ Vef KbT)) 1.0)))
(if (<= Vef -4e+35)
(/ NdChar t_1)
(if (<= Vef -1.2e-34)
t_0
(if (<= Vef 2.3e-259)
(/ NdChar (+ (exp (/ mu KbT)) 1.0))
(if (<= Vef 5.2e+63) t_0 (/ NaChar 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((Ev / KbT)) + 1.0);
double t_1 = exp((Vef / KbT)) + 1.0;
double tmp;
if (Vef <= -4e+35) {
tmp = NdChar / t_1;
} else if (Vef <= -1.2e-34) {
tmp = t_0;
} else if (Vef <= 2.3e-259) {
tmp = NdChar / (exp((mu / KbT)) + 1.0);
} else if (Vef <= 5.2e+63) {
tmp = t_0;
} else {
tmp = NaChar / 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((ev / kbt)) + 1.0d0)
t_1 = exp((vef / kbt)) + 1.0d0
if (vef <= (-4d+35)) then
tmp = ndchar / t_1
else if (vef <= (-1.2d-34)) then
tmp = t_0
else if (vef <= 2.3d-259) then
tmp = ndchar / (exp((mu / kbt)) + 1.0d0)
else if (vef <= 5.2d+63) then
tmp = t_0
else
tmp = nachar / 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((Ev / KbT)) + 1.0);
double t_1 = Math.exp((Vef / KbT)) + 1.0;
double tmp;
if (Vef <= -4e+35) {
tmp = NdChar / t_1;
} else if (Vef <= -1.2e-34) {
tmp = t_0;
} else if (Vef <= 2.3e-259) {
tmp = NdChar / (Math.exp((mu / KbT)) + 1.0);
} else if (Vef <= 5.2e+63) {
tmp = t_0;
} else {
tmp = NaChar / t_1;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NaChar / (math.exp((Ev / KbT)) + 1.0) t_1 = math.exp((Vef / KbT)) + 1.0 tmp = 0 if Vef <= -4e+35: tmp = NdChar / t_1 elif Vef <= -1.2e-34: tmp = t_0 elif Vef <= 2.3e-259: tmp = NdChar / (math.exp((mu / KbT)) + 1.0) elif Vef <= 5.2e+63: tmp = t_0 else: tmp = NaChar / t_1 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NaChar / Float64(exp(Float64(Ev / KbT)) + 1.0)) t_1 = Float64(exp(Float64(Vef / KbT)) + 1.0) tmp = 0.0 if (Vef <= -4e+35) tmp = Float64(NdChar / t_1); elseif (Vef <= -1.2e-34) tmp = t_0; elseif (Vef <= 2.3e-259) tmp = Float64(NdChar / Float64(exp(Float64(mu / KbT)) + 1.0)); elseif (Vef <= 5.2e+63) tmp = t_0; else tmp = Float64(NaChar / t_1); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NaChar / (exp((Ev / KbT)) + 1.0); t_1 = exp((Vef / KbT)) + 1.0; tmp = 0.0; if (Vef <= -4e+35) tmp = NdChar / t_1; elseif (Vef <= -1.2e-34) tmp = t_0; elseif (Vef <= 2.3e-259) tmp = NdChar / (exp((mu / KbT)) + 1.0); elseif (Vef <= 5.2e+63) tmp = t_0; else tmp = NaChar / t_1; 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[(Ev / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]}, If[LessEqual[Vef, -4e+35], N[(NdChar / t$95$1), $MachinePrecision], If[LessEqual[Vef, -1.2e-34], t$95$0, If[LessEqual[Vef, 2.3e-259], N[(NdChar / N[(N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[Vef, 5.2e+63], t$95$0, N[(NaChar / t$95$1), $MachinePrecision]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{e^{\frac{Ev}{KbT}} + 1}\\
t_1 := e^{\frac{Vef}{KbT}} + 1\\
\mathbf{if}\;Vef \leq -4 \cdot 10^{+35}:\\
\;\;\;\;\frac{NdChar}{t\_1}\\
\mathbf{elif}\;Vef \leq -1.2 \cdot 10^{-34}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;Vef \leq 2.3 \cdot 10^{-259}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{mu}{KbT}} + 1}\\
\mathbf{elif}\;Vef \leq 5.2 \cdot 10^{+63}:\\
\;\;\;\;t\_0\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{t\_1}\\
\end{array}
\end{array}
if Vef < -3.9999999999999999e35Initial program 100.0%
Taylor expanded in NdChar around inf
lower-/.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
lower--.f64N/A
+-commutativeN/A
lower-+.f64N/A
+-commutativeN/A
lower-+.f6470.3
Applied rewrites70.3%
Taylor expanded in Vef around inf
Applied rewrites62.2%
if -3.9999999999999999e35 < Vef < -1.19999999999999996e-34 or 2.2999999999999999e-259 < Vef < 5.2000000000000002e63Initial program 100.0%
Taylor expanded in EDonor around inf
lower-/.f6468.3
Applied rewrites68.3%
Taylor expanded in NdChar around 0
lower-/.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
lower--.f64N/A
+-commutativeN/A
lower-+.f64N/A
+-commutativeN/A
lower-+.f6465.9
Applied rewrites65.9%
Taylor expanded in Ev around inf
Applied rewrites45.5%
if -1.19999999999999996e-34 < Vef < 2.2999999999999999e-259Initial program 100.0%
Taylor expanded in NdChar around inf
lower-/.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
lower--.f64N/A
+-commutativeN/A
lower-+.f64N/A
+-commutativeN/A
lower-+.f6464.3
Applied rewrites64.3%
Taylor expanded in mu around inf
Applied rewrites52.6%
if 5.2000000000000002e63 < Vef Initial program 100.0%
Taylor expanded in EDonor around inf
lower-/.f6454.7
Applied rewrites54.7%
Taylor expanded in NdChar around 0
lower-/.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
lower--.f64N/A
+-commutativeN/A
lower-+.f64N/A
+-commutativeN/A
lower-+.f6469.8
Applied rewrites69.8%
Taylor expanded in Vef around inf
Applied rewrites62.1%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NaChar (+ (exp (/ Ev KbT)) 1.0)))
(t_1 (+ (exp (/ Vef KbT)) 1.0)))
(if (<= Vef -4e+35)
(/ NdChar t_1)
(if (<= Vef -2.7e-35)
t_0
(if (<= Vef 1.4e-259)
(/ NdChar (+ (exp (/ EDonor KbT)) 1.0))
(if (<= Vef 5.2e+63) t_0 (/ NaChar 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((Ev / KbT)) + 1.0);
double t_1 = exp((Vef / KbT)) + 1.0;
double tmp;
if (Vef <= -4e+35) {
tmp = NdChar / t_1;
} else if (Vef <= -2.7e-35) {
tmp = t_0;
} else if (Vef <= 1.4e-259) {
tmp = NdChar / (exp((EDonor / KbT)) + 1.0);
} else if (Vef <= 5.2e+63) {
tmp = t_0;
} else {
tmp = NaChar / 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((ev / kbt)) + 1.0d0)
t_1 = exp((vef / kbt)) + 1.0d0
if (vef <= (-4d+35)) then
tmp = ndchar / t_1
else if (vef <= (-2.7d-35)) then
tmp = t_0
else if (vef <= 1.4d-259) then
tmp = ndchar / (exp((edonor / kbt)) + 1.0d0)
else if (vef <= 5.2d+63) then
tmp = t_0
else
tmp = nachar / 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((Ev / KbT)) + 1.0);
double t_1 = Math.exp((Vef / KbT)) + 1.0;
double tmp;
if (Vef <= -4e+35) {
tmp = NdChar / t_1;
} else if (Vef <= -2.7e-35) {
tmp = t_0;
} else if (Vef <= 1.4e-259) {
tmp = NdChar / (Math.exp((EDonor / KbT)) + 1.0);
} else if (Vef <= 5.2e+63) {
tmp = t_0;
} else {
tmp = NaChar / t_1;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NaChar / (math.exp((Ev / KbT)) + 1.0) t_1 = math.exp((Vef / KbT)) + 1.0 tmp = 0 if Vef <= -4e+35: tmp = NdChar / t_1 elif Vef <= -2.7e-35: tmp = t_0 elif Vef <= 1.4e-259: tmp = NdChar / (math.exp((EDonor / KbT)) + 1.0) elif Vef <= 5.2e+63: tmp = t_0 else: tmp = NaChar / t_1 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NaChar / Float64(exp(Float64(Ev / KbT)) + 1.0)) t_1 = Float64(exp(Float64(Vef / KbT)) + 1.0) tmp = 0.0 if (Vef <= -4e+35) tmp = Float64(NdChar / t_1); elseif (Vef <= -2.7e-35) tmp = t_0; elseif (Vef <= 1.4e-259) tmp = Float64(NdChar / Float64(exp(Float64(EDonor / KbT)) + 1.0)); elseif (Vef <= 5.2e+63) tmp = t_0; else tmp = Float64(NaChar / t_1); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NaChar / (exp((Ev / KbT)) + 1.0); t_1 = exp((Vef / KbT)) + 1.0; tmp = 0.0; if (Vef <= -4e+35) tmp = NdChar / t_1; elseif (Vef <= -2.7e-35) tmp = t_0; elseif (Vef <= 1.4e-259) tmp = NdChar / (exp((EDonor / KbT)) + 1.0); elseif (Vef <= 5.2e+63) tmp = t_0; else tmp = NaChar / t_1; 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[(Ev / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]}, If[LessEqual[Vef, -4e+35], N[(NdChar / t$95$1), $MachinePrecision], If[LessEqual[Vef, -2.7e-35], t$95$0, If[LessEqual[Vef, 1.4e-259], N[(NdChar / N[(N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[Vef, 5.2e+63], t$95$0, N[(NaChar / t$95$1), $MachinePrecision]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{e^{\frac{Ev}{KbT}} + 1}\\
t_1 := e^{\frac{Vef}{KbT}} + 1\\
\mathbf{if}\;Vef \leq -4 \cdot 10^{+35}:\\
\;\;\;\;\frac{NdChar}{t\_1}\\
\mathbf{elif}\;Vef \leq -2.7 \cdot 10^{-35}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;Vef \leq 1.4 \cdot 10^{-259}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{EDonor}{KbT}} + 1}\\
\mathbf{elif}\;Vef \leq 5.2 \cdot 10^{+63}:\\
\;\;\;\;t\_0\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{t\_1}\\
\end{array}
\end{array}
if Vef < -3.9999999999999999e35Initial program 100.0%
Taylor expanded in NdChar around inf
lower-/.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
lower--.f64N/A
+-commutativeN/A
lower-+.f64N/A
+-commutativeN/A
lower-+.f6470.3
Applied rewrites70.3%
Taylor expanded in Vef around inf
Applied rewrites62.2%
if -3.9999999999999999e35 < Vef < -2.6999999999999997e-35 or 1.4e-259 < Vef < 5.2000000000000002e63Initial program 100.0%
Taylor expanded in EDonor around inf
lower-/.f6468.3
Applied rewrites68.3%
Taylor expanded in NdChar around 0
lower-/.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
lower--.f64N/A
+-commutativeN/A
lower-+.f64N/A
+-commutativeN/A
lower-+.f6465.9
Applied rewrites65.9%
Taylor expanded in Ev around inf
Applied rewrites45.5%
if -2.6999999999999997e-35 < Vef < 1.4e-259Initial program 100.0%
Taylor expanded in NdChar around inf
lower-/.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
lower--.f64N/A
+-commutativeN/A
lower-+.f64N/A
+-commutativeN/A
lower-+.f6464.3
Applied rewrites64.3%
Taylor expanded in EDonor around inf
Applied rewrites47.6%
if 5.2000000000000002e63 < Vef Initial program 100.0%
Taylor expanded in EDonor around inf
lower-/.f6454.7
Applied rewrites54.7%
Taylor expanded in NdChar around 0
lower-/.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
lower--.f64N/A
+-commutativeN/A
lower-+.f64N/A
+-commutativeN/A
lower-+.f6469.8
Applied rewrites69.8%
Taylor expanded in Vef around inf
Applied rewrites62.1%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NdChar (+ (exp (/ (- (+ (+ mu Vef) EDonor) Ec) KbT)) 1.0))))
(if (<= NdChar -2.05e+152)
t_0
(if (<= NdChar 1.15e-78)
(/ NaChar (+ (exp (/ (- (+ EAccept (+ Ev Vef)) mu) 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 = NdChar / (exp(((((mu + Vef) + EDonor) - Ec) / KbT)) + 1.0);
double tmp;
if (NdChar <= -2.05e+152) {
tmp = t_0;
} else if (NdChar <= 1.15e-78) {
tmp = NaChar / (exp((((EAccept + (Ev + Vef)) - mu) / 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 = ndchar / (exp(((((mu + vef) + edonor) - ec) / kbt)) + 1.0d0)
if (ndchar <= (-2.05d+152)) then
tmp = t_0
else if (ndchar <= 1.15d-78) then
tmp = nachar / (exp((((eaccept + (ev + vef)) - mu) / 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 = NdChar / (Math.exp(((((mu + Vef) + EDonor) - Ec) / KbT)) + 1.0);
double tmp;
if (NdChar <= -2.05e+152) {
tmp = t_0;
} else if (NdChar <= 1.15e-78) {
tmp = NaChar / (Math.exp((((EAccept + (Ev + Vef)) - mu) / KbT)) + 1.0);
} else {
tmp = t_0;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NdChar / (math.exp(((((mu + Vef) + EDonor) - Ec) / KbT)) + 1.0) tmp = 0 if NdChar <= -2.05e+152: tmp = t_0 elif NdChar <= 1.15e-78: tmp = NaChar / (math.exp((((EAccept + (Ev + Vef)) - mu) / KbT)) + 1.0) else: tmp = t_0 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NdChar / Float64(exp(Float64(Float64(Float64(Float64(mu + Vef) + EDonor) - Ec) / KbT)) + 1.0)) tmp = 0.0 if (NdChar <= -2.05e+152) tmp = t_0; elseif (NdChar <= 1.15e-78) tmp = Float64(NaChar / Float64(exp(Float64(Float64(Float64(EAccept + Float64(Ev + Vef)) - mu) / 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 = NdChar / (exp(((((mu + Vef) + EDonor) - Ec) / KbT)) + 1.0); tmp = 0.0; if (NdChar <= -2.05e+152) tmp = t_0; elseif (NdChar <= 1.15e-78) tmp = NaChar / (exp((((EAccept + (Ev + Vef)) - mu) / 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[(NdChar / N[(N[Exp[N[(N[(N[(N[(mu + Vef), $MachinePrecision] + EDonor), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NdChar, -2.05e+152], t$95$0, If[LessEqual[NdChar, 1.15e-78], N[(NaChar / N[(N[Exp[N[(N[(N[(EAccept + N[(Ev + Vef), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], t$95$0]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{e^{\frac{\left(\left(mu + Vef\right) + EDonor\right) - Ec}{KbT}} + 1}\\
\mathbf{if}\;NdChar \leq -2.05 \cdot 10^{+152}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;NdChar \leq 1.15 \cdot 10^{-78}:\\
\;\;\;\;\frac{NaChar}{e^{\frac{\left(EAccept + \left(Ev + Vef\right)\right) - mu}{KbT}} + 1}\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if NdChar < -2.0499999999999999e152 or 1.1500000000000001e-78 < NdChar Initial program 100.0%
Taylor expanded in NdChar around inf
lower-/.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
lower--.f64N/A
+-commutativeN/A
lower-+.f64N/A
+-commutativeN/A
lower-+.f6471.5
Applied rewrites71.5%
if -2.0499999999999999e152 < NdChar < 1.1500000000000001e-78Initial program 100.0%
Taylor expanded in NdChar around 0
lower-/.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
lower--.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower-+.f6470.1
Applied rewrites70.1%
Final simplification70.7%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NaChar (+ (exp (/ Vef KbT)) 1.0))))
(if (<= Vef -3.4e-34)
t_0
(if (<= Vef 1.4e-259)
(/ NdChar (+ (exp (/ EDonor KbT)) 1.0))
(if (<= Vef 5.2e+63) (/ NaChar (+ (exp (/ Ev 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 / (exp((Vef / KbT)) + 1.0);
double tmp;
if (Vef <= -3.4e-34) {
tmp = t_0;
} else if (Vef <= 1.4e-259) {
tmp = NdChar / (exp((EDonor / KbT)) + 1.0);
} else if (Vef <= 5.2e+63) {
tmp = NaChar / (exp((Ev / 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 / (exp((vef / kbt)) + 1.0d0)
if (vef <= (-3.4d-34)) then
tmp = t_0
else if (vef <= 1.4d-259) then
tmp = ndchar / (exp((edonor / kbt)) + 1.0d0)
else if (vef <= 5.2d+63) then
tmp = nachar / (exp((ev / 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 / (Math.exp((Vef / KbT)) + 1.0);
double tmp;
if (Vef <= -3.4e-34) {
tmp = t_0;
} else if (Vef <= 1.4e-259) {
tmp = NdChar / (Math.exp((EDonor / KbT)) + 1.0);
} else if (Vef <= 5.2e+63) {
tmp = NaChar / (Math.exp((Ev / KbT)) + 1.0);
} else {
tmp = t_0;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NaChar / (math.exp((Vef / KbT)) + 1.0) tmp = 0 if Vef <= -3.4e-34: tmp = t_0 elif Vef <= 1.4e-259: tmp = NdChar / (math.exp((EDonor / KbT)) + 1.0) elif Vef <= 5.2e+63: tmp = NaChar / (math.exp((Ev / KbT)) + 1.0) else: tmp = t_0 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NaChar / Float64(exp(Float64(Vef / KbT)) + 1.0)) tmp = 0.0 if (Vef <= -3.4e-34) tmp = t_0; elseif (Vef <= 1.4e-259) tmp = Float64(NdChar / Float64(exp(Float64(EDonor / KbT)) + 1.0)); elseif (Vef <= 5.2e+63) tmp = Float64(NaChar / Float64(exp(Float64(Ev / 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 / (exp((Vef / KbT)) + 1.0); tmp = 0.0; if (Vef <= -3.4e-34) tmp = t_0; elseif (Vef <= 1.4e-259) tmp = NdChar / (exp((EDonor / KbT)) + 1.0); elseif (Vef <= 5.2e+63) tmp = NaChar / (exp((Ev / 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[(NaChar / N[(N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[Vef, -3.4e-34], t$95$0, If[LessEqual[Vef, 1.4e-259], N[(NdChar / N[(N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[Vef, 5.2e+63], N[(NaChar / N[(N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], t$95$0]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{e^{\frac{Vef}{KbT}} + 1}\\
\mathbf{if}\;Vef \leq -3.4 \cdot 10^{-34}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;Vef \leq 1.4 \cdot 10^{-259}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{EDonor}{KbT}} + 1}\\
\mathbf{elif}\;Vef \leq 5.2 \cdot 10^{+63}:\\
\;\;\;\;\frac{NaChar}{e^{\frac{Ev}{KbT}} + 1}\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if Vef < -3.4000000000000001e-34 or 5.2000000000000002e63 < Vef Initial program 100.0%
Taylor expanded in EDonor around inf
lower-/.f6457.3
Applied rewrites57.3%
Taylor expanded in NdChar around 0
lower-/.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
lower--.f64N/A
+-commutativeN/A
lower-+.f64N/A
+-commutativeN/A
lower-+.f6468.5
Applied rewrites68.5%
Taylor expanded in Vef around inf
Applied rewrites58.2%
if -3.4000000000000001e-34 < Vef < 1.4e-259Initial program 100.0%
Taylor expanded in NdChar around inf
lower-/.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
lower--.f64N/A
+-commutativeN/A
lower-+.f64N/A
+-commutativeN/A
lower-+.f6464.3
Applied rewrites64.3%
Taylor expanded in EDonor around inf
Applied rewrites47.6%
if 1.4e-259 < Vef < 5.2000000000000002e63Initial program 100.0%
Taylor expanded in EDonor around inf
lower-/.f6469.0
Applied rewrites69.0%
Taylor expanded in NdChar around 0
lower-/.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
lower--.f64N/A
+-commutativeN/A
lower-+.f64N/A
+-commutativeN/A
lower-+.f6464.3
Applied rewrites64.3%
Taylor expanded in Ev around inf
Applied rewrites42.3%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NaChar (+ (exp (/ Vef KbT)) 1.0))))
(if (<= Vef -1.08e-85)
t_0
(if (<= Vef 8.5e-137)
(* (+ NaChar NdChar) 0.5)
(if (<= Vef 5.2e+63) (/ NaChar (+ (exp (/ Ev 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 / (exp((Vef / KbT)) + 1.0);
double tmp;
if (Vef <= -1.08e-85) {
tmp = t_0;
} else if (Vef <= 8.5e-137) {
tmp = (NaChar + NdChar) * 0.5;
} else if (Vef <= 5.2e+63) {
tmp = NaChar / (exp((Ev / 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 / (exp((vef / kbt)) + 1.0d0)
if (vef <= (-1.08d-85)) then
tmp = t_0
else if (vef <= 8.5d-137) then
tmp = (nachar + ndchar) * 0.5d0
else if (vef <= 5.2d+63) then
tmp = nachar / (exp((ev / 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 / (Math.exp((Vef / KbT)) + 1.0);
double tmp;
if (Vef <= -1.08e-85) {
tmp = t_0;
} else if (Vef <= 8.5e-137) {
tmp = (NaChar + NdChar) * 0.5;
} else if (Vef <= 5.2e+63) {
tmp = NaChar / (Math.exp((Ev / KbT)) + 1.0);
} else {
tmp = t_0;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NaChar / (math.exp((Vef / KbT)) + 1.0) tmp = 0 if Vef <= -1.08e-85: tmp = t_0 elif Vef <= 8.5e-137: tmp = (NaChar + NdChar) * 0.5 elif Vef <= 5.2e+63: tmp = NaChar / (math.exp((Ev / KbT)) + 1.0) else: tmp = t_0 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NaChar / Float64(exp(Float64(Vef / KbT)) + 1.0)) tmp = 0.0 if (Vef <= -1.08e-85) tmp = t_0; elseif (Vef <= 8.5e-137) tmp = Float64(Float64(NaChar + NdChar) * 0.5); elseif (Vef <= 5.2e+63) tmp = Float64(NaChar / Float64(exp(Float64(Ev / 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 / (exp((Vef / KbT)) + 1.0); tmp = 0.0; if (Vef <= -1.08e-85) tmp = t_0; elseif (Vef <= 8.5e-137) tmp = (NaChar + NdChar) * 0.5; elseif (Vef <= 5.2e+63) tmp = NaChar / (exp((Ev / 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[(NaChar / N[(N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[Vef, -1.08e-85], t$95$0, If[LessEqual[Vef, 8.5e-137], N[(N[(NaChar + NdChar), $MachinePrecision] * 0.5), $MachinePrecision], If[LessEqual[Vef, 5.2e+63], N[(NaChar / N[(N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], t$95$0]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{e^{\frac{Vef}{KbT}} + 1}\\
\mathbf{if}\;Vef \leq -1.08 \cdot 10^{-85}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;Vef \leq 8.5 \cdot 10^{-137}:\\
\;\;\;\;\left(NaChar + NdChar\right) \cdot 0.5\\
\mathbf{elif}\;Vef \leq 5.2 \cdot 10^{+63}:\\
\;\;\;\;\frac{NaChar}{e^{\frac{Ev}{KbT}} + 1}\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if Vef < -1.07999999999999997e-85 or 5.2000000000000002e63 < Vef Initial program 100.0%
Taylor expanded in EDonor around inf
lower-/.f6456.5
Applied rewrites56.5%
Taylor expanded in NdChar around 0
lower-/.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
lower--.f64N/A
+-commutativeN/A
lower-+.f64N/A
+-commutativeN/A
lower-+.f6467.0
Applied rewrites67.0%
Taylor expanded in Vef around inf
Applied rewrites56.6%
if -1.07999999999999997e-85 < Vef < 8.5000000000000001e-137Initial program 100.0%
Taylor expanded in KbT around inf
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6438.5
Applied rewrites38.5%
if 8.5000000000000001e-137 < Vef < 5.2000000000000002e63Initial program 100.0%
Taylor expanded in EDonor around inf
lower-/.f6466.7
Applied rewrites66.7%
Taylor expanded in NdChar around 0
lower-/.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
lower--.f64N/A
+-commutativeN/A
lower-+.f64N/A
+-commutativeN/A
lower-+.f6472.8
Applied rewrites72.8%
Taylor expanded in Ev around inf
Applied rewrites42.3%
Final simplification48.6%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (* (+ NaChar NdChar) 0.5)))
(if (<= KbT -2.4e+109)
t_0
(if (<= KbT 1350.0) (/ NaChar (+ (exp (/ 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 + NdChar) * 0.5;
double tmp;
if (KbT <= -2.4e+109) {
tmp = t_0;
} else if (KbT <= 1350.0) {
tmp = NaChar / (exp((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 + ndchar) * 0.5d0
if (kbt <= (-2.4d+109)) then
tmp = t_0
else if (kbt <= 1350.0d0) then
tmp = nachar / (exp((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 + NdChar) * 0.5;
double tmp;
if (KbT <= -2.4e+109) {
tmp = t_0;
} else if (KbT <= 1350.0) {
tmp = NaChar / (Math.exp((EAccept / KbT)) + 1.0);
} else {
tmp = t_0;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = (NaChar + NdChar) * 0.5 tmp = 0 if KbT <= -2.4e+109: tmp = t_0 elif KbT <= 1350.0: tmp = NaChar / (math.exp((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 + NdChar) * 0.5) tmp = 0.0 if (KbT <= -2.4e+109) tmp = t_0; elseif (KbT <= 1350.0) tmp = Float64(NaChar / Float64(exp(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 + NdChar) * 0.5; tmp = 0.0; if (KbT <= -2.4e+109) tmp = t_0; elseif (KbT <= 1350.0) tmp = NaChar / (exp((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 + NdChar), $MachinePrecision] * 0.5), $MachinePrecision]}, If[LessEqual[KbT, -2.4e+109], t$95$0, If[LessEqual[KbT, 1350.0], N[(NaChar / N[(N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], t$95$0]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(NaChar + NdChar\right) \cdot 0.5\\
\mathbf{if}\;KbT \leq -2.4 \cdot 10^{+109}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;KbT \leq 1350:\\
\;\;\;\;\frac{NaChar}{e^{\frac{EAccept}{KbT}} + 1}\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if KbT < -2.39999999999999987e109 or 1350 < KbT Initial program 100.0%
Taylor expanded in KbT around inf
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6449.3
Applied rewrites49.3%
if -2.39999999999999987e109 < KbT < 1350Initial program 100.0%
Taylor expanded in EDonor around inf
lower-/.f6459.7
Applied rewrites59.7%
Taylor expanded in NdChar around 0
lower-/.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
lower--.f64N/A
+-commutativeN/A
lower-+.f64N/A
+-commutativeN/A
lower-+.f6461.1
Applied rewrites61.1%
Taylor expanded in EAccept around inf
Applied rewrites32.9%
Final simplification39.1%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (if (<= EAccept 8.8e+108) (/ NaChar (+ (exp (/ Ev 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 tmp;
if (EAccept <= 8.8e+108) {
tmp = NaChar / (exp((Ev / KbT)) + 1.0);
} else {
tmp = 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) :: tmp
if (eaccept <= 8.8d+108) then
tmp = nachar / (exp((ev / kbt)) + 1.0d0)
else
tmp = 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 tmp;
if (EAccept <= 8.8e+108) {
tmp = NaChar / (Math.exp((Ev / KbT)) + 1.0);
} else {
tmp = NaChar / (Math.exp((EAccept / KbT)) + 1.0);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if EAccept <= 8.8e+108: tmp = NaChar / (math.exp((Ev / KbT)) + 1.0) else: tmp = NaChar / (math.exp((EAccept / KbT)) + 1.0) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (EAccept <= 8.8e+108) tmp = Float64(NaChar / Float64(exp(Float64(Ev / KbT)) + 1.0)); else tmp = 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) tmp = 0.0; if (EAccept <= 8.8e+108) tmp = NaChar / (exp((Ev / KbT)) + 1.0); else tmp = NaChar / (exp((EAccept / KbT)) + 1.0); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[EAccept, 8.8e+108], N[(NaChar / N[(N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], N[(NaChar / N[(N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;EAccept \leq 8.8 \cdot 10^{+108}:\\
\;\;\;\;\frac{NaChar}{e^{\frac{Ev}{KbT}} + 1}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{e^{\frac{EAccept}{KbT}} + 1}\\
\end{array}
\end{array}
if EAccept < 8.8000000000000005e108Initial program 100.0%
Taylor expanded in EDonor around inf
lower-/.f6465.2
Applied rewrites65.2%
Taylor expanded in NdChar around 0
lower-/.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
lower--.f64N/A
+-commutativeN/A
lower-+.f64N/A
+-commutativeN/A
lower-+.f6461.0
Applied rewrites61.0%
Taylor expanded in Ev around inf
Applied rewrites34.8%
if 8.8000000000000005e108 < EAccept Initial program 100.0%
Taylor expanded in EDonor around inf
lower-/.f6465.2
Applied rewrites65.2%
Taylor expanded in NdChar around 0
lower-/.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
lower--.f64N/A
+-commutativeN/A
lower-+.f64N/A
+-commutativeN/A
lower-+.f6454.3
Applied rewrites54.3%
Taylor expanded in EAccept around inf
Applied rewrites48.4%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (if (<= NdChar -6.4e+143) (* 0.5 NdChar) (if (<= NdChar 480.0) (* 0.5 NaChar) (* 0.5 NdChar))))
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.4e+143) {
tmp = 0.5 * NdChar;
} else if (NdChar <= 480.0) {
tmp = 0.5 * NaChar;
} else {
tmp = 0.5 * NdChar;
}
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.4d+143)) then
tmp = 0.5d0 * ndchar
else if (ndchar <= 480.0d0) then
tmp = 0.5d0 * nachar
else
tmp = 0.5d0 * ndchar
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.4e+143) {
tmp = 0.5 * NdChar;
} else if (NdChar <= 480.0) {
tmp = 0.5 * NaChar;
} else {
tmp = 0.5 * NdChar;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if NdChar <= -6.4e+143: tmp = 0.5 * NdChar elif NdChar <= 480.0: tmp = 0.5 * NaChar else: tmp = 0.5 * NdChar return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (NdChar <= -6.4e+143) tmp = Float64(0.5 * NdChar); elseif (NdChar <= 480.0) tmp = Float64(0.5 * NaChar); else tmp = Float64(0.5 * NdChar); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (NdChar <= -6.4e+143) tmp = 0.5 * NdChar; elseif (NdChar <= 480.0) tmp = 0.5 * NaChar; else tmp = 0.5 * NdChar; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[NdChar, -6.4e+143], N[(0.5 * NdChar), $MachinePrecision], If[LessEqual[NdChar, 480.0], N[(0.5 * NaChar), $MachinePrecision], N[(0.5 * NdChar), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NdChar \leq -6.4 \cdot 10^{+143}:\\
\;\;\;\;0.5 \cdot NdChar\\
\mathbf{elif}\;NdChar \leq 480:\\
\;\;\;\;0.5 \cdot NaChar\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot NdChar\\
\end{array}
\end{array}
if NdChar < -6.40000000000000033e143 or 480 < NdChar Initial program 100.0%
Taylor expanded in NdChar around inf
lower-/.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
lower--.f64N/A
+-commutativeN/A
lower-+.f64N/A
+-commutativeN/A
lower-+.f6473.9
Applied rewrites73.9%
Taylor expanded in KbT around inf
Applied rewrites27.0%
if -6.40000000000000033e143 < NdChar < 480Initial program 100.0%
Taylor expanded in KbT around inf
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6424.6
Applied rewrites24.6%
Taylor expanded in NdChar around 0
Applied rewrites22.6%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (* (+ NaChar NdChar) 0.5))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NaChar + NdChar) * 0.5;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
code = (nachar + ndchar) * 0.5d0
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NaChar + NdChar) * 0.5;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return (NaChar + NdChar) * 0.5
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(Float64(NaChar + NdChar) * 0.5) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = (NaChar + NdChar) * 0.5; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(N[(NaChar + NdChar), $MachinePrecision] * 0.5), $MachinePrecision]
\begin{array}{l}
\\
\left(NaChar + NdChar\right) \cdot 0.5
\end{array}
Initial program 100.0%
Taylor expanded in KbT around inf
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6425.9
Applied rewrites25.9%
Final simplification25.9%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (* 0.5 NaChar))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return 0.5 * NaChar;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
code = 0.5d0 * nachar
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return 0.5 * NaChar;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return 0.5 * NaChar
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(0.5 * NaChar) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.5 * NaChar; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(0.5 * NaChar), $MachinePrecision]
\begin{array}{l}
\\
0.5 \cdot NaChar
\end{array}
Initial program 100.0%
Taylor expanded in KbT around inf
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6425.9
Applied rewrites25.9%
Taylor expanded in NdChar around 0
Applied rewrites17.8%
herbie shell --seed 2024283
(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))))))