
(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 25 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 (- (exp (/ (- (+ (+ Ev Vef) EAccept) mu) KbT)) -1.0)) (/ NdChar (- -1.0 (pow (E) (/ (- mu (- (- Ec Vef) EDonor)) KbT))))))
\begin{array}{l}
\\
\frac{NaChar}{e^{\frac{\left(\left(Ev + Vef\right) + EAccept\right) - mu}{KbT}} - -1} - \frac{NdChar}{-1 - {\mathsf{E}\left(\right)}^{\left(\frac{mu - \left(\left(Ec - Vef\right) - EDonor\right)}{KbT}\right)}}
\end{array}
Initial program 99.9%
lift-exp.f64N/A
lift-/.f64N/A
clear-numN/A
div-invN/A
clear-numN/A
lift-/.f64N/A
exp-prodN/A
lower-pow.f64N/A
lower-exp.f6499.9
Applied rewrites99.9%
Final simplification99.9%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (exp (/ (- (+ (+ Ev Vef) EAccept) mu) KbT)))
(t_1 (exp (/ (- mu (- (- Ec Vef) EDonor)) KbT)))
(t_2 (- (/ NaChar (- (exp (/ Vef KbT)) -1.0)) (/ NdChar (- -1.0 t_1))))
(t_3 (- (/ NdChar (- t_1 -1.0)) (/ NaChar (- -1.0 t_0)))))
(if (<= t_3 -2e-185) t_2 (if (<= t_3 0.0) (/ NaChar (- t_0 -1.0)) t_2))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = exp(((((Ev + Vef) + EAccept) - mu) / KbT));
double t_1 = exp(((mu - ((Ec - Vef) - EDonor)) / KbT));
double t_2 = (NaChar / (exp((Vef / KbT)) - -1.0)) - (NdChar / (-1.0 - t_1));
double t_3 = (NdChar / (t_1 - -1.0)) - (NaChar / (-1.0 - t_0));
double tmp;
if (t_3 <= -2e-185) {
tmp = t_2;
} else if (t_3 <= 0.0) {
tmp = NaChar / (t_0 - -1.0);
} else {
tmp = t_2;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: t_2
real(8) :: t_3
real(8) :: tmp
t_0 = exp(((((ev + vef) + eaccept) - mu) / kbt))
t_1 = exp(((mu - ((ec - vef) - edonor)) / kbt))
t_2 = (nachar / (exp((vef / kbt)) - (-1.0d0))) - (ndchar / ((-1.0d0) - t_1))
t_3 = (ndchar / (t_1 - (-1.0d0))) - (nachar / ((-1.0d0) - t_0))
if (t_3 <= (-2d-185)) then
tmp = t_2
else if (t_3 <= 0.0d0) then
tmp = nachar / (t_0 - (-1.0d0))
else
tmp = t_2
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = Math.exp(((((Ev + Vef) + EAccept) - mu) / KbT));
double t_1 = Math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT));
double t_2 = (NaChar / (Math.exp((Vef / KbT)) - -1.0)) - (NdChar / (-1.0 - t_1));
double t_3 = (NdChar / (t_1 - -1.0)) - (NaChar / (-1.0 - t_0));
double tmp;
if (t_3 <= -2e-185) {
tmp = t_2;
} else if (t_3 <= 0.0) {
tmp = NaChar / (t_0 - -1.0);
} else {
tmp = t_2;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = math.exp(((((Ev + Vef) + EAccept) - mu) / KbT)) t_1 = math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)) t_2 = (NaChar / (math.exp((Vef / KbT)) - -1.0)) - (NdChar / (-1.0 - t_1)) t_3 = (NdChar / (t_1 - -1.0)) - (NaChar / (-1.0 - t_0)) tmp = 0 if t_3 <= -2e-185: tmp = t_2 elif t_3 <= 0.0: tmp = NaChar / (t_0 - -1.0) else: tmp = t_2 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 = exp(Float64(Float64(mu - Float64(Float64(Ec - Vef) - EDonor)) / KbT)) t_2 = Float64(Float64(NaChar / Float64(exp(Float64(Vef / KbT)) - -1.0)) - Float64(NdChar / Float64(-1.0 - t_1))) t_3 = Float64(Float64(NdChar / Float64(t_1 - -1.0)) - Float64(NaChar / Float64(-1.0 - t_0))) tmp = 0.0 if (t_3 <= -2e-185) tmp = t_2; elseif (t_3 <= 0.0) tmp = Float64(NaChar / Float64(t_0 - -1.0)); else tmp = t_2; 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 = exp(((mu - ((Ec - Vef) - EDonor)) / KbT)); t_2 = (NaChar / (exp((Vef / KbT)) - -1.0)) - (NdChar / (-1.0 - t_1)); t_3 = (NdChar / (t_1 - -1.0)) - (NaChar / (-1.0 - t_0)); tmp = 0.0; if (t_3 <= -2e-185) tmp = t_2; elseif (t_3 <= 0.0) tmp = NaChar / (t_0 - -1.0); else tmp = t_2; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[Exp[N[(N[(N[(N[(Ev + Vef), $MachinePrecision] + EAccept), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[Exp[N[(N[(mu - N[(N[(Ec - Vef), $MachinePrecision] - EDonor), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$2 = N[(N[(NaChar / N[(N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision] - -1.0), $MachinePrecision]), $MachinePrecision] - N[(NdChar / N[(-1.0 - t$95$1), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$3 = N[(N[(NdChar / N[(t$95$1 - -1.0), $MachinePrecision]), $MachinePrecision] - N[(NaChar / N[(-1.0 - t$95$0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$3, -2e-185], t$95$2, If[LessEqual[t$95$3, 0.0], N[(NaChar / N[(t$95$0 - -1.0), $MachinePrecision]), $MachinePrecision], t$95$2]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := e^{\frac{\left(\left(Ev + Vef\right) + EAccept\right) - mu}{KbT}}\\
t_1 := e^{\frac{mu - \left(\left(Ec - Vef\right) - EDonor\right)}{KbT}}\\
t_2 := \frac{NaChar}{e^{\frac{Vef}{KbT}} - -1} - \frac{NdChar}{-1 - t\_1}\\
t_3 := \frac{NdChar}{t\_1 - -1} - \frac{NaChar}{-1 - t\_0}\\
\mathbf{if}\;t\_3 \leq -2 \cdot 10^{-185}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;t\_3 \leq 0:\\
\;\;\;\;\frac{NaChar}{t\_0 - -1}\\
\mathbf{else}:\\
\;\;\;\;t\_2\\
\end{array}
\end{array}
if (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < -2e-185 or 0.0 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) Initial program 99.9%
Taylor expanded in Vef around inf
lower-/.f6477.9
Applied rewrites77.9%
if -2e-185 < (+.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 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-+.f6496.5
Applied rewrites96.5%
Final simplification81.8%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0
(-
(/ NdChar (- (exp (/ (- mu (- (- Ec Vef) EDonor)) KbT)) -1.0))
(/ NaChar (- -1.0 (exp (/ (- (+ (+ Ev Vef) EAccept) mu) KbT)))))))
(if (<= t_0 -1e-127)
(* (+ NaChar NdChar) 0.5)
(if (<= t_0 5e-240)
(/ NdChar (- 2.0 (/ (- Ec (+ (+ mu Vef) EDonor)) KbT)))
(*
(/ 0.5 (/ (- NdChar NaChar) (+ NaChar NdChar)))
(- NdChar NaChar))))))
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 - ((Ec - Vef) - EDonor)) / KbT)) - -1.0)) - (NaChar / (-1.0 - exp(((((Ev + Vef) + EAccept) - mu) / KbT))));
double tmp;
if (t_0 <= -1e-127) {
tmp = (NaChar + NdChar) * 0.5;
} else if (t_0 <= 5e-240) {
tmp = NdChar / (2.0 - ((Ec - ((mu + Vef) + EDonor)) / KbT));
} else {
tmp = (0.5 / ((NdChar - NaChar) / (NaChar + NdChar))) * (NdChar - 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) :: t_0
real(8) :: tmp
t_0 = (ndchar / (exp(((mu - ((ec - vef) - edonor)) / kbt)) - (-1.0d0))) - (nachar / ((-1.0d0) - exp(((((ev + vef) + eaccept) - mu) / kbt))))
if (t_0 <= (-1d-127)) then
tmp = (nachar + ndchar) * 0.5d0
else if (t_0 <= 5d-240) then
tmp = ndchar / (2.0d0 - ((ec - ((mu + vef) + edonor)) / kbt))
else
tmp = (0.5d0 / ((ndchar - nachar) / (nachar + ndchar))) * (ndchar - 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 t_0 = (NdChar / (Math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)) - -1.0)) - (NaChar / (-1.0 - Math.exp(((((Ev + Vef) + EAccept) - mu) / KbT))));
double tmp;
if (t_0 <= -1e-127) {
tmp = (NaChar + NdChar) * 0.5;
} else if (t_0 <= 5e-240) {
tmp = NdChar / (2.0 - ((Ec - ((mu + Vef) + EDonor)) / KbT));
} else {
tmp = (0.5 / ((NdChar - NaChar) / (NaChar + NdChar))) * (NdChar - NaChar);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = (NdChar / (math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)) - -1.0)) - (NaChar / (-1.0 - math.exp(((((Ev + Vef) + EAccept) - mu) / KbT)))) tmp = 0 if t_0 <= -1e-127: tmp = (NaChar + NdChar) * 0.5 elif t_0 <= 5e-240: tmp = NdChar / (2.0 - ((Ec - ((mu + Vef) + EDonor)) / KbT)) else: tmp = (0.5 / ((NdChar - NaChar) / (NaChar + NdChar))) * (NdChar - NaChar) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(NdChar / Float64(exp(Float64(Float64(mu - Float64(Float64(Ec - Vef) - EDonor)) / KbT)) - -1.0)) - Float64(NaChar / Float64(-1.0 - exp(Float64(Float64(Float64(Float64(Ev + Vef) + EAccept) - mu) / KbT))))) tmp = 0.0 if (t_0 <= -1e-127) tmp = Float64(Float64(NaChar + NdChar) * 0.5); elseif (t_0 <= 5e-240) tmp = Float64(NdChar / Float64(2.0 - Float64(Float64(Ec - Float64(Float64(mu + Vef) + EDonor)) / KbT))); else tmp = Float64(Float64(0.5 / Float64(Float64(NdChar - NaChar) / Float64(NaChar + NdChar))) * Float64(NdChar - NaChar)); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = (NdChar / (exp(((mu - ((Ec - Vef) - EDonor)) / KbT)) - -1.0)) - (NaChar / (-1.0 - exp(((((Ev + Vef) + EAccept) - mu) / KbT)))); tmp = 0.0; if (t_0 <= -1e-127) tmp = (NaChar + NdChar) * 0.5; elseif (t_0 <= 5e-240) tmp = NdChar / (2.0 - ((Ec - ((mu + Vef) + EDonor)) / KbT)); else tmp = (0.5 / ((NdChar - NaChar) / (NaChar + NdChar))) * (NdChar - NaChar); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(NdChar / N[(N[Exp[N[(N[(mu - N[(N[(Ec - Vef), $MachinePrecision] - EDonor), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] - -1.0), $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$0, -1e-127], N[(N[(NaChar + NdChar), $MachinePrecision] * 0.5), $MachinePrecision], If[LessEqual[t$95$0, 5e-240], N[(NdChar / N[(2.0 - N[(N[(Ec - N[(N[(mu + Vef), $MachinePrecision] + EDonor), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(0.5 / N[(N[(NdChar - NaChar), $MachinePrecision] / N[(NaChar + NdChar), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(NdChar - NaChar), $MachinePrecision]), $MachinePrecision]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{e^{\frac{mu - \left(\left(Ec - Vef\right) - EDonor\right)}{KbT}} - -1} - \frac{NaChar}{-1 - e^{\frac{\left(\left(Ev + Vef\right) + EAccept\right) - mu}{KbT}}}\\
\mathbf{if}\;t\_0 \leq -1 \cdot 10^{-127}:\\
\;\;\;\;\left(NaChar + NdChar\right) \cdot 0.5\\
\mathbf{elif}\;t\_0 \leq 5 \cdot 10^{-240}:\\
\;\;\;\;\frac{NdChar}{2 - \frac{Ec - \left(\left(mu + Vef\right) + EDonor\right)}{KbT}}\\
\mathbf{else}:\\
\;\;\;\;\frac{0.5}{\frac{NdChar - NaChar}{NaChar + NdChar}} \cdot \left(NdChar - NaChar\right)\\
\end{array}
\end{array}
if (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < -1e-127Initial program 99.7%
Taylor expanded in KbT around inf
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6436.6
Applied rewrites36.6%
if -1e-127 < (+.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.0000000000000004e-240Initial 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-+.f6477.5
Applied rewrites77.5%
Taylor expanded in KbT around inf
Applied rewrites40.3%
Taylor expanded in KbT around -inf
Applied rewrites46.4%
if 5.0000000000000004e-240 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) Initial program 100.0%
Taylor expanded in KbT around inf
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6437.1
Applied rewrites37.1%
Applied rewrites17.8%
Applied rewrites37.1%
Final simplification39.3%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0
(-
(/ NdChar (- (exp (/ (- mu (- (- Ec Vef) EDonor)) KbT)) -1.0))
(/ NaChar (- -1.0 (exp (/ (- (+ (+ Ev Vef) EAccept) mu) KbT)))))))
(if (<= t_0 -5e-200)
(* (+ NaChar NdChar) 0.5)
(if (<= t_0 5e-249)
(/ NdChar (/ (- (+ (+ mu Vef) EDonor) Ec) KbT))
(*
(/ 0.5 (/ (- NdChar NaChar) (+ NaChar NdChar)))
(- NdChar NaChar))))))
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 - ((Ec - Vef) - EDonor)) / KbT)) - -1.0)) - (NaChar / (-1.0 - exp(((((Ev + Vef) + EAccept) - mu) / KbT))));
double tmp;
if (t_0 <= -5e-200) {
tmp = (NaChar + NdChar) * 0.5;
} else if (t_0 <= 5e-249) {
tmp = NdChar / ((((mu + Vef) + EDonor) - Ec) / KbT);
} else {
tmp = (0.5 / ((NdChar - NaChar) / (NaChar + NdChar))) * (NdChar - 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) :: t_0
real(8) :: tmp
t_0 = (ndchar / (exp(((mu - ((ec - vef) - edonor)) / kbt)) - (-1.0d0))) - (nachar / ((-1.0d0) - exp(((((ev + vef) + eaccept) - mu) / kbt))))
if (t_0 <= (-5d-200)) then
tmp = (nachar + ndchar) * 0.5d0
else if (t_0 <= 5d-249) then
tmp = ndchar / ((((mu + vef) + edonor) - ec) / kbt)
else
tmp = (0.5d0 / ((ndchar - nachar) / (nachar + ndchar))) * (ndchar - 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 t_0 = (NdChar / (Math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)) - -1.0)) - (NaChar / (-1.0 - Math.exp(((((Ev + Vef) + EAccept) - mu) / KbT))));
double tmp;
if (t_0 <= -5e-200) {
tmp = (NaChar + NdChar) * 0.5;
} else if (t_0 <= 5e-249) {
tmp = NdChar / ((((mu + Vef) + EDonor) - Ec) / KbT);
} else {
tmp = (0.5 / ((NdChar - NaChar) / (NaChar + NdChar))) * (NdChar - NaChar);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = (NdChar / (math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)) - -1.0)) - (NaChar / (-1.0 - math.exp(((((Ev + Vef) + EAccept) - mu) / KbT)))) tmp = 0 if t_0 <= -5e-200: tmp = (NaChar + NdChar) * 0.5 elif t_0 <= 5e-249: tmp = NdChar / ((((mu + Vef) + EDonor) - Ec) / KbT) else: tmp = (0.5 / ((NdChar - NaChar) / (NaChar + NdChar))) * (NdChar - NaChar) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(NdChar / Float64(exp(Float64(Float64(mu - Float64(Float64(Ec - Vef) - EDonor)) / KbT)) - -1.0)) - Float64(NaChar / Float64(-1.0 - exp(Float64(Float64(Float64(Float64(Ev + Vef) + EAccept) - mu) / KbT))))) tmp = 0.0 if (t_0 <= -5e-200) tmp = Float64(Float64(NaChar + NdChar) * 0.5); elseif (t_0 <= 5e-249) tmp = Float64(NdChar / Float64(Float64(Float64(Float64(mu + Vef) + EDonor) - Ec) / KbT)); else tmp = Float64(Float64(0.5 / Float64(Float64(NdChar - NaChar) / Float64(NaChar + NdChar))) * Float64(NdChar - NaChar)); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = (NdChar / (exp(((mu - ((Ec - Vef) - EDonor)) / KbT)) - -1.0)) - (NaChar / (-1.0 - exp(((((Ev + Vef) + EAccept) - mu) / KbT)))); tmp = 0.0; if (t_0 <= -5e-200) tmp = (NaChar + NdChar) * 0.5; elseif (t_0 <= 5e-249) tmp = NdChar / ((((mu + Vef) + EDonor) - Ec) / KbT); else tmp = (0.5 / ((NdChar - NaChar) / (NaChar + NdChar))) * (NdChar - NaChar); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(NdChar / N[(N[Exp[N[(N[(mu - N[(N[(Ec - Vef), $MachinePrecision] - EDonor), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] - -1.0), $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$0, -5e-200], N[(N[(NaChar + NdChar), $MachinePrecision] * 0.5), $MachinePrecision], If[LessEqual[t$95$0, 5e-249], N[(NdChar / N[(N[(N[(N[(mu + Vef), $MachinePrecision] + EDonor), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision], N[(N[(0.5 / N[(N[(NdChar - NaChar), $MachinePrecision] / N[(NaChar + NdChar), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(NdChar - NaChar), $MachinePrecision]), $MachinePrecision]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{e^{\frac{mu - \left(\left(Ec - Vef\right) - EDonor\right)}{KbT}} - -1} - \frac{NaChar}{-1 - e^{\frac{\left(\left(Ev + Vef\right) + EAccept\right) - mu}{KbT}}}\\
\mathbf{if}\;t\_0 \leq -5 \cdot 10^{-200}:\\
\;\;\;\;\left(NaChar + NdChar\right) \cdot 0.5\\
\mathbf{elif}\;t\_0 \leq 5 \cdot 10^{-249}:\\
\;\;\;\;\frac{NdChar}{\frac{\left(\left(mu + Vef\right) + EDonor\right) - Ec}{KbT}}\\
\mathbf{else}:\\
\;\;\;\;\frac{0.5}{\frac{NdChar - NaChar}{NaChar + NdChar}} \cdot \left(NdChar - NaChar\right)\\
\end{array}
\end{array}
if (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < -4.99999999999999991e-200Initial program 99.8%
Taylor expanded in KbT around inf
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6435.5
Applied rewrites35.5%
if -4.99999999999999991e-200 < (+.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.9999999999999999e-249Initial 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-+.f6479.7
Applied rewrites79.7%
Taylor expanded in KbT around inf
Applied rewrites41.6%
Taylor expanded in KbT around 0
Applied rewrites48.5%
if 4.9999999999999999e-249 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) Initial program 100.0%
Taylor expanded in KbT around inf
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6437.3
Applied rewrites37.3%
Applied rewrites17.5%
Applied rewrites37.3%
Final simplification39.2%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (* (+ NaChar NdChar) 0.5))
(t_1
(-
(/ NdChar (- (exp (/ (- mu (- (- Ec Vef) EDonor)) KbT)) -1.0))
(/ NaChar (- -1.0 (exp (/ (- (+ (+ Ev Vef) EAccept) mu) KbT)))))))
(if (<= t_1 -5e-200)
t_0
(if (<= t_1 5e-249)
(/ NdChar (/ (- (+ (+ mu Vef) EDonor) Ec) KbT))
t_0))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar + NdChar) * 0.5;
double t_1 = (NdChar / (exp(((mu - ((Ec - Vef) - EDonor)) / KbT)) - -1.0)) - (NaChar / (-1.0 - exp(((((Ev + Vef) + EAccept) - mu) / KbT))));
double tmp;
if (t_1 <= -5e-200) {
tmp = t_0;
} else if (t_1 <= 5e-249) {
tmp = NdChar / ((((mu + Vef) + EDonor) - Ec) / KbT);
} else {
tmp = t_0;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = (nachar + ndchar) * 0.5d0
t_1 = (ndchar / (exp(((mu - ((ec - vef) - edonor)) / kbt)) - (-1.0d0))) - (nachar / ((-1.0d0) - exp(((((ev + vef) + eaccept) - mu) / kbt))))
if (t_1 <= (-5d-200)) then
tmp = t_0
else if (t_1 <= 5d-249) then
tmp = ndchar / ((((mu + vef) + edonor) - ec) / kbt)
else
tmp = t_0
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar + NdChar) * 0.5;
double t_1 = (NdChar / (Math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)) - -1.0)) - (NaChar / (-1.0 - Math.exp(((((Ev + Vef) + EAccept) - mu) / KbT))));
double tmp;
if (t_1 <= -5e-200) {
tmp = t_0;
} else if (t_1 <= 5e-249) {
tmp = NdChar / ((((mu + Vef) + EDonor) - Ec) / KbT);
} else {
tmp = t_0;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = (NaChar + NdChar) * 0.5 t_1 = (NdChar / (math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)) - -1.0)) - (NaChar / (-1.0 - math.exp(((((Ev + Vef) + EAccept) - mu) / KbT)))) tmp = 0 if t_1 <= -5e-200: tmp = t_0 elif t_1 <= 5e-249: tmp = NdChar / ((((mu + Vef) + EDonor) - Ec) / KbT) else: tmp = t_0 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(NaChar + NdChar) * 0.5) t_1 = Float64(Float64(NdChar / Float64(exp(Float64(Float64(mu - Float64(Float64(Ec - Vef) - EDonor)) / KbT)) - -1.0)) - Float64(NaChar / Float64(-1.0 - exp(Float64(Float64(Float64(Float64(Ev + Vef) + EAccept) - mu) / KbT))))) tmp = 0.0 if (t_1 <= -5e-200) tmp = t_0; elseif (t_1 <= 5e-249) tmp = Float64(NdChar / Float64(Float64(Float64(Float64(mu + Vef) + EDonor) - Ec) / KbT)); else tmp = t_0; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = (NaChar + NdChar) * 0.5; t_1 = (NdChar / (exp(((mu - ((Ec - Vef) - EDonor)) / KbT)) - -1.0)) - (NaChar / (-1.0 - exp(((((Ev + Vef) + EAccept) - mu) / KbT)))); tmp = 0.0; if (t_1 <= -5e-200) tmp = t_0; elseif (t_1 <= 5e-249) tmp = NdChar / ((((mu + Vef) + EDonor) - Ec) / KbT); else tmp = t_0; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(NaChar + NdChar), $MachinePrecision] * 0.5), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NdChar / N[(N[Exp[N[(N[(mu - N[(N[(Ec - Vef), $MachinePrecision] - EDonor), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] - -1.0), $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, -5e-200], t$95$0, If[LessEqual[t$95$1, 5e-249], N[(NdChar / N[(N[(N[(N[(mu + Vef), $MachinePrecision] + EDonor), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision], t$95$0]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(NaChar + NdChar\right) \cdot 0.5\\
t_1 := \frac{NdChar}{e^{\frac{mu - \left(\left(Ec - Vef\right) - EDonor\right)}{KbT}} - -1} - \frac{NaChar}{-1 - e^{\frac{\left(\left(Ev + Vef\right) + EAccept\right) - mu}{KbT}}}\\
\mathbf{if}\;t\_1 \leq -5 \cdot 10^{-200}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;t\_1 \leq 5 \cdot 10^{-249}:\\
\;\;\;\;\frac{NdChar}{\frac{\left(\left(mu + Vef\right) + EDonor\right) - Ec}{KbT}}\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < -4.99999999999999991e-200 or 4.9999999999999999e-249 < (+.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-+.f6436.4
Applied rewrites36.4%
if -4.99999999999999991e-200 < (+.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.9999999999999999e-249Initial 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-+.f6479.7
Applied rewrites79.7%
Taylor expanded in KbT around inf
Applied rewrites41.6%
Taylor expanded in KbT around 0
Applied rewrites48.5%
Final simplification39.2%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (* (+ NaChar NdChar) 0.5))
(t_1
(-
(/ NdChar (- (exp (/ (- mu (- (- Ec Vef) EDonor)) KbT)) -1.0))
(/ NaChar (- -1.0 (exp (/ (- (+ (+ Ev Vef) EAccept) mu) KbT)))))))
(if (<= t_1 -2e-260)
t_0
(if (<= t_1 5e-249)
(/ (* -0.5 (* NdChar NdChar)) (- NaChar NdChar))
t_0))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar + NdChar) * 0.5;
double t_1 = (NdChar / (exp(((mu - ((Ec - Vef) - EDonor)) / KbT)) - -1.0)) - (NaChar / (-1.0 - exp(((((Ev + Vef) + EAccept) - mu) / KbT))));
double tmp;
if (t_1 <= -2e-260) {
tmp = t_0;
} else if (t_1 <= 5e-249) {
tmp = (-0.5 * (NdChar * NdChar)) / (NaChar - NdChar);
} else {
tmp = t_0;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = (nachar + ndchar) * 0.5d0
t_1 = (ndchar / (exp(((mu - ((ec - vef) - edonor)) / kbt)) - (-1.0d0))) - (nachar / ((-1.0d0) - exp(((((ev + vef) + eaccept) - mu) / kbt))))
if (t_1 <= (-2d-260)) then
tmp = t_0
else if (t_1 <= 5d-249) then
tmp = ((-0.5d0) * (ndchar * ndchar)) / (nachar - ndchar)
else
tmp = t_0
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar + NdChar) * 0.5;
double t_1 = (NdChar / (Math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)) - -1.0)) - (NaChar / (-1.0 - Math.exp(((((Ev + Vef) + EAccept) - mu) / KbT))));
double tmp;
if (t_1 <= -2e-260) {
tmp = t_0;
} else if (t_1 <= 5e-249) {
tmp = (-0.5 * (NdChar * NdChar)) / (NaChar - NdChar);
} else {
tmp = t_0;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = (NaChar + NdChar) * 0.5 t_1 = (NdChar / (math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)) - -1.0)) - (NaChar / (-1.0 - math.exp(((((Ev + Vef) + EAccept) - mu) / KbT)))) tmp = 0 if t_1 <= -2e-260: tmp = t_0 elif t_1 <= 5e-249: tmp = (-0.5 * (NdChar * NdChar)) / (NaChar - NdChar) else: tmp = t_0 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(NaChar + NdChar) * 0.5) t_1 = Float64(Float64(NdChar / Float64(exp(Float64(Float64(mu - Float64(Float64(Ec - Vef) - EDonor)) / KbT)) - -1.0)) - Float64(NaChar / Float64(-1.0 - exp(Float64(Float64(Float64(Float64(Ev + Vef) + EAccept) - mu) / KbT))))) tmp = 0.0 if (t_1 <= -2e-260) tmp = t_0; elseif (t_1 <= 5e-249) tmp = Float64(Float64(-0.5 * Float64(NdChar * NdChar)) / Float64(NaChar - NdChar)); else tmp = t_0; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = (NaChar + NdChar) * 0.5; t_1 = (NdChar / (exp(((mu - ((Ec - Vef) - EDonor)) / KbT)) - -1.0)) - (NaChar / (-1.0 - exp(((((Ev + Vef) + EAccept) - mu) / KbT)))); tmp = 0.0; if (t_1 <= -2e-260) tmp = t_0; elseif (t_1 <= 5e-249) tmp = (-0.5 * (NdChar * NdChar)) / (NaChar - NdChar); else tmp = t_0; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(NaChar + NdChar), $MachinePrecision] * 0.5), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NdChar / N[(N[Exp[N[(N[(mu - N[(N[(Ec - Vef), $MachinePrecision] - EDonor), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] - -1.0), $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-260], t$95$0, If[LessEqual[t$95$1, 5e-249], N[(N[(-0.5 * N[(NdChar * NdChar), $MachinePrecision]), $MachinePrecision] / N[(NaChar - NdChar), $MachinePrecision]), $MachinePrecision], t$95$0]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(NaChar + NdChar\right) \cdot 0.5\\
t_1 := \frac{NdChar}{e^{\frac{mu - \left(\left(Ec - Vef\right) - EDonor\right)}{KbT}} - -1} - \frac{NaChar}{-1 - e^{\frac{\left(\left(Ev + Vef\right) + EAccept\right) - mu}{KbT}}}\\
\mathbf{if}\;t\_1 \leq -2 \cdot 10^{-260}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;t\_1 \leq 5 \cdot 10^{-249}:\\
\;\;\;\;\frac{-0.5 \cdot \left(NdChar \cdot NdChar\right)}{NaChar - NdChar}\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < -1.99999999999999992e-260 or 4.9999999999999999e-249 < (+.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-+.f6435.4
Applied rewrites35.4%
if -1.99999999999999992e-260 < (+.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.9999999999999999e-249Initial program 100.0%
Taylor expanded in KbT around inf
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f642.8
Applied rewrites2.8%
Applied rewrites4.5%
Taylor expanded in NaChar around 0
Applied rewrites31.6%
Final simplification34.6%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (* (+ NaChar NdChar) 0.5))
(t_1
(-
(/ NdChar (- (exp (/ (- mu (- (- Ec Vef) EDonor)) KbT)) -1.0))
(/ NaChar (- -1.0 (exp (/ (- (+ (+ Ev Vef) EAccept) mu) KbT)))))))
(if (<= t_1 -1e-265) t_0 (if (<= t_1 5e-269) (/ NdChar (/ 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 = (NaChar + NdChar) * 0.5;
double t_1 = (NdChar / (exp(((mu - ((Ec - Vef) - EDonor)) / KbT)) - -1.0)) - (NaChar / (-1.0 - exp(((((Ev + Vef) + EAccept) - mu) / KbT))));
double tmp;
if (t_1 <= -1e-265) {
tmp = t_0;
} else if (t_1 <= 5e-269) {
tmp = NdChar / (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 = (nachar + ndchar) * 0.5d0
t_1 = (ndchar / (exp(((mu - ((ec - vef) - edonor)) / kbt)) - (-1.0d0))) - (nachar / ((-1.0d0) - exp(((((ev + vef) + eaccept) - mu) / kbt))))
if (t_1 <= (-1d-265)) then
tmp = t_0
else if (t_1 <= 5d-269) then
tmp = ndchar / (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 = (NaChar + NdChar) * 0.5;
double t_1 = (NdChar / (Math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)) - -1.0)) - (NaChar / (-1.0 - Math.exp(((((Ev + Vef) + EAccept) - mu) / KbT))));
double tmp;
if (t_1 <= -1e-265) {
tmp = t_0;
} else if (t_1 <= 5e-269) {
tmp = NdChar / (Vef / 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 / (math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)) - -1.0)) - (NaChar / (-1.0 - math.exp(((((Ev + Vef) + EAccept) - mu) / KbT)))) tmp = 0 if t_1 <= -1e-265: tmp = t_0 elif t_1 <= 5e-269: tmp = NdChar / (Vef / 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(exp(Float64(Float64(mu - Float64(Float64(Ec - Vef) - EDonor)) / KbT)) - -1.0)) - Float64(NaChar / Float64(-1.0 - exp(Float64(Float64(Float64(Float64(Ev + Vef) + EAccept) - mu) / KbT))))) tmp = 0.0 if (t_1 <= -1e-265) tmp = t_0; elseif (t_1 <= 5e-269) tmp = Float64(NdChar / 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 = (NaChar + NdChar) * 0.5; t_1 = (NdChar / (exp(((mu - ((Ec - Vef) - EDonor)) / KbT)) - -1.0)) - (NaChar / (-1.0 - exp(((((Ev + Vef) + EAccept) - mu) / KbT)))); tmp = 0.0; if (t_1 <= -1e-265) tmp = t_0; elseif (t_1 <= 5e-269) tmp = NdChar / (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[(NaChar + NdChar), $MachinePrecision] * 0.5), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NdChar / N[(N[Exp[N[(N[(mu - N[(N[(Ec - Vef), $MachinePrecision] - EDonor), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] - -1.0), $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, -1e-265], t$95$0, If[LessEqual[t$95$1, 5e-269], N[(NdChar / N[(Vef / KbT), $MachinePrecision]), $MachinePrecision], t$95$0]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(NaChar + NdChar\right) \cdot 0.5\\
t_1 := \frac{NdChar}{e^{\frac{mu - \left(\left(Ec - Vef\right) - EDonor\right)}{KbT}} - -1} - \frac{NaChar}{-1 - e^{\frac{\left(\left(Ev + Vef\right) + EAccept\right) - mu}{KbT}}}\\
\mathbf{if}\;t\_1 \leq -1 \cdot 10^{-265}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;t\_1 \leq 5 \cdot 10^{-269}:\\
\;\;\;\;\frac{NdChar}{\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))))) < -9.99999999999999985e-266 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))))) Initial program 99.9%
Taylor expanded in KbT around inf
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6434.8
Applied rewrites34.8%
if -9.99999999999999985e-266 < (+.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 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-+.f6492.4
Applied rewrites92.4%
Taylor expanded in KbT around inf
Applied rewrites49.9%
Taylor expanded in Vef around inf
Applied rewrites28.5%
Final simplification33.6%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (* (+ NaChar NdChar) 0.5))
(t_1
(-
(/ NdChar (- (exp (/ (- mu (- (- Ec Vef) EDonor)) KbT)) -1.0))
(/ NaChar (- -1.0 (exp (/ (- (+ (+ Ev Vef) EAccept) mu) KbT)))))))
(if (<= t_1 -1e-217)
t_0
(if (<= t_1 4e-262) (/ NdChar (/ 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 = (NdChar / (exp(((mu - ((Ec - Vef) - EDonor)) / KbT)) - -1.0)) - (NaChar / (-1.0 - exp(((((Ev + Vef) + EAccept) - mu) / KbT))));
double tmp;
if (t_1 <= -1e-217) {
tmp = t_0;
} else if (t_1 <= 4e-262) {
tmp = NdChar / (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 = (ndchar / (exp(((mu - ((ec - vef) - edonor)) / kbt)) - (-1.0d0))) - (nachar / ((-1.0d0) - exp(((((ev + vef) + eaccept) - mu) / kbt))))
if (t_1 <= (-1d-217)) then
tmp = t_0
else if (t_1 <= 4d-262) then
tmp = ndchar / (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 = (NdChar / (Math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)) - -1.0)) - (NaChar / (-1.0 - Math.exp(((((Ev + Vef) + EAccept) - mu) / KbT))));
double tmp;
if (t_1 <= -1e-217) {
tmp = t_0;
} else if (t_1 <= 4e-262) {
tmp = NdChar / (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 = (NdChar / (math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)) - -1.0)) - (NaChar / (-1.0 - math.exp(((((Ev + Vef) + EAccept) - mu) / KbT)))) tmp = 0 if t_1 <= -1e-217: tmp = t_0 elif t_1 <= 4e-262: tmp = NdChar / (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(NdChar / Float64(exp(Float64(Float64(mu - Float64(Float64(Ec - Vef) - EDonor)) / KbT)) - -1.0)) - Float64(NaChar / Float64(-1.0 - exp(Float64(Float64(Float64(Float64(Ev + Vef) + EAccept) - mu) / KbT))))) tmp = 0.0 if (t_1 <= -1e-217) tmp = t_0; elseif (t_1 <= 4e-262) tmp = Float64(NdChar / 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 = (NaChar + NdChar) * 0.5; t_1 = (NdChar / (exp(((mu - ((Ec - Vef) - EDonor)) / KbT)) - -1.0)) - (NaChar / (-1.0 - exp(((((Ev + Vef) + EAccept) - mu) / KbT)))); tmp = 0.0; if (t_1 <= -1e-217) tmp = t_0; elseif (t_1 <= 4e-262) tmp = NdChar / (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[(NdChar / N[(N[Exp[N[(N[(mu - N[(N[(Ec - Vef), $MachinePrecision] - EDonor), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] - -1.0), $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, -1e-217], t$95$0, If[LessEqual[t$95$1, 4e-262], N[(NdChar / N[(EDonor / KbT), $MachinePrecision]), $MachinePrecision], t$95$0]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(NaChar + NdChar\right) \cdot 0.5\\
t_1 := \frac{NdChar}{e^{\frac{mu - \left(\left(Ec - Vef\right) - EDonor\right)}{KbT}} - -1} - \frac{NaChar}{-1 - e^{\frac{\left(\left(Ev + Vef\right) + EAccept\right) - mu}{KbT}}}\\
\mathbf{if}\;t\_1 \leq -1 \cdot 10^{-217}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;t\_1 \leq 4 \cdot 10^{-262}:\\
\;\;\;\;\frac{NdChar}{\frac{EDonor}{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.00000000000000008e-217 or 4.00000000000000005e-262 < (+.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-+.f6435.8
Applied rewrites35.8%
if -1.00000000000000008e-217 < (+.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.00000000000000005e-262Initial 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-+.f6481.6
Applied rewrites81.6%
Taylor expanded in KbT around inf
Applied rewrites44.2%
Taylor expanded in EDonor around inf
Applied rewrites22.0%
Final simplification32.8%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (- (/ NdChar (- (pow (exp -1.0) (/ (- (- (- Ec Vef) EDonor) mu) KbT)) -1.0)) (/ NaChar (- -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 / (pow(exp(-1.0), ((((Ec - Vef) - EDonor) - mu) / KbT)) - -1.0)) - (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 / ((exp((-1.0d0)) ** ((((ec - vef) - edonor) - mu) / kbt)) - (-1.0d0))) - (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 / (Math.pow(Math.exp(-1.0), ((((Ec - Vef) - EDonor) - mu) / KbT)) - -1.0)) - (NaChar / (-1.0 - Math.exp(((((Ev + Vef) + EAccept) - mu) / KbT))));
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return (NdChar / (math.pow(math.exp(-1.0), ((((Ec - Vef) - EDonor) - mu) / KbT)) - -1.0)) - (NaChar / (-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((exp(-1.0) ^ Float64(Float64(Float64(Float64(Ec - Vef) - EDonor) - mu) / KbT)) - -1.0)) - 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 / ((exp(-1.0) ^ ((((Ec - Vef) - EDonor) - mu) / KbT)) - -1.0)) - (NaChar / (-1.0 - exp(((((Ev + Vef) + EAccept) - mu) / KbT)))); end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(N[(NdChar / N[(N[Power[N[Exp[-1.0], $MachinePrecision], N[(N[(N[(N[(Ec - Vef), $MachinePrecision] - EDonor), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] - -1.0), $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}{{\left(e^{-1}\right)}^{\left(\frac{\left(\left(Ec - Vef\right) - EDonor\right) - mu}{KbT}\right)} - -1} - \frac{NaChar}{-1 - e^{\frac{\left(\left(Ev + Vef\right) + EAccept\right) - mu}{KbT}}}
\end{array}
Initial program 99.9%
lift-exp.f64N/A
lift-/.f64N/A
lift-neg.f64N/A
distribute-frac-negN/A
neg-mul-1N/A
exp-prodN/A
lower-pow.f64N/A
lower-exp.f64N/A
lower-/.f6499.9
Applied rewrites99.9%
Final simplification99.9%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (- (/ NdChar (- (exp (/ (- mu (- (- Ec Vef) EDonor)) KbT)) -1.0)) (/ 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 / (exp(((mu - ((Ec - Vef) - EDonor)) / KbT)) - -1.0)) - (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 / (exp(((mu - ((ec - vef) - edonor)) / kbt)) - (-1.0d0))) - (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 / (Math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)) - -1.0)) - (NaChar / (-1.0 - Math.exp(((((Ev + Vef) + EAccept) - mu) / KbT))));
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return (NdChar / (math.exp(((mu - ((Ec - Vef) - EDonor)) / KbT)) - -1.0)) - (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(exp(Float64(Float64(mu - Float64(Float64(Ec - Vef) - EDonor)) / KbT)) - -1.0)) - 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 / (exp(((mu - ((Ec - Vef) - EDonor)) / KbT)) - -1.0)) - (NaChar / (-1.0 - exp(((((Ev + Vef) + EAccept) - mu) / KbT)))); end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(N[(NdChar / N[(N[Exp[N[(N[(mu - N[(N[(Ec - Vef), $MachinePrecision] - EDonor), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] - -1.0), $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}{e^{\frac{mu - \left(\left(Ec - Vef\right) - EDonor\right)}{KbT}} - -1} - \frac{NaChar}{-1 - e^{\frac{\left(\left(Ev + Vef\right) + EAccept\right) - mu}{KbT}}}
\end{array}
Initial program 99.9%
Final simplification99.9%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NdChar (- (exp (/ (- (+ EDonor Vef) Ec) KbT)) -1.0)))
(t_1 (- (* 0.5 NaChar) (/ NdChar (- -1.0 (exp (/ EDonor KbT)))))))
(if (<= KbT -3.8e+121)
t_1
(if (<= KbT -2.3e-76)
t_0
(if (<= KbT -4.6e-169)
(/ NaChar (- (exp (/ Vef KbT)) -1.0))
(if (<= KbT 1e+80)
t_0
(if (<= KbT 4.4e+139)
(/ NaChar (- (exp (/ EAccept KbT)) -1.0))
(if (<= KbT 4.8e+177) t_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 = NdChar / (exp((((EDonor + Vef) - Ec) / KbT)) - -1.0);
double t_1 = (0.5 * NaChar) - (NdChar / (-1.0 - exp((EDonor / KbT))));
double tmp;
if (KbT <= -3.8e+121) {
tmp = t_1;
} else if (KbT <= -2.3e-76) {
tmp = t_0;
} else if (KbT <= -4.6e-169) {
tmp = NaChar / (exp((Vef / KbT)) - -1.0);
} else if (KbT <= 1e+80) {
tmp = t_0;
} else if (KbT <= 4.4e+139) {
tmp = NaChar / (exp((EAccept / KbT)) - -1.0);
} else if (KbT <= 4.8e+177) {
tmp = t_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 = ndchar / (exp((((edonor + vef) - ec) / kbt)) - (-1.0d0))
t_1 = (0.5d0 * nachar) - (ndchar / ((-1.0d0) - exp((edonor / kbt))))
if (kbt <= (-3.8d+121)) then
tmp = t_1
else if (kbt <= (-2.3d-76)) then
tmp = t_0
else if (kbt <= (-4.6d-169)) then
tmp = nachar / (exp((vef / kbt)) - (-1.0d0))
else if (kbt <= 1d+80) then
tmp = t_0
else if (kbt <= 4.4d+139) then
tmp = nachar / (exp((eaccept / kbt)) - (-1.0d0))
else if (kbt <= 4.8d+177) then
tmp = t_0
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 / (Math.exp((((EDonor + Vef) - Ec) / KbT)) - -1.0);
double t_1 = (0.5 * NaChar) - (NdChar / (-1.0 - Math.exp((EDonor / KbT))));
double tmp;
if (KbT <= -3.8e+121) {
tmp = t_1;
} else if (KbT <= -2.3e-76) {
tmp = t_0;
} else if (KbT <= -4.6e-169) {
tmp = NaChar / (Math.exp((Vef / KbT)) - -1.0);
} else if (KbT <= 1e+80) {
tmp = t_0;
} else if (KbT <= 4.4e+139) {
tmp = NaChar / (Math.exp((EAccept / KbT)) - -1.0);
} else if (KbT <= 4.8e+177) {
tmp = t_0;
} else {
tmp = t_1;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NdChar / (math.exp((((EDonor + Vef) - Ec) / KbT)) - -1.0) t_1 = (0.5 * NaChar) - (NdChar / (-1.0 - math.exp((EDonor / KbT)))) tmp = 0 if KbT <= -3.8e+121: tmp = t_1 elif KbT <= -2.3e-76: tmp = t_0 elif KbT <= -4.6e-169: tmp = NaChar / (math.exp((Vef / KbT)) - -1.0) elif KbT <= 1e+80: tmp = t_0 elif KbT <= 4.4e+139: tmp = NaChar / (math.exp((EAccept / KbT)) - -1.0) elif KbT <= 4.8e+177: tmp = t_0 else: tmp = t_1 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NdChar / Float64(exp(Float64(Float64(Float64(EDonor + Vef) - Ec) / KbT)) - -1.0)) t_1 = Float64(Float64(0.5 * NaChar) - Float64(NdChar / Float64(-1.0 - exp(Float64(EDonor / KbT))))) tmp = 0.0 if (KbT <= -3.8e+121) tmp = t_1; elseif (KbT <= -2.3e-76) tmp = t_0; elseif (KbT <= -4.6e-169) tmp = Float64(NaChar / Float64(exp(Float64(Vef / KbT)) - -1.0)); elseif (KbT <= 1e+80) tmp = t_0; elseif (KbT <= 4.4e+139) tmp = Float64(NaChar / Float64(exp(Float64(EAccept / KbT)) - -1.0)); elseif (KbT <= 4.8e+177) tmp = t_0; else tmp = t_1; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NdChar / (exp((((EDonor + Vef) - Ec) / KbT)) - -1.0); t_1 = (0.5 * NaChar) - (NdChar / (-1.0 - exp((EDonor / KbT)))); tmp = 0.0; if (KbT <= -3.8e+121) tmp = t_1; elseif (KbT <= -2.3e-76) tmp = t_0; elseif (KbT <= -4.6e-169) tmp = NaChar / (exp((Vef / KbT)) - -1.0); elseif (KbT <= 1e+80) tmp = t_0; elseif (KbT <= 4.4e+139) tmp = NaChar / (exp((EAccept / KbT)) - -1.0); elseif (KbT <= 4.8e+177) tmp = t_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[(NdChar / N[(N[Exp[N[(N[(N[(EDonor + Vef), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] - -1.0), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[(0.5 * NaChar), $MachinePrecision] - N[(NdChar / N[(-1.0 - N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[KbT, -3.8e+121], t$95$1, If[LessEqual[KbT, -2.3e-76], t$95$0, If[LessEqual[KbT, -4.6e-169], N[(NaChar / N[(N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision] - -1.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[KbT, 1e+80], t$95$0, If[LessEqual[KbT, 4.4e+139], N[(NaChar / N[(N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision] - -1.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[KbT, 4.8e+177], t$95$0, t$95$1]]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{e^{\frac{\left(EDonor + Vef\right) - Ec}{KbT}} - -1}\\
t_1 := 0.5 \cdot NaChar - \frac{NdChar}{-1 - e^{\frac{EDonor}{KbT}}}\\
\mathbf{if}\;KbT \leq -3.8 \cdot 10^{+121}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;KbT \leq -2.3 \cdot 10^{-76}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;KbT \leq -4.6 \cdot 10^{-169}:\\
\;\;\;\;\frac{NaChar}{e^{\frac{Vef}{KbT}} - -1}\\
\mathbf{elif}\;KbT \leq 10^{+80}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;KbT \leq 4.4 \cdot 10^{+139}:\\
\;\;\;\;\frac{NaChar}{e^{\frac{EAccept}{KbT}} - -1}\\
\mathbf{elif}\;KbT \leq 4.8 \cdot 10^{+177}:\\
\;\;\;\;t\_0\\
\mathbf{else}:\\
\;\;\;\;t\_1\\
\end{array}
\end{array}
if KbT < -3.8e121 or 4.8e177 < KbT Initial program 100.0%
Taylor expanded in KbT around inf
lower-*.f6478.3
Applied rewrites78.3%
Taylor expanded in EDonor around inf
lower-/.f6470.6
Applied rewrites70.6%
if -3.8e121 < KbT < -2.30000000000000006e-76 or -4.6000000000000002e-169 < KbT < 1e80 or 4.3999999999999999e139 < KbT < 4.8e177Initial program 99.9%
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-+.f6467.5
Applied rewrites67.5%
Taylor expanded in mu around 0
Applied rewrites61.4%
if -2.30000000000000006e-76 < KbT < -4.6000000000000002e-169Initial program 100.0%
lift-exp.f64N/A
lift-/.f64N/A
clear-numN/A
div-invN/A
clear-numN/A
lift-/.f64N/A
exp-prodN/A
lower-pow.f64N/A
lower-exp.f64100.0
Applied rewrites100.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-+.f6486.8
Applied rewrites86.8%
Taylor expanded in Vef around inf
Applied rewrites61.0%
if 1e80 < KbT < 4.3999999999999999e139Initial program 99.2%
lift-exp.f64N/A
lift-/.f64N/A
clear-numN/A
div-invN/A
clear-numN/A
lift-/.f64N/A
exp-prodN/A
lower-pow.f64N/A
lower-exp.f6499.2
Applied rewrites99.2%
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-+.f6493.9
Applied rewrites93.9%
Taylor expanded in EAccept around inf
Applied rewrites68.5%
Final simplification64.2%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NdChar (- (exp (/ EDonor KbT)) -1.0)))
(t_1 (/ NaChar (- (exp (/ EAccept KbT)) -1.0))))
(if (<= KbT -1.85e+120)
t_1
(if (<= KbT -2.15e+26)
(/ NdChar (- (exp (/ mu KbT)) -1.0))
(if (<= KbT -8.8e-76)
t_0
(if (<= KbT -2.9e-255)
t_1
(if (<= KbT 6.4e-174)
t_0
(if (<= KbT 1.2e+139)
t_1
(fma
-0.25
(* (/ (- NdChar) KbT) Ec)
(* (+ NaChar NdChar) 0.5))))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (exp((EDonor / KbT)) - -1.0);
double t_1 = NaChar / (exp((EAccept / KbT)) - -1.0);
double tmp;
if (KbT <= -1.85e+120) {
tmp = t_1;
} else if (KbT <= -2.15e+26) {
tmp = NdChar / (exp((mu / KbT)) - -1.0);
} else if (KbT <= -8.8e-76) {
tmp = t_0;
} else if (KbT <= -2.9e-255) {
tmp = t_1;
} else if (KbT <= 6.4e-174) {
tmp = t_0;
} else if (KbT <= 1.2e+139) {
tmp = t_1;
} else {
tmp = fma(-0.25, ((-NdChar / KbT) * Ec), ((NaChar + NdChar) * 0.5));
}
return tmp;
}
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NdChar / Float64(exp(Float64(EDonor / KbT)) - -1.0)) t_1 = Float64(NaChar / Float64(exp(Float64(EAccept / KbT)) - -1.0)) tmp = 0.0 if (KbT <= -1.85e+120) tmp = t_1; elseif (KbT <= -2.15e+26) tmp = Float64(NdChar / Float64(exp(Float64(mu / KbT)) - -1.0)); elseif (KbT <= -8.8e-76) tmp = t_0; elseif (KbT <= -2.9e-255) tmp = t_1; elseif (KbT <= 6.4e-174) tmp = t_0; elseif (KbT <= 1.2e+139) tmp = t_1; else tmp = fma(-0.25, Float64(Float64(Float64(-NdChar) / KbT) * Ec), Float64(Float64(NaChar + NdChar) * 0.5)); end return tmp end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NdChar / N[(N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision] - -1.0), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(NaChar / N[(N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision] - -1.0), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[KbT, -1.85e+120], t$95$1, If[LessEqual[KbT, -2.15e+26], N[(NdChar / N[(N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision] - -1.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[KbT, -8.8e-76], t$95$0, If[LessEqual[KbT, -2.9e-255], t$95$1, If[LessEqual[KbT, 6.4e-174], t$95$0, If[LessEqual[KbT, 1.2e+139], t$95$1, N[(-0.25 * N[(N[((-NdChar) / KbT), $MachinePrecision] * Ec), $MachinePrecision] + N[(N[(NaChar + NdChar), $MachinePrecision] * 0.5), $MachinePrecision]), $MachinePrecision]]]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{e^{\frac{EDonor}{KbT}} - -1}\\
t_1 := \frac{NaChar}{e^{\frac{EAccept}{KbT}} - -1}\\
\mathbf{if}\;KbT \leq -1.85 \cdot 10^{+120}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;KbT \leq -2.15 \cdot 10^{+26}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{mu}{KbT}} - -1}\\
\mathbf{elif}\;KbT \leq -8.8 \cdot 10^{-76}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;KbT \leq -2.9 \cdot 10^{-255}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;KbT \leq 6.4 \cdot 10^{-174}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;KbT \leq 1.2 \cdot 10^{+139}:\\
\;\;\;\;t\_1\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(-0.25, \frac{-NdChar}{KbT} \cdot Ec, \left(NaChar + NdChar\right) \cdot 0.5\right)\\
\end{array}
\end{array}
if KbT < -1.85000000000000012e120 or -8.79999999999999997e-76 < KbT < -2.90000000000000007e-255 or 6.4e-174 < KbT < 1.20000000000000004e139Initial program 99.9%
lift-exp.f64N/A
lift-/.f64N/A
clear-numN/A
div-invN/A
clear-numN/A
lift-/.f64N/A
exp-prodN/A
lower-pow.f64N/A
lower-exp.f6499.9
Applied rewrites99.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-+.f6472.9
Applied rewrites72.9%
Taylor expanded in EAccept around inf
Applied rewrites46.1%
if -1.85000000000000012e120 < KbT < -2.1499999999999999e26Initial 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-+.f6481.5
Applied rewrites81.5%
Taylor expanded in mu around inf
Applied rewrites52.3%
if -2.1499999999999999e26 < KbT < -8.79999999999999997e-76 or -2.90000000000000007e-255 < KbT < 6.4e-174Initial program 99.8%
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 EDonor around inf
Applied rewrites57.2%
if 1.20000000000000004e139 < KbT Initial program 100.0%
Taylor expanded in KbT around -inf
associate-+r+N/A
metadata-evalN/A
distribute-lft-neg-inN/A
metadata-evalN/A
distribute-lft-neg-inN/A
distribute-neg-inN/A
distribute-lft-outN/A
distribute-lft-neg-inN/A
metadata-evalN/A
Applied rewrites55.9%
Taylor expanded in Ec around inf
Applied rewrites59.4%
Final simplification51.5%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NdChar (- (exp (/ EDonor KbT)) -1.0)))
(t_1 (/ NaChar (- (exp (/ Vef KbT)) -1.0))))
(if (<= KbT -1.05e+64)
t_1
(if (<= KbT -2.9e-75)
t_0
(if (<= KbT -3.4e-262)
t_1
(if (<= KbT 1.52e-173)
t_0
(if (<= KbT 8.4e+204)
t_1
(fma
-0.25
(* (/ (- NdChar) KbT) Ec)
(* (+ NaChar NdChar) 0.5)))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (exp((EDonor / KbT)) - -1.0);
double t_1 = NaChar / (exp((Vef / KbT)) - -1.0);
double tmp;
if (KbT <= -1.05e+64) {
tmp = t_1;
} else if (KbT <= -2.9e-75) {
tmp = t_0;
} else if (KbT <= -3.4e-262) {
tmp = t_1;
} else if (KbT <= 1.52e-173) {
tmp = t_0;
} else if (KbT <= 8.4e+204) {
tmp = t_1;
} else {
tmp = fma(-0.25, ((-NdChar / KbT) * Ec), ((NaChar + NdChar) * 0.5));
}
return tmp;
}
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NdChar / Float64(exp(Float64(EDonor / KbT)) - -1.0)) t_1 = Float64(NaChar / Float64(exp(Float64(Vef / KbT)) - -1.0)) tmp = 0.0 if (KbT <= -1.05e+64) tmp = t_1; elseif (KbT <= -2.9e-75) tmp = t_0; elseif (KbT <= -3.4e-262) tmp = t_1; elseif (KbT <= 1.52e-173) tmp = t_0; elseif (KbT <= 8.4e+204) tmp = t_1; else tmp = fma(-0.25, Float64(Float64(Float64(-NdChar) / KbT) * Ec), Float64(Float64(NaChar + NdChar) * 0.5)); end return tmp end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NdChar / N[(N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision] - -1.0), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(NaChar / N[(N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision] - -1.0), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[KbT, -1.05e+64], t$95$1, If[LessEqual[KbT, -2.9e-75], t$95$0, If[LessEqual[KbT, -3.4e-262], t$95$1, If[LessEqual[KbT, 1.52e-173], t$95$0, If[LessEqual[KbT, 8.4e+204], t$95$1, N[(-0.25 * N[(N[((-NdChar) / KbT), $MachinePrecision] * Ec), $MachinePrecision] + N[(N[(NaChar + NdChar), $MachinePrecision] * 0.5), $MachinePrecision]), $MachinePrecision]]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{e^{\frac{EDonor}{KbT}} - -1}\\
t_1 := \frac{NaChar}{e^{\frac{Vef}{KbT}} - -1}\\
\mathbf{if}\;KbT \leq -1.05 \cdot 10^{+64}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;KbT \leq -2.9 \cdot 10^{-75}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;KbT \leq -3.4 \cdot 10^{-262}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;KbT \leq 1.52 \cdot 10^{-173}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;KbT \leq 8.4 \cdot 10^{+204}:\\
\;\;\;\;t\_1\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(-0.25, \frac{-NdChar}{KbT} \cdot Ec, \left(NaChar + NdChar\right) \cdot 0.5\right)\\
\end{array}
\end{array}
if KbT < -1.05e64 or -2.9000000000000002e-75 < KbT < -3.3999999999999999e-262 or 1.52000000000000008e-173 < KbT < 8.4000000000000002e204Initial program 99.9%
lift-exp.f64N/A
lift-/.f64N/A
clear-numN/A
div-invN/A
clear-numN/A
lift-/.f64N/A
exp-prodN/A
lower-pow.f64N/A
lower-exp.f6499.9
Applied rewrites99.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-+.f6470.0
Applied rewrites70.0%
Taylor expanded in Vef around inf
Applied rewrites50.1%
if -1.05e64 < KbT < -2.9000000000000002e-75 or -3.3999999999999999e-262 < KbT < 1.52000000000000008e-173Initial program 99.9%
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-+.f6471.5
Applied rewrites71.5%
Taylor expanded in EDonor around inf
Applied rewrites55.4%
if 8.4000000000000002e204 < KbT Initial program 100.0%
Taylor expanded in KbT around -inf
associate-+r+N/A
metadata-evalN/A
distribute-lft-neg-inN/A
metadata-evalN/A
distribute-lft-neg-inN/A
distribute-neg-inN/A
distribute-lft-outN/A
distribute-lft-neg-inN/A
metadata-evalN/A
Applied rewrites66.9%
Taylor expanded in Ec around inf
Applied rewrites70.6%
Final simplification54.1%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (* (+ NaChar NdChar) 0.5))
(t_1 (/ NdChar (- (exp (/ EDonor KbT)) -1.0))))
(if (<= KbT -1.65e+128)
(fma -0.25 (* (/ NaChar KbT) Ev) t_0)
(if (<= KbT -2.15e+26)
(/ NdChar (- (exp (/ mu KbT)) -1.0))
(if (<= KbT -5.2e-177)
t_1
(if (<= KbT -3.5e-255)
(/ NdChar (- (exp (/ Vef KbT)) -1.0))
(if (<= KbT 3e+67)
t_1
(fma -0.25 (* (/ (- NdChar) KbT) Ec) t_0))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar + NdChar) * 0.5;
double t_1 = NdChar / (exp((EDonor / KbT)) - -1.0);
double tmp;
if (KbT <= -1.65e+128) {
tmp = fma(-0.25, ((NaChar / KbT) * Ev), t_0);
} else if (KbT <= -2.15e+26) {
tmp = NdChar / (exp((mu / KbT)) - -1.0);
} else if (KbT <= -5.2e-177) {
tmp = t_1;
} else if (KbT <= -3.5e-255) {
tmp = NdChar / (exp((Vef / KbT)) - -1.0);
} else if (KbT <= 3e+67) {
tmp = t_1;
} else {
tmp = fma(-0.25, ((-NdChar / KbT) * Ec), 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(NdChar / Float64(exp(Float64(EDonor / KbT)) - -1.0)) tmp = 0.0 if (KbT <= -1.65e+128) tmp = fma(-0.25, Float64(Float64(NaChar / KbT) * Ev), t_0); elseif (KbT <= -2.15e+26) tmp = Float64(NdChar / Float64(exp(Float64(mu / KbT)) - -1.0)); elseif (KbT <= -5.2e-177) tmp = t_1; elseif (KbT <= -3.5e-255) tmp = Float64(NdChar / Float64(exp(Float64(Vef / KbT)) - -1.0)); elseif (KbT <= 3e+67) tmp = t_1; else tmp = fma(-0.25, Float64(Float64(Float64(-NdChar) / KbT) * Ec), 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[(NdChar / N[(N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision] - -1.0), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[KbT, -1.65e+128], N[(-0.25 * N[(N[(NaChar / KbT), $MachinePrecision] * Ev), $MachinePrecision] + t$95$0), $MachinePrecision], If[LessEqual[KbT, -2.15e+26], N[(NdChar / N[(N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision] - -1.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[KbT, -5.2e-177], t$95$1, If[LessEqual[KbT, -3.5e-255], N[(NdChar / N[(N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision] - -1.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[KbT, 3e+67], t$95$1, N[(-0.25 * N[(N[((-NdChar) / KbT), $MachinePrecision] * Ec), $MachinePrecision] + t$95$0), $MachinePrecision]]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(NaChar + NdChar\right) \cdot 0.5\\
t_1 := \frac{NdChar}{e^{\frac{EDonor}{KbT}} - -1}\\
\mathbf{if}\;KbT \leq -1.65 \cdot 10^{+128}:\\
\;\;\;\;\mathsf{fma}\left(-0.25, \frac{NaChar}{KbT} \cdot Ev, t\_0\right)\\
\mathbf{elif}\;KbT \leq -2.15 \cdot 10^{+26}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{mu}{KbT}} - -1}\\
\mathbf{elif}\;KbT \leq -5.2 \cdot 10^{-177}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;KbT \leq -3.5 \cdot 10^{-255}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{Vef}{KbT}} - -1}\\
\mathbf{elif}\;KbT \leq 3 \cdot 10^{+67}:\\
\;\;\;\;t\_1\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(-0.25, \frac{-NdChar}{KbT} \cdot Ec, t\_0\right)\\
\end{array}
\end{array}
if KbT < -1.65e128Initial program 100.0%
Taylor expanded in KbT around -inf
associate-+r+N/A
metadata-evalN/A
distribute-lft-neg-inN/A
metadata-evalN/A
distribute-lft-neg-inN/A
distribute-neg-inN/A
distribute-lft-outN/A
distribute-lft-neg-inN/A
metadata-evalN/A
Applied rewrites62.2%
Taylor expanded in Ev around inf
Applied rewrites61.5%
if -1.65e128 < KbT < -2.1499999999999999e26Initial 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-+.f6477.9
Applied rewrites77.9%
Taylor expanded in mu around inf
Applied rewrites49.9%
if -2.1499999999999999e26 < KbT < -5.2000000000000002e-177 or -3.49999999999999979e-255 < KbT < 3.0000000000000001e67Initial program 99.9%
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-+.f6459.4
Applied rewrites59.4%
Taylor expanded in EDonor around inf
Applied rewrites39.7%
if -5.2000000000000002e-177 < KbT < -3.49999999999999979e-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-+.f6465.2
Applied rewrites65.2%
Taylor expanded in Vef around inf
Applied rewrites58.2%
if 3.0000000000000001e67 < KbT Initial program 99.8%
Taylor expanded in KbT around -inf
associate-+r+N/A
metadata-evalN/A
distribute-lft-neg-inN/A
metadata-evalN/A
distribute-lft-neg-inN/A
distribute-neg-inN/A
distribute-lft-outN/A
distribute-lft-neg-inN/A
metadata-evalN/A
Applied rewrites46.6%
Taylor expanded in Ec around inf
Applied rewrites52.1%
Final simplification47.3%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NdChar (- (exp (/ Vef KbT)) -1.0)))
(t_1 (* (+ NaChar NdChar) 0.5))
(t_2 (/ NdChar (- (exp (/ EDonor KbT)) -1.0))))
(if (<= KbT -6.8e+131)
(fma -0.25 (* (/ NaChar KbT) Ev) t_1)
(if (<= KbT -1.35e+42)
t_0
(if (<= KbT -5.2e-177)
t_2
(if (<= KbT -3.5e-255)
t_0
(if (<= KbT 3e+67)
t_2
(fma -0.25 (* (/ (- NdChar) KbT) Ec) 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 / (exp((Vef / KbT)) - -1.0);
double t_1 = (NaChar + NdChar) * 0.5;
double t_2 = NdChar / (exp((EDonor / KbT)) - -1.0);
double tmp;
if (KbT <= -6.8e+131) {
tmp = fma(-0.25, ((NaChar / KbT) * Ev), t_1);
} else if (KbT <= -1.35e+42) {
tmp = t_0;
} else if (KbT <= -5.2e-177) {
tmp = t_2;
} else if (KbT <= -3.5e-255) {
tmp = t_0;
} else if (KbT <= 3e+67) {
tmp = t_2;
} else {
tmp = fma(-0.25, ((-NdChar / KbT) * Ec), t_1);
}
return tmp;
}
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NdChar / Float64(exp(Float64(Vef / KbT)) - -1.0)) t_1 = Float64(Float64(NaChar + NdChar) * 0.5) t_2 = Float64(NdChar / Float64(exp(Float64(EDonor / KbT)) - -1.0)) tmp = 0.0 if (KbT <= -6.8e+131) tmp = fma(-0.25, Float64(Float64(NaChar / KbT) * Ev), t_1); elseif (KbT <= -1.35e+42) tmp = t_0; elseif (KbT <= -5.2e-177) tmp = t_2; elseif (KbT <= -3.5e-255) tmp = t_0; elseif (KbT <= 3e+67) tmp = t_2; else tmp = fma(-0.25, Float64(Float64(Float64(-NdChar) / KbT) * Ec), t_1); end return tmp end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NdChar / N[(N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision] - -1.0), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NaChar + NdChar), $MachinePrecision] * 0.5), $MachinePrecision]}, Block[{t$95$2 = N[(NdChar / N[(N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision] - -1.0), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[KbT, -6.8e+131], N[(-0.25 * N[(N[(NaChar / KbT), $MachinePrecision] * Ev), $MachinePrecision] + t$95$1), $MachinePrecision], If[LessEqual[KbT, -1.35e+42], t$95$0, If[LessEqual[KbT, -5.2e-177], t$95$2, If[LessEqual[KbT, -3.5e-255], t$95$0, If[LessEqual[KbT, 3e+67], t$95$2, N[(-0.25 * N[(N[((-NdChar) / KbT), $MachinePrecision] * Ec), $MachinePrecision] + t$95$1), $MachinePrecision]]]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{e^{\frac{Vef}{KbT}} - -1}\\
t_1 := \left(NaChar + NdChar\right) \cdot 0.5\\
t_2 := \frac{NdChar}{e^{\frac{EDonor}{KbT}} - -1}\\
\mathbf{if}\;KbT \leq -6.8 \cdot 10^{+131}:\\
\;\;\;\;\mathsf{fma}\left(-0.25, \frac{NaChar}{KbT} \cdot Ev, t\_1\right)\\
\mathbf{elif}\;KbT \leq -1.35 \cdot 10^{+42}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;KbT \leq -5.2 \cdot 10^{-177}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;KbT \leq -3.5 \cdot 10^{-255}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;KbT \leq 3 \cdot 10^{+67}:\\
\;\;\;\;t\_2\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(-0.25, \frac{-NdChar}{KbT} \cdot Ec, t\_1\right)\\
\end{array}
\end{array}
if KbT < -6.79999999999999972e131Initial program 100.0%
Taylor expanded in KbT around -inf
associate-+r+N/A
metadata-evalN/A
distribute-lft-neg-inN/A
metadata-evalN/A
distribute-lft-neg-inN/A
distribute-neg-inN/A
distribute-lft-outN/A
distribute-lft-neg-inN/A
metadata-evalN/A
Applied rewrites62.2%
Taylor expanded in Ev around inf
Applied rewrites61.5%
if -6.79999999999999972e131 < KbT < -1.35e42 or -5.2000000000000002e-177 < KbT < -3.49999999999999979e-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-+.f6469.6
Applied rewrites69.6%
Taylor expanded in Vef around inf
Applied rewrites51.7%
if -1.35e42 < KbT < -5.2000000000000002e-177 or -3.49999999999999979e-255 < KbT < 3.0000000000000001e67Initial program 99.9%
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 EDonor around inf
Applied rewrites40.3%
if 3.0000000000000001e67 < KbT Initial program 99.8%
Taylor expanded in KbT around -inf
associate-+r+N/A
metadata-evalN/A
distribute-lft-neg-inN/A
metadata-evalN/A
distribute-lft-neg-inN/A
distribute-neg-inN/A
distribute-lft-outN/A
distribute-lft-neg-inN/A
metadata-evalN/A
Applied rewrites46.6%
Taylor expanded in Ec around inf
Applied rewrites52.1%
Final simplification47.2%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NaChar (- (exp (/ Vef KbT)) -1.0)))
(t_1 (/ NdChar (- (exp (/ (- (+ EDonor Vef) Ec) KbT)) -1.0))))
(if (<= NdChar -2.1e-59)
t_1
(if (<= NdChar 4.5e-95)
t_0
(if (<= NdChar 6.8e-13) t_1 (if (<= NdChar 1.65e+101) t_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 = NaChar / (exp((Vef / KbT)) - -1.0);
double t_1 = NdChar / (exp((((EDonor + Vef) - Ec) / KbT)) - -1.0);
double tmp;
if (NdChar <= -2.1e-59) {
tmp = t_1;
} else if (NdChar <= 4.5e-95) {
tmp = t_0;
} else if (NdChar <= 6.8e-13) {
tmp = t_1;
} else if (NdChar <= 1.65e+101) {
tmp = t_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 = nachar / (exp((vef / kbt)) - (-1.0d0))
t_1 = ndchar / (exp((((edonor + vef) - ec) / kbt)) - (-1.0d0))
if (ndchar <= (-2.1d-59)) then
tmp = t_1
else if (ndchar <= 4.5d-95) then
tmp = t_0
else if (ndchar <= 6.8d-13) then
tmp = t_1
else if (ndchar <= 1.65d+101) then
tmp = t_0
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 = NaChar / (Math.exp((Vef / KbT)) - -1.0);
double t_1 = NdChar / (Math.exp((((EDonor + Vef) - Ec) / KbT)) - -1.0);
double tmp;
if (NdChar <= -2.1e-59) {
tmp = t_1;
} else if (NdChar <= 4.5e-95) {
tmp = t_0;
} else if (NdChar <= 6.8e-13) {
tmp = t_1;
} else if (NdChar <= 1.65e+101) {
tmp = t_0;
} else {
tmp = t_1;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NaChar / (math.exp((Vef / KbT)) - -1.0) t_1 = NdChar / (math.exp((((EDonor + Vef) - Ec) / KbT)) - -1.0) tmp = 0 if NdChar <= -2.1e-59: tmp = t_1 elif NdChar <= 4.5e-95: tmp = t_0 elif NdChar <= 6.8e-13: tmp = t_1 elif NdChar <= 1.65e+101: tmp = t_0 else: tmp = t_1 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NaChar / Float64(exp(Float64(Vef / KbT)) - -1.0)) t_1 = Float64(NdChar / Float64(exp(Float64(Float64(Float64(EDonor + Vef) - Ec) / KbT)) - -1.0)) tmp = 0.0 if (NdChar <= -2.1e-59) tmp = t_1; elseif (NdChar <= 4.5e-95) tmp = t_0; elseif (NdChar <= 6.8e-13) tmp = t_1; elseif (NdChar <= 1.65e+101) tmp = t_0; else tmp = t_1; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NaChar / (exp((Vef / KbT)) - -1.0); t_1 = NdChar / (exp((((EDonor + Vef) - Ec) / KbT)) - -1.0); tmp = 0.0; if (NdChar <= -2.1e-59) tmp = t_1; elseif (NdChar <= 4.5e-95) tmp = t_0; elseif (NdChar <= 6.8e-13) tmp = t_1; elseif (NdChar <= 1.65e+101) tmp = t_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[(NaChar / N[(N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision] - -1.0), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(NdChar / N[(N[Exp[N[(N[(N[(EDonor + Vef), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] - -1.0), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NdChar, -2.1e-59], t$95$1, If[LessEqual[NdChar, 4.5e-95], t$95$0, If[LessEqual[NdChar, 6.8e-13], t$95$1, If[LessEqual[NdChar, 1.65e+101], t$95$0, t$95$1]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{e^{\frac{Vef}{KbT}} - -1}\\
t_1 := \frac{NdChar}{e^{\frac{\left(EDonor + Vef\right) - Ec}{KbT}} - -1}\\
\mathbf{if}\;NdChar \leq -2.1 \cdot 10^{-59}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;NdChar \leq 4.5 \cdot 10^{-95}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;NdChar \leq 6.8 \cdot 10^{-13}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;NdChar \leq 1.65 \cdot 10^{+101}:\\
\;\;\;\;t\_0\\
\mathbf{else}:\\
\;\;\;\;t\_1\\
\end{array}
\end{array}
if NdChar < -2.09999999999999997e-59 or 4.5e-95 < NdChar < 6.80000000000000031e-13 or 1.65000000000000006e101 < NdChar Initial program 99.8%
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.0
Applied rewrites72.0%
Taylor expanded in mu around 0
Applied rewrites66.6%
if -2.09999999999999997e-59 < NdChar < 4.5e-95 or 6.80000000000000031e-13 < NdChar < 1.65000000000000006e101Initial program 100.0%
lift-exp.f64N/A
lift-/.f64N/A
clear-numN/A
div-invN/A
clear-numN/A
lift-/.f64N/A
exp-prodN/A
lower-pow.f64N/A
lower-exp.f64100.0
Applied rewrites100.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.0
Applied rewrites76.0%
Taylor expanded in Vef around inf
Applied rewrites52.1%
Final simplification59.7%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (- (+ (+ mu Vef) EDonor) Ec)))
(if (<= NdChar -1.6e+63)
(/ NdChar (- (exp (/ 1.0 (/ KbT t_0))) -1.0))
(if (<= NdChar 1.75e+101)
(/ NaChar (- (exp (/ (- (+ (+ Ev Vef) EAccept) mu) KbT)) -1.0))
(/ NdChar (- (exp (/ t_0 KbT)) -1.0))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = ((mu + Vef) + EDonor) - Ec;
double tmp;
if (NdChar <= -1.6e+63) {
tmp = NdChar / (exp((1.0 / (KbT / t_0))) - -1.0);
} else if (NdChar <= 1.75e+101) {
tmp = NaChar / (exp(((((Ev + Vef) + EAccept) - mu) / KbT)) - -1.0);
} else {
tmp = NdChar / (exp((t_0 / KbT)) - -1.0);
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: tmp
t_0 = ((mu + vef) + edonor) - ec
if (ndchar <= (-1.6d+63)) then
tmp = ndchar / (exp((1.0d0 / (kbt / t_0))) - (-1.0d0))
else if (ndchar <= 1.75d+101) then
tmp = nachar / (exp(((((ev + vef) + eaccept) - mu) / kbt)) - (-1.0d0))
else
tmp = ndchar / (exp((t_0 / kbt)) - (-1.0d0))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = ((mu + Vef) + EDonor) - Ec;
double tmp;
if (NdChar <= -1.6e+63) {
tmp = NdChar / (Math.exp((1.0 / (KbT / t_0))) - -1.0);
} else if (NdChar <= 1.75e+101) {
tmp = NaChar / (Math.exp(((((Ev + Vef) + EAccept) - mu) / KbT)) - -1.0);
} else {
tmp = NdChar / (Math.exp((t_0 / KbT)) - -1.0);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = ((mu + Vef) + EDonor) - Ec tmp = 0 if NdChar <= -1.6e+63: tmp = NdChar / (math.exp((1.0 / (KbT / t_0))) - -1.0) elif NdChar <= 1.75e+101: tmp = NaChar / (math.exp(((((Ev + Vef) + EAccept) - mu) / KbT)) - -1.0) else: tmp = NdChar / (math.exp((t_0 / KbT)) - -1.0) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(Float64(Float64(mu + Vef) + EDonor) - Ec) tmp = 0.0 if (NdChar <= -1.6e+63) tmp = Float64(NdChar / Float64(exp(Float64(1.0 / Float64(KbT / t_0))) - -1.0)); elseif (NdChar <= 1.75e+101) tmp = Float64(NaChar / Float64(exp(Float64(Float64(Float64(Float64(Ev + Vef) + EAccept) - mu) / KbT)) - -1.0)); else tmp = Float64(NdChar / Float64(exp(Float64(t_0 / KbT)) - -1.0)); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = ((mu + Vef) + EDonor) - Ec; tmp = 0.0; if (NdChar <= -1.6e+63) tmp = NdChar / (exp((1.0 / (KbT / t_0))) - -1.0); elseif (NdChar <= 1.75e+101) tmp = NaChar / (exp(((((Ev + Vef) + EAccept) - mu) / KbT)) - -1.0); else tmp = NdChar / (exp((t_0 / KbT)) - -1.0); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(N[(N[(mu + Vef), $MachinePrecision] + EDonor), $MachinePrecision] - Ec), $MachinePrecision]}, If[LessEqual[NdChar, -1.6e+63], N[(NdChar / N[(N[Exp[N[(1.0 / N[(KbT / t$95$0), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] - -1.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[NdChar, 1.75e+101], N[(NaChar / N[(N[Exp[N[(N[(N[(N[(Ev + Vef), $MachinePrecision] + EAccept), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] - -1.0), $MachinePrecision]), $MachinePrecision], N[(NdChar / N[(N[Exp[N[(t$95$0 / KbT), $MachinePrecision]], $MachinePrecision] - -1.0), $MachinePrecision]), $MachinePrecision]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(\left(mu + Vef\right) + EDonor\right) - Ec\\
\mathbf{if}\;NdChar \leq -1.6 \cdot 10^{+63}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{1}{\frac{KbT}{t\_0}}} - -1}\\
\mathbf{elif}\;NdChar \leq 1.75 \cdot 10^{+101}:\\
\;\;\;\;\frac{NaChar}{e^{\frac{\left(\left(Ev + Vef\right) + EAccept\right) - mu}{KbT}} - -1}\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{t\_0}{KbT}} - -1}\\
\end{array}
\end{array}
if NdChar < -1.60000000000000006e63Initial program 99.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-+.f6478.2
Applied rewrites78.2%
Applied rewrites78.4%
if -1.60000000000000006e63 < NdChar < 1.75000000000000012e101Initial 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-+.f6472.0
Applied rewrites72.0%
if 1.75000000000000012e101 < 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-+.f6469.6
Applied rewrites69.6%
Final simplification73.0%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NdChar (- (exp (/ EDonor KbT)) -1.0))))
(if (<= NdChar -1.1e+173)
t_0
(if (<= NdChar -5.2e+101)
(/ NdChar (- (exp (/ Vef KbT)) -1.0))
(if (<= NdChar -1.35e+48)
t_0
(if (<= NdChar 1.55e+140)
(/ NaChar (- (exp (/ Ev KbT)) -1.0))
t_0))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (exp((EDonor / KbT)) - -1.0);
double tmp;
if (NdChar <= -1.1e+173) {
tmp = t_0;
} else if (NdChar <= -5.2e+101) {
tmp = NdChar / (exp((Vef / KbT)) - -1.0);
} else if (NdChar <= -1.35e+48) {
tmp = t_0;
} else if (NdChar <= 1.55e+140) {
tmp = NaChar / (exp((Ev / KbT)) - -1.0);
} else {
tmp = t_0;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: tmp
t_0 = ndchar / (exp((edonor / kbt)) - (-1.0d0))
if (ndchar <= (-1.1d+173)) then
tmp = t_0
else if (ndchar <= (-5.2d+101)) then
tmp = ndchar / (exp((vef / kbt)) - (-1.0d0))
else if (ndchar <= (-1.35d+48)) then
tmp = t_0
else if (ndchar <= 1.55d+140) then
tmp = nachar / (exp((ev / kbt)) - (-1.0d0))
else
tmp = t_0
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (Math.exp((EDonor / KbT)) - -1.0);
double tmp;
if (NdChar <= -1.1e+173) {
tmp = t_0;
} else if (NdChar <= -5.2e+101) {
tmp = NdChar / (Math.exp((Vef / KbT)) - -1.0);
} else if (NdChar <= -1.35e+48) {
tmp = t_0;
} else if (NdChar <= 1.55e+140) {
tmp = NaChar / (Math.exp((Ev / KbT)) - -1.0);
} else {
tmp = t_0;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NdChar / (math.exp((EDonor / KbT)) - -1.0) tmp = 0 if NdChar <= -1.1e+173: tmp = t_0 elif NdChar <= -5.2e+101: tmp = NdChar / (math.exp((Vef / KbT)) - -1.0) elif NdChar <= -1.35e+48: tmp = t_0 elif NdChar <= 1.55e+140: tmp = NaChar / (math.exp((Ev / KbT)) - -1.0) else: tmp = t_0 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NdChar / Float64(exp(Float64(EDonor / KbT)) - -1.0)) tmp = 0.0 if (NdChar <= -1.1e+173) tmp = t_0; elseif (NdChar <= -5.2e+101) tmp = Float64(NdChar / Float64(exp(Float64(Vef / KbT)) - -1.0)); elseif (NdChar <= -1.35e+48) tmp = t_0; elseif (NdChar <= 1.55e+140) tmp = Float64(NaChar / Float64(exp(Float64(Ev / KbT)) - -1.0)); else tmp = t_0; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NdChar / (exp((EDonor / KbT)) - -1.0); tmp = 0.0; if (NdChar <= -1.1e+173) tmp = t_0; elseif (NdChar <= -5.2e+101) tmp = NdChar / (exp((Vef / KbT)) - -1.0); elseif (NdChar <= -1.35e+48) tmp = t_0; elseif (NdChar <= 1.55e+140) tmp = NaChar / (exp((Ev / KbT)) - -1.0); else tmp = t_0; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NdChar / N[(N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision] - -1.0), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NdChar, -1.1e+173], t$95$0, If[LessEqual[NdChar, -5.2e+101], N[(NdChar / N[(N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision] - -1.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[NdChar, -1.35e+48], t$95$0, If[LessEqual[NdChar, 1.55e+140], N[(NaChar / N[(N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision] - -1.0), $MachinePrecision]), $MachinePrecision], t$95$0]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{e^{\frac{EDonor}{KbT}} - -1}\\
\mathbf{if}\;NdChar \leq -1.1 \cdot 10^{+173}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;NdChar \leq -5.2 \cdot 10^{+101}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{Vef}{KbT}} - -1}\\
\mathbf{elif}\;NdChar \leq -1.35 \cdot 10^{+48}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;NdChar \leq 1.55 \cdot 10^{+140}:\\
\;\;\;\;\frac{NaChar}{e^{\frac{Ev}{KbT}} - -1}\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if NdChar < -1.1e173 or -5.2e101 < NdChar < -1.35000000000000002e48 or 1.55e140 < NdChar Initial program 99.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-+.f6477.9
Applied rewrites77.9%
Taylor expanded in EDonor around inf
Applied rewrites59.6%
if -1.1e173 < NdChar < -5.2e101Initial 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 Vef around inf
Applied rewrites55.6%
if -1.35000000000000002e48 < NdChar < 1.55e140Initial program 100.0%
lift-exp.f64N/A
lift-/.f64N/A
clear-numN/A
div-invN/A
clear-numN/A
lift-/.f64N/A
exp-prodN/A
lower-pow.f64N/A
lower-exp.f64100.0
Applied rewrites100.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-+.f6471.7
Applied rewrites71.7%
Taylor expanded in Ev around inf
Applied rewrites45.4%
Final simplification50.3%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ (- (+ (+ mu Vef) EDonor) Ec) KbT)))
(if (<= NdChar -1.6e+63)
(/ NdChar (- (pow (E) t_0) -1.0))
(if (<= NdChar 1.75e+101)
(/ NaChar (- (exp (/ (- (+ (+ Ev Vef) EAccept) mu) KbT)) -1.0))
(/ NdChar (- (exp t_0) -1.0))))))\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{\left(\left(mu + Vef\right) + EDonor\right) - Ec}{KbT}\\
\mathbf{if}\;NdChar \leq -1.6 \cdot 10^{+63}:\\
\;\;\;\;\frac{NdChar}{{\mathsf{E}\left(\right)}^{t\_0} - -1}\\
\mathbf{elif}\;NdChar \leq 1.75 \cdot 10^{+101}:\\
\;\;\;\;\frac{NaChar}{e^{\frac{\left(\left(Ev + Vef\right) + EAccept\right) - mu}{KbT}} - -1}\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{e^{t\_0} - -1}\\
\end{array}
\end{array}
if NdChar < -1.60000000000000006e63Initial program 99.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-+.f6478.2
Applied rewrites78.2%
Applied rewrites78.3%
if -1.60000000000000006e63 < NdChar < 1.75000000000000012e101Initial 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-+.f6472.0
Applied rewrites72.0%
if 1.75000000000000012e101 < 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-+.f6469.6
Applied rewrites69.6%
Final simplification73.0%
(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 -1.6e+63)
t_0
(if (<= NdChar 1.75e+101)
(/ NaChar (- (exp (/ (- (+ (+ Ev Vef) EAccept) mu) KbT)) -1.0))
t_0))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (exp(((((mu + Vef) + EDonor) - Ec) / KbT)) - -1.0);
double tmp;
if (NdChar <= -1.6e+63) {
tmp = t_0;
} else if (NdChar <= 1.75e+101) {
tmp = NaChar / (exp(((((Ev + Vef) + EAccept) - mu) / KbT)) - -1.0);
} else {
tmp = t_0;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: tmp
t_0 = ndchar / (exp(((((mu + vef) + edonor) - ec) / kbt)) - (-1.0d0))
if (ndchar <= (-1.6d+63)) then
tmp = t_0
else if (ndchar <= 1.75d+101) then
tmp = nachar / (exp(((((ev + vef) + eaccept) - mu) / kbt)) - (-1.0d0))
else
tmp = t_0
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (Math.exp(((((mu + Vef) + EDonor) - Ec) / KbT)) - -1.0);
double tmp;
if (NdChar <= -1.6e+63) {
tmp = t_0;
} else if (NdChar <= 1.75e+101) {
tmp = NaChar / (Math.exp(((((Ev + Vef) + EAccept) - mu) / KbT)) - -1.0);
} else {
tmp = t_0;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NdChar / (math.exp(((((mu + Vef) + EDonor) - Ec) / KbT)) - -1.0) tmp = 0 if NdChar <= -1.6e+63: tmp = t_0 elif NdChar <= 1.75e+101: tmp = NaChar / (math.exp(((((Ev + Vef) + EAccept) - mu) / KbT)) - -1.0) else: tmp = t_0 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NdChar / Float64(exp(Float64(Float64(Float64(Float64(mu + Vef) + EDonor) - Ec) / KbT)) - -1.0)) tmp = 0.0 if (NdChar <= -1.6e+63) tmp = t_0; elseif (NdChar <= 1.75e+101) tmp = Float64(NaChar / Float64(exp(Float64(Float64(Float64(Float64(Ev + Vef) + EAccept) - mu) / KbT)) - -1.0)); else tmp = t_0; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NdChar / (exp(((((mu + Vef) + EDonor) - Ec) / KbT)) - -1.0); tmp = 0.0; if (NdChar <= -1.6e+63) tmp = t_0; elseif (NdChar <= 1.75e+101) tmp = NaChar / (exp(((((Ev + Vef) + EAccept) - mu) / KbT)) - -1.0); else tmp = t_0; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NdChar / N[(N[Exp[N[(N[(N[(N[(mu + Vef), $MachinePrecision] + EDonor), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] - -1.0), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NdChar, -1.6e+63], t$95$0, If[LessEqual[NdChar, 1.75e+101], N[(NaChar / N[(N[Exp[N[(N[(N[(N[(Ev + Vef), $MachinePrecision] + EAccept), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] - -1.0), $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 -1.6 \cdot 10^{+63}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;NdChar \leq 1.75 \cdot 10^{+101}:\\
\;\;\;\;\frac{NaChar}{e^{\frac{\left(\left(Ev + Vef\right) + EAccept\right) - mu}{KbT}} - -1}\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if NdChar < -1.60000000000000006e63 or 1.75000000000000012e101 < NdChar Initial program 99.8%
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-+.f6474.6
Applied rewrites74.6%
if -1.60000000000000006e63 < NdChar < 1.75000000000000012e101Initial 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-+.f6472.0
Applied rewrites72.0%
Final simplification73.0%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NdChar (- (exp (/ (- (+ EDonor Vef) Ec) KbT)) -1.0))))
(if (<= NdChar -1.6e+63)
t_0
(if (<= NdChar 1.82e+140)
(/ NaChar (- (exp (/ (- (+ (+ Ev Vef) EAccept) mu) KbT)) -1.0))
t_0))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (exp((((EDonor + Vef) - Ec) / KbT)) - -1.0);
double tmp;
if (NdChar <= -1.6e+63) {
tmp = t_0;
} else if (NdChar <= 1.82e+140) {
tmp = NaChar / (exp(((((Ev + Vef) + EAccept) - mu) / KbT)) - -1.0);
} else {
tmp = t_0;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: tmp
t_0 = ndchar / (exp((((edonor + vef) - ec) / kbt)) - (-1.0d0))
if (ndchar <= (-1.6d+63)) then
tmp = t_0
else if (ndchar <= 1.82d+140) then
tmp = nachar / (exp(((((ev + vef) + eaccept) - mu) / kbt)) - (-1.0d0))
else
tmp = t_0
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (Math.exp((((EDonor + Vef) - Ec) / KbT)) - -1.0);
double tmp;
if (NdChar <= -1.6e+63) {
tmp = t_0;
} else if (NdChar <= 1.82e+140) {
tmp = NaChar / (Math.exp(((((Ev + Vef) + EAccept) - mu) / KbT)) - -1.0);
} else {
tmp = t_0;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NdChar / (math.exp((((EDonor + Vef) - Ec) / KbT)) - -1.0) tmp = 0 if NdChar <= -1.6e+63: tmp = t_0 elif NdChar <= 1.82e+140: tmp = NaChar / (math.exp(((((Ev + Vef) + EAccept) - mu) / KbT)) - -1.0) else: tmp = t_0 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NdChar / Float64(exp(Float64(Float64(Float64(EDonor + Vef) - Ec) / KbT)) - -1.0)) tmp = 0.0 if (NdChar <= -1.6e+63) tmp = t_0; elseif (NdChar <= 1.82e+140) tmp = Float64(NaChar / Float64(exp(Float64(Float64(Float64(Float64(Ev + Vef) + EAccept) - mu) / KbT)) - -1.0)); else tmp = t_0; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NdChar / (exp((((EDonor + Vef) - Ec) / KbT)) - -1.0); tmp = 0.0; if (NdChar <= -1.6e+63) tmp = t_0; elseif (NdChar <= 1.82e+140) tmp = NaChar / (exp(((((Ev + Vef) + EAccept) - mu) / KbT)) - -1.0); else tmp = t_0; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NdChar / N[(N[Exp[N[(N[(N[(EDonor + Vef), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] - -1.0), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NdChar, -1.6e+63], t$95$0, If[LessEqual[NdChar, 1.82e+140], N[(NaChar / N[(N[Exp[N[(N[(N[(N[(Ev + Vef), $MachinePrecision] + EAccept), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] - -1.0), $MachinePrecision]), $MachinePrecision], t$95$0]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{e^{\frac{\left(EDonor + Vef\right) - Ec}{KbT}} - -1}\\
\mathbf{if}\;NdChar \leq -1.6 \cdot 10^{+63}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;NdChar \leq 1.82 \cdot 10^{+140}:\\
\;\;\;\;\frac{NaChar}{e^{\frac{\left(\left(Ev + Vef\right) + EAccept\right) - mu}{KbT}} - -1}\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if NdChar < -1.60000000000000006e63 or 1.82e140 < NdChar Initial program 99.8%
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.6
Applied rewrites75.6%
Taylor expanded in mu around 0
Applied rewrites72.6%
if -1.60000000000000006e63 < NdChar < 1.82e140Initial 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-+.f6471.5
Applied rewrites71.5%
Final simplification71.9%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (* (+ NaChar NdChar) 0.5)))
(if (<= KbT -1.25e+131)
(fma -0.25 (* (/ NaChar KbT) Ev) t_0)
(if (<= KbT 3e+67)
(/ NdChar (- (exp (/ EDonor KbT)) -1.0))
(fma -0.25 (* (/ (- NdChar) KbT) Ec) t_0)))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = (NaChar + NdChar) * 0.5;
double tmp;
if (KbT <= -1.25e+131) {
tmp = fma(-0.25, ((NaChar / KbT) * Ev), t_0);
} else if (KbT <= 3e+67) {
tmp = NdChar / (exp((EDonor / KbT)) - -1.0);
} else {
tmp = fma(-0.25, ((-NdChar / KbT) * Ec), 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 <= -1.25e+131) tmp = fma(-0.25, Float64(Float64(NaChar / KbT) * Ev), t_0); elseif (KbT <= 3e+67) tmp = Float64(NdChar / Float64(exp(Float64(EDonor / KbT)) - -1.0)); else tmp = fma(-0.25, Float64(Float64(Float64(-NdChar) / KbT) * Ec), 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, -1.25e+131], N[(-0.25 * N[(N[(NaChar / KbT), $MachinePrecision] * Ev), $MachinePrecision] + t$95$0), $MachinePrecision], If[LessEqual[KbT, 3e+67], N[(NdChar / N[(N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision] - -1.0), $MachinePrecision]), $MachinePrecision], N[(-0.25 * N[(N[((-NdChar) / KbT), $MachinePrecision] * Ec), $MachinePrecision] + t$95$0), $MachinePrecision]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(NaChar + NdChar\right) \cdot 0.5\\
\mathbf{if}\;KbT \leq -1.25 \cdot 10^{+131}:\\
\;\;\;\;\mathsf{fma}\left(-0.25, \frac{NaChar}{KbT} \cdot Ev, t\_0\right)\\
\mathbf{elif}\;KbT \leq 3 \cdot 10^{+67}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{EDonor}{KbT}} - -1}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(-0.25, \frac{-NdChar}{KbT} \cdot Ec, t\_0\right)\\
\end{array}
\end{array}
if KbT < -1.24999999999999999e131Initial program 100.0%
Taylor expanded in KbT around -inf
associate-+r+N/A
metadata-evalN/A
distribute-lft-neg-inN/A
metadata-evalN/A
distribute-lft-neg-inN/A
distribute-neg-inN/A
distribute-lft-outN/A
distribute-lft-neg-inN/A
metadata-evalN/A
Applied rewrites62.2%
Taylor expanded in Ev around inf
Applied rewrites61.5%
if -1.24999999999999999e131 < KbT < 3.0000000000000001e67Initial program 99.9%
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-+.f6462.4
Applied rewrites62.4%
Taylor expanded in EDonor around inf
Applied rewrites37.1%
if 3.0000000000000001e67 < KbT Initial program 99.8%
Taylor expanded in KbT around -inf
associate-+r+N/A
metadata-evalN/A
distribute-lft-neg-inN/A
metadata-evalN/A
distribute-lft-neg-inN/A
distribute-neg-inN/A
distribute-lft-outN/A
distribute-lft-neg-inN/A
metadata-evalN/A
Applied rewrites46.6%
Taylor expanded in Ec around inf
Applied rewrites52.1%
Final simplification43.7%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (if (<= NdChar -1.25e+48) (* 0.5 NdChar) (if (<= NdChar 1.55e+140) (* 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 <= -1.25e+48) {
tmp = 0.5 * NdChar;
} else if (NdChar <= 1.55e+140) {
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 <= (-1.25d+48)) then
tmp = 0.5d0 * ndchar
else if (ndchar <= 1.55d+140) 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 <= -1.25e+48) {
tmp = 0.5 * NdChar;
} else if (NdChar <= 1.55e+140) {
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 <= -1.25e+48: tmp = 0.5 * NdChar elif NdChar <= 1.55e+140: 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 <= -1.25e+48) tmp = Float64(0.5 * NdChar); elseif (NdChar <= 1.55e+140) 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 <= -1.25e+48) tmp = 0.5 * NdChar; elseif (NdChar <= 1.55e+140) 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, -1.25e+48], N[(0.5 * NdChar), $MachinePrecision], If[LessEqual[NdChar, 1.55e+140], N[(0.5 * NaChar), $MachinePrecision], N[(0.5 * NdChar), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NdChar \leq -1.25 \cdot 10^{+48}:\\
\;\;\;\;0.5 \cdot NdChar\\
\mathbf{elif}\;NdChar \leq 1.55 \cdot 10^{+140}:\\
\;\;\;\;0.5 \cdot NaChar\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot NdChar\\
\end{array}
\end{array}
if NdChar < -1.24999999999999993e48 or 1.55e140 < NdChar Initial program 99.8%
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.1
Applied rewrites75.1%
Taylor expanded in KbT around inf
Applied rewrites26.8%
if -1.24999999999999993e48 < NdChar < 1.55e140Initial program 100.0%
Taylor expanded in KbT around inf
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6428.0
Applied rewrites28.0%
Taylor expanded in NaChar 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.9%
Taylor expanded in KbT around inf
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.9%
Taylor expanded in KbT around inf
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6428.8
Applied rewrites28.8%
Taylor expanded in NaChar around inf
Applied rewrites20.0%
herbie shell --seed 2024249
(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))))))