
(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 19 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 (/ (- (+ (+ Ev Vef) EAccept) 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(((((Ev + Vef) + EAccept) - 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(((((ev + vef) + eaccept) - 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(((((Ev + Vef) + EAccept) - 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(((((Ev + Vef) + EAccept) - 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(Float64(Ev + Vef) + EAccept) - 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(((((Ev + Vef) + EAccept) - 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[(N[(Ev + Vef), $MachinePrecision] + EAccept), $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(\left(Ev + Vef\right) + EAccept\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 (+ (/ NaChar (+ 1.0 (exp (/ Ev KbT)))) (* 0.5 NdChar)))
(t_1
(-
(/ NaChar (+ 1.0 (exp (/ (- (+ (+ Ev Vef) EAccept) mu) KbT))))
(/ NdChar (- -1.0 (exp (/ (- mu (- (- Ec Vef) EDonor)) KbT))))))
(t_2 (- Ec (+ (+ mu Vef) EDonor))))
(if (<= t_1 -2e+146)
t_0
(if (<= t_1 -5e-218)
(+ (/ NaChar (+ 1.0 (exp (/ EAccept KbT)))) (* 0.5 NdChar))
(if (<= t_1 0.0)
(/ NdChar (- 2.0 (/ (fma (/ (* t_2 t_2) KbT) -0.5 t_2) KbT)))
(if (<= t_1 1e-160) (/ NdChar (- (exp (/ (- Ec) KbT)) -1.0)) t_0))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar / (1.0 + exp((Ev / KbT)))) + (0.5 * NdChar);
double t_1 = (NaChar / (1.0 + exp(((((Ev + Vef) + EAccept) - mu) / KbT)))) - (NdChar / (-1.0 - exp(((mu - ((Ec - Vef) - EDonor)) / KbT))));
double t_2 = Ec - ((mu + Vef) + EDonor);
double tmp;
if (t_1 <= -2e+146) {
tmp = t_0;
} else if (t_1 <= -5e-218) {
tmp = (NaChar / (1.0 + exp((EAccept / KbT)))) + (0.5 * NdChar);
} else if (t_1 <= 0.0) {
tmp = NdChar / (2.0 - (fma(((t_2 * t_2) / KbT), -0.5, t_2) / KbT));
} else if (t_1 <= 1e-160) {
tmp = NdChar / (exp((-Ec / KbT)) - -1.0);
} else {
tmp = t_0;
}
return tmp;
}
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT)))) + Float64(0.5 * NdChar)) t_1 = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(Float64(Ev + Vef) + EAccept) - mu) / KbT)))) - Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(mu - Float64(Float64(Ec - Vef) - EDonor)) / KbT))))) t_2 = Float64(Ec - Float64(Float64(mu + Vef) + EDonor)) tmp = 0.0 if (t_1 <= -2e+146) tmp = t_0; elseif (t_1 <= -5e-218) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT)))) + Float64(0.5 * NdChar)); elseif (t_1 <= 0.0) tmp = Float64(NdChar / Float64(2.0 - Float64(fma(Float64(Float64(t_2 * t_2) / KbT), -0.5, t_2) / KbT))); elseif (t_1 <= 1e-160) tmp = Float64(NdChar / Float64(exp(Float64(Float64(-Ec) / KbT)) - -1.0)); else tmp = t_0; end return tmp end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(0.5 * NdChar), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(N[(N[(Ev + Vef), $MachinePrecision] + EAccept), $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]}, Block[{t$95$2 = N[(Ec - N[(N[(mu + Vef), $MachinePrecision] + EDonor), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$1, -2e+146], t$95$0, If[LessEqual[t$95$1, -5e-218], N[(N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(0.5 * NdChar), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$1, 0.0], N[(NdChar / N[(2.0 - N[(N[(N[(N[(t$95$2 * t$95$2), $MachinePrecision] / KbT), $MachinePrecision] * -0.5 + t$95$2), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$1, 1e-160], N[(NdChar / N[(N[Exp[N[((-Ec) / KbT), $MachinePrecision]], $MachinePrecision] - -1.0), $MachinePrecision]), $MachinePrecision], t$95$0]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{Ev}{KbT}}} + 0.5 \cdot NdChar\\
t_1 := \frac{NaChar}{1 + e^{\frac{\left(\left(Ev + Vef\right) + EAccept\right) - mu}{KbT}}} - \frac{NdChar}{-1 - e^{\frac{mu - \left(\left(Ec - Vef\right) - EDonor\right)}{KbT}}}\\
t_2 := Ec - \left(\left(mu + Vef\right) + EDonor\right)\\
\mathbf{if}\;t\_1 \leq -2 \cdot 10^{+146}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;t\_1 \leq -5 \cdot 10^{-218}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}} + 0.5 \cdot NdChar\\
\mathbf{elif}\;t\_1 \leq 0:\\
\;\;\;\;\frac{NdChar}{2 - \frac{\mathsf{fma}\left(\frac{t\_2 \cdot t\_2}{KbT}, -0.5, t\_2\right)}{KbT}}\\
\mathbf{elif}\;t\_1 \leq 10^{-160}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{-Ec}{KbT}} - -1}\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < -1.99999999999999987e146 or 9.9999999999999999e-161 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) Initial program 100.0%
Taylor expanded in KbT around inf
lower-*.f6470.7
Applied rewrites70.7%
Taylor expanded in Ev around inf
lower-/.f6452.5
Applied rewrites52.5%
if -1.99999999999999987e146 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < -5.00000000000000041e-218Initial program 100.0%
Taylor expanded in EAccept around inf
lower-/.f6472.1
Applied rewrites72.1%
Taylor expanded in KbT around inf
lower-*.f6441.3
Applied rewrites41.3%
if -5.00000000000000041e-218 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < -0.0Initial program 100.0%
Taylor expanded in NaChar 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
+-commutativeN/A
lower-+.f6493.8
Applied rewrites93.8%
Taylor expanded in KbT around -inf
Applied rewrites84.7%
if -0.0 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < 9.9999999999999999e-161Initial program 100.0%
Taylor expanded in NaChar 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
+-commutativeN/A
lower-+.f6460.7
Applied rewrites60.7%
Taylor expanded in Ec around inf
Applied rewrites53.5%
Final simplification55.3%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (* (+ NaChar NdChar) 0.5))
(t_1 (- Ec (+ (+ mu Vef) EDonor)))
(t_2
(-
(/ NaChar (+ 1.0 (exp (/ (- (+ (+ Ev Vef) EAccept) mu) KbT))))
(/ NdChar (- -1.0 (exp (/ (- mu (- (- Ec Vef) EDonor)) KbT))))))
(t_3 (/ NaChar (+ 1.0 (exp (/ EAccept KbT))))))
(if (<= t_2 -1e+100)
t_0
(if (<= t_2 -5e-275)
t_3
(if (<= t_2 5e-246)
(/ NdChar (- 2.0 (/ (fma (/ (* t_1 t_1) KbT) -0.5 t_1) KbT)))
(if (<= t_2 2e+250) t_3 (/ 1.0 (/ 1.0 t_0))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar + NdChar) * 0.5;
double t_1 = Ec - ((mu + Vef) + EDonor);
double t_2 = (NaChar / (1.0 + exp(((((Ev + Vef) + EAccept) - mu) / KbT)))) - (NdChar / (-1.0 - exp(((mu - ((Ec - Vef) - EDonor)) / KbT))));
double t_3 = NaChar / (1.0 + exp((EAccept / KbT)));
double tmp;
if (t_2 <= -1e+100) {
tmp = t_0;
} else if (t_2 <= -5e-275) {
tmp = t_3;
} else if (t_2 <= 5e-246) {
tmp = NdChar / (2.0 - (fma(((t_1 * t_1) / KbT), -0.5, t_1) / KbT));
} else if (t_2 <= 2e+250) {
tmp = t_3;
} else {
tmp = 1.0 / (1.0 / 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(Ec - Float64(Float64(mu + Vef) + EDonor)) t_2 = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(Float64(Ev + Vef) + EAccept) - mu) / KbT)))) - Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(mu - Float64(Float64(Ec - Vef) - EDonor)) / KbT))))) t_3 = Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT)))) tmp = 0.0 if (t_2 <= -1e+100) tmp = t_0; elseif (t_2 <= -5e-275) tmp = t_3; elseif (t_2 <= 5e-246) tmp = Float64(NdChar / Float64(2.0 - Float64(fma(Float64(Float64(t_1 * t_1) / KbT), -0.5, t_1) / KbT))); elseif (t_2 <= 2e+250) tmp = t_3; else tmp = Float64(1.0 / Float64(1.0 / 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[(Ec - N[(N[(mu + Vef), $MachinePrecision] + EDonor), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(N[(N[(Ev + Vef), $MachinePrecision] + EAccept), $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]}, Block[{t$95$3 = N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$2, -1e+100], t$95$0, If[LessEqual[t$95$2, -5e-275], t$95$3, If[LessEqual[t$95$2, 5e-246], N[(NdChar / N[(2.0 - N[(N[(N[(N[(t$95$1 * t$95$1), $MachinePrecision] / KbT), $MachinePrecision] * -0.5 + t$95$1), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$2, 2e+250], t$95$3, N[(1.0 / N[(1.0 / t$95$0), $MachinePrecision]), $MachinePrecision]]]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(NaChar + NdChar\right) \cdot 0.5\\
t_1 := Ec - \left(\left(mu + Vef\right) + EDonor\right)\\
t_2 := \frac{NaChar}{1 + e^{\frac{\left(\left(Ev + Vef\right) + EAccept\right) - mu}{KbT}}} - \frac{NdChar}{-1 - e^{\frac{mu - \left(\left(Ec - Vef\right) - EDonor\right)}{KbT}}}\\
t_3 := \frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}}\\
\mathbf{if}\;t\_2 \leq -1 \cdot 10^{+100}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;t\_2 \leq -5 \cdot 10^{-275}:\\
\;\;\;\;t\_3\\
\mathbf{elif}\;t\_2 \leq 5 \cdot 10^{-246}:\\
\;\;\;\;\frac{NdChar}{2 - \frac{\mathsf{fma}\left(\frac{t\_1 \cdot t\_1}{KbT}, -0.5, t\_1\right)}{KbT}}\\
\mathbf{elif}\;t\_2 \leq 2 \cdot 10^{+250}:\\
\;\;\;\;t\_3\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{\frac{1}{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.00000000000000002e100Initial program 100.0%
Taylor expanded in KbT around inf
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6440.0
Applied rewrites40.0%
if -1.00000000000000002e100 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < -4.99999999999999983e-275 or 4.9999999999999997e-246 < (+.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.9999999999999998e250Initial program 100.0%
Taylor expanded in NaChar around inf
lower-/.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
lower--.f64N/A
lower-+.f64N/A
+-commutativeN/A
lower-+.f6457.5
Applied rewrites57.5%
Taylor expanded in EAccept around inf
Applied rewrites39.4%
if -4.99999999999999983e-275 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < 4.9999999999999997e-246Initial program 100.0%
Taylor expanded in NaChar 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
+-commutativeN/A
lower-+.f6498.0
Applied rewrites98.0%
Taylor expanded in KbT around -inf
Applied rewrites81.5%
if 1.9999999999999998e250 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) Initial program 99.9%
Taylor expanded in KbT around inf
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6460.6
Applied rewrites60.6%
Applied rewrites10.5%
Applied rewrites60.6%
Final simplification48.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)))))
(t_1 (/ NaChar (+ 1.0 (exp (/ (- (+ (+ Ev Vef) EAccept) mu) KbT)))))
(t_2 (- t_1 t_0))
(t_3 (- (/ NaChar (+ 1.0 (exp (/ EAccept KbT)))) t_0)))
(if (<= t_2 -2e+272)
(+ (* 0.5 NdChar) t_1)
(if (<= t_2 -5e-275)
t_3
(if (<= t_2 2e-255)
(/ NdChar (- (exp (/ (- (+ (+ mu Vef) EDonor) Ec) KbT)) -1.0))
t_3)))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (-1.0 - exp(((mu - ((Ec - Vef) - EDonor)) / KbT)));
double t_1 = NaChar / (1.0 + exp(((((Ev + Vef) + EAccept) - mu) / KbT)));
double t_2 = t_1 - t_0;
double t_3 = (NaChar / (1.0 + exp((EAccept / KbT)))) - t_0;
double tmp;
if (t_2 <= -2e+272) {
tmp = (0.5 * NdChar) + t_1;
} else if (t_2 <= -5e-275) {
tmp = t_3;
} else if (t_2 <= 2e-255) {
tmp = NdChar / (exp(((((mu + Vef) + EDonor) - Ec) / KbT)) - -1.0);
} else {
tmp = t_3;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: t_2
real(8) :: t_3
real(8) :: tmp
t_0 = ndchar / ((-1.0d0) - exp(((mu - ((ec - vef) - edonor)) / kbt)))
t_1 = nachar / (1.0d0 + exp(((((ev + vef) + eaccept) - mu) / kbt)))
t_2 = t_1 - t_0
t_3 = (nachar / (1.0d0 + exp((eaccept / kbt)))) - t_0
if (t_2 <= (-2d+272)) then
tmp = (0.5d0 * ndchar) + t_1
else if (t_2 <= (-5d-275)) then
tmp = t_3
else if (t_2 <= 2d-255) then
tmp = ndchar / (exp(((((mu + vef) + edonor) - ec) / kbt)) - (-1.0d0))
else
tmp = t_3
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (-1.0 - Math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)));
double t_1 = NaChar / (1.0 + Math.exp(((((Ev + Vef) + EAccept) - mu) / KbT)));
double t_2 = t_1 - t_0;
double t_3 = (NaChar / (1.0 + Math.exp((EAccept / KbT)))) - t_0;
double tmp;
if (t_2 <= -2e+272) {
tmp = (0.5 * NdChar) + t_1;
} else if (t_2 <= -5e-275) {
tmp = t_3;
} else if (t_2 <= 2e-255) {
tmp = NdChar / (Math.exp(((((mu + Vef) + EDonor) - Ec) / KbT)) - -1.0);
} else {
tmp = t_3;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NdChar / (-1.0 - math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT))) t_1 = NaChar / (1.0 + math.exp(((((Ev + Vef) + EAccept) - mu) / KbT))) t_2 = t_1 - t_0 t_3 = (NaChar / (1.0 + math.exp((EAccept / KbT)))) - t_0 tmp = 0 if t_2 <= -2e+272: tmp = (0.5 * NdChar) + t_1 elif t_2 <= -5e-275: tmp = t_3 elif t_2 <= 2e-255: tmp = NdChar / (math.exp(((((mu + Vef) + EDonor) - Ec) / KbT)) - -1.0) else: tmp = t_3 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(mu - Float64(Float64(Ec - Vef) - EDonor)) / KbT)))) t_1 = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(Float64(Ev + Vef) + EAccept) - mu) / KbT)))) t_2 = Float64(t_1 - t_0) t_3 = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT)))) - t_0) tmp = 0.0 if (t_2 <= -2e+272) tmp = Float64(Float64(0.5 * NdChar) + t_1); elseif (t_2 <= -5e-275) tmp = t_3; elseif (t_2 <= 2e-255) tmp = Float64(NdChar / Float64(exp(Float64(Float64(Float64(Float64(mu + Vef) + EDonor) - Ec) / KbT)) - -1.0)); else tmp = t_3; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NdChar / (-1.0 - exp(((mu - ((Ec - Vef) - EDonor)) / KbT))); t_1 = NaChar / (1.0 + exp(((((Ev + Vef) + EAccept) - mu) / KbT))); t_2 = t_1 - t_0; t_3 = (NaChar / (1.0 + exp((EAccept / KbT)))) - t_0; tmp = 0.0; if (t_2 <= -2e+272) tmp = (0.5 * NdChar) + t_1; elseif (t_2 <= -5e-275) tmp = t_3; elseif (t_2 <= 2e-255) tmp = NdChar / (exp(((((mu + Vef) + EDonor) - Ec) / KbT)) - -1.0); else tmp = t_3; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NdChar / N[(-1.0 - N[Exp[N[(N[(mu - N[(N[(Ec - Vef), $MachinePrecision] - EDonor), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(NaChar / N[(1.0 + N[Exp[N[(N[(N[(N[(Ev + Vef), $MachinePrecision] + EAccept), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(t$95$1 - t$95$0), $MachinePrecision]}, Block[{t$95$3 = N[(N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - t$95$0), $MachinePrecision]}, If[LessEqual[t$95$2, -2e+272], N[(N[(0.5 * NdChar), $MachinePrecision] + t$95$1), $MachinePrecision], If[LessEqual[t$95$2, -5e-275], t$95$3, If[LessEqual[t$95$2, 2e-255], N[(NdChar / N[(N[Exp[N[(N[(N[(N[(mu + Vef), $MachinePrecision] + EDonor), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] - -1.0), $MachinePrecision]), $MachinePrecision], t$95$3]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{-1 - e^{\frac{mu - \left(\left(Ec - Vef\right) - EDonor\right)}{KbT}}}\\
t_1 := \frac{NaChar}{1 + e^{\frac{\left(\left(Ev + Vef\right) + EAccept\right) - mu}{KbT}}}\\
t_2 := t\_1 - t\_0\\
t_3 := \frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}} - t\_0\\
\mathbf{if}\;t\_2 \leq -2 \cdot 10^{+272}:\\
\;\;\;\;0.5 \cdot NdChar + t\_1\\
\mathbf{elif}\;t\_2 \leq -5 \cdot 10^{-275}:\\
\;\;\;\;t\_3\\
\mathbf{elif}\;t\_2 \leq 2 \cdot 10^{-255}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{\left(\left(mu + Vef\right) + EDonor\right) - Ec}{KbT}} - -1}\\
\mathbf{else}:\\
\;\;\;\;t\_3\\
\end{array}
\end{array}
if (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < -2.0000000000000001e272Initial program 100.0%
Taylor expanded in KbT around inf
lower-*.f6489.2
Applied rewrites89.2%
if -2.0000000000000001e272 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < -4.99999999999999983e-275 or 2e-255 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) Initial program 100.0%
Taylor expanded in EAccept around inf
lower-/.f6475.2
Applied rewrites75.2%
if -4.99999999999999983e-275 < (+.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-255Initial program 100.0%
Taylor expanded in NaChar 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
+-commutativeN/A
lower-+.f64100.0
Applied rewrites100.0%
Final simplification80.5%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (+ (/ NaChar (+ 1.0 (exp (/ EAccept KbT)))) (* 0.5 NdChar)))
(t_1 (- Ec (+ (+ mu Vef) EDonor)))
(t_2
(-
(/ NaChar (+ 1.0 (exp (/ (- (+ (+ Ev Vef) EAccept) mu) KbT))))
(/ NdChar (- -1.0 (exp (/ (- mu (- (- Ec Vef) EDonor)) KbT)))))))
(if (<= t_2 -5e-218)
t_0
(if (<= t_2 0.0)
(/ NdChar (- 2.0 (/ (fma (/ (* t_1 t_1) KbT) -0.5 t_1) KbT)))
(if (<= t_2 1e-160) (/ NdChar (- (exp (/ (- Ec) KbT)) -1.0)) t_0)))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar / (1.0 + exp((EAccept / KbT)))) + (0.5 * NdChar);
double t_1 = Ec - ((mu + Vef) + EDonor);
double t_2 = (NaChar / (1.0 + exp(((((Ev + Vef) + EAccept) - mu) / KbT)))) - (NdChar / (-1.0 - exp(((mu - ((Ec - Vef) - EDonor)) / KbT))));
double tmp;
if (t_2 <= -5e-218) {
tmp = t_0;
} else if (t_2 <= 0.0) {
tmp = NdChar / (2.0 - (fma(((t_1 * t_1) / KbT), -0.5, t_1) / KbT));
} else if (t_2 <= 1e-160) {
tmp = NdChar / (exp((-Ec / KbT)) - -1.0);
} else {
tmp = t_0;
}
return tmp;
}
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT)))) + Float64(0.5 * NdChar)) t_1 = Float64(Ec - Float64(Float64(mu + Vef) + EDonor)) t_2 = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(Float64(Ev + Vef) + EAccept) - mu) / KbT)))) - Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(mu - Float64(Float64(Ec - Vef) - EDonor)) / KbT))))) tmp = 0.0 if (t_2 <= -5e-218) tmp = t_0; elseif (t_2 <= 0.0) tmp = Float64(NdChar / Float64(2.0 - Float64(fma(Float64(Float64(t_1 * t_1) / KbT), -0.5, t_1) / KbT))); elseif (t_2 <= 1e-160) tmp = Float64(NdChar / Float64(exp(Float64(Float64(-Ec) / KbT)) - -1.0)); else tmp = t_0; end return tmp end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(0.5 * NdChar), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(Ec - N[(N[(mu + Vef), $MachinePrecision] + EDonor), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(N[(N[(Ev + Vef), $MachinePrecision] + EAccept), $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$2, -5e-218], t$95$0, If[LessEqual[t$95$2, 0.0], N[(NdChar / N[(2.0 - N[(N[(N[(N[(t$95$1 * t$95$1), $MachinePrecision] / KbT), $MachinePrecision] * -0.5 + t$95$1), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$2, 1e-160], N[(NdChar / N[(N[Exp[N[((-Ec) / KbT), $MachinePrecision]], $MachinePrecision] - -1.0), $MachinePrecision]), $MachinePrecision], t$95$0]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}} + 0.5 \cdot NdChar\\
t_1 := Ec - \left(\left(mu + Vef\right) + EDonor\right)\\
t_2 := \frac{NaChar}{1 + e^{\frac{\left(\left(Ev + Vef\right) + EAccept\right) - mu}{KbT}}} - \frac{NdChar}{-1 - e^{\frac{mu - \left(\left(Ec - Vef\right) - EDonor\right)}{KbT}}}\\
\mathbf{if}\;t\_2 \leq -5 \cdot 10^{-218}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;t\_2 \leq 0:\\
\;\;\;\;\frac{NdChar}{2 - \frac{\mathsf{fma}\left(\frac{t\_1 \cdot t\_1}{KbT}, -0.5, t\_1\right)}{KbT}}\\
\mathbf{elif}\;t\_2 \leq 10^{-160}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{-Ec}{KbT}} - -1}\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < -5.00000000000000041e-218 or 9.9999999999999999e-161 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) Initial program 100.0%
Taylor expanded in EAccept around inf
lower-/.f6474.6
Applied rewrites74.6%
Taylor expanded in KbT around inf
lower-*.f6449.2
Applied rewrites49.2%
if -5.00000000000000041e-218 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < -0.0Initial program 100.0%
Taylor expanded in NaChar 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
+-commutativeN/A
lower-+.f6493.8
Applied rewrites93.8%
Taylor expanded in KbT around -inf
Applied rewrites84.7%
if -0.0 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < 9.9999999999999999e-161Initial program 100.0%
Taylor expanded in NaChar 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
+-commutativeN/A
lower-+.f6460.7
Applied rewrites60.7%
Taylor expanded in Ec around inf
Applied rewrites53.5%
Final simplification55.7%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (- Ec (+ (+ mu Vef) EDonor)))
(t_1 (* (+ NaChar NdChar) 0.5))
(t_2
(-
(/ NaChar (+ 1.0 (exp (/ (- (+ (+ Ev Vef) EAccept) mu) KbT))))
(/ NdChar (- -1.0 (exp (/ (- mu (- (- Ec Vef) EDonor)) KbT)))))))
(if (<= t_2 -2e-178)
t_1
(if (<= t_2 2e-171)
(/ NdChar (- 2.0 (/ (fma (/ (* t_0 t_0) KbT) -0.5 t_0) KbT)))
t_1))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = Ec - ((mu + Vef) + EDonor);
double t_1 = (NaChar + NdChar) * 0.5;
double t_2 = (NaChar / (1.0 + exp(((((Ev + Vef) + EAccept) - mu) / KbT)))) - (NdChar / (-1.0 - exp(((mu - ((Ec - Vef) - EDonor)) / KbT))));
double tmp;
if (t_2 <= -2e-178) {
tmp = t_1;
} else if (t_2 <= 2e-171) {
tmp = NdChar / (2.0 - (fma(((t_0 * t_0) / KbT), -0.5, t_0) / KbT));
} else {
tmp = t_1;
}
return tmp;
}
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Ec - Float64(Float64(mu + Vef) + EDonor)) t_1 = Float64(Float64(NaChar + NdChar) * 0.5) t_2 = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(Float64(Ev + Vef) + EAccept) - mu) / KbT)))) - Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(mu - Float64(Float64(Ec - Vef) - EDonor)) / KbT))))) tmp = 0.0 if (t_2 <= -2e-178) tmp = t_1; elseif (t_2 <= 2e-171) tmp = Float64(NdChar / Float64(2.0 - Float64(fma(Float64(Float64(t_0 * t_0) / KbT), -0.5, t_0) / KbT))); else tmp = t_1; end return tmp end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(Ec - N[(N[(mu + Vef), $MachinePrecision] + EDonor), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NaChar + NdChar), $MachinePrecision] * 0.5), $MachinePrecision]}, Block[{t$95$2 = N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(N[(N[(Ev + Vef), $MachinePrecision] + EAccept), $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$2, -2e-178], t$95$1, If[LessEqual[t$95$2, 2e-171], N[(NdChar / N[(2.0 - N[(N[(N[(N[(t$95$0 * t$95$0), $MachinePrecision] / KbT), $MachinePrecision] * -0.5 + t$95$0), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$1]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := Ec - \left(\left(mu + Vef\right) + EDonor\right)\\
t_1 := \left(NaChar + NdChar\right) \cdot 0.5\\
t_2 := \frac{NaChar}{1 + e^{\frac{\left(\left(Ev + Vef\right) + EAccept\right) - mu}{KbT}}} - \frac{NdChar}{-1 - e^{\frac{mu - \left(\left(Ec - Vef\right) - EDonor\right)}{KbT}}}\\
\mathbf{if}\;t\_2 \leq -2 \cdot 10^{-178}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;t\_2 \leq 2 \cdot 10^{-171}:\\
\;\;\;\;\frac{NdChar}{2 - \frac{\mathsf{fma}\left(\frac{t\_0 \cdot t\_0}{KbT}, -0.5, t\_0\right)}{KbT}}\\
\mathbf{else}:\\
\;\;\;\;t\_1\\
\end{array}
\end{array}
if (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < -1.9999999999999999e-178 or 2e-171 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) Initial program 100.0%
Taylor expanded in KbT around inf
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6435.7
Applied rewrites35.7%
if -1.9999999999999999e-178 < (+.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-171Initial program 100.0%
Taylor expanded in NaChar 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
+-commutativeN/A
lower-+.f6484.9
Applied rewrites84.9%
Taylor expanded in KbT around -inf
Applied rewrites64.7%
Final simplification42.7%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (- Ec (+ mu Vef)))
(t_1 (* (+ NaChar NdChar) 0.5))
(t_2
(-
(/ NaChar (+ 1.0 (exp (/ (- (+ (+ Ev Vef) EAccept) mu) KbT))))
(/ NdChar (- -1.0 (exp (/ (- mu (- (- Ec Vef) EDonor)) KbT)))))))
(if (<= t_2 -2e-178)
t_1
(if (<= t_2 2e-171)
(/
NdChar
(- 2.0 (/ (- (fma (/ (* t_0 t_0) KbT) -0.5 Ec) (+ mu Vef)) KbT)))
t_1))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = Ec - (mu + Vef);
double t_1 = (NaChar + NdChar) * 0.5;
double t_2 = (NaChar / (1.0 + exp(((((Ev + Vef) + EAccept) - mu) / KbT)))) - (NdChar / (-1.0 - exp(((mu - ((Ec - Vef) - EDonor)) / KbT))));
double tmp;
if (t_2 <= -2e-178) {
tmp = t_1;
} else if (t_2 <= 2e-171) {
tmp = NdChar / (2.0 - ((fma(((t_0 * t_0) / KbT), -0.5, Ec) - (mu + Vef)) / KbT));
} else {
tmp = t_1;
}
return tmp;
}
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Ec - Float64(mu + Vef)) t_1 = Float64(Float64(NaChar + NdChar) * 0.5) t_2 = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(Float64(Ev + Vef) + EAccept) - mu) / KbT)))) - Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(mu - Float64(Float64(Ec - Vef) - EDonor)) / KbT))))) tmp = 0.0 if (t_2 <= -2e-178) tmp = t_1; elseif (t_2 <= 2e-171) tmp = Float64(NdChar / Float64(2.0 - Float64(Float64(fma(Float64(Float64(t_0 * t_0) / KbT), -0.5, Ec) - Float64(mu + Vef)) / KbT))); else tmp = t_1; end return tmp end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(Ec - N[(mu + Vef), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NaChar + NdChar), $MachinePrecision] * 0.5), $MachinePrecision]}, Block[{t$95$2 = N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(N[(N[(Ev + Vef), $MachinePrecision] + EAccept), $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$2, -2e-178], t$95$1, If[LessEqual[t$95$2, 2e-171], N[(NdChar / N[(2.0 - N[(N[(N[(N[(N[(t$95$0 * t$95$0), $MachinePrecision] / KbT), $MachinePrecision] * -0.5 + Ec), $MachinePrecision] - N[(mu + Vef), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$1]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := Ec - \left(mu + Vef\right)\\
t_1 := \left(NaChar + NdChar\right) \cdot 0.5\\
t_2 := \frac{NaChar}{1 + e^{\frac{\left(\left(Ev + Vef\right) + EAccept\right) - mu}{KbT}}} - \frac{NdChar}{-1 - e^{\frac{mu - \left(\left(Ec - Vef\right) - EDonor\right)}{KbT}}}\\
\mathbf{if}\;t\_2 \leq -2 \cdot 10^{-178}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;t\_2 \leq 2 \cdot 10^{-171}:\\
\;\;\;\;\frac{NdChar}{2 - \frac{\mathsf{fma}\left(\frac{t\_0 \cdot t\_0}{KbT}, -0.5, Ec\right) - \left(mu + Vef\right)}{KbT}}\\
\mathbf{else}:\\
\;\;\;\;t\_1\\
\end{array}
\end{array}
if (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < -1.9999999999999999e-178 or 2e-171 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) Initial program 100.0%
Taylor expanded in KbT around inf
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6435.7
Applied rewrites35.7%
if -1.9999999999999999e-178 < (+.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-171Initial program 100.0%
Taylor expanded in NaChar 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
+-commutativeN/A
lower-+.f6484.9
Applied rewrites84.9%
Taylor expanded in KbT around -inf
Applied rewrites64.7%
Taylor expanded in EDonor around 0
Applied rewrites58.7%
Final simplification41.3%
(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 (/ (- (+ (+ Ev Vef) EAccept) mu) KbT))))
(/ NdChar (- -1.0 (exp (/ (- mu (- (- Ec Vef) EDonor)) KbT)))))))
(if (<= t_1 -5e-275)
t_0
(if (<= t_1 1e-284) (/ NdChar (/ (* (* Vef Vef) 0.5) (* KbT KbT))) t_0))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar + NdChar) * 0.5;
double t_1 = (NaChar / (1.0 + exp(((((Ev + Vef) + EAccept) - mu) / KbT)))) - (NdChar / (-1.0 - exp(((mu - ((Ec - Vef) - EDonor)) / KbT))));
double tmp;
if (t_1 <= -5e-275) {
tmp = t_0;
} else if (t_1 <= 1e-284) {
tmp = NdChar / (((Vef * Vef) * 0.5) / (KbT * 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(((((ev + vef) + eaccept) - mu) / kbt)))) - (ndchar / ((-1.0d0) - exp(((mu - ((ec - vef) - edonor)) / kbt))))
if (t_1 <= (-5d-275)) then
tmp = t_0
else if (t_1 <= 1d-284) then
tmp = ndchar / (((vef * vef) * 0.5d0) / (kbt * 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(((((Ev + Vef) + EAccept) - mu) / KbT)))) - (NdChar / (-1.0 - Math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT))));
double tmp;
if (t_1 <= -5e-275) {
tmp = t_0;
} else if (t_1 <= 1e-284) {
tmp = NdChar / (((Vef * Vef) * 0.5) / (KbT * 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(((((Ev + Vef) + EAccept) - mu) / KbT)))) - (NdChar / (-1.0 - math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)))) tmp = 0 if t_1 <= -5e-275: tmp = t_0 elif t_1 <= 1e-284: tmp = NdChar / (((Vef * Vef) * 0.5) / (KbT * 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(Float64(Ev + Vef) + EAccept) - mu) / KbT)))) - Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(mu - Float64(Float64(Ec - Vef) - EDonor)) / KbT))))) tmp = 0.0 if (t_1 <= -5e-275) tmp = t_0; elseif (t_1 <= 1e-284) tmp = Float64(NdChar / Float64(Float64(Float64(Vef * Vef) * 0.5) / Float64(KbT * 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(((((Ev + Vef) + EAccept) - mu) / KbT)))) - (NdChar / (-1.0 - exp(((mu - ((Ec - Vef) - EDonor)) / KbT)))); tmp = 0.0; if (t_1 <= -5e-275) tmp = t_0; elseif (t_1 <= 1e-284) tmp = NdChar / (((Vef * Vef) * 0.5) / (KbT * 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[(N[(Ev + Vef), $MachinePrecision] + EAccept), $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, -5e-275], t$95$0, If[LessEqual[t$95$1, 1e-284], N[(NdChar / N[(N[(N[(Vef * Vef), $MachinePrecision] * 0.5), $MachinePrecision] / N[(KbT * 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(\left(Ev + Vef\right) + EAccept\right) - mu}{KbT}}} - \frac{NdChar}{-1 - e^{\frac{mu - \left(\left(Ec - Vef\right) - EDonor\right)}{KbT}}}\\
\mathbf{if}\;t\_1 \leq -5 \cdot 10^{-275}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;t\_1 \leq 10^{-284}:\\
\;\;\;\;\frac{NdChar}{\frac{\left(Vef \cdot Vef\right) \cdot 0.5}{KbT \cdot 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))))) < -4.99999999999999983e-275 or 1.00000000000000004e-284 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) Initial program 100.0%
Taylor expanded in KbT around inf
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6433.5
Applied rewrites33.5%
if -4.99999999999999983e-275 < (+.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.00000000000000004e-284Initial program 100.0%
Taylor expanded in NaChar 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
+-commutativeN/A
lower-+.f64100.0
Applied rewrites100.0%
Taylor expanded in KbT around -inf
Applied rewrites84.8%
Taylor expanded in Vef around inf
Applied rewrites53.9%
Final simplification37.1%
(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 (/ (- (+ (+ Ev Vef) EAccept) mu) KbT))))
(/ NdChar (- -1.0 (exp (/ (- mu (- (- Ec Vef) EDonor)) KbT)))))))
(if (<= t_1 -2e-178)
t_0
(if (<= t_1 2e-171)
(/ NdChar (- 2.0 (/ (- Ec (+ (+ mu Vef) EDonor)) KbT)))
t_0))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar + NdChar) * 0.5;
double t_1 = (NaChar / (1.0 + exp(((((Ev + Vef) + EAccept) - mu) / KbT)))) - (NdChar / (-1.0 - exp(((mu - ((Ec - Vef) - EDonor)) / KbT))));
double tmp;
if (t_1 <= -2e-178) {
tmp = t_0;
} else if (t_1 <= 2e-171) {
tmp = NdChar / (2.0 - ((Ec - ((mu + Vef) + EDonor)) / KbT));
} else {
tmp = t_0;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = (nachar + ndchar) * 0.5d0
t_1 = (nachar / (1.0d0 + exp(((((ev + vef) + eaccept) - mu) / kbt)))) - (ndchar / ((-1.0d0) - exp(((mu - ((ec - vef) - edonor)) / kbt))))
if (t_1 <= (-2d-178)) then
tmp = t_0
else if (t_1 <= 2d-171) then
tmp = ndchar / (2.0d0 - ((ec - ((mu + vef) + edonor)) / kbt))
else
tmp = t_0
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar + NdChar) * 0.5;
double t_1 = (NaChar / (1.0 + Math.exp(((((Ev + Vef) + EAccept) - mu) / KbT)))) - (NdChar / (-1.0 - Math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT))));
double tmp;
if (t_1 <= -2e-178) {
tmp = t_0;
} else if (t_1 <= 2e-171) {
tmp = NdChar / (2.0 - ((Ec - ((mu + Vef) + EDonor)) / 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(((((Ev + Vef) + EAccept) - mu) / KbT)))) - (NdChar / (-1.0 - math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)))) tmp = 0 if t_1 <= -2e-178: tmp = t_0 elif t_1 <= 2e-171: tmp = NdChar / (2.0 - ((Ec - ((mu + Vef) + EDonor)) / 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(Float64(Ev + Vef) + EAccept) - mu) / KbT)))) - Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(mu - Float64(Float64(Ec - Vef) - EDonor)) / KbT))))) tmp = 0.0 if (t_1 <= -2e-178) tmp = t_0; elseif (t_1 <= 2e-171) tmp = Float64(NdChar / Float64(2.0 - Float64(Float64(Ec - Float64(Float64(mu + Vef) + EDonor)) / KbT))); else tmp = t_0; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = (NaChar + NdChar) * 0.5; t_1 = (NaChar / (1.0 + exp(((((Ev + Vef) + EAccept) - mu) / KbT)))) - (NdChar / (-1.0 - exp(((mu - ((Ec - Vef) - EDonor)) / KbT)))); tmp = 0.0; if (t_1 <= -2e-178) tmp = t_0; elseif (t_1 <= 2e-171) tmp = NdChar / (2.0 - ((Ec - ((mu + Vef) + EDonor)) / KbT)); else tmp = t_0; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(NaChar + NdChar), $MachinePrecision] * 0.5), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(N[(N[(Ev + Vef), $MachinePrecision] + EAccept), $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-178], t$95$0, If[LessEqual[t$95$1, 2e-171], N[(NdChar / N[(2.0 - N[(N[(Ec - N[(N[(mu + Vef), $MachinePrecision] + EDonor), $MachinePrecision]), $MachinePrecision] / 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(\left(Ev + Vef\right) + EAccept\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^{-178}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;t\_1 \leq 2 \cdot 10^{-171}:\\
\;\;\;\;\frac{NdChar}{2 - \frac{Ec - \left(\left(mu + Vef\right) + EDonor\right)}{KbT}}\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < -1.9999999999999999e-178 or 2e-171 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) Initial program 100.0%
Taylor expanded in KbT around inf
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6435.7
Applied rewrites35.7%
if -1.9999999999999999e-178 < (+.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-171Initial program 100.0%
Taylor expanded in NaChar 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
+-commutativeN/A
lower-+.f6484.9
Applied rewrites84.9%
Taylor expanded in KbT around -inf
Applied rewrites64.7%
Taylor expanded in KbT around inf
Applied rewrites37.5%
Final simplification36.1%
(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 (/ (- (+ (+ Ev Vef) EAccept) mu) KbT))))
(/ NdChar (- -1.0 (exp (/ (- mu (- (- Ec Vef) EDonor)) KbT)))))))
(if (<= t_1 -1e-200)
t_0
(if (<= t_1 2e-171)
(/ (* (* NdChar NdChar) -0.5) (- NaChar NdChar))
t_0))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar + NdChar) * 0.5;
double t_1 = (NaChar / (1.0 + exp(((((Ev + Vef) + EAccept) - mu) / KbT)))) - (NdChar / (-1.0 - exp(((mu - ((Ec - Vef) - EDonor)) / KbT))));
double tmp;
if (t_1 <= -1e-200) {
tmp = t_0;
} else if (t_1 <= 2e-171) {
tmp = ((NdChar * NdChar) * -0.5) / (NaChar - NdChar);
} else {
tmp = t_0;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = (nachar + ndchar) * 0.5d0
t_1 = (nachar / (1.0d0 + exp(((((ev + vef) + eaccept) - mu) / kbt)))) - (ndchar / ((-1.0d0) - exp(((mu - ((ec - vef) - edonor)) / kbt))))
if (t_1 <= (-1d-200)) then
tmp = t_0
else if (t_1 <= 2d-171) then
tmp = ((ndchar * ndchar) * (-0.5d0)) / (nachar - ndchar)
else
tmp = t_0
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar + NdChar) * 0.5;
double t_1 = (NaChar / (1.0 + Math.exp(((((Ev + Vef) + EAccept) - mu) / KbT)))) - (NdChar / (-1.0 - Math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT))));
double tmp;
if (t_1 <= -1e-200) {
tmp = t_0;
} else if (t_1 <= 2e-171) {
tmp = ((NdChar * NdChar) * -0.5) / (NaChar - 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(((((Ev + Vef) + EAccept) - mu) / KbT)))) - (NdChar / (-1.0 - math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)))) tmp = 0 if t_1 <= -1e-200: tmp = t_0 elif t_1 <= 2e-171: tmp = ((NdChar * NdChar) * -0.5) / (NaChar - 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(Float64(Ev + Vef) + EAccept) - mu) / KbT)))) - Float64(NdChar / Float64(-1.0 - exp(Float64(Float64(mu - Float64(Float64(Ec - Vef) - EDonor)) / KbT))))) tmp = 0.0 if (t_1 <= -1e-200) tmp = t_0; elseif (t_1 <= 2e-171) tmp = Float64(Float64(Float64(NdChar * NdChar) * -0.5) / Float64(NaChar - NdChar)); else tmp = t_0; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = (NaChar + NdChar) * 0.5; t_1 = (NaChar / (1.0 + exp(((((Ev + Vef) + EAccept) - mu) / KbT)))) - (NdChar / (-1.0 - exp(((mu - ((Ec - Vef) - EDonor)) / KbT)))); tmp = 0.0; if (t_1 <= -1e-200) tmp = t_0; elseif (t_1 <= 2e-171) tmp = ((NdChar * NdChar) * -0.5) / (NaChar - NdChar); else tmp = t_0; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(NaChar + NdChar), $MachinePrecision] * 0.5), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(N[(N[(Ev + Vef), $MachinePrecision] + EAccept), $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, -1e-200], t$95$0, If[LessEqual[t$95$1, 2e-171], N[(N[(N[(NdChar * NdChar), $MachinePrecision] * -0.5), $MachinePrecision] / N[(NaChar - 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(\left(Ev + Vef\right) + EAccept\right) - mu}{KbT}}} - \frac{NdChar}{-1 - e^{\frac{mu - \left(\left(Ec - Vef\right) - EDonor\right)}{KbT}}}\\
\mathbf{if}\;t\_1 \leq -1 \cdot 10^{-200}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;t\_1 \leq 2 \cdot 10^{-171}:\\
\;\;\;\;\frac{\left(NdChar \cdot NdChar\right) \cdot -0.5}{NaChar - NdChar}\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < -9.9999999999999998e-201 or 2e-171 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) Initial program 100.0%
Taylor expanded in KbT around inf
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6435.5
Applied rewrites35.5%
if -9.9999999999999998e-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))))) < 2e-171Initial program 100.0%
Taylor expanded in KbT around inf
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f642.9
Applied rewrites2.9%
Applied rewrites7.8%
Taylor expanded in NaChar around 0
Applied rewrites24.2%
Final simplification32.9%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (exp (/ Vef KbT))) (t_1 (/ NdChar (- t_0 -1.0))))
(if (<= Vef -5e+154)
(/ NaChar (+ 1.0 t_0))
(if (<= Vef -2.1e+75)
t_1
(if (<= Vef 1.7e-273)
(/ NaChar (+ 1.0 (exp (/ EAccept KbT))))
(if (<= Vef 1.2e-139)
(/ NaChar (+ 1.0 (exp (/ Ev KbT))))
(if (<= Vef 3.2e+116)
(/ NdChar (- (exp (/ mu KbT)) -1.0))
t_1)))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = exp((Vef / KbT));
double t_1 = NdChar / (t_0 - -1.0);
double tmp;
if (Vef <= -5e+154) {
tmp = NaChar / (1.0 + t_0);
} else if (Vef <= -2.1e+75) {
tmp = t_1;
} else if (Vef <= 1.7e-273) {
tmp = NaChar / (1.0 + exp((EAccept / KbT)));
} else if (Vef <= 1.2e-139) {
tmp = NaChar / (1.0 + exp((Ev / KbT)));
} else if (Vef <= 3.2e+116) {
tmp = NdChar / (exp((mu / KbT)) - -1.0);
} else {
tmp = t_1;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = exp((vef / kbt))
t_1 = ndchar / (t_0 - (-1.0d0))
if (vef <= (-5d+154)) then
tmp = nachar / (1.0d0 + t_0)
else if (vef <= (-2.1d+75)) then
tmp = t_1
else if (vef <= 1.7d-273) then
tmp = nachar / (1.0d0 + exp((eaccept / kbt)))
else if (vef <= 1.2d-139) then
tmp = nachar / (1.0d0 + exp((ev / kbt)))
else if (vef <= 3.2d+116) then
tmp = ndchar / (exp((mu / kbt)) - (-1.0d0))
else
tmp = t_1
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = Math.exp((Vef / KbT));
double t_1 = NdChar / (t_0 - -1.0);
double tmp;
if (Vef <= -5e+154) {
tmp = NaChar / (1.0 + t_0);
} else if (Vef <= -2.1e+75) {
tmp = t_1;
} else if (Vef <= 1.7e-273) {
tmp = NaChar / (1.0 + Math.exp((EAccept / KbT)));
} else if (Vef <= 1.2e-139) {
tmp = NaChar / (1.0 + Math.exp((Ev / KbT)));
} else if (Vef <= 3.2e+116) {
tmp = NdChar / (Math.exp((mu / KbT)) - -1.0);
} else {
tmp = t_1;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = math.exp((Vef / KbT)) t_1 = NdChar / (t_0 - -1.0) tmp = 0 if Vef <= -5e+154: tmp = NaChar / (1.0 + t_0) elif Vef <= -2.1e+75: tmp = t_1 elif Vef <= 1.7e-273: tmp = NaChar / (1.0 + math.exp((EAccept / KbT))) elif Vef <= 1.2e-139: tmp = NaChar / (1.0 + math.exp((Ev / KbT))) elif Vef <= 3.2e+116: tmp = NdChar / (math.exp((mu / KbT)) - -1.0) else: tmp = t_1 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = exp(Float64(Vef / KbT)) t_1 = Float64(NdChar / Float64(t_0 - -1.0)) tmp = 0.0 if (Vef <= -5e+154) tmp = Float64(NaChar / Float64(1.0 + t_0)); elseif (Vef <= -2.1e+75) tmp = t_1; elseif (Vef <= 1.7e-273) tmp = Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT)))); elseif (Vef <= 1.2e-139) tmp = Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT)))); elseif (Vef <= 3.2e+116) tmp = Float64(NdChar / Float64(exp(Float64(mu / KbT)) - -1.0)); else tmp = t_1; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = exp((Vef / KbT)); t_1 = NdChar / (t_0 - -1.0); tmp = 0.0; if (Vef <= -5e+154) tmp = NaChar / (1.0 + t_0); elseif (Vef <= -2.1e+75) tmp = t_1; elseif (Vef <= 1.7e-273) tmp = NaChar / (1.0 + exp((EAccept / KbT))); elseif (Vef <= 1.2e-139) tmp = NaChar / (1.0 + exp((Ev / KbT))); elseif (Vef <= 3.2e+116) tmp = NdChar / (exp((mu / KbT)) - -1.0); else tmp = t_1; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[(NdChar / N[(t$95$0 - -1.0), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[Vef, -5e+154], N[(NaChar / N[(1.0 + t$95$0), $MachinePrecision]), $MachinePrecision], If[LessEqual[Vef, -2.1e+75], t$95$1, If[LessEqual[Vef, 1.7e-273], N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[Vef, 1.2e-139], N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[Vef, 3.2e+116], N[(NdChar / N[(N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision] - -1.0), $MachinePrecision]), $MachinePrecision], t$95$1]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := e^{\frac{Vef}{KbT}}\\
t_1 := \frac{NdChar}{t\_0 - -1}\\
\mathbf{if}\;Vef \leq -5 \cdot 10^{+154}:\\
\;\;\;\;\frac{NaChar}{1 + t\_0}\\
\mathbf{elif}\;Vef \leq -2.1 \cdot 10^{+75}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;Vef \leq 1.7 \cdot 10^{-273}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}}\\
\mathbf{elif}\;Vef \leq 1.2 \cdot 10^{-139}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Ev}{KbT}}}\\
\mathbf{elif}\;Vef \leq 3.2 \cdot 10^{+116}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{mu}{KbT}} - -1}\\
\mathbf{else}:\\
\;\;\;\;t\_1\\
\end{array}
\end{array}
if Vef < -5.00000000000000004e154Initial program 100.0%
Taylor expanded in NaChar around inf
lower-/.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
lower--.f64N/A
lower-+.f64N/A
+-commutativeN/A
lower-+.f6475.9
Applied rewrites75.9%
Taylor expanded in Vef around inf
Applied rewrites65.2%
if -5.00000000000000004e154 < Vef < -2.09999999999999999e75 or 3.2e116 < Vef Initial program 100.0%
Taylor expanded in NaChar 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
+-commutativeN/A
lower-+.f6473.3
Applied rewrites73.3%
Taylor expanded in Vef around inf
Applied rewrites67.6%
if -2.09999999999999999e75 < Vef < 1.69999999999999996e-273Initial program 100.0%
Taylor expanded in NaChar around inf
lower-/.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
lower--.f64N/A
lower-+.f64N/A
+-commutativeN/A
lower-+.f6462.7
Applied rewrites62.7%
Taylor expanded in EAccept around inf
Applied rewrites42.7%
if 1.69999999999999996e-273 < Vef < 1.20000000000000007e-139Initial program 99.9%
Taylor expanded in NaChar around inf
lower-/.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
lower--.f64N/A
lower-+.f64N/A
+-commutativeN/A
lower-+.f6465.7
Applied rewrites65.7%
Taylor expanded in Ev around inf
Applied rewrites49.6%
if 1.20000000000000007e-139 < Vef < 3.2e116Initial program 100.0%
Taylor expanded in NaChar 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
+-commutativeN/A
lower-+.f6460.8
Applied rewrites60.8%
Taylor expanded in mu around inf
Applied rewrites45.7%
Final simplification52.8%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NdChar (- (exp (/ (- (+ (+ mu Vef) EDonor) Ec) KbT)) -1.0))))
(if (<= NdChar -2.5e-13)
t_0
(if (<= NdChar 8e+83)
(/ NaChar (+ 1.0 (exp (/ (- (+ (+ Ev Vef) EAccept) 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(((((mu + Vef) + EDonor) - Ec) / KbT)) - -1.0);
double tmp;
if (NdChar <= -2.5e-13) {
tmp = t_0;
} else if (NdChar <= 8e+83) {
tmp = NaChar / (1.0 + exp(((((Ev + Vef) + EAccept) - 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) :: tmp
t_0 = ndchar / (exp(((((mu + vef) + edonor) - ec) / kbt)) - (-1.0d0))
if (ndchar <= (-2.5d-13)) then
tmp = t_0
else if (ndchar <= 8d+83) then
tmp = nachar / (1.0d0 + exp(((((ev + vef) + eaccept) - 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 = NdChar / (Math.exp(((((mu + Vef) + EDonor) - Ec) / KbT)) - -1.0);
double tmp;
if (NdChar <= -2.5e-13) {
tmp = t_0;
} else if (NdChar <= 8e+83) {
tmp = NaChar / (1.0 + Math.exp(((((Ev + Vef) + EAccept) - mu) / KbT)));
} else {
tmp = t_0;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NdChar / (math.exp(((((mu + Vef) + EDonor) - Ec) / KbT)) - -1.0) tmp = 0 if NdChar <= -2.5e-13: tmp = t_0 elif NdChar <= 8e+83: tmp = NaChar / (1.0 + math.exp(((((Ev + Vef) + EAccept) - mu) / KbT))) else: tmp = t_0 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NdChar / Float64(exp(Float64(Float64(Float64(Float64(mu + Vef) + EDonor) - Ec) / KbT)) - -1.0)) tmp = 0.0 if (NdChar <= -2.5e-13) tmp = t_0; elseif (NdChar <= 8e+83) tmp = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(Float64(Ev + Vef) + EAccept) - 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 = NdChar / (exp(((((mu + Vef) + EDonor) - Ec) / KbT)) - -1.0); tmp = 0.0; if (NdChar <= -2.5e-13) tmp = t_0; elseif (NdChar <= 8e+83) tmp = NaChar / (1.0 + exp(((((Ev + Vef) + EAccept) - 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[(NdChar / N[(N[Exp[N[(N[(N[(N[(mu + Vef), $MachinePrecision] + EDonor), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] - -1.0), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NdChar, -2.5e-13], t$95$0, If[LessEqual[NdChar, 8e+83], N[(NaChar / N[(1.0 + N[Exp[N[(N[(N[(N[(Ev + Vef), $MachinePrecision] + EAccept), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$0]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{e^{\frac{\left(\left(mu + Vef\right) + EDonor\right) - Ec}{KbT}} - -1}\\
\mathbf{if}\;NdChar \leq -2.5 \cdot 10^{-13}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;NdChar \leq 8 \cdot 10^{+83}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{\left(\left(Ev + Vef\right) + EAccept\right) - mu}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if NdChar < -2.49999999999999995e-13 or 8.00000000000000025e83 < NdChar Initial program 100.0%
Taylor expanded in NaChar 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
+-commutativeN/A
lower-+.f6475.2
Applied rewrites75.2%
if -2.49999999999999995e-13 < NdChar < 8.00000000000000025e83Initial program 100.0%
Taylor expanded in NaChar around inf
lower-/.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
lower--.f64N/A
lower-+.f64N/A
+-commutativeN/A
lower-+.f6476.3
Applied rewrites76.3%
Final simplification75.8%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (<= KbT -1.5e+272)
(+
(/ NaChar (+ 1.0 1.0))
(fma (* (/ (- (+ (+ mu Vef) EDonor) Ec) KbT) NdChar) -0.25 (* 0.5 NdChar)))
(if (<= KbT 8e+117)
(/ NaChar (+ 1.0 (exp (/ (- (+ (+ Ev Vef) EAccept) mu) KbT))))
(+ (/ NaChar (+ 1.0 (exp (/ Ev KbT)))) (* 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 (KbT <= -1.5e+272) {
tmp = (NaChar / (1.0 + 1.0)) + fma((((((mu + Vef) + EDonor) - Ec) / KbT) * NdChar), -0.25, (0.5 * NdChar));
} else if (KbT <= 8e+117) {
tmp = NaChar / (1.0 + exp(((((Ev + Vef) + EAccept) - mu) / KbT)));
} else {
tmp = (NaChar / (1.0 + exp((Ev / KbT)))) + (0.5 * NdChar);
}
return tmp;
}
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (KbT <= -1.5e+272) tmp = Float64(Float64(NaChar / Float64(1.0 + 1.0)) + fma(Float64(Float64(Float64(Float64(Float64(mu + Vef) + EDonor) - Ec) / KbT) * NdChar), -0.25, Float64(0.5 * NdChar))); elseif (KbT <= 8e+117) tmp = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(Float64(Ev + Vef) + EAccept) - mu) / KbT)))); else tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT)))) + Float64(0.5 * NdChar)); end return tmp end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[KbT, -1.5e+272], N[(N[(NaChar / N[(1.0 + 1.0), $MachinePrecision]), $MachinePrecision] + N[(N[(N[(N[(N[(N[(mu + Vef), $MachinePrecision] + EDonor), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision] * NdChar), $MachinePrecision] * -0.25 + N[(0.5 * NdChar), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[KbT, 8e+117], N[(NaChar / N[(1.0 + N[Exp[N[(N[(N[(N[(Ev + Vef), $MachinePrecision] + EAccept), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(0.5 * NdChar), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;KbT \leq -1.5 \cdot 10^{+272}:\\
\;\;\;\;\frac{NaChar}{1 + 1} + \mathsf{fma}\left(\frac{\left(\left(mu + Vef\right) + EDonor\right) - Ec}{KbT} \cdot NdChar, -0.25, 0.5 \cdot NdChar\right)\\
\mathbf{elif}\;KbT \leq 8 \cdot 10^{+117}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{\left(\left(Ev + Vef\right) + EAccept\right) - mu}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Ev}{KbT}}} + 0.5 \cdot NdChar\\
\end{array}
\end{array}
if KbT < -1.5000000000000001e272Initial program 99.9%
Taylor expanded in KbT around inf
Applied rewrites99.9%
Taylor expanded in KbT around inf
*-commutativeN/A
lower-fma.f64N/A
associate-/l*N/A
lower-*.f64N/A
lower-/.f64N/A
lower--.f64N/A
+-commutativeN/A
lower-+.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower-*.f64100.0
Applied rewrites100.0%
if -1.5000000000000001e272 < KbT < 8.0000000000000004e117Initial program 100.0%
Taylor expanded in NaChar around inf
lower-/.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
lower--.f64N/A
lower-+.f64N/A
+-commutativeN/A
lower-+.f6465.6
Applied rewrites65.6%
if 8.0000000000000004e117 < KbT Initial program 100.0%
Taylor expanded in KbT around inf
lower-*.f6475.4
Applied rewrites75.4%
Taylor expanded in Ev around inf
lower-/.f6461.7
Applied rewrites61.7%
Final simplification66.6%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (exp (/ Vef KbT))) (t_1 (/ NdChar (- t_0 -1.0))))
(if (<= Vef -5e+154)
(/ NaChar (+ 1.0 t_0))
(if (<= Vef -2.1e+75)
t_1
(if (<= Vef 1.12e-42) (/ NaChar (+ 1.0 (exp (/ EAccept KbT)))) t_1)))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = exp((Vef / KbT));
double t_1 = NdChar / (t_0 - -1.0);
double tmp;
if (Vef <= -5e+154) {
tmp = NaChar / (1.0 + t_0);
} else if (Vef <= -2.1e+75) {
tmp = t_1;
} else if (Vef <= 1.12e-42) {
tmp = NaChar / (1.0 + exp((EAccept / KbT)));
} else {
tmp = t_1;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = exp((vef / kbt))
t_1 = ndchar / (t_0 - (-1.0d0))
if (vef <= (-5d+154)) then
tmp = nachar / (1.0d0 + t_0)
else if (vef <= (-2.1d+75)) then
tmp = t_1
else if (vef <= 1.12d-42) then
tmp = nachar / (1.0d0 + exp((eaccept / kbt)))
else
tmp = t_1
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = Math.exp((Vef / KbT));
double t_1 = NdChar / (t_0 - -1.0);
double tmp;
if (Vef <= -5e+154) {
tmp = NaChar / (1.0 + t_0);
} else if (Vef <= -2.1e+75) {
tmp = t_1;
} else if (Vef <= 1.12e-42) {
tmp = NaChar / (1.0 + Math.exp((EAccept / KbT)));
} else {
tmp = t_1;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = math.exp((Vef / KbT)) t_1 = NdChar / (t_0 - -1.0) tmp = 0 if Vef <= -5e+154: tmp = NaChar / (1.0 + t_0) elif Vef <= -2.1e+75: tmp = t_1 elif Vef <= 1.12e-42: tmp = NaChar / (1.0 + math.exp((EAccept / KbT))) else: tmp = t_1 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = exp(Float64(Vef / KbT)) t_1 = Float64(NdChar / Float64(t_0 - -1.0)) tmp = 0.0 if (Vef <= -5e+154) tmp = Float64(NaChar / Float64(1.0 + t_0)); elseif (Vef <= -2.1e+75) tmp = t_1; elseif (Vef <= 1.12e-42) tmp = Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT)))); else tmp = t_1; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = exp((Vef / KbT)); t_1 = NdChar / (t_0 - -1.0); tmp = 0.0; if (Vef <= -5e+154) tmp = NaChar / (1.0 + t_0); elseif (Vef <= -2.1e+75) tmp = t_1; elseif (Vef <= 1.12e-42) tmp = NaChar / (1.0 + exp((EAccept / KbT))); else tmp = t_1; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[(NdChar / N[(t$95$0 - -1.0), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[Vef, -5e+154], N[(NaChar / N[(1.0 + t$95$0), $MachinePrecision]), $MachinePrecision], If[LessEqual[Vef, -2.1e+75], t$95$1, If[LessEqual[Vef, 1.12e-42], N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$1]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := e^{\frac{Vef}{KbT}}\\
t_1 := \frac{NdChar}{t\_0 - -1}\\
\mathbf{if}\;Vef \leq -5 \cdot 10^{+154}:\\
\;\;\;\;\frac{NaChar}{1 + t\_0}\\
\mathbf{elif}\;Vef \leq -2.1 \cdot 10^{+75}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;Vef \leq 1.12 \cdot 10^{-42}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;t\_1\\
\end{array}
\end{array}
if Vef < -5.00000000000000004e154Initial program 100.0%
Taylor expanded in NaChar around inf
lower-/.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
lower--.f64N/A
lower-+.f64N/A
+-commutativeN/A
lower-+.f6475.9
Applied rewrites75.9%
Taylor expanded in Vef around inf
Applied rewrites65.2%
if -5.00000000000000004e154 < Vef < -2.09999999999999999e75 or 1.1199999999999999e-42 < Vef Initial program 100.0%
Taylor expanded in NaChar 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
+-commutativeN/A
lower-+.f6470.6
Applied rewrites70.6%
Taylor expanded in Vef around inf
Applied rewrites56.7%
if -2.09999999999999999e75 < Vef < 1.1199999999999999e-42Initial program 100.0%
Taylor expanded in NaChar around inf
lower-/.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
lower--.f64N/A
lower-+.f64N/A
+-commutativeN/A
lower-+.f6462.1
Applied rewrites62.1%
Taylor expanded in EAccept around inf
Applied rewrites41.5%
Final simplification50.0%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (<= Ev -1.95e+90)
(/ NaChar (+ 1.0 (exp (/ Ev KbT))))
(if (<= Ev -9.5e-145)
(/ NaChar (+ 1.0 (exp (/ Vef KbT))))
(/ NaChar (+ 1.0 (exp (/ EAccept 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.95e+90) {
tmp = NaChar / (1.0 + exp((Ev / KbT)));
} else if (Ev <= -9.5e-145) {
tmp = NaChar / (1.0 + exp((Vef / KbT)));
} else {
tmp = NaChar / (1.0 + exp((EAccept / 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.95d+90)) then
tmp = nachar / (1.0d0 + exp((ev / kbt)))
else if (ev <= (-9.5d-145)) then
tmp = nachar / (1.0d0 + exp((vef / kbt)))
else
tmp = nachar / (1.0d0 + exp((eaccept / 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.95e+90) {
tmp = NaChar / (1.0 + Math.exp((Ev / KbT)));
} else if (Ev <= -9.5e-145) {
tmp = NaChar / (1.0 + Math.exp((Vef / KbT)));
} else {
tmp = NaChar / (1.0 + Math.exp((EAccept / KbT)));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if Ev <= -1.95e+90: tmp = NaChar / (1.0 + math.exp((Ev / KbT))) elif Ev <= -9.5e-145: tmp = NaChar / (1.0 + math.exp((Vef / KbT))) else: tmp = NaChar / (1.0 + math.exp((EAccept / KbT))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (Ev <= -1.95e+90) tmp = Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT)))); elseif (Ev <= -9.5e-145) tmp = Float64(NaChar / Float64(1.0 + exp(Float64(Vef / KbT)))); else tmp = Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT)))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (Ev <= -1.95e+90) tmp = NaChar / (1.0 + exp((Ev / KbT))); elseif (Ev <= -9.5e-145) tmp = NaChar / (1.0 + exp((Vef / KbT))); else tmp = NaChar / (1.0 + exp((EAccept / KbT))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[Ev, -1.95e+90], N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[Ev, -9.5e-145], N[(NaChar / N[(1.0 + N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;Ev \leq -1.95 \cdot 10^{+90}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Ev}{KbT}}}\\
\mathbf{elif}\;Ev \leq -9.5 \cdot 10^{-145}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Vef}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}}\\
\end{array}
\end{array}
if Ev < -1.9500000000000001e90Initial program 100.0%
Taylor expanded in NaChar around inf
lower-/.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
lower--.f64N/A
lower-+.f64N/A
+-commutativeN/A
lower-+.f6463.3
Applied rewrites63.3%
Taylor expanded in Ev around inf
Applied rewrites56.0%
if -1.9500000000000001e90 < Ev < -9.49999999999999981e-145Initial program 100.0%
Taylor expanded in NaChar around inf
lower-/.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
lower--.f64N/A
lower-+.f64N/A
+-commutativeN/A
lower-+.f6458.0
Applied rewrites58.0%
Taylor expanded in Vef around inf
Applied rewrites45.6%
if -9.49999999999999981e-145 < Ev Initial program 100.0%
Taylor expanded in NaChar around inf
lower-/.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
lower--.f64N/A
lower-+.f64N/A
+-commutativeN/A
lower-+.f6463.1
Applied rewrites63.1%
Taylor expanded in EAccept around inf
Applied rewrites37.8%
Final simplification42.3%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (if (<= Ev -1e-33) (/ NaChar (+ 1.0 (exp (/ Ev KbT)))) (/ NaChar (+ 1.0 (exp (/ EAccept 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 <= -1e-33) {
tmp = NaChar / (1.0 + exp((Ev / KbT)));
} else {
tmp = NaChar / (1.0 + exp((EAccept / 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 <= (-1d-33)) then
tmp = nachar / (1.0d0 + exp((ev / kbt)))
else
tmp = nachar / (1.0d0 + exp((eaccept / 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 <= -1e-33) {
tmp = NaChar / (1.0 + Math.exp((Ev / KbT)));
} else {
tmp = NaChar / (1.0 + Math.exp((EAccept / KbT)));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if Ev <= -1e-33: tmp = NaChar / (1.0 + math.exp((Ev / KbT))) else: tmp = NaChar / (1.0 + math.exp((EAccept / KbT))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (Ev <= -1e-33) tmp = Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT)))); else tmp = Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT)))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (Ev <= -1e-33) tmp = NaChar / (1.0 + exp((Ev / KbT))); else tmp = NaChar / (1.0 + exp((EAccept / KbT))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[Ev, -1e-33], N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;Ev \leq -1 \cdot 10^{-33}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Ev}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}}\\
\end{array}
\end{array}
if Ev < -1.0000000000000001e-33Initial program 100.0%
Taylor expanded in NaChar around inf
lower-/.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
lower--.f64N/A
lower-+.f64N/A
+-commutativeN/A
lower-+.f6459.8
Applied rewrites59.8%
Taylor expanded in Ev around inf
Applied rewrites46.1%
if -1.0000000000000001e-33 < Ev Initial program 100.0%
Taylor expanded in NaChar around inf
lower-/.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
lower--.f64N/A
lower-+.f64N/A
+-commutativeN/A
lower-+.f6462.9
Applied rewrites62.9%
Taylor expanded in EAccept around inf
Applied rewrites38.2%
Final simplification40.3%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (if (<= NdChar -3.5e-14) (* 0.5 NdChar) (if (<= NdChar 11000000000000.0) (* 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 (NdChar <= -3.5e-14) {
tmp = 0.5 * NdChar;
} else if (NdChar <= 11000000000000.0) {
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 (ndchar <= (-3.5d-14)) then
tmp = 0.5d0 * ndchar
else if (ndchar <= 11000000000000.0d0) 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 (NdChar <= -3.5e-14) {
tmp = 0.5 * NdChar;
} else if (NdChar <= 11000000000000.0) {
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 NdChar <= -3.5e-14: tmp = 0.5 * NdChar elif NdChar <= 11000000000000.0: 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 (NdChar <= -3.5e-14) tmp = Float64(0.5 * NdChar); elseif (NdChar <= 11000000000000.0) 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 (NdChar <= -3.5e-14) tmp = 0.5 * NdChar; elseif (NdChar <= 11000000000000.0) 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[NdChar, -3.5e-14], N[(0.5 * NdChar), $MachinePrecision], If[LessEqual[NdChar, 11000000000000.0], N[(0.5 * NaChar), $MachinePrecision], N[(0.5 * NdChar), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NdChar \leq -3.5 \cdot 10^{-14}:\\
\;\;\;\;0.5 \cdot NdChar\\
\mathbf{elif}\;NdChar \leq 11000000000000:\\
\;\;\;\;0.5 \cdot NaChar\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot NdChar\\
\end{array}
\end{array}
if NdChar < -3.5000000000000002e-14 or 1.1e13 < NdChar Initial program 100.0%
Taylor expanded in NaChar 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
+-commutativeN/A
lower-+.f6473.1
Applied rewrites73.1%
Taylor expanded in KbT around inf
Applied rewrites23.9%
if -3.5000000000000002e-14 < NdChar < 1.1e13Initial program 100.0%
Taylor expanded in KbT around inf
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6428.6
Applied rewrites28.6%
Taylor expanded in NaChar around inf
Applied rewrites24.9%
(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
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6428.1
Applied rewrites28.1%
Final simplification28.1%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (* 0.5 NaChar))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return 0.5 * NaChar;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
code = 0.5d0 * nachar
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return 0.5 * NaChar;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return 0.5 * NaChar
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(0.5 * NaChar) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.5 * NaChar; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(0.5 * NaChar), $MachinePrecision]
\begin{array}{l}
\\
0.5 \cdot NaChar
\end{array}
Initial program 100.0%
Taylor expanded in KbT around inf
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6428.1
Applied rewrites28.1%
Taylor expanded in NaChar around inf
Applied rewrites17.3%
herbie shell --seed 2024236
(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))))))