
(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 16 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (+ (/ NdChar (+ 1.0 (exp (/ (- (- (- (- Ec Vef) EDonor) mu)) KbT)))) (/ NaChar (+ 1.0 (exp (/ (+ (+ (+ Ev Vef) EAccept) (- mu)) KbT))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NdChar / (1.0 + exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + exp(((((Ev + Vef) + EAccept) + -mu) / KbT))));
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
code = (ndchar / (1.0d0 + exp((-(((ec - vef) - edonor) - mu) / kbt)))) + (nachar / (1.0d0 + exp(((((ev + vef) + eaccept) + -mu) / kbt))))
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NdChar / (1.0 + Math.exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + Math.exp(((((Ev + Vef) + EAccept) + -mu) / KbT))));
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return (NdChar / (1.0 + math.exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + math.exp(((((Ev + Vef) + EAccept) + -mu) / KbT))))
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(-Float64(Float64(Float64(Ec - Vef) - EDonor) - mu)) / KbT)))) + Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(Float64(Ev + Vef) + EAccept) + Float64(-mu)) / KbT))))) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = (NdChar / (1.0 + exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + exp(((((Ev + Vef) + EAccept) + -mu) / KbT)))); end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(N[(NdChar / N[(1.0 + N[Exp[N[((-N[(N[(N[(Ec - Vef), $MachinePrecision] - EDonor), $MachinePrecision] - mu), $MachinePrecision]) / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Exp[N[(N[(N[(N[(Ev + Vef), $MachinePrecision] + EAccept), $MachinePrecision] + (-mu)), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{NdChar}{1 + e^{\frac{-\left(\left(\left(Ec - Vef\right) - EDonor\right) - mu\right)}{KbT}}} + \frac{NaChar}{1 + e^{\frac{\left(\left(Ev + Vef\right) + EAccept\right) + \left(-mu\right)}{KbT}}}
\end{array}
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (+ (/ NdChar (+ (exp (/ (- mu (- (- Ec Vef) EDonor)) KbT)) 1.0)) (/ NaChar (+ (exp (/ (- (+ (+ Vef Ev) EAccept) mu) KbT)) 1.0))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NdChar / (exp(((mu - ((Ec - Vef) - EDonor)) / KbT)) + 1.0)) + (NaChar / (exp(((((Vef + Ev) + EAccept) - mu) / 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 = (ndchar / (exp(((mu - ((ec - vef) - edonor)) / kbt)) + 1.0d0)) + (nachar / (exp(((((vef + ev) + eaccept) - mu) / 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 (NdChar / (Math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)) + 1.0)) + (NaChar / (Math.exp(((((Vef + Ev) + EAccept) - mu) / KbT)) + 1.0));
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return (NdChar / (math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)) + 1.0)) + (NaChar / (math.exp(((((Vef + Ev) + EAccept) - mu) / KbT)) + 1.0))
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(Float64(NdChar / Float64(exp(Float64(Float64(mu - Float64(Float64(Ec - Vef) - EDonor)) / KbT)) + 1.0)) + Float64(NaChar / Float64(exp(Float64(Float64(Float64(Float64(Vef + Ev) + EAccept) - mu) / KbT)) + 1.0))) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = (NdChar / (exp(((mu - ((Ec - Vef) - EDonor)) / KbT)) + 1.0)) + (NaChar / (exp(((((Vef + Ev) + EAccept) - mu) / KbT)) + 1.0)); end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(N[(NdChar / N[(N[Exp[N[(N[(mu - N[(N[(Ec - Vef), $MachinePrecision] - EDonor), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(N[Exp[N[(N[(N[(N[(Vef + Ev), $MachinePrecision] + EAccept), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{NdChar}{e^{\frac{mu - \left(\left(Ec - Vef\right) - EDonor\right)}{KbT}} + 1} + \frac{NaChar}{e^{\frac{\left(\left(Vef + Ev\right) + EAccept\right) - mu}{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 (* 0.5 (+ NdChar NaChar)))
(t_1
(+
(/ NdChar (+ (exp (/ (- mu (- (- Ec Vef) EDonor)) KbT)) 1.0))
(/ NaChar (+ (exp (/ (- (+ (+ Vef Ev) EAccept) mu) KbT)) 1.0))))
(t_2 (/ NdChar (+ (exp (/ EDonor KbT)) 1.0)))
(t_3 (- Ec (+ Vef mu)))
(t_4 (- EDonor t_3)))
(if (<= t_1 -2e-40)
t_0
(if (<= t_1 -2e-274)
t_2
(if (<= t_1 0.0)
(/
NdChar
(- 2.0 (/ (fma -0.5 (/ (* t_4 t_4) KbT) (- t_3 EDonor)) KbT)))
(if (<= t_1 2e+183) t_2 (fma -0.25 (* Vef (/ NdChar 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 = 0.5 * (NdChar + NaChar);
double t_1 = (NdChar / (exp(((mu - ((Ec - Vef) - EDonor)) / KbT)) + 1.0)) + (NaChar / (exp(((((Vef + Ev) + EAccept) - mu) / KbT)) + 1.0));
double t_2 = NdChar / (exp((EDonor / KbT)) + 1.0);
double t_3 = Ec - (Vef + mu);
double t_4 = EDonor - t_3;
double tmp;
if (t_1 <= -2e-40) {
tmp = t_0;
} else if (t_1 <= -2e-274) {
tmp = t_2;
} else if (t_1 <= 0.0) {
tmp = NdChar / (2.0 - (fma(-0.5, ((t_4 * t_4) / KbT), (t_3 - EDonor)) / KbT));
} else if (t_1 <= 2e+183) {
tmp = t_2;
} else {
tmp = fma(-0.25, (Vef * (NdChar / KbT)), t_0);
}
return tmp;
}
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(0.5 * Float64(NdChar + NaChar)) t_1 = Float64(Float64(NdChar / Float64(exp(Float64(Float64(mu - Float64(Float64(Ec - Vef) - EDonor)) / KbT)) + 1.0)) + Float64(NaChar / Float64(exp(Float64(Float64(Float64(Float64(Vef + Ev) + EAccept) - mu) / KbT)) + 1.0))) t_2 = Float64(NdChar / Float64(exp(Float64(EDonor / KbT)) + 1.0)) t_3 = Float64(Ec - Float64(Vef + mu)) t_4 = Float64(EDonor - t_3) tmp = 0.0 if (t_1 <= -2e-40) tmp = t_0; elseif (t_1 <= -2e-274) tmp = t_2; elseif (t_1 <= 0.0) tmp = Float64(NdChar / Float64(2.0 - Float64(fma(-0.5, Float64(Float64(t_4 * t_4) / KbT), Float64(t_3 - EDonor)) / KbT))); elseif (t_1 <= 2e+183) tmp = t_2; else tmp = fma(-0.25, Float64(Vef * Float64(NdChar / KbT)), t_0); end return tmp end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(0.5 * N[(NdChar + NaChar), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NdChar / N[(N[Exp[N[(N[(mu - N[(N[(Ec - Vef), $MachinePrecision] - EDonor), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(N[Exp[N[(N[(N[(N[(Vef + Ev), $MachinePrecision] + EAccept), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(NdChar / N[(N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$3 = N[(Ec - N[(Vef + mu), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$4 = N[(EDonor - t$95$3), $MachinePrecision]}, If[LessEqual[t$95$1, -2e-40], t$95$0, If[LessEqual[t$95$1, -2e-274], t$95$2, If[LessEqual[t$95$1, 0.0], N[(NdChar / N[(2.0 - N[(N[(-0.5 * N[(N[(t$95$4 * t$95$4), $MachinePrecision] / KbT), $MachinePrecision] + N[(t$95$3 - EDonor), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$1, 2e+183], t$95$2, N[(-0.25 * N[(Vef * N[(NdChar / KbT), $MachinePrecision]), $MachinePrecision] + t$95$0), $MachinePrecision]]]]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := 0.5 \cdot \left(NdChar + NaChar\right)\\
t_1 := \frac{NdChar}{e^{\frac{mu - \left(\left(Ec - Vef\right) - EDonor\right)}{KbT}} + 1} + \frac{NaChar}{e^{\frac{\left(\left(Vef + Ev\right) + EAccept\right) - mu}{KbT}} + 1}\\
t_2 := \frac{NdChar}{e^{\frac{EDonor}{KbT}} + 1}\\
t_3 := Ec - \left(Vef + mu\right)\\
t_4 := EDonor - t\_3\\
\mathbf{if}\;t\_1 \leq -2 \cdot 10^{-40}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;t\_1 \leq -2 \cdot 10^{-274}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;t\_1 \leq 0:\\
\;\;\;\;\frac{NdChar}{2 - \frac{\mathsf{fma}\left(-0.5, \frac{t\_4 \cdot t\_4}{KbT}, t\_3 - EDonor\right)}{KbT}}\\
\mathbf{elif}\;t\_1 \leq 2 \cdot 10^{+183}:\\
\;\;\;\;t\_2\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(-0.25, Vef \cdot \frac{NdChar}{KbT}, t\_0\right)\\
\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.9999999999999999e-40Initial program 100.0%
Taylor expanded in KbT around inf
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6431.0
Applied rewrites31.0%
if -1.9999999999999999e-40 < (+.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.99999999999999993e-274 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))))) < 1.99999999999999989e183Initial program 100.0%
Taylor expanded in NdChar around inf
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
associate--l+N/A
sub-negN/A
associate-+r+N/A
mul-1-negN/A
associate-+r+N/A
lower-+.f64N/A
lower-+.f64N/A
mul-1-negN/A
sub-negN/A
lower--.f6461.3
Applied rewrites61.3%
Taylor expanded in EDonor around inf
Applied rewrites40.6%
if -1.99999999999999993e-274 < (+.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 NdChar around inf
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
associate--l+N/A
sub-negN/A
associate-+r+N/A
mul-1-negN/A
associate-+r+N/A
lower-+.f64N/A
lower-+.f64N/A
mul-1-negN/A
sub-negN/A
lower--.f6498.2
Applied rewrites98.2%
Taylor expanded in KbT around -inf
Applied rewrites92.2%
if 1.99999999999999989e183 < (+.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 99.9%
Taylor expanded in KbT around -inf
Applied rewrites21.0%
Taylor expanded in Vef around inf
Applied rewrites37.3%
Taylor expanded in NaChar around 0
Applied rewrites42.5%
Final simplification48.0%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (- Ec (+ Vef mu)))
(t_1 (- EDonor t_0))
(t_2 (* 0.5 (+ NdChar NaChar)))
(t_3
(+
(/ NdChar (+ (exp (/ (- mu (- (- Ec Vef) EDonor)) KbT)) 1.0))
(/ NaChar (+ (exp (/ (- (+ (+ Vef Ev) EAccept) mu) KbT)) 1.0)))))
(if (<= t_3 -5e-267)
t_2
(if (<= t_3 2e-286)
(/ NdChar (- 2.0 (/ (fma -0.5 (/ (* t_1 t_1) KbT) (- t_0 EDonor)) KbT)))
t_2))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = Ec - (Vef + mu);
double t_1 = EDonor - t_0;
double t_2 = 0.5 * (NdChar + NaChar);
double t_3 = (NdChar / (exp(((mu - ((Ec - Vef) - EDonor)) / KbT)) + 1.0)) + (NaChar / (exp(((((Vef + Ev) + EAccept) - mu) / KbT)) + 1.0));
double tmp;
if (t_3 <= -5e-267) {
tmp = t_2;
} else if (t_3 <= 2e-286) {
tmp = NdChar / (2.0 - (fma(-0.5, ((t_1 * t_1) / KbT), (t_0 - EDonor)) / KbT));
} else {
tmp = t_2;
}
return tmp;
}
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Ec - Float64(Vef + mu)) t_1 = Float64(EDonor - t_0) t_2 = Float64(0.5 * Float64(NdChar + NaChar)) t_3 = Float64(Float64(NdChar / Float64(exp(Float64(Float64(mu - Float64(Float64(Ec - Vef) - EDonor)) / KbT)) + 1.0)) + Float64(NaChar / Float64(exp(Float64(Float64(Float64(Float64(Vef + Ev) + EAccept) - mu) / KbT)) + 1.0))) tmp = 0.0 if (t_3 <= -5e-267) tmp = t_2; elseif (t_3 <= 2e-286) tmp = Float64(NdChar / Float64(2.0 - Float64(fma(-0.5, Float64(Float64(t_1 * t_1) / KbT), Float64(t_0 - EDonor)) / KbT))); else tmp = t_2; end return tmp end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(Ec - N[(Vef + mu), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(EDonor - t$95$0), $MachinePrecision]}, Block[{t$95$2 = N[(0.5 * N[(NdChar + NaChar), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$3 = N[(N[(NdChar / N[(N[Exp[N[(N[(mu - N[(N[(Ec - Vef), $MachinePrecision] - EDonor), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(N[Exp[N[(N[(N[(N[(Vef + Ev), $MachinePrecision] + EAccept), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$3, -5e-267], t$95$2, If[LessEqual[t$95$3, 2e-286], N[(NdChar / N[(2.0 - N[(N[(-0.5 * N[(N[(t$95$1 * t$95$1), $MachinePrecision] / KbT), $MachinePrecision] + N[(t$95$0 - EDonor), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$2]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := Ec - \left(Vef + mu\right)\\
t_1 := EDonor - t\_0\\
t_2 := 0.5 \cdot \left(NdChar + NaChar\right)\\
t_3 := \frac{NdChar}{e^{\frac{mu - \left(\left(Ec - Vef\right) - EDonor\right)}{KbT}} + 1} + \frac{NaChar}{e^{\frac{\left(\left(Vef + Ev\right) + EAccept\right) - mu}{KbT}} + 1}\\
\mathbf{if}\;t\_3 \leq -5 \cdot 10^{-267}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;t\_3 \leq 2 \cdot 10^{-286}:\\
\;\;\;\;\frac{NdChar}{2 - \frac{\mathsf{fma}\left(-0.5, \frac{t\_1 \cdot t\_1}{KbT}, t\_0 - EDonor\right)}{KbT}}\\
\mathbf{else}:\\
\;\;\;\;t\_2\\
\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-267 or 2.0000000000000001e-286 < (+.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.1
Applied rewrites32.1%
if -4.9999999999999999e-267 < (+.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.0000000000000001e-286Initial program 100.0%
Taylor expanded in NdChar around inf
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
associate--l+N/A
sub-negN/A
associate-+r+N/A
mul-1-negN/A
associate-+r+N/A
lower-+.f64N/A
lower-+.f64N/A
mul-1-negN/A
sub-negN/A
lower--.f6491.6
Applied rewrites91.6%
Taylor expanded in KbT around -inf
Applied rewrites84.4%
Final simplification43.1%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (* 0.5 (+ NdChar NaChar)))
(t_1
(+
(/ NdChar (+ (exp (/ (- mu (- (- Ec Vef) EDonor)) KbT)) 1.0))
(/ NaChar (+ (exp (/ (- (+ (+ Vef Ev) EAccept) mu) KbT)) 1.0)))))
(if (<= t_1 -5e-267)
t_0
(if (<= t_1 5e-158)
(/ NdChar (- 2.0 (- (- (/ (- Ec mu) KbT) (/ Vef KbT)) (/ EDonor 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 = 0.5 * (NdChar + NaChar);
double t_1 = (NdChar / (exp(((mu - ((Ec - Vef) - EDonor)) / KbT)) + 1.0)) + (NaChar / (exp(((((Vef + Ev) + EAccept) - mu) / KbT)) + 1.0));
double tmp;
if (t_1 <= -5e-267) {
tmp = t_0;
} else if (t_1 <= 5e-158) {
tmp = NdChar / (2.0 - ((((Ec - mu) / KbT) - (Vef / KbT)) - (EDonor / 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 = 0.5d0 * (ndchar + nachar)
t_1 = (ndchar / (exp(((mu - ((ec - vef) - edonor)) / kbt)) + 1.0d0)) + (nachar / (exp(((((vef + ev) + eaccept) - mu) / kbt)) + 1.0d0))
if (t_1 <= (-5d-267)) then
tmp = t_0
else if (t_1 <= 5d-158) then
tmp = ndchar / (2.0d0 - ((((ec - mu) / kbt) - (vef / kbt)) - (edonor / 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 = 0.5 * (NdChar + NaChar);
double t_1 = (NdChar / (Math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)) + 1.0)) + (NaChar / (Math.exp(((((Vef + Ev) + EAccept) - mu) / KbT)) + 1.0));
double tmp;
if (t_1 <= -5e-267) {
tmp = t_0;
} else if (t_1 <= 5e-158) {
tmp = NdChar / (2.0 - ((((Ec - mu) / KbT) - (Vef / KbT)) - (EDonor / KbT)));
} else {
tmp = t_0;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = 0.5 * (NdChar + NaChar) t_1 = (NdChar / (math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)) + 1.0)) + (NaChar / (math.exp(((((Vef + Ev) + EAccept) - mu) / KbT)) + 1.0)) tmp = 0 if t_1 <= -5e-267: tmp = t_0 elif t_1 <= 5e-158: tmp = NdChar / (2.0 - ((((Ec - mu) / KbT) - (Vef / KbT)) - (EDonor / KbT))) else: tmp = t_0 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(0.5 * Float64(NdChar + NaChar)) t_1 = Float64(Float64(NdChar / Float64(exp(Float64(Float64(mu - Float64(Float64(Ec - Vef) - EDonor)) / KbT)) + 1.0)) + Float64(NaChar / Float64(exp(Float64(Float64(Float64(Float64(Vef + Ev) + EAccept) - mu) / KbT)) + 1.0))) tmp = 0.0 if (t_1 <= -5e-267) tmp = t_0; elseif (t_1 <= 5e-158) tmp = Float64(NdChar / Float64(2.0 - Float64(Float64(Float64(Float64(Ec - mu) / KbT) - Float64(Vef / KbT)) - Float64(EDonor / KbT)))); else tmp = t_0; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = 0.5 * (NdChar + NaChar); t_1 = (NdChar / (exp(((mu - ((Ec - Vef) - EDonor)) / KbT)) + 1.0)) + (NaChar / (exp(((((Vef + Ev) + EAccept) - mu) / KbT)) + 1.0)); tmp = 0.0; if (t_1 <= -5e-267) tmp = t_0; elseif (t_1 <= 5e-158) tmp = NdChar / (2.0 - ((((Ec - mu) / KbT) - (Vef / KbT)) - (EDonor / 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[(0.5 * N[(NdChar + NaChar), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NdChar / N[(N[Exp[N[(N[(mu - N[(N[(Ec - Vef), $MachinePrecision] - EDonor), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(N[Exp[N[(N[(N[(N[(Vef + Ev), $MachinePrecision] + EAccept), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$1, -5e-267], t$95$0, If[LessEqual[t$95$1, 5e-158], N[(NdChar / N[(2.0 - N[(N[(N[(N[(Ec - mu), $MachinePrecision] / KbT), $MachinePrecision] - N[(Vef / KbT), $MachinePrecision]), $MachinePrecision] - N[(EDonor / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$0]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := 0.5 \cdot \left(NdChar + NaChar\right)\\
t_1 := \frac{NdChar}{e^{\frac{mu - \left(\left(Ec - Vef\right) - EDonor\right)}{KbT}} + 1} + \frac{NaChar}{e^{\frac{\left(\left(Vef + Ev\right) + EAccept\right) - mu}{KbT}} + 1}\\
\mathbf{if}\;t\_1 \leq -5 \cdot 10^{-267}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;t\_1 \leq 5 \cdot 10^{-158}:\\
\;\;\;\;\frac{NdChar}{2 - \left(\left(\frac{Ec - mu}{KbT} - \frac{Vef}{KbT}\right) - \frac{EDonor}{KbT}\right)}\\
\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.9999999999999999e-267 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 KbT around inf
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6432.4
Applied rewrites32.4%
if -4.9999999999999999e-267 < (+.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
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
associate--l+N/A
sub-negN/A
associate-+r+N/A
mul-1-negN/A
associate-+r+N/A
lower-+.f64N/A
lower-+.f64N/A
mul-1-negN/A
sub-negN/A
lower--.f6487.5
Applied rewrites87.5%
Taylor expanded in Vef around inf
Applied rewrites51.9%
Taylor expanded in KbT around inf
Applied rewrites48.6%
Final simplification36.6%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (* 0.5 (+ NdChar NaChar)))
(t_1
(+
(/ NdChar (+ (exp (/ (- mu (- (- Ec Vef) EDonor)) KbT)) 1.0))
(/ NaChar (+ (exp (/ (- (+ (+ Vef Ev) EAccept) mu) KbT)) 1.0)))))
(if (<= t_1 -5e-267)
t_0
(if (<= t_1 2e-286)
(* 0.5 (* (* NaChar NaChar) (/ 1.0 (- 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 = 0.5 * (NdChar + NaChar);
double t_1 = (NdChar / (exp(((mu - ((Ec - Vef) - EDonor)) / KbT)) + 1.0)) + (NaChar / (exp(((((Vef + Ev) + EAccept) - mu) / KbT)) + 1.0));
double tmp;
if (t_1 <= -5e-267) {
tmp = t_0;
} else if (t_1 <= 2e-286) {
tmp = 0.5 * ((NaChar * NaChar) * (1.0 / (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 = 0.5d0 * (ndchar + nachar)
t_1 = (ndchar / (exp(((mu - ((ec - vef) - edonor)) / kbt)) + 1.0d0)) + (nachar / (exp(((((vef + ev) + eaccept) - mu) / kbt)) + 1.0d0))
if (t_1 <= (-5d-267)) then
tmp = t_0
else if (t_1 <= 2d-286) then
tmp = 0.5d0 * ((nachar * nachar) * (1.0d0 / (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 = 0.5 * (NdChar + NaChar);
double t_1 = (NdChar / (Math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)) + 1.0)) + (NaChar / (Math.exp(((((Vef + Ev) + EAccept) - mu) / KbT)) + 1.0));
double tmp;
if (t_1 <= -5e-267) {
tmp = t_0;
} else if (t_1 <= 2e-286) {
tmp = 0.5 * ((NaChar * NaChar) * (1.0 / (NaChar - NdChar)));
} else {
tmp = t_0;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = 0.5 * (NdChar + NaChar) t_1 = (NdChar / (math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)) + 1.0)) + (NaChar / (math.exp(((((Vef + Ev) + EAccept) - mu) / KbT)) + 1.0)) tmp = 0 if t_1 <= -5e-267: tmp = t_0 elif t_1 <= 2e-286: tmp = 0.5 * ((NaChar * NaChar) * (1.0 / (NaChar - NdChar))) else: tmp = t_0 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(0.5 * Float64(NdChar + NaChar)) t_1 = Float64(Float64(NdChar / Float64(exp(Float64(Float64(mu - Float64(Float64(Ec - Vef) - EDonor)) / KbT)) + 1.0)) + Float64(NaChar / Float64(exp(Float64(Float64(Float64(Float64(Vef + Ev) + EAccept) - mu) / KbT)) + 1.0))) tmp = 0.0 if (t_1 <= -5e-267) tmp = t_0; elseif (t_1 <= 2e-286) tmp = Float64(0.5 * Float64(Float64(NaChar * NaChar) * Float64(1.0 / 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 = 0.5 * (NdChar + NaChar); t_1 = (NdChar / (exp(((mu - ((Ec - Vef) - EDonor)) / KbT)) + 1.0)) + (NaChar / (exp(((((Vef + Ev) + EAccept) - mu) / KbT)) + 1.0)); tmp = 0.0; if (t_1 <= -5e-267) tmp = t_0; elseif (t_1 <= 2e-286) tmp = 0.5 * ((NaChar * NaChar) * (1.0 / (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[(0.5 * N[(NdChar + NaChar), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NdChar / N[(N[Exp[N[(N[(mu - N[(N[(Ec - Vef), $MachinePrecision] - EDonor), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(N[Exp[N[(N[(N[(N[(Vef + Ev), $MachinePrecision] + EAccept), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$1, -5e-267], t$95$0, If[LessEqual[t$95$1, 2e-286], N[(0.5 * N[(N[(NaChar * NaChar), $MachinePrecision] * N[(1.0 / N[(NaChar - NdChar), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$0]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := 0.5 \cdot \left(NdChar + NaChar\right)\\
t_1 := \frac{NdChar}{e^{\frac{mu - \left(\left(Ec - Vef\right) - EDonor\right)}{KbT}} + 1} + \frac{NaChar}{e^{\frac{\left(\left(Vef + Ev\right) + EAccept\right) - mu}{KbT}} + 1}\\
\mathbf{if}\;t\_1 \leq -5 \cdot 10^{-267}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;t\_1 \leq 2 \cdot 10^{-286}:\\
\;\;\;\;0.5 \cdot \left(\left(NaChar \cdot NaChar\right) \cdot \frac{1}{NaChar - NdChar}\right)\\
\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.9999999999999999e-267 or 2.0000000000000001e-286 < (+.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.1
Applied rewrites32.1%
if -4.9999999999999999e-267 < (+.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.0000000000000001e-286Initial program 100.0%
Taylor expanded in KbT around inf
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f642.6
Applied rewrites2.6%
Applied rewrites5.9%
Taylor expanded in NdChar around 0
Applied rewrites37.7%
Final simplification33.3%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0
(+
(/ NaChar (+ (exp (/ (- (+ Ev EAccept) mu) KbT)) 1.0))
(/ NdChar (+ (exp (/ (+ EDonor (- mu Ec)) KbT)) 1.0)))))
(if (<= mu -1.18e+116)
t_0
(if (<= mu 5.4e+122)
(+
(/ NaChar (+ (exp (/ (+ (+ Vef Ev) EAccept) KbT)) 1.0))
(/ NdChar (+ (exp (/ (+ EDonor (- Vef Ec)) 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((((Ev + EAccept) - mu) / KbT)) + 1.0)) + (NdChar / (exp(((EDonor + (mu - Ec)) / KbT)) + 1.0));
double tmp;
if (mu <= -1.18e+116) {
tmp = t_0;
} else if (mu <= 5.4e+122) {
tmp = (NaChar / (exp((((Vef + Ev) + EAccept) / KbT)) + 1.0)) + (NdChar / (exp(((EDonor + (Vef - Ec)) / 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((((ev + eaccept) - mu) / kbt)) + 1.0d0)) + (ndchar / (exp(((edonor + (mu - ec)) / kbt)) + 1.0d0))
if (mu <= (-1.18d+116)) then
tmp = t_0
else if (mu <= 5.4d+122) then
tmp = (nachar / (exp((((vef + ev) + eaccept) / kbt)) + 1.0d0)) + (ndchar / (exp(((edonor + (vef - ec)) / 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((((Ev + EAccept) - mu) / KbT)) + 1.0)) + (NdChar / (Math.exp(((EDonor + (mu - Ec)) / KbT)) + 1.0));
double tmp;
if (mu <= -1.18e+116) {
tmp = t_0;
} else if (mu <= 5.4e+122) {
tmp = (NaChar / (Math.exp((((Vef + Ev) + EAccept) / KbT)) + 1.0)) + (NdChar / (Math.exp(((EDonor + (Vef - Ec)) / 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((((Ev + EAccept) - mu) / KbT)) + 1.0)) + (NdChar / (math.exp(((EDonor + (mu - Ec)) / KbT)) + 1.0)) tmp = 0 if mu <= -1.18e+116: tmp = t_0 elif mu <= 5.4e+122: tmp = (NaChar / (math.exp((((Vef + Ev) + EAccept) / KbT)) + 1.0)) + (NdChar / (math.exp(((EDonor + (Vef - Ec)) / 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 / Float64(exp(Float64(Float64(Float64(Ev + EAccept) - mu) / KbT)) + 1.0)) + Float64(NdChar / Float64(exp(Float64(Float64(EDonor + Float64(mu - Ec)) / KbT)) + 1.0))) tmp = 0.0 if (mu <= -1.18e+116) tmp = t_0; elseif (mu <= 5.4e+122) tmp = Float64(Float64(NaChar / Float64(exp(Float64(Float64(Float64(Vef + Ev) + EAccept) / KbT)) + 1.0)) + Float64(NdChar / Float64(exp(Float64(Float64(EDonor + Float64(Vef - Ec)) / 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((((Ev + EAccept) - mu) / KbT)) + 1.0)) + (NdChar / (exp(((EDonor + (mu - Ec)) / KbT)) + 1.0)); tmp = 0.0; if (mu <= -1.18e+116) tmp = t_0; elseif (mu <= 5.4e+122) tmp = (NaChar / (exp((((Vef + Ev) + EAccept) / KbT)) + 1.0)) + (NdChar / (exp(((EDonor + (Vef - Ec)) / 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 / N[(N[Exp[N[(N[(N[(Ev + EAccept), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(N[Exp[N[(N[(EDonor + N[(mu - Ec), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[mu, -1.18e+116], t$95$0, If[LessEqual[mu, 5.4e+122], N[(N[(NaChar / N[(N[Exp[N[(N[(N[(Vef + Ev), $MachinePrecision] + EAccept), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(N[Exp[N[(N[(EDonor + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$0]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{e^{\frac{\left(Ev + EAccept\right) - mu}{KbT}} + 1} + \frac{NdChar}{e^{\frac{EDonor + \left(mu - Ec\right)}{KbT}} + 1}\\
\mathbf{if}\;mu \leq -1.18 \cdot 10^{+116}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;mu \leq 5.4 \cdot 10^{+122}:\\
\;\;\;\;\frac{NaChar}{e^{\frac{\left(Vef + Ev\right) + EAccept}{KbT}} + 1} + \frac{NdChar}{e^{\frac{EDonor + \left(Vef - Ec\right)}{KbT}} + 1}\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if mu < -1.1799999999999999e116 or 5.3999999999999997e122 < mu Initial program 100.0%
Taylor expanded in Vef around 0
lower-+.f64N/A
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
lower--.f64N/A
lower-+.f64N/A
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
Applied rewrites91.1%
if -1.1799999999999999e116 < mu < 5.3999999999999997e122Initial program 100.0%
Taylor expanded in mu around 0
lower-+.f64N/A
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
lower-+.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
associate--l+N/A
lower-+.f64N/A
lower--.f6497.7
Applied rewrites97.7%
Final simplification95.8%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NaChar (+ (exp (/ (+ (+ Ev EAccept) (- Vef mu)) KbT)) 1.0))))
(if (<= mu -2.65e+162)
t_0
(if (<= mu 9.6e+169)
(+
(/ NaChar (+ (exp (/ (+ (+ Vef Ev) EAccept) KbT)) 1.0))
(/ NdChar (+ (exp (/ (+ EDonor (- Vef Ec)) 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((((Ev + EAccept) + (Vef - mu)) / KbT)) + 1.0);
double tmp;
if (mu <= -2.65e+162) {
tmp = t_0;
} else if (mu <= 9.6e+169) {
tmp = (NaChar / (exp((((Vef + Ev) + EAccept) / KbT)) + 1.0)) + (NdChar / (exp(((EDonor + (Vef - Ec)) / 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((((ev + eaccept) + (vef - mu)) / kbt)) + 1.0d0)
if (mu <= (-2.65d+162)) then
tmp = t_0
else if (mu <= 9.6d+169) then
tmp = (nachar / (exp((((vef + ev) + eaccept) / kbt)) + 1.0d0)) + (ndchar / (exp(((edonor + (vef - ec)) / 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((((Ev + EAccept) + (Vef - mu)) / KbT)) + 1.0);
double tmp;
if (mu <= -2.65e+162) {
tmp = t_0;
} else if (mu <= 9.6e+169) {
tmp = (NaChar / (Math.exp((((Vef + Ev) + EAccept) / KbT)) + 1.0)) + (NdChar / (Math.exp(((EDonor + (Vef - Ec)) / 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((((Ev + EAccept) + (Vef - mu)) / KbT)) + 1.0) tmp = 0 if mu <= -2.65e+162: tmp = t_0 elif mu <= 9.6e+169: tmp = (NaChar / (math.exp((((Vef + Ev) + EAccept) / KbT)) + 1.0)) + (NdChar / (math.exp(((EDonor + (Vef - Ec)) / 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(Float64(Float64(Ev + EAccept) + Float64(Vef - mu)) / KbT)) + 1.0)) tmp = 0.0 if (mu <= -2.65e+162) tmp = t_0; elseif (mu <= 9.6e+169) tmp = Float64(Float64(NaChar / Float64(exp(Float64(Float64(Float64(Vef + Ev) + EAccept) / KbT)) + 1.0)) + Float64(NdChar / Float64(exp(Float64(Float64(EDonor + Float64(Vef - Ec)) / 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((((Ev + EAccept) + (Vef - mu)) / KbT)) + 1.0); tmp = 0.0; if (mu <= -2.65e+162) tmp = t_0; elseif (mu <= 9.6e+169) tmp = (NaChar / (exp((((Vef + Ev) + EAccept) / KbT)) + 1.0)) + (NdChar / (exp(((EDonor + (Vef - Ec)) / 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[(N[(N[(Ev + EAccept), $MachinePrecision] + N[(Vef - mu), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[mu, -2.65e+162], t$95$0, If[LessEqual[mu, 9.6e+169], N[(N[(NaChar / N[(N[Exp[N[(N[(N[(Vef + Ev), $MachinePrecision] + EAccept), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(N[Exp[N[(N[(EDonor + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$0]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{e^{\frac{\left(Ev + EAccept\right) + \left(Vef - mu\right)}{KbT}} + 1}\\
\mathbf{if}\;mu \leq -2.65 \cdot 10^{+162}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;mu \leq 9.6 \cdot 10^{+169}:\\
\;\;\;\;\frac{NaChar}{e^{\frac{\left(Vef + Ev\right) + EAccept}{KbT}} + 1} + \frac{NdChar}{e^{\frac{EDonor + \left(Vef - Ec\right)}{KbT}} + 1}\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if mu < -2.6500000000000001e162 or 9.5999999999999994e169 < mu Initial program 100.0%
Taylor expanded in NdChar around 0
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
associate--l+N/A
sub-negN/A
associate-+r+N/A
mul-1-negN/A
associate-+r+N/A
lower-+.f64N/A
lower-+.f64N/A
mul-1-negN/A
sub-negN/A
lower--.f6473.5
Applied rewrites73.5%
if -2.6500000000000001e162 < mu < 9.5999999999999994e169Initial program 100.0%
Taylor expanded in mu around 0
lower-+.f64N/A
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
lower-+.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
associate--l+N/A
lower-+.f64N/A
lower--.f6495.2
Applied rewrites95.2%
Final simplification90.5%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NaChar (+ (exp (/ (+ (+ Ev EAccept) (- Vef mu)) KbT)) 1.0))))
(if (<= NaChar -2.4e-214)
t_0
(if (<= NaChar 1.7e-252)
(/ NdChar (+ (exp (/ EDonor KbT)) 1.0))
(if (<= NaChar 3.2e-166)
(/ NdChar (+ (exp (/ Ec (- 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((((Ev + EAccept) + (Vef - mu)) / KbT)) + 1.0);
double tmp;
if (NaChar <= -2.4e-214) {
tmp = t_0;
} else if (NaChar <= 1.7e-252) {
tmp = NdChar / (exp((EDonor / KbT)) + 1.0);
} else if (NaChar <= 3.2e-166) {
tmp = NdChar / (exp((Ec / -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((((ev + eaccept) + (vef - mu)) / kbt)) + 1.0d0)
if (nachar <= (-2.4d-214)) then
tmp = t_0
else if (nachar <= 1.7d-252) then
tmp = ndchar / (exp((edonor / kbt)) + 1.0d0)
else if (nachar <= 3.2d-166) then
tmp = ndchar / (exp((ec / -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((((Ev + EAccept) + (Vef - mu)) / KbT)) + 1.0);
double tmp;
if (NaChar <= -2.4e-214) {
tmp = t_0;
} else if (NaChar <= 1.7e-252) {
tmp = NdChar / (Math.exp((EDonor / KbT)) + 1.0);
} else if (NaChar <= 3.2e-166) {
tmp = NdChar / (Math.exp((Ec / -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((((Ev + EAccept) + (Vef - mu)) / KbT)) + 1.0) tmp = 0 if NaChar <= -2.4e-214: tmp = t_0 elif NaChar <= 1.7e-252: tmp = NdChar / (math.exp((EDonor / KbT)) + 1.0) elif NaChar <= 3.2e-166: tmp = NdChar / (math.exp((Ec / -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(Float64(Float64(Ev + EAccept) + Float64(Vef - mu)) / KbT)) + 1.0)) tmp = 0.0 if (NaChar <= -2.4e-214) tmp = t_0; elseif (NaChar <= 1.7e-252) tmp = Float64(NdChar / Float64(exp(Float64(EDonor / KbT)) + 1.0)); elseif (NaChar <= 3.2e-166) tmp = Float64(NdChar / Float64(exp(Float64(Ec / Float64(-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((((Ev + EAccept) + (Vef - mu)) / KbT)) + 1.0); tmp = 0.0; if (NaChar <= -2.4e-214) tmp = t_0; elseif (NaChar <= 1.7e-252) tmp = NdChar / (exp((EDonor / KbT)) + 1.0); elseif (NaChar <= 3.2e-166) tmp = NdChar / (exp((Ec / -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[(N[(N[(Ev + EAccept), $MachinePrecision] + N[(Vef - mu), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -2.4e-214], t$95$0, If[LessEqual[NaChar, 1.7e-252], N[(NdChar / N[(N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 3.2e-166], N[(NdChar / N[(N[Exp[N[(Ec / (-KbT)), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], t$95$0]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{e^{\frac{\left(Ev + EAccept\right) + \left(Vef - mu\right)}{KbT}} + 1}\\
\mathbf{if}\;NaChar \leq -2.4 \cdot 10^{-214}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;NaChar \leq 1.7 \cdot 10^{-252}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{EDonor}{KbT}} + 1}\\
\mathbf{elif}\;NaChar \leq 3.2 \cdot 10^{-166}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{Ec}{-KbT}} + 1}\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if NaChar < -2.4000000000000002e-214 or 3.20000000000000001e-166 < NaChar Initial program 100.0%
Taylor expanded in NdChar around 0
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
associate--l+N/A
sub-negN/A
associate-+r+N/A
mul-1-negN/A
associate-+r+N/A
lower-+.f64N/A
lower-+.f64N/A
mul-1-negN/A
sub-negN/A
lower--.f6470.1
Applied rewrites70.1%
if -2.4000000000000002e-214 < NaChar < 1.7e-252Initial program 100.0%
Taylor expanded in NdChar around inf
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
associate--l+N/A
sub-negN/A
associate-+r+N/A
mul-1-negN/A
associate-+r+N/A
lower-+.f64N/A
lower-+.f64N/A
mul-1-negN/A
sub-negN/A
lower--.f6484.4
Applied rewrites84.4%
Taylor expanded in EDonor around inf
Applied rewrites62.1%
if 1.7e-252 < NaChar < 3.20000000000000001e-166Initial program 99.9%
Taylor expanded in NdChar around inf
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
associate--l+N/A
sub-negN/A
associate-+r+N/A
mul-1-negN/A
associate-+r+N/A
lower-+.f64N/A
lower-+.f64N/A
mul-1-negN/A
sub-negN/A
lower--.f6495.5
Applied rewrites95.5%
Taylor expanded in Ec around inf
Applied rewrites71.9%
Final simplification69.0%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NdChar (+ (exp (/ Vef KbT)) 1.0))))
(if (<= Vef -3.55e+19)
t_0
(if (<= Vef -1.52e-226)
(* 0.5 (+ NdChar NaChar))
(if (<= Vef 9.8e-289)
(/ NdChar (+ (exp (/ EDonor KbT)) 1.0))
(if (<= Vef 8.5e+25) (/ NdChar (+ (exp (/ Ec (- 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((Vef / KbT)) + 1.0);
double tmp;
if (Vef <= -3.55e+19) {
tmp = t_0;
} else if (Vef <= -1.52e-226) {
tmp = 0.5 * (NdChar + NaChar);
} else if (Vef <= 9.8e-289) {
tmp = NdChar / (exp((EDonor / KbT)) + 1.0);
} else if (Vef <= 8.5e+25) {
tmp = NdChar / (exp((Ec / -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((vef / kbt)) + 1.0d0)
if (vef <= (-3.55d+19)) then
tmp = t_0
else if (vef <= (-1.52d-226)) then
tmp = 0.5d0 * (ndchar + nachar)
else if (vef <= 9.8d-289) then
tmp = ndchar / (exp((edonor / kbt)) + 1.0d0)
else if (vef <= 8.5d+25) then
tmp = ndchar / (exp((ec / -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((Vef / KbT)) + 1.0);
double tmp;
if (Vef <= -3.55e+19) {
tmp = t_0;
} else if (Vef <= -1.52e-226) {
tmp = 0.5 * (NdChar + NaChar);
} else if (Vef <= 9.8e-289) {
tmp = NdChar / (Math.exp((EDonor / KbT)) + 1.0);
} else if (Vef <= 8.5e+25) {
tmp = NdChar / (Math.exp((Ec / -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((Vef / KbT)) + 1.0) tmp = 0 if Vef <= -3.55e+19: tmp = t_0 elif Vef <= -1.52e-226: tmp = 0.5 * (NdChar + NaChar) elif Vef <= 9.8e-289: tmp = NdChar / (math.exp((EDonor / KbT)) + 1.0) elif Vef <= 8.5e+25: tmp = NdChar / (math.exp((Ec / -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(Vef / KbT)) + 1.0)) tmp = 0.0 if (Vef <= -3.55e+19) tmp = t_0; elseif (Vef <= -1.52e-226) tmp = Float64(0.5 * Float64(NdChar + NaChar)); elseif (Vef <= 9.8e-289) tmp = Float64(NdChar / Float64(exp(Float64(EDonor / KbT)) + 1.0)); elseif (Vef <= 8.5e+25) tmp = Float64(NdChar / Float64(exp(Float64(Ec / Float64(-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((Vef / KbT)) + 1.0); tmp = 0.0; if (Vef <= -3.55e+19) tmp = t_0; elseif (Vef <= -1.52e-226) tmp = 0.5 * (NdChar + NaChar); elseif (Vef <= 9.8e-289) tmp = NdChar / (exp((EDonor / KbT)) + 1.0); elseif (Vef <= 8.5e+25) tmp = NdChar / (exp((Ec / -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[(Vef / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[Vef, -3.55e+19], t$95$0, If[LessEqual[Vef, -1.52e-226], N[(0.5 * N[(NdChar + NaChar), $MachinePrecision]), $MachinePrecision], If[LessEqual[Vef, 9.8e-289], N[(NdChar / N[(N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[Vef, 8.5e+25], N[(NdChar / N[(N[Exp[N[(Ec / (-KbT)), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], t$95$0]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{e^{\frac{Vef}{KbT}} + 1}\\
\mathbf{if}\;Vef \leq -3.55 \cdot 10^{+19}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;Vef \leq -1.52 \cdot 10^{-226}:\\
\;\;\;\;0.5 \cdot \left(NdChar + NaChar\right)\\
\mathbf{elif}\;Vef \leq 9.8 \cdot 10^{-289}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{EDonor}{KbT}} + 1}\\
\mathbf{elif}\;Vef \leq 8.5 \cdot 10^{+25}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{Ec}{-KbT}} + 1}\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if Vef < -3.55e19 or 8.5000000000000007e25 < Vef Initial program 100.0%
Taylor expanded in NdChar around inf
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
associate--l+N/A
sub-negN/A
associate-+r+N/A
mul-1-negN/A
associate-+r+N/A
lower-+.f64N/A
lower-+.f64N/A
mul-1-negN/A
sub-negN/A
lower--.f6467.6
Applied rewrites67.6%
Taylor expanded in Vef around inf
Applied rewrites56.5%
if -3.55e19 < Vef < -1.52000000000000004e-226Initial program 100.0%
Taylor expanded in KbT around inf
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6435.7
Applied rewrites35.7%
if -1.52000000000000004e-226 < Vef < 9.80000000000000016e-289Initial program 100.0%
Taylor expanded in NdChar around inf
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
associate--l+N/A
sub-negN/A
associate-+r+N/A
mul-1-negN/A
associate-+r+N/A
lower-+.f64N/A
lower-+.f64N/A
mul-1-negN/A
sub-negN/A
lower--.f6459.7
Applied rewrites59.7%
Taylor expanded in EDonor around inf
Applied rewrites57.9%
if 9.80000000000000016e-289 < Vef < 8.5000000000000007e25Initial program 100.0%
Taylor expanded in NdChar around inf
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
associate--l+N/A
sub-negN/A
associate-+r+N/A
mul-1-negN/A
associate-+r+N/A
lower-+.f64N/A
lower-+.f64N/A
mul-1-negN/A
sub-negN/A
lower--.f6459.1
Applied rewrites59.1%
Taylor expanded in Ec around inf
Applied rewrites45.3%
Final simplification49.6%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (<= NaChar -2.55e-214)
(/ NaChar (+ (exp (/ (- (+ Ev EAccept) mu) KbT)) 1.0))
(if (<= NaChar 1.7e-252)
(/ NdChar (+ (exp (/ EDonor KbT)) 1.0))
(if (<= NaChar 2e-139)
(/ NdChar (+ (exp (/ Ec (- KbT))) 1.0))
(/ NaChar (+ (exp (/ (+ Ev (+ Vef 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 (NaChar <= -2.55e-214) {
tmp = NaChar / (exp((((Ev + EAccept) - mu) / KbT)) + 1.0);
} else if (NaChar <= 1.7e-252) {
tmp = NdChar / (exp((EDonor / KbT)) + 1.0);
} else if (NaChar <= 2e-139) {
tmp = NdChar / (exp((Ec / -KbT)) + 1.0);
} else {
tmp = NaChar / (exp(((Ev + (Vef + 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 (nachar <= (-2.55d-214)) then
tmp = nachar / (exp((((ev + eaccept) - mu) / kbt)) + 1.0d0)
else if (nachar <= 1.7d-252) then
tmp = ndchar / (exp((edonor / kbt)) + 1.0d0)
else if (nachar <= 2d-139) then
tmp = ndchar / (exp((ec / -kbt)) + 1.0d0)
else
tmp = nachar / (exp(((ev + (vef + 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 (NaChar <= -2.55e-214) {
tmp = NaChar / (Math.exp((((Ev + EAccept) - mu) / KbT)) + 1.0);
} else if (NaChar <= 1.7e-252) {
tmp = NdChar / (Math.exp((EDonor / KbT)) + 1.0);
} else if (NaChar <= 2e-139) {
tmp = NdChar / (Math.exp((Ec / -KbT)) + 1.0);
} else {
tmp = NaChar / (Math.exp(((Ev + (Vef + EAccept)) / KbT)) + 1.0);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if NaChar <= -2.55e-214: tmp = NaChar / (math.exp((((Ev + EAccept) - mu) / KbT)) + 1.0) elif NaChar <= 1.7e-252: tmp = NdChar / (math.exp((EDonor / KbT)) + 1.0) elif NaChar <= 2e-139: tmp = NdChar / (math.exp((Ec / -KbT)) + 1.0) else: tmp = NaChar / (math.exp(((Ev + (Vef + EAccept)) / KbT)) + 1.0) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (NaChar <= -2.55e-214) tmp = Float64(NaChar / Float64(exp(Float64(Float64(Float64(Ev + EAccept) - mu) / KbT)) + 1.0)); elseif (NaChar <= 1.7e-252) tmp = Float64(NdChar / Float64(exp(Float64(EDonor / KbT)) + 1.0)); elseif (NaChar <= 2e-139) tmp = Float64(NdChar / Float64(exp(Float64(Ec / Float64(-KbT))) + 1.0)); else tmp = Float64(NaChar / Float64(exp(Float64(Float64(Ev + Float64(Vef + 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 (NaChar <= -2.55e-214) tmp = NaChar / (exp((((Ev + EAccept) - mu) / KbT)) + 1.0); elseif (NaChar <= 1.7e-252) tmp = NdChar / (exp((EDonor / KbT)) + 1.0); elseif (NaChar <= 2e-139) tmp = NdChar / (exp((Ec / -KbT)) + 1.0); else tmp = NaChar / (exp(((Ev + (Vef + EAccept)) / KbT)) + 1.0); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[NaChar, -2.55e-214], N[(NaChar / N[(N[Exp[N[(N[(N[(Ev + EAccept), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 1.7e-252], N[(NdChar / N[(N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 2e-139], N[(NdChar / N[(N[Exp[N[(Ec / (-KbT)), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], N[(NaChar / N[(N[Exp[N[(N[(Ev + N[(Vef + EAccept), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NaChar \leq -2.55 \cdot 10^{-214}:\\
\;\;\;\;\frac{NaChar}{e^{\frac{\left(Ev + EAccept\right) - mu}{KbT}} + 1}\\
\mathbf{elif}\;NaChar \leq 1.7 \cdot 10^{-252}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{EDonor}{KbT}} + 1}\\
\mathbf{elif}\;NaChar \leq 2 \cdot 10^{-139}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{Ec}{-KbT}} + 1}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{e^{\frac{Ev + \left(Vef + EAccept\right)}{KbT}} + 1}\\
\end{array}
\end{array}
if NaChar < -2.54999999999999993e-214Initial program 100.0%
Taylor expanded in mu around 0
lower-+.f64N/A
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
lower-+.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
associate--l+N/A
lower-+.f64N/A
lower--.f6488.4
Applied rewrites88.4%
Taylor expanded in Vef around 0
lower-+.f64N/A
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
lower--.f64N/A
lower-+.f64N/A
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
lower--.f64N/A
+-commutativeN/A
lower-+.f6483.7
Applied rewrites83.7%
Taylor expanded in NaChar around inf
Applied rewrites63.1%
if -2.54999999999999993e-214 < NaChar < 1.7e-252Initial program 100.0%
Taylor expanded in NdChar around inf
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
associate--l+N/A
sub-negN/A
associate-+r+N/A
mul-1-negN/A
associate-+r+N/A
lower-+.f64N/A
lower-+.f64N/A
mul-1-negN/A
sub-negN/A
lower--.f6484.4
Applied rewrites84.4%
Taylor expanded in EDonor around inf
Applied rewrites62.1%
if 1.7e-252 < NaChar < 2.00000000000000006e-139Initial program 99.9%
Taylor expanded in NdChar around inf
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
associate--l+N/A
sub-negN/A
associate-+r+N/A
mul-1-negN/A
associate-+r+N/A
lower-+.f64N/A
lower-+.f64N/A
mul-1-negN/A
sub-negN/A
lower--.f6489.6
Applied rewrites89.6%
Taylor expanded in Ec around inf
Applied rewrites67.9%
if 2.00000000000000006e-139 < NaChar Initial program 100.0%
Taylor expanded in mu around 0
lower-+.f64N/A
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
lower-+.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
associate--l+N/A
lower-+.f64N/A
lower--.f6483.3
Applied rewrites83.3%
Taylor expanded in NaChar around inf
Applied rewrites62.4%
Final simplification63.1%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NaChar (+ (exp (/ (+ Ev (+ Vef EAccept)) KbT)) 1.0))))
(if (<= NaChar -1e-213)
t_0
(if (<= NaChar 1.7e-252)
(/ NdChar (+ (exp (/ EDonor KbT)) 1.0))
(if (<= NaChar 2e-139) (/ NdChar (+ (exp (/ Ec (- 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(((Ev + (Vef + EAccept)) / KbT)) + 1.0);
double tmp;
if (NaChar <= -1e-213) {
tmp = t_0;
} else if (NaChar <= 1.7e-252) {
tmp = NdChar / (exp((EDonor / KbT)) + 1.0);
} else if (NaChar <= 2e-139) {
tmp = NdChar / (exp((Ec / -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(((ev + (vef + eaccept)) / kbt)) + 1.0d0)
if (nachar <= (-1d-213)) then
tmp = t_0
else if (nachar <= 1.7d-252) then
tmp = ndchar / (exp((edonor / kbt)) + 1.0d0)
else if (nachar <= 2d-139) then
tmp = ndchar / (exp((ec / -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(((Ev + (Vef + EAccept)) / KbT)) + 1.0);
double tmp;
if (NaChar <= -1e-213) {
tmp = t_0;
} else if (NaChar <= 1.7e-252) {
tmp = NdChar / (Math.exp((EDonor / KbT)) + 1.0);
} else if (NaChar <= 2e-139) {
tmp = NdChar / (Math.exp((Ec / -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(((Ev + (Vef + EAccept)) / KbT)) + 1.0) tmp = 0 if NaChar <= -1e-213: tmp = t_0 elif NaChar <= 1.7e-252: tmp = NdChar / (math.exp((EDonor / KbT)) + 1.0) elif NaChar <= 2e-139: tmp = NdChar / (math.exp((Ec / -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(Float64(Ev + Float64(Vef + EAccept)) / KbT)) + 1.0)) tmp = 0.0 if (NaChar <= -1e-213) tmp = t_0; elseif (NaChar <= 1.7e-252) tmp = Float64(NdChar / Float64(exp(Float64(EDonor / KbT)) + 1.0)); elseif (NaChar <= 2e-139) tmp = Float64(NdChar / Float64(exp(Float64(Ec / Float64(-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(((Ev + (Vef + EAccept)) / KbT)) + 1.0); tmp = 0.0; if (NaChar <= -1e-213) tmp = t_0; elseif (NaChar <= 1.7e-252) tmp = NdChar / (exp((EDonor / KbT)) + 1.0); elseif (NaChar <= 2e-139) tmp = NdChar / (exp((Ec / -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[(N[(Ev + N[(Vef + EAccept), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -1e-213], t$95$0, If[LessEqual[NaChar, 1.7e-252], N[(NdChar / N[(N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 2e-139], N[(NdChar / N[(N[Exp[N[(Ec / (-KbT)), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], t$95$0]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{e^{\frac{Ev + \left(Vef + EAccept\right)}{KbT}} + 1}\\
\mathbf{if}\;NaChar \leq -1 \cdot 10^{-213}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;NaChar \leq 1.7 \cdot 10^{-252}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{EDonor}{KbT}} + 1}\\
\mathbf{elif}\;NaChar \leq 2 \cdot 10^{-139}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{Ec}{-KbT}} + 1}\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if NaChar < -9.9999999999999995e-214 or 2.00000000000000006e-139 < NaChar Initial program 100.0%
Taylor expanded in mu around 0
lower-+.f64N/A
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
lower-+.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
associate--l+N/A
lower-+.f64N/A
lower--.f6486.0
Applied rewrites86.0%
Taylor expanded in NaChar around inf
Applied rewrites62.0%
if -9.9999999999999995e-214 < NaChar < 1.7e-252Initial program 100.0%
Taylor expanded in NdChar around inf
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
associate--l+N/A
sub-negN/A
associate-+r+N/A
mul-1-negN/A
associate-+r+N/A
lower-+.f64N/A
lower-+.f64N/A
mul-1-negN/A
sub-negN/A
lower--.f6484.4
Applied rewrites84.4%
Taylor expanded in EDonor around inf
Applied rewrites62.1%
if 1.7e-252 < NaChar < 2.00000000000000006e-139Initial program 99.9%
Taylor expanded in NdChar around inf
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
associate--l+N/A
sub-negN/A
associate-+r+N/A
mul-1-negN/A
associate-+r+N/A
lower-+.f64N/A
lower-+.f64N/A
mul-1-negN/A
sub-negN/A
lower--.f6489.6
Applied rewrites89.6%
Taylor expanded in Ec around inf
Applied rewrites67.9%
Final simplification62.6%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NaChar (+ (exp (/ (+ (+ Ev EAccept) (- Vef mu)) KbT)) 1.0))))
(if (<= NaChar -1.6e-29)
t_0
(if (<= NaChar 0.32)
(/ NdChar (+ (exp (/ (+ (- mu Ec) (+ Vef EDonor)) 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((((Ev + EAccept) + (Vef - mu)) / KbT)) + 1.0);
double tmp;
if (NaChar <= -1.6e-29) {
tmp = t_0;
} else if (NaChar <= 0.32) {
tmp = NdChar / (exp((((mu - Ec) + (Vef + EDonor)) / 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((((ev + eaccept) + (vef - mu)) / kbt)) + 1.0d0)
if (nachar <= (-1.6d-29)) then
tmp = t_0
else if (nachar <= 0.32d0) then
tmp = ndchar / (exp((((mu - ec) + (vef + edonor)) / 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((((Ev + EAccept) + (Vef - mu)) / KbT)) + 1.0);
double tmp;
if (NaChar <= -1.6e-29) {
tmp = t_0;
} else if (NaChar <= 0.32) {
tmp = NdChar / (Math.exp((((mu - Ec) + (Vef + EDonor)) / 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((((Ev + EAccept) + (Vef - mu)) / KbT)) + 1.0) tmp = 0 if NaChar <= -1.6e-29: tmp = t_0 elif NaChar <= 0.32: tmp = NdChar / (math.exp((((mu - Ec) + (Vef + EDonor)) / 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(Float64(Float64(Ev + EAccept) + Float64(Vef - mu)) / KbT)) + 1.0)) tmp = 0.0 if (NaChar <= -1.6e-29) tmp = t_0; elseif (NaChar <= 0.32) tmp = Float64(NdChar / Float64(exp(Float64(Float64(Float64(mu - Ec) + Float64(Vef + EDonor)) / 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((((Ev + EAccept) + (Vef - mu)) / KbT)) + 1.0); tmp = 0.0; if (NaChar <= -1.6e-29) tmp = t_0; elseif (NaChar <= 0.32) tmp = NdChar / (exp((((mu - Ec) + (Vef + EDonor)) / 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[(N[(N[(Ev + EAccept), $MachinePrecision] + N[(Vef - mu), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -1.6e-29], t$95$0, If[LessEqual[NaChar, 0.32], N[(NdChar / N[(N[Exp[N[(N[(N[(mu - Ec), $MachinePrecision] + N[(Vef + EDonor), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], t$95$0]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{e^{\frac{\left(Ev + EAccept\right) + \left(Vef - mu\right)}{KbT}} + 1}\\
\mathbf{if}\;NaChar \leq -1.6 \cdot 10^{-29}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;NaChar \leq 0.32:\\
\;\;\;\;\frac{NdChar}{e^{\frac{\left(mu - Ec\right) + \left(Vef + EDonor\right)}{KbT}} + 1}\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if NaChar < -1.6e-29 or 0.320000000000000007 < NaChar Initial program 100.0%
Taylor expanded in NdChar around 0
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
associate--l+N/A
sub-negN/A
associate-+r+N/A
mul-1-negN/A
associate-+r+N/A
lower-+.f64N/A
lower-+.f64N/A
mul-1-negN/A
sub-negN/A
lower--.f6476.9
Applied rewrites76.9%
if -1.6e-29 < NaChar < 0.320000000000000007Initial program 100.0%
Taylor expanded in NdChar around inf
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
associate--l+N/A
sub-negN/A
associate-+r+N/A
mul-1-negN/A
associate-+r+N/A
lower-+.f64N/A
lower-+.f64N/A
mul-1-negN/A
sub-negN/A
lower--.f6477.7
Applied rewrites77.7%
Final simplification77.3%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NdChar (+ (exp (/ Vef KbT)) 1.0))))
(if (<= Vef -3.55e+19)
t_0
(if (<= Vef -1.52e-226)
(* 0.5 (+ NdChar NaChar))
(if (<= Vef 3.7e+26) (/ NdChar (+ (exp (/ EDonor 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((Vef / KbT)) + 1.0);
double tmp;
if (Vef <= -3.55e+19) {
tmp = t_0;
} else if (Vef <= -1.52e-226) {
tmp = 0.5 * (NdChar + NaChar);
} else if (Vef <= 3.7e+26) {
tmp = NdChar / (exp((EDonor / 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((vef / kbt)) + 1.0d0)
if (vef <= (-3.55d+19)) then
tmp = t_0
else if (vef <= (-1.52d-226)) then
tmp = 0.5d0 * (ndchar + nachar)
else if (vef <= 3.7d+26) then
tmp = ndchar / (exp((edonor / 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((Vef / KbT)) + 1.0);
double tmp;
if (Vef <= -3.55e+19) {
tmp = t_0;
} else if (Vef <= -1.52e-226) {
tmp = 0.5 * (NdChar + NaChar);
} else if (Vef <= 3.7e+26) {
tmp = NdChar / (Math.exp((EDonor / 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((Vef / KbT)) + 1.0) tmp = 0 if Vef <= -3.55e+19: tmp = t_0 elif Vef <= -1.52e-226: tmp = 0.5 * (NdChar + NaChar) elif Vef <= 3.7e+26: tmp = NdChar / (math.exp((EDonor / 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(Vef / KbT)) + 1.0)) tmp = 0.0 if (Vef <= -3.55e+19) tmp = t_0; elseif (Vef <= -1.52e-226) tmp = Float64(0.5 * Float64(NdChar + NaChar)); elseif (Vef <= 3.7e+26) tmp = Float64(NdChar / Float64(exp(Float64(EDonor / 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((Vef / KbT)) + 1.0); tmp = 0.0; if (Vef <= -3.55e+19) tmp = t_0; elseif (Vef <= -1.52e-226) tmp = 0.5 * (NdChar + NaChar); elseif (Vef <= 3.7e+26) tmp = NdChar / (exp((EDonor / 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[(Vef / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[Vef, -3.55e+19], t$95$0, If[LessEqual[Vef, -1.52e-226], N[(0.5 * N[(NdChar + NaChar), $MachinePrecision]), $MachinePrecision], If[LessEqual[Vef, 3.7e+26], N[(NdChar / N[(N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], t$95$0]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{e^{\frac{Vef}{KbT}} + 1}\\
\mathbf{if}\;Vef \leq -3.55 \cdot 10^{+19}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;Vef \leq -1.52 \cdot 10^{-226}:\\
\;\;\;\;0.5 \cdot \left(NdChar + NaChar\right)\\
\mathbf{elif}\;Vef \leq 3.7 \cdot 10^{+26}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{EDonor}{KbT}} + 1}\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if Vef < -3.55e19 or 3.69999999999999988e26 < Vef Initial program 100.0%
Taylor expanded in NdChar around inf
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
associate--l+N/A
sub-negN/A
associate-+r+N/A
mul-1-negN/A
associate-+r+N/A
lower-+.f64N/A
lower-+.f64N/A
mul-1-negN/A
sub-negN/A
lower--.f6467.6
Applied rewrites67.6%
Taylor expanded in Vef around inf
Applied rewrites56.5%
if -3.55e19 < Vef < -1.52000000000000004e-226Initial program 100.0%
Taylor expanded in KbT around inf
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6435.7
Applied rewrites35.7%
if -1.52000000000000004e-226 < Vef < 3.69999999999999988e26Initial program 100.0%
Taylor expanded in NdChar around inf
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
associate--l+N/A
sub-negN/A
associate-+r+N/A
mul-1-negN/A
associate-+r+N/A
lower-+.f64N/A
lower-+.f64N/A
mul-1-negN/A
sub-negN/A
lower--.f6459.2
Applied rewrites59.2%
Taylor expanded in EDonor around inf
Applied rewrites41.3%
Final simplification47.3%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (if (<= NaChar -8.5e-128) (* NaChar 0.5) (if (<= NaChar 2.6e-139) (* NdChar 0.5) (* NaChar 0.5))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (NaChar <= -8.5e-128) {
tmp = NaChar * 0.5;
} else if (NaChar <= 2.6e-139) {
tmp = NdChar * 0.5;
} else {
tmp = NaChar * 0.5;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if (nachar <= (-8.5d-128)) then
tmp = nachar * 0.5d0
else if (nachar <= 2.6d-139) then
tmp = ndchar * 0.5d0
else
tmp = nachar * 0.5d0
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (NaChar <= -8.5e-128) {
tmp = NaChar * 0.5;
} else if (NaChar <= 2.6e-139) {
tmp = NdChar * 0.5;
} else {
tmp = NaChar * 0.5;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if NaChar <= -8.5e-128: tmp = NaChar * 0.5 elif NaChar <= 2.6e-139: tmp = NdChar * 0.5 else: tmp = NaChar * 0.5 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (NaChar <= -8.5e-128) tmp = Float64(NaChar * 0.5); elseif (NaChar <= 2.6e-139) tmp = Float64(NdChar * 0.5); else tmp = Float64(NaChar * 0.5); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (NaChar <= -8.5e-128) tmp = NaChar * 0.5; elseif (NaChar <= 2.6e-139) tmp = NdChar * 0.5; else tmp = NaChar * 0.5; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[NaChar, -8.5e-128], N[(NaChar * 0.5), $MachinePrecision], If[LessEqual[NaChar, 2.6e-139], N[(NdChar * 0.5), $MachinePrecision], N[(NaChar * 0.5), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NaChar \leq -8.5 \cdot 10^{-128}:\\
\;\;\;\;NaChar \cdot 0.5\\
\mathbf{elif}\;NaChar \leq 2.6 \cdot 10^{-139}:\\
\;\;\;\;NdChar \cdot 0.5\\
\mathbf{else}:\\
\;\;\;\;NaChar \cdot 0.5\\
\end{array}
\end{array}
if NaChar < -8.4999999999999996e-128 or 2.5999999999999998e-139 < NaChar Initial program 100.0%
Taylor expanded in KbT around inf
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6425.4
Applied rewrites25.4%
Taylor expanded in NaChar around inf
Applied rewrites21.7%
if -8.4999999999999996e-128 < NaChar < 2.5999999999999998e-139Initial program 100.0%
Taylor expanded in NdChar around inf
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
associate--l+N/A
sub-negN/A
associate-+r+N/A
mul-1-negN/A
associate-+r+N/A
lower-+.f64N/A
lower-+.f64N/A
mul-1-negN/A
sub-negN/A
lower--.f6484.2
Applied rewrites84.2%
Taylor expanded in KbT around inf
Applied rewrites26.3%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (* 0.5 (+ NdChar NaChar)))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return 0.5 * (NdChar + NaChar);
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
code = 0.5d0 * (ndchar + nachar)
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return 0.5 * (NdChar + NaChar);
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return 0.5 * (NdChar + NaChar)
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(0.5 * Float64(NdChar + NaChar)) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.5 * (NdChar + NaChar); end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(0.5 * N[(NdChar + NaChar), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
0.5 \cdot \left(NdChar + NaChar\right)
\end{array}
Initial program 100.0%
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 (* NaChar 0.5))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return NaChar * 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 * 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 * 0.5;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return NaChar * 0.5
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(NaChar * 0.5) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = NaChar * 0.5; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(NaChar * 0.5), $MachinePrecision]
\begin{array}{l}
\\
NaChar \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%
Taylor expanded in NaChar around inf
Applied rewrites17.0%
herbie shell --seed 2024221
(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))))))