
(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 22 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 (+ EDonor (- Vef Ec))) 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 + (EDonor + (Vef - Ec))) / 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 + (edonor + (vef - ec))) / 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 + (EDonor + (Vef - Ec))) / 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 + (EDonor + (Vef - Ec))) / 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(EDonor + Float64(Vef - Ec))) / 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 + (EDonor + (Vef - Ec))) / 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[(EDonor + N[(Vef - Ec), $MachinePrecision]), $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(EDonor + \left(Vef - Ec\right)\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 (+ (- Vef mu) (+ Ev EAccept)))
(t_1
(+
(/ NdChar (+ (exp (/ (+ mu (+ EDonor (- Vef Ec))) KbT)) 1.0))
(/ NaChar (+ (exp (/ (- (+ (+ Vef Ev) EAccept) mu) KbT)) 1.0))))
(t_2 (/ NaChar (+ (exp (/ Ev KbT)) 1.0))))
(if (<= t_1 -5e-302)
(/ NdChar (+ (exp (/ mu KbT)) 1.0))
(if (<= t_1 0.0)
(/
NaChar
(-
2.0
(/ (fma -0.5 (/ (* t_0 t_0) KbT) (- (- mu Vef) (+ Ev EAccept))) KbT)))
(if (<= t_1 4e-69)
t_2
(if (<= t_1 3e+101)
(/ NdChar (+ (exp (/ Vef KbT)) 1.0))
(+ (* NdChar 0.5) 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 = (Vef - mu) + (Ev + EAccept);
double t_1 = (NdChar / (exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0)) + (NaChar / (exp(((((Vef + Ev) + EAccept) - mu) / KbT)) + 1.0));
double t_2 = NaChar / (exp((Ev / KbT)) + 1.0);
double tmp;
if (t_1 <= -5e-302) {
tmp = NdChar / (exp((mu / KbT)) + 1.0);
} else if (t_1 <= 0.0) {
tmp = NaChar / (2.0 - (fma(-0.5, ((t_0 * t_0) / KbT), ((mu - Vef) - (Ev + EAccept))) / KbT));
} else if (t_1 <= 4e-69) {
tmp = t_2;
} else if (t_1 <= 3e+101) {
tmp = NdChar / (exp((Vef / KbT)) + 1.0);
} else {
tmp = (NdChar * 0.5) + t_2;
}
return tmp;
}
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(Vef - mu) + Float64(Ev + EAccept)) t_1 = Float64(Float64(NdChar / Float64(exp(Float64(Float64(mu + Float64(EDonor + Float64(Vef - Ec))) / KbT)) + 1.0)) + Float64(NaChar / Float64(exp(Float64(Float64(Float64(Float64(Vef + Ev) + EAccept) - mu) / KbT)) + 1.0))) t_2 = Float64(NaChar / Float64(exp(Float64(Ev / KbT)) + 1.0)) tmp = 0.0 if (t_1 <= -5e-302) tmp = Float64(NdChar / Float64(exp(Float64(mu / KbT)) + 1.0)); elseif (t_1 <= 0.0) tmp = Float64(NaChar / Float64(2.0 - Float64(fma(-0.5, Float64(Float64(t_0 * t_0) / KbT), Float64(Float64(mu - Vef) - Float64(Ev + EAccept))) / KbT))); elseif (t_1 <= 4e-69) tmp = t_2; elseif (t_1 <= 3e+101) tmp = Float64(NdChar / Float64(exp(Float64(Vef / KbT)) + 1.0)); else tmp = Float64(Float64(NdChar * 0.5) + t_2); end return tmp end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(Vef - mu), $MachinePrecision] + N[(Ev + EAccept), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NdChar / N[(N[Exp[N[(N[(mu + N[(EDonor + N[(Vef - Ec), $MachinePrecision]), $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[(NaChar / N[(N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$1, -5e-302], N[(NdChar / N[(N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$1, 0.0], N[(NaChar / N[(2.0 - N[(N[(-0.5 * N[(N[(t$95$0 * t$95$0), $MachinePrecision] / KbT), $MachinePrecision] + N[(N[(mu - Vef), $MachinePrecision] - N[(Ev + EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$1, 4e-69], t$95$2, If[LessEqual[t$95$1, 3e+101], N[(NdChar / N[(N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar * 0.5), $MachinePrecision] + t$95$2), $MachinePrecision]]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(Vef - mu\right) + \left(Ev + EAccept\right)\\
t_1 := \frac{NdChar}{e^{\frac{mu + \left(EDonor + \left(Vef - Ec\right)\right)}{KbT}} + 1} + \frac{NaChar}{e^{\frac{\left(\left(Vef + Ev\right) + EAccept\right) - mu}{KbT}} + 1}\\
t_2 := \frac{NaChar}{e^{\frac{Ev}{KbT}} + 1}\\
\mathbf{if}\;t\_1 \leq -5 \cdot 10^{-302}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{mu}{KbT}} + 1}\\
\mathbf{elif}\;t\_1 \leq 0:\\
\;\;\;\;\frac{NaChar}{2 - \frac{\mathsf{fma}\left(-0.5, \frac{t\_0 \cdot t\_0}{KbT}, \left(mu - Vef\right) - \left(Ev + EAccept\right)\right)}{KbT}}\\
\mathbf{elif}\;t\_1 \leq 4 \cdot 10^{-69}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;t\_1 \leq 3 \cdot 10^{+101}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{Vef}{KbT}} + 1}\\
\mathbf{else}:\\
\;\;\;\;NdChar \cdot 0.5 + 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))))) < -5.00000000000000033e-302Initial program 100.0%
Taylor expanded in NdChar around inf
/-lowering-/.f64N/A
+-lowering-+.f64N/A
exp-lowering-exp.f64N/A
/-lowering-/.f64N/A
Simplified57.7%
Taylor expanded in mu around inf
/-lowering-/.f6442.0
Simplified42.0%
if -5.00000000000000033e-302 < (+.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 0
/-lowering-/.f64N/A
+-lowering-+.f64N/A
exp-lowering-exp.f64N/A
/-lowering-/.f64N/A
associate--l+N/A
+-lowering-+.f64N/A
sub-negN/A
associate-+r+N/A
mul-1-negN/A
+-lowering-+.f64N/A
mul-1-negN/A
sub-negN/A
--lowering--.f64100.0
Simplified100.0%
Taylor expanded in KbT around -inf
mul-1-negN/A
unsub-negN/A
--lowering--.f64N/A
/-lowering-/.f64N/A
Simplified93.1%
if 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))))) < 3.9999999999999999e-69Initial program 100.0%
Taylor expanded in NdChar around 0
/-lowering-/.f64N/A
+-lowering-+.f64N/A
exp-lowering-exp.f64N/A
/-lowering-/.f64N/A
associate--l+N/A
+-lowering-+.f64N/A
sub-negN/A
associate-+r+N/A
mul-1-negN/A
+-lowering-+.f64N/A
mul-1-negN/A
sub-negN/A
--lowering--.f6471.3
Simplified71.3%
Taylor expanded in Ev around inf
/-lowering-/.f6444.2
Simplified44.2%
if 3.9999999999999999e-69 < (+.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.99999999999999993e101Initial program 100.0%
Taylor expanded in NdChar around inf
/-lowering-/.f64N/A
+-lowering-+.f64N/A
exp-lowering-exp.f64N/A
/-lowering-/.f64N/A
Simplified68.5%
Taylor expanded in Vef around inf
/-lowering-/.f6452.8
Simplified52.8%
if 2.99999999999999993e101 < (+.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
*-commutativeN/A
*-lowering-*.f6471.6
Simplified71.6%
Taylor expanded in Ev around inf
Simplified54.2%
Final simplification54.2%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (+ (- Vef mu) (+ Ev EAccept)))
(t_1
(+
(/ NdChar (+ (exp (/ (+ mu (+ EDonor (- Vef Ec))) KbT)) 1.0))
(/ NaChar (+ (exp (/ (- (+ (+ Vef Ev) EAccept) mu) KbT)) 1.0))))
(t_2 (/ NaChar (+ (exp (/ Ev KbT)) 1.0))))
(if (<= t_1 -5e-302)
(/ NdChar (+ (exp (/ mu KbT)) 1.0))
(if (<= t_1 0.0)
(/
NaChar
(-
2.0
(/ (fma -0.5 (/ (* t_0 t_0) KbT) (- (- mu Vef) (+ Ev EAccept))) KbT)))
(if (<= t_1 4e-69)
t_2
(if (<= t_1 3e+101) (/ NdChar (+ (exp (/ Vef KbT)) 1.0)) t_2))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (Vef - mu) + (Ev + EAccept);
double t_1 = (NdChar / (exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0)) + (NaChar / (exp(((((Vef + Ev) + EAccept) - mu) / KbT)) + 1.0));
double t_2 = NaChar / (exp((Ev / KbT)) + 1.0);
double tmp;
if (t_1 <= -5e-302) {
tmp = NdChar / (exp((mu / KbT)) + 1.0);
} else if (t_1 <= 0.0) {
tmp = NaChar / (2.0 - (fma(-0.5, ((t_0 * t_0) / KbT), ((mu - Vef) - (Ev + EAccept))) / KbT));
} else if (t_1 <= 4e-69) {
tmp = t_2;
} else if (t_1 <= 3e+101) {
tmp = NdChar / (exp((Vef / KbT)) + 1.0);
} else {
tmp = t_2;
}
return tmp;
}
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(Vef - mu) + Float64(Ev + EAccept)) t_1 = Float64(Float64(NdChar / Float64(exp(Float64(Float64(mu + Float64(EDonor + Float64(Vef - Ec))) / KbT)) + 1.0)) + Float64(NaChar / Float64(exp(Float64(Float64(Float64(Float64(Vef + Ev) + EAccept) - mu) / KbT)) + 1.0))) t_2 = Float64(NaChar / Float64(exp(Float64(Ev / KbT)) + 1.0)) tmp = 0.0 if (t_1 <= -5e-302) tmp = Float64(NdChar / Float64(exp(Float64(mu / KbT)) + 1.0)); elseif (t_1 <= 0.0) tmp = Float64(NaChar / Float64(2.0 - Float64(fma(-0.5, Float64(Float64(t_0 * t_0) / KbT), Float64(Float64(mu - Vef) - Float64(Ev + EAccept))) / KbT))); elseif (t_1 <= 4e-69) tmp = t_2; elseif (t_1 <= 3e+101) tmp = Float64(NdChar / Float64(exp(Float64(Vef / KbT)) + 1.0)); else tmp = t_2; end return tmp end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(Vef - mu), $MachinePrecision] + N[(Ev + EAccept), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NdChar / N[(N[Exp[N[(N[(mu + N[(EDonor + N[(Vef - Ec), $MachinePrecision]), $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[(NaChar / N[(N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$1, -5e-302], N[(NdChar / N[(N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$1, 0.0], N[(NaChar / N[(2.0 - N[(N[(-0.5 * N[(N[(t$95$0 * t$95$0), $MachinePrecision] / KbT), $MachinePrecision] + N[(N[(mu - Vef), $MachinePrecision] - N[(Ev + EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$1, 4e-69], t$95$2, If[LessEqual[t$95$1, 3e+101], N[(NdChar / N[(N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], t$95$2]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(Vef - mu\right) + \left(Ev + EAccept\right)\\
t_1 := \frac{NdChar}{e^{\frac{mu + \left(EDonor + \left(Vef - Ec\right)\right)}{KbT}} + 1} + \frac{NaChar}{e^{\frac{\left(\left(Vef + Ev\right) + EAccept\right) - mu}{KbT}} + 1}\\
t_2 := \frac{NaChar}{e^{\frac{Ev}{KbT}} + 1}\\
\mathbf{if}\;t\_1 \leq -5 \cdot 10^{-302}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{mu}{KbT}} + 1}\\
\mathbf{elif}\;t\_1 \leq 0:\\
\;\;\;\;\frac{NaChar}{2 - \frac{\mathsf{fma}\left(-0.5, \frac{t\_0 \cdot t\_0}{KbT}, \left(mu - Vef\right) - \left(Ev + EAccept\right)\right)}{KbT}}\\
\mathbf{elif}\;t\_1 \leq 4 \cdot 10^{-69}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;t\_1 \leq 3 \cdot 10^{+101}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{Vef}{KbT}} + 1}\\
\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))))) < -5.00000000000000033e-302Initial program 100.0%
Taylor expanded in NdChar around inf
/-lowering-/.f64N/A
+-lowering-+.f64N/A
exp-lowering-exp.f64N/A
/-lowering-/.f64N/A
Simplified57.7%
Taylor expanded in mu around inf
/-lowering-/.f6442.0
Simplified42.0%
if -5.00000000000000033e-302 < (+.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 0
/-lowering-/.f64N/A
+-lowering-+.f64N/A
exp-lowering-exp.f64N/A
/-lowering-/.f64N/A
associate--l+N/A
+-lowering-+.f64N/A
sub-negN/A
associate-+r+N/A
mul-1-negN/A
+-lowering-+.f64N/A
mul-1-negN/A
sub-negN/A
--lowering--.f64100.0
Simplified100.0%
Taylor expanded in KbT around -inf
mul-1-negN/A
unsub-negN/A
--lowering--.f64N/A
/-lowering-/.f64N/A
Simplified93.1%
if 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))))) < 3.9999999999999999e-69 or 2.99999999999999993e101 < (+.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 NdChar around 0
/-lowering-/.f64N/A
+-lowering-+.f64N/A
exp-lowering-exp.f64N/A
/-lowering-/.f64N/A
associate--l+N/A
+-lowering-+.f64N/A
sub-negN/A
associate-+r+N/A
mul-1-negN/A
+-lowering-+.f64N/A
mul-1-negN/A
sub-negN/A
--lowering--.f6469.5
Simplified69.5%
Taylor expanded in Ev around inf
/-lowering-/.f6445.4
Simplified45.4%
if 3.9999999999999999e-69 < (+.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.99999999999999993e101Initial program 100.0%
Taylor expanded in NdChar around inf
/-lowering-/.f64N/A
+-lowering-+.f64N/A
exp-lowering-exp.f64N/A
/-lowering-/.f64N/A
Simplified68.5%
Taylor expanded in Vef around inf
/-lowering-/.f6452.8
Simplified52.8%
Final simplification52.9%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (+ (- Vef mu) (+ Ev EAccept)))
(t_1
(+
(/ NdChar (+ (exp (/ (+ mu (+ EDonor (- Vef Ec))) KbT)) 1.0))
(/ NaChar (+ (exp (/ (- (+ (+ Vef Ev) EAccept) mu) KbT)) 1.0))))
(t_2 (/ NaChar (+ (exp (/ Ev KbT)) 1.0))))
(if (<= t_1 -5e-302)
(/ NdChar (+ (exp (/ EDonor KbT)) 1.0))
(if (<= t_1 0.0)
(/
NaChar
(-
2.0
(/ (fma -0.5 (/ (* t_0 t_0) KbT) (- (- mu Vef) (+ Ev EAccept))) KbT)))
(if (<= t_1 4e-69)
t_2
(if (<= t_1 3e+101) (/ NdChar (+ (exp (/ Vef KbT)) 1.0)) t_2))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (Vef - mu) + (Ev + EAccept);
double t_1 = (NdChar / (exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0)) + (NaChar / (exp(((((Vef + Ev) + EAccept) - mu) / KbT)) + 1.0));
double t_2 = NaChar / (exp((Ev / KbT)) + 1.0);
double tmp;
if (t_1 <= -5e-302) {
tmp = NdChar / (exp((EDonor / KbT)) + 1.0);
} else if (t_1 <= 0.0) {
tmp = NaChar / (2.0 - (fma(-0.5, ((t_0 * t_0) / KbT), ((mu - Vef) - (Ev + EAccept))) / KbT));
} else if (t_1 <= 4e-69) {
tmp = t_2;
} else if (t_1 <= 3e+101) {
tmp = NdChar / (exp((Vef / KbT)) + 1.0);
} else {
tmp = t_2;
}
return tmp;
}
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(Vef - mu) + Float64(Ev + EAccept)) t_1 = Float64(Float64(NdChar / Float64(exp(Float64(Float64(mu + Float64(EDonor + Float64(Vef - Ec))) / KbT)) + 1.0)) + Float64(NaChar / Float64(exp(Float64(Float64(Float64(Float64(Vef + Ev) + EAccept) - mu) / KbT)) + 1.0))) t_2 = Float64(NaChar / Float64(exp(Float64(Ev / KbT)) + 1.0)) tmp = 0.0 if (t_1 <= -5e-302) tmp = Float64(NdChar / Float64(exp(Float64(EDonor / KbT)) + 1.0)); elseif (t_1 <= 0.0) tmp = Float64(NaChar / Float64(2.0 - Float64(fma(-0.5, Float64(Float64(t_0 * t_0) / KbT), Float64(Float64(mu - Vef) - Float64(Ev + EAccept))) / KbT))); elseif (t_1 <= 4e-69) tmp = t_2; elseif (t_1 <= 3e+101) tmp = Float64(NdChar / Float64(exp(Float64(Vef / KbT)) + 1.0)); else tmp = t_2; end return tmp end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(Vef - mu), $MachinePrecision] + N[(Ev + EAccept), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NdChar / N[(N[Exp[N[(N[(mu + N[(EDonor + N[(Vef - Ec), $MachinePrecision]), $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[(NaChar / N[(N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$1, -5e-302], N[(NdChar / N[(N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$1, 0.0], N[(NaChar / N[(2.0 - N[(N[(-0.5 * N[(N[(t$95$0 * t$95$0), $MachinePrecision] / KbT), $MachinePrecision] + N[(N[(mu - Vef), $MachinePrecision] - N[(Ev + EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$1, 4e-69], t$95$2, If[LessEqual[t$95$1, 3e+101], N[(NdChar / N[(N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], t$95$2]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(Vef - mu\right) + \left(Ev + EAccept\right)\\
t_1 := \frac{NdChar}{e^{\frac{mu + \left(EDonor + \left(Vef - Ec\right)\right)}{KbT}} + 1} + \frac{NaChar}{e^{\frac{\left(\left(Vef + Ev\right) + EAccept\right) - mu}{KbT}} + 1}\\
t_2 := \frac{NaChar}{e^{\frac{Ev}{KbT}} + 1}\\
\mathbf{if}\;t\_1 \leq -5 \cdot 10^{-302}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{EDonor}{KbT}} + 1}\\
\mathbf{elif}\;t\_1 \leq 0:\\
\;\;\;\;\frac{NaChar}{2 - \frac{\mathsf{fma}\left(-0.5, \frac{t\_0 \cdot t\_0}{KbT}, \left(mu - Vef\right) - \left(Ev + EAccept\right)\right)}{KbT}}\\
\mathbf{elif}\;t\_1 \leq 4 \cdot 10^{-69}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;t\_1 \leq 3 \cdot 10^{+101}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{Vef}{KbT}} + 1}\\
\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))))) < -5.00000000000000033e-302Initial program 100.0%
Taylor expanded in NdChar around inf
/-lowering-/.f64N/A
+-lowering-+.f64N/A
exp-lowering-exp.f64N/A
/-lowering-/.f64N/A
Simplified57.7%
Taylor expanded in EDonor around inf
/-lowering-/.f6439.4
Simplified39.4%
if -5.00000000000000033e-302 < (+.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 0
/-lowering-/.f64N/A
+-lowering-+.f64N/A
exp-lowering-exp.f64N/A
/-lowering-/.f64N/A
associate--l+N/A
+-lowering-+.f64N/A
sub-negN/A
associate-+r+N/A
mul-1-negN/A
+-lowering-+.f64N/A
mul-1-negN/A
sub-negN/A
--lowering--.f64100.0
Simplified100.0%
Taylor expanded in KbT around -inf
mul-1-negN/A
unsub-negN/A
--lowering--.f64N/A
/-lowering-/.f64N/A
Simplified93.1%
if 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))))) < 3.9999999999999999e-69 or 2.99999999999999993e101 < (+.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 NdChar around 0
/-lowering-/.f64N/A
+-lowering-+.f64N/A
exp-lowering-exp.f64N/A
/-lowering-/.f64N/A
associate--l+N/A
+-lowering-+.f64N/A
sub-negN/A
associate-+r+N/A
mul-1-negN/A
+-lowering-+.f64N/A
mul-1-negN/A
sub-negN/A
--lowering--.f6469.5
Simplified69.5%
Taylor expanded in Ev around inf
/-lowering-/.f6445.4
Simplified45.4%
if 3.9999999999999999e-69 < (+.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.99999999999999993e101Initial program 100.0%
Taylor expanded in NdChar around inf
/-lowering-/.f64N/A
+-lowering-+.f64N/A
exp-lowering-exp.f64N/A
/-lowering-/.f64N/A
Simplified68.5%
Taylor expanded in Vef around inf
/-lowering-/.f6452.8
Simplified52.8%
Final simplification51.9%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (+ (- Vef mu) (+ Ev EAccept)))
(t_1 (/ NdChar (+ (exp (/ EDonor KbT)) 1.0)))
(t_2
(+
(/ NdChar (+ (exp (/ (+ mu (+ EDonor (- Vef Ec))) KbT)) 1.0))
(/ NaChar (+ (exp (/ (- (+ (+ Vef Ev) EAccept) mu) KbT)) 1.0))))
(t_3 (/ NaChar (+ (exp (/ Ev KbT)) 1.0))))
(if (<= t_2 -5e-302)
t_1
(if (<= t_2 0.0)
(/
NaChar
(-
2.0
(/ (fma -0.5 (/ (* t_0 t_0) KbT) (- (- mu Vef) (+ Ev EAccept))) KbT)))
(if (<= t_2 4e-69) t_3 (if (<= t_2 3e+101) t_1 t_3))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (Vef - mu) + (Ev + EAccept);
double t_1 = NdChar / (exp((EDonor / KbT)) + 1.0);
double t_2 = (NdChar / (exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0)) + (NaChar / (exp(((((Vef + Ev) + EAccept) - mu) / KbT)) + 1.0));
double t_3 = NaChar / (exp((Ev / KbT)) + 1.0);
double tmp;
if (t_2 <= -5e-302) {
tmp = t_1;
} else if (t_2 <= 0.0) {
tmp = NaChar / (2.0 - (fma(-0.5, ((t_0 * t_0) / KbT), ((mu - Vef) - (Ev + EAccept))) / KbT));
} else if (t_2 <= 4e-69) {
tmp = t_3;
} else if (t_2 <= 3e+101) {
tmp = t_1;
} else {
tmp = t_3;
}
return tmp;
}
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(Vef - mu) + Float64(Ev + EAccept)) t_1 = Float64(NdChar / Float64(exp(Float64(EDonor / KbT)) + 1.0)) t_2 = Float64(Float64(NdChar / Float64(exp(Float64(Float64(mu + Float64(EDonor + Float64(Vef - Ec))) / KbT)) + 1.0)) + Float64(NaChar / Float64(exp(Float64(Float64(Float64(Float64(Vef + Ev) + EAccept) - mu) / KbT)) + 1.0))) t_3 = Float64(NaChar / Float64(exp(Float64(Ev / KbT)) + 1.0)) tmp = 0.0 if (t_2 <= -5e-302) tmp = t_1; elseif (t_2 <= 0.0) tmp = Float64(NaChar / Float64(2.0 - Float64(fma(-0.5, Float64(Float64(t_0 * t_0) / KbT), Float64(Float64(mu - Vef) - Float64(Ev + EAccept))) / KbT))); elseif (t_2 <= 4e-69) tmp = t_3; elseif (t_2 <= 3e+101) tmp = t_1; else tmp = t_3; end return tmp end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(Vef - mu), $MachinePrecision] + N[(Ev + EAccept), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(NdChar / N[(N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(N[(NdChar / N[(N[Exp[N[(N[(mu + N[(EDonor + N[(Vef - Ec), $MachinePrecision]), $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$3 = N[(NaChar / N[(N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$2, -5e-302], t$95$1, If[LessEqual[t$95$2, 0.0], N[(NaChar / N[(2.0 - N[(N[(-0.5 * N[(N[(t$95$0 * t$95$0), $MachinePrecision] / KbT), $MachinePrecision] + N[(N[(mu - Vef), $MachinePrecision] - N[(Ev + EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$2, 4e-69], t$95$3, If[LessEqual[t$95$2, 3e+101], t$95$1, t$95$3]]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(Vef - mu\right) + \left(Ev + EAccept\right)\\
t_1 := \frac{NdChar}{e^{\frac{EDonor}{KbT}} + 1}\\
t_2 := \frac{NdChar}{e^{\frac{mu + \left(EDonor + \left(Vef - Ec\right)\right)}{KbT}} + 1} + \frac{NaChar}{e^{\frac{\left(\left(Vef + Ev\right) + EAccept\right) - mu}{KbT}} + 1}\\
t_3 := \frac{NaChar}{e^{\frac{Ev}{KbT}} + 1}\\
\mathbf{if}\;t\_2 \leq -5 \cdot 10^{-302}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;t\_2 \leq 0:\\
\;\;\;\;\frac{NaChar}{2 - \frac{\mathsf{fma}\left(-0.5, \frac{t\_0 \cdot t\_0}{KbT}, \left(mu - Vef\right) - \left(Ev + EAccept\right)\right)}{KbT}}\\
\mathbf{elif}\;t\_2 \leq 4 \cdot 10^{-69}:\\
\;\;\;\;t\_3\\
\mathbf{elif}\;t\_2 \leq 3 \cdot 10^{+101}:\\
\;\;\;\;t\_1\\
\mathbf{else}:\\
\;\;\;\;t\_3\\
\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))))) < -5.00000000000000033e-302 or 3.9999999999999999e-69 < (+.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.99999999999999993e101Initial program 100.0%
Taylor expanded in NdChar around inf
/-lowering-/.f64N/A
+-lowering-+.f64N/A
exp-lowering-exp.f64N/A
/-lowering-/.f64N/A
Simplified60.8%
Taylor expanded in EDonor around inf
/-lowering-/.f6441.0
Simplified41.0%
if -5.00000000000000033e-302 < (+.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 0
/-lowering-/.f64N/A
+-lowering-+.f64N/A
exp-lowering-exp.f64N/A
/-lowering-/.f64N/A
associate--l+N/A
+-lowering-+.f64N/A
sub-negN/A
associate-+r+N/A
mul-1-negN/A
+-lowering-+.f64N/A
mul-1-negN/A
sub-negN/A
--lowering--.f64100.0
Simplified100.0%
Taylor expanded in KbT around -inf
mul-1-negN/A
unsub-negN/A
--lowering--.f64N/A
/-lowering-/.f64N/A
Simplified93.1%
if 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))))) < 3.9999999999999999e-69 or 2.99999999999999993e101 < (+.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 NdChar around 0
/-lowering-/.f64N/A
+-lowering-+.f64N/A
exp-lowering-exp.f64N/A
/-lowering-/.f64N/A
associate--l+N/A
+-lowering-+.f64N/A
sub-negN/A
associate-+r+N/A
mul-1-negN/A
+-lowering-+.f64N/A
mul-1-negN/A
sub-negN/A
--lowering--.f6469.5
Simplified69.5%
Taylor expanded in Ev around inf
/-lowering-/.f6445.4
Simplified45.4%
Final simplification50.7%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (+ (- Vef mu) (+ Ev EAccept)))
(t_1
(+
(/ NdChar (+ (exp (/ (+ mu (+ EDonor (- Vef Ec))) KbT)) 1.0))
(/ NaChar (+ (exp (/ (- (+ (+ Vef Ev) EAccept) mu) KbT)) 1.0)))))
(if (<= t_1 -5e-302)
(/ NdChar (+ (exp (/ mu KbT)) 1.0))
(if (<= t_1 0.0)
(/
NaChar
(-
2.0
(/ (fma -0.5 (/ (* t_0 t_0) KbT) (- (- mu Vef) (+ Ev EAccept))) KbT)))
(if (<= t_1 4e-69)
(/ NaChar (+ (exp (/ Ev KbT)) 1.0))
(+ (* NdChar 0.5) (/ NaChar (+ (exp (/ EAccept KbT)) 1.0))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (Vef - mu) + (Ev + EAccept);
double t_1 = (NdChar / (exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0)) + (NaChar / (exp(((((Vef + Ev) + EAccept) - mu) / KbT)) + 1.0));
double tmp;
if (t_1 <= -5e-302) {
tmp = NdChar / (exp((mu / KbT)) + 1.0);
} else if (t_1 <= 0.0) {
tmp = NaChar / (2.0 - (fma(-0.5, ((t_0 * t_0) / KbT), ((mu - Vef) - (Ev + EAccept))) / KbT));
} else if (t_1 <= 4e-69) {
tmp = NaChar / (exp((Ev / KbT)) + 1.0);
} else {
tmp = (NdChar * 0.5) + (NaChar / (exp((EAccept / KbT)) + 1.0));
}
return tmp;
}
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(Vef - mu) + Float64(Ev + EAccept)) t_1 = Float64(Float64(NdChar / Float64(exp(Float64(Float64(mu + Float64(EDonor + Float64(Vef - Ec))) / 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-302) tmp = Float64(NdChar / Float64(exp(Float64(mu / KbT)) + 1.0)); elseif (t_1 <= 0.0) tmp = Float64(NaChar / Float64(2.0 - Float64(fma(-0.5, Float64(Float64(t_0 * t_0) / KbT), Float64(Float64(mu - Vef) - Float64(Ev + EAccept))) / KbT))); elseif (t_1 <= 4e-69) tmp = Float64(NaChar / Float64(exp(Float64(Ev / KbT)) + 1.0)); else tmp = Float64(Float64(NdChar * 0.5) + Float64(NaChar / Float64(exp(Float64(EAccept / KbT)) + 1.0))); end return tmp end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(Vef - mu), $MachinePrecision] + N[(Ev + EAccept), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NdChar / N[(N[Exp[N[(N[(mu + N[(EDonor + N[(Vef - Ec), $MachinePrecision]), $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-302], N[(NdChar / N[(N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$1, 0.0], N[(NaChar / N[(2.0 - N[(N[(-0.5 * N[(N[(t$95$0 * t$95$0), $MachinePrecision] / KbT), $MachinePrecision] + N[(N[(mu - Vef), $MachinePrecision] - N[(Ev + EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$1, 4e-69], N[(NaChar / N[(N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar * 0.5), $MachinePrecision] + N[(NaChar / N[(N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(Vef - mu\right) + \left(Ev + EAccept\right)\\
t_1 := \frac{NdChar}{e^{\frac{mu + \left(EDonor + \left(Vef - Ec\right)\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^{-302}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{mu}{KbT}} + 1}\\
\mathbf{elif}\;t\_1 \leq 0:\\
\;\;\;\;\frac{NaChar}{2 - \frac{\mathsf{fma}\left(-0.5, \frac{t\_0 \cdot t\_0}{KbT}, \left(mu - Vef\right) - \left(Ev + EAccept\right)\right)}{KbT}}\\
\mathbf{elif}\;t\_1 \leq 4 \cdot 10^{-69}:\\
\;\;\;\;\frac{NaChar}{e^{\frac{Ev}{KbT}} + 1}\\
\mathbf{else}:\\
\;\;\;\;NdChar \cdot 0.5 + \frac{NaChar}{e^{\frac{EAccept}{KbT}} + 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))))) < -5.00000000000000033e-302Initial program 100.0%
Taylor expanded in NdChar around inf
/-lowering-/.f64N/A
+-lowering-+.f64N/A
exp-lowering-exp.f64N/A
/-lowering-/.f64N/A
Simplified57.7%
Taylor expanded in mu around inf
/-lowering-/.f6442.0
Simplified42.0%
if -5.00000000000000033e-302 < (+.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 0
/-lowering-/.f64N/A
+-lowering-+.f64N/A
exp-lowering-exp.f64N/A
/-lowering-/.f64N/A
associate--l+N/A
+-lowering-+.f64N/A
sub-negN/A
associate-+r+N/A
mul-1-negN/A
+-lowering-+.f64N/A
mul-1-negN/A
sub-negN/A
--lowering--.f64100.0
Simplified100.0%
Taylor expanded in KbT around -inf
mul-1-negN/A
unsub-negN/A
--lowering--.f64N/A
/-lowering-/.f64N/A
Simplified93.1%
if 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))))) < 3.9999999999999999e-69Initial program 100.0%
Taylor expanded in NdChar around 0
/-lowering-/.f64N/A
+-lowering-+.f64N/A
exp-lowering-exp.f64N/A
/-lowering-/.f64N/A
associate--l+N/A
+-lowering-+.f64N/A
sub-negN/A
associate-+r+N/A
mul-1-negN/A
+-lowering-+.f64N/A
mul-1-negN/A
sub-negN/A
--lowering--.f6471.3
Simplified71.3%
Taylor expanded in Ev around inf
/-lowering-/.f6444.2
Simplified44.2%
if 3.9999999999999999e-69 < (+.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
*-commutativeN/A
*-lowering-*.f6460.3
Simplified60.3%
Taylor expanded in EAccept around inf
Simplified49.2%
Final simplification52.8%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (+ (- Vef mu) (+ Ev EAccept)))
(t_1
(+
(/ NdChar (+ (exp (/ (+ mu (+ EDonor (- Vef Ec))) KbT)) 1.0))
(/ NaChar (+ (exp (/ (- (+ (+ Vef Ev) EAccept) mu) KbT)) 1.0)))))
(if (<= t_1 -2e-177)
(* 0.5 (+ NdChar NaChar))
(if (<= t_1 0.0)
(/
NaChar
(-
2.0
(/ (fma -0.5 (/ (* t_0 t_0) KbT) (- (- mu Vef) (+ Ev EAccept))) KbT)))
(/ NaChar (+ (exp (/ EAccept KbT)) 1.0))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (Vef - mu) + (Ev + EAccept);
double t_1 = (NdChar / (exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0)) + (NaChar / (exp(((((Vef + Ev) + EAccept) - mu) / KbT)) + 1.0));
double tmp;
if (t_1 <= -2e-177) {
tmp = 0.5 * (NdChar + NaChar);
} else if (t_1 <= 0.0) {
tmp = NaChar / (2.0 - (fma(-0.5, ((t_0 * t_0) / KbT), ((mu - Vef) - (Ev + EAccept))) / KbT));
} else {
tmp = NaChar / (exp((EAccept / KbT)) + 1.0);
}
return tmp;
}
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(Vef - mu) + Float64(Ev + EAccept)) t_1 = Float64(Float64(NdChar / Float64(exp(Float64(Float64(mu + Float64(EDonor + Float64(Vef - Ec))) / KbT)) + 1.0)) + Float64(NaChar / Float64(exp(Float64(Float64(Float64(Float64(Vef + Ev) + EAccept) - mu) / KbT)) + 1.0))) tmp = 0.0 if (t_1 <= -2e-177) tmp = Float64(0.5 * Float64(NdChar + NaChar)); elseif (t_1 <= 0.0) tmp = Float64(NaChar / Float64(2.0 - Float64(fma(-0.5, Float64(Float64(t_0 * t_0) / KbT), Float64(Float64(mu - Vef) - Float64(Ev + EAccept))) / KbT))); else tmp = Float64(NaChar / Float64(exp(Float64(EAccept / KbT)) + 1.0)); end return tmp end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(Vef - mu), $MachinePrecision] + N[(Ev + EAccept), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NdChar / N[(N[Exp[N[(N[(mu + N[(EDonor + N[(Vef - Ec), $MachinePrecision]), $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, -2e-177], N[(0.5 * N[(NdChar + NaChar), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$1, 0.0], N[(NaChar / N[(2.0 - N[(N[(-0.5 * N[(N[(t$95$0 * t$95$0), $MachinePrecision] / KbT), $MachinePrecision] + N[(N[(mu - Vef), $MachinePrecision] - N[(Ev + EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(NaChar / N[(N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(Vef - mu\right) + \left(Ev + EAccept\right)\\
t_1 := \frac{NdChar}{e^{\frac{mu + \left(EDonor + \left(Vef - Ec\right)\right)}{KbT}} + 1} + \frac{NaChar}{e^{\frac{\left(\left(Vef + Ev\right) + EAccept\right) - mu}{KbT}} + 1}\\
\mathbf{if}\;t\_1 \leq -2 \cdot 10^{-177}:\\
\;\;\;\;0.5 \cdot \left(NdChar + NaChar\right)\\
\mathbf{elif}\;t\_1 \leq 0:\\
\;\;\;\;\frac{NaChar}{2 - \frac{\mathsf{fma}\left(-0.5, \frac{t\_0 \cdot t\_0}{KbT}, \left(mu - Vef\right) - \left(Ev + EAccept\right)\right)}{KbT}}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{e^{\frac{EAccept}{KbT}} + 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.9999999999999999e-177Initial program 100.0%
Taylor expanded in KbT around inf
+-commutativeN/A
distribute-lft-outN/A
*-lowering-*.f64N/A
+-lowering-+.f6436.3
Simplified36.3%
if -1.9999999999999999e-177 < (+.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 0
/-lowering-/.f64N/A
+-lowering-+.f64N/A
exp-lowering-exp.f64N/A
/-lowering-/.f64N/A
associate--l+N/A
+-lowering-+.f64N/A
sub-negN/A
associate-+r+N/A
mul-1-negN/A
+-lowering-+.f64N/A
mul-1-negN/A
sub-negN/A
--lowering--.f6489.6
Simplified89.6%
Taylor expanded in KbT around -inf
mul-1-negN/A
unsub-negN/A
--lowering--.f64N/A
/-lowering-/.f64N/A
Simplified73.8%
if 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 NdChar around 0
/-lowering-/.f64N/A
+-lowering-+.f64N/A
exp-lowering-exp.f64N/A
/-lowering-/.f64N/A
associate--l+N/A
+-lowering-+.f64N/A
sub-negN/A
associate-+r+N/A
mul-1-negN/A
+-lowering-+.f64N/A
mul-1-negN/A
sub-negN/A
--lowering--.f6457.4
Simplified57.4%
Taylor expanded in EAccept around inf
/-lowering-/.f6438.9
Simplified38.9%
Final simplification45.2%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (+ (- Vef mu) (+ Ev EAccept)))
(t_1 (* 0.5 (+ NdChar NaChar)))
(t_2
(+
(/ NdChar (+ (exp (/ (+ mu (+ EDonor (- Vef Ec))) KbT)) 1.0))
(/ NaChar (+ (exp (/ (- (+ (+ Vef Ev) EAccept) mu) KbT)) 1.0)))))
(if (<= t_2 -2e-177)
t_1
(if (<= t_2 5e-251)
(/
NaChar
(-
2.0
(/ (fma -0.5 (/ (* t_0 t_0) KbT) (- (- mu Vef) (+ Ev EAccept))) KbT)))
t_1))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (Vef - mu) + (Ev + EAccept);
double t_1 = 0.5 * (NdChar + NaChar);
double t_2 = (NdChar / (exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0)) + (NaChar / (exp(((((Vef + Ev) + EAccept) - mu) / KbT)) + 1.0));
double tmp;
if (t_2 <= -2e-177) {
tmp = t_1;
} else if (t_2 <= 5e-251) {
tmp = NaChar / (2.0 - (fma(-0.5, ((t_0 * t_0) / KbT), ((mu - Vef) - (Ev + EAccept))) / KbT));
} else {
tmp = t_1;
}
return tmp;
}
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(Vef - mu) + Float64(Ev + EAccept)) t_1 = Float64(0.5 * Float64(NdChar + NaChar)) t_2 = Float64(Float64(NdChar / Float64(exp(Float64(Float64(mu + Float64(EDonor + Float64(Vef - Ec))) / KbT)) + 1.0)) + Float64(NaChar / Float64(exp(Float64(Float64(Float64(Float64(Vef + Ev) + EAccept) - mu) / KbT)) + 1.0))) tmp = 0.0 if (t_2 <= -2e-177) tmp = t_1; elseif (t_2 <= 5e-251) tmp = Float64(NaChar / Float64(2.0 - Float64(fma(-0.5, Float64(Float64(t_0 * t_0) / KbT), Float64(Float64(mu - Vef) - Float64(Ev + EAccept))) / KbT))); else tmp = t_1; end return tmp end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(Vef - mu), $MachinePrecision] + N[(Ev + EAccept), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(0.5 * N[(NdChar + NaChar), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(N[(NdChar / N[(N[Exp[N[(N[(mu + N[(EDonor + N[(Vef - Ec), $MachinePrecision]), $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$2, -2e-177], t$95$1, If[LessEqual[t$95$2, 5e-251], N[(NaChar / N[(2.0 - N[(N[(-0.5 * N[(N[(t$95$0 * t$95$0), $MachinePrecision] / KbT), $MachinePrecision] + N[(N[(mu - Vef), $MachinePrecision] - N[(Ev + EAccept), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$1]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(Vef - mu\right) + \left(Ev + EAccept\right)\\
t_1 := 0.5 \cdot \left(NdChar + NaChar\right)\\
t_2 := \frac{NdChar}{e^{\frac{mu + \left(EDonor + \left(Vef - Ec\right)\right)}{KbT}} + 1} + \frac{NaChar}{e^{\frac{\left(\left(Vef + Ev\right) + EAccept\right) - mu}{KbT}} + 1}\\
\mathbf{if}\;t\_2 \leq -2 \cdot 10^{-177}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;t\_2 \leq 5 \cdot 10^{-251}:\\
\;\;\;\;\frac{NaChar}{2 - \frac{\mathsf{fma}\left(-0.5, \frac{t\_0 \cdot t\_0}{KbT}, \left(mu - Vef\right) - \left(Ev + EAccept\right)\right)}{KbT}}\\
\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))))) < -1.9999999999999999e-177 or 5.0000000000000003e-251 < (+.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
+-commutativeN/A
distribute-lft-outN/A
*-lowering-*.f64N/A
+-lowering-+.f6435.0
Simplified35.0%
if -1.9999999999999999e-177 < (+.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.0000000000000003e-251Initial program 100.0%
Taylor expanded in NdChar around 0
/-lowering-/.f64N/A
+-lowering-+.f64N/A
exp-lowering-exp.f64N/A
/-lowering-/.f64N/A
associate--l+N/A
+-lowering-+.f64N/A
sub-negN/A
associate-+r+N/A
mul-1-negN/A
+-lowering-+.f64N/A
mul-1-negN/A
sub-negN/A
--lowering--.f6487.5
Simplified87.5%
Taylor expanded in KbT around -inf
mul-1-negN/A
unsub-negN/A
--lowering--.f64N/A
/-lowering-/.f64N/A
Simplified67.1%
Final simplification42.4%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (* 0.5 (+ NdChar NaChar)))
(t_1
(+
(/ NdChar (+ (exp (/ (+ mu (+ EDonor (- Vef Ec))) KbT)) 1.0))
(/ NaChar (+ (exp (/ (- (+ (+ Vef Ev) EAccept) mu) KbT)) 1.0)))))
(if (<= t_1 -2e-221)
t_0
(if (<= t_1 5e-251)
(/
NdChar
(+
2.0
(+ (/ EDonor KbT) (/ (fma (- mu Ec) KbT (* Vef KbT)) (* KbT 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 + (EDonor + (Vef - Ec))) / KbT)) + 1.0)) + (NaChar / (exp(((((Vef + Ev) + EAccept) - mu) / KbT)) + 1.0));
double tmp;
if (t_1 <= -2e-221) {
tmp = t_0;
} else if (t_1 <= 5e-251) {
tmp = NdChar / (2.0 + ((EDonor / KbT) + (fma((mu - Ec), KbT, (Vef * KbT)) / (KbT * 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(EDonor + Float64(Vef - Ec))) / KbT)) + 1.0)) + Float64(NaChar / Float64(exp(Float64(Float64(Float64(Float64(Vef + Ev) + EAccept) - mu) / KbT)) + 1.0))) tmp = 0.0 if (t_1 <= -2e-221) tmp = t_0; elseif (t_1 <= 5e-251) tmp = Float64(NdChar / Float64(2.0 + Float64(Float64(EDonor / KbT) + Float64(fma(Float64(mu - Ec), KbT, Float64(Vef * KbT)) / Float64(KbT * KbT))))); else tmp = 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[(EDonor + N[(Vef - Ec), $MachinePrecision]), $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, -2e-221], t$95$0, If[LessEqual[t$95$1, 5e-251], N[(NdChar / N[(2.0 + N[(N[(EDonor / KbT), $MachinePrecision] + N[(N[(N[(mu - Ec), $MachinePrecision] * KbT + N[(Vef * KbT), $MachinePrecision]), $MachinePrecision] / N[(KbT * KbT), $MachinePrecision]), $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(EDonor + \left(Vef - Ec\right)\right)}{KbT}} + 1} + \frac{NaChar}{e^{\frac{\left(\left(Vef + Ev\right) + EAccept\right) - mu}{KbT}} + 1}\\
\mathbf{if}\;t\_1 \leq -2 \cdot 10^{-221}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;t\_1 \leq 5 \cdot 10^{-251}:\\
\;\;\;\;\frac{NdChar}{2 + \left(\frac{EDonor}{KbT} + \frac{\mathsf{fma}\left(mu - Ec, KbT, Vef \cdot KbT\right)}{KbT \cdot 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))))) < -2.00000000000000003e-221 or 5.0000000000000003e-251 < (+.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
+-commutativeN/A
distribute-lft-outN/A
*-lowering-*.f64N/A
+-lowering-+.f6434.1
Simplified34.1%
if -2.00000000000000003e-221 < (+.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.0000000000000003e-251Initial program 100.0%
Taylor expanded in NdChar around inf
/-lowering-/.f64N/A
+-lowering-+.f64N/A
exp-lowering-exp.f64N/A
/-lowering-/.f64N/A
Simplified88.0%
Taylor expanded in KbT around inf
associate--l+N/A
+-lowering-+.f64N/A
associate--l+N/A
+-lowering-+.f64N/A
/-lowering-/.f64N/A
associate--l+N/A
+-lowering-+.f64N/A
/-lowering-/.f64N/A
--lowering--.f64N/A
/-lowering-/.f64N/A
/-lowering-/.f6441.2
Simplified41.2%
+-commutativeN/A
sub-divN/A
frac-addN/A
/-lowering-/.f64N/A
accelerator-lowering-fma.f64N/A
--lowering--.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f6457.6
Applied egg-rr57.6%
Final simplification39.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 (+ EDonor (- Vef Ec))) KbT)) 1.0))
(/ NaChar (+ (exp (/ (- (+ (+ Vef Ev) EAccept) mu) KbT)) 1.0)))))
(if (<= t_1 -2e-221)
t_0
(if (<= t_1 1e-123)
(*
NdChar
(/ 1.0 (fma (/ 1.0 KbT) (+ Vef EDonor) (+ 2.0 (/ (- mu 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 = 0.5 * (NdChar + NaChar);
double t_1 = (NdChar / (exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0)) + (NaChar / (exp(((((Vef + Ev) + EAccept) - mu) / KbT)) + 1.0));
double tmp;
if (t_1 <= -2e-221) {
tmp = t_0;
} else if (t_1 <= 1e-123) {
tmp = NdChar * (1.0 / fma((1.0 / KbT), (Vef + EDonor), (2.0 + ((mu - Ec) / 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(EDonor + Float64(Vef - Ec))) / KbT)) + 1.0)) + Float64(NaChar / Float64(exp(Float64(Float64(Float64(Float64(Vef + Ev) + EAccept) - mu) / KbT)) + 1.0))) tmp = 0.0 if (t_1 <= -2e-221) tmp = t_0; elseif (t_1 <= 1e-123) tmp = Float64(NdChar * Float64(1.0 / fma(Float64(1.0 / KbT), Float64(Vef + EDonor), Float64(2.0 + Float64(Float64(mu - Ec) / KbT))))); else tmp = 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[(EDonor + N[(Vef - Ec), $MachinePrecision]), $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, -2e-221], t$95$0, If[LessEqual[t$95$1, 1e-123], N[(NdChar * N[(1.0 / N[(N[(1.0 / KbT), $MachinePrecision] * N[(Vef + EDonor), $MachinePrecision] + N[(2.0 + N[(N[(mu - Ec), $MachinePrecision] / KbT), $MachinePrecision]), $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(EDonor + \left(Vef - Ec\right)\right)}{KbT}} + 1} + \frac{NaChar}{e^{\frac{\left(\left(Vef + Ev\right) + EAccept\right) - mu}{KbT}} + 1}\\
\mathbf{if}\;t\_1 \leq -2 \cdot 10^{-221}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;t\_1 \leq 10^{-123}:\\
\;\;\;\;NdChar \cdot \frac{1}{\mathsf{fma}\left(\frac{1}{KbT}, Vef + EDonor, 2 + \frac{mu - Ec}{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))))) < -2.00000000000000003e-221 or 1.0000000000000001e-123 < (+.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
+-commutativeN/A
distribute-lft-outN/A
*-lowering-*.f64N/A
+-lowering-+.f6435.5
Simplified35.5%
if -2.00000000000000003e-221 < (+.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-123Initial program 100.0%
Taylor expanded in NdChar around inf
/-lowering-/.f64N/A
+-lowering-+.f64N/A
exp-lowering-exp.f64N/A
/-lowering-/.f64N/A
Simplified75.7%
Taylor expanded in KbT around inf
associate--l+N/A
+-lowering-+.f64N/A
associate--l+N/A
+-lowering-+.f64N/A
/-lowering-/.f64N/A
associate--l+N/A
+-lowering-+.f64N/A
/-lowering-/.f64N/A
--lowering--.f64N/A
/-lowering-/.f64N/A
/-lowering-/.f6436.9
Simplified36.9%
clear-numN/A
associate-/r/N/A
*-lowering-*.f64N/A
Applied egg-rr47.1%
Final simplification38.6%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (+ (+ Vef Ev) EAccept))
(t_1 (* 0.5 (+ NdChar NaChar)))
(t_2
(+
(/ NdChar (+ (exp (/ (+ mu (+ EDonor (- Vef Ec))) KbT)) 1.0))
(/ NaChar (+ (exp (/ (- t_0 mu) KbT)) 1.0)))))
(if (<= t_2 -2e-221)
t_1
(if (<= t_2 5e-251) (/ NaChar (- 2.0 (/ (- mu t_0) KbT))) t_1))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (Vef + Ev) + EAccept;
double t_1 = 0.5 * (NdChar + NaChar);
double t_2 = (NdChar / (exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0)) + (NaChar / (exp(((t_0 - mu) / KbT)) + 1.0));
double tmp;
if (t_2 <= -2e-221) {
tmp = t_1;
} else if (t_2 <= 5e-251) {
tmp = NaChar / (2.0 - ((mu - t_0) / KbT));
} else {
tmp = t_1;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: t_2
real(8) :: tmp
t_0 = (vef + ev) + eaccept
t_1 = 0.5d0 * (ndchar + nachar)
t_2 = (ndchar / (exp(((mu + (edonor + (vef - ec))) / kbt)) + 1.0d0)) + (nachar / (exp(((t_0 - mu) / kbt)) + 1.0d0))
if (t_2 <= (-2d-221)) then
tmp = t_1
else if (t_2 <= 5d-251) then
tmp = nachar / (2.0d0 - ((mu - t_0) / kbt))
else
tmp = t_1
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (Vef + Ev) + EAccept;
double t_1 = 0.5 * (NdChar + NaChar);
double t_2 = (NdChar / (Math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0)) + (NaChar / (Math.exp(((t_0 - mu) / KbT)) + 1.0));
double tmp;
if (t_2 <= -2e-221) {
tmp = t_1;
} else if (t_2 <= 5e-251) {
tmp = NaChar / (2.0 - ((mu - t_0) / KbT));
} else {
tmp = t_1;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = (Vef + Ev) + EAccept t_1 = 0.5 * (NdChar + NaChar) t_2 = (NdChar / (math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0)) + (NaChar / (math.exp(((t_0 - mu) / KbT)) + 1.0)) tmp = 0 if t_2 <= -2e-221: tmp = t_1 elif t_2 <= 5e-251: tmp = NaChar / (2.0 - ((mu - t_0) / KbT)) else: tmp = t_1 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(Vef + Ev) + EAccept) t_1 = Float64(0.5 * Float64(NdChar + NaChar)) t_2 = Float64(Float64(NdChar / Float64(exp(Float64(Float64(mu + Float64(EDonor + Float64(Vef - Ec))) / KbT)) + 1.0)) + Float64(NaChar / Float64(exp(Float64(Float64(t_0 - mu) / KbT)) + 1.0))) tmp = 0.0 if (t_2 <= -2e-221) tmp = t_1; elseif (t_2 <= 5e-251) tmp = Float64(NaChar / Float64(2.0 - Float64(Float64(mu - t_0) / KbT))); else tmp = t_1; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = (Vef + Ev) + EAccept; t_1 = 0.5 * (NdChar + NaChar); t_2 = (NdChar / (exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0)) + (NaChar / (exp(((t_0 - mu) / KbT)) + 1.0)); tmp = 0.0; if (t_2 <= -2e-221) tmp = t_1; elseif (t_2 <= 5e-251) tmp = NaChar / (2.0 - ((mu - t_0) / KbT)); else tmp = t_1; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(Vef + Ev), $MachinePrecision] + EAccept), $MachinePrecision]}, Block[{t$95$1 = N[(0.5 * N[(NdChar + NaChar), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(N[(NdChar / N[(N[Exp[N[(N[(mu + N[(EDonor + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(N[Exp[N[(N[(t$95$0 - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$2, -2e-221], t$95$1, If[LessEqual[t$95$2, 5e-251], N[(NaChar / N[(2.0 - N[(N[(mu - t$95$0), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$1]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(Vef + Ev\right) + EAccept\\
t_1 := 0.5 \cdot \left(NdChar + NaChar\right)\\
t_2 := \frac{NdChar}{e^{\frac{mu + \left(EDonor + \left(Vef - Ec\right)\right)}{KbT}} + 1} + \frac{NaChar}{e^{\frac{t\_0 - mu}{KbT}} + 1}\\
\mathbf{if}\;t\_2 \leq -2 \cdot 10^{-221}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;t\_2 \leq 5 \cdot 10^{-251}:\\
\;\;\;\;\frac{NaChar}{2 - \frac{mu - t\_0}{KbT}}\\
\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))))) < -2.00000000000000003e-221 or 5.0000000000000003e-251 < (+.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
+-commutativeN/A
distribute-lft-outN/A
*-lowering-*.f64N/A
+-lowering-+.f6434.1
Simplified34.1%
if -2.00000000000000003e-221 < (+.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.0000000000000003e-251Initial program 100.0%
Taylor expanded in NdChar around 0
/-lowering-/.f64N/A
+-lowering-+.f64N/A
exp-lowering-exp.f64N/A
/-lowering-/.f64N/A
associate--l+N/A
+-lowering-+.f64N/A
sub-negN/A
associate-+r+N/A
mul-1-negN/A
+-lowering-+.f64N/A
mul-1-negN/A
sub-negN/A
--lowering--.f6491.4
Simplified91.4%
Taylor expanded in KbT around inf
--lowering--.f64N/A
associate-+r+N/A
+-lowering-+.f64N/A
+-lowering-+.f64N/A
/-lowering-/.f64N/A
+-lowering-+.f64N/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
/-lowering-/.f6431.8
Simplified31.8%
Taylor expanded in KbT around -inf
mul-1-negN/A
unsub-negN/A
--lowering--.f64N/A
/-lowering-/.f64N/A
Simplified47.0%
Final simplification36.8%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (* 0.5 (+ NdChar NaChar)))
(t_1
(+
(/ NdChar (+ (exp (/ (+ mu (+ EDonor (- Vef Ec))) KbT)) 1.0))
(/ NaChar (+ (exp (/ (- (+ (+ Vef Ev) EAccept) mu) KbT)) 1.0)))))
(if (<= t_1 -5e-108)
t_0
(if (<= t_1 1e-123) (/ NdChar (+ 2.0 (/ 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 + (EDonor + (Vef - Ec))) / KbT)) + 1.0)) + (NaChar / (exp(((((Vef + Ev) + EAccept) - mu) / KbT)) + 1.0));
double tmp;
if (t_1 <= -5e-108) {
tmp = t_0;
} else if (t_1 <= 1e-123) {
tmp = NdChar / (2.0 + (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 + (edonor + (vef - ec))) / kbt)) + 1.0d0)) + (nachar / (exp(((((vef + ev) + eaccept) - mu) / kbt)) + 1.0d0))
if (t_1 <= (-5d-108)) then
tmp = t_0
else if (t_1 <= 1d-123) then
tmp = ndchar / (2.0d0 + (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 + (EDonor + (Vef - Ec))) / KbT)) + 1.0)) + (NaChar / (Math.exp(((((Vef + Ev) + EAccept) - mu) / KbT)) + 1.0));
double tmp;
if (t_1 <= -5e-108) {
tmp = t_0;
} else if (t_1 <= 1e-123) {
tmp = NdChar / (2.0 + (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 + (EDonor + (Vef - Ec))) / KbT)) + 1.0)) + (NaChar / (math.exp(((((Vef + Ev) + EAccept) - mu) / KbT)) + 1.0)) tmp = 0 if t_1 <= -5e-108: tmp = t_0 elif t_1 <= 1e-123: tmp = NdChar / (2.0 + (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(EDonor + Float64(Vef - Ec))) / 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-108) tmp = t_0; elseif (t_1 <= 1e-123) tmp = Float64(NdChar / Float64(2.0 + 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 + (EDonor + (Vef - Ec))) / KbT)) + 1.0)) + (NaChar / (exp(((((Vef + Ev) + EAccept) - mu) / KbT)) + 1.0)); tmp = 0.0; if (t_1 <= -5e-108) tmp = t_0; elseif (t_1 <= 1e-123) tmp = NdChar / (2.0 + (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[(EDonor + N[(Vef - Ec), $MachinePrecision]), $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-108], t$95$0, If[LessEqual[t$95$1, 1e-123], N[(NdChar / N[(2.0 + N[(EDonor / KbT), $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(EDonor + \left(Vef - Ec\right)\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^{-108}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;t\_1 \leq 10^{-123}:\\
\;\;\;\;\frac{NdChar}{2 + \frac{EDonor}{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))))) < -5e-108 or 1.0000000000000001e-123 < (+.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
+-commutativeN/A
distribute-lft-outN/A
*-lowering-*.f64N/A
+-lowering-+.f6437.0
Simplified37.0%
if -5e-108 < (+.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-123Initial program 100.0%
Taylor expanded in NdChar around inf
/-lowering-/.f64N/A
+-lowering-+.f64N/A
exp-lowering-exp.f64N/A
/-lowering-/.f64N/A
Simplified73.4%
Taylor expanded in KbT around inf
associate--l+N/A
+-lowering-+.f64N/A
associate--l+N/A
+-lowering-+.f64N/A
/-lowering-/.f64N/A
associate--l+N/A
+-lowering-+.f64N/A
/-lowering-/.f64N/A
--lowering--.f64N/A
/-lowering-/.f64N/A
/-lowering-/.f6433.2
Simplified33.2%
Taylor expanded in EDonor around inf
/-lowering-/.f6431.4
Simplified31.4%
Final simplification35.2%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (* 0.5 (+ NdChar NaChar)))
(t_1
(+
(/ NdChar (+ (exp (/ (+ mu (+ EDonor (- Vef Ec))) KbT)) 1.0))
(/ NaChar (+ (exp (/ (- (+ (+ Vef Ev) EAccept) mu) KbT)) 1.0)))))
(if (<= t_1 -2e-221)
t_0
(if (<= t_1 5e-264) (/ NdChar (/ 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 + (EDonor + (Vef - Ec))) / KbT)) + 1.0)) + (NaChar / (exp(((((Vef + Ev) + EAccept) - mu) / KbT)) + 1.0));
double tmp;
if (t_1 <= -2e-221) {
tmp = t_0;
} else if (t_1 <= 5e-264) {
tmp = NdChar / (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 + (edonor + (vef - ec))) / kbt)) + 1.0d0)) + (nachar / (exp(((((vef + ev) + eaccept) - mu) / kbt)) + 1.0d0))
if (t_1 <= (-2d-221)) then
tmp = t_0
else if (t_1 <= 5d-264) then
tmp = ndchar / (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 + (EDonor + (Vef - Ec))) / KbT)) + 1.0)) + (NaChar / (Math.exp(((((Vef + Ev) + EAccept) - mu) / KbT)) + 1.0));
double tmp;
if (t_1 <= -2e-221) {
tmp = t_0;
} else if (t_1 <= 5e-264) {
tmp = NdChar / (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 + (EDonor + (Vef - Ec))) / KbT)) + 1.0)) + (NaChar / (math.exp(((((Vef + Ev) + EAccept) - mu) / KbT)) + 1.0)) tmp = 0 if t_1 <= -2e-221: tmp = t_0 elif t_1 <= 5e-264: tmp = NdChar / (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(EDonor + Float64(Vef - Ec))) / KbT)) + 1.0)) + Float64(NaChar / Float64(exp(Float64(Float64(Float64(Float64(Vef + Ev) + EAccept) - mu) / KbT)) + 1.0))) tmp = 0.0 if (t_1 <= -2e-221) tmp = t_0; elseif (t_1 <= 5e-264) tmp = Float64(NdChar / 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 + (EDonor + (Vef - Ec))) / KbT)) + 1.0)) + (NaChar / (exp(((((Vef + Ev) + EAccept) - mu) / KbT)) + 1.0)); tmp = 0.0; if (t_1 <= -2e-221) tmp = t_0; elseif (t_1 <= 5e-264) tmp = NdChar / (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[(EDonor + N[(Vef - Ec), $MachinePrecision]), $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, -2e-221], t$95$0, If[LessEqual[t$95$1, 5e-264], N[(NdChar / N[(EDonor / KbT), $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(EDonor + \left(Vef - Ec\right)\right)}{KbT}} + 1} + \frac{NaChar}{e^{\frac{\left(\left(Vef + Ev\right) + EAccept\right) - mu}{KbT}} + 1}\\
\mathbf{if}\;t\_1 \leq -2 \cdot 10^{-221}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;t\_1 \leq 5 \cdot 10^{-264}:\\
\;\;\;\;\frac{NdChar}{\frac{EDonor}{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.00000000000000003e-221 or 5.0000000000000001e-264 < (+.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
+-commutativeN/A
distribute-lft-outN/A
*-lowering-*.f64N/A
+-lowering-+.f6433.8
Simplified33.8%
if -2.00000000000000003e-221 < (+.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.0000000000000001e-264Initial program 100.0%
Taylor expanded in NdChar around inf
/-lowering-/.f64N/A
+-lowering-+.f64N/A
exp-lowering-exp.f64N/A
/-lowering-/.f64N/A
Simplified89.3%
Taylor expanded in KbT around inf
associate--l+N/A
+-lowering-+.f64N/A
associate--l+N/A
+-lowering-+.f64N/A
/-lowering-/.f64N/A
associate--l+N/A
+-lowering-+.f64N/A
/-lowering-/.f64N/A
--lowering--.f64N/A
/-lowering-/.f64N/A
/-lowering-/.f6442.0
Simplified42.0%
Taylor expanded in EDonor around inf
/-lowering-/.f6435.9
Simplified35.9%
Final simplification34.3%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (* 0.5 (+ NdChar NaChar)))
(t_1
(+
(/ NdChar (+ (exp (/ (+ mu (+ EDonor (- Vef Ec))) KbT)) 1.0))
(/ NaChar (+ (exp (/ (- (+ (+ Vef Ev) EAccept) mu) KbT)) 1.0)))))
(if (<= t_1 -1e-252) t_0 (if (<= t_1 5e-251) (/ (* KbT NaChar) Ev) 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 + (EDonor + (Vef - Ec))) / KbT)) + 1.0)) + (NaChar / (exp(((((Vef + Ev) + EAccept) - mu) / KbT)) + 1.0));
double tmp;
if (t_1 <= -1e-252) {
tmp = t_0;
} else if (t_1 <= 5e-251) {
tmp = (KbT * NaChar) / Ev;
} 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 + (edonor + (vef - ec))) / kbt)) + 1.0d0)) + (nachar / (exp(((((vef + ev) + eaccept) - mu) / kbt)) + 1.0d0))
if (t_1 <= (-1d-252)) then
tmp = t_0
else if (t_1 <= 5d-251) then
tmp = (kbt * nachar) / ev
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 + (EDonor + (Vef - Ec))) / KbT)) + 1.0)) + (NaChar / (Math.exp(((((Vef + Ev) + EAccept) - mu) / KbT)) + 1.0));
double tmp;
if (t_1 <= -1e-252) {
tmp = t_0;
} else if (t_1 <= 5e-251) {
tmp = (KbT * NaChar) / Ev;
} 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 + (EDonor + (Vef - Ec))) / KbT)) + 1.0)) + (NaChar / (math.exp(((((Vef + Ev) + EAccept) - mu) / KbT)) + 1.0)) tmp = 0 if t_1 <= -1e-252: tmp = t_0 elif t_1 <= 5e-251: tmp = (KbT * NaChar) / Ev 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(EDonor + Float64(Vef - Ec))) / KbT)) + 1.0)) + Float64(NaChar / Float64(exp(Float64(Float64(Float64(Float64(Vef + Ev) + EAccept) - mu) / KbT)) + 1.0))) tmp = 0.0 if (t_1 <= -1e-252) tmp = t_0; elseif (t_1 <= 5e-251) tmp = Float64(Float64(KbT * NaChar) / Ev); 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 + (EDonor + (Vef - Ec))) / KbT)) + 1.0)) + (NaChar / (exp(((((Vef + Ev) + EAccept) - mu) / KbT)) + 1.0)); tmp = 0.0; if (t_1 <= -1e-252) tmp = t_0; elseif (t_1 <= 5e-251) tmp = (KbT * NaChar) / Ev; 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[(EDonor + N[(Vef - Ec), $MachinePrecision]), $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, -1e-252], t$95$0, If[LessEqual[t$95$1, 5e-251], N[(N[(KbT * NaChar), $MachinePrecision] / Ev), $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(EDonor + \left(Vef - Ec\right)\right)}{KbT}} + 1} + \frac{NaChar}{e^{\frac{\left(\left(Vef + Ev\right) + EAccept\right) - mu}{KbT}} + 1}\\
\mathbf{if}\;t\_1 \leq -1 \cdot 10^{-252}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;t\_1 \leq 5 \cdot 10^{-251}:\\
\;\;\;\;\frac{KbT \cdot NaChar}{Ev}\\
\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))))) < -9.99999999999999943e-253 or 5.0000000000000003e-251 < (+.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
+-commutativeN/A
distribute-lft-outN/A
*-lowering-*.f64N/A
+-lowering-+.f6434.0
Simplified34.0%
if -9.99999999999999943e-253 < (+.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.0000000000000003e-251Initial program 100.0%
Taylor expanded in NdChar around 0
/-lowering-/.f64N/A
+-lowering-+.f64N/A
exp-lowering-exp.f64N/A
/-lowering-/.f64N/A
associate--l+N/A
+-lowering-+.f64N/A
sub-negN/A
associate-+r+N/A
mul-1-negN/A
+-lowering-+.f64N/A
mul-1-negN/A
sub-negN/A
--lowering--.f6493.0
Simplified93.0%
Taylor expanded in KbT around inf
--lowering--.f64N/A
associate-+r+N/A
+-lowering-+.f64N/A
+-lowering-+.f64N/A
/-lowering-/.f64N/A
+-lowering-+.f64N/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
/-lowering-/.f6432.3
Simplified32.3%
Taylor expanded in Ev around inf
/-lowering-/.f64N/A
*-commutativeN/A
*-lowering-*.f6426.5
Simplified26.5%
Final simplification32.5%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (* 0.5 (+ NdChar NaChar)))
(t_1
(+
(/ NdChar (+ (exp (/ (+ mu (+ EDonor (- Vef Ec))) KbT)) 1.0))
(/ NaChar (+ (exp (/ (- (+ (+ Vef Ev) EAccept) mu) KbT)) 1.0)))))
(if (<= t_1 -2e-221)
t_0
(if (<= t_1 5e-264) (/ (* NdChar KbT) EDonor) 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 + (EDonor + (Vef - Ec))) / KbT)) + 1.0)) + (NaChar / (exp(((((Vef + Ev) + EAccept) - mu) / KbT)) + 1.0));
double tmp;
if (t_1 <= -2e-221) {
tmp = t_0;
} else if (t_1 <= 5e-264) {
tmp = (NdChar * KbT) / EDonor;
} 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 + (edonor + (vef - ec))) / kbt)) + 1.0d0)) + (nachar / (exp(((((vef + ev) + eaccept) - mu) / kbt)) + 1.0d0))
if (t_1 <= (-2d-221)) then
tmp = t_0
else if (t_1 <= 5d-264) then
tmp = (ndchar * kbt) / edonor
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 + (EDonor + (Vef - Ec))) / KbT)) + 1.0)) + (NaChar / (Math.exp(((((Vef + Ev) + EAccept) - mu) / KbT)) + 1.0));
double tmp;
if (t_1 <= -2e-221) {
tmp = t_0;
} else if (t_1 <= 5e-264) {
tmp = (NdChar * KbT) / EDonor;
} 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 + (EDonor + (Vef - Ec))) / KbT)) + 1.0)) + (NaChar / (math.exp(((((Vef + Ev) + EAccept) - mu) / KbT)) + 1.0)) tmp = 0 if t_1 <= -2e-221: tmp = t_0 elif t_1 <= 5e-264: tmp = (NdChar * KbT) / EDonor 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(EDonor + Float64(Vef - Ec))) / KbT)) + 1.0)) + Float64(NaChar / Float64(exp(Float64(Float64(Float64(Float64(Vef + Ev) + EAccept) - mu) / KbT)) + 1.0))) tmp = 0.0 if (t_1 <= -2e-221) tmp = t_0; elseif (t_1 <= 5e-264) tmp = Float64(Float64(NdChar * KbT) / EDonor); 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 + (EDonor + (Vef - Ec))) / KbT)) + 1.0)) + (NaChar / (exp(((((Vef + Ev) + EAccept) - mu) / KbT)) + 1.0)); tmp = 0.0; if (t_1 <= -2e-221) tmp = t_0; elseif (t_1 <= 5e-264) tmp = (NdChar * KbT) / EDonor; 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[(EDonor + N[(Vef - Ec), $MachinePrecision]), $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, -2e-221], t$95$0, If[LessEqual[t$95$1, 5e-264], N[(N[(NdChar * KbT), $MachinePrecision] / EDonor), $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(EDonor + \left(Vef - Ec\right)\right)}{KbT}} + 1} + \frac{NaChar}{e^{\frac{\left(\left(Vef + Ev\right) + EAccept\right) - mu}{KbT}} + 1}\\
\mathbf{if}\;t\_1 \leq -2 \cdot 10^{-221}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;t\_1 \leq 5 \cdot 10^{-264}:\\
\;\;\;\;\frac{NdChar \cdot KbT}{EDonor}\\
\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.00000000000000003e-221 or 5.0000000000000001e-264 < (+.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
+-commutativeN/A
distribute-lft-outN/A
*-lowering-*.f64N/A
+-lowering-+.f6433.8
Simplified33.8%
if -2.00000000000000003e-221 < (+.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.0000000000000001e-264Initial program 100.0%
Taylor expanded in NdChar around inf
/-lowering-/.f64N/A
+-lowering-+.f64N/A
exp-lowering-exp.f64N/A
/-lowering-/.f64N/A
Simplified89.3%
Taylor expanded in KbT around inf
associate--l+N/A
+-lowering-+.f64N/A
associate--l+N/A
+-lowering-+.f64N/A
/-lowering-/.f64N/A
associate--l+N/A
+-lowering-+.f64N/A
/-lowering-/.f64N/A
--lowering--.f64N/A
/-lowering-/.f64N/A
/-lowering-/.f6442.0
Simplified42.0%
Taylor expanded in EDonor around inf
/-lowering-/.f64N/A
*-lowering-*.f6425.0
Simplified25.0%
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 (<= NaChar -8.5e+248)
t_0
(if (<= NaChar 6e-113)
(/ NdChar (+ (exp (/ (+ EDonor (+ Vef (- mu 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(((EAccept + (Ev + (Vef - mu))) / KbT)) + 1.0);
double tmp;
if (NaChar <= -8.5e+248) {
tmp = t_0;
} else if (NaChar <= 6e-113) {
tmp = NdChar / (exp(((EDonor + (Vef + (mu - 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(((eaccept + (ev + (vef - mu))) / kbt)) + 1.0d0)
if (nachar <= (-8.5d+248)) then
tmp = t_0
else if (nachar <= 6d-113) then
tmp = ndchar / (exp(((edonor + (vef + (mu - 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(((EAccept + (Ev + (Vef - mu))) / KbT)) + 1.0);
double tmp;
if (NaChar <= -8.5e+248) {
tmp = t_0;
} else if (NaChar <= 6e-113) {
tmp = NdChar / (Math.exp(((EDonor + (Vef + (mu - 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(((EAccept + (Ev + (Vef - mu))) / KbT)) + 1.0) tmp = 0 if NaChar <= -8.5e+248: tmp = t_0 elif NaChar <= 6e-113: tmp = NdChar / (math.exp(((EDonor + (Vef + (mu - 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(EAccept + Float64(Ev + Float64(Vef - mu))) / KbT)) + 1.0)) tmp = 0.0 if (NaChar <= -8.5e+248) tmp = t_0; elseif (NaChar <= 6e-113) tmp = Float64(NdChar / Float64(exp(Float64(Float64(EDonor + Float64(Vef + Float64(mu - 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(((EAccept + (Ev + (Vef - mu))) / KbT)) + 1.0); tmp = 0.0; if (NaChar <= -8.5e+248) tmp = t_0; elseif (NaChar <= 6e-113) tmp = NdChar / (exp(((EDonor + (Vef + (mu - 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[(EAccept + N[(Ev + N[(Vef - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -8.5e+248], t$95$0, If[LessEqual[NaChar, 6e-113], N[(NdChar / N[(N[Exp[N[(N[(EDonor + N[(Vef + N[(mu - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], t$95$0]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{e^{\frac{EAccept + \left(Ev + \left(Vef - mu\right)\right)}{KbT}} + 1}\\
\mathbf{if}\;NaChar \leq -8.5 \cdot 10^{+248}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;NaChar \leq 6 \cdot 10^{-113}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{EDonor + \left(Vef + \left(mu - Ec\right)\right)}{KbT}} + 1}\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if NaChar < -8.50000000000000032e248 or 6.0000000000000002e-113 < NaChar Initial program 100.0%
Taylor expanded in NdChar around 0
/-lowering-/.f64N/A
+-lowering-+.f64N/A
exp-lowering-exp.f64N/A
/-lowering-/.f64N/A
associate--l+N/A
+-lowering-+.f64N/A
sub-negN/A
associate-+r+N/A
mul-1-negN/A
+-lowering-+.f64N/A
mul-1-negN/A
sub-negN/A
--lowering--.f6479.1
Simplified79.1%
if -8.50000000000000032e248 < NaChar < 6.0000000000000002e-113Initial program 100.0%
Taylor expanded in NdChar around inf
/-lowering-/.f64N/A
+-lowering-+.f64N/A
exp-lowering-exp.f64N/A
/-lowering-/.f64N/A
Simplified68.7%
Final simplification72.5%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (<= KbT -1.5e+138)
(+ (* NdChar 0.5) (/ NaChar (+ (exp (/ Ev KbT)) 1.0)))
(if (<= KbT 3.2e+144)
(/ NaChar (+ (exp (/ (+ EAccept (+ Ev (- Vef mu))) KbT)) 1.0))
(+ (* NdChar 0.5) (/ 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 (KbT <= -1.5e+138) {
tmp = (NdChar * 0.5) + (NaChar / (exp((Ev / KbT)) + 1.0));
} else if (KbT <= 3.2e+144) {
tmp = NaChar / (exp(((EAccept + (Ev + (Vef - mu))) / KbT)) + 1.0);
} else {
tmp = (NdChar * 0.5) + (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 (kbt <= (-1.5d+138)) then
tmp = (ndchar * 0.5d0) + (nachar / (exp((ev / kbt)) + 1.0d0))
else if (kbt <= 3.2d+144) then
tmp = nachar / (exp(((eaccept + (ev + (vef - mu))) / kbt)) + 1.0d0)
else
tmp = (ndchar * 0.5d0) + (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 (KbT <= -1.5e+138) {
tmp = (NdChar * 0.5) + (NaChar / (Math.exp((Ev / KbT)) + 1.0));
} else if (KbT <= 3.2e+144) {
tmp = NaChar / (Math.exp(((EAccept + (Ev + (Vef - mu))) / KbT)) + 1.0);
} else {
tmp = (NdChar * 0.5) + (NaChar / (Math.exp((EAccept / KbT)) + 1.0));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if KbT <= -1.5e+138: tmp = (NdChar * 0.5) + (NaChar / (math.exp((Ev / KbT)) + 1.0)) elif KbT <= 3.2e+144: tmp = NaChar / (math.exp(((EAccept + (Ev + (Vef - mu))) / KbT)) + 1.0) else: tmp = (NdChar * 0.5) + (NaChar / (math.exp((EAccept / KbT)) + 1.0)) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (KbT <= -1.5e+138) tmp = Float64(Float64(NdChar * 0.5) + Float64(NaChar / Float64(exp(Float64(Ev / KbT)) + 1.0))); elseif (KbT <= 3.2e+144) tmp = Float64(NaChar / Float64(exp(Float64(Float64(EAccept + Float64(Ev + Float64(Vef - mu))) / KbT)) + 1.0)); else tmp = Float64(Float64(NdChar * 0.5) + 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 (KbT <= -1.5e+138) tmp = (NdChar * 0.5) + (NaChar / (exp((Ev / KbT)) + 1.0)); elseif (KbT <= 3.2e+144) tmp = NaChar / (exp(((EAccept + (Ev + (Vef - mu))) / KbT)) + 1.0); else tmp = (NdChar * 0.5) + (NaChar / (exp((EAccept / KbT)) + 1.0)); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[KbT, -1.5e+138], N[(N[(NdChar * 0.5), $MachinePrecision] + N[(NaChar / N[(N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[KbT, 3.2e+144], N[(NaChar / N[(N[Exp[N[(N[(EAccept + N[(Ev + N[(Vef - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar * 0.5), $MachinePrecision] + N[(NaChar / N[(N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;KbT \leq -1.5 \cdot 10^{+138}:\\
\;\;\;\;NdChar \cdot 0.5 + \frac{NaChar}{e^{\frac{Ev}{KbT}} + 1}\\
\mathbf{elif}\;KbT \leq 3.2 \cdot 10^{+144}:\\
\;\;\;\;\frac{NaChar}{e^{\frac{EAccept + \left(Ev + \left(Vef - mu\right)\right)}{KbT}} + 1}\\
\mathbf{else}:\\
\;\;\;\;NdChar \cdot 0.5 + \frac{NaChar}{e^{\frac{EAccept}{KbT}} + 1}\\
\end{array}
\end{array}
if KbT < -1.50000000000000005e138Initial program 100.0%
Taylor expanded in KbT around inf
*-commutativeN/A
*-lowering-*.f6468.8
Simplified68.8%
Taylor expanded in Ev around inf
Simplified62.8%
if -1.50000000000000005e138 < KbT < 3.2000000000000001e144Initial program 100.0%
Taylor expanded in NdChar around 0
/-lowering-/.f64N/A
+-lowering-+.f64N/A
exp-lowering-exp.f64N/A
/-lowering-/.f64N/A
associate--l+N/A
+-lowering-+.f64N/A
sub-negN/A
associate-+r+N/A
mul-1-negN/A
+-lowering-+.f64N/A
mul-1-negN/A
sub-negN/A
--lowering--.f6465.0
Simplified65.0%
if 3.2000000000000001e144 < KbT Initial program 99.9%
Taylor expanded in KbT around inf
*-commutativeN/A
*-lowering-*.f6476.4
Simplified76.4%
Taylor expanded in EAccept around inf
Simplified68.8%
Final simplification65.2%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (* 0.5 (+ NdChar NaChar))))
(if (<= KbT -9.8e+85)
t_0
(if (<= KbT 4.4e-158)
(/ NaChar (+ (exp (/ EAccept KbT)) 1.0))
(if (<= KbT 2.8e+119)
(/ NaChar (+ (exp (/ Ev KbT)) 1.0))
(fma -0.25 (* EAccept (/ NaChar 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 tmp;
if (KbT <= -9.8e+85) {
tmp = t_0;
} else if (KbT <= 4.4e-158) {
tmp = NaChar / (exp((EAccept / KbT)) + 1.0);
} else if (KbT <= 2.8e+119) {
tmp = NaChar / (exp((Ev / KbT)) + 1.0);
} else {
tmp = fma(-0.25, (EAccept * (NaChar / KbT)), t_0);
}
return tmp;
}
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(0.5 * Float64(NdChar + NaChar)) tmp = 0.0 if (KbT <= -9.8e+85) tmp = t_0; elseif (KbT <= 4.4e-158) tmp = Float64(NaChar / Float64(exp(Float64(EAccept / KbT)) + 1.0)); elseif (KbT <= 2.8e+119) tmp = Float64(NaChar / Float64(exp(Float64(Ev / KbT)) + 1.0)); else tmp = fma(-0.25, Float64(EAccept * Float64(NaChar / 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]}, If[LessEqual[KbT, -9.8e+85], t$95$0, If[LessEqual[KbT, 4.4e-158], N[(NaChar / N[(N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[KbT, 2.8e+119], N[(NaChar / N[(N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], N[(-0.25 * N[(EAccept * N[(NaChar / KbT), $MachinePrecision]), $MachinePrecision] + t$95$0), $MachinePrecision]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := 0.5 \cdot \left(NdChar + NaChar\right)\\
\mathbf{if}\;KbT \leq -9.8 \cdot 10^{+85}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;KbT \leq 4.4 \cdot 10^{-158}:\\
\;\;\;\;\frac{NaChar}{e^{\frac{EAccept}{KbT}} + 1}\\
\mathbf{elif}\;KbT \leq 2.8 \cdot 10^{+119}:\\
\;\;\;\;\frac{NaChar}{e^{\frac{Ev}{KbT}} + 1}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(-0.25, EAccept \cdot \frac{NaChar}{KbT}, t\_0\right)\\
\end{array}
\end{array}
if KbT < -9.7999999999999993e85Initial program 100.0%
Taylor expanded in KbT around inf
+-commutativeN/A
distribute-lft-outN/A
*-lowering-*.f64N/A
+-lowering-+.f6458.8
Simplified58.8%
if -9.7999999999999993e85 < KbT < 4.4000000000000002e-158Initial program 100.0%
Taylor expanded in NdChar around 0
/-lowering-/.f64N/A
+-lowering-+.f64N/A
exp-lowering-exp.f64N/A
/-lowering-/.f64N/A
associate--l+N/A
+-lowering-+.f64N/A
sub-negN/A
associate-+r+N/A
mul-1-negN/A
+-lowering-+.f64N/A
mul-1-negN/A
sub-negN/A
--lowering--.f6462.4
Simplified62.4%
Taylor expanded in EAccept around inf
/-lowering-/.f6437.5
Simplified37.5%
if 4.4000000000000002e-158 < KbT < 2.80000000000000013e119Initial program 100.0%
Taylor expanded in NdChar around 0
/-lowering-/.f64N/A
+-lowering-+.f64N/A
exp-lowering-exp.f64N/A
/-lowering-/.f64N/A
associate--l+N/A
+-lowering-+.f64N/A
sub-negN/A
associate-+r+N/A
mul-1-negN/A
+-lowering-+.f64N/A
mul-1-negN/A
sub-negN/A
--lowering--.f6474.2
Simplified74.2%
Taylor expanded in Ev around inf
/-lowering-/.f6435.4
Simplified35.4%
if 2.80000000000000013e119 < KbT Initial program 99.9%
Taylor expanded in KbT around -inf
Simplified45.7%
Taylor expanded in EAccept around inf
associate-/l*N/A
*-lowering-*.f64N/A
/-lowering-/.f6458.2
Simplified58.2%
Final simplification43.9%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (<= Ev -4.9e+155)
(/ NaChar (+ (exp (/ Ev KbT)) 1.0))
(if (<= Ev -4e-190)
(/ NaChar (+ (exp (/ Vef 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 (Ev <= -4.9e+155) {
tmp = NaChar / (exp((Ev / KbT)) + 1.0);
} else if (Ev <= -4e-190) {
tmp = NaChar / (exp((Vef / 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 (ev <= (-4.9d+155)) then
tmp = nachar / (exp((ev / kbt)) + 1.0d0)
else if (ev <= (-4d-190)) then
tmp = nachar / (exp((vef / 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 (Ev <= -4.9e+155) {
tmp = NaChar / (Math.exp((Ev / KbT)) + 1.0);
} else if (Ev <= -4e-190) {
tmp = NaChar / (Math.exp((Vef / 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 Ev <= -4.9e+155: tmp = NaChar / (math.exp((Ev / KbT)) + 1.0) elif Ev <= -4e-190: tmp = NaChar / (math.exp((Vef / 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 (Ev <= -4.9e+155) tmp = Float64(NaChar / Float64(exp(Float64(Ev / KbT)) + 1.0)); elseif (Ev <= -4e-190) tmp = Float64(NaChar / Float64(exp(Float64(Vef / 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 (Ev <= -4.9e+155) tmp = NaChar / (exp((Ev / KbT)) + 1.0); elseif (Ev <= -4e-190) tmp = NaChar / (exp((Vef / 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[Ev, -4.9e+155], N[(NaChar / N[(N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[Ev, -4e-190], N[(NaChar / N[(N[Exp[N[(Vef / 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}\;Ev \leq -4.9 \cdot 10^{+155}:\\
\;\;\;\;\frac{NaChar}{e^{\frac{Ev}{KbT}} + 1}\\
\mathbf{elif}\;Ev \leq -4 \cdot 10^{-190}:\\
\;\;\;\;\frac{NaChar}{e^{\frac{Vef}{KbT}} + 1}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{e^{\frac{EAccept}{KbT}} + 1}\\
\end{array}
\end{array}
if Ev < -4.8999999999999997e155Initial program 100.0%
Taylor expanded in NdChar around 0
/-lowering-/.f64N/A
+-lowering-+.f64N/A
exp-lowering-exp.f64N/A
/-lowering-/.f64N/A
associate--l+N/A
+-lowering-+.f64N/A
sub-negN/A
associate-+r+N/A
mul-1-negN/A
+-lowering-+.f64N/A
mul-1-negN/A
sub-negN/A
--lowering--.f6454.7
Simplified54.7%
Taylor expanded in Ev around inf
/-lowering-/.f6449.8
Simplified49.8%
if -4.8999999999999997e155 < Ev < -4.0000000000000001e-190Initial program 100.0%
Taylor expanded in NdChar around 0
/-lowering-/.f64N/A
+-lowering-+.f64N/A
exp-lowering-exp.f64N/A
/-lowering-/.f64N/A
associate--l+N/A
+-lowering-+.f64N/A
sub-negN/A
associate-+r+N/A
mul-1-negN/A
+-lowering-+.f64N/A
mul-1-negN/A
sub-negN/A
--lowering--.f6464.1
Simplified64.1%
Taylor expanded in Vef around inf
/-lowering-/.f6441.9
Simplified41.9%
if -4.0000000000000001e-190 < Ev Initial program 100.0%
Taylor expanded in NdChar around 0
/-lowering-/.f64N/A
+-lowering-+.f64N/A
exp-lowering-exp.f64N/A
/-lowering-/.f64N/A
associate--l+N/A
+-lowering-+.f64N/A
sub-negN/A
associate-+r+N/A
mul-1-negN/A
+-lowering-+.f64N/A
mul-1-negN/A
sub-negN/A
--lowering--.f6458.7
Simplified58.7%
Taylor expanded in EAccept around inf
/-lowering-/.f6439.5
Simplified39.5%
Final simplification41.7%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (if (<= NdChar -8.2e-144) (* NdChar 0.5) (if (<= NdChar 6e-137) (* NaChar 0.5) (* NdChar 0.5))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (NdChar <= -8.2e-144) {
tmp = NdChar * 0.5;
} else if (NdChar <= 6e-137) {
tmp = NaChar * 0.5;
} else {
tmp = NdChar * 0.5;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if (ndchar <= (-8.2d-144)) then
tmp = ndchar * 0.5d0
else if (ndchar <= 6d-137) then
tmp = nachar * 0.5d0
else
tmp = ndchar * 0.5d0
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (NdChar <= -8.2e-144) {
tmp = NdChar * 0.5;
} else if (NdChar <= 6e-137) {
tmp = NaChar * 0.5;
} else {
tmp = NdChar * 0.5;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if NdChar <= -8.2e-144: tmp = NdChar * 0.5 elif NdChar <= 6e-137: tmp = NaChar * 0.5 else: tmp = NdChar * 0.5 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (NdChar <= -8.2e-144) tmp = Float64(NdChar * 0.5); elseif (NdChar <= 6e-137) tmp = Float64(NaChar * 0.5); else tmp = Float64(NdChar * 0.5); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (NdChar <= -8.2e-144) tmp = NdChar * 0.5; elseif (NdChar <= 6e-137) tmp = NaChar * 0.5; else tmp = NdChar * 0.5; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[NdChar, -8.2e-144], N[(NdChar * 0.5), $MachinePrecision], If[LessEqual[NdChar, 6e-137], N[(NaChar * 0.5), $MachinePrecision], N[(NdChar * 0.5), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NdChar \leq -8.2 \cdot 10^{-144}:\\
\;\;\;\;NdChar \cdot 0.5\\
\mathbf{elif}\;NdChar \leq 6 \cdot 10^{-137}:\\
\;\;\;\;NaChar \cdot 0.5\\
\mathbf{else}:\\
\;\;\;\;NdChar \cdot 0.5\\
\end{array}
\end{array}
if NdChar < -8.2e-144 or 5.9999999999999996e-137 < NdChar Initial program 100.0%
Taylor expanded in KbT around inf
+-commutativeN/A
distribute-lft-outN/A
*-lowering-*.f64N/A
+-lowering-+.f6425.6
Simplified25.6%
Taylor expanded in NdChar around inf
*-lowering-*.f6423.3
Simplified23.3%
if -8.2e-144 < NdChar < 5.9999999999999996e-137Initial program 100.0%
Taylor expanded in NdChar around 0
/-lowering-/.f64N/A
+-lowering-+.f64N/A
exp-lowering-exp.f64N/A
/-lowering-/.f64N/A
associate--l+N/A
+-lowering-+.f64N/A
sub-negN/A
associate-+r+N/A
mul-1-negN/A
+-lowering-+.f64N/A
mul-1-negN/A
sub-negN/A
--lowering--.f6482.5
Simplified82.5%
Taylor expanded in KbT around inf
*-commutativeN/A
*-lowering-*.f6433.0
Simplified33.0%
Final simplification25.7%
(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
+-commutativeN/A
distribute-lft-outN/A
*-lowering-*.f64N/A
+-lowering-+.f6427.7
Simplified27.7%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (* NdChar 0.5))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return NdChar * 0.5;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
code = ndchar * 0.5d0
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return NdChar * 0.5;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return NdChar * 0.5
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(NdChar * 0.5) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = NdChar * 0.5; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(NdChar * 0.5), $MachinePrecision]
\begin{array}{l}
\\
NdChar \cdot 0.5
\end{array}
Initial program 100.0%
Taylor expanded in KbT around inf
+-commutativeN/A
distribute-lft-outN/A
*-lowering-*.f64N/A
+-lowering-+.f6427.7
Simplified27.7%
Taylor expanded in NdChar around inf
*-lowering-*.f6419.8
Simplified19.8%
Final simplification19.8%
herbie shell --seed 2024199
(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))))))