
(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 15 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (+ (/ NdChar (+ 1.0 (exp (/ (- (- (- (- Ec Vef) EDonor) mu)) KbT)))) (/ NaChar (+ 1.0 (exp (/ (+ (+ (+ Ev Vef) EAccept) (- mu)) KbT))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NdChar / (1.0 + exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + exp(((((Ev + Vef) + EAccept) + -mu) / KbT))));
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
code = (ndchar / (1.0d0 + exp((-(((ec - vef) - edonor) - mu) / kbt)))) + (nachar / (1.0d0 + exp(((((ev + vef) + eaccept) + -mu) / kbt))))
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NdChar / (1.0 + Math.exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + Math.exp(((((Ev + Vef) + EAccept) + -mu) / KbT))));
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return (NdChar / (1.0 + math.exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + math.exp(((((Ev + Vef) + EAccept) + -mu) / KbT))))
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(-Float64(Float64(Float64(Ec - Vef) - EDonor) - mu)) / KbT)))) + Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(Float64(Ev + Vef) + EAccept) + Float64(-mu)) / KbT))))) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = (NdChar / (1.0 + exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + exp(((((Ev + Vef) + EAccept) + -mu) / KbT)))); end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(N[(NdChar / N[(1.0 + N[Exp[N[((-N[(N[(N[(Ec - Vef), $MachinePrecision] - EDonor), $MachinePrecision] - mu), $MachinePrecision]) / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Exp[N[(N[(N[(N[(Ev + Vef), $MachinePrecision] + EAccept), $MachinePrecision] + (-mu)), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{NdChar}{1 + e^{\frac{-\left(\left(\left(Ec - Vef\right) - EDonor\right) - mu\right)}{KbT}}} + \frac{NaChar}{1 + e^{\frac{\left(\left(Ev + Vef\right) + EAccept\right) + \left(-mu\right)}{KbT}}}
\end{array}
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (- (/ NdChar (+ 1.0 (exp (/ (- mu (- (- Ec Vef) EDonor)) 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(((mu - ((Ec - Vef) - EDonor)) / 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(((mu - ((ec - vef) - edonor)) / 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(((mu - ((Ec - Vef) - EDonor)) / 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(((mu - ((Ec - Vef) - EDonor)) / 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(mu - Float64(Float64(Ec - Vef) - EDonor)) / KbT)))) - Float64(NaChar / Float64(-1.0 - exp(Float64(Float64(Float64(Float64(Ev + Vef) + EAccept) - mu) / KbT))))) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = (NdChar / (1.0 + exp(((mu - ((Ec - Vef) - EDonor)) / KbT)))) - (NaChar / (-1.0 - exp(((((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[(mu - N[(N[(Ec - Vef), $MachinePrecision] - EDonor), $MachinePrecision]), $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{mu - \left(\left(Ec - Vef\right) - EDonor\right)}{KbT}}} - \frac{NaChar}{-1 - e^{\frac{\left(\left(Ev + Vef\right) + EAccept\right) - mu}{KbT}}}
\end{array}
Initial program 99.6%
Final simplification99.6%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (+ (* 0.5 NaChar) (/ NdChar (+ 1.0 (exp (/ EDonor KbT))))))
(t_1 (exp (/ (- (+ (+ Ev Vef) EAccept) mu) KbT)))
(t_2 (/ NaChar (- t_1 -1.0)))
(t_3
(-
(/ NdChar (+ 1.0 (exp (/ (- mu (- (- Ec Vef) EDonor)) KbT))))
(/ NaChar (- -1.0 t_1)))))
(if (<= t_3 -1e+40)
t_0
(if (<= t_3 -4e-152)
t_2
(if (<= t_3 -5e-269)
(/ NdChar (+ 1.0 (exp (/ mu KbT))))
(if (<= t_3 1e-13) t_2 t_0))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (0.5 * NaChar) + (NdChar / (1.0 + exp((EDonor / KbT))));
double t_1 = exp(((((Ev + Vef) + EAccept) - mu) / KbT));
double t_2 = NaChar / (t_1 - -1.0);
double t_3 = (NdChar / (1.0 + exp(((mu - ((Ec - Vef) - EDonor)) / KbT)))) - (NaChar / (-1.0 - t_1));
double tmp;
if (t_3 <= -1e+40) {
tmp = t_0;
} else if (t_3 <= -4e-152) {
tmp = t_2;
} else if (t_3 <= -5e-269) {
tmp = NdChar / (1.0 + exp((mu / KbT)));
} else if (t_3 <= 1e-13) {
tmp = t_2;
} else {
tmp = t_0;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: t_2
real(8) :: t_3
real(8) :: tmp
t_0 = (0.5d0 * nachar) + (ndchar / (1.0d0 + exp((edonor / kbt))))
t_1 = exp(((((ev + vef) + eaccept) - mu) / kbt))
t_2 = nachar / (t_1 - (-1.0d0))
t_3 = (ndchar / (1.0d0 + exp(((mu - ((ec - vef) - edonor)) / kbt)))) - (nachar / ((-1.0d0) - t_1))
if (t_3 <= (-1d+40)) then
tmp = t_0
else if (t_3 <= (-4d-152)) then
tmp = t_2
else if (t_3 <= (-5d-269)) then
tmp = ndchar / (1.0d0 + exp((mu / kbt)))
else if (t_3 <= 1d-13) then
tmp = t_2
else
tmp = t_0
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (0.5 * NaChar) + (NdChar / (1.0 + Math.exp((EDonor / KbT))));
double t_1 = Math.exp(((((Ev + Vef) + EAccept) - mu) / KbT));
double t_2 = NaChar / (t_1 - -1.0);
double t_3 = (NdChar / (1.0 + Math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)))) - (NaChar / (-1.0 - t_1));
double tmp;
if (t_3 <= -1e+40) {
tmp = t_0;
} else if (t_3 <= -4e-152) {
tmp = t_2;
} else if (t_3 <= -5e-269) {
tmp = NdChar / (1.0 + Math.exp((mu / KbT)));
} else if (t_3 <= 1e-13) {
tmp = t_2;
} else {
tmp = t_0;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = (0.5 * NaChar) + (NdChar / (1.0 + math.exp((EDonor / KbT)))) t_1 = math.exp(((((Ev + Vef) + EAccept) - mu) / KbT)) t_2 = NaChar / (t_1 - -1.0) t_3 = (NdChar / (1.0 + math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)))) - (NaChar / (-1.0 - t_1)) tmp = 0 if t_3 <= -1e+40: tmp = t_0 elif t_3 <= -4e-152: tmp = t_2 elif t_3 <= -5e-269: tmp = NdChar / (1.0 + math.exp((mu / KbT))) elif t_3 <= 1e-13: tmp = t_2 else: tmp = t_0 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(0.5 * NaChar) + Float64(NdChar / Float64(1.0 + exp(Float64(EDonor / KbT))))) t_1 = exp(Float64(Float64(Float64(Float64(Ev + Vef) + EAccept) - mu) / KbT)) t_2 = Float64(NaChar / Float64(t_1 - -1.0)) t_3 = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(mu - Float64(Float64(Ec - Vef) - EDonor)) / KbT)))) - Float64(NaChar / Float64(-1.0 - t_1))) tmp = 0.0 if (t_3 <= -1e+40) tmp = t_0; elseif (t_3 <= -4e-152) tmp = t_2; elseif (t_3 <= -5e-269) tmp = Float64(NdChar / Float64(1.0 + exp(Float64(mu / KbT)))); elseif (t_3 <= 1e-13) tmp = t_2; else tmp = t_0; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = (0.5 * NaChar) + (NdChar / (1.0 + exp((EDonor / KbT)))); t_1 = exp(((((Ev + Vef) + EAccept) - mu) / KbT)); t_2 = NaChar / (t_1 - -1.0); t_3 = (NdChar / (1.0 + exp(((mu - ((Ec - Vef) - EDonor)) / KbT)))) - (NaChar / (-1.0 - t_1)); tmp = 0.0; if (t_3 <= -1e+40) tmp = t_0; elseif (t_3 <= -4e-152) tmp = t_2; elseif (t_3 <= -5e-269) tmp = NdChar / (1.0 + exp((mu / KbT))); elseif (t_3 <= 1e-13) tmp = t_2; 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[(0.5 * NaChar), $MachinePrecision] + N[(NdChar / N[(1.0 + N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[Exp[N[(N[(N[(N[(Ev + Vef), $MachinePrecision] + EAccept), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$2 = N[(NaChar / N[(t$95$1 - -1.0), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$3 = N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(mu - N[(N[(Ec - Vef), $MachinePrecision] - EDonor), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(NaChar / N[(-1.0 - t$95$1), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$3, -1e+40], t$95$0, If[LessEqual[t$95$3, -4e-152], t$95$2, If[LessEqual[t$95$3, -5e-269], N[(NdChar / N[(1.0 + N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$3, 1e-13], t$95$2, t$95$0]]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := 0.5 \cdot NaChar + \frac{NdChar}{1 + e^{\frac{EDonor}{KbT}}}\\
t_1 := e^{\frac{\left(\left(Ev + Vef\right) + EAccept\right) - mu}{KbT}}\\
t_2 := \frac{NaChar}{t\_1 - -1}\\
t_3 := \frac{NdChar}{1 + e^{\frac{mu - \left(\left(Ec - Vef\right) - EDonor\right)}{KbT}}} - \frac{NaChar}{-1 - t\_1}\\
\mathbf{if}\;t\_3 \leq -1 \cdot 10^{+40}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;t\_3 \leq -4 \cdot 10^{-152}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;t\_3 \leq -5 \cdot 10^{-269}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{mu}{KbT}}}\\
\mathbf{elif}\;t\_3 \leq 10^{-13}:\\
\;\;\;\;t\_2\\
\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.00000000000000003e40 or 1e-13 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) Initial program 100.0%
Taylor expanded in KbT around inf
lower-*.f6471.1
Applied rewrites71.1%
Taylor expanded in EDonor around inf
lower-/.f6460.6
Applied rewrites60.6%
if -1.00000000000000003e40 < (+.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.00000000000000026e-152 or -4.99999999999999979e-269 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < 1e-13Initial 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.8
Applied rewrites75.8%
if -4.00000000000000026e-152 < (+.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.99999999999999979e-269Initial program 96.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.9
Applied rewrites70.9%
Taylor expanded in mu around inf
Applied rewrites60.5%
Final simplification66.8%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (+ (* 0.5 NaChar) (/ NdChar (+ 1.0 (exp (/ EDonor KbT))))))
(t_1
(-
(/ NdChar (+ 1.0 (exp (/ (- mu (- (- Ec Vef) EDonor)) KbT))))
(/ NaChar (- -1.0 (exp (/ (- (+ (+ Ev Vef) EAccept) mu) KbT)))))))
(if (<= t_1 -4e-152)
t_0
(if (<= t_1 -1e-301)
(/ NdChar (+ 1.0 (exp (/ mu KbT))))
(if (<= t_1 1e-143) (/ NdChar (+ 1.0 (exp (/ Vef KbT)))) t_0)))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (0.5 * NaChar) + (NdChar / (1.0 + exp((EDonor / KbT))));
double t_1 = (NdChar / (1.0 + exp(((mu - ((Ec - Vef) - EDonor)) / KbT)))) - (NaChar / (-1.0 - exp(((((Ev + Vef) + EAccept) - mu) / KbT))));
double tmp;
if (t_1 <= -4e-152) {
tmp = t_0;
} else if (t_1 <= -1e-301) {
tmp = NdChar / (1.0 + exp((mu / KbT)));
} else if (t_1 <= 1e-143) {
tmp = NdChar / (1.0 + exp((Vef / KbT)));
} else {
tmp = t_0;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = (0.5d0 * nachar) + (ndchar / (1.0d0 + exp((edonor / kbt))))
t_1 = (ndchar / (1.0d0 + exp(((mu - ((ec - vef) - edonor)) / kbt)))) - (nachar / ((-1.0d0) - exp(((((ev + vef) + eaccept) - mu) / kbt))))
if (t_1 <= (-4d-152)) then
tmp = t_0
else if (t_1 <= (-1d-301)) then
tmp = ndchar / (1.0d0 + exp((mu / kbt)))
else if (t_1 <= 1d-143) then
tmp = ndchar / (1.0d0 + exp((vef / kbt)))
else
tmp = t_0
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (0.5 * NaChar) + (NdChar / (1.0 + Math.exp((EDonor / KbT))));
double t_1 = (NdChar / (1.0 + Math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)))) - (NaChar / (-1.0 - Math.exp(((((Ev + Vef) + EAccept) - mu) / KbT))));
double tmp;
if (t_1 <= -4e-152) {
tmp = t_0;
} else if (t_1 <= -1e-301) {
tmp = NdChar / (1.0 + Math.exp((mu / KbT)));
} else if (t_1 <= 1e-143) {
tmp = NdChar / (1.0 + Math.exp((Vef / KbT)));
} else {
tmp = t_0;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = (0.5 * NaChar) + (NdChar / (1.0 + math.exp((EDonor / KbT)))) t_1 = (NdChar / (1.0 + math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)))) - (NaChar / (-1.0 - math.exp(((((Ev + Vef) + EAccept) - mu) / KbT)))) tmp = 0 if t_1 <= -4e-152: tmp = t_0 elif t_1 <= -1e-301: tmp = NdChar / (1.0 + math.exp((mu / KbT))) elif t_1 <= 1e-143: tmp = NdChar / (1.0 + math.exp((Vef / KbT))) else: tmp = t_0 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(0.5 * NaChar) + Float64(NdChar / Float64(1.0 + exp(Float64(EDonor / KbT))))) t_1 = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(mu - Float64(Float64(Ec - Vef) - EDonor)) / KbT)))) - Float64(NaChar / Float64(-1.0 - exp(Float64(Float64(Float64(Float64(Ev + Vef) + EAccept) - mu) / KbT))))) tmp = 0.0 if (t_1 <= -4e-152) tmp = t_0; elseif (t_1 <= -1e-301) tmp = Float64(NdChar / Float64(1.0 + exp(Float64(mu / KbT)))); elseif (t_1 <= 1e-143) tmp = Float64(NdChar / Float64(1.0 + exp(Float64(Vef / KbT)))); else tmp = t_0; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = (0.5 * NaChar) + (NdChar / (1.0 + exp((EDonor / KbT)))); t_1 = (NdChar / (1.0 + exp(((mu - ((Ec - Vef) - EDonor)) / KbT)))) - (NaChar / (-1.0 - exp(((((Ev + Vef) + EAccept) - mu) / KbT)))); tmp = 0.0; if (t_1 <= -4e-152) tmp = t_0; elseif (t_1 <= -1e-301) tmp = NdChar / (1.0 + exp((mu / KbT))); elseif (t_1 <= 1e-143) tmp = NdChar / (1.0 + exp((Vef / 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[(0.5 * NaChar), $MachinePrecision] + N[(NdChar / N[(1.0 + N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(mu - N[(N[(Ec - Vef), $MachinePrecision] - EDonor), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(NaChar / N[(-1.0 - N[Exp[N[(N[(N[(N[(Ev + Vef), $MachinePrecision] + EAccept), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$1, -4e-152], t$95$0, If[LessEqual[t$95$1, -1e-301], N[(NdChar / N[(1.0 + N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$1, 1e-143], N[(NdChar / N[(1.0 + N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$0]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := 0.5 \cdot NaChar + \frac{NdChar}{1 + e^{\frac{EDonor}{KbT}}}\\
t_1 := \frac{NdChar}{1 + e^{\frac{mu - \left(\left(Ec - Vef\right) - EDonor\right)}{KbT}}} - \frac{NaChar}{-1 - e^{\frac{\left(\left(Ev + Vef\right) + EAccept\right) - mu}{KbT}}}\\
\mathbf{if}\;t\_1 \leq -4 \cdot 10^{-152}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;t\_1 \leq -1 \cdot 10^{-301}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{mu}{KbT}}}\\
\mathbf{elif}\;t\_1 \leq 10^{-143}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{Vef}{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.00000000000000026e-152 or 9.9999999999999995e-144 < (+.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-*.f6464.7
Applied rewrites64.7%
Taylor expanded in EDonor around inf
lower-/.f6454.6
Applied rewrites54.6%
if -4.00000000000000026e-152 < (+.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.00000000000000007e-301Initial program 96.7%
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-+.f6466.6
Applied rewrites66.6%
Taylor expanded in mu around inf
Applied rewrites57.9%
if -1.00000000000000007e-301 < (+.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.9999999999999995e-144Initial 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-+.f6491.6
Applied rewrites91.6%
Taylor expanded in Vef around inf
Applied rewrites62.6%
Final simplification56.7%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (- (* 0.5 NdChar) (/ NaChar (- -1.0 (exp (/ EAccept KbT))))))
(t_1
(-
(/ NdChar (+ 1.0 (exp (/ (- mu (- (- Ec Vef) EDonor)) KbT))))
(/ NaChar (- -1.0 (exp (/ (- (+ (+ Ev Vef) EAccept) mu) KbT)))))))
(if (<= t_1 -4e-152)
t_0
(if (<= t_1 -1e-301)
(/ NdChar (+ 1.0 (exp (/ mu KbT))))
(if (<= t_1 1e-143) (/ NdChar (+ 1.0 (exp (/ Vef KbT)))) t_0)))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (0.5 * NdChar) - (NaChar / (-1.0 - exp((EAccept / KbT))));
double t_1 = (NdChar / (1.0 + exp(((mu - ((Ec - Vef) - EDonor)) / KbT)))) - (NaChar / (-1.0 - exp(((((Ev + Vef) + EAccept) - mu) / KbT))));
double tmp;
if (t_1 <= -4e-152) {
tmp = t_0;
} else if (t_1 <= -1e-301) {
tmp = NdChar / (1.0 + exp((mu / KbT)));
} else if (t_1 <= 1e-143) {
tmp = NdChar / (1.0 + exp((Vef / KbT)));
} else {
tmp = t_0;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = (0.5d0 * ndchar) - (nachar / ((-1.0d0) - exp((eaccept / kbt))))
t_1 = (ndchar / (1.0d0 + exp(((mu - ((ec - vef) - edonor)) / kbt)))) - (nachar / ((-1.0d0) - exp(((((ev + vef) + eaccept) - mu) / kbt))))
if (t_1 <= (-4d-152)) then
tmp = t_0
else if (t_1 <= (-1d-301)) then
tmp = ndchar / (1.0d0 + exp((mu / kbt)))
else if (t_1 <= 1d-143) then
tmp = ndchar / (1.0d0 + exp((vef / kbt)))
else
tmp = t_0
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (0.5 * NdChar) - (NaChar / (-1.0 - Math.exp((EAccept / KbT))));
double t_1 = (NdChar / (1.0 + Math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)))) - (NaChar / (-1.0 - Math.exp(((((Ev + Vef) + EAccept) - mu) / KbT))));
double tmp;
if (t_1 <= -4e-152) {
tmp = t_0;
} else if (t_1 <= -1e-301) {
tmp = NdChar / (1.0 + Math.exp((mu / KbT)));
} else if (t_1 <= 1e-143) {
tmp = NdChar / (1.0 + Math.exp((Vef / KbT)));
} else {
tmp = t_0;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = (0.5 * NdChar) - (NaChar / (-1.0 - math.exp((EAccept / KbT)))) t_1 = (NdChar / (1.0 + math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)))) - (NaChar / (-1.0 - math.exp(((((Ev + Vef) + EAccept) - mu) / KbT)))) tmp = 0 if t_1 <= -4e-152: tmp = t_0 elif t_1 <= -1e-301: tmp = NdChar / (1.0 + math.exp((mu / KbT))) elif t_1 <= 1e-143: tmp = NdChar / (1.0 + math.exp((Vef / KbT))) else: tmp = t_0 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(0.5 * NdChar) - Float64(NaChar / Float64(-1.0 - exp(Float64(EAccept / KbT))))) t_1 = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(mu - Float64(Float64(Ec - Vef) - EDonor)) / KbT)))) - Float64(NaChar / Float64(-1.0 - exp(Float64(Float64(Float64(Float64(Ev + Vef) + EAccept) - mu) / KbT))))) tmp = 0.0 if (t_1 <= -4e-152) tmp = t_0; elseif (t_1 <= -1e-301) tmp = Float64(NdChar / Float64(1.0 + exp(Float64(mu / KbT)))); elseif (t_1 <= 1e-143) tmp = Float64(NdChar / Float64(1.0 + exp(Float64(Vef / KbT)))); else tmp = t_0; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = (0.5 * NdChar) - (NaChar / (-1.0 - exp((EAccept / KbT)))); t_1 = (NdChar / (1.0 + exp(((mu - ((Ec - Vef) - EDonor)) / KbT)))) - (NaChar / (-1.0 - exp(((((Ev + Vef) + EAccept) - mu) / KbT)))); tmp = 0.0; if (t_1 <= -4e-152) tmp = t_0; elseif (t_1 <= -1e-301) tmp = NdChar / (1.0 + exp((mu / KbT))); elseif (t_1 <= 1e-143) tmp = NdChar / (1.0 + exp((Vef / 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[(0.5 * NdChar), $MachinePrecision] - N[(NaChar / N[(-1.0 - N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(mu - N[(N[(Ec - Vef), $MachinePrecision] - EDonor), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(NaChar / N[(-1.0 - N[Exp[N[(N[(N[(N[(Ev + Vef), $MachinePrecision] + EAccept), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$1, -4e-152], t$95$0, If[LessEqual[t$95$1, -1e-301], N[(NdChar / N[(1.0 + N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$1, 1e-143], N[(NdChar / N[(1.0 + N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$0]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := 0.5 \cdot NdChar - \frac{NaChar}{-1 - e^{\frac{EAccept}{KbT}}}\\
t_1 := \frac{NdChar}{1 + e^{\frac{mu - \left(\left(Ec - Vef\right) - EDonor\right)}{KbT}}} - \frac{NaChar}{-1 - e^{\frac{\left(\left(Ev + Vef\right) + EAccept\right) - mu}{KbT}}}\\
\mathbf{if}\;t\_1 \leq -4 \cdot 10^{-152}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;t\_1 \leq -1 \cdot 10^{-301}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{mu}{KbT}}}\\
\mathbf{elif}\;t\_1 \leq 10^{-143}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{Vef}{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.00000000000000026e-152 or 9.9999999999999995e-144 < (+.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-/.f6481.2
Applied rewrites81.2%
Taylor expanded in KbT around inf
lower-*.f6450.4
Applied rewrites50.4%
if -4.00000000000000026e-152 < (+.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.00000000000000007e-301Initial program 96.7%
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-+.f6466.6
Applied rewrites66.6%
Taylor expanded in mu around inf
Applied rewrites57.9%
if -1.00000000000000007e-301 < (+.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.9999999999999995e-144Initial 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-+.f6491.6
Applied rewrites91.6%
Taylor expanded in Vef around inf
Applied rewrites62.6%
Final simplification54.0%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NdChar (+ 1.0 (exp (/ (- mu (- (- Ec Vef) EDonor)) KbT)))))
(t_1 (+ (/ NaChar (- (exp (/ EAccept KbT)) -1.0)) t_0))
(t_2
(-
t_0
(/ NaChar (- -1.0 (exp (/ (- (+ (+ Ev Vef) EAccept) mu) KbT)))))))
(if (<= t_2 -5e-171)
t_1
(if (<= t_2 4e-242)
(/ NdChar (+ 1.0 (/ 1.0 (exp (/ (- Ec (+ (+ mu Vef) EDonor)) KbT)))))
t_1))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (1.0 + exp(((mu - ((Ec - Vef) - EDonor)) / KbT)));
double t_1 = (NaChar / (exp((EAccept / KbT)) - -1.0)) + t_0;
double t_2 = t_0 - (NaChar / (-1.0 - exp(((((Ev + Vef) + EAccept) - mu) / KbT))));
double tmp;
if (t_2 <= -5e-171) {
tmp = t_1;
} else if (t_2 <= 4e-242) {
tmp = NdChar / (1.0 + (1.0 / exp(((Ec - ((mu + Vef) + EDonor)) / KbT))));
} else {
tmp = t_1;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: t_2
real(8) :: tmp
t_0 = ndchar / (1.0d0 + exp(((mu - ((ec - vef) - edonor)) / kbt)))
t_1 = (nachar / (exp((eaccept / kbt)) - (-1.0d0))) + t_0
t_2 = t_0 - (nachar / ((-1.0d0) - exp(((((ev + vef) + eaccept) - mu) / kbt))))
if (t_2 <= (-5d-171)) then
tmp = t_1
else if (t_2 <= 4d-242) then
tmp = ndchar / (1.0d0 + (1.0d0 / exp(((ec - ((mu + vef) + edonor)) / 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 = NdChar / (1.0 + Math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)));
double t_1 = (NaChar / (Math.exp((EAccept / KbT)) - -1.0)) + t_0;
double t_2 = t_0 - (NaChar / (-1.0 - Math.exp(((((Ev + Vef) + EAccept) - mu) / KbT))));
double tmp;
if (t_2 <= -5e-171) {
tmp = t_1;
} else if (t_2 <= 4e-242) {
tmp = NdChar / (1.0 + (1.0 / Math.exp(((Ec - ((mu + Vef) + EDonor)) / KbT))));
} else {
tmp = t_1;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NdChar / (1.0 + math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT))) t_1 = (NaChar / (math.exp((EAccept / KbT)) - -1.0)) + t_0 t_2 = t_0 - (NaChar / (-1.0 - math.exp(((((Ev + Vef) + EAccept) - mu) / KbT)))) tmp = 0 if t_2 <= -5e-171: tmp = t_1 elif t_2 <= 4e-242: tmp = NdChar / (1.0 + (1.0 / math.exp(((Ec - ((mu + Vef) + EDonor)) / KbT)))) else: tmp = t_1 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NdChar / Float64(1.0 + exp(Float64(Float64(mu - Float64(Float64(Ec - Vef) - EDonor)) / KbT)))) t_1 = Float64(Float64(NaChar / Float64(exp(Float64(EAccept / KbT)) - -1.0)) + t_0) t_2 = Float64(t_0 - Float64(NaChar / Float64(-1.0 - exp(Float64(Float64(Float64(Float64(Ev + Vef) + EAccept) - mu) / KbT))))) tmp = 0.0 if (t_2 <= -5e-171) tmp = t_1; elseif (t_2 <= 4e-242) tmp = Float64(NdChar / Float64(1.0 + Float64(1.0 / exp(Float64(Float64(Ec - Float64(Float64(mu + Vef) + EDonor)) / KbT))))); else tmp = t_1; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NdChar / (1.0 + exp(((mu - ((Ec - Vef) - EDonor)) / KbT))); t_1 = (NaChar / (exp((EAccept / KbT)) - -1.0)) + t_0; t_2 = t_0 - (NaChar / (-1.0 - exp(((((Ev + Vef) + EAccept) - mu) / KbT)))); tmp = 0.0; if (t_2 <= -5e-171) tmp = t_1; elseif (t_2 <= 4e-242) tmp = NdChar / (1.0 + (1.0 / exp(((Ec - ((mu + Vef) + EDonor)) / 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[(NdChar / N[(1.0 + N[Exp[N[(N[(mu - N[(N[(Ec - Vef), $MachinePrecision] - EDonor), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NaChar / N[(N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision] - -1.0), $MachinePrecision]), $MachinePrecision] + t$95$0), $MachinePrecision]}, Block[{t$95$2 = N[(t$95$0 - N[(NaChar / N[(-1.0 - N[Exp[N[(N[(N[(N[(Ev + Vef), $MachinePrecision] + EAccept), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$2, -5e-171], t$95$1, If[LessEqual[t$95$2, 4e-242], N[(NdChar / N[(1.0 + N[(1.0 / N[Exp[N[(N[(Ec - N[(N[(mu + Vef), $MachinePrecision] + EDonor), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$1]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{1 + e^{\frac{mu - \left(\left(Ec - Vef\right) - EDonor\right)}{KbT}}}\\
t_1 := \frac{NaChar}{e^{\frac{EAccept}{KbT}} - -1} + t\_0\\
t_2 := t\_0 - \frac{NaChar}{-1 - e^{\frac{\left(\left(Ev + Vef\right) + EAccept\right) - mu}{KbT}}}\\
\mathbf{if}\;t\_2 \leq -5 \cdot 10^{-171}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;t\_2 \leq 4 \cdot 10^{-242}:\\
\;\;\;\;\frac{NdChar}{1 + \frac{1}{e^{\frac{Ec - \left(\left(mu + Vef\right) + EDonor\right)}{KbT}}}}\\
\mathbf{else}:\\
\;\;\;\;t\_1\\
\end{array}
\end{array}
if (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < -4.99999999999999992e-171 or 4e-242 < (+.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-/.f6481.5
Applied rewrites81.5%
if -4.99999999999999992e-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))))) < 4e-242Initial program 98.6%
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-+.f6486.3
Applied rewrites86.3%
Applied rewrites86.3%
Final simplification82.9%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (* (+ NaChar NdChar) 0.5))
(t_1
(-
(/ NdChar (+ 1.0 (exp (/ (- mu (- (- Ec Vef) EDonor)) KbT))))
(/ NaChar (- -1.0 (exp (/ (- (+ (+ Ev Vef) EAccept) mu) KbT)))))))
(if (<= t_1 -2e-178)
t_0
(if (<= t_1 5e-194)
(/
NdChar
(- (+ (+ (/ Vef KbT) (/ mu KbT)) (+ 2.0 (/ EDonor KbT))) (/ Ec KbT)))
t_0))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar + NdChar) * 0.5;
double t_1 = (NdChar / (1.0 + exp(((mu - ((Ec - Vef) - EDonor)) / KbT)))) - (NaChar / (-1.0 - exp(((((Ev + Vef) + EAccept) - mu) / KbT))));
double tmp;
if (t_1 <= -2e-178) {
tmp = t_0;
} else if (t_1 <= 5e-194) {
tmp = NdChar / ((((Vef / KbT) + (mu / KbT)) + (2.0 + (EDonor / KbT))) - (Ec / KbT));
} else {
tmp = t_0;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = (nachar + ndchar) * 0.5d0
t_1 = (ndchar / (1.0d0 + exp(((mu - ((ec - vef) - edonor)) / kbt)))) - (nachar / ((-1.0d0) - exp(((((ev + vef) + eaccept) - mu) / kbt))))
if (t_1 <= (-2d-178)) then
tmp = t_0
else if (t_1 <= 5d-194) then
tmp = ndchar / ((((vef / kbt) + (mu / kbt)) + (2.0d0 + (edonor / kbt))) - (ec / kbt))
else
tmp = t_0
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar + NdChar) * 0.5;
double t_1 = (NdChar / (1.0 + Math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)))) - (NaChar / (-1.0 - Math.exp(((((Ev + Vef) + EAccept) - mu) / KbT))));
double tmp;
if (t_1 <= -2e-178) {
tmp = t_0;
} else if (t_1 <= 5e-194) {
tmp = NdChar / ((((Vef / KbT) + (mu / KbT)) + (2.0 + (EDonor / KbT))) - (Ec / 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 = (NdChar / (1.0 + math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)))) - (NaChar / (-1.0 - math.exp(((((Ev + Vef) + EAccept) - mu) / KbT)))) tmp = 0 if t_1 <= -2e-178: tmp = t_0 elif t_1 <= 5e-194: tmp = NdChar / ((((Vef / KbT) + (mu / KbT)) + (2.0 + (EDonor / KbT))) - (Ec / 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(NdChar / Float64(1.0 + exp(Float64(Float64(mu - Float64(Float64(Ec - Vef) - EDonor)) / KbT)))) - Float64(NaChar / Float64(-1.0 - exp(Float64(Float64(Float64(Float64(Ev + Vef) + EAccept) - mu) / KbT))))) tmp = 0.0 if (t_1 <= -2e-178) tmp = t_0; elseif (t_1 <= 5e-194) tmp = Float64(NdChar / Float64(Float64(Float64(Float64(Vef / KbT) + Float64(mu / KbT)) + Float64(2.0 + Float64(EDonor / KbT))) - Float64(Ec / KbT))); else tmp = t_0; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = (NaChar + NdChar) * 0.5; t_1 = (NdChar / (1.0 + exp(((mu - ((Ec - Vef) - EDonor)) / KbT)))) - (NaChar / (-1.0 - exp(((((Ev + Vef) + EAccept) - mu) / KbT)))); tmp = 0.0; if (t_1 <= -2e-178) tmp = t_0; elseif (t_1 <= 5e-194) tmp = NdChar / ((((Vef / KbT) + (mu / KbT)) + (2.0 + (EDonor / KbT))) - (Ec / KbT)); else tmp = t_0; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(NaChar + NdChar), $MachinePrecision] * 0.5), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(mu - N[(N[(Ec - Vef), $MachinePrecision] - EDonor), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(NaChar / N[(-1.0 - N[Exp[N[(N[(N[(N[(Ev + Vef), $MachinePrecision] + EAccept), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$1, -2e-178], t$95$0, If[LessEqual[t$95$1, 5e-194], N[(NdChar / N[(N[(N[(N[(Vef / KbT), $MachinePrecision] + N[(mu / KbT), $MachinePrecision]), $MachinePrecision] + N[(2.0 + N[(EDonor / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(Ec / 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{NdChar}{1 + e^{\frac{mu - \left(\left(Ec - Vef\right) - EDonor\right)}{KbT}}} - \frac{NaChar}{-1 - e^{\frac{\left(\left(Ev + Vef\right) + EAccept\right) - mu}{KbT}}}\\
\mathbf{if}\;t\_1 \leq -2 \cdot 10^{-178}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;t\_1 \leq 5 \cdot 10^{-194}:\\
\;\;\;\;\frac{NdChar}{\left(\left(\frac{Vef}{KbT} + \frac{mu}{KbT}\right) + \left(2 + \frac{EDonor}{KbT}\right)\right) - \frac{Ec}{KbT}}\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < -1.9999999999999999e-178 or 5.0000000000000002e-194 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) Initial program 100.0%
Taylor expanded in KbT around inf
+-commutativeN/A
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6438.4
Applied rewrites38.4%
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))))) < 5.0000000000000002e-194Initial program 98.7%
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-+.f6483.6
Applied rewrites83.6%
Taylor expanded in KbT around inf
Applied rewrites34.1%
Final simplification37.1%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (* (+ NaChar NdChar) 0.5))
(t_1
(-
(/ NdChar (+ 1.0 (exp (/ (- mu (- (- Ec Vef) EDonor)) KbT))))
(/ NaChar (- -1.0 (exp (/ (- (+ (+ Ev Vef) EAccept) mu) KbT)))))))
(if (<= t_1 -2e-246)
t_0
(if (<= t_1 5e-233)
(/ (* -0.5 (* NaChar NaChar)) (- NdChar NaChar))
t_0))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar + NdChar) * 0.5;
double t_1 = (NdChar / (1.0 + exp(((mu - ((Ec - Vef) - EDonor)) / KbT)))) - (NaChar / (-1.0 - exp(((((Ev + Vef) + EAccept) - mu) / KbT))));
double tmp;
if (t_1 <= -2e-246) {
tmp = t_0;
} else if (t_1 <= 5e-233) {
tmp = (-0.5 * (NaChar * NaChar)) / (NdChar - NaChar);
} else {
tmp = t_0;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = (nachar + ndchar) * 0.5d0
t_1 = (ndchar / (1.0d0 + exp(((mu - ((ec - vef) - edonor)) / kbt)))) - (nachar / ((-1.0d0) - exp(((((ev + vef) + eaccept) - mu) / kbt))))
if (t_1 <= (-2d-246)) then
tmp = t_0
else if (t_1 <= 5d-233) then
tmp = ((-0.5d0) * (nachar * nachar)) / (ndchar - nachar)
else
tmp = t_0
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar + NdChar) * 0.5;
double t_1 = (NdChar / (1.0 + Math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)))) - (NaChar / (-1.0 - Math.exp(((((Ev + Vef) + EAccept) - mu) / KbT))));
double tmp;
if (t_1 <= -2e-246) {
tmp = t_0;
} else if (t_1 <= 5e-233) {
tmp = (-0.5 * (NaChar * NaChar)) / (NdChar - NaChar);
} else {
tmp = t_0;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = (NaChar + NdChar) * 0.5 t_1 = (NdChar / (1.0 + math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)))) - (NaChar / (-1.0 - math.exp(((((Ev + Vef) + EAccept) - mu) / KbT)))) tmp = 0 if t_1 <= -2e-246: tmp = t_0 elif t_1 <= 5e-233: tmp = (-0.5 * (NaChar * NaChar)) / (NdChar - NaChar) else: tmp = t_0 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(NaChar + NdChar) * 0.5) t_1 = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(mu - Float64(Float64(Ec - Vef) - EDonor)) / KbT)))) - Float64(NaChar / Float64(-1.0 - exp(Float64(Float64(Float64(Float64(Ev + Vef) + EAccept) - mu) / KbT))))) tmp = 0.0 if (t_1 <= -2e-246) tmp = t_0; elseif (t_1 <= 5e-233) tmp = Float64(Float64(-0.5 * Float64(NaChar * NaChar)) / Float64(NdChar - NaChar)); else tmp = t_0; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = (NaChar + NdChar) * 0.5; t_1 = (NdChar / (1.0 + exp(((mu - ((Ec - Vef) - EDonor)) / KbT)))) - (NaChar / (-1.0 - exp(((((Ev + Vef) + EAccept) - mu) / KbT)))); tmp = 0.0; if (t_1 <= -2e-246) tmp = t_0; elseif (t_1 <= 5e-233) tmp = (-0.5 * (NaChar * NaChar)) / (NdChar - NaChar); else tmp = t_0; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(NaChar + NdChar), $MachinePrecision] * 0.5), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(mu - N[(N[(Ec - Vef), $MachinePrecision] - EDonor), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(NaChar / N[(-1.0 - N[Exp[N[(N[(N[(N[(Ev + Vef), $MachinePrecision] + EAccept), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$1, -2e-246], t$95$0, If[LessEqual[t$95$1, 5e-233], N[(N[(-0.5 * N[(NaChar * NaChar), $MachinePrecision]), $MachinePrecision] / N[(NdChar - NaChar), $MachinePrecision]), $MachinePrecision], t$95$0]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(NaChar + NdChar\right) \cdot 0.5\\
t_1 := \frac{NdChar}{1 + e^{\frac{mu - \left(\left(Ec - Vef\right) - EDonor\right)}{KbT}}} - \frac{NaChar}{-1 - e^{\frac{\left(\left(Ev + Vef\right) + EAccept\right) - mu}{KbT}}}\\
\mathbf{if}\;t\_1 \leq -2 \cdot 10^{-246}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;t\_1 \leq 5 \cdot 10^{-233}:\\
\;\;\;\;\frac{-0.5 \cdot \left(NaChar \cdot NaChar\right)}{NdChar - NaChar}\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < -1.99999999999999991e-246 or 5.00000000000000012e-233 < (+.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.5%
Taylor expanded in KbT around inf
+-commutativeN/A
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6436.5
Applied rewrites36.5%
if -1.99999999999999991e-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))))) < 5.00000000000000012e-233Initial program 100.0%
Taylor expanded in KbT around inf
+-commutativeN/A
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f643.0
Applied rewrites3.0%
Applied rewrites9.3%
Taylor expanded in NaChar around inf
Applied rewrites36.8%
Final simplification36.6%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (exp (/ (- (+ (+ Ev Vef) EAccept) mu) KbT)))
(t_1 (/ NaChar (- t_0 -1.0)))
(t_2 (/ NdChar (+ 1.0 (exp (/ (- (+ (+ mu Vef) EDonor) Ec) KbT))))))
(if (<= NaChar -7e+16)
t_1
(if (<= NaChar 1.5e-102)
t_2
(if (<= NaChar 1.1e-51)
t_1
(if (<= NaChar 4.9e+99)
t_2
(- (* 0.5 NdChar) (/ NaChar (- -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 = exp(((((Ev + Vef) + EAccept) - mu) / KbT));
double t_1 = NaChar / (t_0 - -1.0);
double t_2 = NdChar / (1.0 + exp(((((mu + Vef) + EDonor) - Ec) / KbT)));
double tmp;
if (NaChar <= -7e+16) {
tmp = t_1;
} else if (NaChar <= 1.5e-102) {
tmp = t_2;
} else if (NaChar <= 1.1e-51) {
tmp = t_1;
} else if (NaChar <= 4.9e+99) {
tmp = t_2;
} else {
tmp = (0.5 * NdChar) - (NaChar / (-1.0 - t_0));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: t_2
real(8) :: tmp
t_0 = exp(((((ev + vef) + eaccept) - mu) / kbt))
t_1 = nachar / (t_0 - (-1.0d0))
t_2 = ndchar / (1.0d0 + exp(((((mu + vef) + edonor) - ec) / kbt)))
if (nachar <= (-7d+16)) then
tmp = t_1
else if (nachar <= 1.5d-102) then
tmp = t_2
else if (nachar <= 1.1d-51) then
tmp = t_1
else if (nachar <= 4.9d+99) then
tmp = t_2
else
tmp = (0.5d0 * ndchar) - (nachar / ((-1.0d0) - 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 = Math.exp(((((Ev + Vef) + EAccept) - mu) / KbT));
double t_1 = NaChar / (t_0 - -1.0);
double t_2 = NdChar / (1.0 + Math.exp(((((mu + Vef) + EDonor) - Ec) / KbT)));
double tmp;
if (NaChar <= -7e+16) {
tmp = t_1;
} else if (NaChar <= 1.5e-102) {
tmp = t_2;
} else if (NaChar <= 1.1e-51) {
tmp = t_1;
} else if (NaChar <= 4.9e+99) {
tmp = t_2;
} else {
tmp = (0.5 * NdChar) - (NaChar / (-1.0 - t_0));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = math.exp(((((Ev + Vef) + EAccept) - mu) / KbT)) t_1 = NaChar / (t_0 - -1.0) t_2 = NdChar / (1.0 + math.exp(((((mu + Vef) + EDonor) - Ec) / KbT))) tmp = 0 if NaChar <= -7e+16: tmp = t_1 elif NaChar <= 1.5e-102: tmp = t_2 elif NaChar <= 1.1e-51: tmp = t_1 elif NaChar <= 4.9e+99: tmp = t_2 else: tmp = (0.5 * NdChar) - (NaChar / (-1.0 - t_0)) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = exp(Float64(Float64(Float64(Float64(Ev + Vef) + EAccept) - mu) / KbT)) t_1 = Float64(NaChar / Float64(t_0 - -1.0)) t_2 = Float64(NdChar / Float64(1.0 + exp(Float64(Float64(Float64(Float64(mu + Vef) + EDonor) - Ec) / KbT)))) tmp = 0.0 if (NaChar <= -7e+16) tmp = t_1; elseif (NaChar <= 1.5e-102) tmp = t_2; elseif (NaChar <= 1.1e-51) tmp = t_1; elseif (NaChar <= 4.9e+99) tmp = t_2; else tmp = Float64(Float64(0.5 * NdChar) - Float64(NaChar / Float64(-1.0 - t_0))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = exp(((((Ev + Vef) + EAccept) - mu) / KbT)); t_1 = NaChar / (t_0 - -1.0); t_2 = NdChar / (1.0 + exp(((((mu + Vef) + EDonor) - Ec) / KbT))); tmp = 0.0; if (NaChar <= -7e+16) tmp = t_1; elseif (NaChar <= 1.5e-102) tmp = t_2; elseif (NaChar <= 1.1e-51) tmp = t_1; elseif (NaChar <= 4.9e+99) tmp = t_2; else tmp = (0.5 * NdChar) - (NaChar / (-1.0 - t_0)); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[Exp[N[(N[(N[(N[(Ev + Vef), $MachinePrecision] + EAccept), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[(NaChar / N[(t$95$0 - -1.0), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(NdChar / N[(1.0 + N[Exp[N[(N[(N[(N[(mu + Vef), $MachinePrecision] + EDonor), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -7e+16], t$95$1, If[LessEqual[NaChar, 1.5e-102], t$95$2, If[LessEqual[NaChar, 1.1e-51], t$95$1, If[LessEqual[NaChar, 4.9e+99], t$95$2, N[(N[(0.5 * NdChar), $MachinePrecision] - N[(NaChar / N[(-1.0 - t$95$0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := e^{\frac{\left(\left(Ev + Vef\right) + EAccept\right) - mu}{KbT}}\\
t_1 := \frac{NaChar}{t\_0 - -1}\\
t_2 := \frac{NdChar}{1 + e^{\frac{\left(\left(mu + Vef\right) + EDonor\right) - Ec}{KbT}}}\\
\mathbf{if}\;NaChar \leq -7 \cdot 10^{+16}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;NaChar \leq 1.5 \cdot 10^{-102}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;NaChar \leq 1.1 \cdot 10^{-51}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;NaChar \leq 4.9 \cdot 10^{+99}:\\
\;\;\;\;t\_2\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot NdChar - \frac{NaChar}{-1 - t\_0}\\
\end{array}
\end{array}
if NaChar < -7e16 or 1.5e-102 < NaChar < 1.1e-51Initial program 98.7%
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-+.f6473.2
Applied rewrites73.2%
if -7e16 < NaChar < 1.5e-102 or 1.1e-51 < NaChar < 4.8999999999999997e99Initial 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-+.f6476.8
Applied rewrites76.8%
if 4.8999999999999997e99 < NaChar Initial program 99.9%
Taylor expanded in KbT around inf
lower-*.f6475.1
Applied rewrites75.1%
Final simplification75.6%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NaChar (- (exp (/ (- (+ (+ Ev Vef) EAccept) mu) KbT)) -1.0)))
(t_1 (/ NdChar (+ 1.0 (exp (/ (- (+ (+ mu Vef) EDonor) Ec) KbT))))))
(if (<= NaChar -7e+16)
t_0
(if (<= NaChar 1.5e-102)
t_1
(if (<= NaChar 1.1e-51) t_0 (if (<= NaChar 2.9e+76) t_1 t_0))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NaChar / (exp(((((Ev + Vef) + EAccept) - mu) / KbT)) - -1.0);
double t_1 = NdChar / (1.0 + exp(((((mu + Vef) + EDonor) - Ec) / KbT)));
double tmp;
if (NaChar <= -7e+16) {
tmp = t_0;
} else if (NaChar <= 1.5e-102) {
tmp = t_1;
} else if (NaChar <= 1.1e-51) {
tmp = t_0;
} else if (NaChar <= 2.9e+76) {
tmp = t_1;
} else {
tmp = t_0;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = nachar / (exp(((((ev + vef) + eaccept) - mu) / kbt)) - (-1.0d0))
t_1 = ndchar / (1.0d0 + exp(((((mu + vef) + edonor) - ec) / kbt)))
if (nachar <= (-7d+16)) then
tmp = t_0
else if (nachar <= 1.5d-102) then
tmp = t_1
else if (nachar <= 1.1d-51) then
tmp = t_0
else if (nachar <= 2.9d+76) then
tmp = t_1
else
tmp = t_0
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NaChar / (Math.exp(((((Ev + Vef) + EAccept) - mu) / KbT)) - -1.0);
double t_1 = NdChar / (1.0 + Math.exp(((((mu + Vef) + EDonor) - Ec) / KbT)));
double tmp;
if (NaChar <= -7e+16) {
tmp = t_0;
} else if (NaChar <= 1.5e-102) {
tmp = t_1;
} else if (NaChar <= 1.1e-51) {
tmp = t_0;
} else if (NaChar <= 2.9e+76) {
tmp = t_1;
} else {
tmp = t_0;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NaChar / (math.exp(((((Ev + Vef) + EAccept) - mu) / KbT)) - -1.0) t_1 = NdChar / (1.0 + math.exp(((((mu + Vef) + EDonor) - Ec) / KbT))) tmp = 0 if NaChar <= -7e+16: tmp = t_0 elif NaChar <= 1.5e-102: tmp = t_1 elif NaChar <= 1.1e-51: tmp = t_0 elif NaChar <= 2.9e+76: tmp = t_1 else: tmp = t_0 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NaChar / Float64(exp(Float64(Float64(Float64(Float64(Ev + Vef) + EAccept) - mu) / KbT)) - -1.0)) t_1 = Float64(NdChar / Float64(1.0 + exp(Float64(Float64(Float64(Float64(mu + Vef) + EDonor) - Ec) / KbT)))) tmp = 0.0 if (NaChar <= -7e+16) tmp = t_0; elseif (NaChar <= 1.5e-102) tmp = t_1; elseif (NaChar <= 1.1e-51) tmp = t_0; elseif (NaChar <= 2.9e+76) tmp = t_1; else tmp = t_0; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NaChar / (exp(((((Ev + Vef) + EAccept) - mu) / KbT)) - -1.0); t_1 = NdChar / (1.0 + exp(((((mu + Vef) + EDonor) - Ec) / KbT))); tmp = 0.0; if (NaChar <= -7e+16) tmp = t_0; elseif (NaChar <= 1.5e-102) tmp = t_1; elseif (NaChar <= 1.1e-51) tmp = t_0; elseif (NaChar <= 2.9e+76) tmp = t_1; else tmp = t_0; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NaChar / N[(N[Exp[N[(N[(N[(N[(Ev + Vef), $MachinePrecision] + EAccept), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] - -1.0), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(NdChar / N[(1.0 + N[Exp[N[(N[(N[(N[(mu + Vef), $MachinePrecision] + EDonor), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -7e+16], t$95$0, If[LessEqual[NaChar, 1.5e-102], t$95$1, If[LessEqual[NaChar, 1.1e-51], t$95$0, If[LessEqual[NaChar, 2.9e+76], t$95$1, t$95$0]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{e^{\frac{\left(\left(Ev + Vef\right) + EAccept\right) - mu}{KbT}} - -1}\\
t_1 := \frac{NdChar}{1 + e^{\frac{\left(\left(mu + Vef\right) + EDonor\right) - Ec}{KbT}}}\\
\mathbf{if}\;NaChar \leq -7 \cdot 10^{+16}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;NaChar \leq 1.5 \cdot 10^{-102}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;NaChar \leq 1.1 \cdot 10^{-51}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;NaChar \leq 2.9 \cdot 10^{+76}:\\
\;\;\;\;t\_1\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if NaChar < -7e16 or 1.5e-102 < NaChar < 1.1e-51 or 2.9000000000000002e76 < NaChar Initial program 99.1%
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-+.f6473.1
Applied rewrites73.1%
if -7e16 < NaChar < 1.5e-102 or 1.1e-51 < NaChar < 2.9000000000000002e76Initial 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-+.f6476.7
Applied rewrites76.7%
Final simplification75.2%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NdChar (+ 1.0 (exp (/ Vef KbT))))))
(if (<= Vef -4.1e+111)
t_0
(if (<= Vef 1.3e+69) (/ NdChar (+ 1.0 (exp (/ 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 / (1.0 + exp((Vef / KbT)));
double tmp;
if (Vef <= -4.1e+111) {
tmp = t_0;
} else if (Vef <= 1.3e+69) {
tmp = NdChar / (1.0 + exp((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 / (1.0d0 + exp((vef / kbt)))
if (vef <= (-4.1d+111)) then
tmp = t_0
else if (vef <= 1.3d+69) then
tmp = ndchar / (1.0d0 + exp((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 / (1.0 + Math.exp((Vef / KbT)));
double tmp;
if (Vef <= -4.1e+111) {
tmp = t_0;
} else if (Vef <= 1.3e+69) {
tmp = NdChar / (1.0 + Math.exp((mu / KbT)));
} else {
tmp = t_0;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NdChar / (1.0 + math.exp((Vef / KbT))) tmp = 0 if Vef <= -4.1e+111: tmp = t_0 elif Vef <= 1.3e+69: tmp = NdChar / (1.0 + math.exp((mu / KbT))) else: tmp = t_0 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NdChar / Float64(1.0 + exp(Float64(Vef / KbT)))) tmp = 0.0 if (Vef <= -4.1e+111) tmp = t_0; elseif (Vef <= 1.3e+69) tmp = Float64(NdChar / Float64(1.0 + exp(Float64(mu / KbT)))); else tmp = t_0; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NdChar / (1.0 + exp((Vef / KbT))); tmp = 0.0; if (Vef <= -4.1e+111) tmp = t_0; elseif (Vef <= 1.3e+69) tmp = NdChar / (1.0 + exp((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[(1.0 + N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[Vef, -4.1e+111], t$95$0, If[LessEqual[Vef, 1.3e+69], N[(NdChar / N[(1.0 + N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$0]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{1 + e^{\frac{Vef}{KbT}}}\\
\mathbf{if}\;Vef \leq -4.1 \cdot 10^{+111}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;Vef \leq 1.3 \cdot 10^{+69}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{mu}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if Vef < -4.09999999999999986e111 or 1.3000000000000001e69 < Vef Initial program 99.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-+.f6465.0
Applied rewrites65.0%
Taylor expanded in Vef around inf
Applied rewrites62.9%
if -4.09999999999999986e111 < Vef < 1.3000000000000001e69Initial 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.9
Applied rewrites60.9%
Taylor expanded in mu around inf
Applied rewrites42.7%
Final simplification50.7%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NdChar (+ 1.0 (exp (/ Vef KbT))))))
(if (<= Vef -2.8e+111)
t_0
(if (<= Vef 1.85e+67) (/ NdChar (+ 1.0 (exp (/ 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 = NdChar / (1.0 + exp((Vef / KbT)));
double tmp;
if (Vef <= -2.8e+111) {
tmp = t_0;
} else if (Vef <= 1.85e+67) {
tmp = NdChar / (1.0 + exp((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) :: tmp
t_0 = ndchar / (1.0d0 + exp((vef / kbt)))
if (vef <= (-2.8d+111)) then
tmp = t_0
else if (vef <= 1.85d+67) then
tmp = ndchar / (1.0d0 + exp((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 = NdChar / (1.0 + Math.exp((Vef / KbT)));
double tmp;
if (Vef <= -2.8e+111) {
tmp = t_0;
} else if (Vef <= 1.85e+67) {
tmp = NdChar / (1.0 + Math.exp((EDonor / KbT)));
} else {
tmp = t_0;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NdChar / (1.0 + math.exp((Vef / KbT))) tmp = 0 if Vef <= -2.8e+111: tmp = t_0 elif Vef <= 1.85e+67: tmp = NdChar / (1.0 + math.exp((EDonor / KbT))) else: tmp = t_0 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NdChar / Float64(1.0 + exp(Float64(Vef / KbT)))) tmp = 0.0 if (Vef <= -2.8e+111) tmp = t_0; elseif (Vef <= 1.85e+67) tmp = Float64(NdChar / Float64(1.0 + exp(Float64(EDonor / KbT)))); else tmp = t_0; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NdChar / (1.0 + exp((Vef / KbT))); tmp = 0.0; if (Vef <= -2.8e+111) tmp = t_0; elseif (Vef <= 1.85e+67) tmp = NdChar / (1.0 + exp((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[(NdChar / N[(1.0 + N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[Vef, -2.8e+111], t$95$0, If[LessEqual[Vef, 1.85e+67], N[(NdChar / N[(1.0 + N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$0]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{1 + e^{\frac{Vef}{KbT}}}\\
\mathbf{if}\;Vef \leq -2.8 \cdot 10^{+111}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;Vef \leq 1.85 \cdot 10^{+67}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{EDonor}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if Vef < -2.7999999999999999e111 or 1.8499999999999999e67 < Vef Initial program 99.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-+.f6465.0
Applied rewrites65.0%
Taylor expanded in Vef around inf
Applied rewrites62.9%
if -2.7999999999999999e111 < Vef < 1.8499999999999999e67Initial 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.9
Applied rewrites60.9%
Taylor expanded in EDonor around inf
Applied rewrites40.9%
Final simplification49.6%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (* (+ NaChar NdChar) 0.5)))
(if (<= KbT -6.6e+34)
(fma -0.25 (* (/ Vef KbT) NaChar) t_0)
(if (<= KbT 1.06e+183)
(/ NdChar (+ 1.0 (exp (/ EDonor KbT))))
(fma -0.25 (* (/ EAccept KbT) NaChar) t_0)))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar + NdChar) * 0.5;
double tmp;
if (KbT <= -6.6e+34) {
tmp = fma(-0.25, ((Vef / KbT) * NaChar), t_0);
} else if (KbT <= 1.06e+183) {
tmp = NdChar / (1.0 + exp((EDonor / KbT)));
} else {
tmp = fma(-0.25, ((EAccept / KbT) * NaChar), t_0);
}
return tmp;
}
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(NaChar + NdChar) * 0.5) tmp = 0.0 if (KbT <= -6.6e+34) tmp = fma(-0.25, Float64(Float64(Vef / KbT) * NaChar), t_0); elseif (KbT <= 1.06e+183) tmp = Float64(NdChar / Float64(1.0 + exp(Float64(EDonor / KbT)))); else tmp = fma(-0.25, Float64(Float64(EAccept / KbT) * NaChar), 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]}, If[LessEqual[KbT, -6.6e+34], N[(-0.25 * N[(N[(Vef / KbT), $MachinePrecision] * NaChar), $MachinePrecision] + t$95$0), $MachinePrecision], If[LessEqual[KbT, 1.06e+183], N[(NdChar / N[(1.0 + N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(-0.25 * N[(N[(EAccept / KbT), $MachinePrecision] * NaChar), $MachinePrecision] + t$95$0), $MachinePrecision]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(NaChar + NdChar\right) \cdot 0.5\\
\mathbf{if}\;KbT \leq -6.6 \cdot 10^{+34}:\\
\;\;\;\;\mathsf{fma}\left(-0.25, \frac{Vef}{KbT} \cdot NaChar, t\_0\right)\\
\mathbf{elif}\;KbT \leq 1.06 \cdot 10^{+183}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{EDonor}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(-0.25, \frac{EAccept}{KbT} \cdot NaChar, t\_0\right)\\
\end{array}
\end{array}
if KbT < -6.59999999999999976e34Initial program 98.4%
Taylor expanded in KbT around -inf
associate-+r+N/A
distribute-lft-outN/A
lower-fma.f64N/A
Applied rewrites46.9%
Taylor expanded in NaChar around -inf
Applied rewrites49.7%
Taylor expanded in Vef around inf
Applied rewrites53.2%
if -6.59999999999999976e34 < KbT < 1.06e183Initial 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.5
Applied rewrites70.5%
Taylor expanded in EDonor around inf
Applied rewrites41.2%
if 1.06e183 < KbT Initial program 99.9%
Taylor expanded in KbT around -inf
associate-+r+N/A
distribute-lft-outN/A
lower-fma.f64N/A
Applied rewrites59.9%
Taylor expanded in NaChar around -inf
Applied rewrites61.2%
Taylor expanded in EAccept around inf
Applied rewrites61.3%
Final simplification46.3%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (if (<= NaChar -510000000000.0) (* 0.5 NaChar) (if (<= NaChar 2.7e+151) (* 0.5 NdChar) (* 0.5 NaChar))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (NaChar <= -510000000000.0) {
tmp = 0.5 * NaChar;
} else if (NaChar <= 2.7e+151) {
tmp = 0.5 * NdChar;
} else {
tmp = 0.5 * NaChar;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if (nachar <= (-510000000000.0d0)) then
tmp = 0.5d0 * nachar
else if (nachar <= 2.7d+151) then
tmp = 0.5d0 * ndchar
else
tmp = 0.5d0 * nachar
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (NaChar <= -510000000000.0) {
tmp = 0.5 * NaChar;
} else if (NaChar <= 2.7e+151) {
tmp = 0.5 * NdChar;
} else {
tmp = 0.5 * NaChar;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if NaChar <= -510000000000.0: tmp = 0.5 * NaChar elif NaChar <= 2.7e+151: tmp = 0.5 * NdChar else: tmp = 0.5 * NaChar return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (NaChar <= -510000000000.0) tmp = Float64(0.5 * NaChar); elseif (NaChar <= 2.7e+151) tmp = Float64(0.5 * NdChar); else tmp = Float64(0.5 * NaChar); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (NaChar <= -510000000000.0) tmp = 0.5 * NaChar; elseif (NaChar <= 2.7e+151) tmp = 0.5 * NdChar; else tmp = 0.5 * NaChar; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[NaChar, -510000000000.0], N[(0.5 * NaChar), $MachinePrecision], If[LessEqual[NaChar, 2.7e+151], N[(0.5 * NdChar), $MachinePrecision], N[(0.5 * NaChar), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NaChar \leq -510000000000:\\
\;\;\;\;0.5 \cdot NaChar\\
\mathbf{elif}\;NaChar \leq 2.7 \cdot 10^{+151}:\\
\;\;\;\;0.5 \cdot NdChar\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot NaChar\\
\end{array}
\end{array}
if NaChar < -5.1e11 or 2.7000000000000001e151 < NaChar Initial program 98.9%
Taylor expanded in KbT around inf
+-commutativeN/A
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6435.2
Applied rewrites35.2%
Taylor expanded in NaChar around inf
Applied rewrites29.0%
if -5.1e11 < NaChar < 2.7000000000000001e151Initial 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-+.f6472.9
Applied rewrites72.9%
Taylor expanded in KbT around inf
Applied rewrites24.7%
(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 99.6%
Taylor expanded in KbT around inf
+-commutativeN/A
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6428.8
Applied rewrites28.8%
Final simplification28.8%
(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 99.6%
Taylor expanded in KbT around inf
+-commutativeN/A
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6428.8
Applied rewrites28.8%
Taylor expanded in NaChar around inf
Applied rewrites18.1%
herbie shell --seed 2024259
(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))))))