
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (+ (/ NdChar (+ 1.0 (exp (/ (- (- (- (- Ec Vef) EDonor) mu)) KbT)))) (/ NaChar (+ 1.0 (exp (/ (+ (+ (+ Ev Vef) EAccept) (- mu)) KbT))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NdChar / (1.0 + exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + exp(((((Ev + Vef) + EAccept) + -mu) / KbT))));
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
code = (ndchar / (1.0d0 + exp((-(((ec - vef) - edonor) - mu) / kbt)))) + (nachar / (1.0d0 + exp(((((ev + vef) + eaccept) + -mu) / kbt))))
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NdChar / (1.0 + Math.exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + Math.exp(((((Ev + Vef) + EAccept) + -mu) / KbT))));
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return (NdChar / (1.0 + math.exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + math.exp(((((Ev + Vef) + EAccept) + -mu) / KbT))))
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(-Float64(Float64(Float64(Ec - Vef) - EDonor) - mu)) / KbT)))) + Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(Float64(Ev + Vef) + EAccept) + Float64(-mu)) / KbT))))) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = (NdChar / (1.0 + exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + exp(((((Ev + Vef) + EAccept) + -mu) / KbT)))); end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(N[(NdChar / N[(1.0 + N[Exp[N[((-N[(N[(N[(Ec - Vef), $MachinePrecision] - EDonor), $MachinePrecision] - mu), $MachinePrecision]) / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Exp[N[(N[(N[(N[(Ev + Vef), $MachinePrecision] + EAccept), $MachinePrecision] + (-mu)), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{NdChar}{1 + e^{\frac{-\left(\left(\left(Ec - Vef\right) - EDonor\right) - mu\right)}{KbT}}} + \frac{NaChar}{1 + e^{\frac{\left(\left(Ev + Vef\right) + EAccept\right) + \left(-mu\right)}{KbT}}}
\end{array}
Sampling outcomes in binary64 precision:
Herbie found 22 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (+ (/ NdChar (+ 1.0 (exp (/ (- (- (- (- Ec Vef) EDonor) mu)) KbT)))) (/ NaChar (+ 1.0 (exp (/ (+ (+ (+ Ev Vef) EAccept) (- mu)) KbT))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NdChar / (1.0 + exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + exp(((((Ev + Vef) + EAccept) + -mu) / KbT))));
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
code = (ndchar / (1.0d0 + exp((-(((ec - vef) - edonor) - mu) / kbt)))) + (nachar / (1.0d0 + exp(((((ev + vef) + eaccept) + -mu) / kbt))))
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NdChar / (1.0 + Math.exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + Math.exp(((((Ev + Vef) + EAccept) + -mu) / KbT))));
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return (NdChar / (1.0 + math.exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + math.exp(((((Ev + Vef) + EAccept) + -mu) / KbT))))
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(-Float64(Float64(Float64(Ec - Vef) - EDonor) - mu)) / KbT)))) + Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(Float64(Ev + Vef) + EAccept) + Float64(-mu)) / KbT))))) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = (NdChar / (1.0 + exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + exp(((((Ev + Vef) + EAccept) + -mu) / KbT)))); end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(N[(NdChar / N[(1.0 + N[Exp[N[((-N[(N[(N[(Ec - Vef), $MachinePrecision] - EDonor), $MachinePrecision] - mu), $MachinePrecision]) / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Exp[N[(N[(N[(N[(Ev + Vef), $MachinePrecision] + EAccept), $MachinePrecision] + (-mu)), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{NdChar}{1 + e^{\frac{-\left(\left(\left(Ec - Vef\right) - EDonor\right) - mu\right)}{KbT}}} + \frac{NaChar}{1 + e^{\frac{\left(\left(Ev + Vef\right) + EAccept\right) + \left(-mu\right)}{KbT}}}
\end{array}
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (- (/ NaChar (+ 1.0 (exp (/ (- (+ EAccept (+ Ev Vef)) mu) KbT)))) (/ NdChar (- -1.0 (pow (exp -1.0) (/ (- (- (- Ec Vef) EDonor) mu) KbT))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NaChar / (1.0 + exp((((EAccept + (Ev + Vef)) - mu) / KbT)))) - (NdChar / (-1.0 - pow(exp(-1.0), ((((Ec - Vef) - EDonor) - 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 = (nachar / (1.0d0 + exp((((eaccept + (ev + vef)) - mu) / kbt)))) - (ndchar / ((-1.0d0) - (exp((-1.0d0)) ** ((((ec - vef) - edonor) - 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 (NaChar / (1.0 + Math.exp((((EAccept + (Ev + Vef)) - mu) / KbT)))) - (NdChar / (-1.0 - Math.pow(Math.exp(-1.0), ((((Ec - Vef) - EDonor) - mu) / KbT))));
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return (NaChar / (1.0 + math.exp((((EAccept + (Ev + Vef)) - mu) / KbT)))) - (NdChar / (-1.0 - math.pow(math.exp(-1.0), ((((Ec - Vef) - EDonor) - mu) / KbT))))
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(EAccept + Float64(Ev + Vef)) - mu) / KbT)))) - Float64(NdChar / Float64(-1.0 - (exp(-1.0) ^ Float64(Float64(Float64(Float64(Ec - Vef) - EDonor) - mu) / KbT))))) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = (NaChar / (1.0 + exp((((EAccept + (Ev + Vef)) - mu) / KbT)))) - (NdChar / (-1.0 - (exp(-1.0) ^ ((((Ec - Vef) - EDonor) - mu) / KbT)))); end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(N[(EAccept + N[(Ev + Vef), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(NdChar / N[(-1.0 - N[Power[N[Exp[-1.0], $MachinePrecision], N[(N[(N[(N[(Ec - Vef), $MachinePrecision] - EDonor), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{NaChar}{1 + e^{\frac{\left(EAccept + \left(Ev + Vef\right)\right) - mu}{KbT}}} - \frac{NdChar}{-1 - {\left(e^{-1}\right)}^{\left(\frac{\left(\left(Ec - Vef\right) - EDonor\right) - mu}{KbT}\right)}}
\end{array}
Initial program 100.0%
lift-exp.f64N/A
lift-/.f64N/A
lift-neg.f64N/A
distribute-frac-negN/A
neg-mul-1N/A
exp-prodN/A
lower-pow.f64N/A
lower-exp.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 (exp (/ (- mu (- (- Ec Vef) EDonor)) KbT)))
(t_1
(- (/ NaChar (+ 1.0 (exp (/ EAccept KbT)))) (/ NdChar (- -1.0 t_0))))
(t_2 (exp (/ (- (+ EAccept (+ Ev Vef)) mu) KbT)))
(t_3 (- (/ NdChar (+ 1.0 t_0)) (/ NaChar (- -1.0 t_2)))))
(if (<= t_3 -2e-250)
t_1
(if (<= t_3 5e-78)
(/ NdChar (+ 1.0 (exp (/ (- (+ (+ mu Vef) EDonor) Ec) KbT))))
(if (<= t_3 1e-12) (/ NaChar (+ 1.0 t_2)) t_1)))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = exp(((mu - ((Ec - Vef) - EDonor)) / KbT));
double t_1 = (NaChar / (1.0 + exp((EAccept / KbT)))) - (NdChar / (-1.0 - t_0));
double t_2 = exp((((EAccept + (Ev + Vef)) - mu) / KbT));
double t_3 = (NdChar / (1.0 + t_0)) - (NaChar / (-1.0 - t_2));
double tmp;
if (t_3 <= -2e-250) {
tmp = t_1;
} else if (t_3 <= 5e-78) {
tmp = NdChar / (1.0 + exp(((((mu + Vef) + EDonor) - Ec) / KbT)));
} else if (t_3 <= 1e-12) {
tmp = NaChar / (1.0 + t_2);
} else {
tmp = t_1;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: t_2
real(8) :: t_3
real(8) :: tmp
t_0 = exp(((mu - ((ec - vef) - edonor)) / kbt))
t_1 = (nachar / (1.0d0 + exp((eaccept / kbt)))) - (ndchar / ((-1.0d0) - t_0))
t_2 = exp((((eaccept + (ev + vef)) - mu) / kbt))
t_3 = (ndchar / (1.0d0 + t_0)) - (nachar / ((-1.0d0) - t_2))
if (t_3 <= (-2d-250)) then
tmp = t_1
else if (t_3 <= 5d-78) then
tmp = ndchar / (1.0d0 + exp(((((mu + vef) + edonor) - ec) / kbt)))
else if (t_3 <= 1d-12) then
tmp = nachar / (1.0d0 + t_2)
else
tmp = t_1
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = Math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT));
double t_1 = (NaChar / (1.0 + Math.exp((EAccept / KbT)))) - (NdChar / (-1.0 - t_0));
double t_2 = Math.exp((((EAccept + (Ev + Vef)) - mu) / KbT));
double t_3 = (NdChar / (1.0 + t_0)) - (NaChar / (-1.0 - t_2));
double tmp;
if (t_3 <= -2e-250) {
tmp = t_1;
} else if (t_3 <= 5e-78) {
tmp = NdChar / (1.0 + Math.exp(((((mu + Vef) + EDonor) - Ec) / KbT)));
} else if (t_3 <= 1e-12) {
tmp = NaChar / (1.0 + t_2);
} else {
tmp = t_1;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)) t_1 = (NaChar / (1.0 + math.exp((EAccept / KbT)))) - (NdChar / (-1.0 - t_0)) t_2 = math.exp((((EAccept + (Ev + Vef)) - mu) / KbT)) t_3 = (NdChar / (1.0 + t_0)) - (NaChar / (-1.0 - t_2)) tmp = 0 if t_3 <= -2e-250: tmp = t_1 elif t_3 <= 5e-78: tmp = NdChar / (1.0 + math.exp(((((mu + Vef) + EDonor) - Ec) / KbT))) elif t_3 <= 1e-12: tmp = NaChar / (1.0 + t_2) else: tmp = t_1 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = exp(Float64(Float64(mu - Float64(Float64(Ec - Vef) - EDonor)) / KbT)) t_1 = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT)))) - Float64(NdChar / Float64(-1.0 - t_0))) t_2 = exp(Float64(Float64(Float64(EAccept + Float64(Ev + Vef)) - mu) / KbT)) t_3 = Float64(Float64(NdChar / Float64(1.0 + t_0)) - Float64(NaChar / Float64(-1.0 - t_2))) tmp = 0.0 if (t_3 <= -2e-250) tmp = t_1; elseif (t_3 <= 5e-78) tmp = Float64(NdChar / Float64(1.0 + exp(Float64(Float64(Float64(Float64(mu + Vef) + EDonor) - Ec) / KbT)))); elseif (t_3 <= 1e-12) tmp = Float64(NaChar / Float64(1.0 + t_2)); else tmp = t_1; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = exp(((mu - ((Ec - Vef) - EDonor)) / KbT)); t_1 = (NaChar / (1.0 + exp((EAccept / KbT)))) - (NdChar / (-1.0 - t_0)); t_2 = exp((((EAccept + (Ev + Vef)) - mu) / KbT)); t_3 = (NdChar / (1.0 + t_0)) - (NaChar / (-1.0 - t_2)); tmp = 0.0; if (t_3 <= -2e-250) tmp = t_1; elseif (t_3 <= 5e-78) tmp = NdChar / (1.0 + exp(((((mu + Vef) + EDonor) - Ec) / KbT))); elseif (t_3 <= 1e-12) tmp = NaChar / (1.0 + t_2); else tmp = t_1; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[Exp[N[(N[(mu - N[(N[(Ec - Vef), $MachinePrecision] - EDonor), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[(N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(NdChar / N[(-1.0 - t$95$0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[Exp[N[(N[(N[(EAccept + N[(Ev + Vef), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$3 = N[(N[(NdChar / N[(1.0 + t$95$0), $MachinePrecision]), $MachinePrecision] - N[(NaChar / N[(-1.0 - t$95$2), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$3, -2e-250], t$95$1, If[LessEqual[t$95$3, 5e-78], N[(NdChar / N[(1.0 + N[Exp[N[(N[(N[(N[(mu + Vef), $MachinePrecision] + EDonor), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$3, 1e-12], N[(NaChar / N[(1.0 + t$95$2), $MachinePrecision]), $MachinePrecision], t$95$1]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := e^{\frac{mu - \left(\left(Ec - Vef\right) - EDonor\right)}{KbT}}\\
t_1 := \frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}} - \frac{NdChar}{-1 - t\_0}\\
t_2 := e^{\frac{\left(EAccept + \left(Ev + Vef\right)\right) - mu}{KbT}}\\
t_3 := \frac{NdChar}{1 + t\_0} - \frac{NaChar}{-1 - t\_2}\\
\mathbf{if}\;t\_3 \leq -2 \cdot 10^{-250}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;t\_3 \leq 5 \cdot 10^{-78}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{\left(\left(mu + Vef\right) + EDonor\right) - Ec}{KbT}}}\\
\mathbf{elif}\;t\_3 \leq 10^{-12}:\\
\;\;\;\;\frac{NaChar}{1 + t\_2}\\
\mathbf{else}:\\
\;\;\;\;t\_1\\
\end{array}
\end{array}
if (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < -2.0000000000000001e-250 or 9.9999999999999998e-13 < (+.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.9
Applied rewrites80.9%
if -2.0000000000000001e-250 < (+.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.9999999999999996e-78Initial program 100.0%
Taylor expanded in KbT around inf
+-commutativeN/A
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f646.8
Applied rewrites6.8%
Taylor expanded in NdChar around 0
Applied rewrites7.1%
Taylor expanded in NdChar around inf
lower-/.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
lower--.f64N/A
+-commutativeN/A
lower-+.f64N/A
+-commutativeN/A
lower-+.f6486.8
Applied rewrites86.8%
if 4.9999999999999996e-78 < (+.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.9999999999999998e-13Initial program 100.0%
Taylor expanded in NdChar around 0
lower-/.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
lower--.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower-+.f6480.8
Applied rewrites80.8%
Final simplification82.9%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NdChar (+ 1.0 (exp (/ (- mu (- (- Ec Vef) EDonor)) KbT)))))
(t_1 (+ (/ NaChar 2.0) t_0))
(t_2 (exp (/ (- (+ EAccept (+ Ev Vef)) mu) KbT)))
(t_3 (- t_0 (/ NaChar (- -1.0 t_2)))))
(if (<= t_3 -4e-228)
t_1
(if (<= t_3 5e-78)
(/ NdChar (+ 1.0 (exp (/ (- (+ (+ mu Vef) EDonor) Ec) KbT))))
(if (<= t_3 1e-12) (/ NaChar (+ 1.0 t_2)) t_1)))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (1.0 + exp(((mu - ((Ec - Vef) - EDonor)) / KbT)));
double t_1 = (NaChar / 2.0) + t_0;
double t_2 = exp((((EAccept + (Ev + Vef)) - mu) / KbT));
double t_3 = t_0 - (NaChar / (-1.0 - t_2));
double tmp;
if (t_3 <= -4e-228) {
tmp = t_1;
} else if (t_3 <= 5e-78) {
tmp = NdChar / (1.0 + exp(((((mu + Vef) + EDonor) - Ec) / KbT)));
} else if (t_3 <= 1e-12) {
tmp = NaChar / (1.0 + t_2);
} else {
tmp = t_1;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: t_2
real(8) :: t_3
real(8) :: tmp
t_0 = ndchar / (1.0d0 + exp(((mu - ((ec - vef) - edonor)) / kbt)))
t_1 = (nachar / 2.0d0) + t_0
t_2 = exp((((eaccept + (ev + vef)) - mu) / kbt))
t_3 = t_0 - (nachar / ((-1.0d0) - t_2))
if (t_3 <= (-4d-228)) then
tmp = t_1
else if (t_3 <= 5d-78) then
tmp = ndchar / (1.0d0 + exp(((((mu + vef) + edonor) - ec) / kbt)))
else if (t_3 <= 1d-12) then
tmp = nachar / (1.0d0 + t_2)
else
tmp = t_1
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (1.0 + Math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)));
double t_1 = (NaChar / 2.0) + t_0;
double t_2 = Math.exp((((EAccept + (Ev + Vef)) - mu) / KbT));
double t_3 = t_0 - (NaChar / (-1.0 - t_2));
double tmp;
if (t_3 <= -4e-228) {
tmp = t_1;
} else if (t_3 <= 5e-78) {
tmp = NdChar / (1.0 + Math.exp(((((mu + Vef) + EDonor) - Ec) / KbT)));
} else if (t_3 <= 1e-12) {
tmp = NaChar / (1.0 + t_2);
} else {
tmp = t_1;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NdChar / (1.0 + math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT))) t_1 = (NaChar / 2.0) + t_0 t_2 = math.exp((((EAccept + (Ev + Vef)) - mu) / KbT)) t_3 = t_0 - (NaChar / (-1.0 - t_2)) tmp = 0 if t_3 <= -4e-228: tmp = t_1 elif t_3 <= 5e-78: tmp = NdChar / (1.0 + math.exp(((((mu + Vef) + EDonor) - Ec) / KbT))) elif t_3 <= 1e-12: tmp = NaChar / (1.0 + t_2) else: tmp = t_1 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NdChar / Float64(1.0 + exp(Float64(Float64(mu - Float64(Float64(Ec - Vef) - EDonor)) / KbT)))) t_1 = Float64(Float64(NaChar / 2.0) + t_0) t_2 = exp(Float64(Float64(Float64(EAccept + Float64(Ev + Vef)) - mu) / KbT)) t_3 = Float64(t_0 - Float64(NaChar / Float64(-1.0 - t_2))) tmp = 0.0 if (t_3 <= -4e-228) tmp = t_1; elseif (t_3 <= 5e-78) tmp = Float64(NdChar / Float64(1.0 + exp(Float64(Float64(Float64(Float64(mu + Vef) + EDonor) - Ec) / KbT)))); elseif (t_3 <= 1e-12) tmp = Float64(NaChar / Float64(1.0 + t_2)); else tmp = t_1; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NdChar / (1.0 + exp(((mu - ((Ec - Vef) - EDonor)) / KbT))); t_1 = (NaChar / 2.0) + t_0; t_2 = exp((((EAccept + (Ev + Vef)) - mu) / KbT)); t_3 = t_0 - (NaChar / (-1.0 - t_2)); tmp = 0.0; if (t_3 <= -4e-228) tmp = t_1; elseif (t_3 <= 5e-78) tmp = NdChar / (1.0 + exp(((((mu + Vef) + EDonor) - Ec) / KbT))); elseif (t_3 <= 1e-12) tmp = NaChar / (1.0 + t_2); else tmp = t_1; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NdChar / N[(1.0 + N[Exp[N[(N[(mu - N[(N[(Ec - Vef), $MachinePrecision] - EDonor), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NaChar / 2.0), $MachinePrecision] + t$95$0), $MachinePrecision]}, Block[{t$95$2 = N[Exp[N[(N[(N[(EAccept + N[(Ev + Vef), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$3 = N[(t$95$0 - N[(NaChar / N[(-1.0 - t$95$2), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$3, -4e-228], t$95$1, If[LessEqual[t$95$3, 5e-78], N[(NdChar / N[(1.0 + N[Exp[N[(N[(N[(N[(mu + Vef), $MachinePrecision] + EDonor), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$3, 1e-12], N[(NaChar / N[(1.0 + t$95$2), $MachinePrecision]), $MachinePrecision], t$95$1]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{1 + e^{\frac{mu - \left(\left(Ec - Vef\right) - EDonor\right)}{KbT}}}\\
t_1 := \frac{NaChar}{2} + t\_0\\
t_2 := e^{\frac{\left(EAccept + \left(Ev + Vef\right)\right) - mu}{KbT}}\\
t_3 := t\_0 - \frac{NaChar}{-1 - t\_2}\\
\mathbf{if}\;t\_3 \leq -4 \cdot 10^{-228}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;t\_3 \leq 5 \cdot 10^{-78}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{\left(\left(mu + Vef\right) + EDonor\right) - Ec}{KbT}}}\\
\mathbf{elif}\;t\_3 \leq 10^{-12}:\\
\;\;\;\;\frac{NaChar}{1 + t\_2}\\
\mathbf{else}:\\
\;\;\;\;t\_1\\
\end{array}
\end{array}
if (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < -4.00000000000000013e-228 or 9.9999999999999998e-13 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) Initial program 100.0%
Taylor expanded in KbT around inf
lower--.f64N/A
associate-+r+N/A
lower-+.f64N/A
lower-+.f64N/A
lower-/.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower-/.f64N/A
lower-/.f64N/A
lower-/.f6464.6
Applied rewrites64.6%
Taylor expanded in KbT around inf
Applied rewrites67.7%
if -4.00000000000000013e-228 < (+.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.9999999999999996e-78Initial program 100.0%
Taylor expanded in KbT around inf
+-commutativeN/A
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f646.6
Applied rewrites6.6%
Taylor expanded in NdChar around 0
Applied rewrites7.4%
Taylor expanded in NdChar around inf
lower-/.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
lower--.f64N/A
+-commutativeN/A
lower-+.f64N/A
+-commutativeN/A
lower-+.f6485.1
Applied rewrites85.1%
if 4.9999999999999996e-78 < (+.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.9999999999999998e-13Initial program 100.0%
Taylor expanded in NdChar around 0
lower-/.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
lower--.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower-+.f6480.8
Applied rewrites80.8%
Final simplification74.5%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (* (+ NaChar NdChar) 0.5))
(t_1
(-
(/ NdChar (+ 1.0 (exp (/ (- mu (- (- Ec Vef) EDonor)) KbT))))
(/ NaChar (- -1.0 (exp (/ (- (+ EAccept (+ Ev Vef)) mu) KbT)))))))
(if (<= t_1 -1e-214)
t_0
(if (<= t_1 0.0)
(*
(/
1.0
(/ (+ 1.0 (/ (- (/ (* NdChar NdChar) NaChar) NdChar) NaChar)) NaChar))
0.5)
(if (<= t_1 5e-103) (* 0.5 NdChar) t_0)))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar + NdChar) * 0.5;
double t_1 = (NdChar / (1.0 + exp(((mu - ((Ec - Vef) - EDonor)) / KbT)))) - (NaChar / (-1.0 - exp((((EAccept + (Ev + Vef)) - mu) / KbT))));
double tmp;
if (t_1 <= -1e-214) {
tmp = t_0;
} else if (t_1 <= 0.0) {
tmp = (1.0 / ((1.0 + ((((NdChar * NdChar) / NaChar) - NdChar) / NaChar)) / NaChar)) * 0.5;
} else if (t_1 <= 5e-103) {
tmp = 0.5 * NdChar;
} else {
tmp = t_0;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = (nachar + ndchar) * 0.5d0
t_1 = (ndchar / (1.0d0 + exp(((mu - ((ec - vef) - edonor)) / kbt)))) - (nachar / ((-1.0d0) - exp((((eaccept + (ev + vef)) - mu) / kbt))))
if (t_1 <= (-1d-214)) then
tmp = t_0
else if (t_1 <= 0.0d0) then
tmp = (1.0d0 / ((1.0d0 + ((((ndchar * ndchar) / nachar) - ndchar) / nachar)) / nachar)) * 0.5d0
else if (t_1 <= 5d-103) then
tmp = 0.5d0 * ndchar
else
tmp = t_0
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar + NdChar) * 0.5;
double t_1 = (NdChar / (1.0 + Math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)))) - (NaChar / (-1.0 - Math.exp((((EAccept + (Ev + Vef)) - mu) / KbT))));
double tmp;
if (t_1 <= -1e-214) {
tmp = t_0;
} else if (t_1 <= 0.0) {
tmp = (1.0 / ((1.0 + ((((NdChar * NdChar) / NaChar) - NdChar) / NaChar)) / NaChar)) * 0.5;
} else if (t_1 <= 5e-103) {
tmp = 0.5 * NdChar;
} else {
tmp = t_0;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = (NaChar + NdChar) * 0.5 t_1 = (NdChar / (1.0 + math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)))) - (NaChar / (-1.0 - math.exp((((EAccept + (Ev + Vef)) - mu) / KbT)))) tmp = 0 if t_1 <= -1e-214: tmp = t_0 elif t_1 <= 0.0: tmp = (1.0 / ((1.0 + ((((NdChar * NdChar) / NaChar) - NdChar) / NaChar)) / NaChar)) * 0.5 elif t_1 <= 5e-103: tmp = 0.5 * NdChar else: tmp = t_0 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(NaChar + NdChar) * 0.5) t_1 = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(mu - Float64(Float64(Ec - Vef) - EDonor)) / KbT)))) - Float64(NaChar / Float64(-1.0 - exp(Float64(Float64(Float64(EAccept + Float64(Ev + Vef)) - mu) / KbT))))) tmp = 0.0 if (t_1 <= -1e-214) tmp = t_0; elseif (t_1 <= 0.0) tmp = Float64(Float64(1.0 / Float64(Float64(1.0 + Float64(Float64(Float64(Float64(NdChar * NdChar) / NaChar) - NdChar) / NaChar)) / NaChar)) * 0.5); elseif (t_1 <= 5e-103) tmp = Float64(0.5 * NdChar); else tmp = t_0; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = (NaChar + NdChar) * 0.5; t_1 = (NdChar / (1.0 + exp(((mu - ((Ec - Vef) - EDonor)) / KbT)))) - (NaChar / (-1.0 - exp((((EAccept + (Ev + Vef)) - mu) / KbT)))); tmp = 0.0; if (t_1 <= -1e-214) tmp = t_0; elseif (t_1 <= 0.0) tmp = (1.0 / ((1.0 + ((((NdChar * NdChar) / NaChar) - NdChar) / NaChar)) / NaChar)) * 0.5; elseif (t_1 <= 5e-103) tmp = 0.5 * NdChar; else tmp = t_0; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(NaChar + NdChar), $MachinePrecision] * 0.5), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(mu - N[(N[(Ec - Vef), $MachinePrecision] - EDonor), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(NaChar / N[(-1.0 - N[Exp[N[(N[(N[(EAccept + N[(Ev + Vef), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$1, -1e-214], t$95$0, If[LessEqual[t$95$1, 0.0], N[(N[(1.0 / N[(N[(1.0 + N[(N[(N[(N[(NdChar * NdChar), $MachinePrecision] / NaChar), $MachinePrecision] - NdChar), $MachinePrecision] / NaChar), $MachinePrecision]), $MachinePrecision] / NaChar), $MachinePrecision]), $MachinePrecision] * 0.5), $MachinePrecision], If[LessEqual[t$95$1, 5e-103], N[(0.5 * NdChar), $MachinePrecision], t$95$0]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(NaChar + NdChar\right) \cdot 0.5\\
t_1 := \frac{NdChar}{1 + e^{\frac{mu - \left(\left(Ec - Vef\right) - EDonor\right)}{KbT}}} - \frac{NaChar}{-1 - e^{\frac{\left(EAccept + \left(Ev + Vef\right)\right) - mu}{KbT}}}\\
\mathbf{if}\;t\_1 \leq -1 \cdot 10^{-214}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;t\_1 \leq 0:\\
\;\;\;\;\frac{1}{\frac{1 + \frac{\frac{NdChar \cdot NdChar}{NaChar} - NdChar}{NaChar}}{NaChar}} \cdot 0.5\\
\mathbf{elif}\;t\_1 \leq 5 \cdot 10^{-103}:\\
\;\;\;\;0.5 \cdot 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))))) < -9.99999999999999913e-215 or 4.99999999999999966e-103 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) Initial program 100.0%
Taylor expanded in KbT around inf
+-commutativeN/A
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6438.7
Applied rewrites38.7%
if -9.99999999999999913e-215 < (+.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
+-commutativeN/A
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f642.5
Applied rewrites2.5%
Applied rewrites3.9%
Taylor expanded in NdChar around inf
Applied rewrites4.0%
Taylor expanded in NaChar around -inf
Applied rewrites39.4%
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.99999999999999966e-103Initial program 100.0%
Taylor expanded in KbT around inf
+-commutativeN/A
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f649.1
Applied rewrites9.1%
Taylor expanded in NdChar around 0
Applied rewrites13.0%
Taylor expanded in NdChar around inf
Applied rewrites27.2%
Final simplification37.8%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (* (+ NaChar NdChar) 0.5))
(t_1
(-
(/ NdChar (+ 1.0 (exp (/ (- mu (- (- Ec Vef) EDonor)) KbT))))
(/ NaChar (- -1.0 (exp (/ (- (+ EAccept (+ Ev Vef)) mu) KbT)))))))
(if (<= t_1 -1e-214)
t_0
(if (<= t_1 0.0)
(*
(/
1.0
(/
(/ (fma (- NaChar) NdChar (* NdChar NdChar)) (* NaChar NaChar))
NaChar))
0.5)
(if (<= t_1 5e-103) (* 0.5 NdChar) t_0)))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar + NdChar) * 0.5;
double t_1 = (NdChar / (1.0 + exp(((mu - ((Ec - Vef) - EDonor)) / KbT)))) - (NaChar / (-1.0 - exp((((EAccept + (Ev + Vef)) - mu) / KbT))));
double tmp;
if (t_1 <= -1e-214) {
tmp = t_0;
} else if (t_1 <= 0.0) {
tmp = (1.0 / ((fma(-NaChar, NdChar, (NdChar * NdChar)) / (NaChar * NaChar)) / NaChar)) * 0.5;
} else if (t_1 <= 5e-103) {
tmp = 0.5 * NdChar;
} else {
tmp = t_0;
}
return tmp;
}
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(NaChar + NdChar) * 0.5) t_1 = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(mu - Float64(Float64(Ec - Vef) - EDonor)) / KbT)))) - Float64(NaChar / Float64(-1.0 - exp(Float64(Float64(Float64(EAccept + Float64(Ev + Vef)) - mu) / KbT))))) tmp = 0.0 if (t_1 <= -1e-214) tmp = t_0; elseif (t_1 <= 0.0) tmp = Float64(Float64(1.0 / Float64(Float64(fma(Float64(-NaChar), NdChar, Float64(NdChar * NdChar)) / Float64(NaChar * NaChar)) / NaChar)) * 0.5); elseif (t_1 <= 5e-103) tmp = Float64(0.5 * NdChar); else tmp = t_0; end return tmp end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(NaChar + NdChar), $MachinePrecision] * 0.5), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(mu - N[(N[(Ec - Vef), $MachinePrecision] - EDonor), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(NaChar / N[(-1.0 - N[Exp[N[(N[(N[(EAccept + N[(Ev + Vef), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$1, -1e-214], t$95$0, If[LessEqual[t$95$1, 0.0], N[(N[(1.0 / N[(N[(N[((-NaChar) * NdChar + N[(NdChar * NdChar), $MachinePrecision]), $MachinePrecision] / N[(NaChar * NaChar), $MachinePrecision]), $MachinePrecision] / NaChar), $MachinePrecision]), $MachinePrecision] * 0.5), $MachinePrecision], If[LessEqual[t$95$1, 5e-103], N[(0.5 * NdChar), $MachinePrecision], t$95$0]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(NaChar + NdChar\right) \cdot 0.5\\
t_1 := \frac{NdChar}{1 + e^{\frac{mu - \left(\left(Ec - Vef\right) - EDonor\right)}{KbT}}} - \frac{NaChar}{-1 - e^{\frac{\left(EAccept + \left(Ev + Vef\right)\right) - mu}{KbT}}}\\
\mathbf{if}\;t\_1 \leq -1 \cdot 10^{-214}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;t\_1 \leq 0:\\
\;\;\;\;\frac{1}{\frac{\frac{\mathsf{fma}\left(-NaChar, NdChar, NdChar \cdot NdChar\right)}{NaChar \cdot NaChar}}{NaChar}} \cdot 0.5\\
\mathbf{elif}\;t\_1 \leq 5 \cdot 10^{-103}:\\
\;\;\;\;0.5 \cdot 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))))) < -9.99999999999999913e-215 or 4.99999999999999966e-103 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) Initial program 100.0%
Taylor expanded in KbT around inf
+-commutativeN/A
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6438.7
Applied rewrites38.7%
if -9.99999999999999913e-215 < (+.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
+-commutativeN/A
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f642.5
Applied rewrites2.5%
Applied rewrites3.9%
Taylor expanded in NaChar around inf
Applied rewrites23.1%
Taylor expanded in NaChar around 0
Applied rewrites34.0%
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.99999999999999966e-103Initial program 100.0%
Taylor expanded in KbT around inf
+-commutativeN/A
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f649.1
Applied rewrites9.1%
Taylor expanded in NdChar around 0
Applied rewrites13.0%
Taylor expanded in NdChar around inf
Applied rewrites27.2%
Final simplification36.5%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (* (+ NaChar NdChar) 0.5))
(t_1
(-
(/ NdChar (+ 1.0 (exp (/ (- mu (- (- Ec Vef) EDonor)) KbT))))
(/ NaChar (- -1.0 (exp (/ (- (+ EAccept (+ Ev Vef)) mu) KbT)))))))
(if (<= t_1 -1e-214)
t_0
(if (<= t_1 0.0)
(* (/ 1.0 (/ (* (/ NdChar NaChar) (/ NdChar NaChar)) NaChar)) 0.5)
(if (<= t_1 5e-103) (* 0.5 NdChar) t_0)))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar + NdChar) * 0.5;
double t_1 = (NdChar / (1.0 + exp(((mu - ((Ec - Vef) - EDonor)) / KbT)))) - (NaChar / (-1.0 - exp((((EAccept + (Ev + Vef)) - mu) / KbT))));
double tmp;
if (t_1 <= -1e-214) {
tmp = t_0;
} else if (t_1 <= 0.0) {
tmp = (1.0 / (((NdChar / NaChar) * (NdChar / NaChar)) / NaChar)) * 0.5;
} else if (t_1 <= 5e-103) {
tmp = 0.5 * NdChar;
} else {
tmp = t_0;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = (nachar + ndchar) * 0.5d0
t_1 = (ndchar / (1.0d0 + exp(((mu - ((ec - vef) - edonor)) / kbt)))) - (nachar / ((-1.0d0) - exp((((eaccept + (ev + vef)) - mu) / kbt))))
if (t_1 <= (-1d-214)) then
tmp = t_0
else if (t_1 <= 0.0d0) then
tmp = (1.0d0 / (((ndchar / nachar) * (ndchar / nachar)) / nachar)) * 0.5d0
else if (t_1 <= 5d-103) then
tmp = 0.5d0 * ndchar
else
tmp = t_0
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar + NdChar) * 0.5;
double t_1 = (NdChar / (1.0 + Math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)))) - (NaChar / (-1.0 - Math.exp((((EAccept + (Ev + Vef)) - mu) / KbT))));
double tmp;
if (t_1 <= -1e-214) {
tmp = t_0;
} else if (t_1 <= 0.0) {
tmp = (1.0 / (((NdChar / NaChar) * (NdChar / NaChar)) / NaChar)) * 0.5;
} else if (t_1 <= 5e-103) {
tmp = 0.5 * NdChar;
} else {
tmp = t_0;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = (NaChar + NdChar) * 0.5 t_1 = (NdChar / (1.0 + math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)))) - (NaChar / (-1.0 - math.exp((((EAccept + (Ev + Vef)) - mu) / KbT)))) tmp = 0 if t_1 <= -1e-214: tmp = t_0 elif t_1 <= 0.0: tmp = (1.0 / (((NdChar / NaChar) * (NdChar / NaChar)) / NaChar)) * 0.5 elif t_1 <= 5e-103: tmp = 0.5 * NdChar else: tmp = t_0 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(NaChar + NdChar) * 0.5) t_1 = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(mu - Float64(Float64(Ec - Vef) - EDonor)) / KbT)))) - Float64(NaChar / Float64(-1.0 - exp(Float64(Float64(Float64(EAccept + Float64(Ev + Vef)) - mu) / KbT))))) tmp = 0.0 if (t_1 <= -1e-214) tmp = t_0; elseif (t_1 <= 0.0) tmp = Float64(Float64(1.0 / Float64(Float64(Float64(NdChar / NaChar) * Float64(NdChar / NaChar)) / NaChar)) * 0.5); elseif (t_1 <= 5e-103) tmp = Float64(0.5 * NdChar); else tmp = t_0; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = (NaChar + NdChar) * 0.5; t_1 = (NdChar / (1.0 + exp(((mu - ((Ec - Vef) - EDonor)) / KbT)))) - (NaChar / (-1.0 - exp((((EAccept + (Ev + Vef)) - mu) / KbT)))); tmp = 0.0; if (t_1 <= -1e-214) tmp = t_0; elseif (t_1 <= 0.0) tmp = (1.0 / (((NdChar / NaChar) * (NdChar / NaChar)) / NaChar)) * 0.5; elseif (t_1 <= 5e-103) tmp = 0.5 * NdChar; else tmp = t_0; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(NaChar + NdChar), $MachinePrecision] * 0.5), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(mu - N[(N[(Ec - Vef), $MachinePrecision] - EDonor), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(NaChar / N[(-1.0 - N[Exp[N[(N[(N[(EAccept + N[(Ev + Vef), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$1, -1e-214], t$95$0, If[LessEqual[t$95$1, 0.0], N[(N[(1.0 / N[(N[(N[(NdChar / NaChar), $MachinePrecision] * N[(NdChar / NaChar), $MachinePrecision]), $MachinePrecision] / NaChar), $MachinePrecision]), $MachinePrecision] * 0.5), $MachinePrecision], If[LessEqual[t$95$1, 5e-103], N[(0.5 * NdChar), $MachinePrecision], t$95$0]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(NaChar + NdChar\right) \cdot 0.5\\
t_1 := \frac{NdChar}{1 + e^{\frac{mu - \left(\left(Ec - Vef\right) - EDonor\right)}{KbT}}} - \frac{NaChar}{-1 - e^{\frac{\left(EAccept + \left(Ev + Vef\right)\right) - mu}{KbT}}}\\
\mathbf{if}\;t\_1 \leq -1 \cdot 10^{-214}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;t\_1 \leq 0:\\
\;\;\;\;\frac{1}{\frac{\frac{NdChar}{NaChar} \cdot \frac{NdChar}{NaChar}}{NaChar}} \cdot 0.5\\
\mathbf{elif}\;t\_1 \leq 5 \cdot 10^{-103}:\\
\;\;\;\;0.5 \cdot 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))))) < -9.99999999999999913e-215 or 4.99999999999999966e-103 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) Initial program 100.0%
Taylor expanded in KbT around inf
+-commutativeN/A
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6438.7
Applied rewrites38.7%
if -9.99999999999999913e-215 < (+.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
+-commutativeN/A
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f642.5
Applied rewrites2.5%
Applied rewrites3.9%
Taylor expanded in NaChar around inf
Applied rewrites23.1%
Taylor expanded in NdChar around inf
Applied rewrites32.7%
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.99999999999999966e-103Initial program 100.0%
Taylor expanded in KbT around inf
+-commutativeN/A
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f649.1
Applied rewrites9.1%
Taylor expanded in NdChar around 0
Applied rewrites13.0%
Taylor expanded in NdChar around inf
Applied rewrites27.2%
Final simplification36.1%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (* (+ NaChar NdChar) 0.5))
(t_1
(-
(/ NdChar (+ 1.0 (exp (/ (- mu (- (- Ec Vef) EDonor)) KbT))))
(/ NaChar (- -1.0 (exp (/ (- (+ EAccept (+ Ev Vef)) mu) KbT)))))))
(if (<= t_1 -1e-214)
t_0
(if (<= t_1 0.0)
(* (/ 1.0 (- (/ 1.0 NaChar) (/ NdChar (* NaChar NaChar)))) 0.5)
(if (<= t_1 5e-103) (* 0.5 NdChar) t_0)))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar + NdChar) * 0.5;
double t_1 = (NdChar / (1.0 + exp(((mu - ((Ec - Vef) - EDonor)) / KbT)))) - (NaChar / (-1.0 - exp((((EAccept + (Ev + Vef)) - mu) / KbT))));
double tmp;
if (t_1 <= -1e-214) {
tmp = t_0;
} else if (t_1 <= 0.0) {
tmp = (1.0 / ((1.0 / NaChar) - (NdChar / (NaChar * NaChar)))) * 0.5;
} else if (t_1 <= 5e-103) {
tmp = 0.5 * NdChar;
} else {
tmp = t_0;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = (nachar + ndchar) * 0.5d0
t_1 = (ndchar / (1.0d0 + exp(((mu - ((ec - vef) - edonor)) / kbt)))) - (nachar / ((-1.0d0) - exp((((eaccept + (ev + vef)) - mu) / kbt))))
if (t_1 <= (-1d-214)) then
tmp = t_0
else if (t_1 <= 0.0d0) then
tmp = (1.0d0 / ((1.0d0 / nachar) - (ndchar / (nachar * nachar)))) * 0.5d0
else if (t_1 <= 5d-103) then
tmp = 0.5d0 * ndchar
else
tmp = t_0
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar + NdChar) * 0.5;
double t_1 = (NdChar / (1.0 + Math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)))) - (NaChar / (-1.0 - Math.exp((((EAccept + (Ev + Vef)) - mu) / KbT))));
double tmp;
if (t_1 <= -1e-214) {
tmp = t_0;
} else if (t_1 <= 0.0) {
tmp = (1.0 / ((1.0 / NaChar) - (NdChar / (NaChar * NaChar)))) * 0.5;
} else if (t_1 <= 5e-103) {
tmp = 0.5 * NdChar;
} else {
tmp = t_0;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = (NaChar + NdChar) * 0.5 t_1 = (NdChar / (1.0 + math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)))) - (NaChar / (-1.0 - math.exp((((EAccept + (Ev + Vef)) - mu) / KbT)))) tmp = 0 if t_1 <= -1e-214: tmp = t_0 elif t_1 <= 0.0: tmp = (1.0 / ((1.0 / NaChar) - (NdChar / (NaChar * NaChar)))) * 0.5 elif t_1 <= 5e-103: tmp = 0.5 * NdChar else: tmp = t_0 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(NaChar + NdChar) * 0.5) t_1 = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(mu - Float64(Float64(Ec - Vef) - EDonor)) / KbT)))) - Float64(NaChar / Float64(-1.0 - exp(Float64(Float64(Float64(EAccept + Float64(Ev + Vef)) - mu) / KbT))))) tmp = 0.0 if (t_1 <= -1e-214) tmp = t_0; elseif (t_1 <= 0.0) tmp = Float64(Float64(1.0 / Float64(Float64(1.0 / NaChar) - Float64(NdChar / Float64(NaChar * NaChar)))) * 0.5); elseif (t_1 <= 5e-103) tmp = Float64(0.5 * NdChar); else tmp = t_0; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = (NaChar + NdChar) * 0.5; t_1 = (NdChar / (1.0 + exp(((mu - ((Ec - Vef) - EDonor)) / KbT)))) - (NaChar / (-1.0 - exp((((EAccept + (Ev + Vef)) - mu) / KbT)))); tmp = 0.0; if (t_1 <= -1e-214) tmp = t_0; elseif (t_1 <= 0.0) tmp = (1.0 / ((1.0 / NaChar) - (NdChar / (NaChar * NaChar)))) * 0.5; elseif (t_1 <= 5e-103) tmp = 0.5 * NdChar; else tmp = t_0; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(NaChar + NdChar), $MachinePrecision] * 0.5), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(mu - N[(N[(Ec - Vef), $MachinePrecision] - EDonor), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(NaChar / N[(-1.0 - N[Exp[N[(N[(N[(EAccept + N[(Ev + Vef), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$1, -1e-214], t$95$0, If[LessEqual[t$95$1, 0.0], N[(N[(1.0 / N[(N[(1.0 / NaChar), $MachinePrecision] - N[(NdChar / N[(NaChar * NaChar), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * 0.5), $MachinePrecision], If[LessEqual[t$95$1, 5e-103], N[(0.5 * NdChar), $MachinePrecision], t$95$0]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(NaChar + NdChar\right) \cdot 0.5\\
t_1 := \frac{NdChar}{1 + e^{\frac{mu - \left(\left(Ec - Vef\right) - EDonor\right)}{KbT}}} - \frac{NaChar}{-1 - e^{\frac{\left(EAccept + \left(Ev + Vef\right)\right) - mu}{KbT}}}\\
\mathbf{if}\;t\_1 \leq -1 \cdot 10^{-214}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;t\_1 \leq 0:\\
\;\;\;\;\frac{1}{\frac{1}{NaChar} - \frac{NdChar}{NaChar \cdot NaChar}} \cdot 0.5\\
\mathbf{elif}\;t\_1 \leq 5 \cdot 10^{-103}:\\
\;\;\;\;0.5 \cdot 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))))) < -9.99999999999999913e-215 or 4.99999999999999966e-103 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) Initial program 100.0%
Taylor expanded in KbT around inf
+-commutativeN/A
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6438.7
Applied rewrites38.7%
if -9.99999999999999913e-215 < (+.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
+-commutativeN/A
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f642.5
Applied rewrites2.5%
Applied rewrites3.9%
Taylor expanded in NdChar around 0
Applied rewrites28.5%
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.99999999999999966e-103Initial program 100.0%
Taylor expanded in KbT around inf
+-commutativeN/A
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f649.1
Applied rewrites9.1%
Taylor expanded in NdChar around 0
Applied rewrites13.0%
Taylor expanded in NdChar around inf
Applied rewrites27.2%
Final simplification35.1%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (* (+ NaChar NdChar) 0.5))
(t_1
(-
(/ NdChar (+ 1.0 (exp (/ (- mu (- (- Ec Vef) EDonor)) KbT))))
(/ NaChar (- -1.0 (exp (/ (- (+ EAccept (+ Ev Vef)) mu) KbT)))))))
(if (<= t_1 -1e-214)
t_0
(if (<= t_1 0.0)
(* (/ 1.0 (/ (- 1.0 (/ NdChar NaChar)) NaChar)) 0.5)
(if (<= t_1 5e-103) (* 0.5 NdChar) t_0)))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar + NdChar) * 0.5;
double t_1 = (NdChar / (1.0 + exp(((mu - ((Ec - Vef) - EDonor)) / KbT)))) - (NaChar / (-1.0 - exp((((EAccept + (Ev + Vef)) - mu) / KbT))));
double tmp;
if (t_1 <= -1e-214) {
tmp = t_0;
} else if (t_1 <= 0.0) {
tmp = (1.0 / ((1.0 - (NdChar / NaChar)) / NaChar)) * 0.5;
} else if (t_1 <= 5e-103) {
tmp = 0.5 * NdChar;
} else {
tmp = t_0;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = (nachar + ndchar) * 0.5d0
t_1 = (ndchar / (1.0d0 + exp(((mu - ((ec - vef) - edonor)) / kbt)))) - (nachar / ((-1.0d0) - exp((((eaccept + (ev + vef)) - mu) / kbt))))
if (t_1 <= (-1d-214)) then
tmp = t_0
else if (t_1 <= 0.0d0) then
tmp = (1.0d0 / ((1.0d0 - (ndchar / nachar)) / nachar)) * 0.5d0
else if (t_1 <= 5d-103) then
tmp = 0.5d0 * ndchar
else
tmp = t_0
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar + NdChar) * 0.5;
double t_1 = (NdChar / (1.0 + Math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)))) - (NaChar / (-1.0 - Math.exp((((EAccept + (Ev + Vef)) - mu) / KbT))));
double tmp;
if (t_1 <= -1e-214) {
tmp = t_0;
} else if (t_1 <= 0.0) {
tmp = (1.0 / ((1.0 - (NdChar / NaChar)) / NaChar)) * 0.5;
} else if (t_1 <= 5e-103) {
tmp = 0.5 * NdChar;
} else {
tmp = t_0;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = (NaChar + NdChar) * 0.5 t_1 = (NdChar / (1.0 + math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)))) - (NaChar / (-1.0 - math.exp((((EAccept + (Ev + Vef)) - mu) / KbT)))) tmp = 0 if t_1 <= -1e-214: tmp = t_0 elif t_1 <= 0.0: tmp = (1.0 / ((1.0 - (NdChar / NaChar)) / NaChar)) * 0.5 elif t_1 <= 5e-103: tmp = 0.5 * NdChar else: tmp = t_0 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(NaChar + NdChar) * 0.5) t_1 = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(mu - Float64(Float64(Ec - Vef) - EDonor)) / KbT)))) - Float64(NaChar / Float64(-1.0 - exp(Float64(Float64(Float64(EAccept + Float64(Ev + Vef)) - mu) / KbT))))) tmp = 0.0 if (t_1 <= -1e-214) tmp = t_0; elseif (t_1 <= 0.0) tmp = Float64(Float64(1.0 / Float64(Float64(1.0 - Float64(NdChar / NaChar)) / NaChar)) * 0.5); elseif (t_1 <= 5e-103) tmp = Float64(0.5 * NdChar); else tmp = t_0; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = (NaChar + NdChar) * 0.5; t_1 = (NdChar / (1.0 + exp(((mu - ((Ec - Vef) - EDonor)) / KbT)))) - (NaChar / (-1.0 - exp((((EAccept + (Ev + Vef)) - mu) / KbT)))); tmp = 0.0; if (t_1 <= -1e-214) tmp = t_0; elseif (t_1 <= 0.0) tmp = (1.0 / ((1.0 - (NdChar / NaChar)) / NaChar)) * 0.5; elseif (t_1 <= 5e-103) tmp = 0.5 * NdChar; else tmp = t_0; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(NaChar + NdChar), $MachinePrecision] * 0.5), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(mu - N[(N[(Ec - Vef), $MachinePrecision] - EDonor), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(NaChar / N[(-1.0 - N[Exp[N[(N[(N[(EAccept + N[(Ev + Vef), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$1, -1e-214], t$95$0, If[LessEqual[t$95$1, 0.0], N[(N[(1.0 / N[(N[(1.0 - N[(NdChar / NaChar), $MachinePrecision]), $MachinePrecision] / NaChar), $MachinePrecision]), $MachinePrecision] * 0.5), $MachinePrecision], If[LessEqual[t$95$1, 5e-103], N[(0.5 * NdChar), $MachinePrecision], t$95$0]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(NaChar + NdChar\right) \cdot 0.5\\
t_1 := \frac{NdChar}{1 + e^{\frac{mu - \left(\left(Ec - Vef\right) - EDonor\right)}{KbT}}} - \frac{NaChar}{-1 - e^{\frac{\left(EAccept + \left(Ev + Vef\right)\right) - mu}{KbT}}}\\
\mathbf{if}\;t\_1 \leq -1 \cdot 10^{-214}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;t\_1 \leq 0:\\
\;\;\;\;\frac{1}{\frac{1 - \frac{NdChar}{NaChar}}{NaChar}} \cdot 0.5\\
\mathbf{elif}\;t\_1 \leq 5 \cdot 10^{-103}:\\
\;\;\;\;0.5 \cdot 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))))) < -9.99999999999999913e-215 or 4.99999999999999966e-103 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) Initial program 100.0%
Taylor expanded in KbT around inf
+-commutativeN/A
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6438.7
Applied rewrites38.7%
if -9.99999999999999913e-215 < (+.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
+-commutativeN/A
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f642.5
Applied rewrites2.5%
Applied rewrites3.9%
Taylor expanded in NaChar around inf
Applied rewrites28.4%
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.99999999999999966e-103Initial program 100.0%
Taylor expanded in KbT around inf
+-commutativeN/A
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f649.1
Applied rewrites9.1%
Taylor expanded in NdChar around 0
Applied rewrites13.0%
Taylor expanded in NdChar around inf
Applied rewrites27.2%
Final simplification35.1%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (* (+ NaChar NdChar) 0.5))
(t_1
(-
(/ NdChar (+ 1.0 (exp (/ (- mu (- (- Ec Vef) EDonor)) KbT))))
(/ NaChar (- -1.0 (exp (/ (- (+ EAccept (+ Ev Vef)) mu) KbT)))))))
(if (<= t_1 -4e-228)
t_0
(if (<= t_1 0.0)
(* (/ 1.0 (/ (- NdChar NaChar) (* NdChar NdChar))) 0.5)
(if (<= t_1 5e-103) (* 0.5 NdChar) t_0)))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar + NdChar) * 0.5;
double t_1 = (NdChar / (1.0 + exp(((mu - ((Ec - Vef) - EDonor)) / KbT)))) - (NaChar / (-1.0 - exp((((EAccept + (Ev + Vef)) - mu) / KbT))));
double tmp;
if (t_1 <= -4e-228) {
tmp = t_0;
} else if (t_1 <= 0.0) {
tmp = (1.0 / ((NdChar - NaChar) / (NdChar * NdChar))) * 0.5;
} else if (t_1 <= 5e-103) {
tmp = 0.5 * NdChar;
} else {
tmp = t_0;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = (nachar + ndchar) * 0.5d0
t_1 = (ndchar / (1.0d0 + exp(((mu - ((ec - vef) - edonor)) / kbt)))) - (nachar / ((-1.0d0) - exp((((eaccept + (ev + vef)) - mu) / kbt))))
if (t_1 <= (-4d-228)) then
tmp = t_0
else if (t_1 <= 0.0d0) then
tmp = (1.0d0 / ((ndchar - nachar) / (ndchar * ndchar))) * 0.5d0
else if (t_1 <= 5d-103) then
tmp = 0.5d0 * ndchar
else
tmp = t_0
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar + NdChar) * 0.5;
double t_1 = (NdChar / (1.0 + Math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)))) - (NaChar / (-1.0 - Math.exp((((EAccept + (Ev + Vef)) - mu) / KbT))));
double tmp;
if (t_1 <= -4e-228) {
tmp = t_0;
} else if (t_1 <= 0.0) {
tmp = (1.0 / ((NdChar - NaChar) / (NdChar * NdChar))) * 0.5;
} else if (t_1 <= 5e-103) {
tmp = 0.5 * NdChar;
} else {
tmp = t_0;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = (NaChar + NdChar) * 0.5 t_1 = (NdChar / (1.0 + math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)))) - (NaChar / (-1.0 - math.exp((((EAccept + (Ev + Vef)) - mu) / KbT)))) tmp = 0 if t_1 <= -4e-228: tmp = t_0 elif t_1 <= 0.0: tmp = (1.0 / ((NdChar - NaChar) / (NdChar * NdChar))) * 0.5 elif t_1 <= 5e-103: tmp = 0.5 * NdChar else: tmp = t_0 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(NaChar + NdChar) * 0.5) t_1 = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(mu - Float64(Float64(Ec - Vef) - EDonor)) / KbT)))) - Float64(NaChar / Float64(-1.0 - exp(Float64(Float64(Float64(EAccept + Float64(Ev + Vef)) - mu) / KbT))))) tmp = 0.0 if (t_1 <= -4e-228) tmp = t_0; elseif (t_1 <= 0.0) tmp = Float64(Float64(1.0 / Float64(Float64(NdChar - NaChar) / Float64(NdChar * NdChar))) * 0.5); elseif (t_1 <= 5e-103) tmp = Float64(0.5 * NdChar); else tmp = t_0; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = (NaChar + NdChar) * 0.5; t_1 = (NdChar / (1.0 + exp(((mu - ((Ec - Vef) - EDonor)) / KbT)))) - (NaChar / (-1.0 - exp((((EAccept + (Ev + Vef)) - mu) / KbT)))); tmp = 0.0; if (t_1 <= -4e-228) tmp = t_0; elseif (t_1 <= 0.0) tmp = (1.0 / ((NdChar - NaChar) / (NdChar * NdChar))) * 0.5; elseif (t_1 <= 5e-103) tmp = 0.5 * NdChar; else tmp = t_0; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(NaChar + NdChar), $MachinePrecision] * 0.5), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(mu - N[(N[(Ec - Vef), $MachinePrecision] - EDonor), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(NaChar / N[(-1.0 - N[Exp[N[(N[(N[(EAccept + N[(Ev + Vef), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$1, -4e-228], t$95$0, If[LessEqual[t$95$1, 0.0], N[(N[(1.0 / N[(N[(NdChar - NaChar), $MachinePrecision] / N[(NdChar * NdChar), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * 0.5), $MachinePrecision], If[LessEqual[t$95$1, 5e-103], N[(0.5 * NdChar), $MachinePrecision], t$95$0]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(NaChar + NdChar\right) \cdot 0.5\\
t_1 := \frac{NdChar}{1 + e^{\frac{mu - \left(\left(Ec - Vef\right) - EDonor\right)}{KbT}}} - \frac{NaChar}{-1 - e^{\frac{\left(EAccept + \left(Ev + Vef\right)\right) - mu}{KbT}}}\\
\mathbf{if}\;t\_1 \leq -4 \cdot 10^{-228}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;t\_1 \leq 0:\\
\;\;\;\;\frac{1}{\frac{NdChar - NaChar}{NdChar \cdot NdChar}} \cdot 0.5\\
\mathbf{elif}\;t\_1 \leq 5 \cdot 10^{-103}:\\
\;\;\;\;0.5 \cdot 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))))) < -4.00000000000000013e-228 or 4.99999999999999966e-103 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) Initial program 100.0%
Taylor expanded in KbT around inf
+-commutativeN/A
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6438.0
Applied rewrites38.0%
if -4.00000000000000013e-228 < (+.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
+-commutativeN/A
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f642.6
Applied rewrites2.6%
Applied rewrites4.0%
Taylor expanded in NdChar around inf
Applied rewrites19.9%
Taylor expanded in NdChar around 0
Applied rewrites22.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))))) < 4.99999999999999966e-103Initial program 100.0%
Taylor expanded in KbT around inf
+-commutativeN/A
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f649.1
Applied rewrites9.1%
Taylor expanded in NdChar around 0
Applied rewrites13.0%
Taylor expanded in NdChar around inf
Applied rewrites27.2%
Final simplification33.5%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (* (+ NaChar NdChar) 0.5))
(t_1
(-
(/ NdChar (+ 1.0 (exp (/ (- mu (- (- Ec Vef) EDonor)) KbT))))
(/ NaChar (- -1.0 (exp (/ (- (+ EAccept (+ Ev Vef)) mu) KbT)))))))
(if (<= t_1 -4e-228)
t_0
(if (<= t_1 0.0)
(* (/ 1.0 (/ (- NaChar) (* NdChar NdChar))) 0.5)
(if (<= t_1 5e-103) (* 0.5 NdChar) t_0)))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar + NdChar) * 0.5;
double t_1 = (NdChar / (1.0 + exp(((mu - ((Ec - Vef) - EDonor)) / KbT)))) - (NaChar / (-1.0 - exp((((EAccept + (Ev + Vef)) - mu) / KbT))));
double tmp;
if (t_1 <= -4e-228) {
tmp = t_0;
} else if (t_1 <= 0.0) {
tmp = (1.0 / (-NaChar / (NdChar * NdChar))) * 0.5;
} else if (t_1 <= 5e-103) {
tmp = 0.5 * NdChar;
} else {
tmp = t_0;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = (nachar + ndchar) * 0.5d0
t_1 = (ndchar / (1.0d0 + exp(((mu - ((ec - vef) - edonor)) / kbt)))) - (nachar / ((-1.0d0) - exp((((eaccept + (ev + vef)) - mu) / kbt))))
if (t_1 <= (-4d-228)) then
tmp = t_0
else if (t_1 <= 0.0d0) then
tmp = (1.0d0 / (-nachar / (ndchar * ndchar))) * 0.5d0
else if (t_1 <= 5d-103) then
tmp = 0.5d0 * ndchar
else
tmp = t_0
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar + NdChar) * 0.5;
double t_1 = (NdChar / (1.0 + Math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)))) - (NaChar / (-1.0 - Math.exp((((EAccept + (Ev + Vef)) - mu) / KbT))));
double tmp;
if (t_1 <= -4e-228) {
tmp = t_0;
} else if (t_1 <= 0.0) {
tmp = (1.0 / (-NaChar / (NdChar * NdChar))) * 0.5;
} else if (t_1 <= 5e-103) {
tmp = 0.5 * NdChar;
} else {
tmp = t_0;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = (NaChar + NdChar) * 0.5 t_1 = (NdChar / (1.0 + math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)))) - (NaChar / (-1.0 - math.exp((((EAccept + (Ev + Vef)) - mu) / KbT)))) tmp = 0 if t_1 <= -4e-228: tmp = t_0 elif t_1 <= 0.0: tmp = (1.0 / (-NaChar / (NdChar * NdChar))) * 0.5 elif t_1 <= 5e-103: tmp = 0.5 * NdChar else: tmp = t_0 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(NaChar + NdChar) * 0.5) t_1 = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(mu - Float64(Float64(Ec - Vef) - EDonor)) / KbT)))) - Float64(NaChar / Float64(-1.0 - exp(Float64(Float64(Float64(EAccept + Float64(Ev + Vef)) - mu) / KbT))))) tmp = 0.0 if (t_1 <= -4e-228) tmp = t_0; elseif (t_1 <= 0.0) tmp = Float64(Float64(1.0 / Float64(Float64(-NaChar) / Float64(NdChar * NdChar))) * 0.5); elseif (t_1 <= 5e-103) tmp = Float64(0.5 * NdChar); else tmp = t_0; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = (NaChar + NdChar) * 0.5; t_1 = (NdChar / (1.0 + exp(((mu - ((Ec - Vef) - EDonor)) / KbT)))) - (NaChar / (-1.0 - exp((((EAccept + (Ev + Vef)) - mu) / KbT)))); tmp = 0.0; if (t_1 <= -4e-228) tmp = t_0; elseif (t_1 <= 0.0) tmp = (1.0 / (-NaChar / (NdChar * NdChar))) * 0.5; elseif (t_1 <= 5e-103) tmp = 0.5 * NdChar; else tmp = t_0; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(NaChar + NdChar), $MachinePrecision] * 0.5), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(mu - N[(N[(Ec - Vef), $MachinePrecision] - EDonor), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(NaChar / N[(-1.0 - N[Exp[N[(N[(N[(EAccept + N[(Ev + Vef), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$1, -4e-228], t$95$0, If[LessEqual[t$95$1, 0.0], N[(N[(1.0 / N[((-NaChar) / N[(NdChar * NdChar), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * 0.5), $MachinePrecision], If[LessEqual[t$95$1, 5e-103], N[(0.5 * NdChar), $MachinePrecision], t$95$0]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(NaChar + NdChar\right) \cdot 0.5\\
t_1 := \frac{NdChar}{1 + e^{\frac{mu - \left(\left(Ec - Vef\right) - EDonor\right)}{KbT}}} - \frac{NaChar}{-1 - e^{\frac{\left(EAccept + \left(Ev + Vef\right)\right) - mu}{KbT}}}\\
\mathbf{if}\;t\_1 \leq -4 \cdot 10^{-228}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;t\_1 \leq 0:\\
\;\;\;\;\frac{1}{\frac{-NaChar}{NdChar \cdot NdChar}} \cdot 0.5\\
\mathbf{elif}\;t\_1 \leq 5 \cdot 10^{-103}:\\
\;\;\;\;0.5 \cdot 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))))) < -4.00000000000000013e-228 or 4.99999999999999966e-103 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) Initial program 100.0%
Taylor expanded in KbT around inf
+-commutativeN/A
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6438.0
Applied rewrites38.0%
if -4.00000000000000013e-228 < (+.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
+-commutativeN/A
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f642.6
Applied rewrites2.6%
Applied rewrites4.0%
Taylor expanded in NdChar around inf
Applied rewrites19.9%
Taylor expanded in NdChar around 0
Applied rewrites22.8%
if 0.0 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < 4.99999999999999966e-103Initial program 100.0%
Taylor expanded in KbT around inf
+-commutativeN/A
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f649.1
Applied rewrites9.1%
Taylor expanded in NdChar around 0
Applied rewrites13.0%
Taylor expanded in NdChar around inf
Applied rewrites27.2%
Final simplification33.5%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (* (+ NaChar NdChar) 0.5))
(t_1
(-
(/ NdChar (+ 1.0 (exp (/ (- mu (- (- Ec Vef) EDonor)) KbT))))
(/ NaChar (- -1.0 (exp (/ (- (+ EAccept (+ Ev Vef)) mu) KbT)))))))
(if (<= t_1 -5e-218)
t_0
(if (<= t_1 0.0)
(* (* (/ NaChar KbT) EAccept) -0.25)
(if (<= t_1 5e-103) (* 0.5 NdChar) t_0)))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar + NdChar) * 0.5;
double t_1 = (NdChar / (1.0 + exp(((mu - ((Ec - Vef) - EDonor)) / KbT)))) - (NaChar / (-1.0 - exp((((EAccept + (Ev + Vef)) - mu) / KbT))));
double tmp;
if (t_1 <= -5e-218) {
tmp = t_0;
} else if (t_1 <= 0.0) {
tmp = ((NaChar / KbT) * EAccept) * -0.25;
} else if (t_1 <= 5e-103) {
tmp = 0.5 * NdChar;
} else {
tmp = t_0;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = (nachar + ndchar) * 0.5d0
t_1 = (ndchar / (1.0d0 + exp(((mu - ((ec - vef) - edonor)) / kbt)))) - (nachar / ((-1.0d0) - exp((((eaccept + (ev + vef)) - mu) / kbt))))
if (t_1 <= (-5d-218)) then
tmp = t_0
else if (t_1 <= 0.0d0) then
tmp = ((nachar / kbt) * eaccept) * (-0.25d0)
else if (t_1 <= 5d-103) then
tmp = 0.5d0 * ndchar
else
tmp = t_0
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar + NdChar) * 0.5;
double t_1 = (NdChar / (1.0 + Math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)))) - (NaChar / (-1.0 - Math.exp((((EAccept + (Ev + Vef)) - mu) / KbT))));
double tmp;
if (t_1 <= -5e-218) {
tmp = t_0;
} else if (t_1 <= 0.0) {
tmp = ((NaChar / KbT) * EAccept) * -0.25;
} else if (t_1 <= 5e-103) {
tmp = 0.5 * NdChar;
} else {
tmp = t_0;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = (NaChar + NdChar) * 0.5 t_1 = (NdChar / (1.0 + math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)))) - (NaChar / (-1.0 - math.exp((((EAccept + (Ev + Vef)) - mu) / KbT)))) tmp = 0 if t_1 <= -5e-218: tmp = t_0 elif t_1 <= 0.0: tmp = ((NaChar / KbT) * EAccept) * -0.25 elif t_1 <= 5e-103: tmp = 0.5 * NdChar else: tmp = t_0 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(NaChar + NdChar) * 0.5) t_1 = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(mu - Float64(Float64(Ec - Vef) - EDonor)) / KbT)))) - Float64(NaChar / Float64(-1.0 - exp(Float64(Float64(Float64(EAccept + Float64(Ev + Vef)) - mu) / KbT))))) tmp = 0.0 if (t_1 <= -5e-218) tmp = t_0; elseif (t_1 <= 0.0) tmp = Float64(Float64(Float64(NaChar / KbT) * EAccept) * -0.25); elseif (t_1 <= 5e-103) tmp = Float64(0.5 * NdChar); else tmp = t_0; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = (NaChar + NdChar) * 0.5; t_1 = (NdChar / (1.0 + exp(((mu - ((Ec - Vef) - EDonor)) / KbT)))) - (NaChar / (-1.0 - exp((((EAccept + (Ev + Vef)) - mu) / KbT)))); tmp = 0.0; if (t_1 <= -5e-218) tmp = t_0; elseif (t_1 <= 0.0) tmp = ((NaChar / KbT) * EAccept) * -0.25; elseif (t_1 <= 5e-103) tmp = 0.5 * NdChar; else tmp = t_0; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(NaChar + NdChar), $MachinePrecision] * 0.5), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(mu - N[(N[(Ec - Vef), $MachinePrecision] - EDonor), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(NaChar / N[(-1.0 - N[Exp[N[(N[(N[(EAccept + N[(Ev + Vef), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$1, -5e-218], t$95$0, If[LessEqual[t$95$1, 0.0], N[(N[(N[(NaChar / KbT), $MachinePrecision] * EAccept), $MachinePrecision] * -0.25), $MachinePrecision], If[LessEqual[t$95$1, 5e-103], N[(0.5 * NdChar), $MachinePrecision], t$95$0]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(NaChar + NdChar\right) \cdot 0.5\\
t_1 := \frac{NdChar}{1 + e^{\frac{mu - \left(\left(Ec - Vef\right) - EDonor\right)}{KbT}}} - \frac{NaChar}{-1 - e^{\frac{\left(EAccept + \left(Ev + Vef\right)\right) - mu}{KbT}}}\\
\mathbf{if}\;t\_1 \leq -5 \cdot 10^{-218}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;t\_1 \leq 0:\\
\;\;\;\;\left(\frac{NaChar}{KbT} \cdot EAccept\right) \cdot -0.25\\
\mathbf{elif}\;t\_1 \leq 5 \cdot 10^{-103}:\\
\;\;\;\;0.5 \cdot 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))))) < -5.00000000000000041e-218 or 4.99999999999999966e-103 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) Initial program 100.0%
Taylor expanded in KbT around inf
+-commutativeN/A
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6438.5
Applied rewrites38.5%
if -5.00000000000000041e-218 < (+.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
associate-+r+N/A
distribute-lft-outN/A
lower-fma.f64N/A
Applied rewrites1.5%
Taylor expanded in EAccept around inf
Applied rewrites14.4%
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.99999999999999966e-103Initial program 100.0%
Taylor expanded in KbT around inf
+-commutativeN/A
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f649.1
Applied rewrites9.1%
Taylor expanded in NdChar around 0
Applied rewrites13.0%
Taylor expanded in NdChar around inf
Applied rewrites27.2%
Final simplification31.7%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (exp (/ (- mu (- (- Ec Vef) EDonor)) KbT)))
(t_1
(-
(/ NdChar (+ 1.0 t_0))
(/ NaChar (- -1.0 (exp (/ (- (+ EAccept (+ Ev Vef)) mu) KbT))))))
(t_2 (/ NdChar (- -1.0 t_0))))
(if (<= t_1 -2e-250)
(- (/ NaChar (+ 1.0 (exp (/ EAccept KbT)))) t_2)
(if (<= t_1 5e-241)
(/ NdChar (+ 1.0 (exp (/ (- (+ (+ mu Vef) EDonor) Ec) KbT))))
(- (/ NaChar (+ 1.0 (exp (/ Ev KbT)))) t_2)))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = exp(((mu - ((Ec - Vef) - EDonor)) / KbT));
double t_1 = (NdChar / (1.0 + t_0)) - (NaChar / (-1.0 - exp((((EAccept + (Ev + Vef)) - mu) / KbT))));
double t_2 = NdChar / (-1.0 - t_0);
double tmp;
if (t_1 <= -2e-250) {
tmp = (NaChar / (1.0 + exp((EAccept / KbT)))) - t_2;
} else if (t_1 <= 5e-241) {
tmp = NdChar / (1.0 + exp(((((mu + Vef) + EDonor) - Ec) / KbT)));
} else {
tmp = (NaChar / (1.0 + exp((Ev / KbT)))) - t_2;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: t_2
real(8) :: tmp
t_0 = exp(((mu - ((ec - vef) - edonor)) / kbt))
t_1 = (ndchar / (1.0d0 + t_0)) - (nachar / ((-1.0d0) - exp((((eaccept + (ev + vef)) - mu) / kbt))))
t_2 = ndchar / ((-1.0d0) - t_0)
if (t_1 <= (-2d-250)) then
tmp = (nachar / (1.0d0 + exp((eaccept / kbt)))) - t_2
else if (t_1 <= 5d-241) then
tmp = ndchar / (1.0d0 + exp(((((mu + vef) + edonor) - ec) / kbt)))
else
tmp = (nachar / (1.0d0 + exp((ev / kbt)))) - t_2
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = Math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT));
double t_1 = (NdChar / (1.0 + t_0)) - (NaChar / (-1.0 - Math.exp((((EAccept + (Ev + Vef)) - mu) / KbT))));
double t_2 = NdChar / (-1.0 - t_0);
double tmp;
if (t_1 <= -2e-250) {
tmp = (NaChar / (1.0 + Math.exp((EAccept / KbT)))) - t_2;
} else if (t_1 <= 5e-241) {
tmp = NdChar / (1.0 + Math.exp(((((mu + Vef) + EDonor) - Ec) / KbT)));
} else {
tmp = (NaChar / (1.0 + Math.exp((Ev / KbT)))) - t_2;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)) t_1 = (NdChar / (1.0 + t_0)) - (NaChar / (-1.0 - math.exp((((EAccept + (Ev + Vef)) - mu) / KbT)))) t_2 = NdChar / (-1.0 - t_0) tmp = 0 if t_1 <= -2e-250: tmp = (NaChar / (1.0 + math.exp((EAccept / KbT)))) - t_2 elif t_1 <= 5e-241: tmp = NdChar / (1.0 + math.exp(((((mu + Vef) + EDonor) - Ec) / KbT))) else: tmp = (NaChar / (1.0 + math.exp((Ev / KbT)))) - t_2 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = exp(Float64(Float64(mu - Float64(Float64(Ec - Vef) - EDonor)) / KbT)) t_1 = Float64(Float64(NdChar / Float64(1.0 + t_0)) - Float64(NaChar / Float64(-1.0 - exp(Float64(Float64(Float64(EAccept + Float64(Ev + Vef)) - mu) / KbT))))) t_2 = Float64(NdChar / Float64(-1.0 - t_0)) tmp = 0.0 if (t_1 <= -2e-250) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT)))) - t_2); elseif (t_1 <= 5e-241) tmp = Float64(NdChar / Float64(1.0 + exp(Float64(Float64(Float64(Float64(mu + Vef) + EDonor) - Ec) / KbT)))); else tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT)))) - t_2); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = exp(((mu - ((Ec - Vef) - EDonor)) / KbT)); t_1 = (NdChar / (1.0 + t_0)) - (NaChar / (-1.0 - exp((((EAccept + (Ev + Vef)) - mu) / KbT)))); t_2 = NdChar / (-1.0 - t_0); tmp = 0.0; if (t_1 <= -2e-250) tmp = (NaChar / (1.0 + exp((EAccept / KbT)))) - t_2; elseif (t_1 <= 5e-241) tmp = NdChar / (1.0 + exp(((((mu + Vef) + EDonor) - Ec) / KbT))); else tmp = (NaChar / (1.0 + exp((Ev / KbT)))) - t_2; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[Exp[N[(N[(mu - N[(N[(Ec - Vef), $MachinePrecision] - EDonor), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[(N[(NdChar / N[(1.0 + t$95$0), $MachinePrecision]), $MachinePrecision] - N[(NaChar / N[(-1.0 - N[Exp[N[(N[(N[(EAccept + N[(Ev + Vef), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(NdChar / N[(-1.0 - t$95$0), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$1, -2e-250], N[(N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - t$95$2), $MachinePrecision], If[LessEqual[t$95$1, 5e-241], N[(NdChar / N[(1.0 + N[Exp[N[(N[(N[(N[(mu + Vef), $MachinePrecision] + EDonor), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - t$95$2), $MachinePrecision]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := e^{\frac{mu - \left(\left(Ec - Vef\right) - EDonor\right)}{KbT}}\\
t_1 := \frac{NdChar}{1 + t\_0} - \frac{NaChar}{-1 - e^{\frac{\left(EAccept + \left(Ev + Vef\right)\right) - mu}{KbT}}}\\
t_2 := \frac{NdChar}{-1 - t\_0}\\
\mathbf{if}\;t\_1 \leq -2 \cdot 10^{-250}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}} - t\_2\\
\mathbf{elif}\;t\_1 \leq 5 \cdot 10^{-241}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{\left(\left(mu + Vef\right) + EDonor\right) - Ec}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Ev}{KbT}}} - t\_2\\
\end{array}
\end{array}
if (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < -2.0000000000000001e-250Initial program 100.0%
Taylor expanded in EAccept around inf
lower-/.f6481.4
Applied rewrites81.4%
if -2.0000000000000001e-250 < (+.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-241Initial program 100.0%
Taylor expanded in KbT around inf
+-commutativeN/A
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f643.2
Applied rewrites3.2%
Taylor expanded in NdChar around 0
Applied rewrites4.7%
Taylor expanded in NdChar around inf
lower-/.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
lower--.f64N/A
+-commutativeN/A
lower-+.f64N/A
+-commutativeN/A
lower-+.f6495.5
Applied rewrites95.5%
if 4.9999999999999998e-241 < (+.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 Ev around inf
lower-/.f6471.5
Applied rewrites71.5%
Final simplification80.9%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (+ (+ mu Vef) EDonor))
(t_1 (exp (/ (- (+ EAccept (+ Ev Vef)) mu) KbT)))
(t_2
(-
(/ NdChar (+ 1.0 (exp (/ (- mu (- (- Ec Vef) EDonor)) KbT))))
(/ NaChar (- -1.0 t_1)))))
(if (<= t_2 -4e-228)
(-
(/ NdChar (+ 1.0 (exp (/ (- (+ mu Vef) Ec) KbT))))
(/ NaChar (- -1.0 (exp (/ Vef KbT)))))
(if (<= t_2 5e-70)
(/ NdChar (+ 1.0 (exp (/ (- t_0 Ec) KbT))))
(+
(/ NdChar (fma (/ (- Ec t_0) KbT) -1.0 2.0))
(/ NaChar (+ 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 = (mu + Vef) + EDonor;
double t_1 = exp((((EAccept + (Ev + Vef)) - mu) / KbT));
double t_2 = (NdChar / (1.0 + exp(((mu - ((Ec - Vef) - EDonor)) / KbT)))) - (NaChar / (-1.0 - t_1));
double tmp;
if (t_2 <= -4e-228) {
tmp = (NdChar / (1.0 + exp((((mu + Vef) - Ec) / KbT)))) - (NaChar / (-1.0 - exp((Vef / KbT))));
} else if (t_2 <= 5e-70) {
tmp = NdChar / (1.0 + exp(((t_0 - Ec) / KbT)));
} else {
tmp = (NdChar / fma(((Ec - t_0) / KbT), -1.0, 2.0)) + (NaChar / (1.0 + t_1));
}
return tmp;
}
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(mu + Vef) + EDonor) t_1 = exp(Float64(Float64(Float64(EAccept + Float64(Ev + Vef)) - mu) / KbT)) t_2 = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(mu - Float64(Float64(Ec - Vef) - EDonor)) / KbT)))) - Float64(NaChar / Float64(-1.0 - t_1))) tmp = 0.0 if (t_2 <= -4e-228) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(Float64(mu + Vef) - Ec) / KbT)))) - Float64(NaChar / Float64(-1.0 - exp(Float64(Vef / KbT))))); elseif (t_2 <= 5e-70) tmp = Float64(NdChar / Float64(1.0 + exp(Float64(Float64(t_0 - Ec) / KbT)))); else tmp = Float64(Float64(NdChar / fma(Float64(Float64(Ec - t_0) / KbT), -1.0, 2.0)) + Float64(NaChar / Float64(1.0 + t_1))); end return tmp end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(mu + Vef), $MachinePrecision] + EDonor), $MachinePrecision]}, Block[{t$95$1 = N[Exp[N[(N[(N[(EAccept + N[(Ev + Vef), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$2 = N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(mu - N[(N[(Ec - Vef), $MachinePrecision] - EDonor), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(NaChar / N[(-1.0 - t$95$1), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$2, -4e-228], N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(N[(mu + Vef), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(NaChar / N[(-1.0 - N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$2, 5e-70], N[(NdChar / N[(1.0 + N[Exp[N[(N[(t$95$0 - Ec), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar / N[(N[(N[(Ec - t$95$0), $MachinePrecision] / KbT), $MachinePrecision] * -1.0 + 2.0), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + t$95$1), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(mu + Vef\right) + EDonor\\
t_1 := e^{\frac{\left(EAccept + \left(Ev + Vef\right)\right) - mu}{KbT}}\\
t_2 := \frac{NdChar}{1 + e^{\frac{mu - \left(\left(Ec - Vef\right) - EDonor\right)}{KbT}}} - \frac{NaChar}{-1 - t\_1}\\
\mathbf{if}\;t\_2 \leq -4 \cdot 10^{-228}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{\left(mu + Vef\right) - Ec}{KbT}}} - \frac{NaChar}{-1 - e^{\frac{Vef}{KbT}}}\\
\mathbf{elif}\;t\_2 \leq 5 \cdot 10^{-70}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{t\_0 - Ec}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{\mathsf{fma}\left(\frac{Ec - t\_0}{KbT}, -1, 2\right)} + \frac{NaChar}{1 + t\_1}\\
\end{array}
\end{array}
if (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < -4.00000000000000013e-228Initial program 100.0%
Taylor expanded in Vef around inf
lower-/.f6486.3
Applied rewrites86.3%
Taylor expanded in EDonor around 0
lower--.f64N/A
+-commutativeN/A
lower-+.f6478.7
Applied rewrites78.7%
if -4.00000000000000013e-228 < (+.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 KbT around inf
+-commutativeN/A
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f646.6
Applied rewrites6.6%
Taylor expanded in NdChar around 0
Applied rewrites7.5%
Taylor expanded in NdChar around inf
lower-/.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
lower--.f64N/A
+-commutativeN/A
lower-+.f64N/A
+-commutativeN/A
lower-+.f6484.2
Applied rewrites84.2%
if 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%
lift-exp.f64N/A
lift-/.f64N/A
lift-neg.f64N/A
distribute-frac-negN/A
neg-mul-1N/A
exp-prodN/A
lower-pow.f64N/A
lower-exp.f64N/A
lower-/.f6499.9
Applied rewrites99.9%
Taylor expanded in KbT around inf
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
lower-/.f64N/A
lower--.f64N/A
+-commutativeN/A
lower-+.f64N/A
+-commutativeN/A
lower-+.f6463.3
Applied rewrites63.3%
Final simplification76.1%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0
(-
(/ NaChar (+ 1.0 (exp (/ Vef KbT))))
(/ NdChar (- -1.0 (exp (/ (- mu (- (- Ec Vef) EDonor)) KbT)))))))
(if (<= Vef -4.5e+123)
t_0
(if (<= Vef 1.86e+71)
(-
(/ NaChar (+ 1.0 (exp (/ (- (+ EAccept Ev) mu) KbT))))
(/ NdChar (- -1.0 (exp (/ (- (+ mu EDonor) Ec) KbT)))))
t_0))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar / (1.0 + exp((Vef / KbT)))) - (NdChar / (-1.0 - exp(((mu - ((Ec - Vef) - EDonor)) / KbT))));
double tmp;
if (Vef <= -4.5e+123) {
tmp = t_0;
} else if (Vef <= 1.86e+71) {
tmp = (NaChar / (1.0 + exp((((EAccept + Ev) - mu) / KbT)))) - (NdChar / (-1.0 - exp((((mu + EDonor) - 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) :: tmp
t_0 = (nachar / (1.0d0 + exp((vef / kbt)))) - (ndchar / ((-1.0d0) - exp(((mu - ((ec - vef) - edonor)) / kbt))))
if (vef <= (-4.5d+123)) then
tmp = t_0
else if (vef <= 1.86d+71) then
tmp = (nachar / (1.0d0 + exp((((eaccept + ev) - mu) / kbt)))) - (ndchar / ((-1.0d0) - exp((((mu + edonor) - ec) / kbt))))
else
tmp = t_0
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar / (1.0 + Math.exp((Vef / KbT)))) - (NdChar / (-1.0 - Math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT))));
double tmp;
if (Vef <= -4.5e+123) {
tmp = t_0;
} else if (Vef <= 1.86e+71) {
tmp = (NaChar / (1.0 + Math.exp((((EAccept + Ev) - mu) / KbT)))) - (NdChar / (-1.0 - Math.exp((((mu + EDonor) - Ec) / KbT))));
} else {
tmp = t_0;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = (NaChar / (1.0 + math.exp((Vef / KbT)))) - (NdChar / (-1.0 - math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)))) tmp = 0 if Vef <= -4.5e+123: tmp = t_0 elif Vef <= 1.86e+71: tmp = (NaChar / (1.0 + math.exp((((EAccept + Ev) - mu) / KbT)))) - (NdChar / (-1.0 - math.exp((((mu + EDonor) - Ec) / KbT)))) else: tmp = t_0 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Vef / KbT)))) - Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(mu - Float64(Float64(Ec - Vef) - EDonor)) / KbT))))) tmp = 0.0 if (Vef <= -4.5e+123) tmp = t_0; elseif (Vef <= 1.86e+71) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(EAccept + Ev) - mu) / KbT)))) - Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(Float64(mu + EDonor) - Ec) / KbT))))); else tmp = t_0; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = (NaChar / (1.0 + exp((Vef / KbT)))) - (NdChar / (-1.0 - exp(((mu - ((Ec - Vef) - EDonor)) / KbT)))); tmp = 0.0; if (Vef <= -4.5e+123) tmp = t_0; elseif (Vef <= 1.86e+71) tmp = (NaChar / (1.0 + exp((((EAccept + Ev) - mu) / KbT)))) - (NdChar / (-1.0 - exp((((mu + EDonor) - Ec) / KbT)))); else tmp = t_0; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(NaChar / N[(1.0 + N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(NdChar / N[(-1.0 - N[Exp[N[(N[(mu - N[(N[(Ec - Vef), $MachinePrecision] - EDonor), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[Vef, -4.5e+123], t$95$0, If[LessEqual[Vef, 1.86e+71], N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(N[(EAccept + Ev), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(NdChar / N[(-1.0 - N[Exp[N[(N[(N[(mu + EDonor), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$0]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{Vef}{KbT}}} - \frac{NdChar}{-1 - e^{\frac{mu - \left(\left(Ec - Vef\right) - EDonor\right)}{KbT}}}\\
\mathbf{if}\;Vef \leq -4.5 \cdot 10^{+123}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;Vef \leq 1.86 \cdot 10^{+71}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{\left(EAccept + Ev\right) - mu}{KbT}}} - \frac{NdChar}{-1 - e^{\frac{\left(mu + EDonor\right) - Ec}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if Vef < -4.49999999999999983e123 or 1.86000000000000006e71 < Vef Initial program 100.0%
Taylor expanded in Vef around inf
lower-/.f6488.1
Applied rewrites88.1%
if -4.49999999999999983e123 < Vef < 1.86000000000000006e71Initial program 100.0%
Taylor expanded in Vef around 0
+-commutativeN/A
lower-+.f64N/A
lower-/.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
lower--.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower-/.f64N/A
+-commutativeN/A
lower-+.f64N/A
Applied rewrites97.1%
Final simplification94.0%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NdChar (- -1.0 (exp (/ (- mu (- (- Ec Vef) EDonor)) KbT))))))
(if (<= Ev -3.5e+115)
(- (/ NaChar (+ 1.0 (exp (/ Ev KbT)))) t_0)
(if (<= Ev 8.3e-277)
(- (/ NaChar (+ 1.0 (exp (/ Vef KbT)))) t_0)
(- (/ NaChar (+ 1.0 (exp (/ EAccept 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 = NdChar / (-1.0 - exp(((mu - ((Ec - Vef) - EDonor)) / KbT)));
double tmp;
if (Ev <= -3.5e+115) {
tmp = (NaChar / (1.0 + exp((Ev / KbT)))) - t_0;
} else if (Ev <= 8.3e-277) {
tmp = (NaChar / (1.0 + exp((Vef / KbT)))) - t_0;
} else {
tmp = (NaChar / (1.0 + exp((EAccept / KbT)))) - 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 / ((-1.0d0) - exp(((mu - ((ec - vef) - edonor)) / kbt)))
if (ev <= (-3.5d+115)) then
tmp = (nachar / (1.0d0 + exp((ev / kbt)))) - t_0
else if (ev <= 8.3d-277) then
tmp = (nachar / (1.0d0 + exp((vef / kbt)))) - t_0
else
tmp = (nachar / (1.0d0 + exp((eaccept / kbt)))) - 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 / (-1.0 - Math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)));
double tmp;
if (Ev <= -3.5e+115) {
tmp = (NaChar / (1.0 + Math.exp((Ev / KbT)))) - t_0;
} else if (Ev <= 8.3e-277) {
tmp = (NaChar / (1.0 + Math.exp((Vef / KbT)))) - t_0;
} else {
tmp = (NaChar / (1.0 + Math.exp((EAccept / KbT)))) - t_0;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NdChar / (-1.0 - math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT))) tmp = 0 if Ev <= -3.5e+115: tmp = (NaChar / (1.0 + math.exp((Ev / KbT)))) - t_0 elif Ev <= 8.3e-277: tmp = (NaChar / (1.0 + math.exp((Vef / KbT)))) - t_0 else: tmp = (NaChar / (1.0 + math.exp((EAccept / KbT)))) - t_0 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(mu - Float64(Float64(Ec - Vef) - EDonor)) / KbT)))) tmp = 0.0 if (Ev <= -3.5e+115) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT)))) - t_0); elseif (Ev <= 8.3e-277) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Vef / KbT)))) - t_0); else tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT)))) - t_0); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NdChar / (-1.0 - exp(((mu - ((Ec - Vef) - EDonor)) / KbT))); tmp = 0.0; if (Ev <= -3.5e+115) tmp = (NaChar / (1.0 + exp((Ev / KbT)))) - t_0; elseif (Ev <= 8.3e-277) tmp = (NaChar / (1.0 + exp((Vef / KbT)))) - t_0; else tmp = (NaChar / (1.0 + exp((EAccept / KbT)))) - t_0; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NdChar / N[(-1.0 - N[Exp[N[(N[(mu - N[(N[(Ec - Vef), $MachinePrecision] - EDonor), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[Ev, -3.5e+115], N[(N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - t$95$0), $MachinePrecision], If[LessEqual[Ev, 8.3e-277], N[(N[(NaChar / N[(1.0 + N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - t$95$0), $MachinePrecision], N[(N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - t$95$0), $MachinePrecision]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{-1 - e^{\frac{mu - \left(\left(Ec - Vef\right) - EDonor\right)}{KbT}}}\\
\mathbf{if}\;Ev \leq -3.5 \cdot 10^{+115}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Ev}{KbT}}} - t\_0\\
\mathbf{elif}\;Ev \leq 8.3 \cdot 10^{-277}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Vef}{KbT}}} - t\_0\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}} - t\_0\\
\end{array}
\end{array}
if Ev < -3.50000000000000005e115Initial program 100.0%
Taylor expanded in Ev around inf
lower-/.f6494.6
Applied rewrites94.6%
if -3.50000000000000005e115 < Ev < 8.29999999999999978e-277Initial program 100.0%
Taylor expanded in Vef around inf
lower-/.f6476.2
Applied rewrites76.2%
if 8.29999999999999978e-277 < Ev Initial program 100.0%
Taylor expanded in EAccept around inf
lower-/.f6468.7
Applied rewrites68.7%
Final simplification75.6%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (- (/ NdChar (+ 1.0 (exp (/ (- mu (- (- Ec Vef) EDonor)) KbT)))) (/ NaChar (- -1.0 (exp (/ (- (+ EAccept (+ Ev Vef)) 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(((mu - ((Ec - Vef) - EDonor)) / KbT)))) - (NaChar / (-1.0 - exp((((EAccept + (Ev + Vef)) - 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(((mu - ((ec - vef) - edonor)) / kbt)))) - (nachar / ((-1.0d0) - exp((((eaccept + (ev + vef)) - 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(((mu - ((Ec - Vef) - EDonor)) / KbT)))) - (NaChar / (-1.0 - Math.exp((((EAccept + (Ev + Vef)) - mu) / KbT))));
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return (NdChar / (1.0 + math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)))) - (NaChar / (-1.0 - math.exp((((EAccept + (Ev + Vef)) - mu) / KbT))))
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(mu - Float64(Float64(Ec - Vef) - EDonor)) / KbT)))) - Float64(NaChar / Float64(-1.0 - exp(Float64(Float64(Float64(EAccept + Float64(Ev + Vef)) - mu) / KbT))))) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = (NdChar / (1.0 + exp(((mu - ((Ec - Vef) - EDonor)) / KbT)))) - (NaChar / (-1.0 - exp((((EAccept + (Ev + Vef)) - mu) / KbT)))); end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(mu - N[(N[(Ec - Vef), $MachinePrecision] - EDonor), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(NaChar / N[(-1.0 - N[Exp[N[(N[(N[(EAccept + N[(Ev + Vef), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{NdChar}{1 + e^{\frac{mu - \left(\left(Ec - Vef\right) - EDonor\right)}{KbT}}} - \frac{NaChar}{-1 - e^{\frac{\left(EAccept + \left(Ev + Vef\right)\right) - mu}{KbT}}}
\end{array}
Initial program 100.0%
Final simplification100.0%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (+ (+ mu Vef) EDonor))
(t_1 (/ NdChar (+ 1.0 (exp (/ (- t_0 Ec) KbT))))))
(if (<= NdChar -8e-23)
t_1
(if (<= NdChar 9.2e-154)
(+
(/ NdChar (fma (/ (- Ec t_0) KbT) -1.0 2.0))
(/ NaChar (+ 1.0 (exp (/ (- (+ EAccept (+ Ev 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 = (mu + Vef) + EDonor;
double t_1 = NdChar / (1.0 + exp(((t_0 - Ec) / KbT)));
double tmp;
if (NdChar <= -8e-23) {
tmp = t_1;
} else if (NdChar <= 9.2e-154) {
tmp = (NdChar / fma(((Ec - t_0) / KbT), -1.0, 2.0)) + (NaChar / (1.0 + exp((((EAccept + (Ev + Vef)) - mu) / KbT))));
} else {
tmp = t_1;
}
return tmp;
}
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(mu + Vef) + EDonor) t_1 = Float64(NdChar / Float64(1.0 + exp(Float64(Float64(t_0 - Ec) / KbT)))) tmp = 0.0 if (NdChar <= -8e-23) tmp = t_1; elseif (NdChar <= 9.2e-154) tmp = Float64(Float64(NdChar / fma(Float64(Float64(Ec - t_0) / KbT), -1.0, 2.0)) + Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(EAccept + Float64(Ev + 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[(N[(mu + Vef), $MachinePrecision] + EDonor), $MachinePrecision]}, Block[{t$95$1 = N[(NdChar / N[(1.0 + N[Exp[N[(N[(t$95$0 - Ec), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NdChar, -8e-23], t$95$1, If[LessEqual[NdChar, 9.2e-154], N[(N[(NdChar / N[(N[(N[(Ec - t$95$0), $MachinePrecision] / KbT), $MachinePrecision] * -1.0 + 2.0), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Exp[N[(N[(N[(EAccept + N[(Ev + Vef), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$1]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(mu + Vef\right) + EDonor\\
t_1 := \frac{NdChar}{1 + e^{\frac{t\_0 - Ec}{KbT}}}\\
\mathbf{if}\;NdChar \leq -8 \cdot 10^{-23}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;NdChar \leq 9.2 \cdot 10^{-154}:\\
\;\;\;\;\frac{NdChar}{\mathsf{fma}\left(\frac{Ec - t\_0}{KbT}, -1, 2\right)} + \frac{NaChar}{1 + e^{\frac{\left(EAccept + \left(Ev + Vef\right)\right) - mu}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;t\_1\\
\end{array}
\end{array}
if NdChar < -7.99999999999999968e-23 or 9.1999999999999999e-154 < NdChar Initial program 100.0%
Taylor expanded in KbT around inf
+-commutativeN/A
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6424.5
Applied rewrites24.5%
Taylor expanded in NdChar around 0
Applied rewrites12.6%
Taylor expanded in NdChar around inf
lower-/.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
lower--.f64N/A
+-commutativeN/A
lower-+.f64N/A
+-commutativeN/A
lower-+.f6471.1
Applied rewrites71.1%
if -7.99999999999999968e-23 < NdChar < 9.1999999999999999e-154Initial program 100.0%
lift-exp.f64N/A
lift-/.f64N/A
lift-neg.f64N/A
distribute-frac-negN/A
neg-mul-1N/A
exp-prodN/A
lower-pow.f64N/A
lower-exp.f64N/A
lower-/.f64100.0
Applied rewrites100.0%
Taylor expanded in KbT around inf
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
lower-/.f64N/A
lower--.f64N/A
+-commutativeN/A
lower-+.f64N/A
+-commutativeN/A
lower-+.f6482.3
Applied rewrites82.3%
Final simplification74.7%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NaChar (+ 1.0 (exp (/ (- (+ EAccept (+ Ev Vef)) mu) KbT))))))
(if (<= NaChar -1.7e-97)
t_0
(if (<= NaChar 5.8e-65)
(/ NdChar (+ 1.0 (exp (/ (- (+ (+ mu Vef) EDonor) Ec) KbT))))
t_0))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NaChar / (1.0 + exp((((EAccept + (Ev + Vef)) - mu) / KbT)));
double tmp;
if (NaChar <= -1.7e-97) {
tmp = t_0;
} else if (NaChar <= 5.8e-65) {
tmp = NdChar / (1.0 + exp(((((mu + Vef) + EDonor) - 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) :: tmp
t_0 = nachar / (1.0d0 + exp((((eaccept + (ev + vef)) - mu) / kbt)))
if (nachar <= (-1.7d-97)) then
tmp = t_0
else if (nachar <= 5.8d-65) then
tmp = ndchar / (1.0d0 + exp(((((mu + vef) + edonor) - ec) / kbt)))
else
tmp = t_0
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NaChar / (1.0 + Math.exp((((EAccept + (Ev + Vef)) - mu) / KbT)));
double tmp;
if (NaChar <= -1.7e-97) {
tmp = t_0;
} else if (NaChar <= 5.8e-65) {
tmp = NdChar / (1.0 + Math.exp(((((mu + Vef) + EDonor) - Ec) / KbT)));
} else {
tmp = t_0;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NaChar / (1.0 + math.exp((((EAccept + (Ev + Vef)) - mu) / KbT))) tmp = 0 if NaChar <= -1.7e-97: tmp = t_0 elif NaChar <= 5.8e-65: tmp = NdChar / (1.0 + math.exp(((((mu + Vef) + EDonor) - Ec) / KbT))) else: tmp = t_0 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(EAccept + Float64(Ev + Vef)) - mu) / KbT)))) tmp = 0.0 if (NaChar <= -1.7e-97) tmp = t_0; elseif (NaChar <= 5.8e-65) tmp = Float64(NdChar / Float64(1.0 + exp(Float64(Float64(Float64(Float64(mu + Vef) + EDonor) - Ec) / KbT)))); else tmp = t_0; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NaChar / (1.0 + exp((((EAccept + (Ev + Vef)) - mu) / KbT))); tmp = 0.0; if (NaChar <= -1.7e-97) tmp = t_0; elseif (NaChar <= 5.8e-65) tmp = NdChar / (1.0 + exp(((((mu + Vef) + EDonor) - 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[(NaChar / N[(1.0 + N[Exp[N[(N[(N[(EAccept + N[(Ev + Vef), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -1.7e-97], t$95$0, If[LessEqual[NaChar, 5.8e-65], N[(NdChar / N[(1.0 + N[Exp[N[(N[(N[(N[(mu + Vef), $MachinePrecision] + EDonor), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$0]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{\left(EAccept + \left(Ev + Vef\right)\right) - mu}{KbT}}}\\
\mathbf{if}\;NaChar \leq -1.7 \cdot 10^{-97}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;NaChar \leq 5.8 \cdot 10^{-65}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{\left(\left(mu + Vef\right) + EDonor\right) - Ec}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if NaChar < -1.6999999999999999e-97 or 5.7999999999999996e-65 < NaChar Initial program 100.0%
Taylor expanded in NdChar around 0
lower-/.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
lower--.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower-+.f6470.0
Applied rewrites70.0%
if -1.6999999999999999e-97 < NaChar < 5.7999999999999996e-65Initial program 100.0%
Taylor expanded in KbT around inf
+-commutativeN/A
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6431.5
Applied rewrites31.5%
Taylor expanded in NdChar around 0
Applied rewrites12.1%
Taylor expanded in NdChar around inf
lower-/.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
lower--.f64N/A
+-commutativeN/A
lower-+.f64N/A
+-commutativeN/A
lower-+.f6477.0
Applied rewrites77.0%
Final simplification72.8%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ (- (+ EAccept (+ Ev Vef)) mu) KbT))
(t_1 (* (+ NaChar NdChar) 0.5)))
(if (<= KbT -2.8e+204)
(fma -0.25 (* (- (/ NdChar KbT) (/ NaChar KbT)) mu) t_1)
(if (<= KbT 2.6e+225)
(/ NaChar (+ 1.0 (exp t_0)))
(fma
-0.25
(fma NaChar t_0 (* (/ (- (+ (+ mu Vef) EDonor) Ec) KbT) NdChar))
t_1)))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = ((EAccept + (Ev + Vef)) - mu) / KbT;
double t_1 = (NaChar + NdChar) * 0.5;
double tmp;
if (KbT <= -2.8e+204) {
tmp = fma(-0.25, (((NdChar / KbT) - (NaChar / KbT)) * mu), t_1);
} else if (KbT <= 2.6e+225) {
tmp = NaChar / (1.0 + exp(t_0));
} else {
tmp = fma(-0.25, fma(NaChar, t_0, (((((mu + Vef) + EDonor) - Ec) / KbT) * NdChar)), t_1);
}
return tmp;
}
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(Float64(EAccept + Float64(Ev + Vef)) - mu) / KbT) t_1 = Float64(Float64(NaChar + NdChar) * 0.5) tmp = 0.0 if (KbT <= -2.8e+204) tmp = fma(-0.25, Float64(Float64(Float64(NdChar / KbT) - Float64(NaChar / KbT)) * mu), t_1); elseif (KbT <= 2.6e+225) tmp = Float64(NaChar / Float64(1.0 + exp(t_0))); else tmp = fma(-0.25, fma(NaChar, t_0, Float64(Float64(Float64(Float64(Float64(mu + Vef) + EDonor) - Ec) / KbT) * NdChar)), t_1); end return tmp end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(N[(EAccept + N[(Ev + Vef), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NaChar + NdChar), $MachinePrecision] * 0.5), $MachinePrecision]}, If[LessEqual[KbT, -2.8e+204], N[(-0.25 * N[(N[(N[(NdChar / KbT), $MachinePrecision] - N[(NaChar / KbT), $MachinePrecision]), $MachinePrecision] * mu), $MachinePrecision] + t$95$1), $MachinePrecision], If[LessEqual[KbT, 2.6e+225], N[(NaChar / N[(1.0 + N[Exp[t$95$0], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(-0.25 * N[(NaChar * t$95$0 + N[(N[(N[(N[(N[(mu + Vef), $MachinePrecision] + EDonor), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision] * NdChar), $MachinePrecision]), $MachinePrecision] + t$95$1), $MachinePrecision]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{\left(EAccept + \left(Ev + Vef\right)\right) - mu}{KbT}\\
t_1 := \left(NaChar + NdChar\right) \cdot 0.5\\
\mathbf{if}\;KbT \leq -2.8 \cdot 10^{+204}:\\
\;\;\;\;\mathsf{fma}\left(-0.25, \left(\frac{NdChar}{KbT} - \frac{NaChar}{KbT}\right) \cdot mu, t\_1\right)\\
\mathbf{elif}\;KbT \leq 2.6 \cdot 10^{+225}:\\
\;\;\;\;\frac{NaChar}{1 + e^{t\_0}}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(-0.25, \mathsf{fma}\left(NaChar, t\_0, \frac{\left(\left(mu + Vef\right) + EDonor\right) - Ec}{KbT} \cdot NdChar\right), t\_1\right)\\
\end{array}
\end{array}
if KbT < -2.80000000000000025e204Initial program 99.9%
Taylor expanded in KbT around -inf
associate-+r+N/A
distribute-lft-outN/A
lower-fma.f64N/A
Applied rewrites76.7%
Taylor expanded in EAccept around inf
Applied rewrites76.2%
Taylor expanded in mu around inf
Applied rewrites80.2%
if -2.80000000000000025e204 < KbT < 2.60000000000000004e225Initial program 100.0%
Taylor expanded in NdChar around 0
lower-/.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
lower--.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower-+.f6463.0
Applied rewrites63.0%
if 2.60000000000000004e225 < KbT Initial program 99.8%
Taylor expanded in KbT around -inf
associate-+r+N/A
distribute-lft-outN/A
lower-fma.f64N/A
Applied rewrites83.9%
Final simplification66.1%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (if (<= NaChar -1.65e-97) (* 0.5 NaChar) (if (<= NaChar 2.7e+91) (* 0.5 NdChar) (* 0.5 NaChar))))
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.65e-97) {
tmp = 0.5 * NaChar;
} else if (NaChar <= 2.7e+91) {
tmp = 0.5 * NdChar;
} else {
tmp = 0.5 * NaChar;
}
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.65d-97)) then
tmp = 0.5d0 * nachar
else if (nachar <= 2.7d+91) then
tmp = 0.5d0 * ndchar
else
tmp = 0.5d0 * nachar
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.65e-97) {
tmp = 0.5 * NaChar;
} else if (NaChar <= 2.7e+91) {
tmp = 0.5 * NdChar;
} else {
tmp = 0.5 * NaChar;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if NaChar <= -1.65e-97: tmp = 0.5 * NaChar elif NaChar <= 2.7e+91: tmp = 0.5 * NdChar else: tmp = 0.5 * NaChar return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (NaChar <= -1.65e-97) tmp = Float64(0.5 * NaChar); elseif (NaChar <= 2.7e+91) tmp = Float64(0.5 * NdChar); else tmp = Float64(0.5 * NaChar); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (NaChar <= -1.65e-97) tmp = 0.5 * NaChar; elseif (NaChar <= 2.7e+91) tmp = 0.5 * NdChar; else tmp = 0.5 * NaChar; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[NaChar, -1.65e-97], N[(0.5 * NaChar), $MachinePrecision], If[LessEqual[NaChar, 2.7e+91], N[(0.5 * NdChar), $MachinePrecision], N[(0.5 * NaChar), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NaChar \leq -1.65 \cdot 10^{-97}:\\
\;\;\;\;0.5 \cdot NaChar\\
\mathbf{elif}\;NaChar \leq 2.7 \cdot 10^{+91}:\\
\;\;\;\;0.5 \cdot NdChar\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot NaChar\\
\end{array}
\end{array}
if NaChar < -1.6500000000000001e-97 or 2.7e91 < NaChar Initial program 100.0%
Taylor expanded in KbT around inf
+-commutativeN/A
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6425.9
Applied rewrites25.9%
Taylor expanded in NdChar around 0
Applied rewrites22.3%
if -1.6500000000000001e-97 < NaChar < 2.7e91Initial program 100.0%
Taylor expanded in KbT around inf
+-commutativeN/A
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6428.1
Applied rewrites28.1%
Taylor expanded in NdChar around 0
Applied rewrites12.8%
Taylor expanded in NdChar around inf
Applied rewrites26.0%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (* (+ NaChar NdChar) 0.5))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NaChar + NdChar) * 0.5;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
code = (nachar + ndchar) * 0.5d0
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NaChar + NdChar) * 0.5;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return (NaChar + NdChar) * 0.5
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(Float64(NaChar + NdChar) * 0.5) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = (NaChar + NdChar) * 0.5; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(N[(NaChar + NdChar), $MachinePrecision] * 0.5), $MachinePrecision]
\begin{array}{l}
\\
\left(NaChar + NdChar\right) \cdot 0.5
\end{array}
Initial program 100.0%
Taylor expanded in KbT around inf
+-commutativeN/A
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6427.1
Applied rewrites27.1%
Final simplification27.1%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (* 0.5 NaChar))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return 0.5 * NaChar;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
code = 0.5d0 * nachar
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return 0.5 * NaChar;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return 0.5 * NaChar
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(0.5 * NaChar) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.5 * NaChar; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(0.5 * NaChar), $MachinePrecision]
\begin{array}{l}
\\
0.5 \cdot NaChar
\end{array}
Initial program 100.0%
Taylor expanded in KbT around inf
+-commutativeN/A
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6427.1
Applied rewrites27.1%
Taylor expanded in NdChar around 0
Applied rewrites17.1%
herbie shell --seed 2024331
(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))))))