
(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 28 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 (+ (pow (exp -1.0) (/ (- (- Ec Vef) (+ EDonor mu)) KbT)) 1.0)) (/ NaChar (+ (exp (/ (- (+ EAccept (+ Vef Ev)) 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 / (pow(exp(-1.0), (((Ec - Vef) - (EDonor + mu)) / KbT)) + 1.0)) + (NaChar / (exp((((EAccept + (Vef + Ev)) - 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((-1.0d0)) ** (((ec - vef) - (edonor + mu)) / kbt)) + 1.0d0)) + (nachar / (exp((((eaccept + (vef + ev)) - 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.pow(Math.exp(-1.0), (((Ec - Vef) - (EDonor + mu)) / KbT)) + 1.0)) + (NaChar / (Math.exp((((EAccept + (Vef + Ev)) - mu) / KbT)) + 1.0));
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return (NdChar / (math.pow(math.exp(-1.0), (((Ec - Vef) - (EDonor + mu)) / KbT)) + 1.0)) + (NaChar / (math.exp((((EAccept + (Vef + Ev)) - mu) / KbT)) + 1.0))
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(Float64(NdChar / Float64((exp(-1.0) ^ Float64(Float64(Float64(Ec - Vef) - Float64(EDonor + mu)) / KbT)) + 1.0)) + Float64(NaChar / Float64(exp(Float64(Float64(Float64(EAccept + Float64(Vef + Ev)) - mu) / KbT)) + 1.0))) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = (NdChar / ((exp(-1.0) ^ (((Ec - Vef) - (EDonor + mu)) / KbT)) + 1.0)) + (NaChar / (exp((((EAccept + (Vef + Ev)) - mu) / KbT)) + 1.0)); end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(N[(NdChar / N[(N[Power[N[Exp[-1.0], $MachinePrecision], N[(N[(N[(Ec - Vef), $MachinePrecision] - N[(EDonor + mu), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(N[Exp[N[(N[(N[(EAccept + N[(Vef + Ev), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{NdChar}{{\left(e^{-1}\right)}^{\left(\frac{\left(Ec - Vef\right) - \left(EDonor + mu\right)}{KbT}\right)} + 1} + \frac{NaChar}{e^{\frac{\left(EAccept + \left(Vef + Ev\right)\right) - mu}{KbT}} + 1}
\end{array}
Initial program 100.0%
lift--.f64N/A
lift--.f64N/A
lift--.f64N/A
distribute-frac-negN/A
neg-mul-1N/A
exp-prodN/A
lower-pow.f64N/A
lower-exp.f64N/A
lower-/.f64100.0
lift--.f64N/A
lift--.f64N/A
associate--l-N/A
lower--.f64N/A
lower-+.f64100.0
Applied rewrites100.0%
Final simplification100.0%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0
(+
(/ NaChar (+ (exp (/ (- (+ EAccept (+ Vef Ev)) mu) KbT)) 1.0))
(/ NdChar (+ (exp (/ (+ mu (+ EDonor (- Vef Ec))) KbT)) 1.0))))
(t_1 (+ EDonor (+ Vef (- mu Ec)))))
(if (<= t_0 -2e-99)
(+ (/ NaChar (+ (exp (/ Vef KbT)) 1.0)) (* NdChar 0.5))
(if (<= t_0 -2e-281)
(/ NdChar (+ (exp (/ mu KbT)) 1.0))
(if (<= t_0 0.0)
(/
NdChar
(-
2.0
(/
(fma -0.5 (/ (* t_1 t_1) KbT) (- (- (- Ec mu) Vef) EDonor))
KbT)))
(if (<= t_0 1e+93)
(/ NdChar (+ (exp (/ EDonor KbT)) 1.0))
(+ (/ NaChar (+ (exp (/ EAccept KbT)) 1.0)) (* NdChar 0.5))))))))
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 + (Vef + Ev)) - mu) / KbT)) + 1.0)) + (NdChar / (exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0));
double t_1 = EDonor + (Vef + (mu - Ec));
double tmp;
if (t_0 <= -2e-99) {
tmp = (NaChar / (exp((Vef / KbT)) + 1.0)) + (NdChar * 0.5);
} else if (t_0 <= -2e-281) {
tmp = NdChar / (exp((mu / KbT)) + 1.0);
} else if (t_0 <= 0.0) {
tmp = NdChar / (2.0 - (fma(-0.5, ((t_1 * t_1) / KbT), (((Ec - mu) - Vef) - EDonor)) / KbT));
} else if (t_0 <= 1e+93) {
tmp = NdChar / (exp((EDonor / KbT)) + 1.0);
} else {
tmp = (NaChar / (exp((EAccept / KbT)) + 1.0)) + (NdChar * 0.5);
}
return tmp;
}
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(NaChar / Float64(exp(Float64(Float64(Float64(EAccept + Float64(Vef + Ev)) - mu) / KbT)) + 1.0)) + Float64(NdChar / Float64(exp(Float64(Float64(mu + Float64(EDonor + Float64(Vef - Ec))) / KbT)) + 1.0))) t_1 = Float64(EDonor + Float64(Vef + Float64(mu - Ec))) tmp = 0.0 if (t_0 <= -2e-99) tmp = Float64(Float64(NaChar / Float64(exp(Float64(Vef / KbT)) + 1.0)) + Float64(NdChar * 0.5)); elseif (t_0 <= -2e-281) tmp = Float64(NdChar / Float64(exp(Float64(mu / KbT)) + 1.0)); elseif (t_0 <= 0.0) tmp = Float64(NdChar / Float64(2.0 - Float64(fma(-0.5, Float64(Float64(t_1 * t_1) / KbT), Float64(Float64(Float64(Ec - mu) - Vef) - EDonor)) / KbT))); elseif (t_0 <= 1e+93) tmp = Float64(NdChar / Float64(exp(Float64(EDonor / KbT)) + 1.0)); else tmp = Float64(Float64(NaChar / Float64(exp(Float64(EAccept / KbT)) + 1.0)) + Float64(NdChar * 0.5)); end return tmp end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(NaChar / N[(N[Exp[N[(N[(N[(EAccept + N[(Vef + Ev), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(N[Exp[N[(N[(mu + N[(EDonor + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(EDonor + N[(Vef + N[(mu - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$0, -2e-99], N[(N[(NaChar / N[(N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NdChar * 0.5), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$0, -2e-281], N[(NdChar / N[(N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$0, 0.0], N[(NdChar / N[(2.0 - N[(N[(-0.5 * N[(N[(t$95$1 * t$95$1), $MachinePrecision] / KbT), $MachinePrecision] + N[(N[(N[(Ec - mu), $MachinePrecision] - Vef), $MachinePrecision] - EDonor), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$0, 1e+93], N[(NdChar / N[(N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar / N[(N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NdChar * 0.5), $MachinePrecision]), $MachinePrecision]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{e^{\frac{\left(EAccept + \left(Vef + Ev\right)\right) - mu}{KbT}} + 1} + \frac{NdChar}{e^{\frac{mu + \left(EDonor + \left(Vef - Ec\right)\right)}{KbT}} + 1}\\
t_1 := EDonor + \left(Vef + \left(mu - Ec\right)\right)\\
\mathbf{if}\;t\_0 \leq -2 \cdot 10^{-99}:\\
\;\;\;\;\frac{NaChar}{e^{\frac{Vef}{KbT}} + 1} + NdChar \cdot 0.5\\
\mathbf{elif}\;t\_0 \leq -2 \cdot 10^{-281}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{mu}{KbT}} + 1}\\
\mathbf{elif}\;t\_0 \leq 0:\\
\;\;\;\;\frac{NdChar}{2 - \frac{\mathsf{fma}\left(-0.5, \frac{t\_1 \cdot t\_1}{KbT}, \left(\left(Ec - mu\right) - Vef\right) - EDonor\right)}{KbT}}\\
\mathbf{elif}\;t\_0 \leq 10^{+93}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{EDonor}{KbT}} + 1}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{e^{\frac{EAccept}{KbT}} + 1} + NdChar \cdot 0.5\\
\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))))) < -2e-99Initial program 99.9%
lift--.f64N/A
lift--.f64N/A
lift--.f64N/A
distribute-frac-negN/A
neg-mul-1N/A
exp-prodN/A
lower-pow.f64N/A
lower-exp.f64N/A
lower-/.f6499.9
lift--.f64N/A
lift--.f64N/A
associate--l-N/A
lower--.f64N/A
lower-+.f6499.9
Applied rewrites99.9%
Taylor expanded in Vef around inf
lower-/.f6483.3
Applied rewrites83.3%
Taylor expanded in KbT around inf
*-commutativeN/A
lower-*.f6458.3
Applied rewrites58.3%
if -2e-99 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < -2e-281Initial program 99.9%
Taylor expanded in NdChar around inf
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
associate--l+N/A
lower-+.f64N/A
sub-negN/A
associate-+r+N/A
mul-1-negN/A
lower-+.f64N/A
mul-1-negN/A
sub-negN/A
lower--.f6458.8
Applied rewrites58.8%
Taylor expanded in mu around inf
lower-/.f6453.5
Applied rewrites53.5%
if -2e-281 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < 0.0Initial program 100.0%
Taylor expanded in NdChar around inf
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
associate--l+N/A
lower-+.f64N/A
sub-negN/A
associate-+r+N/A
mul-1-negN/A
lower-+.f64N/A
mul-1-negN/A
sub-negN/A
lower--.f6498.1
Applied rewrites98.1%
Taylor expanded in KbT around -inf
mul-1-negN/A
unsub-negN/A
lower--.f64N/A
lower-/.f64N/A
Applied rewrites88.9%
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))))) < 1.00000000000000004e93Initial program 100.0%
Taylor expanded in NdChar around inf
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
associate--l+N/A
lower-+.f64N/A
sub-negN/A
associate-+r+N/A
mul-1-negN/A
lower-+.f64N/A
mul-1-negN/A
sub-negN/A
lower--.f6460.5
Applied rewrites60.5%
Taylor expanded in EDonor around inf
lower-/.f6446.3
Applied rewrites46.3%
if 1.00000000000000004e93 < (+.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 EAccept around inf
lower-/.f6480.1
Applied rewrites80.1%
Taylor expanded in KbT around inf
*-commutativeN/A
lower-*.f6448.7
Applied rewrites48.7%
Final simplification59.1%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (+ (/ NaChar (+ (exp (/ EAccept KbT)) 1.0)) (* NdChar 0.5)))
(t_1
(+
(/ NaChar (+ (exp (/ (- (+ EAccept (+ Vef Ev)) mu) KbT)) 1.0))
(/ NdChar (+ (exp (/ (+ mu (+ EDonor (- Vef Ec))) KbT)) 1.0))))
(t_2 (+ EDonor (+ Vef (- mu Ec)))))
(if (<= t_1 -1e-54)
t_0
(if (<= t_1 -2e-281)
(/ NdChar (+ (exp (/ mu KbT)) 1.0))
(if (<= t_1 0.0)
(/
NdChar
(-
2.0
(/
(fma -0.5 (/ (* t_2 t_2) KbT) (- (- (- Ec mu) Vef) EDonor))
KbT)))
(if (<= t_1 1e+93) (/ NdChar (+ (exp (/ EDonor KbT)) 1.0)) t_0))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar / (exp((EAccept / KbT)) + 1.0)) + (NdChar * 0.5);
double t_1 = (NaChar / (exp((((EAccept + (Vef + Ev)) - mu) / KbT)) + 1.0)) + (NdChar / (exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0));
double t_2 = EDonor + (Vef + (mu - Ec));
double tmp;
if (t_1 <= -1e-54) {
tmp = t_0;
} else if (t_1 <= -2e-281) {
tmp = NdChar / (exp((mu / KbT)) + 1.0);
} else if (t_1 <= 0.0) {
tmp = NdChar / (2.0 - (fma(-0.5, ((t_2 * t_2) / KbT), (((Ec - mu) - Vef) - EDonor)) / KbT));
} else if (t_1 <= 1e+93) {
tmp = NdChar / (exp((EDonor / KbT)) + 1.0);
} else {
tmp = t_0;
}
return tmp;
}
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(NaChar / Float64(exp(Float64(EAccept / KbT)) + 1.0)) + Float64(NdChar * 0.5)) t_1 = Float64(Float64(NaChar / Float64(exp(Float64(Float64(Float64(EAccept + Float64(Vef + Ev)) - mu) / KbT)) + 1.0)) + Float64(NdChar / Float64(exp(Float64(Float64(mu + Float64(EDonor + Float64(Vef - Ec))) / KbT)) + 1.0))) t_2 = Float64(EDonor + Float64(Vef + Float64(mu - Ec))) tmp = 0.0 if (t_1 <= -1e-54) tmp = t_0; elseif (t_1 <= -2e-281) tmp = Float64(NdChar / Float64(exp(Float64(mu / KbT)) + 1.0)); elseif (t_1 <= 0.0) tmp = Float64(NdChar / Float64(2.0 - Float64(fma(-0.5, Float64(Float64(t_2 * t_2) / KbT), Float64(Float64(Float64(Ec - mu) - Vef) - EDonor)) / KbT))); elseif (t_1 <= 1e+93) tmp = Float64(NdChar / Float64(exp(Float64(EDonor / KbT)) + 1.0)); else tmp = t_0; end return tmp end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(NaChar / N[(N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NdChar * 0.5), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NaChar / N[(N[Exp[N[(N[(N[(EAccept + N[(Vef + Ev), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(N[Exp[N[(N[(mu + N[(EDonor + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(EDonor + N[(Vef + N[(mu - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$1, -1e-54], t$95$0, If[LessEqual[t$95$1, -2e-281], N[(NdChar / N[(N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$1, 0.0], N[(NdChar / N[(2.0 - N[(N[(-0.5 * N[(N[(t$95$2 * t$95$2), $MachinePrecision] / KbT), $MachinePrecision] + N[(N[(N[(Ec - mu), $MachinePrecision] - Vef), $MachinePrecision] - EDonor), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$1, 1e+93], N[(NdChar / N[(N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], t$95$0]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{e^{\frac{EAccept}{KbT}} + 1} + NdChar \cdot 0.5\\
t_1 := \frac{NaChar}{e^{\frac{\left(EAccept + \left(Vef + Ev\right)\right) - mu}{KbT}} + 1} + \frac{NdChar}{e^{\frac{mu + \left(EDonor + \left(Vef - Ec\right)\right)}{KbT}} + 1}\\
t_2 := EDonor + \left(Vef + \left(mu - Ec\right)\right)\\
\mathbf{if}\;t\_1 \leq -1 \cdot 10^{-54}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;t\_1 \leq -2 \cdot 10^{-281}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{mu}{KbT}} + 1}\\
\mathbf{elif}\;t\_1 \leq 0:\\
\;\;\;\;\frac{NdChar}{2 - \frac{\mathsf{fma}\left(-0.5, \frac{t\_2 \cdot t\_2}{KbT}, \left(\left(Ec - mu\right) - Vef\right) - EDonor\right)}{KbT}}\\
\mathbf{elif}\;t\_1 \leq 10^{+93}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{EDonor}{KbT}} + 1}\\
\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))))) < -1e-54 or 1.00000000000000004e93 < (+.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 EAccept around inf
lower-/.f6478.3
Applied rewrites78.3%
Taylor expanded in KbT around inf
*-commutativeN/A
lower-*.f6453.7
Applied rewrites53.7%
if -1e-54 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < -2e-281Initial program 99.9%
Taylor expanded in NdChar around inf
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
associate--l+N/A
lower-+.f64N/A
sub-negN/A
associate-+r+N/A
mul-1-negN/A
lower-+.f64N/A
mul-1-negN/A
sub-negN/A
lower--.f6456.5
Applied rewrites56.5%
Taylor expanded in mu around inf
lower-/.f6445.5
Applied rewrites45.5%
if -2e-281 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < 0.0Initial program 100.0%
Taylor expanded in NdChar around inf
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
associate--l+N/A
lower-+.f64N/A
sub-negN/A
associate-+r+N/A
mul-1-negN/A
lower-+.f64N/A
mul-1-negN/A
sub-negN/A
lower--.f6498.1
Applied rewrites98.1%
Taylor expanded in KbT around -inf
mul-1-negN/A
unsub-negN/A
lower--.f64N/A
lower-/.f64N/A
Applied rewrites88.9%
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))))) < 1.00000000000000004e93Initial program 100.0%
Taylor expanded in NdChar around inf
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
associate--l+N/A
lower-+.f64N/A
sub-negN/A
associate-+r+N/A
mul-1-negN/A
lower-+.f64N/A
mul-1-negN/A
sub-negN/A
lower--.f6460.5
Applied rewrites60.5%
Taylor expanded in EDonor around inf
lower-/.f6446.3
Applied rewrites46.3%
Final simplification57.7%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (* 0.5 (+ NdChar NaChar)))
(t_1 (+ EDonor (+ Vef (- mu Ec))))
(t_2
(+
(/ NaChar (+ (exp (/ (- (+ EAccept (+ Vef Ev)) mu) KbT)) 1.0))
(/ NdChar (+ (exp (/ (+ mu (+ EDonor (- Vef Ec))) KbT)) 1.0)))))
(if (<= t_2 -2e+121)
t_0
(if (<= t_2 -1e-291)
(/ NaChar (+ (exp (/ Vef KbT)) 1.0))
(if (<= t_2 0.0)
(/
NdChar
(-
2.0
(/
(fma -0.5 (/ (* t_1 t_1) KbT) (- (- (- Ec mu) Vef) EDonor))
KbT)))
(if (<= t_2 5e-70) (/ NaChar (+ (exp (/ EAccept KbT)) 1.0)) t_0))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = 0.5 * (NdChar + NaChar);
double t_1 = EDonor + (Vef + (mu - Ec));
double t_2 = (NaChar / (exp((((EAccept + (Vef + Ev)) - mu) / KbT)) + 1.0)) + (NdChar / (exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0));
double tmp;
if (t_2 <= -2e+121) {
tmp = t_0;
} else if (t_2 <= -1e-291) {
tmp = NaChar / (exp((Vef / KbT)) + 1.0);
} else if (t_2 <= 0.0) {
tmp = NdChar / (2.0 - (fma(-0.5, ((t_1 * t_1) / KbT), (((Ec - mu) - Vef) - EDonor)) / KbT));
} else if (t_2 <= 5e-70) {
tmp = NaChar / (exp((EAccept / KbT)) + 1.0);
} else {
tmp = t_0;
}
return tmp;
}
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(0.5 * Float64(NdChar + NaChar)) t_1 = Float64(EDonor + Float64(Vef + Float64(mu - Ec))) t_2 = Float64(Float64(NaChar / Float64(exp(Float64(Float64(Float64(EAccept + Float64(Vef + Ev)) - mu) / KbT)) + 1.0)) + Float64(NdChar / Float64(exp(Float64(Float64(mu + Float64(EDonor + Float64(Vef - Ec))) / KbT)) + 1.0))) tmp = 0.0 if (t_2 <= -2e+121) tmp = t_0; elseif (t_2 <= -1e-291) tmp = Float64(NaChar / Float64(exp(Float64(Vef / KbT)) + 1.0)); elseif (t_2 <= 0.0) tmp = Float64(NdChar / Float64(2.0 - Float64(fma(-0.5, Float64(Float64(t_1 * t_1) / KbT), Float64(Float64(Float64(Ec - mu) - Vef) - EDonor)) / KbT))); elseif (t_2 <= 5e-70) tmp = Float64(NaChar / Float64(exp(Float64(EAccept / KbT)) + 1.0)); 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[(EDonor + N[(Vef + N[(mu - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(N[(NaChar / N[(N[Exp[N[(N[(N[(EAccept + N[(Vef + Ev), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(N[Exp[N[(N[(mu + N[(EDonor + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$2, -2e+121], t$95$0, If[LessEqual[t$95$2, -1e-291], N[(NaChar / N[(N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$2, 0.0], N[(NdChar / N[(2.0 - N[(N[(-0.5 * N[(N[(t$95$1 * t$95$1), $MachinePrecision] / KbT), $MachinePrecision] + N[(N[(N[(Ec - mu), $MachinePrecision] - Vef), $MachinePrecision] - EDonor), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$2, 5e-70], N[(NaChar / N[(N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], t$95$0]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := 0.5 \cdot \left(NdChar + NaChar\right)\\
t_1 := EDonor + \left(Vef + \left(mu - Ec\right)\right)\\
t_2 := \frac{NaChar}{e^{\frac{\left(EAccept + \left(Vef + Ev\right)\right) - mu}{KbT}} + 1} + \frac{NdChar}{e^{\frac{mu + \left(EDonor + \left(Vef - Ec\right)\right)}{KbT}} + 1}\\
\mathbf{if}\;t\_2 \leq -2 \cdot 10^{+121}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;t\_2 \leq -1 \cdot 10^{-291}:\\
\;\;\;\;\frac{NaChar}{e^{\frac{Vef}{KbT}} + 1}\\
\mathbf{elif}\;t\_2 \leq 0:\\
\;\;\;\;\frac{NdChar}{2 - \frac{\mathsf{fma}\left(-0.5, \frac{t\_1 \cdot t\_1}{KbT}, \left(\left(Ec - mu\right) - Vef\right) - EDonor\right)}{KbT}}\\
\mathbf{elif}\;t\_2 \leq 5 \cdot 10^{-70}:\\
\;\;\;\;\frac{NaChar}{e^{\frac{EAccept}{KbT}} + 1}\\
\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.00000000000000007e121 or 4.9999999999999998e-70 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) Initial program 100.0%
Taylor expanded in KbT around inf
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6446.1
Applied rewrites46.1%
if -2.00000000000000007e121 < (+.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.99999999999999962e-292Initial program 99.9%
lift--.f64N/A
lift--.f64N/A
lift--.f64N/A
distribute-frac-negN/A
neg-mul-1N/A
exp-prodN/A
lower-pow.f64N/A
lower-exp.f64N/A
lower-/.f6499.9
lift--.f64N/A
lift--.f64N/A
associate--l-N/A
lower--.f64N/A
lower-+.f6499.9
Applied rewrites99.9%
Taylor expanded in Vef around inf
lower-/.f6470.4
Applied rewrites70.4%
Taylor expanded in NdChar around 0
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f6443.0
Applied rewrites43.0%
if -9.99999999999999962e-292 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < 0.0Initial program 100.0%
Taylor expanded in NdChar around inf
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
associate--l+N/A
lower-+.f64N/A
sub-negN/A
associate-+r+N/A
mul-1-negN/A
lower-+.f64N/A
mul-1-negN/A
sub-negN/A
lower--.f64100.0
Applied rewrites100.0%
Taylor expanded in KbT around -inf
mul-1-negN/A
unsub-negN/A
lower--.f64N/A
lower-/.f64N/A
Applied rewrites90.6%
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))))) < 4.9999999999999998e-70Initial program 100.0%
Taylor expanded in EAccept around inf
lower-/.f6456.3
Applied rewrites56.3%
Taylor expanded in NdChar around 0
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f6430.5
Applied rewrites30.5%
Final simplification51.5%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NaChar (+ (exp (/ (- (+ EAccept (+ Vef Ev)) mu) KbT)) 1.0)))
(t_1
(+
t_0
(/ NdChar (+ (exp (/ (+ mu (+ EDonor (- Vef Ec))) KbT)) 1.0)))))
(if (<= t_1 -1e+107)
(+
(/ NdChar (+ (pow (exp -1.0) (/ (- (- Ec Vef) (+ EDonor mu)) KbT)) 1.0))
(/ NaChar 2.0))
(if (<= t_1 -2e-46)
(+ t_0 (* NdChar 0.5))
(if (<= t_1 5e-30)
(/ NaChar (+ (exp (/ (+ EAccept (+ Ev (- Vef mu))) KbT)) 1.0))
(fma
NaChar
0.5
(/ NdChar (+ (exp (/ (+ EDonor (+ Vef (- mu Ec))) KbT)) 1.0))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NaChar / (exp((((EAccept + (Vef + Ev)) - mu) / KbT)) + 1.0);
double t_1 = t_0 + (NdChar / (exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0));
double tmp;
if (t_1 <= -1e+107) {
tmp = (NdChar / (pow(exp(-1.0), (((Ec - Vef) - (EDonor + mu)) / KbT)) + 1.0)) + (NaChar / 2.0);
} else if (t_1 <= -2e-46) {
tmp = t_0 + (NdChar * 0.5);
} else if (t_1 <= 5e-30) {
tmp = NaChar / (exp(((EAccept + (Ev + (Vef - mu))) / KbT)) + 1.0);
} else {
tmp = fma(NaChar, 0.5, (NdChar / (exp(((EDonor + (Vef + (mu - Ec))) / KbT)) + 1.0)));
}
return tmp;
}
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NaChar / Float64(exp(Float64(Float64(Float64(EAccept + Float64(Vef + Ev)) - mu) / KbT)) + 1.0)) t_1 = Float64(t_0 + Float64(NdChar / Float64(exp(Float64(Float64(mu + Float64(EDonor + Float64(Vef - Ec))) / KbT)) + 1.0))) tmp = 0.0 if (t_1 <= -1e+107) tmp = Float64(Float64(NdChar / Float64((exp(-1.0) ^ Float64(Float64(Float64(Ec - Vef) - Float64(EDonor + mu)) / KbT)) + 1.0)) + Float64(NaChar / 2.0)); elseif (t_1 <= -2e-46) tmp = Float64(t_0 + Float64(NdChar * 0.5)); elseif (t_1 <= 5e-30) tmp = Float64(NaChar / Float64(exp(Float64(Float64(EAccept + Float64(Ev + Float64(Vef - mu))) / KbT)) + 1.0)); else tmp = fma(NaChar, 0.5, Float64(NdChar / Float64(exp(Float64(Float64(EDonor + Float64(Vef + Float64(mu - Ec))) / KbT)) + 1.0))); end return tmp end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NaChar / N[(N[Exp[N[(N[(N[(EAccept + N[(Vef + Ev), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(t$95$0 + N[(NdChar / N[(N[Exp[N[(N[(mu + N[(EDonor + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$1, -1e+107], N[(N[(NdChar / N[(N[Power[N[Exp[-1.0], $MachinePrecision], N[(N[(N[(Ec - Vef), $MachinePrecision] - N[(EDonor + mu), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NaChar / 2.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$1, -2e-46], N[(t$95$0 + N[(NdChar * 0.5), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$1, 5e-30], N[(NaChar / N[(N[Exp[N[(N[(EAccept + N[(Ev + N[(Vef - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], N[(NaChar * 0.5 + N[(NdChar / N[(N[Exp[N[(N[(EDonor + N[(Vef + N[(mu - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{e^{\frac{\left(EAccept + \left(Vef + Ev\right)\right) - mu}{KbT}} + 1}\\
t_1 := t\_0 + \frac{NdChar}{e^{\frac{mu + \left(EDonor + \left(Vef - Ec\right)\right)}{KbT}} + 1}\\
\mathbf{if}\;t\_1 \leq -1 \cdot 10^{+107}:\\
\;\;\;\;\frac{NdChar}{{\left(e^{-1}\right)}^{\left(\frac{\left(Ec - Vef\right) - \left(EDonor + mu\right)}{KbT}\right)} + 1} + \frac{NaChar}{2}\\
\mathbf{elif}\;t\_1 \leq -2 \cdot 10^{-46}:\\
\;\;\;\;t\_0 + NdChar \cdot 0.5\\
\mathbf{elif}\;t\_1 \leq 5 \cdot 10^{-30}:\\
\;\;\;\;\frac{NaChar}{e^{\frac{EAccept + \left(Ev + \left(Vef - mu\right)\right)}{KbT}} + 1}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(NaChar, 0.5, \frac{NdChar}{e^{\frac{EDonor + \left(Vef + \left(mu - Ec\right)\right)}{KbT}} + 1}\right)\\
\end{array}
\end{array}
if (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < -9.9999999999999997e106Initial program 99.9%
lift--.f64N/A
lift--.f64N/A
lift--.f64N/A
distribute-frac-negN/A
neg-mul-1N/A
exp-prodN/A
lower-pow.f64N/A
lower-exp.f64N/A
lower-/.f6499.9
lift--.f64N/A
lift--.f64N/A
associate--l-N/A
lower--.f64N/A
lower-+.f6499.9
Applied rewrites99.9%
Taylor expanded in Vef around inf
lower-/.f6489.5
Applied rewrites89.5%
Taylor expanded in Vef around 0
Applied rewrites80.9%
if -9.9999999999999997e106 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < -2.00000000000000005e-46Initial program 100.0%
Taylor expanded in KbT around inf
*-commutativeN/A
lower-*.f6485.5
Applied rewrites85.5%
if -2.00000000000000005e-46 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < 4.99999999999999972e-30Initial program 100.0%
Taylor expanded in NdChar around 0
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
associate--l+N/A
lower-+.f64N/A
sub-negN/A
associate-+r+N/A
mul-1-negN/A
lower-+.f64N/A
mul-1-negN/A
sub-negN/A
lower--.f6475.3
Applied rewrites75.3%
if 4.99999999999999972e-30 < (+.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 EAccept around inf
lower-/.f6482.6
Applied rewrites82.6%
Taylor expanded in EAccept around 0
*-commutativeN/A
lower-fma.f64N/A
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
associate--l+N/A
lower-+.f64N/A
associate--l+N/A
lower-+.f64N/A
lower--.f6471.7
Applied rewrites71.7%
Final simplification76.4%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0
(fma
NaChar
0.5
(/ NdChar (+ (exp (/ (+ EDonor (+ Vef (- mu Ec))) KbT)) 1.0))))
(t_1 (/ NaChar (+ (exp (/ (- (+ EAccept (+ Vef Ev)) mu) KbT)) 1.0)))
(t_2
(+
t_1
(/ NdChar (+ (exp (/ (+ mu (+ EDonor (- Vef Ec))) KbT)) 1.0)))))
(if (<= t_2 -1e+107)
t_0
(if (<= t_2 -2e-46)
(+ t_1 (* NdChar 0.5))
(if (<= t_2 5e-30)
(/ NaChar (+ (exp (/ (+ EAccept (+ Ev (- Vef mu))) KbT)) 1.0))
t_0)))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = fma(NaChar, 0.5, (NdChar / (exp(((EDonor + (Vef + (mu - Ec))) / KbT)) + 1.0)));
double t_1 = NaChar / (exp((((EAccept + (Vef + Ev)) - mu) / KbT)) + 1.0);
double t_2 = t_1 + (NdChar / (exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0));
double tmp;
if (t_2 <= -1e+107) {
tmp = t_0;
} else if (t_2 <= -2e-46) {
tmp = t_1 + (NdChar * 0.5);
} else if (t_2 <= 5e-30) {
tmp = NaChar / (exp(((EAccept + (Ev + (Vef - mu))) / KbT)) + 1.0);
} else {
tmp = t_0;
}
return tmp;
}
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = fma(NaChar, 0.5, Float64(NdChar / Float64(exp(Float64(Float64(EDonor + Float64(Vef + Float64(mu - Ec))) / KbT)) + 1.0))) t_1 = Float64(NaChar / Float64(exp(Float64(Float64(Float64(EAccept + Float64(Vef + Ev)) - mu) / KbT)) + 1.0)) t_2 = Float64(t_1 + Float64(NdChar / Float64(exp(Float64(Float64(mu + Float64(EDonor + Float64(Vef - Ec))) / KbT)) + 1.0))) tmp = 0.0 if (t_2 <= -1e+107) tmp = t_0; elseif (t_2 <= -2e-46) tmp = Float64(t_1 + Float64(NdChar * 0.5)); elseif (t_2 <= 5e-30) tmp = Float64(NaChar / Float64(exp(Float64(Float64(EAccept + Float64(Ev + Float64(Vef - mu))) / KbT)) + 1.0)); else tmp = t_0; end return tmp end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NaChar * 0.5 + N[(NdChar / N[(N[Exp[N[(N[(EDonor + N[(Vef + N[(mu - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(NaChar / N[(N[Exp[N[(N[(N[(EAccept + N[(Vef + Ev), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(t$95$1 + N[(NdChar / N[(N[Exp[N[(N[(mu + N[(EDonor + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$2, -1e+107], t$95$0, If[LessEqual[t$95$2, -2e-46], N[(t$95$1 + N[(NdChar * 0.5), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$2, 5e-30], N[(NaChar / N[(N[Exp[N[(N[(EAccept + N[(Ev + N[(Vef - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], t$95$0]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \mathsf{fma}\left(NaChar, 0.5, \frac{NdChar}{e^{\frac{EDonor + \left(Vef + \left(mu - Ec\right)\right)}{KbT}} + 1}\right)\\
t_1 := \frac{NaChar}{e^{\frac{\left(EAccept + \left(Vef + Ev\right)\right) - mu}{KbT}} + 1}\\
t_2 := t\_1 + \frac{NdChar}{e^{\frac{mu + \left(EDonor + \left(Vef - Ec\right)\right)}{KbT}} + 1}\\
\mathbf{if}\;t\_2 \leq -1 \cdot 10^{+107}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;t\_2 \leq -2 \cdot 10^{-46}:\\
\;\;\;\;t\_1 + NdChar \cdot 0.5\\
\mathbf{elif}\;t\_2 \leq 5 \cdot 10^{-30}:\\
\;\;\;\;\frac{NaChar}{e^{\frac{EAccept + \left(Ev + \left(Vef - mu\right)\right)}{KbT}} + 1}\\
\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.9999999999999997e106 or 4.99999999999999972e-30 < (+.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 EAccept around inf
lower-/.f6484.5
Applied rewrites84.5%
Taylor expanded in EAccept around 0
*-commutativeN/A
lower-fma.f64N/A
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
associate--l+N/A
lower-+.f64N/A
associate--l+N/A
lower-+.f64N/A
lower--.f6475.3
Applied rewrites75.3%
if -9.9999999999999997e106 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < -2.00000000000000005e-46Initial program 100.0%
Taylor expanded in KbT around inf
*-commutativeN/A
lower-*.f6485.5
Applied rewrites85.5%
if -2.00000000000000005e-46 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < 4.99999999999999972e-30Initial program 100.0%
Taylor expanded in NdChar around 0
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
associate--l+N/A
lower-+.f64N/A
sub-negN/A
associate-+r+N/A
mul-1-negN/A
lower-+.f64N/A
mul-1-negN/A
sub-negN/A
lower--.f6475.3
Applied rewrites75.3%
Final simplification76.4%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (+ EDonor (+ Vef (- mu Ec))))
(t_1 (* 0.5 (+ NdChar NaChar)))
(t_2
(+
(/ NaChar (+ (exp (/ (- (+ EAccept (+ Vef Ev)) mu) KbT)) 1.0))
(/ NdChar (+ (exp (/ (+ mu (+ EDonor (- Vef Ec))) KbT)) 1.0)))))
(if (<= t_2 -1e-239)
t_1
(if (<= t_2 0.0)
(/
NdChar
(-
2.0
(/ (fma -0.5 (/ (* t_0 t_0) KbT) (- (- (- Ec mu) Vef) EDonor)) KbT)))
(if (<= t_2 5e-70) (/ NaChar (+ (exp (/ EAccept KbT)) 1.0)) t_1)))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = EDonor + (Vef + (mu - Ec));
double t_1 = 0.5 * (NdChar + NaChar);
double t_2 = (NaChar / (exp((((EAccept + (Vef + Ev)) - mu) / KbT)) + 1.0)) + (NdChar / (exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0));
double tmp;
if (t_2 <= -1e-239) {
tmp = t_1;
} else if (t_2 <= 0.0) {
tmp = NdChar / (2.0 - (fma(-0.5, ((t_0 * t_0) / KbT), (((Ec - mu) - Vef) - EDonor)) / KbT));
} else if (t_2 <= 5e-70) {
tmp = NaChar / (exp((EAccept / KbT)) + 1.0);
} else {
tmp = t_1;
}
return tmp;
}
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(EDonor + Float64(Vef + Float64(mu - Ec))) t_1 = Float64(0.5 * Float64(NdChar + NaChar)) t_2 = Float64(Float64(NaChar / Float64(exp(Float64(Float64(Float64(EAccept + Float64(Vef + Ev)) - mu) / KbT)) + 1.0)) + Float64(NdChar / Float64(exp(Float64(Float64(mu + Float64(EDonor + Float64(Vef - Ec))) / KbT)) + 1.0))) tmp = 0.0 if (t_2 <= -1e-239) tmp = t_1; elseif (t_2 <= 0.0) tmp = Float64(NdChar / Float64(2.0 - Float64(fma(-0.5, Float64(Float64(t_0 * t_0) / KbT), Float64(Float64(Float64(Ec - mu) - Vef) - EDonor)) / KbT))); elseif (t_2 <= 5e-70) tmp = Float64(NaChar / Float64(exp(Float64(EAccept / KbT)) + 1.0)); else tmp = t_1; end return tmp end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(EDonor + N[(Vef + N[(mu - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(0.5 * N[(NdChar + NaChar), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(N[(NaChar / N[(N[Exp[N[(N[(N[(EAccept + N[(Vef + Ev), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(N[Exp[N[(N[(mu + N[(EDonor + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$2, -1e-239], t$95$1, If[LessEqual[t$95$2, 0.0], N[(NdChar / N[(2.0 - N[(N[(-0.5 * N[(N[(t$95$0 * t$95$0), $MachinePrecision] / KbT), $MachinePrecision] + N[(N[(N[(Ec - mu), $MachinePrecision] - Vef), $MachinePrecision] - EDonor), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$2, 5e-70], N[(NaChar / N[(N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], t$95$1]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := EDonor + \left(Vef + \left(mu - Ec\right)\right)\\
t_1 := 0.5 \cdot \left(NdChar + NaChar\right)\\
t_2 := \frac{NaChar}{e^{\frac{\left(EAccept + \left(Vef + Ev\right)\right) - mu}{KbT}} + 1} + \frac{NdChar}{e^{\frac{mu + \left(EDonor + \left(Vef - Ec\right)\right)}{KbT}} + 1}\\
\mathbf{if}\;t\_2 \leq -1 \cdot 10^{-239}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;t\_2 \leq 0:\\
\;\;\;\;\frac{NdChar}{2 - \frac{\mathsf{fma}\left(-0.5, \frac{t\_0 \cdot t\_0}{KbT}, \left(\left(Ec - mu\right) - Vef\right) - EDonor\right)}{KbT}}\\
\mathbf{elif}\;t\_2 \leq 5 \cdot 10^{-70}:\\
\;\;\;\;\frac{NaChar}{e^{\frac{EAccept}{KbT}} + 1}\\
\mathbf{else}:\\
\;\;\;\;t\_1\\
\end{array}
\end{array}
if (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < -1.0000000000000001e-239 or 4.9999999999999998e-70 < (+.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
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6442.6
Applied rewrites42.6%
if -1.0000000000000001e-239 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < 0.0Initial program 100.0%
Taylor expanded in NdChar around inf
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
associate--l+N/A
lower-+.f64N/A
sub-negN/A
associate-+r+N/A
mul-1-negN/A
lower-+.f64N/A
mul-1-negN/A
sub-negN/A
lower--.f6496.6
Applied rewrites96.6%
Taylor expanded in KbT around -inf
mul-1-negN/A
unsub-negN/A
lower--.f64N/A
lower-/.f64N/A
Applied rewrites81.2%
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))))) < 4.9999999999999998e-70Initial program 100.0%
Taylor expanded in EAccept around inf
lower-/.f6456.3
Applied rewrites56.3%
Taylor expanded in NdChar around 0
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f6430.5
Applied rewrites30.5%
Final simplification49.1%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NdChar (+ (exp (/ (+ mu (+ EDonor (- Vef Ec))) KbT)) 1.0)))
(t_1
(+
(/ NaChar (+ (exp (/ (- (+ EAccept (+ Vef Ev)) mu) KbT)) 1.0))
t_0)))
(if (<= t_1 -5e-252)
(+
(/ NaChar (+ (exp (/ Vef KbT)) 1.0))
(/ NdChar (+ (exp (/ (+ EDonor (+ Vef mu)) KbT)) 1.0)))
(if (<= t_1 1e-79)
(/ NaChar (+ (exp (/ (+ EAccept (+ Ev (- Vef mu))) KbT)) 1.0))
(+ t_0 (/ NaChar (+ (exp (/ EAccept KbT)) 1.0)))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0);
double t_1 = (NaChar / (exp((((EAccept + (Vef + Ev)) - mu) / KbT)) + 1.0)) + t_0;
double tmp;
if (t_1 <= -5e-252) {
tmp = (NaChar / (exp((Vef / KbT)) + 1.0)) + (NdChar / (exp(((EDonor + (Vef + mu)) / KbT)) + 1.0));
} else if (t_1 <= 1e-79) {
tmp = NaChar / (exp(((EAccept + (Ev + (Vef - mu))) / KbT)) + 1.0);
} else {
tmp = t_0 + (NaChar / (exp((EAccept / KbT)) + 1.0));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = ndchar / (exp(((mu + (edonor + (vef - ec))) / kbt)) + 1.0d0)
t_1 = (nachar / (exp((((eaccept + (vef + ev)) - mu) / kbt)) + 1.0d0)) + t_0
if (t_1 <= (-5d-252)) then
tmp = (nachar / (exp((vef / kbt)) + 1.0d0)) + (ndchar / (exp(((edonor + (vef + mu)) / kbt)) + 1.0d0))
else if (t_1 <= 1d-79) then
tmp = nachar / (exp(((eaccept + (ev + (vef - mu))) / kbt)) + 1.0d0)
else
tmp = t_0 + (nachar / (exp((eaccept / kbt)) + 1.0d0))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (Math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0);
double t_1 = (NaChar / (Math.exp((((EAccept + (Vef + Ev)) - mu) / KbT)) + 1.0)) + t_0;
double tmp;
if (t_1 <= -5e-252) {
tmp = (NaChar / (Math.exp((Vef / KbT)) + 1.0)) + (NdChar / (Math.exp(((EDonor + (Vef + mu)) / KbT)) + 1.0));
} else if (t_1 <= 1e-79) {
tmp = NaChar / (Math.exp(((EAccept + (Ev + (Vef - mu))) / KbT)) + 1.0);
} else {
tmp = t_0 + (NaChar / (Math.exp((EAccept / KbT)) + 1.0));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NdChar / (math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0) t_1 = (NaChar / (math.exp((((EAccept + (Vef + Ev)) - mu) / KbT)) + 1.0)) + t_0 tmp = 0 if t_1 <= -5e-252: tmp = (NaChar / (math.exp((Vef / KbT)) + 1.0)) + (NdChar / (math.exp(((EDonor + (Vef + mu)) / KbT)) + 1.0)) elif t_1 <= 1e-79: tmp = NaChar / (math.exp(((EAccept + (Ev + (Vef - mu))) / KbT)) + 1.0) else: tmp = t_0 + (NaChar / (math.exp((EAccept / KbT)) + 1.0)) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NdChar / Float64(exp(Float64(Float64(mu + Float64(EDonor + Float64(Vef - Ec))) / KbT)) + 1.0)) t_1 = Float64(Float64(NaChar / Float64(exp(Float64(Float64(Float64(EAccept + Float64(Vef + Ev)) - mu) / KbT)) + 1.0)) + t_0) tmp = 0.0 if (t_1 <= -5e-252) tmp = Float64(Float64(NaChar / Float64(exp(Float64(Vef / KbT)) + 1.0)) + Float64(NdChar / Float64(exp(Float64(Float64(EDonor + Float64(Vef + mu)) / KbT)) + 1.0))); elseif (t_1 <= 1e-79) tmp = Float64(NaChar / Float64(exp(Float64(Float64(EAccept + Float64(Ev + Float64(Vef - mu))) / KbT)) + 1.0)); else tmp = Float64(t_0 + Float64(NaChar / Float64(exp(Float64(EAccept / KbT)) + 1.0))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NdChar / (exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0); t_1 = (NaChar / (exp((((EAccept + (Vef + Ev)) - mu) / KbT)) + 1.0)) + t_0; tmp = 0.0; if (t_1 <= -5e-252) tmp = (NaChar / (exp((Vef / KbT)) + 1.0)) + (NdChar / (exp(((EDonor + (Vef + mu)) / KbT)) + 1.0)); elseif (t_1 <= 1e-79) tmp = NaChar / (exp(((EAccept + (Ev + (Vef - mu))) / KbT)) + 1.0); else tmp = t_0 + (NaChar / (exp((EAccept / KbT)) + 1.0)); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NdChar / N[(N[Exp[N[(N[(mu + N[(EDonor + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NaChar / N[(N[Exp[N[(N[(N[(EAccept + N[(Vef + Ev), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + t$95$0), $MachinePrecision]}, If[LessEqual[t$95$1, -5e-252], N[(N[(NaChar / N[(N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(N[Exp[N[(N[(EDonor + N[(Vef + mu), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$1, 1e-79], N[(NaChar / N[(N[Exp[N[(N[(EAccept + N[(Ev + N[(Vef - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], N[(t$95$0 + N[(NaChar / N[(N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{e^{\frac{mu + \left(EDonor + \left(Vef - Ec\right)\right)}{KbT}} + 1}\\
t_1 := \frac{NaChar}{e^{\frac{\left(EAccept + \left(Vef + Ev\right)\right) - mu}{KbT}} + 1} + t\_0\\
\mathbf{if}\;t\_1 \leq -5 \cdot 10^{-252}:\\
\;\;\;\;\frac{NaChar}{e^{\frac{Vef}{KbT}} + 1} + \frac{NdChar}{e^{\frac{EDonor + \left(Vef + mu\right)}{KbT}} + 1}\\
\mathbf{elif}\;t\_1 \leq 10^{-79}:\\
\;\;\;\;\frac{NaChar}{e^{\frac{EAccept + \left(Ev + \left(Vef - mu\right)\right)}{KbT}} + 1}\\
\mathbf{else}:\\
\;\;\;\;t\_0 + \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.00000000000000008e-252Initial program 99.9%
lift--.f64N/A
lift--.f64N/A
lift--.f64N/A
distribute-frac-negN/A
neg-mul-1N/A
exp-prodN/A
lower-pow.f64N/A
lower-exp.f64N/A
lower-/.f6499.9
lift--.f64N/A
lift--.f64N/A
associate--l-N/A
lower--.f64N/A
lower-+.f6499.9
Applied rewrites99.9%
Taylor expanded in Vef around inf
lower-/.f6479.2
Applied rewrites79.2%
Taylor expanded in Ec around 0
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
lower-+.f64N/A
lower-+.f6477.0
Applied rewrites77.0%
if -5.00000000000000008e-252 < (+.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))))) < 1e-79Initial program 100.0%
Taylor expanded in NdChar around 0
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
associate--l+N/A
lower-+.f64N/A
sub-negN/A
associate-+r+N/A
mul-1-negN/A
lower-+.f64N/A
mul-1-negN/A
sub-negN/A
lower--.f6484.0
Applied rewrites84.0%
if 1e-79 < (+.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 EAccept around inf
lower-/.f6479.6
Applied rewrites79.6%
Final simplification80.0%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0
(+
(/ NaChar (+ (exp (/ Vef KbT)) 1.0))
(/ NdChar (+ (exp (/ (+ EDonor (+ Vef mu)) KbT)) 1.0))))
(t_1
(+
(/ NaChar (+ (exp (/ (- (+ EAccept (+ Vef Ev)) mu) KbT)) 1.0))
(/ NdChar (+ (exp (/ (+ mu (+ EDonor (- Vef Ec))) KbT)) 1.0)))))
(if (<= t_1 -5e-252)
t_0
(if (<= t_1 5e-30)
(/ NaChar (+ (exp (/ (+ EAccept (+ Ev (- Vef mu))) KbT)) 1.0))
t_0))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar / (exp((Vef / KbT)) + 1.0)) + (NdChar / (exp(((EDonor + (Vef + mu)) / KbT)) + 1.0));
double t_1 = (NaChar / (exp((((EAccept + (Vef + Ev)) - mu) / KbT)) + 1.0)) + (NdChar / (exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0));
double tmp;
if (t_1 <= -5e-252) {
tmp = t_0;
} else if (t_1 <= 5e-30) {
tmp = NaChar / (exp(((EAccept + (Ev + (Vef - mu))) / KbT)) + 1.0);
} else {
tmp = t_0;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = (nachar / (exp((vef / kbt)) + 1.0d0)) + (ndchar / (exp(((edonor + (vef + mu)) / kbt)) + 1.0d0))
t_1 = (nachar / (exp((((eaccept + (vef + ev)) - mu) / kbt)) + 1.0d0)) + (ndchar / (exp(((mu + (edonor + (vef - ec))) / kbt)) + 1.0d0))
if (t_1 <= (-5d-252)) then
tmp = t_0
else if (t_1 <= 5d-30) then
tmp = nachar / (exp(((eaccept + (ev + (vef - mu))) / kbt)) + 1.0d0)
else
tmp = t_0
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar / (Math.exp((Vef / KbT)) + 1.0)) + (NdChar / (Math.exp(((EDonor + (Vef + mu)) / KbT)) + 1.0));
double t_1 = (NaChar / (Math.exp((((EAccept + (Vef + Ev)) - mu) / KbT)) + 1.0)) + (NdChar / (Math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0));
double tmp;
if (t_1 <= -5e-252) {
tmp = t_0;
} else if (t_1 <= 5e-30) {
tmp = NaChar / (Math.exp(((EAccept + (Ev + (Vef - mu))) / KbT)) + 1.0);
} else {
tmp = t_0;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = (NaChar / (math.exp((Vef / KbT)) + 1.0)) + (NdChar / (math.exp(((EDonor + (Vef + mu)) / KbT)) + 1.0)) t_1 = (NaChar / (math.exp((((EAccept + (Vef + Ev)) - mu) / KbT)) + 1.0)) + (NdChar / (math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0)) tmp = 0 if t_1 <= -5e-252: tmp = t_0 elif t_1 <= 5e-30: tmp = NaChar / (math.exp(((EAccept + (Ev + (Vef - mu))) / KbT)) + 1.0) else: tmp = t_0 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(NaChar / Float64(exp(Float64(Vef / KbT)) + 1.0)) + Float64(NdChar / Float64(exp(Float64(Float64(EDonor + Float64(Vef + mu)) / KbT)) + 1.0))) t_1 = Float64(Float64(NaChar / Float64(exp(Float64(Float64(Float64(EAccept + Float64(Vef + Ev)) - mu) / KbT)) + 1.0)) + Float64(NdChar / Float64(exp(Float64(Float64(mu + Float64(EDonor + Float64(Vef - Ec))) / KbT)) + 1.0))) tmp = 0.0 if (t_1 <= -5e-252) tmp = t_0; elseif (t_1 <= 5e-30) tmp = Float64(NaChar / Float64(exp(Float64(Float64(EAccept + Float64(Ev + Float64(Vef - mu))) / KbT)) + 1.0)); else tmp = t_0; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = (NaChar / (exp((Vef / KbT)) + 1.0)) + (NdChar / (exp(((EDonor + (Vef + mu)) / KbT)) + 1.0)); t_1 = (NaChar / (exp((((EAccept + (Vef + Ev)) - mu) / KbT)) + 1.0)) + (NdChar / (exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0)); tmp = 0.0; if (t_1 <= -5e-252) tmp = t_0; elseif (t_1 <= 5e-30) tmp = NaChar / (exp(((EAccept + (Ev + (Vef - mu))) / KbT)) + 1.0); else tmp = t_0; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(NaChar / N[(N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(N[Exp[N[(N[(EDonor + N[(Vef + mu), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NaChar / N[(N[Exp[N[(N[(N[(EAccept + N[(Vef + Ev), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(N[Exp[N[(N[(mu + N[(EDonor + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$1, -5e-252], t$95$0, If[LessEqual[t$95$1, 5e-30], N[(NaChar / N[(N[Exp[N[(N[(EAccept + N[(Ev + N[(Vef - mu), $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{Vef}{KbT}} + 1} + \frac{NdChar}{e^{\frac{EDonor + \left(Vef + mu\right)}{KbT}} + 1}\\
t_1 := \frac{NaChar}{e^{\frac{\left(EAccept + \left(Vef + Ev\right)\right) - mu}{KbT}} + 1} + \frac{NdChar}{e^{\frac{mu + \left(EDonor + \left(Vef - Ec\right)\right)}{KbT}} + 1}\\
\mathbf{if}\;t\_1 \leq -5 \cdot 10^{-252}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;t\_1 \leq 5 \cdot 10^{-30}:\\
\;\;\;\;\frac{NaChar}{e^{\frac{EAccept + \left(Ev + \left(Vef - mu\right)\right)}{KbT}} + 1}\\
\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))))) < -5.00000000000000008e-252 or 4.99999999999999972e-30 < (+.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%
lift--.f64N/A
lift--.f64N/A
lift--.f64N/A
distribute-frac-negN/A
neg-mul-1N/A
exp-prodN/A
lower-pow.f64N/A
lower-exp.f64N/A
lower-/.f64100.0
lift--.f64N/A
lift--.f64N/A
associate--l-N/A
lower--.f64N/A
lower-+.f64100.0
Applied rewrites100.0%
Taylor expanded in Vef around inf
lower-/.f6479.7
Applied rewrites79.7%
Taylor expanded in Ec around 0
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
lower-+.f64N/A
lower-+.f6475.0
Applied rewrites75.0%
if -5.00000000000000008e-252 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < 4.99999999999999972e-30Initial program 100.0%
Taylor expanded in NdChar around 0
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
associate--l+N/A
lower-+.f64N/A
sub-negN/A
associate-+r+N/A
mul-1-negN/A
lower-+.f64N/A
mul-1-negN/A
sub-negN/A
lower--.f6480.9
Applied rewrites80.9%
Final simplification77.0%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0
(fma
NaChar
0.5
(/ NdChar (+ (exp (/ (+ EDonor (+ Vef (- mu Ec))) KbT)) 1.0))))
(t_1
(+
(/ NaChar (+ (exp (/ (- (+ EAccept (+ Vef Ev)) mu) KbT)) 1.0))
(/ NdChar (+ (exp (/ (+ mu (+ EDonor (- Vef Ec))) KbT)) 1.0)))))
(if (<= t_1 -1e+107)
t_0
(if (<= t_1 5e-30)
(/ NaChar (+ (exp (/ (+ EAccept (+ Ev (- Vef mu))) KbT)) 1.0))
t_0))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = fma(NaChar, 0.5, (NdChar / (exp(((EDonor + (Vef + (mu - Ec))) / KbT)) + 1.0)));
double t_1 = (NaChar / (exp((((EAccept + (Vef + Ev)) - mu) / KbT)) + 1.0)) + (NdChar / (exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0));
double tmp;
if (t_1 <= -1e+107) {
tmp = t_0;
} else if (t_1 <= 5e-30) {
tmp = NaChar / (exp(((EAccept + (Ev + (Vef - mu))) / KbT)) + 1.0);
} else {
tmp = t_0;
}
return tmp;
}
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = fma(NaChar, 0.5, Float64(NdChar / Float64(exp(Float64(Float64(EDonor + Float64(Vef + Float64(mu - Ec))) / KbT)) + 1.0))) t_1 = Float64(Float64(NaChar / Float64(exp(Float64(Float64(Float64(EAccept + Float64(Vef + Ev)) - mu) / KbT)) + 1.0)) + Float64(NdChar / Float64(exp(Float64(Float64(mu + Float64(EDonor + Float64(Vef - Ec))) / KbT)) + 1.0))) tmp = 0.0 if (t_1 <= -1e+107) tmp = t_0; elseif (t_1 <= 5e-30) tmp = Float64(NaChar / Float64(exp(Float64(Float64(EAccept + Float64(Ev + Float64(Vef - mu))) / KbT)) + 1.0)); else tmp = t_0; end return tmp end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NaChar * 0.5 + N[(NdChar / N[(N[Exp[N[(N[(EDonor + N[(Vef + N[(mu - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NaChar / N[(N[Exp[N[(N[(N[(EAccept + N[(Vef + Ev), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(N[Exp[N[(N[(mu + N[(EDonor + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$1, -1e+107], t$95$0, If[LessEqual[t$95$1, 5e-30], N[(NaChar / N[(N[Exp[N[(N[(EAccept + N[(Ev + N[(Vef - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], t$95$0]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \mathsf{fma}\left(NaChar, 0.5, \frac{NdChar}{e^{\frac{EDonor + \left(Vef + \left(mu - Ec\right)\right)}{KbT}} + 1}\right)\\
t_1 := \frac{NaChar}{e^{\frac{\left(EAccept + \left(Vef + Ev\right)\right) - mu}{KbT}} + 1} + \frac{NdChar}{e^{\frac{mu + \left(EDonor + \left(Vef - Ec\right)\right)}{KbT}} + 1}\\
\mathbf{if}\;t\_1 \leq -1 \cdot 10^{+107}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;t\_1 \leq 5 \cdot 10^{-30}:\\
\;\;\;\;\frac{NaChar}{e^{\frac{EAccept + \left(Ev + \left(Vef - mu\right)\right)}{KbT}} + 1}\\
\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.9999999999999997e106 or 4.99999999999999972e-30 < (+.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 EAccept around inf
lower-/.f6484.5
Applied rewrites84.5%
Taylor expanded in EAccept around 0
*-commutativeN/A
lower-fma.f64N/A
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
associate--l+N/A
lower-+.f64N/A
associate--l+N/A
lower-+.f64N/A
lower--.f6475.3
Applied rewrites75.3%
if -9.9999999999999997e106 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < 4.99999999999999972e-30Initial program 100.0%
Taylor expanded in NdChar around 0
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
associate--l+N/A
lower-+.f64N/A
sub-negN/A
associate-+r+N/A
mul-1-negN/A
lower-+.f64N/A
mul-1-negN/A
sub-negN/A
lower--.f6473.5
Applied rewrites73.5%
Final simplification74.3%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (+ EDonor (+ Vef (- mu Ec))))
(t_1 (* 0.5 (+ NdChar NaChar)))
(t_2
(+
(/ NaChar (+ (exp (/ (- (+ EAccept (+ Vef Ev)) mu) KbT)) 1.0))
(/ NdChar (+ (exp (/ (+ mu (+ EDonor (- Vef Ec))) KbT)) 1.0)))))
(if (<= t_2 -1e-239)
t_1
(if (<= t_2 1e-148)
(/
NdChar
(-
2.0
(/ (fma -0.5 (/ (* t_0 t_0) KbT) (- (- (- Ec mu) Vef) EDonor)) 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 = EDonor + (Vef + (mu - Ec));
double t_1 = 0.5 * (NdChar + NaChar);
double t_2 = (NaChar / (exp((((EAccept + (Vef + Ev)) - mu) / KbT)) + 1.0)) + (NdChar / (exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0));
double tmp;
if (t_2 <= -1e-239) {
tmp = t_1;
} else if (t_2 <= 1e-148) {
tmp = NdChar / (2.0 - (fma(-0.5, ((t_0 * t_0) / KbT), (((Ec - mu) - Vef) - EDonor)) / KbT));
} else {
tmp = t_1;
}
return tmp;
}
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(EDonor + Float64(Vef + Float64(mu - Ec))) t_1 = Float64(0.5 * Float64(NdChar + NaChar)) t_2 = Float64(Float64(NaChar / Float64(exp(Float64(Float64(Float64(EAccept + Float64(Vef + Ev)) - mu) / KbT)) + 1.0)) + Float64(NdChar / Float64(exp(Float64(Float64(mu + Float64(EDonor + Float64(Vef - Ec))) / KbT)) + 1.0))) tmp = 0.0 if (t_2 <= -1e-239) tmp = t_1; elseif (t_2 <= 1e-148) tmp = Float64(NdChar / Float64(2.0 - Float64(fma(-0.5, Float64(Float64(t_0 * t_0) / KbT), Float64(Float64(Float64(Ec - mu) - Vef) - EDonor)) / KbT))); else tmp = t_1; end return tmp end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(EDonor + N[(Vef + N[(mu - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(0.5 * N[(NdChar + NaChar), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(N[(NaChar / N[(N[Exp[N[(N[(N[(EAccept + N[(Vef + Ev), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(N[Exp[N[(N[(mu + N[(EDonor + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$2, -1e-239], t$95$1, If[LessEqual[t$95$2, 1e-148], N[(NdChar / N[(2.0 - N[(N[(-0.5 * N[(N[(t$95$0 * t$95$0), $MachinePrecision] / KbT), $MachinePrecision] + N[(N[(N[(Ec - mu), $MachinePrecision] - Vef), $MachinePrecision] - EDonor), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$1]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := EDonor + \left(Vef + \left(mu - Ec\right)\right)\\
t_1 := 0.5 \cdot \left(NdChar + NaChar\right)\\
t_2 := \frac{NaChar}{e^{\frac{\left(EAccept + \left(Vef + Ev\right)\right) - mu}{KbT}} + 1} + \frac{NdChar}{e^{\frac{mu + \left(EDonor + \left(Vef - Ec\right)\right)}{KbT}} + 1}\\
\mathbf{if}\;t\_2 \leq -1 \cdot 10^{-239}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;t\_2 \leq 10^{-148}:\\
\;\;\;\;\frac{NdChar}{2 - \frac{\mathsf{fma}\left(-0.5, \frac{t\_0 \cdot t\_0}{KbT}, \left(\left(Ec - mu\right) - Vef\right) - EDonor\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.0000000000000001e-239 or 9.99999999999999936e-149 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) Initial program 100.0%
Taylor expanded in KbT around inf
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6441.5
Applied rewrites41.5%
if -1.0000000000000001e-239 < (+.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.99999999999999936e-149Initial program 100.0%
Taylor expanded in NdChar around inf
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
associate--l+N/A
lower-+.f64N/A
sub-negN/A
associate-+r+N/A
mul-1-negN/A
lower-+.f64N/A
mul-1-negN/A
sub-negN/A
lower--.f6483.4
Applied rewrites83.4%
Taylor expanded in KbT around -inf
mul-1-negN/A
unsub-negN/A
lower--.f64N/A
lower-/.f64N/A
Applied rewrites62.0%
Final simplification47.4%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (+ EDonor (+ Vef mu)))
(t_1 (* 0.5 (+ NdChar NaChar)))
(t_2
(+
(/ NaChar (+ (exp (/ (- (+ EAccept (+ Vef Ev)) mu) KbT)) 1.0))
(/ NdChar (+ (exp (/ (+ mu (+ EDonor (- Vef Ec))) KbT)) 1.0)))))
(if (<= t_2 -1e-239)
t_1
(if (<= t_2 1e-148)
(/
NdChar
(-
2.0
(/ (fma -0.5 (/ (* t_0 t_0) KbT) (- (- EDonor) (+ Vef mu))) 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 = EDonor + (Vef + mu);
double t_1 = 0.5 * (NdChar + NaChar);
double t_2 = (NaChar / (exp((((EAccept + (Vef + Ev)) - mu) / KbT)) + 1.0)) + (NdChar / (exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0));
double tmp;
if (t_2 <= -1e-239) {
tmp = t_1;
} else if (t_2 <= 1e-148) {
tmp = NdChar / (2.0 - (fma(-0.5, ((t_0 * t_0) / KbT), (-EDonor - (Vef + mu))) / KbT));
} else {
tmp = t_1;
}
return tmp;
}
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(EDonor + Float64(Vef + mu)) t_1 = Float64(0.5 * Float64(NdChar + NaChar)) t_2 = Float64(Float64(NaChar / Float64(exp(Float64(Float64(Float64(EAccept + Float64(Vef + Ev)) - mu) / KbT)) + 1.0)) + Float64(NdChar / Float64(exp(Float64(Float64(mu + Float64(EDonor + Float64(Vef - Ec))) / KbT)) + 1.0))) tmp = 0.0 if (t_2 <= -1e-239) tmp = t_1; elseif (t_2 <= 1e-148) tmp = Float64(NdChar / Float64(2.0 - Float64(fma(-0.5, Float64(Float64(t_0 * t_0) / KbT), Float64(Float64(-EDonor) - Float64(Vef + mu))) / KbT))); else tmp = t_1; end return tmp end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(EDonor + N[(Vef + mu), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(0.5 * N[(NdChar + NaChar), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(N[(NaChar / N[(N[Exp[N[(N[(N[(EAccept + N[(Vef + Ev), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(N[Exp[N[(N[(mu + N[(EDonor + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$2, -1e-239], t$95$1, If[LessEqual[t$95$2, 1e-148], N[(NdChar / N[(2.0 - N[(N[(-0.5 * N[(N[(t$95$0 * t$95$0), $MachinePrecision] / KbT), $MachinePrecision] + N[((-EDonor) - N[(Vef + mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$1]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := EDonor + \left(Vef + mu\right)\\
t_1 := 0.5 \cdot \left(NdChar + NaChar\right)\\
t_2 := \frac{NaChar}{e^{\frac{\left(EAccept + \left(Vef + Ev\right)\right) - mu}{KbT}} + 1} + \frac{NdChar}{e^{\frac{mu + \left(EDonor + \left(Vef - Ec\right)\right)}{KbT}} + 1}\\
\mathbf{if}\;t\_2 \leq -1 \cdot 10^{-239}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;t\_2 \leq 10^{-148}:\\
\;\;\;\;\frac{NdChar}{2 - \frac{\mathsf{fma}\left(-0.5, \frac{t\_0 \cdot t\_0}{KbT}, \left(-EDonor\right) - \left(Vef + mu\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.0000000000000001e-239 or 9.99999999999999936e-149 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) Initial program 100.0%
Taylor expanded in KbT around inf
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6441.5
Applied rewrites41.5%
if -1.0000000000000001e-239 < (+.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.99999999999999936e-149Initial program 100.0%
Taylor expanded in NdChar around inf
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
associate--l+N/A
lower-+.f64N/A
sub-negN/A
associate-+r+N/A
mul-1-negN/A
lower-+.f64N/A
mul-1-negN/A
sub-negN/A
lower--.f6483.4
Applied rewrites83.4%
Taylor expanded in KbT around -inf
mul-1-negN/A
unsub-negN/A
lower--.f64N/A
lower-/.f64N/A
Applied rewrites62.0%
Taylor expanded in Ec around 0
sub-negN/A
lower-fma.f64N/A
lower-/.f64N/A
unpow2N/A
lower-*.f64N/A
lower-+.f64N/A
lower-+.f64N/A
lower-+.f64N/A
lower-+.f64N/A
lower-neg.f64N/A
lower-+.f64N/A
lower-+.f6459.5
Applied rewrites59.5%
Final simplification46.6%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (* 0.5 (+ NdChar NaChar)))
(t_1
(+
(/ NaChar (+ (exp (/ (- (+ EAccept (+ Vef Ev)) mu) KbT)) 1.0))
(/ NdChar (+ (exp (/ (+ mu (+ EDonor (- Vef Ec))) KbT)) 1.0)))))
(if (<= t_1 -1e-239)
t_0
(if (<= t_1 0.0)
(/ NdChar (+ 2.0 (/ (- (+ EDonor (+ Vef 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 = (NaChar / (exp((((EAccept + (Vef + Ev)) - mu) / KbT)) + 1.0)) + (NdChar / (exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0));
double tmp;
if (t_1 <= -1e-239) {
tmp = t_0;
} else if (t_1 <= 0.0) {
tmp = NdChar / (2.0 + (((EDonor + (Vef + mu)) - Ec) / KbT));
} else {
tmp = t_0;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = 0.5d0 * (ndchar + nachar)
t_1 = (nachar / (exp((((eaccept + (vef + ev)) - mu) / kbt)) + 1.0d0)) + (ndchar / (exp(((mu + (edonor + (vef - ec))) / kbt)) + 1.0d0))
if (t_1 <= (-1d-239)) then
tmp = t_0
else if (t_1 <= 0.0d0) then
tmp = ndchar / (2.0d0 + (((edonor + (vef + mu)) - ec) / kbt))
else
tmp = t_0
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = 0.5 * (NdChar + NaChar);
double t_1 = (NaChar / (Math.exp((((EAccept + (Vef + Ev)) - mu) / KbT)) + 1.0)) + (NdChar / (Math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0));
double tmp;
if (t_1 <= -1e-239) {
tmp = t_0;
} else if (t_1 <= 0.0) {
tmp = NdChar / (2.0 + (((EDonor + (Vef + mu)) - Ec) / 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 = (NaChar / (math.exp((((EAccept + (Vef + Ev)) - mu) / KbT)) + 1.0)) + (NdChar / (math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0)) tmp = 0 if t_1 <= -1e-239: tmp = t_0 elif t_1 <= 0.0: tmp = NdChar / (2.0 + (((EDonor + (Vef + 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(NaChar / Float64(exp(Float64(Float64(Float64(EAccept + Float64(Vef + Ev)) - mu) / KbT)) + 1.0)) + Float64(NdChar / Float64(exp(Float64(Float64(mu + Float64(EDonor + Float64(Vef - Ec))) / KbT)) + 1.0))) tmp = 0.0 if (t_1 <= -1e-239) tmp = t_0; elseif (t_1 <= 0.0) tmp = Float64(NdChar / Float64(2.0 + Float64(Float64(Float64(EDonor + Float64(Vef + mu)) - Ec) / KbT))); else tmp = t_0; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = 0.5 * (NdChar + NaChar); t_1 = (NaChar / (exp((((EAccept + (Vef + Ev)) - mu) / KbT)) + 1.0)) + (NdChar / (exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0)); tmp = 0.0; if (t_1 <= -1e-239) tmp = t_0; elseif (t_1 <= 0.0) tmp = NdChar / (2.0 + (((EDonor + (Vef + mu)) - Ec) / KbT)); else tmp = t_0; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(0.5 * N[(NdChar + NaChar), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NaChar / N[(N[Exp[N[(N[(N[(EAccept + N[(Vef + Ev), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(N[Exp[N[(N[(mu + N[(EDonor + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$1, -1e-239], t$95$0, If[LessEqual[t$95$1, 0.0], N[(NdChar / N[(2.0 + N[(N[(N[(EDonor + N[(Vef + mu), $MachinePrecision]), $MachinePrecision] - Ec), $MachinePrecision] / 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{NaChar}{e^{\frac{\left(EAccept + \left(Vef + Ev\right)\right) - mu}{KbT}} + 1} + \frac{NdChar}{e^{\frac{mu + \left(EDonor + \left(Vef - Ec\right)\right)}{KbT}} + 1}\\
\mathbf{if}\;t\_1 \leq -1 \cdot 10^{-239}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;t\_1 \leq 0:\\
\;\;\;\;\frac{NdChar}{2 + \frac{\left(EDonor + \left(Vef + mu\right)\right) - Ec}{KbT}}\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < -1.0000000000000001e-239 or 0.0 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) Initial program 100.0%
Taylor expanded in KbT around inf
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6438.5
Applied rewrites38.5%
if -1.0000000000000001e-239 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < 0.0Initial program 100.0%
Taylor expanded in NdChar around inf
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
associate--l+N/A
lower-+.f64N/A
sub-negN/A
associate-+r+N/A
mul-1-negN/A
lower-+.f64N/A
mul-1-negN/A
sub-negN/A
lower--.f6496.6
Applied rewrites96.6%
Taylor expanded in KbT around -inf
mul-1-negN/A
unsub-negN/A
lower--.f64N/A
lower-/.f64N/A
Applied rewrites81.2%
Taylor expanded in KbT around inf
lower--.f64N/A
lower-+.f64N/A
lower-+.f6458.8
Applied rewrites58.8%
Final simplification42.7%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (* 0.5 (+ NdChar NaChar)))
(t_1
(+
(/ NaChar (+ (exp (/ (- (+ EAccept (+ Vef Ev)) mu) KbT)) 1.0))
(/ NdChar (+ (exp (/ (+ mu (+ EDonor (- Vef Ec))) KbT)) 1.0)))))
(if (<= t_1 -1e-291)
t_0
(if (<= t_1 0.0) (/ (* 2.0 (* NdChar (* KbT KbT))) (* Vef Vef)) 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 = (NaChar / (exp((((EAccept + (Vef + Ev)) - mu) / KbT)) + 1.0)) + (NdChar / (exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0));
double tmp;
if (t_1 <= -1e-291) {
tmp = t_0;
} else if (t_1 <= 0.0) {
tmp = (2.0 * (NdChar * (KbT * KbT))) / (Vef * Vef);
} 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 = (nachar / (exp((((eaccept + (vef + ev)) - mu) / kbt)) + 1.0d0)) + (ndchar / (exp(((mu + (edonor + (vef - ec))) / kbt)) + 1.0d0))
if (t_1 <= (-1d-291)) then
tmp = t_0
else if (t_1 <= 0.0d0) then
tmp = (2.0d0 * (ndchar * (kbt * kbt))) / (vef * vef)
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 = (NaChar / (Math.exp((((EAccept + (Vef + Ev)) - mu) / KbT)) + 1.0)) + (NdChar / (Math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0));
double tmp;
if (t_1 <= -1e-291) {
tmp = t_0;
} else if (t_1 <= 0.0) {
tmp = (2.0 * (NdChar * (KbT * KbT))) / (Vef * Vef);
} 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 = (NaChar / (math.exp((((EAccept + (Vef + Ev)) - mu) / KbT)) + 1.0)) + (NdChar / (math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0)) tmp = 0 if t_1 <= -1e-291: tmp = t_0 elif t_1 <= 0.0: tmp = (2.0 * (NdChar * (KbT * KbT))) / (Vef * Vef) 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(NaChar / Float64(exp(Float64(Float64(Float64(EAccept + Float64(Vef + Ev)) - mu) / KbT)) + 1.0)) + Float64(NdChar / Float64(exp(Float64(Float64(mu + Float64(EDonor + Float64(Vef - Ec))) / KbT)) + 1.0))) tmp = 0.0 if (t_1 <= -1e-291) tmp = t_0; elseif (t_1 <= 0.0) tmp = Float64(Float64(2.0 * Float64(NdChar * Float64(KbT * KbT))) / Float64(Vef * Vef)); 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 = (NaChar / (exp((((EAccept + (Vef + Ev)) - mu) / KbT)) + 1.0)) + (NdChar / (exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0)); tmp = 0.0; if (t_1 <= -1e-291) tmp = t_0; elseif (t_1 <= 0.0) tmp = (2.0 * (NdChar * (KbT * KbT))) / (Vef * Vef); 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[(NaChar / N[(N[Exp[N[(N[(N[(EAccept + N[(Vef + Ev), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(N[Exp[N[(N[(mu + N[(EDonor + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$1, -1e-291], t$95$0, If[LessEqual[t$95$1, 0.0], N[(N[(2.0 * N[(NdChar * N[(KbT * KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / N[(Vef * Vef), $MachinePrecision]), $MachinePrecision], t$95$0]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := 0.5 \cdot \left(NdChar + NaChar\right)\\
t_1 := \frac{NaChar}{e^{\frac{\left(EAccept + \left(Vef + Ev\right)\right) - mu}{KbT}} + 1} + \frac{NdChar}{e^{\frac{mu + \left(EDonor + \left(Vef - Ec\right)\right)}{KbT}} + 1}\\
\mathbf{if}\;t\_1 \leq -1 \cdot 10^{-291}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;t\_1 \leq 0:\\
\;\;\;\;\frac{2 \cdot \left(NdChar \cdot \left(KbT \cdot KbT\right)\right)}{Vef \cdot Vef}\\
\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.99999999999999962e-292 or 0.0 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) Initial program 100.0%
Taylor expanded in KbT around inf
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6437.5
Applied rewrites37.5%
if -9.99999999999999962e-292 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < 0.0Initial program 100.0%
Taylor expanded in NdChar around inf
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
associate--l+N/A
lower-+.f64N/A
sub-negN/A
associate-+r+N/A
mul-1-negN/A
lower-+.f64N/A
mul-1-negN/A
sub-negN/A
lower--.f64100.0
Applied rewrites100.0%
Taylor expanded in KbT around -inf
mul-1-negN/A
unsub-negN/A
lower--.f64N/A
lower-/.f64N/A
Applied rewrites90.6%
Taylor expanded in Vef around inf
associate-*r/N/A
lower-/.f64N/A
lower-*.f64N/A
*-commutativeN/A
lower-*.f64N/A
unpow2N/A
lower-*.f64N/A
unpow2N/A
lower-*.f6462.7
Applied rewrites62.7%
Final simplification42.2%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (* 0.5 (+ NdChar NaChar)))
(t_1
(+
(/ NaChar (+ (exp (/ (- (+ EAccept (+ Vef Ev)) mu) KbT)) 1.0))
(/ NdChar (+ (exp (/ (+ mu (+ EDonor (- Vef Ec))) KbT)) 1.0)))))
(if (<= t_1 -1e-276)
t_0
(if (<= t_1 0.0) (/ (* 2.0 (* NdChar (* KbT KbT))) (* Ec Ec)) 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 = (NaChar / (exp((((EAccept + (Vef + Ev)) - mu) / KbT)) + 1.0)) + (NdChar / (exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0));
double tmp;
if (t_1 <= -1e-276) {
tmp = t_0;
} else if (t_1 <= 0.0) {
tmp = (2.0 * (NdChar * (KbT * KbT))) / (Ec * Ec);
} 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 = (nachar / (exp((((eaccept + (vef + ev)) - mu) / kbt)) + 1.0d0)) + (ndchar / (exp(((mu + (edonor + (vef - ec))) / kbt)) + 1.0d0))
if (t_1 <= (-1d-276)) then
tmp = t_0
else if (t_1 <= 0.0d0) then
tmp = (2.0d0 * (ndchar * (kbt * kbt))) / (ec * ec)
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 = (NaChar / (Math.exp((((EAccept + (Vef + Ev)) - mu) / KbT)) + 1.0)) + (NdChar / (Math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0));
double tmp;
if (t_1 <= -1e-276) {
tmp = t_0;
} else if (t_1 <= 0.0) {
tmp = (2.0 * (NdChar * (KbT * KbT))) / (Ec * Ec);
} 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 = (NaChar / (math.exp((((EAccept + (Vef + Ev)) - mu) / KbT)) + 1.0)) + (NdChar / (math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0)) tmp = 0 if t_1 <= -1e-276: tmp = t_0 elif t_1 <= 0.0: tmp = (2.0 * (NdChar * (KbT * KbT))) / (Ec * Ec) 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(NaChar / Float64(exp(Float64(Float64(Float64(EAccept + Float64(Vef + Ev)) - mu) / KbT)) + 1.0)) + Float64(NdChar / Float64(exp(Float64(Float64(mu + Float64(EDonor + Float64(Vef - Ec))) / KbT)) + 1.0))) tmp = 0.0 if (t_1 <= -1e-276) tmp = t_0; elseif (t_1 <= 0.0) tmp = Float64(Float64(2.0 * Float64(NdChar * Float64(KbT * KbT))) / Float64(Ec * Ec)); 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 = (NaChar / (exp((((EAccept + (Vef + Ev)) - mu) / KbT)) + 1.0)) + (NdChar / (exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0)); tmp = 0.0; if (t_1 <= -1e-276) tmp = t_0; elseif (t_1 <= 0.0) tmp = (2.0 * (NdChar * (KbT * KbT))) / (Ec * Ec); 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[(NaChar / N[(N[Exp[N[(N[(N[(EAccept + N[(Vef + Ev), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(N[Exp[N[(N[(mu + N[(EDonor + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$1, -1e-276], t$95$0, If[LessEqual[t$95$1, 0.0], N[(N[(2.0 * N[(NdChar * N[(KbT * KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / N[(Ec * Ec), $MachinePrecision]), $MachinePrecision], t$95$0]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := 0.5 \cdot \left(NdChar + NaChar\right)\\
t_1 := \frac{NaChar}{e^{\frac{\left(EAccept + \left(Vef + Ev\right)\right) - mu}{KbT}} + 1} + \frac{NdChar}{e^{\frac{mu + \left(EDonor + \left(Vef - Ec\right)\right)}{KbT}} + 1}\\
\mathbf{if}\;t\_1 \leq -1 \cdot 10^{-276}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;t\_1 \leq 0:\\
\;\;\;\;\frac{2 \cdot \left(NdChar \cdot \left(KbT \cdot KbT\right)\right)}{Ec \cdot Ec}\\
\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))))) < -1e-276 or 0.0 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) Initial program 100.0%
Taylor expanded in KbT around inf
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6437.9
Applied rewrites37.9%
if -1e-276 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < 0.0Initial program 100.0%
Taylor expanded in NdChar around inf
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
associate--l+N/A
lower-+.f64N/A
sub-negN/A
associate-+r+N/A
mul-1-negN/A
lower-+.f64N/A
mul-1-negN/A
sub-negN/A
lower--.f6498.2
Applied rewrites98.2%
Taylor expanded in KbT around -inf
mul-1-negN/A
unsub-negN/A
lower--.f64N/A
lower-/.f64N/A
Applied rewrites87.2%
Taylor expanded in Ec around inf
associate-*r/N/A
lower-/.f64N/A
lower-*.f64N/A
*-commutativeN/A
lower-*.f64N/A
unpow2N/A
lower-*.f64N/A
unpow2N/A
lower-*.f6456.1
Applied rewrites56.1%
Final simplification41.4%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (* 0.5 (+ NdChar NaChar)))
(t_1
(+
(/ NaChar (+ (exp (/ (- (+ EAccept (+ Vef Ev)) mu) KbT)) 1.0))
(/ NdChar (+ (exp (/ (+ mu (+ EDonor (- Vef Ec))) KbT)) 1.0)))))
(if (<= t_1 -1e-291)
t_0
(if (<= t_1 0.0)
(/ (* 2.0 (* NdChar (* KbT KbT))) (* EDonor 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 = (NaChar / (exp((((EAccept + (Vef + Ev)) - mu) / KbT)) + 1.0)) + (NdChar / (exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0));
double tmp;
if (t_1 <= -1e-291) {
tmp = t_0;
} else if (t_1 <= 0.0) {
tmp = (2.0 * (NdChar * (KbT * KbT))) / (EDonor * 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 = (nachar / (exp((((eaccept + (vef + ev)) - mu) / kbt)) + 1.0d0)) + (ndchar / (exp(((mu + (edonor + (vef - ec))) / kbt)) + 1.0d0))
if (t_1 <= (-1d-291)) then
tmp = t_0
else if (t_1 <= 0.0d0) then
tmp = (2.0d0 * (ndchar * (kbt * kbt))) / (edonor * 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 = (NaChar / (Math.exp((((EAccept + (Vef + Ev)) - mu) / KbT)) + 1.0)) + (NdChar / (Math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0));
double tmp;
if (t_1 <= -1e-291) {
tmp = t_0;
} else if (t_1 <= 0.0) {
tmp = (2.0 * (NdChar * (KbT * KbT))) / (EDonor * 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 = (NaChar / (math.exp((((EAccept + (Vef + Ev)) - mu) / KbT)) + 1.0)) + (NdChar / (math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0)) tmp = 0 if t_1 <= -1e-291: tmp = t_0 elif t_1 <= 0.0: tmp = (2.0 * (NdChar * (KbT * KbT))) / (EDonor * 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(NaChar / Float64(exp(Float64(Float64(Float64(EAccept + Float64(Vef + Ev)) - mu) / KbT)) + 1.0)) + Float64(NdChar / Float64(exp(Float64(Float64(mu + Float64(EDonor + Float64(Vef - Ec))) / KbT)) + 1.0))) tmp = 0.0 if (t_1 <= -1e-291) tmp = t_0; elseif (t_1 <= 0.0) tmp = Float64(Float64(2.0 * Float64(NdChar * Float64(KbT * KbT))) / Float64(EDonor * 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 = (NaChar / (exp((((EAccept + (Vef + Ev)) - mu) / KbT)) + 1.0)) + (NdChar / (exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0)); tmp = 0.0; if (t_1 <= -1e-291) tmp = t_0; elseif (t_1 <= 0.0) tmp = (2.0 * (NdChar * (KbT * KbT))) / (EDonor * 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[(NaChar / N[(N[Exp[N[(N[(N[(EAccept + N[(Vef + Ev), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(N[Exp[N[(N[(mu + N[(EDonor + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$1, -1e-291], t$95$0, If[LessEqual[t$95$1, 0.0], N[(N[(2.0 * N[(NdChar * N[(KbT * KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / N[(EDonor * EDonor), $MachinePrecision]), $MachinePrecision], t$95$0]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := 0.5 \cdot \left(NdChar + NaChar\right)\\
t_1 := \frac{NaChar}{e^{\frac{\left(EAccept + \left(Vef + Ev\right)\right) - mu}{KbT}} + 1} + \frac{NdChar}{e^{\frac{mu + \left(EDonor + \left(Vef - Ec\right)\right)}{KbT}} + 1}\\
\mathbf{if}\;t\_1 \leq -1 \cdot 10^{-291}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;t\_1 \leq 0:\\
\;\;\;\;\frac{2 \cdot \left(NdChar \cdot \left(KbT \cdot KbT\right)\right)}{EDonor \cdot 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))))) < -9.99999999999999962e-292 or 0.0 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) Initial program 100.0%
Taylor expanded in KbT around inf
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6437.5
Applied rewrites37.5%
if -9.99999999999999962e-292 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < 0.0Initial program 100.0%
Taylor expanded in NdChar around inf
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
associate--l+N/A
lower-+.f64N/A
sub-negN/A
associate-+r+N/A
mul-1-negN/A
lower-+.f64N/A
mul-1-negN/A
sub-negN/A
lower--.f64100.0
Applied rewrites100.0%
Taylor expanded in KbT around -inf
mul-1-negN/A
unsub-negN/A
lower--.f64N/A
lower-/.f64N/A
Applied rewrites90.6%
Taylor expanded in EDonor around inf
associate-*r/N/A
lower-/.f64N/A
lower-*.f64N/A
*-commutativeN/A
lower-*.f64N/A
unpow2N/A
lower-*.f64N/A
unpow2N/A
lower-*.f6440.0
Applied rewrites40.0%
Final simplification38.0%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (* 0.5 (+ NdChar NaChar)))
(t_1
(+
(/ NaChar (+ (exp (/ (- (+ EAccept (+ Vef Ev)) mu) KbT)) 1.0))
(/ NdChar (+ (exp (/ (+ mu (+ EDonor (- Vef Ec))) KbT)) 1.0)))))
(if (<= t_1 -1e-276)
t_0
(if (<= t_1 0.0) (/ (* -0.5 (* NdChar NdChar)) (- NaChar NdChar)) t_0))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = 0.5 * (NdChar + NaChar);
double t_1 = (NaChar / (exp((((EAccept + (Vef + Ev)) - mu) / KbT)) + 1.0)) + (NdChar / (exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0));
double tmp;
if (t_1 <= -1e-276) {
tmp = t_0;
} else if (t_1 <= 0.0) {
tmp = (-0.5 * (NdChar * NdChar)) / (NaChar - NdChar);
} else {
tmp = t_0;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = 0.5d0 * (ndchar + nachar)
t_1 = (nachar / (exp((((eaccept + (vef + ev)) - mu) / kbt)) + 1.0d0)) + (ndchar / (exp(((mu + (edonor + (vef - ec))) / kbt)) + 1.0d0))
if (t_1 <= (-1d-276)) then
tmp = t_0
else if (t_1 <= 0.0d0) then
tmp = ((-0.5d0) * (ndchar * ndchar)) / (nachar - ndchar)
else
tmp = t_0
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = 0.5 * (NdChar + NaChar);
double t_1 = (NaChar / (Math.exp((((EAccept + (Vef + Ev)) - mu) / KbT)) + 1.0)) + (NdChar / (Math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0));
double tmp;
if (t_1 <= -1e-276) {
tmp = t_0;
} else if (t_1 <= 0.0) {
tmp = (-0.5 * (NdChar * NdChar)) / (NaChar - NdChar);
} else {
tmp = t_0;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = 0.5 * (NdChar + NaChar) t_1 = (NaChar / (math.exp((((EAccept + (Vef + Ev)) - mu) / KbT)) + 1.0)) + (NdChar / (math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0)) tmp = 0 if t_1 <= -1e-276: tmp = t_0 elif t_1 <= 0.0: tmp = (-0.5 * (NdChar * NdChar)) / (NaChar - NdChar) else: tmp = t_0 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(0.5 * Float64(NdChar + NaChar)) t_1 = Float64(Float64(NaChar / Float64(exp(Float64(Float64(Float64(EAccept + Float64(Vef + Ev)) - mu) / KbT)) + 1.0)) + Float64(NdChar / Float64(exp(Float64(Float64(mu + Float64(EDonor + Float64(Vef - Ec))) / KbT)) + 1.0))) tmp = 0.0 if (t_1 <= -1e-276) tmp = t_0; elseif (t_1 <= 0.0) tmp = Float64(Float64(-0.5 * Float64(NdChar * NdChar)) / Float64(NaChar - NdChar)); else tmp = t_0; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = 0.5 * (NdChar + NaChar); t_1 = (NaChar / (exp((((EAccept + (Vef + Ev)) - mu) / KbT)) + 1.0)) + (NdChar / (exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0)); tmp = 0.0; if (t_1 <= -1e-276) tmp = t_0; elseif (t_1 <= 0.0) tmp = (-0.5 * (NdChar * NdChar)) / (NaChar - NdChar); else tmp = t_0; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(0.5 * N[(NdChar + NaChar), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NaChar / N[(N[Exp[N[(N[(N[(EAccept + N[(Vef + Ev), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(N[Exp[N[(N[(mu + N[(EDonor + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$1, -1e-276], t$95$0, If[LessEqual[t$95$1, 0.0], N[(N[(-0.5 * N[(NdChar * NdChar), $MachinePrecision]), $MachinePrecision] / N[(NaChar - NdChar), $MachinePrecision]), $MachinePrecision], t$95$0]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := 0.5 \cdot \left(NdChar + NaChar\right)\\
t_1 := \frac{NaChar}{e^{\frac{\left(EAccept + \left(Vef + Ev\right)\right) - mu}{KbT}} + 1} + \frac{NdChar}{e^{\frac{mu + \left(EDonor + \left(Vef - Ec\right)\right)}{KbT}} + 1}\\
\mathbf{if}\;t\_1 \leq -1 \cdot 10^{-276}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;t\_1 \leq 0:\\
\;\;\;\;\frac{-0.5 \cdot \left(NdChar \cdot NdChar\right)}{NaChar - NdChar}\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < -1e-276 or 0.0 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) Initial program 100.0%
Taylor expanded in KbT around inf
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6437.9
Applied rewrites37.9%
if -1e-276 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < 0.0Initial program 100.0%
Taylor expanded in KbT around inf
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f642.6
Applied rewrites2.6%
lift-+.f64N/A
*-commutativeN/A
lift-+.f64N/A
flip-+N/A
associate-*l/N/A
lower-/.f64N/A
lower-*.f64N/A
difference-of-squaresN/A
lift-+.f64N/A
lower-*.f64N/A
lift-+.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower--.f64N/A
lower--.f644.4
Applied rewrites4.4%
Taylor expanded in NdChar around inf
lower-*.f64N/A
unpow2N/A
lower-*.f6429.0
Applied rewrites29.0%
Final simplification36.2%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (fma (/ 1.0 (+ (exp (/ (+ (+ EDonor mu) (- Vef Ec)) KbT)) 1.0)) NdChar (/ NaChar (+ (exp (/ (- EAccept (- mu (+ Vef Ev))) KbT)) 1.0))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return fma((1.0 / (exp((((EDonor + mu) + (Vef - Ec)) / KbT)) + 1.0)), NdChar, (NaChar / (exp(((EAccept - (mu - (Vef + Ev))) / KbT)) + 1.0)));
}
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return fma(Float64(1.0 / Float64(exp(Float64(Float64(Float64(EDonor + mu) + Float64(Vef - Ec)) / KbT)) + 1.0)), NdChar, Float64(NaChar / Float64(exp(Float64(Float64(EAccept - Float64(mu - Float64(Vef + Ev))) / KbT)) + 1.0))) end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(N[(1.0 / N[(N[Exp[N[(N[(N[(EDonor + mu), $MachinePrecision] + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] * NdChar + N[(NaChar / N[(N[Exp[N[(N[(EAccept - N[(mu - N[(Vef + Ev), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\mathsf{fma}\left(\frac{1}{e^{\frac{\left(EDonor + mu\right) + \left(Vef - Ec\right)}{KbT}} + 1}, NdChar, \frac{NaChar}{e^{\frac{EAccept - \left(mu - \left(Vef + Ev\right)\right)}{KbT}} + 1}\right)
\end{array}
Initial program 100.0%
Applied rewrites100.0%
Final simplification100.0%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (+ (/ NaChar (+ (exp (/ (- (+ EAccept (+ Vef Ev)) mu) KbT)) 1.0)) (/ NdChar (+ (exp (/ (+ mu (+ EDonor (- Vef Ec))) KbT)) 1.0))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NaChar / (exp((((EAccept + (Vef + Ev)) - mu) / KbT)) + 1.0)) + (NdChar / (exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0));
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
code = (nachar / (exp((((eaccept + (vef + ev)) - mu) / kbt)) + 1.0d0)) + (ndchar / (exp(((mu + (edonor + (vef - ec))) / kbt)) + 1.0d0))
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NaChar / (Math.exp((((EAccept + (Vef + Ev)) - mu) / KbT)) + 1.0)) + (NdChar / (Math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0));
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return (NaChar / (math.exp((((EAccept + (Vef + Ev)) - mu) / KbT)) + 1.0)) + (NdChar / (math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0))
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(Float64(NaChar / Float64(exp(Float64(Float64(Float64(EAccept + Float64(Vef + Ev)) - mu) / KbT)) + 1.0)) + Float64(NdChar / Float64(exp(Float64(Float64(mu + Float64(EDonor + Float64(Vef - Ec))) / KbT)) + 1.0))) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = (NaChar / (exp((((EAccept + (Vef + Ev)) - mu) / KbT)) + 1.0)) + (NdChar / (exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0)); end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(N[(NaChar / N[(N[Exp[N[(N[(N[(EAccept + N[(Vef + Ev), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(N[Exp[N[(N[(mu + N[(EDonor + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{NaChar}{e^{\frac{\left(EAccept + \left(Vef + Ev\right)\right) - mu}{KbT}} + 1} + \frac{NdChar}{e^{\frac{mu + \left(EDonor + \left(Vef - Ec\right)\right)}{KbT}} + 1}
\end{array}
Initial program 100.0%
Final simplification100.0%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NdChar (+ (exp (/ (+ mu (+ EDonor (- Vef Ec))) KbT)) 1.0))))
(if (<= EAccept 5.5e+191)
(+ t_0 (/ NaChar (+ (exp (/ Vef KbT)) 1.0)))
(+ t_0 (/ NaChar (+ (exp (/ EAccept KbT)) 1.0))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0);
double tmp;
if (EAccept <= 5.5e+191) {
tmp = t_0 + (NaChar / (exp((Vef / KbT)) + 1.0));
} else {
tmp = t_0 + (NaChar / (exp((EAccept / KbT)) + 1.0));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: tmp
t_0 = ndchar / (exp(((mu + (edonor + (vef - ec))) / kbt)) + 1.0d0)
if (eaccept <= 5.5d+191) then
tmp = t_0 + (nachar / (exp((vef / kbt)) + 1.0d0))
else
tmp = t_0 + (nachar / (exp((eaccept / kbt)) + 1.0d0))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (Math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0);
double tmp;
if (EAccept <= 5.5e+191) {
tmp = t_0 + (NaChar / (Math.exp((Vef / KbT)) + 1.0));
} else {
tmp = t_0 + (NaChar / (Math.exp((EAccept / KbT)) + 1.0));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NdChar / (math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0) tmp = 0 if EAccept <= 5.5e+191: tmp = t_0 + (NaChar / (math.exp((Vef / KbT)) + 1.0)) else: tmp = t_0 + (NaChar / (math.exp((EAccept / KbT)) + 1.0)) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NdChar / Float64(exp(Float64(Float64(mu + Float64(EDonor + Float64(Vef - Ec))) / KbT)) + 1.0)) tmp = 0.0 if (EAccept <= 5.5e+191) tmp = Float64(t_0 + Float64(NaChar / Float64(exp(Float64(Vef / KbT)) + 1.0))); else tmp = Float64(t_0 + Float64(NaChar / Float64(exp(Float64(EAccept / KbT)) + 1.0))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NdChar / (exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0); tmp = 0.0; if (EAccept <= 5.5e+191) tmp = t_0 + (NaChar / (exp((Vef / KbT)) + 1.0)); else tmp = t_0 + (NaChar / (exp((EAccept / KbT)) + 1.0)); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NdChar / N[(N[Exp[N[(N[(mu + N[(EDonor + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[EAccept, 5.5e+191], N[(t$95$0 + N[(NaChar / N[(N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(t$95$0 + N[(NaChar / N[(N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{e^{\frac{mu + \left(EDonor + \left(Vef - Ec\right)\right)}{KbT}} + 1}\\
\mathbf{if}\;EAccept \leq 5.5 \cdot 10^{+191}:\\
\;\;\;\;t\_0 + \frac{NaChar}{e^{\frac{Vef}{KbT}} + 1}\\
\mathbf{else}:\\
\;\;\;\;t\_0 + \frac{NaChar}{e^{\frac{EAccept}{KbT}} + 1}\\
\end{array}
\end{array}
if EAccept < 5.5000000000000002e191Initial program 100.0%
Taylor expanded in Vef around inf
lower-/.f6474.3
Applied rewrites74.3%
if 5.5000000000000002e191 < EAccept Initial program 100.0%
Taylor expanded in EAccept around inf
lower-/.f64100.0
Applied rewrites100.0%
Final simplification76.2%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (<= NdChar -2.4e+159)
(* NdChar (/ -1.0 (- -1.0 (exp (/ (+ Vef (+ EDonor (- mu Ec))) KbT)))))
(if (<= NdChar 2.8e+32)
(/ NaChar (+ (exp (/ (+ EAccept (+ Ev (- Vef mu))) KbT)) 1.0))
(/ NdChar (+ (exp (/ (+ EDonor (+ Vef (- mu Ec))) 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 (NdChar <= -2.4e+159) {
tmp = NdChar * (-1.0 / (-1.0 - exp(((Vef + (EDonor + (mu - Ec))) / KbT))));
} else if (NdChar <= 2.8e+32) {
tmp = NaChar / (exp(((EAccept + (Ev + (Vef - mu))) / KbT)) + 1.0);
} else {
tmp = NdChar / (exp(((EDonor + (Vef + (mu - Ec))) / 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 (ndchar <= (-2.4d+159)) then
tmp = ndchar * ((-1.0d0) / ((-1.0d0) - exp(((vef + (edonor + (mu - ec))) / kbt))))
else if (ndchar <= 2.8d+32) then
tmp = nachar / (exp(((eaccept + (ev + (vef - mu))) / kbt)) + 1.0d0)
else
tmp = ndchar / (exp(((edonor + (vef + (mu - ec))) / 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 (NdChar <= -2.4e+159) {
tmp = NdChar * (-1.0 / (-1.0 - Math.exp(((Vef + (EDonor + (mu - Ec))) / KbT))));
} else if (NdChar <= 2.8e+32) {
tmp = NaChar / (Math.exp(((EAccept + (Ev + (Vef - mu))) / KbT)) + 1.0);
} else {
tmp = NdChar / (Math.exp(((EDonor + (Vef + (mu - Ec))) / KbT)) + 1.0);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if NdChar <= -2.4e+159: tmp = NdChar * (-1.0 / (-1.0 - math.exp(((Vef + (EDonor + (mu - Ec))) / KbT)))) elif NdChar <= 2.8e+32: tmp = NaChar / (math.exp(((EAccept + (Ev + (Vef - mu))) / KbT)) + 1.0) else: tmp = NdChar / (math.exp(((EDonor + (Vef + (mu - Ec))) / KbT)) + 1.0) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (NdChar <= -2.4e+159) tmp = Float64(NdChar * Float64(-1.0 / Float64(-1.0 - exp(Float64(Float64(Vef + Float64(EDonor + Float64(mu - Ec))) / KbT))))); elseif (NdChar <= 2.8e+32) tmp = Float64(NaChar / Float64(exp(Float64(Float64(EAccept + Float64(Ev + Float64(Vef - mu))) / KbT)) + 1.0)); else tmp = Float64(NdChar / Float64(exp(Float64(Float64(EDonor + Float64(Vef + Float64(mu - Ec))) / KbT)) + 1.0)); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (NdChar <= -2.4e+159) tmp = NdChar * (-1.0 / (-1.0 - exp(((Vef + (EDonor + (mu - Ec))) / KbT)))); elseif (NdChar <= 2.8e+32) tmp = NaChar / (exp(((EAccept + (Ev + (Vef - mu))) / KbT)) + 1.0); else tmp = NdChar / (exp(((EDonor + (Vef + (mu - Ec))) / KbT)) + 1.0); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[NdChar, -2.4e+159], N[(NdChar * N[(-1.0 / N[(-1.0 - N[Exp[N[(N[(Vef + N[(EDonor + N[(mu - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NdChar, 2.8e+32], N[(NaChar / N[(N[Exp[N[(N[(EAccept + N[(Ev + N[(Vef - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], N[(NdChar / N[(N[Exp[N[(N[(EDonor + N[(Vef + N[(mu - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NdChar \leq -2.4 \cdot 10^{+159}:\\
\;\;\;\;NdChar \cdot \frac{-1}{-1 - e^{\frac{Vef + \left(EDonor + \left(mu - Ec\right)\right)}{KbT}}}\\
\mathbf{elif}\;NdChar \leq 2.8 \cdot 10^{+32}:\\
\;\;\;\;\frac{NaChar}{e^{\frac{EAccept + \left(Ev + \left(Vef - mu\right)\right)}{KbT}} + 1}\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{EDonor + \left(Vef + \left(mu - Ec\right)\right)}{KbT}} + 1}\\
\end{array}
\end{array}
if NdChar < -2.4e159Initial program 99.8%
Taylor expanded in NdChar around inf
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
associate--l+N/A
lower-+.f64N/A
sub-negN/A
associate-+r+N/A
mul-1-negN/A
lower-+.f64N/A
mul-1-negN/A
sub-negN/A
lower--.f6480.6
Applied rewrites80.6%
lift--.f64N/A
lift-+.f64N/A
lift-+.f64N/A
lift-/.f64N/A
lift-exp.f64N/A
lift-+.f64N/A
clear-numN/A
associate-/r/N/A
lower-*.f64N/A
Applied rewrites80.6%
if -2.4e159 < NdChar < 2.8e32Initial program 100.0%
Taylor expanded in NdChar around 0
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
associate--l+N/A
lower-+.f64N/A
sub-negN/A
associate-+r+N/A
mul-1-negN/A
lower-+.f64N/A
mul-1-negN/A
sub-negN/A
lower--.f6471.0
Applied rewrites71.0%
if 2.8e32 < NdChar Initial program 100.0%
Taylor expanded in NdChar around inf
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
associate--l+N/A
lower-+.f64N/A
sub-negN/A
associate-+r+N/A
mul-1-negN/A
lower-+.f64N/A
mul-1-negN/A
sub-negN/A
lower--.f6477.8
Applied rewrites77.8%
Final simplification73.8%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NdChar (+ (exp (/ (+ EDonor (+ Vef (- mu Ec))) KbT)) 1.0))))
(if (<= NdChar -2.4e+159)
t_0
(if (<= NdChar 2.8e+32)
(/ NaChar (+ (exp (/ (+ EAccept (+ Ev (- Vef mu))) KbT)) 1.0))
t_0))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (exp(((EDonor + (Vef + (mu - Ec))) / KbT)) + 1.0);
double tmp;
if (NdChar <= -2.4e+159) {
tmp = t_0;
} else if (NdChar <= 2.8e+32) {
tmp = NaChar / (exp(((EAccept + (Ev + (Vef - mu))) / KbT)) + 1.0);
} else {
tmp = t_0;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: tmp
t_0 = ndchar / (exp(((edonor + (vef + (mu - ec))) / kbt)) + 1.0d0)
if (ndchar <= (-2.4d+159)) then
tmp = t_0
else if (ndchar <= 2.8d+32) then
tmp = nachar / (exp(((eaccept + (ev + (vef - mu))) / kbt)) + 1.0d0)
else
tmp = t_0
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (Math.exp(((EDonor + (Vef + (mu - Ec))) / KbT)) + 1.0);
double tmp;
if (NdChar <= -2.4e+159) {
tmp = t_0;
} else if (NdChar <= 2.8e+32) {
tmp = NaChar / (Math.exp(((EAccept + (Ev + (Vef - mu))) / KbT)) + 1.0);
} else {
tmp = t_0;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NdChar / (math.exp(((EDonor + (Vef + (mu - Ec))) / KbT)) + 1.0) tmp = 0 if NdChar <= -2.4e+159: tmp = t_0 elif NdChar <= 2.8e+32: tmp = NaChar / (math.exp(((EAccept + (Ev + (Vef - mu))) / KbT)) + 1.0) else: tmp = t_0 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NdChar / Float64(exp(Float64(Float64(EDonor + Float64(Vef + Float64(mu - Ec))) / KbT)) + 1.0)) tmp = 0.0 if (NdChar <= -2.4e+159) tmp = t_0; elseif (NdChar <= 2.8e+32) tmp = Float64(NaChar / Float64(exp(Float64(Float64(EAccept + Float64(Ev + Float64(Vef - mu))) / KbT)) + 1.0)); else tmp = t_0; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NdChar / (exp(((EDonor + (Vef + (mu - Ec))) / KbT)) + 1.0); tmp = 0.0; if (NdChar <= -2.4e+159) tmp = t_0; elseif (NdChar <= 2.8e+32) tmp = NaChar / (exp(((EAccept + (Ev + (Vef - mu))) / KbT)) + 1.0); else tmp = t_0; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NdChar / N[(N[Exp[N[(N[(EDonor + N[(Vef + N[(mu - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NdChar, -2.4e+159], t$95$0, If[LessEqual[NdChar, 2.8e+32], N[(NaChar / N[(N[Exp[N[(N[(EAccept + N[(Ev + N[(Vef - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], t$95$0]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{e^{\frac{EDonor + \left(Vef + \left(mu - Ec\right)\right)}{KbT}} + 1}\\
\mathbf{if}\;NdChar \leq -2.4 \cdot 10^{+159}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;NdChar \leq 2.8 \cdot 10^{+32}:\\
\;\;\;\;\frac{NaChar}{e^{\frac{EAccept + \left(Ev + \left(Vef - mu\right)\right)}{KbT}} + 1}\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if NdChar < -2.4e159 or 2.8e32 < NdChar Initial program 99.9%
Taylor expanded in NdChar around inf
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
associate--l+N/A
lower-+.f64N/A
sub-negN/A
associate-+r+N/A
mul-1-negN/A
lower-+.f64N/A
mul-1-negN/A
sub-negN/A
lower--.f6478.9
Applied rewrites78.9%
if -2.4e159 < NdChar < 2.8e32Initial program 100.0%
Taylor expanded in NdChar around 0
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
associate--l+N/A
lower-+.f64N/A
sub-negN/A
associate-+r+N/A
mul-1-negN/A
lower-+.f64N/A
mul-1-negN/A
sub-negN/A
lower--.f6471.0
Applied rewrites71.0%
Final simplification73.8%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (<= NdChar -3.6e+159)
(/ NdChar (+ (exp (/ Vef KbT)) 1.0))
(if (<= NdChar 5.8e+41)
(/ NaChar (+ (exp (/ (+ EAccept (+ Ev (- Vef mu))) KbT)) 1.0))
(/ NdChar (+ (exp (/ Ec (- 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 (NdChar <= -3.6e+159) {
tmp = NdChar / (exp((Vef / KbT)) + 1.0);
} else if (NdChar <= 5.8e+41) {
tmp = NaChar / (exp(((EAccept + (Ev + (Vef - mu))) / KbT)) + 1.0);
} else {
tmp = NdChar / (exp((Ec / -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 (ndchar <= (-3.6d+159)) then
tmp = ndchar / (exp((vef / kbt)) + 1.0d0)
else if (ndchar <= 5.8d+41) then
tmp = nachar / (exp(((eaccept + (ev + (vef - mu))) / kbt)) + 1.0d0)
else
tmp = ndchar / (exp((ec / -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 (NdChar <= -3.6e+159) {
tmp = NdChar / (Math.exp((Vef / KbT)) + 1.0);
} else if (NdChar <= 5.8e+41) {
tmp = NaChar / (Math.exp(((EAccept + (Ev + (Vef - mu))) / KbT)) + 1.0);
} else {
tmp = NdChar / (Math.exp((Ec / -KbT)) + 1.0);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if NdChar <= -3.6e+159: tmp = NdChar / (math.exp((Vef / KbT)) + 1.0) elif NdChar <= 5.8e+41: tmp = NaChar / (math.exp(((EAccept + (Ev + (Vef - mu))) / KbT)) + 1.0) else: tmp = NdChar / (math.exp((Ec / -KbT)) + 1.0) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (NdChar <= -3.6e+159) tmp = Float64(NdChar / Float64(exp(Float64(Vef / KbT)) + 1.0)); elseif (NdChar <= 5.8e+41) tmp = Float64(NaChar / Float64(exp(Float64(Float64(EAccept + Float64(Ev + Float64(Vef - mu))) / KbT)) + 1.0)); else tmp = Float64(NdChar / Float64(exp(Float64(Ec / Float64(-KbT))) + 1.0)); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (NdChar <= -3.6e+159) tmp = NdChar / (exp((Vef / KbT)) + 1.0); elseif (NdChar <= 5.8e+41) tmp = NaChar / (exp(((EAccept + (Ev + (Vef - mu))) / KbT)) + 1.0); else tmp = NdChar / (exp((Ec / -KbT)) + 1.0); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[NdChar, -3.6e+159], N[(NdChar / N[(N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[NdChar, 5.8e+41], N[(NaChar / N[(N[Exp[N[(N[(EAccept + N[(Ev + N[(Vef - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], N[(NdChar / N[(N[Exp[N[(Ec / (-KbT)), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NdChar \leq -3.6 \cdot 10^{+159}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{Vef}{KbT}} + 1}\\
\mathbf{elif}\;NdChar \leq 5.8 \cdot 10^{+41}:\\
\;\;\;\;\frac{NaChar}{e^{\frac{EAccept + \left(Ev + \left(Vef - mu\right)\right)}{KbT}} + 1}\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{Ec}{-KbT}} + 1}\\
\end{array}
\end{array}
if NdChar < -3.60000000000000037e159Initial program 99.8%
Taylor expanded in NdChar around inf
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
associate--l+N/A
lower-+.f64N/A
sub-negN/A
associate-+r+N/A
mul-1-negN/A
lower-+.f64N/A
mul-1-negN/A
sub-negN/A
lower--.f6480.6
Applied rewrites80.6%
Taylor expanded in Vef around inf
lower-/.f6466.9
Applied rewrites66.9%
if -3.60000000000000037e159 < NdChar < 5.79999999999999977e41Initial program 100.0%
Taylor expanded in NdChar around 0
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
associate--l+N/A
lower-+.f64N/A
sub-negN/A
associate-+r+N/A
mul-1-negN/A
lower-+.f64N/A
mul-1-negN/A
sub-negN/A
lower--.f6471.0
Applied rewrites71.0%
if 5.79999999999999977e41 < NdChar Initial program 100.0%
Taylor expanded in NdChar around inf
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
associate--l+N/A
lower-+.f64N/A
sub-negN/A
associate-+r+N/A
mul-1-negN/A
lower-+.f64N/A
mul-1-negN/A
sub-negN/A
lower--.f6477.8
Applied rewrites77.8%
Taylor expanded in Ec around inf
mul-1-negN/A
lower-neg.f64N/A
lower-/.f6456.5
Applied rewrites56.5%
Final simplification67.4%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (+ (exp (/ Vef KbT)) 1.0)))
(if (<= NdChar -9.5e+112)
(/ NdChar t_0)
(if (<= NdChar 8200.0)
(/ NaChar t_0)
(/ NdChar (+ (exp (/ EDonor KbT)) 1.0))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = exp((Vef / KbT)) + 1.0;
double tmp;
if (NdChar <= -9.5e+112) {
tmp = NdChar / t_0;
} else if (NdChar <= 8200.0) {
tmp = NaChar / t_0;
} else {
tmp = NdChar / (exp((EDonor / KbT)) + 1.0);
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: tmp
t_0 = exp((vef / kbt)) + 1.0d0
if (ndchar <= (-9.5d+112)) then
tmp = ndchar / t_0
else if (ndchar <= 8200.0d0) then
tmp = nachar / t_0
else
tmp = ndchar / (exp((edonor / kbt)) + 1.0d0)
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = Math.exp((Vef / KbT)) + 1.0;
double tmp;
if (NdChar <= -9.5e+112) {
tmp = NdChar / t_0;
} else if (NdChar <= 8200.0) {
tmp = NaChar / t_0;
} else {
tmp = NdChar / (Math.exp((EDonor / KbT)) + 1.0);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = math.exp((Vef / KbT)) + 1.0 tmp = 0 if NdChar <= -9.5e+112: tmp = NdChar / t_0 elif NdChar <= 8200.0: tmp = NaChar / t_0 else: tmp = NdChar / (math.exp((EDonor / KbT)) + 1.0) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(exp(Float64(Vef / KbT)) + 1.0) tmp = 0.0 if (NdChar <= -9.5e+112) tmp = Float64(NdChar / t_0); elseif (NdChar <= 8200.0) tmp = Float64(NaChar / t_0); else tmp = Float64(NdChar / Float64(exp(Float64(EDonor / KbT)) + 1.0)); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = exp((Vef / KbT)) + 1.0; tmp = 0.0; if (NdChar <= -9.5e+112) tmp = NdChar / t_0; elseif (NdChar <= 8200.0) tmp = NaChar / t_0; else tmp = NdChar / (exp((EDonor / KbT)) + 1.0); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]}, If[LessEqual[NdChar, -9.5e+112], N[(NdChar / t$95$0), $MachinePrecision], If[LessEqual[NdChar, 8200.0], N[(NaChar / t$95$0), $MachinePrecision], N[(NdChar / N[(N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := e^{\frac{Vef}{KbT}} + 1\\
\mathbf{if}\;NdChar \leq -9.5 \cdot 10^{+112}:\\
\;\;\;\;\frac{NdChar}{t\_0}\\
\mathbf{elif}\;NdChar \leq 8200:\\
\;\;\;\;\frac{NaChar}{t\_0}\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{EDonor}{KbT}} + 1}\\
\end{array}
\end{array}
if NdChar < -9.5000000000000008e112Initial program 99.9%
Taylor expanded in NdChar around inf
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
associate--l+N/A
lower-+.f64N/A
sub-negN/A
associate-+r+N/A
mul-1-negN/A
lower-+.f64N/A
mul-1-negN/A
sub-negN/A
lower--.f6475.0
Applied rewrites75.0%
Taylor expanded in Vef around inf
lower-/.f6462.7
Applied rewrites62.7%
if -9.5000000000000008e112 < NdChar < 8200Initial program 100.0%
lift--.f64N/A
lift--.f64N/A
lift--.f64N/A
distribute-frac-negN/A
neg-mul-1N/A
exp-prodN/A
lower-pow.f64N/A
lower-exp.f64N/A
lower-/.f64100.0
lift--.f64N/A
lift--.f64N/A
associate--l-N/A
lower--.f64N/A
lower-+.f64100.0
Applied rewrites100.0%
Taylor expanded in Vef around inf
lower-/.f6467.4
Applied rewrites67.4%
Taylor expanded in NdChar around 0
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f6449.3
Applied rewrites49.3%
if 8200 < NdChar Initial program 100.0%
Taylor expanded in NdChar around inf
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
associate--l+N/A
lower-+.f64N/A
sub-negN/A
associate-+r+N/A
mul-1-negN/A
lower-+.f64N/A
mul-1-negN/A
sub-negN/A
lower--.f6475.2
Applied rewrites75.2%
Taylor expanded in EDonor around inf
lower-/.f6455.8
Applied rewrites55.8%
Final simplification53.3%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (<= NaChar -1.45e-107)
(/ NaChar (+ (exp (/ Vef KbT)) 1.0))
(if (<= NaChar 1.6e+57)
(/ NdChar (+ (exp (/ EDonor 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 (NaChar <= -1.45e-107) {
tmp = NaChar / (exp((Vef / KbT)) + 1.0);
} else if (NaChar <= 1.6e+57) {
tmp = NdChar / (exp((EDonor / 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 (nachar <= (-1.45d-107)) then
tmp = nachar / (exp((vef / kbt)) + 1.0d0)
else if (nachar <= 1.6d+57) then
tmp = ndchar / (exp((edonor / 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 (NaChar <= -1.45e-107) {
tmp = NaChar / (Math.exp((Vef / KbT)) + 1.0);
} else if (NaChar <= 1.6e+57) {
tmp = NdChar / (Math.exp((EDonor / 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 NaChar <= -1.45e-107: tmp = NaChar / (math.exp((Vef / KbT)) + 1.0) elif NaChar <= 1.6e+57: tmp = NdChar / (math.exp((EDonor / 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 (NaChar <= -1.45e-107) tmp = Float64(NaChar / Float64(exp(Float64(Vef / KbT)) + 1.0)); elseif (NaChar <= 1.6e+57) tmp = Float64(NdChar / Float64(exp(Float64(EDonor / 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 (NaChar <= -1.45e-107) tmp = NaChar / (exp((Vef / KbT)) + 1.0); elseif (NaChar <= 1.6e+57) tmp = NdChar / (exp((EDonor / 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[NaChar, -1.45e-107], N[(NaChar / N[(N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 1.6e+57], N[(NdChar / N[(N[Exp[N[(EDonor / 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}\;NaChar \leq -1.45 \cdot 10^{-107}:\\
\;\;\;\;\frac{NaChar}{e^{\frac{Vef}{KbT}} + 1}\\
\mathbf{elif}\;NaChar \leq 1.6 \cdot 10^{+57}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{EDonor}{KbT}} + 1}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{e^{\frac{EAccept}{KbT}} + 1}\\
\end{array}
\end{array}
if NaChar < -1.4499999999999999e-107Initial program 100.0%
lift--.f64N/A
lift--.f64N/A
lift--.f64N/A
distribute-frac-negN/A
neg-mul-1N/A
exp-prodN/A
lower-pow.f64N/A
lower-exp.f64N/A
lower-/.f64100.0
lift--.f64N/A
lift--.f64N/A
associate--l-N/A
lower--.f64N/A
lower-+.f64100.0
Applied rewrites100.0%
Taylor expanded in Vef around inf
lower-/.f6476.7
Applied rewrites76.7%
Taylor expanded in NdChar around 0
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f6459.3
Applied rewrites59.3%
if -1.4499999999999999e-107 < NaChar < 1.60000000000000015e57Initial program 99.9%
Taylor expanded in NdChar around inf
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
associate--l+N/A
lower-+.f64N/A
sub-negN/A
associate-+r+N/A
mul-1-negN/A
lower-+.f64N/A
mul-1-negN/A
sub-negN/A
lower--.f6474.1
Applied rewrites74.1%
Taylor expanded in EDonor around inf
lower-/.f6450.0
Applied rewrites50.0%
if 1.60000000000000015e57 < NaChar Initial program 100.0%
Taylor expanded in EAccept around inf
lower-/.f6458.9
Applied rewrites58.9%
Taylor expanded in NdChar around 0
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f6441.3
Applied rewrites41.3%
Final simplification51.2%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (if (<= NdChar -2.9e+129) (* NdChar 0.5) (if (<= NdChar 2.8e+32) (* 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 <= -2.9e+129) {
tmp = NdChar * 0.5;
} else if (NdChar <= 2.8e+32) {
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 <= (-2.9d+129)) then
tmp = ndchar * 0.5d0
else if (ndchar <= 2.8d+32) 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 <= -2.9e+129) {
tmp = NdChar * 0.5;
} else if (NdChar <= 2.8e+32) {
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 <= -2.9e+129: tmp = NdChar * 0.5 elif NdChar <= 2.8e+32: 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 <= -2.9e+129) tmp = Float64(NdChar * 0.5); elseif (NdChar <= 2.8e+32) 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 <= -2.9e+129) tmp = NdChar * 0.5; elseif (NdChar <= 2.8e+32) 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, -2.9e+129], N[(NdChar * 0.5), $MachinePrecision], If[LessEqual[NdChar, 2.8e+32], N[(NaChar * 0.5), $MachinePrecision], N[(NdChar * 0.5), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NdChar \leq -2.9 \cdot 10^{+129}:\\
\;\;\;\;NdChar \cdot 0.5\\
\mathbf{elif}\;NdChar \leq 2.8 \cdot 10^{+32}:\\
\;\;\;\;NaChar \cdot 0.5\\
\mathbf{else}:\\
\;\;\;\;NdChar \cdot 0.5\\
\end{array}
\end{array}
if NdChar < -2.90000000000000003e129 or 2.8e32 < NdChar Initial program 99.9%
Taylor expanded in KbT around inf
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6432.5
Applied rewrites32.5%
Taylor expanded in NaChar around 0
*-commutativeN/A
lower-*.f6429.7
Applied rewrites29.7%
if -2.90000000000000003e129 < NdChar < 2.8e32Initial program 100.0%
Taylor expanded in KbT around inf
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6430.3
Applied rewrites30.3%
Taylor expanded in NaChar around inf
*-commutativeN/A
lower-*.f6425.2
Applied rewrites25.2%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (* 0.5 (+ NdChar NaChar)))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return 0.5 * (NdChar + NaChar);
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
code = 0.5d0 * (ndchar + nachar)
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return 0.5 * (NdChar + NaChar);
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return 0.5 * (NdChar + NaChar)
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(0.5 * Float64(NdChar + NaChar)) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.5 * (NdChar + NaChar); end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(0.5 * N[(NdChar + NaChar), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
0.5 \cdot \left(NdChar + NaChar\right)
\end{array}
Initial program 100.0%
Taylor expanded in KbT around inf
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6431.1
Applied rewrites31.1%
Final simplification31.1%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (* NaChar 0.5))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return NaChar * 0.5;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
code = nachar * 0.5d0
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return NaChar * 0.5;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return NaChar * 0.5
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(NaChar * 0.5) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = NaChar * 0.5; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(NaChar * 0.5), $MachinePrecision]
\begin{array}{l}
\\
NaChar \cdot 0.5
\end{array}
Initial program 100.0%
Taylor expanded in KbT around inf
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6431.1
Applied rewrites31.1%
Taylor expanded in NaChar around inf
*-commutativeN/A
lower-*.f6419.2
Applied rewrites19.2%
herbie shell --seed 2024220
(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))))))