
(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 24 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 (exp (/ (- mu (- (- Ec Vef) EDonor)) 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 - exp(((mu - ((Ec - Vef) - EDonor)) / 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(((mu - ((ec - vef) - edonor)) / 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.exp(((mu - ((Ec - Vef) - EDonor)) / 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.exp(((mu - ((Ec - Vef) - EDonor)) / 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(Float64(Float64(mu - Float64(Float64(Ec - Vef) - EDonor)) / 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(((mu - ((Ec - Vef) - EDonor)) / 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[Exp[N[(N[(mu - N[(N[(Ec - Vef), $MachinePrecision] - EDonor), $MachinePrecision]), $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 - e^{\frac{mu - \left(\left(Ec - Vef\right) - EDonor\right)}{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 (/ NdChar (- (exp (/ (- (+ mu Vef) Ec) KbT)) -1.0)))
(t_1 (/ NaChar (+ 1.0 (exp (/ (- (+ EAccept (+ Ev Vef)) mu) KbT)))))
(t_2
(-
t_1
(/ NdChar (- -1.0 (exp (/ (- mu (- (- Ec Vef) EDonor)) KbT)))))))
(if (<= t_2 -5e-190)
(- t_0 (/ NaChar (- -1.0 (exp (/ EAccept KbT)))))
(if (<= t_2 5e-220) t_1 (- t_0 (/ NaChar (- -1.0 (exp (/ Ev KbT)))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (exp((((mu + Vef) - Ec) / KbT)) - -1.0);
double t_1 = NaChar / (1.0 + exp((((EAccept + (Ev + Vef)) - mu) / KbT)));
double t_2 = t_1 - (NdChar / (-1.0 - exp(((mu - ((Ec - Vef) - EDonor)) / KbT))));
double tmp;
if (t_2 <= -5e-190) {
tmp = t_0 - (NaChar / (-1.0 - exp((EAccept / KbT))));
} else if (t_2 <= 5e-220) {
tmp = t_1;
} else {
tmp = t_0 - (NaChar / (-1.0 - exp((Ev / KbT))));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: t_2
real(8) :: tmp
t_0 = ndchar / (exp((((mu + vef) - ec) / kbt)) - (-1.0d0))
t_1 = nachar / (1.0d0 + exp((((eaccept + (ev + vef)) - mu) / kbt)))
t_2 = t_1 - (ndchar / ((-1.0d0) - exp(((mu - ((ec - vef) - edonor)) / kbt))))
if (t_2 <= (-5d-190)) then
tmp = t_0 - (nachar / ((-1.0d0) - exp((eaccept / kbt))))
else if (t_2 <= 5d-220) then
tmp = t_1
else
tmp = t_0 - (nachar / ((-1.0d0) - exp((ev / kbt))))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (Math.exp((((mu + Vef) - Ec) / KbT)) - -1.0);
double t_1 = NaChar / (1.0 + Math.exp((((EAccept + (Ev + Vef)) - mu) / KbT)));
double t_2 = t_1 - (NdChar / (-1.0 - Math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT))));
double tmp;
if (t_2 <= -5e-190) {
tmp = t_0 - (NaChar / (-1.0 - Math.exp((EAccept / KbT))));
} else if (t_2 <= 5e-220) {
tmp = t_1;
} else {
tmp = t_0 - (NaChar / (-1.0 - Math.exp((Ev / KbT))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NdChar / (math.exp((((mu + Vef) - Ec) / KbT)) - -1.0) t_1 = NaChar / (1.0 + math.exp((((EAccept + (Ev + Vef)) - mu) / KbT))) t_2 = t_1 - (NdChar / (-1.0 - math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)))) tmp = 0 if t_2 <= -5e-190: tmp = t_0 - (NaChar / (-1.0 - math.exp((EAccept / KbT)))) elif t_2 <= 5e-220: tmp = t_1 else: tmp = t_0 - (NaChar / (-1.0 - math.exp((Ev / KbT)))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NdChar / Float64(exp(Float64(Float64(Float64(mu + Vef) - Ec) / KbT)) - -1.0)) t_1 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(EAccept + Float64(Ev + Vef)) - mu) / KbT)))) t_2 = Float64(t_1 - Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(mu - Float64(Float64(Ec - Vef) - EDonor)) / KbT))))) tmp = 0.0 if (t_2 <= -5e-190) tmp = Float64(t_0 - Float64(NaChar / Float64(-1.0 - exp(Float64(EAccept / KbT))))); elseif (t_2 <= 5e-220) tmp = t_1; else tmp = Float64(t_0 - Float64(NaChar / Float64(-1.0 - exp(Float64(Ev / KbT))))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NdChar / (exp((((mu + Vef) - Ec) / KbT)) - -1.0); t_1 = NaChar / (1.0 + exp((((EAccept + (Ev + Vef)) - mu) / KbT))); t_2 = t_1 - (NdChar / (-1.0 - exp(((mu - ((Ec - Vef) - EDonor)) / KbT)))); tmp = 0.0; if (t_2 <= -5e-190) tmp = t_0 - (NaChar / (-1.0 - exp((EAccept / KbT)))); elseif (t_2 <= 5e-220) tmp = t_1; else tmp = t_0 - (NaChar / (-1.0 - exp((Ev / KbT)))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NdChar / N[(N[Exp[N[(N[(N[(mu + Vef), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] - -1.0), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(NaChar / N[(1.0 + N[Exp[N[(N[(N[(EAccept + N[(Ev + Vef), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(t$95$1 - 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[t$95$2, -5e-190], N[(t$95$0 - N[(NaChar / N[(-1.0 - N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$2, 5e-220], t$95$1, N[(t$95$0 - N[(NaChar / N[(-1.0 - N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{e^{\frac{\left(mu + Vef\right) - Ec}{KbT}} - -1}\\
t_1 := \frac{NaChar}{1 + e^{\frac{\left(EAccept + \left(Ev + Vef\right)\right) - mu}{KbT}}}\\
t_2 := t\_1 - \frac{NdChar}{-1 - e^{\frac{mu - \left(\left(Ec - Vef\right) - EDonor\right)}{KbT}}}\\
\mathbf{if}\;t\_2 \leq -5 \cdot 10^{-190}:\\
\;\;\;\;t\_0 - \frac{NaChar}{-1 - e^{\frac{EAccept}{KbT}}}\\
\mathbf{elif}\;t\_2 \leq 5 \cdot 10^{-220}:\\
\;\;\;\;t\_1\\
\mathbf{else}:\\
\;\;\;\;t\_0 - \frac{NaChar}{-1 - e^{\frac{Ev}{KbT}}}\\
\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.00000000000000034e-190Initial program 100.0%
Taylor expanded in EAccept around inf
lower-/.f6478.0
Applied rewrites78.0%
Taylor expanded in EDonor around 0
lower--.f64N/A
+-commutativeN/A
lower-+.f6472.0
Applied rewrites72.0%
if -5.00000000000000034e-190 < (+.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.0000000000000002e-220Initial 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-+.f6490.2
Applied rewrites90.2%
if 5.0000000000000002e-220 < (+.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 Ev around inf
lower-/.f6477.6
Applied rewrites77.6%
Taylor expanded in EDonor around 0
lower--.f64N/A
lower-+.f6471.6
Applied rewrites71.6%
Final simplification76.5%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0
(-
(/ NdChar (- (exp (/ (- (+ mu Vef) Ec) KbT)) -1.0))
(/ NaChar (- -1.0 (exp (/ Ev KbT))))))
(t_1 (/ NaChar (+ 1.0 (exp (/ (- (+ EAccept (+ Ev Vef)) mu) KbT)))))
(t_2
(-
t_1
(/ NdChar (- -1.0 (exp (/ (- mu (- (- Ec Vef) EDonor)) KbT)))))))
(if (<= t_2 -2e-154) t_0 (if (<= t_2 5e-220) t_1 t_0))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NdChar / (exp((((mu + Vef) - Ec) / KbT)) - -1.0)) - (NaChar / (-1.0 - exp((Ev / KbT))));
double t_1 = NaChar / (1.0 + exp((((EAccept + (Ev + Vef)) - mu) / KbT)));
double t_2 = t_1 - (NdChar / (-1.0 - exp(((mu - ((Ec - Vef) - EDonor)) / KbT))));
double tmp;
if (t_2 <= -2e-154) {
tmp = t_0;
} else if (t_2 <= 5e-220) {
tmp = t_1;
} 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) :: t_2
real(8) :: tmp
t_0 = (ndchar / (exp((((mu + vef) - ec) / kbt)) - (-1.0d0))) - (nachar / ((-1.0d0) - exp((ev / kbt))))
t_1 = nachar / (1.0d0 + exp((((eaccept + (ev + vef)) - mu) / kbt)))
t_2 = t_1 - (ndchar / ((-1.0d0) - exp(((mu - ((ec - vef) - edonor)) / kbt))))
if (t_2 <= (-2d-154)) then
tmp = t_0
else if (t_2 <= 5d-220) then
tmp = t_1
else
tmp = t_0
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NdChar / (Math.exp((((mu + Vef) - Ec) / KbT)) - -1.0)) - (NaChar / (-1.0 - Math.exp((Ev / KbT))));
double t_1 = NaChar / (1.0 + Math.exp((((EAccept + (Ev + Vef)) - mu) / KbT)));
double t_2 = t_1 - (NdChar / (-1.0 - Math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT))));
double tmp;
if (t_2 <= -2e-154) {
tmp = t_0;
} else if (t_2 <= 5e-220) {
tmp = t_1;
} else {
tmp = t_0;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = (NdChar / (math.exp((((mu + Vef) - Ec) / KbT)) - -1.0)) - (NaChar / (-1.0 - math.exp((Ev / KbT)))) t_1 = NaChar / (1.0 + math.exp((((EAccept + (Ev + Vef)) - mu) / KbT))) t_2 = t_1 - (NdChar / (-1.0 - math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)))) tmp = 0 if t_2 <= -2e-154: tmp = t_0 elif t_2 <= 5e-220: tmp = t_1 else: tmp = t_0 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(NdChar / Float64(exp(Float64(Float64(Float64(mu + Vef) - Ec) / KbT)) - -1.0)) - Float64(NaChar / Float64(-1.0 - exp(Float64(Ev / KbT))))) t_1 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(EAccept + Float64(Ev + Vef)) - mu) / KbT)))) t_2 = Float64(t_1 - Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(mu - Float64(Float64(Ec - Vef) - EDonor)) / KbT))))) tmp = 0.0 if (t_2 <= -2e-154) tmp = t_0; elseif (t_2 <= 5e-220) tmp = t_1; else tmp = t_0; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = (NdChar / (exp((((mu + Vef) - Ec) / KbT)) - -1.0)) - (NaChar / (-1.0 - exp((Ev / KbT)))); t_1 = NaChar / (1.0 + exp((((EAccept + (Ev + Vef)) - mu) / KbT))); t_2 = t_1 - (NdChar / (-1.0 - exp(((mu - ((Ec - Vef) - EDonor)) / KbT)))); tmp = 0.0; if (t_2 <= -2e-154) tmp = t_0; elseif (t_2 <= 5e-220) tmp = t_1; 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[(NdChar / N[(N[Exp[N[(N[(N[(mu + Vef), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] - -1.0), $MachinePrecision]), $MachinePrecision] - N[(NaChar / N[(-1.0 - N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(NaChar / N[(1.0 + N[Exp[N[(N[(N[(EAccept + N[(Ev + Vef), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(t$95$1 - 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[t$95$2, -2e-154], t$95$0, If[LessEqual[t$95$2, 5e-220], t$95$1, t$95$0]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{e^{\frac{\left(mu + Vef\right) - Ec}{KbT}} - -1} - \frac{NaChar}{-1 - e^{\frac{Ev}{KbT}}}\\
t_1 := \frac{NaChar}{1 + e^{\frac{\left(EAccept + \left(Ev + Vef\right)\right) - mu}{KbT}}}\\
t_2 := t\_1 - \frac{NdChar}{-1 - e^{\frac{mu - \left(\left(Ec - Vef\right) - EDonor\right)}{KbT}}}\\
\mathbf{if}\;t\_2 \leq -2 \cdot 10^{-154}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;t\_2 \leq 5 \cdot 10^{-220}:\\
\;\;\;\;t\_1\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < -1.9999999999999999e-154 or 5.0000000000000002e-220 < (+.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 Ev around inf
lower-/.f6480.6
Applied rewrites80.6%
Taylor expanded in EDonor around 0
lower--.f64N/A
lower-+.f6474.4
Applied rewrites74.4%
if -1.9999999999999999e-154 < (+.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.0000000000000002e-220Initial 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-+.f6487.0
Applied rewrites87.0%
Final simplification77.9%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (* (+ NaChar NdChar) 0.5))
(t_1
(-
(/ NaChar (+ 1.0 (exp (/ (- (+ EAccept (+ Ev Vef)) mu) KbT))))
(/ NdChar (- -1.0 (exp (/ (- mu (- (- Ec Vef) EDonor)) KbT)))))))
(if (<= t_1 -2e-181)
t_0
(if (<= t_1 5e-285)
(/
NaChar
(- (+ (+ (/ Ev KbT) (/ Vef KbT)) (+ 2.0 (/ EAccept KbT))) (/ mu KbT)))
t_0))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar + NdChar) * 0.5;
double t_1 = (NaChar / (1.0 + exp((((EAccept + (Ev + Vef)) - mu) / KbT)))) - (NdChar / (-1.0 - exp(((mu - ((Ec - Vef) - EDonor)) / KbT))));
double tmp;
if (t_1 <= -2e-181) {
tmp = t_0;
} else if (t_1 <= 5e-285) {
tmp = NaChar / ((((Ev / KbT) + (Vef / KbT)) + (2.0 + (EAccept / KbT))) - (mu / KbT));
} else {
tmp = t_0;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = (nachar + ndchar) * 0.5d0
t_1 = (nachar / (1.0d0 + exp((((eaccept + (ev + vef)) - mu) / kbt)))) - (ndchar / ((-1.0d0) - exp(((mu - ((ec - vef) - edonor)) / kbt))))
if (t_1 <= (-2d-181)) then
tmp = t_0
else if (t_1 <= 5d-285) then
tmp = nachar / ((((ev / kbt) + (vef / kbt)) + (2.0d0 + (eaccept / kbt))) - (mu / kbt))
else
tmp = t_0
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar + NdChar) * 0.5;
double t_1 = (NaChar / (1.0 + Math.exp((((EAccept + (Ev + Vef)) - mu) / KbT)))) - (NdChar / (-1.0 - Math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT))));
double tmp;
if (t_1 <= -2e-181) {
tmp = t_0;
} else if (t_1 <= 5e-285) {
tmp = NaChar / ((((Ev / KbT) + (Vef / KbT)) + (2.0 + (EAccept / KbT))) - (mu / KbT));
} else {
tmp = t_0;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = (NaChar + NdChar) * 0.5 t_1 = (NaChar / (1.0 + math.exp((((EAccept + (Ev + Vef)) - mu) / KbT)))) - (NdChar / (-1.0 - math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)))) tmp = 0 if t_1 <= -2e-181: tmp = t_0 elif t_1 <= 5e-285: tmp = NaChar / ((((Ev / KbT) + (Vef / KbT)) + (2.0 + (EAccept / KbT))) - (mu / KbT)) else: tmp = t_0 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(NaChar + NdChar) * 0.5) t_1 = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(EAccept + Float64(Ev + Vef)) - mu) / KbT)))) - Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(mu - Float64(Float64(Ec - Vef) - EDonor)) / KbT))))) tmp = 0.0 if (t_1 <= -2e-181) tmp = t_0; elseif (t_1 <= 5e-285) tmp = Float64(NaChar / Float64(Float64(Float64(Float64(Ev / KbT) + Float64(Vef / KbT)) + Float64(2.0 + Float64(EAccept / KbT))) - Float64(mu / KbT))); else tmp = t_0; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = (NaChar + NdChar) * 0.5; t_1 = (NaChar / (1.0 + exp((((EAccept + (Ev + Vef)) - mu) / KbT)))) - (NdChar / (-1.0 - exp(((mu - ((Ec - Vef) - EDonor)) / KbT)))); tmp = 0.0; if (t_1 <= -2e-181) tmp = t_0; elseif (t_1 <= 5e-285) tmp = NaChar / ((((Ev / KbT) + (Vef / KbT)) + (2.0 + (EAccept / KbT))) - (mu / KbT)); else tmp = t_0; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(NaChar + NdChar), $MachinePrecision] * 0.5), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NaChar / N[(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[Exp[N[(N[(mu - N[(N[(Ec - Vef), $MachinePrecision] - EDonor), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$1, -2e-181], t$95$0, If[LessEqual[t$95$1, 5e-285], N[(NaChar / N[(N[(N[(N[(Ev / KbT), $MachinePrecision] + N[(Vef / KbT), $MachinePrecision]), $MachinePrecision] + N[(2.0 + N[(EAccept / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$0]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(NaChar + NdChar\right) \cdot 0.5\\
t_1 := \frac{NaChar}{1 + e^{\frac{\left(EAccept + \left(Ev + Vef\right)\right) - mu}{KbT}}} - \frac{NdChar}{-1 - e^{\frac{mu - \left(\left(Ec - Vef\right) - EDonor\right)}{KbT}}}\\
\mathbf{if}\;t\_1 \leq -2 \cdot 10^{-181}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;t\_1 \leq 5 \cdot 10^{-285}:\\
\;\;\;\;\frac{NaChar}{\left(\left(\frac{Ev}{KbT} + \frac{Vef}{KbT}\right) + \left(2 + \frac{EAccept}{KbT}\right)\right) - \frac{mu}{KbT}}\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < -2.00000000000000009e-181 or 5.00000000000000018e-285 < (+.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-+.f6433.4
Applied rewrites33.4%
if -2.00000000000000009e-181 < (+.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.00000000000000018e-285Initial 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-+.f6490.7
Applied rewrites90.7%
Taylor expanded in KbT around inf
Applied rewrites41.3%
Final simplification35.2%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (* (+ NaChar NdChar) 0.5))
(t_1
(-
(/ NaChar (+ 1.0 (exp (/ (- (+ EAccept (+ Ev Vef)) mu) KbT))))
(/ NdChar (- -1.0 (exp (/ (- mu (- (- Ec Vef) EDonor)) KbT)))))))
(if (<= t_1 -2e-201)
t_0
(if (<= t_1 2e-221)
(*
(/
1.0
(/
(fma (/ (- (/ (* NdChar NdChar) NaChar) NdChar) NaChar) -1.0 -1.0)
(- NaChar)))
0.5)
t_0))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar + NdChar) * 0.5;
double t_1 = (NaChar / (1.0 + exp((((EAccept + (Ev + Vef)) - mu) / KbT)))) - (NdChar / (-1.0 - exp(((mu - ((Ec - Vef) - EDonor)) / KbT))));
double tmp;
if (t_1 <= -2e-201) {
tmp = t_0;
} else if (t_1 <= 2e-221) {
tmp = (1.0 / (fma(((((NdChar * NdChar) / NaChar) - NdChar) / NaChar), -1.0, -1.0) / -NaChar)) * 0.5;
} else {
tmp = t_0;
}
return tmp;
}
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(NaChar + NdChar) * 0.5) t_1 = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(EAccept + Float64(Ev + Vef)) - mu) / KbT)))) - Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(mu - Float64(Float64(Ec - Vef) - EDonor)) / KbT))))) tmp = 0.0 if (t_1 <= -2e-201) tmp = t_0; elseif (t_1 <= 2e-221) tmp = Float64(Float64(1.0 / Float64(fma(Float64(Float64(Float64(Float64(NdChar * NdChar) / NaChar) - NdChar) / NaChar), -1.0, -1.0) / Float64(-NaChar))) * 0.5); else tmp = t_0; end return tmp end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(NaChar + NdChar), $MachinePrecision] * 0.5), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NaChar / N[(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[Exp[N[(N[(mu - N[(N[(Ec - Vef), $MachinePrecision] - EDonor), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$1, -2e-201], t$95$0, If[LessEqual[t$95$1, 2e-221], N[(N[(1.0 / N[(N[(N[(N[(N[(N[(NdChar * NdChar), $MachinePrecision] / NaChar), $MachinePrecision] - NdChar), $MachinePrecision] / NaChar), $MachinePrecision] * -1.0 + -1.0), $MachinePrecision] / (-NaChar)), $MachinePrecision]), $MachinePrecision] * 0.5), $MachinePrecision], t$95$0]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(NaChar + NdChar\right) \cdot 0.5\\
t_1 := \frac{NaChar}{1 + e^{\frac{\left(EAccept + \left(Ev + Vef\right)\right) - mu}{KbT}}} - \frac{NdChar}{-1 - e^{\frac{mu - \left(\left(Ec - Vef\right) - EDonor\right)}{KbT}}}\\
\mathbf{if}\;t\_1 \leq -2 \cdot 10^{-201}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;t\_1 \leq 2 \cdot 10^{-221}:\\
\;\;\;\;\frac{1}{\frac{\mathsf{fma}\left(\frac{\frac{NdChar \cdot NdChar}{NaChar} - NdChar}{NaChar}, -1, -1\right)}{-NaChar}} \cdot 0.5\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < -1.99999999999999989e-201 or 2.00000000000000003e-221 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) Initial program 100.0%
Taylor expanded in KbT around inf
+-commutativeN/A
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6433.9
Applied rewrites33.9%
if -1.99999999999999989e-201 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < 2.00000000000000003e-221Initial program 100.0%
Taylor expanded in KbT around inf
+-commutativeN/A
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f643.5
Applied rewrites3.5%
Applied rewrites5.9%
Taylor expanded in NaChar around -inf
Applied rewrites36.7%
Final simplification34.6%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (* (+ NaChar NdChar) 0.5))
(t_1
(-
(/ NaChar (+ 1.0 (exp (/ (- (+ EAccept (+ Ev Vef)) mu) KbT))))
(/ NdChar (- -1.0 (exp (/ (- mu (- (- Ec Vef) EDonor)) KbT)))))))
(if (<= t_1 -2e-231)
t_0
(if (<= t_1 2e-170)
(*
(/
1.0
(/
(fma (/ (- (/ (* NaChar NaChar) NdChar) NaChar) NdChar) -1.0 -1.0)
(- NdChar)))
0.5)
t_0))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar + NdChar) * 0.5;
double t_1 = (NaChar / (1.0 + exp((((EAccept + (Ev + Vef)) - mu) / KbT)))) - (NdChar / (-1.0 - exp(((mu - ((Ec - Vef) - EDonor)) / KbT))));
double tmp;
if (t_1 <= -2e-231) {
tmp = t_0;
} else if (t_1 <= 2e-170) {
tmp = (1.0 / (fma(((((NaChar * NaChar) / NdChar) - NaChar) / NdChar), -1.0, -1.0) / -NdChar)) * 0.5;
} else {
tmp = t_0;
}
return tmp;
}
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(NaChar + NdChar) * 0.5) t_1 = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(EAccept + Float64(Ev + Vef)) - mu) / KbT)))) - Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(mu - Float64(Float64(Ec - Vef) - EDonor)) / KbT))))) tmp = 0.0 if (t_1 <= -2e-231) tmp = t_0; elseif (t_1 <= 2e-170) tmp = Float64(Float64(1.0 / Float64(fma(Float64(Float64(Float64(Float64(NaChar * NaChar) / NdChar) - NaChar) / NdChar), -1.0, -1.0) / Float64(-NdChar))) * 0.5); else tmp = t_0; end return tmp end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(NaChar + NdChar), $MachinePrecision] * 0.5), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NaChar / N[(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[Exp[N[(N[(mu - N[(N[(Ec - Vef), $MachinePrecision] - EDonor), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$1, -2e-231], t$95$0, If[LessEqual[t$95$1, 2e-170], N[(N[(1.0 / N[(N[(N[(N[(N[(N[(NaChar * NaChar), $MachinePrecision] / NdChar), $MachinePrecision] - NaChar), $MachinePrecision] / NdChar), $MachinePrecision] * -1.0 + -1.0), $MachinePrecision] / (-NdChar)), $MachinePrecision]), $MachinePrecision] * 0.5), $MachinePrecision], t$95$0]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(NaChar + NdChar\right) \cdot 0.5\\
t_1 := \frac{NaChar}{1 + e^{\frac{\left(EAccept + \left(Ev + Vef\right)\right) - mu}{KbT}}} - \frac{NdChar}{-1 - e^{\frac{mu - \left(\left(Ec - Vef\right) - EDonor\right)}{KbT}}}\\
\mathbf{if}\;t\_1 \leq -2 \cdot 10^{-231}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;t\_1 \leq 2 \cdot 10^{-170}:\\
\;\;\;\;\frac{1}{\frac{\mathsf{fma}\left(\frac{\frac{NaChar \cdot NaChar}{NdChar} - NaChar}{NdChar}, -1, -1\right)}{-NdChar}} \cdot 0.5\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < -2e-231 or 1.99999999999999997e-170 < (+.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-+.f6434.0
Applied rewrites34.0%
if -2e-231 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < 1.99999999999999997e-170Initial program 100.0%
Taylor expanded in KbT around inf
+-commutativeN/A
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f644.0
Applied rewrites4.0%
Applied rewrites5.8%
Taylor expanded in NdChar around -inf
Applied rewrites29.1%
Final simplification32.8%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (* (+ NaChar NdChar) 0.5))
(t_1
(-
(/ NaChar (+ 1.0 (exp (/ (- (+ EAccept (+ Ev Vef)) mu) KbT))))
(/ NdChar (- -1.0 (exp (/ (- mu (- (- Ec Vef) EDonor)) KbT)))))))
(if (<= t_1 -2e-231)
t_0
(if (<= t_1 4e-244)
(* (/ 1.0 (/ (- NdChar NaChar) (* NdChar NdChar))) 0.5)
t_0))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar + NdChar) * 0.5;
double t_1 = (NaChar / (1.0 + exp((((EAccept + (Ev + Vef)) - mu) / KbT)))) - (NdChar / (-1.0 - exp(((mu - ((Ec - Vef) - EDonor)) / KbT))));
double tmp;
if (t_1 <= -2e-231) {
tmp = t_0;
} else if (t_1 <= 4e-244) {
tmp = (1.0 / ((NdChar - NaChar) / (NdChar * NdChar))) * 0.5;
} else {
tmp = t_0;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = (nachar + ndchar) * 0.5d0
t_1 = (nachar / (1.0d0 + exp((((eaccept + (ev + vef)) - mu) / kbt)))) - (ndchar / ((-1.0d0) - exp(((mu - ((ec - vef) - edonor)) / kbt))))
if (t_1 <= (-2d-231)) then
tmp = t_0
else if (t_1 <= 4d-244) then
tmp = (1.0d0 / ((ndchar - nachar) / (ndchar * ndchar))) * 0.5d0
else
tmp = t_0
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar + NdChar) * 0.5;
double t_1 = (NaChar / (1.0 + Math.exp((((EAccept + (Ev + Vef)) - mu) / KbT)))) - (NdChar / (-1.0 - Math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT))));
double tmp;
if (t_1 <= -2e-231) {
tmp = t_0;
} else if (t_1 <= 4e-244) {
tmp = (1.0 / ((NdChar - NaChar) / (NdChar * NdChar))) * 0.5;
} else {
tmp = t_0;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = (NaChar + NdChar) * 0.5 t_1 = (NaChar / (1.0 + math.exp((((EAccept + (Ev + Vef)) - mu) / KbT)))) - (NdChar / (-1.0 - math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)))) tmp = 0 if t_1 <= -2e-231: tmp = t_0 elif t_1 <= 4e-244: tmp = (1.0 / ((NdChar - NaChar) / (NdChar * NdChar))) * 0.5 else: tmp = t_0 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(NaChar + NdChar) * 0.5) t_1 = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(EAccept + Float64(Ev + Vef)) - mu) / KbT)))) - Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(mu - Float64(Float64(Ec - Vef) - EDonor)) / KbT))))) tmp = 0.0 if (t_1 <= -2e-231) tmp = t_0; elseif (t_1 <= 4e-244) tmp = Float64(Float64(1.0 / Float64(Float64(NdChar - NaChar) / Float64(NdChar * NdChar))) * 0.5); else tmp = t_0; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = (NaChar + NdChar) * 0.5; t_1 = (NaChar / (1.0 + exp((((EAccept + (Ev + Vef)) - mu) / KbT)))) - (NdChar / (-1.0 - exp(((mu - ((Ec - Vef) - EDonor)) / KbT)))); tmp = 0.0; if (t_1 <= -2e-231) tmp = t_0; elseif (t_1 <= 4e-244) tmp = (1.0 / ((NdChar - NaChar) / (NdChar * NdChar))) * 0.5; else tmp = t_0; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(NaChar + NdChar), $MachinePrecision] * 0.5), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NaChar / N[(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[Exp[N[(N[(mu - N[(N[(Ec - Vef), $MachinePrecision] - EDonor), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$1, -2e-231], t$95$0, If[LessEqual[t$95$1, 4e-244], N[(N[(1.0 / N[(N[(NdChar - NaChar), $MachinePrecision] / N[(NdChar * NdChar), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * 0.5), $MachinePrecision], t$95$0]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(NaChar + NdChar\right) \cdot 0.5\\
t_1 := \frac{NaChar}{1 + e^{\frac{\left(EAccept + \left(Ev + Vef\right)\right) - mu}{KbT}}} - \frac{NdChar}{-1 - e^{\frac{mu - \left(\left(Ec - Vef\right) - EDonor\right)}{KbT}}}\\
\mathbf{if}\;t\_1 \leq -2 \cdot 10^{-231}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;t\_1 \leq 4 \cdot 10^{-244}:\\
\;\;\;\;\frac{1}{\frac{NdChar - NaChar}{NdChar \cdot NdChar}} \cdot 0.5\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < -2e-231 or 3.9999999999999997e-244 < (+.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-+.f6432.9
Applied rewrites32.9%
if -2e-231 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < 3.9999999999999997e-244Initial program 100.0%
Taylor expanded in KbT around inf
+-commutativeN/A
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f643.0
Applied rewrites3.0%
Applied rewrites6.2%
Taylor expanded in NdChar around inf
Applied rewrites25.0%
Final simplification31.2%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (* (+ NaChar NdChar) 0.5))
(t_1
(-
(/ NaChar (+ 1.0 (exp (/ (- (+ EAccept (+ Ev Vef)) mu) KbT))))
(/ NdChar (- -1.0 (exp (/ (- mu (- (- Ec Vef) EDonor)) KbT)))))))
(if (<= t_1 -2e-257)
t_0
(if (<= t_1 1e-287)
(/ (* -0.5 (* NaChar NaChar)) (- NdChar NaChar))
t_0))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar + NdChar) * 0.5;
double t_1 = (NaChar / (1.0 + exp((((EAccept + (Ev + Vef)) - mu) / KbT)))) - (NdChar / (-1.0 - exp(((mu - ((Ec - Vef) - EDonor)) / KbT))));
double tmp;
if (t_1 <= -2e-257) {
tmp = t_0;
} else if (t_1 <= 1e-287) {
tmp = (-0.5 * (NaChar * NaChar)) / (NdChar - NaChar);
} else {
tmp = t_0;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = (nachar + ndchar) * 0.5d0
t_1 = (nachar / (1.0d0 + exp((((eaccept + (ev + vef)) - mu) / kbt)))) - (ndchar / ((-1.0d0) - exp(((mu - ((ec - vef) - edonor)) / kbt))))
if (t_1 <= (-2d-257)) then
tmp = t_0
else if (t_1 <= 1d-287) then
tmp = ((-0.5d0) * (nachar * nachar)) / (ndchar - nachar)
else
tmp = t_0
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar + NdChar) * 0.5;
double t_1 = (NaChar / (1.0 + Math.exp((((EAccept + (Ev + Vef)) - mu) / KbT)))) - (NdChar / (-1.0 - Math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT))));
double tmp;
if (t_1 <= -2e-257) {
tmp = t_0;
} else if (t_1 <= 1e-287) {
tmp = (-0.5 * (NaChar * NaChar)) / (NdChar - NaChar);
} else {
tmp = t_0;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = (NaChar + NdChar) * 0.5 t_1 = (NaChar / (1.0 + math.exp((((EAccept + (Ev + Vef)) - mu) / KbT)))) - (NdChar / (-1.0 - math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)))) tmp = 0 if t_1 <= -2e-257: tmp = t_0 elif t_1 <= 1e-287: tmp = (-0.5 * (NaChar * NaChar)) / (NdChar - NaChar) else: tmp = t_0 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(NaChar + NdChar) * 0.5) t_1 = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(EAccept + Float64(Ev + Vef)) - mu) / KbT)))) - Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(mu - Float64(Float64(Ec - Vef) - EDonor)) / KbT))))) tmp = 0.0 if (t_1 <= -2e-257) tmp = t_0; elseif (t_1 <= 1e-287) tmp = Float64(Float64(-0.5 * Float64(NaChar * NaChar)) / Float64(NdChar - NaChar)); else tmp = t_0; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = (NaChar + NdChar) * 0.5; t_1 = (NaChar / (1.0 + exp((((EAccept + (Ev + Vef)) - mu) / KbT)))) - (NdChar / (-1.0 - exp(((mu - ((Ec - Vef) - EDonor)) / KbT)))); tmp = 0.0; if (t_1 <= -2e-257) tmp = t_0; elseif (t_1 <= 1e-287) tmp = (-0.5 * (NaChar * NaChar)) / (NdChar - NaChar); else tmp = t_0; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(NaChar + NdChar), $MachinePrecision] * 0.5), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NaChar / N[(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[Exp[N[(N[(mu - N[(N[(Ec - Vef), $MachinePrecision] - EDonor), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$1, -2e-257], t$95$0, If[LessEqual[t$95$1, 1e-287], N[(N[(-0.5 * N[(NaChar * NaChar), $MachinePrecision]), $MachinePrecision] / N[(NdChar - NaChar), $MachinePrecision]), $MachinePrecision], t$95$0]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(NaChar + NdChar\right) \cdot 0.5\\
t_1 := \frac{NaChar}{1 + e^{\frac{\left(EAccept + \left(Ev + Vef\right)\right) - mu}{KbT}}} - \frac{NdChar}{-1 - e^{\frac{mu - \left(\left(Ec - Vef\right) - EDonor\right)}{KbT}}}\\
\mathbf{if}\;t\_1 \leq -2 \cdot 10^{-257}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;t\_1 \leq 10^{-287}:\\
\;\;\;\;\frac{-0.5 \cdot \left(NaChar \cdot NaChar\right)}{NdChar - NaChar}\\
\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))))) < -2e-257 or 1.00000000000000002e-287 < (+.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-+.f6432.1
Applied rewrites32.1%
if -2e-257 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < 1.00000000000000002e-287Initial program 100.0%
Taylor expanded in KbT around inf
+-commutativeN/A
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f642.7
Applied rewrites2.7%
Applied rewrites6.5%
Taylor expanded in NdChar around 0
Applied rewrites27.4%
Final simplification31.2%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (* (+ NaChar NdChar) 0.5))
(t_1
(-
(/ NaChar (+ 1.0 (exp (/ (- (+ EAccept (+ Ev Vef)) mu) KbT))))
(/ NdChar (- -1.0 (exp (/ (- mu (- (- Ec Vef) EDonor)) KbT)))))))
(if (<= t_1 -2e-231)
t_0
(if (<= t_1 4e-244)
(* (/ 0.5 (- NdChar NaChar)) (* NdChar NdChar))
t_0))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar + NdChar) * 0.5;
double t_1 = (NaChar / (1.0 + exp((((EAccept + (Ev + Vef)) - mu) / KbT)))) - (NdChar / (-1.0 - exp(((mu - ((Ec - Vef) - EDonor)) / KbT))));
double tmp;
if (t_1 <= -2e-231) {
tmp = t_0;
} else if (t_1 <= 4e-244) {
tmp = (0.5 / (NdChar - NaChar)) * (NdChar * NdChar);
} else {
tmp = t_0;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = (nachar + ndchar) * 0.5d0
t_1 = (nachar / (1.0d0 + exp((((eaccept + (ev + vef)) - mu) / kbt)))) - (ndchar / ((-1.0d0) - exp(((mu - ((ec - vef) - edonor)) / kbt))))
if (t_1 <= (-2d-231)) then
tmp = t_0
else if (t_1 <= 4d-244) then
tmp = (0.5d0 / (ndchar - nachar)) * (ndchar * ndchar)
else
tmp = t_0
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar + NdChar) * 0.5;
double t_1 = (NaChar / (1.0 + Math.exp((((EAccept + (Ev + Vef)) - mu) / KbT)))) - (NdChar / (-1.0 - Math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT))));
double tmp;
if (t_1 <= -2e-231) {
tmp = t_0;
} else if (t_1 <= 4e-244) {
tmp = (0.5 / (NdChar - NaChar)) * (NdChar * NdChar);
} else {
tmp = t_0;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = (NaChar + NdChar) * 0.5 t_1 = (NaChar / (1.0 + math.exp((((EAccept + (Ev + Vef)) - mu) / KbT)))) - (NdChar / (-1.0 - math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)))) tmp = 0 if t_1 <= -2e-231: tmp = t_0 elif t_1 <= 4e-244: tmp = (0.5 / (NdChar - NaChar)) * (NdChar * NdChar) else: tmp = t_0 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(NaChar + NdChar) * 0.5) t_1 = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(EAccept + Float64(Ev + Vef)) - mu) / KbT)))) - Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(mu - Float64(Float64(Ec - Vef) - EDonor)) / KbT))))) tmp = 0.0 if (t_1 <= -2e-231) tmp = t_0; elseif (t_1 <= 4e-244) tmp = Float64(Float64(0.5 / Float64(NdChar - NaChar)) * Float64(NdChar * NdChar)); else tmp = t_0; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = (NaChar + NdChar) * 0.5; t_1 = (NaChar / (1.0 + exp((((EAccept + (Ev + Vef)) - mu) / KbT)))) - (NdChar / (-1.0 - exp(((mu - ((Ec - Vef) - EDonor)) / KbT)))); tmp = 0.0; if (t_1 <= -2e-231) tmp = t_0; elseif (t_1 <= 4e-244) tmp = (0.5 / (NdChar - NaChar)) * (NdChar * NdChar); else tmp = t_0; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(NaChar + NdChar), $MachinePrecision] * 0.5), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NaChar / N[(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[Exp[N[(N[(mu - N[(N[(Ec - Vef), $MachinePrecision] - EDonor), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$1, -2e-231], t$95$0, If[LessEqual[t$95$1, 4e-244], N[(N[(0.5 / N[(NdChar - NaChar), $MachinePrecision]), $MachinePrecision] * N[(NdChar * NdChar), $MachinePrecision]), $MachinePrecision], t$95$0]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(NaChar + NdChar\right) \cdot 0.5\\
t_1 := \frac{NaChar}{1 + e^{\frac{\left(EAccept + \left(Ev + Vef\right)\right) - mu}{KbT}}} - \frac{NdChar}{-1 - e^{\frac{mu - \left(\left(Ec - Vef\right) - EDonor\right)}{KbT}}}\\
\mathbf{if}\;t\_1 \leq -2 \cdot 10^{-231}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;t\_1 \leq 4 \cdot 10^{-244}:\\
\;\;\;\;\frac{0.5}{NdChar - NaChar} \cdot \left(NdChar \cdot NdChar\right)\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < -2e-231 or 3.9999999999999997e-244 < (+.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-+.f6432.9
Applied rewrites32.9%
if -2e-231 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < 3.9999999999999997e-244Initial program 100.0%
Taylor expanded in KbT around inf
+-commutativeN/A
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f643.0
Applied rewrites3.0%
Applied rewrites6.2%
Applied rewrites6.2%
Taylor expanded in NdChar around inf
Applied rewrites23.7%
Final simplification30.9%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (exp (/ Vef KbT))))
(if (<= Vef -4.3e+170)
(-
(/ NdChar (- (exp (/ (- (+ mu Vef) Ec) KbT)) -1.0))
(/ NaChar (- -1.0 t_0)))
(if (<= Vef 1.52e+147)
(-
(/ NaChar (+ 1.0 (exp (/ (- (+ EAccept Ev) mu) KbT))))
(/ NdChar (- -1.0 (exp (/ (- (+ mu EDonor) Ec) KbT)))))
(-
(/ NaChar (+ 1.0 t_0))
(/ NdChar (- -1.0 (exp (/ (- mu (- (- Ec Vef) EDonor)) KbT)))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = exp((Vef / KbT));
double tmp;
if (Vef <= -4.3e+170) {
tmp = (NdChar / (exp((((mu + Vef) - Ec) / KbT)) - -1.0)) - (NaChar / (-1.0 - t_0));
} else if (Vef <= 1.52e+147) {
tmp = (NaChar / (1.0 + exp((((EAccept + Ev) - mu) / KbT)))) - (NdChar / (-1.0 - exp((((mu + EDonor) - Ec) / KbT))));
} else {
tmp = (NaChar / (1.0 + t_0)) - (NdChar / (-1.0 - exp(((mu - ((Ec - Vef) - EDonor)) / KbT))));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: tmp
t_0 = exp((vef / kbt))
if (vef <= (-4.3d+170)) then
tmp = (ndchar / (exp((((mu + vef) - ec) / kbt)) - (-1.0d0))) - (nachar / ((-1.0d0) - t_0))
else if (vef <= 1.52d+147) then
tmp = (nachar / (1.0d0 + exp((((eaccept + ev) - mu) / kbt)))) - (ndchar / ((-1.0d0) - exp((((mu + edonor) - ec) / kbt))))
else
tmp = (nachar / (1.0d0 + t_0)) - (ndchar / ((-1.0d0) - exp(((mu - ((ec - vef) - edonor)) / kbt))))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = Math.exp((Vef / KbT));
double tmp;
if (Vef <= -4.3e+170) {
tmp = (NdChar / (Math.exp((((mu + Vef) - Ec) / KbT)) - -1.0)) - (NaChar / (-1.0 - t_0));
} else if (Vef <= 1.52e+147) {
tmp = (NaChar / (1.0 + Math.exp((((EAccept + Ev) - mu) / KbT)))) - (NdChar / (-1.0 - Math.exp((((mu + EDonor) - Ec) / KbT))));
} else {
tmp = (NaChar / (1.0 + t_0)) - (NdChar / (-1.0 - Math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = math.exp((Vef / KbT)) tmp = 0 if Vef <= -4.3e+170: tmp = (NdChar / (math.exp((((mu + Vef) - Ec) / KbT)) - -1.0)) - (NaChar / (-1.0 - t_0)) elif Vef <= 1.52e+147: tmp = (NaChar / (1.0 + math.exp((((EAccept + Ev) - mu) / KbT)))) - (NdChar / (-1.0 - math.exp((((mu + EDonor) - Ec) / KbT)))) else: tmp = (NaChar / (1.0 + t_0)) - (NdChar / (-1.0 - math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = exp(Float64(Vef / KbT)) tmp = 0.0 if (Vef <= -4.3e+170) tmp = Float64(Float64(NdChar / Float64(exp(Float64(Float64(Float64(mu + Vef) - Ec) / KbT)) - -1.0)) - Float64(NaChar / Float64(-1.0 - t_0))); elseif (Vef <= 1.52e+147) 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 = Float64(Float64(NaChar / Float64(1.0 + t_0)) - Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(mu - Float64(Float64(Ec - Vef) - EDonor)) / KbT))))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = exp((Vef / KbT)); tmp = 0.0; if (Vef <= -4.3e+170) tmp = (NdChar / (exp((((mu + Vef) - Ec) / KbT)) - -1.0)) - (NaChar / (-1.0 - t_0)); elseif (Vef <= 1.52e+147) tmp = (NaChar / (1.0 + exp((((EAccept + Ev) - mu) / KbT)))) - (NdChar / (-1.0 - exp((((mu + EDonor) - Ec) / KbT)))); else tmp = (NaChar / (1.0 + t_0)) - (NdChar / (-1.0 - exp(((mu - ((Ec - Vef) - EDonor)) / KbT)))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]}, If[LessEqual[Vef, -4.3e+170], N[(N[(NdChar / N[(N[Exp[N[(N[(N[(mu + Vef), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] - -1.0), $MachinePrecision]), $MachinePrecision] - N[(NaChar / N[(-1.0 - t$95$0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[Vef, 1.52e+147], 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], N[(N[(NaChar / N[(1.0 + t$95$0), $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]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := e^{\frac{Vef}{KbT}}\\
\mathbf{if}\;Vef \leq -4.3 \cdot 10^{+170}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{\left(mu + Vef\right) - Ec}{KbT}} - -1} - \frac{NaChar}{-1 - t\_0}\\
\mathbf{elif}\;Vef \leq 1.52 \cdot 10^{+147}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{\left(EAccept + Ev\right) - mu}{KbT}}} - \frac{NdChar}{-1 - e^{\frac{\left(mu + EDonor\right) - Ec}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + t\_0} - \frac{NdChar}{-1 - e^{\frac{mu - \left(\left(Ec - Vef\right) - EDonor\right)}{KbT}}}\\
\end{array}
\end{array}
if Vef < -4.2999999999999999e170Initial program 100.0%
Taylor expanded in Vef around inf
lower-/.f6482.7
Applied rewrites82.7%
Taylor expanded in EDonor around 0
lower--.f64N/A
+-commutativeN/A
lower-+.f6482.7
Applied rewrites82.7%
if -4.2999999999999999e170 < Vef < 1.51999999999999992e147Initial 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 rewrites96.8%
if 1.51999999999999992e147 < Vef Initial program 100.0%
Taylor expanded in Vef around inf
lower-/.f6496.2
Applied rewrites96.2%
Final simplification95.2%
(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.05e+84)
(- (/ NaChar (+ 1.0 (exp (/ Ev KbT)))) t_0)
(if (<= Ev -3.1e-195)
(- (/ 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.05e+84) {
tmp = (NaChar / (1.0 + exp((Ev / KbT)))) - t_0;
} else if (Ev <= -3.1e-195) {
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.05d+84)) then
tmp = (nachar / (1.0d0 + exp((ev / kbt)))) - t_0
else if (ev <= (-3.1d-195)) 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.05e+84) {
tmp = (NaChar / (1.0 + Math.exp((Ev / KbT)))) - t_0;
} else if (Ev <= -3.1e-195) {
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.05e+84: tmp = (NaChar / (1.0 + math.exp((Ev / KbT)))) - t_0 elif Ev <= -3.1e-195: 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.05e+84) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT)))) - t_0); elseif (Ev <= -3.1e-195) 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.05e+84) tmp = (NaChar / (1.0 + exp((Ev / KbT)))) - t_0; elseif (Ev <= -3.1e-195) 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.05e+84], N[(N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - t$95$0), $MachinePrecision], If[LessEqual[Ev, -3.1e-195], 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.05 \cdot 10^{+84}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Ev}{KbT}}} - t\_0\\
\mathbf{elif}\;Ev \leq -3.1 \cdot 10^{-195}:\\
\;\;\;\;\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.04999999999999999e84Initial program 100.0%
Taylor expanded in Ev around inf
lower-/.f6497.3
Applied rewrites97.3%
if -3.04999999999999999e84 < Ev < -3.10000000000000002e-195Initial program 100.0%
Taylor expanded in Vef around inf
lower-/.f6482.0
Applied rewrites82.0%
if -3.10000000000000002e-195 < Ev Initial program 100.0%
Taylor expanded in EAccept around inf
lower-/.f6473.6
Applied rewrites73.6%
Final simplification79.1%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NdChar (- (exp (/ (- Ec) KbT)) -1.0))))
(if (<= KbT -9e+181)
(- t_0 (/ NaChar (- -1.0 (exp (/ Vef KbT)))))
(if (<= KbT -1.6e-7)
(/
(* NaChar NdChar)
(fma (exp (/ (- (+ (+ mu Vef) EDonor) Ec) KbT)) NaChar NaChar))
(if (<= KbT 1.8e+109)
(/ NaChar (+ 1.0 (exp (/ (- (+ EAccept (+ Ev Vef)) mu) KbT))))
(- t_0 (/ NaChar (- -1.0 (exp (/ Ev KbT))))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (exp((-Ec / KbT)) - -1.0);
double tmp;
if (KbT <= -9e+181) {
tmp = t_0 - (NaChar / (-1.0 - exp((Vef / KbT))));
} else if (KbT <= -1.6e-7) {
tmp = (NaChar * NdChar) / fma(exp(((((mu + Vef) + EDonor) - Ec) / KbT)), NaChar, NaChar);
} else if (KbT <= 1.8e+109) {
tmp = NaChar / (1.0 + exp((((EAccept + (Ev + Vef)) - mu) / KbT)));
} else {
tmp = t_0 - (NaChar / (-1.0 - exp((Ev / KbT))));
}
return tmp;
}
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NdChar / Float64(exp(Float64(Float64(-Ec) / KbT)) - -1.0)) tmp = 0.0 if (KbT <= -9e+181) tmp = Float64(t_0 - Float64(NaChar / Float64(-1.0 - exp(Float64(Vef / KbT))))); elseif (KbT <= -1.6e-7) tmp = Float64(Float64(NaChar * NdChar) / fma(exp(Float64(Float64(Float64(Float64(mu + Vef) + EDonor) - Ec) / KbT)), NaChar, NaChar)); elseif (KbT <= 1.8e+109) tmp = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(EAccept + Float64(Ev + Vef)) - mu) / KbT)))); else tmp = Float64(t_0 - Float64(NaChar / Float64(-1.0 - exp(Float64(Ev / KbT))))); end return tmp end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NdChar / N[(N[Exp[N[((-Ec) / KbT), $MachinePrecision]], $MachinePrecision] - -1.0), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[KbT, -9e+181], N[(t$95$0 - N[(NaChar / N[(-1.0 - N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[KbT, -1.6e-7], N[(N[(NaChar * NdChar), $MachinePrecision] / N[(N[Exp[N[(N[(N[(N[(mu + Vef), $MachinePrecision] + EDonor), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] * NaChar + NaChar), $MachinePrecision]), $MachinePrecision], If[LessEqual[KbT, 1.8e+109], N[(NaChar / N[(1.0 + N[Exp[N[(N[(N[(EAccept + N[(Ev + Vef), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(t$95$0 - N[(NaChar / N[(-1.0 - N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{e^{\frac{-Ec}{KbT}} - -1}\\
\mathbf{if}\;KbT \leq -9 \cdot 10^{+181}:\\
\;\;\;\;t\_0 - \frac{NaChar}{-1 - e^{\frac{Vef}{KbT}}}\\
\mathbf{elif}\;KbT \leq -1.6 \cdot 10^{-7}:\\
\;\;\;\;\frac{NaChar \cdot NdChar}{\mathsf{fma}\left(e^{\frac{\left(\left(mu + Vef\right) + EDonor\right) - Ec}{KbT}}, NaChar, NaChar\right)}\\
\mathbf{elif}\;KbT \leq 1.8 \cdot 10^{+109}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{\left(EAccept + \left(Ev + Vef\right)\right) - mu}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;t\_0 - \frac{NaChar}{-1 - e^{\frac{Ev}{KbT}}}\\
\end{array}
\end{array}
if KbT < -9e181Initial program 100.0%
Taylor expanded in Vef around inf
lower-/.f6493.3
Applied rewrites93.3%
Taylor expanded in Ec around inf
mul-1-negN/A
lower-neg.f6485.9
Applied rewrites85.9%
if -9e181 < KbT < -1.6e-7Initial program 100.0%
Taylor expanded in NaChar around inf
*-commutativeN/A
lower-*.f64N/A
Applied rewrites86.3%
Taylor expanded in NdChar around inf
Applied rewrites74.4%
if -1.6e-7 < KbT < 1.8e109Initial 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.7
Applied rewrites70.7%
if 1.8e109 < KbT Initial program 100.0%
Taylor expanded in Ev around inf
lower-/.f6486.8
Applied rewrites86.8%
Taylor expanded in Ec around inf
mul-1-negN/A
lower-neg.f6466.1
Applied rewrites66.1%
Final simplification72.6%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0
(-
(/ NdChar (- (exp (/ (- Ec) KbT)) -1.0))
(/ NaChar (- -1.0 (exp (/ Ev KbT)))))))
(if (<= KbT -1.15e+182)
t_0
(if (<= KbT -1.6e-7)
(/
(* NaChar NdChar)
(fma (exp (/ (- (+ (+ mu Vef) EDonor) Ec) KbT)) NaChar NaChar))
(if (<= KbT 1.8e+109)
(/ NaChar (+ 1.0 (exp (/ (- (+ EAccept (+ Ev Vef)) mu) KbT))))
t_0)))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NdChar / (exp((-Ec / KbT)) - -1.0)) - (NaChar / (-1.0 - exp((Ev / KbT))));
double tmp;
if (KbT <= -1.15e+182) {
tmp = t_0;
} else if (KbT <= -1.6e-7) {
tmp = (NaChar * NdChar) / fma(exp(((((mu + Vef) + EDonor) - Ec) / KbT)), NaChar, NaChar);
} else if (KbT <= 1.8e+109) {
tmp = NaChar / (1.0 + exp((((EAccept + (Ev + Vef)) - mu) / KbT)));
} else {
tmp = t_0;
}
return tmp;
}
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(NdChar / Float64(exp(Float64(Float64(-Ec) / KbT)) - -1.0)) - Float64(NaChar / Float64(-1.0 - exp(Float64(Ev / KbT))))) tmp = 0.0 if (KbT <= -1.15e+182) tmp = t_0; elseif (KbT <= -1.6e-7) tmp = Float64(Float64(NaChar * NdChar) / fma(exp(Float64(Float64(Float64(Float64(mu + Vef) + EDonor) - Ec) / KbT)), NaChar, NaChar)); elseif (KbT <= 1.8e+109) tmp = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(EAccept + Float64(Ev + Vef)) - mu) / KbT)))); else tmp = t_0; end return tmp end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(NdChar / N[(N[Exp[N[((-Ec) / KbT), $MachinePrecision]], $MachinePrecision] - -1.0), $MachinePrecision]), $MachinePrecision] - N[(NaChar / N[(-1.0 - N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[KbT, -1.15e+182], t$95$0, If[LessEqual[KbT, -1.6e-7], N[(N[(NaChar * NdChar), $MachinePrecision] / N[(N[Exp[N[(N[(N[(N[(mu + Vef), $MachinePrecision] + EDonor), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] * NaChar + NaChar), $MachinePrecision]), $MachinePrecision], If[LessEqual[KbT, 1.8e+109], N[(NaChar / N[(1.0 + N[Exp[N[(N[(N[(EAccept + N[(Ev + Vef), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$0]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{e^{\frac{-Ec}{KbT}} - -1} - \frac{NaChar}{-1 - e^{\frac{Ev}{KbT}}}\\
\mathbf{if}\;KbT \leq -1.15 \cdot 10^{+182}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;KbT \leq -1.6 \cdot 10^{-7}:\\
\;\;\;\;\frac{NaChar \cdot NdChar}{\mathsf{fma}\left(e^{\frac{\left(\left(mu + Vef\right) + EDonor\right) - Ec}{KbT}}, NaChar, NaChar\right)}\\
\mathbf{elif}\;KbT \leq 1.8 \cdot 10^{+109}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{\left(EAccept + \left(Ev + Vef\right)\right) - mu}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if KbT < -1.15e182 or 1.8e109 < KbT Initial program 100.0%
Taylor expanded in Ev around inf
lower-/.f6488.9
Applied rewrites88.9%
Taylor expanded in Ec around inf
mul-1-negN/A
lower-neg.f6474.8
Applied rewrites74.8%
if -1.15e182 < KbT < -1.6e-7Initial program 100.0%
Taylor expanded in NaChar around inf
*-commutativeN/A
lower-*.f64N/A
Applied rewrites86.3%
Taylor expanded in NdChar around inf
Applied rewrites74.4%
if -1.6e-7 < KbT < 1.8e109Initial 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.7
Applied rewrites70.7%
Final simplification72.3%
(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 -1.35e+57)
(- (/ NaChar (+ 1.0 (exp (/ Ev 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 <= -1.35e+57) {
tmp = (NaChar / (1.0 + exp((Ev / 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 <= (-1.35d+57)) then
tmp = (nachar / (1.0d0 + exp((ev / 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 <= -1.35e+57) {
tmp = (NaChar / (1.0 + Math.exp((Ev / 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 <= -1.35e+57: tmp = (NaChar / (1.0 + math.exp((Ev / 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 <= -1.35e+57) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Ev / 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 <= -1.35e+57) tmp = (NaChar / (1.0 + exp((Ev / 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, -1.35e+57], N[(N[(NaChar / N[(1.0 + N[Exp[N[(Ev / 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 -1.35 \cdot 10^{+57}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Ev}{KbT}}} - t\_0\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}} - t\_0\\
\end{array}
\end{array}
if Ev < -1.3499999999999999e57Initial program 100.0%
Taylor expanded in Ev around inf
lower-/.f6496.0
Applied rewrites96.0%
if -1.3499999999999999e57 < Ev Initial program 100.0%
Taylor expanded in EAccept around inf
lower-/.f6472.4
Applied rewrites72.4%
Final simplification76.8%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (<= Ev -1.35e+57)
(-
(/ NdChar (- (exp (/ (- (+ mu Vef) Ec) KbT)) -1.0))
(/ NaChar (- -1.0 (exp (/ Ev KbT)))))
(-
(/ NaChar (+ 1.0 (exp (/ EAccept KbT))))
(/ NdChar (- -1.0 (exp (/ (- mu (- (- Ec Vef) EDonor)) KbT)))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (Ev <= -1.35e+57) {
tmp = (NdChar / (exp((((mu + Vef) - Ec) / KbT)) - -1.0)) - (NaChar / (-1.0 - exp((Ev / KbT))));
} else {
tmp = (NaChar / (1.0 + exp((EAccept / KbT)))) - (NdChar / (-1.0 - exp(((mu - ((Ec - Vef) - EDonor)) / KbT))));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if (ev <= (-1.35d+57)) then
tmp = (ndchar / (exp((((mu + vef) - ec) / kbt)) - (-1.0d0))) - (nachar / ((-1.0d0) - exp((ev / kbt))))
else
tmp = (nachar / (1.0d0 + exp((eaccept / kbt)))) - (ndchar / ((-1.0d0) - exp(((mu - ((ec - vef) - edonor)) / kbt))))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (Ev <= -1.35e+57) {
tmp = (NdChar / (Math.exp((((mu + Vef) - Ec) / KbT)) - -1.0)) - (NaChar / (-1.0 - Math.exp((Ev / KbT))));
} else {
tmp = (NaChar / (1.0 + Math.exp((EAccept / KbT)))) - (NdChar / (-1.0 - Math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if Ev <= -1.35e+57: tmp = (NdChar / (math.exp((((mu + Vef) - Ec) / KbT)) - -1.0)) - (NaChar / (-1.0 - math.exp((Ev / KbT)))) else: tmp = (NaChar / (1.0 + math.exp((EAccept / KbT)))) - (NdChar / (-1.0 - math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (Ev <= -1.35e+57) tmp = Float64(Float64(NdChar / Float64(exp(Float64(Float64(Float64(mu + Vef) - Ec) / KbT)) - -1.0)) - Float64(NaChar / Float64(-1.0 - exp(Float64(Ev / KbT))))); else tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT)))) - Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(mu - Float64(Float64(Ec - Vef) - EDonor)) / KbT))))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (Ev <= -1.35e+57) tmp = (NdChar / (exp((((mu + Vef) - Ec) / KbT)) - -1.0)) - (NaChar / (-1.0 - exp((Ev / KbT)))); else tmp = (NaChar / (1.0 + exp((EAccept / KbT)))) - (NdChar / (-1.0 - exp(((mu - ((Ec - Vef) - EDonor)) / KbT)))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[Ev, -1.35e+57], N[(N[(NdChar / N[(N[Exp[N[(N[(N[(mu + Vef), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] - -1.0), $MachinePrecision]), $MachinePrecision] - N[(NaChar / N[(-1.0 - N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / 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]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;Ev \leq -1.35 \cdot 10^{+57}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{\left(mu + Vef\right) - Ec}{KbT}} - -1} - \frac{NaChar}{-1 - e^{\frac{Ev}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}} - \frac{NdChar}{-1 - e^{\frac{mu - \left(\left(Ec - Vef\right) - EDonor\right)}{KbT}}}\\
\end{array}
\end{array}
if Ev < -1.3499999999999999e57Initial program 100.0%
Taylor expanded in Ev around inf
lower-/.f6496.0
Applied rewrites96.0%
Taylor expanded in EDonor around 0
lower--.f64N/A
lower-+.f6490.3
Applied rewrites90.3%
if -1.3499999999999999e57 < Ev Initial program 100.0%
Taylor expanded in EAccept around inf
lower-/.f6472.4
Applied rewrites72.4%
Final simplification75.8%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (exp (/ (- (+ EAccept (+ Ev Vef)) mu) KbT)))
(t_1 (/ (- (+ (+ mu Vef) EDonor) Ec) KbT)))
(if (<= KbT -1.36e+182)
(- (* 0.5 NdChar) (/ NaChar (- -1.0 t_0)))
(if (<= KbT -1.6e-7)
(/ (* NaChar NdChar) (fma (exp t_1) NaChar NaChar))
(if (<= KbT 4.5e+232)
(/ NaChar (+ 1.0 t_0))
(fma
-0.25
(fma NaChar (/ EAccept KbT) (* t_1 NdChar))
(* (+ NaChar NdChar) 0.5)))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = exp((((EAccept + (Ev + Vef)) - mu) / KbT));
double t_1 = (((mu + Vef) + EDonor) - Ec) / KbT;
double tmp;
if (KbT <= -1.36e+182) {
tmp = (0.5 * NdChar) - (NaChar / (-1.0 - t_0));
} else if (KbT <= -1.6e-7) {
tmp = (NaChar * NdChar) / fma(exp(t_1), NaChar, NaChar);
} else if (KbT <= 4.5e+232) {
tmp = NaChar / (1.0 + t_0);
} else {
tmp = fma(-0.25, fma(NaChar, (EAccept / KbT), (t_1 * NdChar)), ((NaChar + NdChar) * 0.5));
}
return tmp;
}
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = exp(Float64(Float64(Float64(EAccept + Float64(Ev + Vef)) - mu) / KbT)) t_1 = Float64(Float64(Float64(Float64(mu + Vef) + EDonor) - Ec) / KbT) tmp = 0.0 if (KbT <= -1.36e+182) tmp = Float64(Float64(0.5 * NdChar) - Float64(NaChar / Float64(-1.0 - t_0))); elseif (KbT <= -1.6e-7) tmp = Float64(Float64(NaChar * NdChar) / fma(exp(t_1), NaChar, NaChar)); elseif (KbT <= 4.5e+232) tmp = Float64(NaChar / Float64(1.0 + t_0)); else tmp = fma(-0.25, fma(NaChar, Float64(EAccept / KbT), Float64(t_1 * NdChar)), Float64(Float64(NaChar + NdChar) * 0.5)); end return tmp end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[Exp[N[(N[(N[(EAccept + N[(Ev + Vef), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[(N[(N[(N[(mu + Vef), $MachinePrecision] + EDonor), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]}, If[LessEqual[KbT, -1.36e+182], N[(N[(0.5 * NdChar), $MachinePrecision] - N[(NaChar / N[(-1.0 - t$95$0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[KbT, -1.6e-7], N[(N[(NaChar * NdChar), $MachinePrecision] / N[(N[Exp[t$95$1], $MachinePrecision] * NaChar + NaChar), $MachinePrecision]), $MachinePrecision], If[LessEqual[KbT, 4.5e+232], N[(NaChar / N[(1.0 + t$95$0), $MachinePrecision]), $MachinePrecision], N[(-0.25 * N[(NaChar * N[(EAccept / KbT), $MachinePrecision] + N[(t$95$1 * NdChar), $MachinePrecision]), $MachinePrecision] + N[(N[(NaChar + NdChar), $MachinePrecision] * 0.5), $MachinePrecision]), $MachinePrecision]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := e^{\frac{\left(EAccept + \left(Ev + Vef\right)\right) - mu}{KbT}}\\
t_1 := \frac{\left(\left(mu + Vef\right) + EDonor\right) - Ec}{KbT}\\
\mathbf{if}\;KbT \leq -1.36 \cdot 10^{+182}:\\
\;\;\;\;0.5 \cdot NdChar - \frac{NaChar}{-1 - t\_0}\\
\mathbf{elif}\;KbT \leq -1.6 \cdot 10^{-7}:\\
\;\;\;\;\frac{NaChar \cdot NdChar}{\mathsf{fma}\left(e^{t\_1}, NaChar, NaChar\right)}\\
\mathbf{elif}\;KbT \leq 4.5 \cdot 10^{+232}:\\
\;\;\;\;\frac{NaChar}{1 + t\_0}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(-0.25, \mathsf{fma}\left(NaChar, \frac{EAccept}{KbT}, t\_1 \cdot NdChar\right), \left(NaChar + NdChar\right) \cdot 0.5\right)\\
\end{array}
\end{array}
if KbT < -1.36000000000000012e182Initial program 100.0%
Taylor expanded in KbT around inf
lower-*.f6479.9
Applied rewrites79.9%
if -1.36000000000000012e182 < KbT < -1.6e-7Initial program 100.0%
Taylor expanded in NaChar around inf
*-commutativeN/A
lower-*.f64N/A
Applied rewrites86.3%
Taylor expanded in NdChar around inf
Applied rewrites74.4%
if -1.6e-7 < KbT < 4.4999999999999998e232Initial 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-+.f6469.5
Applied rewrites69.5%
if 4.4999999999999998e232 < KbT Initial program 100.0%
Taylor expanded in KbT around -inf
associate-+r+N/A
distribute-lft-outN/A
lower-fma.f64N/A
Applied rewrites73.0%
Taylor expanded in EAccept around inf
Applied rewrites73.0%
Final simplification71.7%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ (- (+ (+ mu Vef) EDonor) Ec) KbT))
(t_1 (+ EAccept (+ Ev Vef))))
(if (<= KbT -1.36e+182)
(- (* 0.5 NdChar) (/ NaChar (- -1.0 (exp (/ t_1 KbT)))))
(if (<= KbT -1.6e-7)
(/ (* NaChar NdChar) (fma (exp t_0) NaChar NaChar))
(if (<= KbT 4.5e+232)
(/ NaChar (+ 1.0 (exp (/ (- t_1 mu) KbT))))
(fma
-0.25
(fma NaChar (/ EAccept KbT) (* t_0 NdChar))
(* (+ NaChar NdChar) 0.5)))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (((mu + Vef) + EDonor) - Ec) / KbT;
double t_1 = EAccept + (Ev + Vef);
double tmp;
if (KbT <= -1.36e+182) {
tmp = (0.5 * NdChar) - (NaChar / (-1.0 - exp((t_1 / KbT))));
} else if (KbT <= -1.6e-7) {
tmp = (NaChar * NdChar) / fma(exp(t_0), NaChar, NaChar);
} else if (KbT <= 4.5e+232) {
tmp = NaChar / (1.0 + exp(((t_1 - mu) / KbT)));
} else {
tmp = fma(-0.25, fma(NaChar, (EAccept / KbT), (t_0 * NdChar)), ((NaChar + NdChar) * 0.5));
}
return tmp;
}
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(Float64(Float64(mu + Vef) + EDonor) - Ec) / KbT) t_1 = Float64(EAccept + Float64(Ev + Vef)) tmp = 0.0 if (KbT <= -1.36e+182) tmp = Float64(Float64(0.5 * NdChar) - Float64(NaChar / Float64(-1.0 - exp(Float64(t_1 / KbT))))); elseif (KbT <= -1.6e-7) tmp = Float64(Float64(NaChar * NdChar) / fma(exp(t_0), NaChar, NaChar)); elseif (KbT <= 4.5e+232) tmp = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(t_1 - mu) / KbT)))); else tmp = fma(-0.25, fma(NaChar, Float64(EAccept / KbT), Float64(t_0 * NdChar)), Float64(Float64(NaChar + NdChar) * 0.5)); end return tmp end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(N[(N[(mu + Vef), $MachinePrecision] + EDonor), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]}, Block[{t$95$1 = N[(EAccept + N[(Ev + Vef), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[KbT, -1.36e+182], N[(N[(0.5 * NdChar), $MachinePrecision] - N[(NaChar / N[(-1.0 - N[Exp[N[(t$95$1 / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[KbT, -1.6e-7], N[(N[(NaChar * NdChar), $MachinePrecision] / N[(N[Exp[t$95$0], $MachinePrecision] * NaChar + NaChar), $MachinePrecision]), $MachinePrecision], If[LessEqual[KbT, 4.5e+232], N[(NaChar / N[(1.0 + N[Exp[N[(N[(t$95$1 - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(-0.25 * N[(NaChar * N[(EAccept / KbT), $MachinePrecision] + N[(t$95$0 * NdChar), $MachinePrecision]), $MachinePrecision] + N[(N[(NaChar + NdChar), $MachinePrecision] * 0.5), $MachinePrecision]), $MachinePrecision]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{\left(\left(mu + Vef\right) + EDonor\right) - Ec}{KbT}\\
t_1 := EAccept + \left(Ev + Vef\right)\\
\mathbf{if}\;KbT \leq -1.36 \cdot 10^{+182}:\\
\;\;\;\;0.5 \cdot NdChar - \frac{NaChar}{-1 - e^{\frac{t\_1}{KbT}}}\\
\mathbf{elif}\;KbT \leq -1.6 \cdot 10^{-7}:\\
\;\;\;\;\frac{NaChar \cdot NdChar}{\mathsf{fma}\left(e^{t\_0}, NaChar, NaChar\right)}\\
\mathbf{elif}\;KbT \leq 4.5 \cdot 10^{+232}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{t\_1 - mu}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(-0.25, \mathsf{fma}\left(NaChar, \frac{EAccept}{KbT}, t\_0 \cdot NdChar\right), \left(NaChar + NdChar\right) \cdot 0.5\right)\\
\end{array}
\end{array}
if KbT < -1.36000000000000012e182Initial program 100.0%
Taylor expanded in KbT around inf
lower-*.f6479.9
Applied rewrites79.9%
Taylor expanded in mu around 0
+-commutativeN/A
lower-+.f64N/A
lower-+.f6479.3
Applied rewrites79.3%
if -1.36000000000000012e182 < KbT < -1.6e-7Initial program 100.0%
Taylor expanded in NaChar around inf
*-commutativeN/A
lower-*.f64N/A
Applied rewrites86.3%
Taylor expanded in NdChar around inf
Applied rewrites74.4%
if -1.6e-7 < KbT < 4.4999999999999998e232Initial 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-+.f6469.5
Applied rewrites69.5%
if 4.4999999999999998e232 < KbT Initial program 100.0%
Taylor expanded in KbT around -inf
associate-+r+N/A
distribute-lft-outN/A
lower-fma.f64N/A
Applied rewrites73.0%
Taylor expanded in EAccept around inf
Applied rewrites73.0%
Final simplification71.6%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (+ EAccept (+ Ev Vef))))
(if (<= KbT -1.45e+186)
(- (* 0.5 NdChar) (/ NaChar (- -1.0 (exp (/ t_0 KbT)))))
(if (<= KbT 4.5e+232)
(/ NaChar (+ 1.0 (exp (/ (- t_0 mu) KbT))))
(fma
-0.25
(fma
NaChar
(/ EAccept KbT)
(* (/ (- (+ (+ mu Vef) EDonor) Ec) KbT) NdChar))
(* (+ NaChar NdChar) 0.5))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = EAccept + (Ev + Vef);
double tmp;
if (KbT <= -1.45e+186) {
tmp = (0.5 * NdChar) - (NaChar / (-1.0 - exp((t_0 / KbT))));
} else if (KbT <= 4.5e+232) {
tmp = NaChar / (1.0 + exp(((t_0 - mu) / KbT)));
} else {
tmp = fma(-0.25, fma(NaChar, (EAccept / KbT), (((((mu + Vef) + EDonor) - Ec) / KbT) * NdChar)), ((NaChar + NdChar) * 0.5));
}
return tmp;
}
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(EAccept + Float64(Ev + Vef)) tmp = 0.0 if (KbT <= -1.45e+186) tmp = Float64(Float64(0.5 * NdChar) - Float64(NaChar / Float64(-1.0 - exp(Float64(t_0 / KbT))))); elseif (KbT <= 4.5e+232) tmp = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(t_0 - mu) / KbT)))); else tmp = fma(-0.25, fma(NaChar, Float64(EAccept / KbT), Float64(Float64(Float64(Float64(Float64(mu + Vef) + EDonor) - Ec) / KbT) * NdChar)), Float64(Float64(NaChar + NdChar) * 0.5)); end return tmp end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(EAccept + N[(Ev + Vef), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[KbT, -1.45e+186], N[(N[(0.5 * NdChar), $MachinePrecision] - N[(NaChar / N[(-1.0 - N[Exp[N[(t$95$0 / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[KbT, 4.5e+232], N[(NaChar / N[(1.0 + N[Exp[N[(N[(t$95$0 - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(-0.25 * N[(NaChar * N[(EAccept / KbT), $MachinePrecision] + N[(N[(N[(N[(N[(mu + Vef), $MachinePrecision] + EDonor), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision] * NdChar), $MachinePrecision]), $MachinePrecision] + N[(N[(NaChar + NdChar), $MachinePrecision] * 0.5), $MachinePrecision]), $MachinePrecision]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := EAccept + \left(Ev + Vef\right)\\
\mathbf{if}\;KbT \leq -1.45 \cdot 10^{+186}:\\
\;\;\;\;0.5 \cdot NdChar - \frac{NaChar}{-1 - e^{\frac{t\_0}{KbT}}}\\
\mathbf{elif}\;KbT \leq 4.5 \cdot 10^{+232}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{t\_0 - mu}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(-0.25, \mathsf{fma}\left(NaChar, \frac{EAccept}{KbT}, \frac{\left(\left(mu + Vef\right) + EDonor\right) - Ec}{KbT} \cdot NdChar\right), \left(NaChar + NdChar\right) \cdot 0.5\right)\\
\end{array}
\end{array}
if KbT < -1.45e186Initial program 100.0%
Taylor expanded in KbT around inf
lower-*.f6481.7
Applied rewrites81.7%
Taylor expanded in mu around 0
+-commutativeN/A
lower-+.f64N/A
lower-+.f6481.1
Applied rewrites81.1%
if -1.45e186 < KbT < 4.4999999999999998e232Initial program 100.0%
Taylor expanded in NdChar around 0
lower-/.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
lower--.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower-+.f6465.1
Applied rewrites65.1%
if 4.4999999999999998e232 < KbT Initial program 100.0%
Taylor expanded in KbT around -inf
associate-+r+N/A
distribute-lft-outN/A
lower-fma.f64N/A
Applied rewrites73.0%
Taylor expanded in EAccept around inf
Applied rewrites73.0%
Final simplification67.5%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (<= KbT -8e+187)
(- (* 0.5 NdChar) (/ NaChar (- -1.0 (exp (/ (- mu) KbT)))))
(if (<= KbT 4.5e+232)
(/ NaChar (+ 1.0 (exp (/ (- (+ EAccept (+ Ev Vef)) mu) KbT))))
(fma
-0.25
(fma
NaChar
(/ EAccept KbT)
(* (/ (- (+ (+ mu Vef) EDonor) Ec) KbT) NdChar))
(* (+ NaChar NdChar) 0.5)))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (KbT <= -8e+187) {
tmp = (0.5 * NdChar) - (NaChar / (-1.0 - exp((-mu / KbT))));
} else if (KbT <= 4.5e+232) {
tmp = NaChar / (1.0 + exp((((EAccept + (Ev + Vef)) - mu) / KbT)));
} else {
tmp = fma(-0.25, fma(NaChar, (EAccept / KbT), (((((mu + Vef) + EDonor) - Ec) / KbT) * NdChar)), ((NaChar + NdChar) * 0.5));
}
return tmp;
}
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (KbT <= -8e+187) tmp = Float64(Float64(0.5 * NdChar) - Float64(NaChar / Float64(-1.0 - exp(Float64(Float64(-mu) / KbT))))); elseif (KbT <= 4.5e+232) tmp = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(EAccept + Float64(Ev + Vef)) - mu) / KbT)))); else tmp = fma(-0.25, fma(NaChar, Float64(EAccept / KbT), Float64(Float64(Float64(Float64(Float64(mu + Vef) + EDonor) - Ec) / KbT) * NdChar)), Float64(Float64(NaChar + NdChar) * 0.5)); end return tmp end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[KbT, -8e+187], N[(N[(0.5 * NdChar), $MachinePrecision] - N[(NaChar / N[(-1.0 - N[Exp[N[((-mu) / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[KbT, 4.5e+232], N[(NaChar / N[(1.0 + N[Exp[N[(N[(N[(EAccept + N[(Ev + Vef), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(-0.25 * N[(NaChar * N[(EAccept / KbT), $MachinePrecision] + N[(N[(N[(N[(N[(mu + Vef), $MachinePrecision] + EDonor), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision] * NdChar), $MachinePrecision]), $MachinePrecision] + N[(N[(NaChar + NdChar), $MachinePrecision] * 0.5), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;KbT \leq -8 \cdot 10^{+187}:\\
\;\;\;\;0.5 \cdot NdChar - \frac{NaChar}{-1 - e^{\frac{-mu}{KbT}}}\\
\mathbf{elif}\;KbT \leq 4.5 \cdot 10^{+232}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{\left(EAccept + \left(Ev + Vef\right)\right) - mu}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(-0.25, \mathsf{fma}\left(NaChar, \frac{EAccept}{KbT}, \frac{\left(\left(mu + Vef\right) + EDonor\right) - Ec}{KbT} \cdot NdChar\right), \left(NaChar + NdChar\right) \cdot 0.5\right)\\
\end{array}
\end{array}
if KbT < -7.99999999999999926e187Initial program 100.0%
Taylor expanded in KbT around inf
lower-*.f6481.7
Applied rewrites81.7%
Taylor expanded in mu around inf
mul-1-negN/A
lower-neg.f6475.1
Applied rewrites75.1%
if -7.99999999999999926e187 < KbT < 4.4999999999999998e232Initial program 100.0%
Taylor expanded in NdChar around 0
lower-/.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
lower--.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower-+.f6465.1
Applied rewrites65.1%
if 4.4999999999999998e232 < KbT Initial program 100.0%
Taylor expanded in KbT around -inf
associate-+r+N/A
distribute-lft-outN/A
lower-fma.f64N/A
Applied rewrites73.0%
Taylor expanded in EAccept around inf
Applied rewrites73.0%
Final simplification66.8%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (<= KbT -8e+187)
(+
(/
NaChar
(- (+ (+ (/ Ev KbT) (/ Vef KbT)) (+ 2.0 (/ EAccept KbT))) (/ mu KbT)))
(* 0.5 NdChar))
(if (<= KbT 4.5e+232)
(/ NaChar (+ 1.0 (exp (/ (- (+ EAccept (+ Ev Vef)) mu) KbT))))
(fma
-0.25
(fma
NaChar
(/ EAccept KbT)
(* (/ (- (+ (+ mu Vef) EDonor) Ec) KbT) NdChar))
(* (+ NaChar NdChar) 0.5)))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (KbT <= -8e+187) {
tmp = (NaChar / ((((Ev / KbT) + (Vef / KbT)) + (2.0 + (EAccept / KbT))) - (mu / KbT))) + (0.5 * NdChar);
} else if (KbT <= 4.5e+232) {
tmp = NaChar / (1.0 + exp((((EAccept + (Ev + Vef)) - mu) / KbT)));
} else {
tmp = fma(-0.25, fma(NaChar, (EAccept / KbT), (((((mu + Vef) + EDonor) - Ec) / KbT) * NdChar)), ((NaChar + NdChar) * 0.5));
}
return tmp;
}
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (KbT <= -8e+187) tmp = Float64(Float64(NaChar / Float64(Float64(Float64(Float64(Ev / KbT) + Float64(Vef / KbT)) + Float64(2.0 + Float64(EAccept / KbT))) - Float64(mu / KbT))) + Float64(0.5 * NdChar)); elseif (KbT <= 4.5e+232) tmp = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(EAccept + Float64(Ev + Vef)) - mu) / KbT)))); else tmp = fma(-0.25, fma(NaChar, Float64(EAccept / KbT), Float64(Float64(Float64(Float64(Float64(mu + Vef) + EDonor) - Ec) / KbT) * NdChar)), Float64(Float64(NaChar + NdChar) * 0.5)); end return tmp end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[KbT, -8e+187], N[(N[(NaChar / N[(N[(N[(N[(Ev / KbT), $MachinePrecision] + N[(Vef / KbT), $MachinePrecision]), $MachinePrecision] + N[(2.0 + N[(EAccept / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(0.5 * NdChar), $MachinePrecision]), $MachinePrecision], If[LessEqual[KbT, 4.5e+232], N[(NaChar / N[(1.0 + N[Exp[N[(N[(N[(EAccept + N[(Ev + Vef), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(-0.25 * N[(NaChar * N[(EAccept / KbT), $MachinePrecision] + N[(N[(N[(N[(N[(mu + Vef), $MachinePrecision] + EDonor), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision] * NdChar), $MachinePrecision]), $MachinePrecision] + N[(N[(NaChar + NdChar), $MachinePrecision] * 0.5), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;KbT \leq -8 \cdot 10^{+187}:\\
\;\;\;\;\frac{NaChar}{\left(\left(\frac{Ev}{KbT} + \frac{Vef}{KbT}\right) + \left(2 + \frac{EAccept}{KbT}\right)\right) - \frac{mu}{KbT}} + 0.5 \cdot NdChar\\
\mathbf{elif}\;KbT \leq 4.5 \cdot 10^{+232}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{\left(EAccept + \left(Ev + Vef\right)\right) - mu}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(-0.25, \mathsf{fma}\left(NaChar, \frac{EAccept}{KbT}, \frac{\left(\left(mu + Vef\right) + EDonor\right) - Ec}{KbT} \cdot NdChar\right), \left(NaChar + NdChar\right) \cdot 0.5\right)\\
\end{array}
\end{array}
if KbT < -7.99999999999999926e187Initial program 100.0%
Taylor expanded in KbT around inf
lower-*.f6481.7
Applied rewrites81.7%
Taylor expanded in KbT around inf
lower--.f64N/A
associate-+r+N/A
lower-+.f64N/A
lower-+.f64N/A
lower-/.f64N/A
lower-+.f64N/A
lower-/.f64N/A
lower-/.f64N/A
lower-/.f6474.7
Applied rewrites74.7%
if -7.99999999999999926e187 < KbT < 4.4999999999999998e232Initial program 100.0%
Taylor expanded in NdChar around 0
lower-/.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
lower--.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower-+.f6465.1
Applied rewrites65.1%
if 4.4999999999999998e232 < KbT Initial program 100.0%
Taylor expanded in KbT around -inf
associate-+r+N/A
distribute-lft-outN/A
lower-fma.f64N/A
Applied rewrites73.0%
Taylor expanded in EAccept around inf
Applied rewrites73.0%
Final simplification66.8%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (<= KbT -8e+187)
(+
(/
NaChar
(- (+ (+ (/ Ev KbT) (/ Vef KbT)) (+ 2.0 (/ EAccept KbT))) (/ mu KbT)))
(* 0.5 NdChar))
(if (<= KbT 2.8e+232)
(/ NaChar (+ 1.0 (exp (/ (+ EAccept (+ Ev Vef)) KbT))))
(fma
-0.25
(fma
NaChar
(/ EAccept KbT)
(* (/ (- (+ (+ mu Vef) EDonor) Ec) KbT) NdChar))
(* (+ NaChar NdChar) 0.5)))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (KbT <= -8e+187) {
tmp = (NaChar / ((((Ev / KbT) + (Vef / KbT)) + (2.0 + (EAccept / KbT))) - (mu / KbT))) + (0.5 * NdChar);
} else if (KbT <= 2.8e+232) {
tmp = NaChar / (1.0 + exp(((EAccept + (Ev + Vef)) / KbT)));
} else {
tmp = fma(-0.25, fma(NaChar, (EAccept / KbT), (((((mu + Vef) + EDonor) - Ec) / KbT) * NdChar)), ((NaChar + NdChar) * 0.5));
}
return tmp;
}
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (KbT <= -8e+187) tmp = Float64(Float64(NaChar / Float64(Float64(Float64(Float64(Ev / KbT) + Float64(Vef / KbT)) + Float64(2.0 + Float64(EAccept / KbT))) - Float64(mu / KbT))) + Float64(0.5 * NdChar)); elseif (KbT <= 2.8e+232) tmp = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(EAccept + Float64(Ev + Vef)) / KbT)))); else tmp = fma(-0.25, fma(NaChar, Float64(EAccept / KbT), Float64(Float64(Float64(Float64(Float64(mu + Vef) + EDonor) - Ec) / KbT) * NdChar)), Float64(Float64(NaChar + NdChar) * 0.5)); end return tmp end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[KbT, -8e+187], N[(N[(NaChar / N[(N[(N[(N[(Ev / KbT), $MachinePrecision] + N[(Vef / KbT), $MachinePrecision]), $MachinePrecision] + N[(2.0 + N[(EAccept / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(0.5 * NdChar), $MachinePrecision]), $MachinePrecision], If[LessEqual[KbT, 2.8e+232], N[(NaChar / N[(1.0 + N[Exp[N[(N[(EAccept + N[(Ev + Vef), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(-0.25 * N[(NaChar * N[(EAccept / KbT), $MachinePrecision] + N[(N[(N[(N[(N[(mu + Vef), $MachinePrecision] + EDonor), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision] * NdChar), $MachinePrecision]), $MachinePrecision] + N[(N[(NaChar + NdChar), $MachinePrecision] * 0.5), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;KbT \leq -8 \cdot 10^{+187}:\\
\;\;\;\;\frac{NaChar}{\left(\left(\frac{Ev}{KbT} + \frac{Vef}{KbT}\right) + \left(2 + \frac{EAccept}{KbT}\right)\right) - \frac{mu}{KbT}} + 0.5 \cdot NdChar\\
\mathbf{elif}\;KbT \leq 2.8 \cdot 10^{+232}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{EAccept + \left(Ev + Vef\right)}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(-0.25, \mathsf{fma}\left(NaChar, \frac{EAccept}{KbT}, \frac{\left(\left(mu + Vef\right) + EDonor\right) - Ec}{KbT} \cdot NdChar\right), \left(NaChar + NdChar\right) \cdot 0.5\right)\\
\end{array}
\end{array}
if KbT < -7.99999999999999926e187Initial program 100.0%
Taylor expanded in KbT around inf
lower-*.f6481.7
Applied rewrites81.7%
Taylor expanded in KbT around inf
lower--.f64N/A
associate-+r+N/A
lower-+.f64N/A
lower-+.f64N/A
lower-/.f64N/A
lower-+.f64N/A
lower-/.f64N/A
lower-/.f64N/A
lower-/.f6474.7
Applied rewrites74.7%
if -7.99999999999999926e187 < KbT < 2.7999999999999999e232Initial program 100.0%
Taylor expanded in NdChar around 0
lower-/.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
lower--.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower-+.f6465.1
Applied rewrites65.1%
Taylor expanded in mu around 0
Applied rewrites60.5%
if 2.7999999999999999e232 < KbT Initial program 100.0%
Taylor expanded in KbT around -inf
associate-+r+N/A
distribute-lft-outN/A
lower-fma.f64N/A
Applied rewrites73.0%
Taylor expanded in EAccept around inf
Applied rewrites73.0%
Final simplification63.1%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (if (<= Ev -4.6e+111) (* 0.5 NdChar) (if (<= Ev 1.25e-190) (* 0.5 NaChar) (* 0.5 NdChar))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (Ev <= -4.6e+111) {
tmp = 0.5 * NdChar;
} else if (Ev <= 1.25e-190) {
tmp = 0.5 * NaChar;
} else {
tmp = 0.5 * NdChar;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if (ev <= (-4.6d+111)) then
tmp = 0.5d0 * ndchar
else if (ev <= 1.25d-190) then
tmp = 0.5d0 * nachar
else
tmp = 0.5d0 * ndchar
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (Ev <= -4.6e+111) {
tmp = 0.5 * NdChar;
} else if (Ev <= 1.25e-190) {
tmp = 0.5 * NaChar;
} else {
tmp = 0.5 * NdChar;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if Ev <= -4.6e+111: tmp = 0.5 * NdChar elif Ev <= 1.25e-190: tmp = 0.5 * NaChar else: tmp = 0.5 * NdChar return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (Ev <= -4.6e+111) tmp = Float64(0.5 * NdChar); elseif (Ev <= 1.25e-190) tmp = Float64(0.5 * NaChar); else tmp = Float64(0.5 * NdChar); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (Ev <= -4.6e+111) tmp = 0.5 * NdChar; elseif (Ev <= 1.25e-190) tmp = 0.5 * NaChar; else tmp = 0.5 * NdChar; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[Ev, -4.6e+111], N[(0.5 * NdChar), $MachinePrecision], If[LessEqual[Ev, 1.25e-190], N[(0.5 * NaChar), $MachinePrecision], N[(0.5 * NdChar), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;Ev \leq -4.6 \cdot 10^{+111}:\\
\;\;\;\;0.5 \cdot NdChar\\
\mathbf{elif}\;Ev \leq 1.25 \cdot 10^{-190}:\\
\;\;\;\;0.5 \cdot NaChar\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot NdChar\\
\end{array}
\end{array}
if Ev < -4.60000000000000004e111 or 1.25000000000000009e-190 < Ev Initial program 100.0%
Taylor expanded in KbT around inf
+-commutativeN/A
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6422.2
Applied rewrites22.2%
Taylor expanded in NdChar around 0
Applied rewrites13.3%
Taylor expanded in NdChar around inf
Applied rewrites18.0%
if -4.60000000000000004e111 < Ev < 1.25000000000000009e-190Initial program 100.0%
Taylor expanded in KbT around inf
+-commutativeN/A
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6431.3
Applied rewrites31.3%
Taylor expanded in NdChar around 0
Applied rewrites24.2%
(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-+.f6426.5
Applied rewrites26.5%
Final simplification26.5%
(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-+.f6426.5
Applied rewrites26.5%
Taylor expanded in NdChar around 0
Applied rewrites18.4%
herbie shell --seed 2024304
(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))))))