
(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 16 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (+ (/ NdChar (+ 1.0 (exp (/ (- (- (- (- Ec Vef) EDonor) mu)) KbT)))) (/ NaChar (+ 1.0 (exp (/ (+ (+ (+ Ev Vef) EAccept) (- mu)) KbT))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NdChar / (1.0 + exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + exp(((((Ev + Vef) + EAccept) + -mu) / KbT))));
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
code = (ndchar / (1.0d0 + exp((-(((ec - vef) - edonor) - mu) / kbt)))) + (nachar / (1.0d0 + exp(((((ev + vef) + eaccept) + -mu) / kbt))))
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NdChar / (1.0 + Math.exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + Math.exp(((((Ev + Vef) + EAccept) + -mu) / KbT))));
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return (NdChar / (1.0 + math.exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + math.exp(((((Ev + Vef) + EAccept) + -mu) / KbT))))
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(-Float64(Float64(Float64(Ec - Vef) - EDonor) - mu)) / KbT)))) + Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(Float64(Ev + Vef) + EAccept) + Float64(-mu)) / KbT))))) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = (NdChar / (1.0 + exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + exp(((((Ev + Vef) + EAccept) + -mu) / KbT)))); end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(N[(NdChar / N[(1.0 + N[Exp[N[((-N[(N[(N[(Ec - Vef), $MachinePrecision] - EDonor), $MachinePrecision] - mu), $MachinePrecision]) / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Exp[N[(N[(N[(N[(Ev + Vef), $MachinePrecision] + EAccept), $MachinePrecision] + (-mu)), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{NdChar}{1 + e^{\frac{-\left(\left(\left(Ec - Vef\right) - EDonor\right) - mu\right)}{KbT}}} + \frac{NaChar}{1 + e^{\frac{\left(\left(Ev + Vef\right) + EAccept\right) + \left(-mu\right)}{KbT}}}
\end{array}
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (+ (/ NdChar (+ (exp (/ (+ mu (+ EDonor (- Vef Ec))) KbT)) 1.0)) (/ NaChar (+ (exp (/ (- (+ (+ Vef Ev) EAccept) mu) KbT)) 1.0))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NdChar / (exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0)) + (NaChar / (exp(((((Vef + Ev) + EAccept) - mu) / KbT)) + 1.0));
}
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 + (edonor + (vef - ec))) / kbt)) + 1.0d0)) + (nachar / (exp(((((vef + ev) + eaccept) - mu) / kbt)) + 1.0d0))
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 + (EDonor + (Vef - Ec))) / KbT)) + 1.0)) + (NaChar / (Math.exp(((((Vef + Ev) + EAccept) - mu) / KbT)) + 1.0));
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return (NdChar / (math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0)) + (NaChar / (math.exp(((((Vef + Ev) + EAccept) - mu) / KbT)) + 1.0))
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(Float64(NdChar / Float64(exp(Float64(Float64(mu + Float64(EDonor + Float64(Vef - Ec))) / KbT)) + 1.0)) + Float64(NaChar / Float64(exp(Float64(Float64(Float64(Float64(Vef + Ev) + EAccept) - mu) / KbT)) + 1.0))) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = (NdChar / (exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0)) + (NaChar / (exp(((((Vef + Ev) + EAccept) - mu) / KbT)) + 1.0)); end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(N[(NdChar / N[(N[Exp[N[(N[(mu + N[(EDonor + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(N[Exp[N[(N[(N[(N[(Vef + Ev), $MachinePrecision] + EAccept), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{NdChar}{e^{\frac{mu + \left(EDonor + \left(Vef - Ec\right)\right)}{KbT}} + 1} + \frac{NaChar}{e^{\frac{\left(\left(Vef + Ev\right) + EAccept\right) - mu}{KbT}} + 1}
\end{array}
Initial program 100.0%
Final simplification100.0%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (+ EDonor (+ Vef (- mu Ec))))
(t_1
(+
(/ NdChar (+ (exp (/ (+ mu (+ EDonor (- Vef Ec))) KbT)) 1.0))
(/ NaChar (+ (exp (/ (- (+ (+ Vef Ev) EAccept) mu) KbT)) 1.0))))
(t_2 (/ NdChar (+ (exp (/ EDonor KbT)) 1.0))))
(if (<= t_1 -5e-150)
(* 0.5 (+ NdChar NaChar))
(if (<= t_1 -2e-285)
t_2
(if (<= t_1 2e-299)
(/
NdChar
(-
2.0
(/
(fma -0.5 (/ (* t_0 t_0) KbT) (- (- (- Ec mu) Vef) EDonor))
KbT)))
t_2)))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = EDonor + (Vef + (mu - Ec));
double t_1 = (NdChar / (exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0)) + (NaChar / (exp(((((Vef + Ev) + EAccept) - mu) / KbT)) + 1.0));
double t_2 = NdChar / (exp((EDonor / KbT)) + 1.0);
double tmp;
if (t_1 <= -5e-150) {
tmp = 0.5 * (NdChar + NaChar);
} else if (t_1 <= -2e-285) {
tmp = t_2;
} else if (t_1 <= 2e-299) {
tmp = NdChar / (2.0 - (fma(-0.5, ((t_0 * t_0) / KbT), (((Ec - mu) - Vef) - EDonor)) / KbT));
} else {
tmp = t_2;
}
return tmp;
}
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(EDonor + Float64(Vef + Float64(mu - Ec))) t_1 = Float64(Float64(NdChar / Float64(exp(Float64(Float64(mu + Float64(EDonor + Float64(Vef - Ec))) / KbT)) + 1.0)) + Float64(NaChar / Float64(exp(Float64(Float64(Float64(Float64(Vef + Ev) + EAccept) - mu) / KbT)) + 1.0))) t_2 = Float64(NdChar / Float64(exp(Float64(EDonor / KbT)) + 1.0)) tmp = 0.0 if (t_1 <= -5e-150) tmp = Float64(0.5 * Float64(NdChar + NaChar)); elseif (t_1 <= -2e-285) tmp = t_2; elseif (t_1 <= 2e-299) tmp = Float64(NdChar / Float64(2.0 - Float64(fma(-0.5, Float64(Float64(t_0 * t_0) / KbT), Float64(Float64(Float64(Ec - mu) - Vef) - EDonor)) / KbT))); else tmp = t_2; end return tmp end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(EDonor + N[(Vef + N[(mu - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NdChar / N[(N[Exp[N[(N[(mu + N[(EDonor + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(N[Exp[N[(N[(N[(N[(Vef + Ev), $MachinePrecision] + EAccept), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(NdChar / N[(N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$1, -5e-150], N[(0.5 * N[(NdChar + NaChar), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$1, -2e-285], t$95$2, If[LessEqual[t$95$1, 2e-299], N[(NdChar / N[(2.0 - N[(N[(-0.5 * N[(N[(t$95$0 * t$95$0), $MachinePrecision] / KbT), $MachinePrecision] + N[(N[(N[(Ec - mu), $MachinePrecision] - Vef), $MachinePrecision] - EDonor), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$2]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := EDonor + \left(Vef + \left(mu - Ec\right)\right)\\
t_1 := \frac{NdChar}{e^{\frac{mu + \left(EDonor + \left(Vef - Ec\right)\right)}{KbT}} + 1} + \frac{NaChar}{e^{\frac{\left(\left(Vef + Ev\right) + EAccept\right) - mu}{KbT}} + 1}\\
t_2 := \frac{NdChar}{e^{\frac{EDonor}{KbT}} + 1}\\
\mathbf{if}\;t\_1 \leq -5 \cdot 10^{-150}:\\
\;\;\;\;0.5 \cdot \left(NdChar + NaChar\right)\\
\mathbf{elif}\;t\_1 \leq -2 \cdot 10^{-285}:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;t\_1 \leq 2 \cdot 10^{-299}:\\
\;\;\;\;\frac{NdChar}{2 - \frac{\mathsf{fma}\left(-0.5, \frac{t\_0 \cdot t\_0}{KbT}, \left(\left(Ec - mu\right) - Vef\right) - EDonor\right)}{KbT}}\\
\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))))) < -4.9999999999999999e-150Initial program 100.0%
Taylor expanded in KbT around inf
+-commutativeN/A
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6443.1
Applied rewrites43.1%
if -4.9999999999999999e-150 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < -2.00000000000000015e-285 or 1.99999999999999998e-299 < (+.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 NdChar around inf
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
Applied rewrites50.6%
Taylor expanded in EDonor around inf
Applied rewrites35.5%
if -2.00000000000000015e-285 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < 1.99999999999999998e-299Initial program 100.0%
Taylor expanded in NdChar around inf
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
Applied rewrites95.7%
Taylor expanded in KbT around -inf
Applied rewrites94.2%
Final simplification52.2%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NaChar (+ (exp (/ (- (+ (+ Vef Ev) EAccept) mu) KbT)) 1.0)))
(t_1 (+ t_0 (/ NdChar (+ (exp (/ EDonor KbT)) 1.0))))
(t_2
(+
(/ NdChar (+ (exp (/ (+ mu (+ EDonor (- Vef Ec))) KbT)) 1.0))
t_0)))
(if (<= t_2 -2e-272)
t_1
(if (<= t_2 5e-247)
(/ NaChar (+ (exp (/ (- EAccept (- (- mu Vef) Ev)) KbT)) 1.0))
t_1))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NaChar / (exp(((((Vef + Ev) + EAccept) - mu) / KbT)) + 1.0);
double t_1 = t_0 + (NdChar / (exp((EDonor / KbT)) + 1.0));
double t_2 = (NdChar / (exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0)) + t_0;
double tmp;
if (t_2 <= -2e-272) {
tmp = t_1;
} else if (t_2 <= 5e-247) {
tmp = NaChar / (exp(((EAccept - ((mu - Vef) - Ev)) / KbT)) + 1.0);
} else {
tmp = t_1;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: t_2
real(8) :: tmp
t_0 = nachar / (exp(((((vef + ev) + eaccept) - mu) / kbt)) + 1.0d0)
t_1 = t_0 + (ndchar / (exp((edonor / kbt)) + 1.0d0))
t_2 = (ndchar / (exp(((mu + (edonor + (vef - ec))) / kbt)) + 1.0d0)) + t_0
if (t_2 <= (-2d-272)) then
tmp = t_1
else if (t_2 <= 5d-247) then
tmp = nachar / (exp(((eaccept - ((mu - vef) - ev)) / kbt)) + 1.0d0)
else
tmp = t_1
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NaChar / (Math.exp(((((Vef + Ev) + EAccept) - mu) / KbT)) + 1.0);
double t_1 = t_0 + (NdChar / (Math.exp((EDonor / KbT)) + 1.0));
double t_2 = (NdChar / (Math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0)) + t_0;
double tmp;
if (t_2 <= -2e-272) {
tmp = t_1;
} else if (t_2 <= 5e-247) {
tmp = NaChar / (Math.exp(((EAccept - ((mu - Vef) - Ev)) / KbT)) + 1.0);
} else {
tmp = t_1;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NaChar / (math.exp(((((Vef + Ev) + EAccept) - mu) / KbT)) + 1.0) t_1 = t_0 + (NdChar / (math.exp((EDonor / KbT)) + 1.0)) t_2 = (NdChar / (math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0)) + t_0 tmp = 0 if t_2 <= -2e-272: tmp = t_1 elif t_2 <= 5e-247: tmp = NaChar / (math.exp(((EAccept - ((mu - Vef) - Ev)) / KbT)) + 1.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(Float64(Float64(Float64(Vef + Ev) + EAccept) - mu) / KbT)) + 1.0)) t_1 = Float64(t_0 + Float64(NdChar / Float64(exp(Float64(EDonor / KbT)) + 1.0))) t_2 = Float64(Float64(NdChar / Float64(exp(Float64(Float64(mu + Float64(EDonor + Float64(Vef - Ec))) / KbT)) + 1.0)) + t_0) tmp = 0.0 if (t_2 <= -2e-272) tmp = t_1; elseif (t_2 <= 5e-247) tmp = Float64(NaChar / Float64(exp(Float64(Float64(EAccept - Float64(Float64(mu - Vef) - Ev)) / KbT)) + 1.0)); else tmp = t_1; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NaChar / (exp(((((Vef + Ev) + EAccept) - mu) / KbT)) + 1.0); t_1 = t_0 + (NdChar / (exp((EDonor / KbT)) + 1.0)); t_2 = (NdChar / (exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0)) + t_0; tmp = 0.0; if (t_2 <= -2e-272) tmp = t_1; elseif (t_2 <= 5e-247) tmp = NaChar / (exp(((EAccept - ((mu - Vef) - Ev)) / KbT)) + 1.0); else tmp = t_1; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NaChar / N[(N[Exp[N[(N[(N[(N[(Vef + Ev), $MachinePrecision] + EAccept), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(t$95$0 + N[(NdChar / N[(N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(N[(NdChar / N[(N[Exp[N[(N[(mu + N[(EDonor + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + t$95$0), $MachinePrecision]}, If[LessEqual[t$95$2, -2e-272], t$95$1, If[LessEqual[t$95$2, 5e-247], N[(NaChar / N[(N[Exp[N[(N[(EAccept - N[(N[(mu - Vef), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], t$95$1]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{e^{\frac{\left(\left(Vef + Ev\right) + EAccept\right) - mu}{KbT}} + 1}\\
t_1 := t\_0 + \frac{NdChar}{e^{\frac{EDonor}{KbT}} + 1}\\
t_2 := \frac{NdChar}{e^{\frac{mu + \left(EDonor + \left(Vef - Ec\right)\right)}{KbT}} + 1} + t\_0\\
\mathbf{if}\;t\_2 \leq -2 \cdot 10^{-272}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;t\_2 \leq 5 \cdot 10^{-247}:\\
\;\;\;\;\frac{NaChar}{e^{\frac{EAccept - \left(\left(mu - Vef\right) - Ev\right)}{KbT}} + 1}\\
\mathbf{else}:\\
\;\;\;\;t\_1\\
\end{array}
\end{array}
if (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < -1.99999999999999986e-272 or 4.99999999999999978e-247 < (+.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 EDonor around inf
lower-/.f6480.5
Applied rewrites80.5%
if -1.99999999999999986e-272 < (+.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.99999999999999978e-247Initial program 100.0%
Taylor expanded in NdChar around 0
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
associate--l+N/A
lower-+.f64N/A
sub-negN/A
associate-+r+N/A
mul-1-negN/A
lower-+.f64N/A
mul-1-negN/A
sub-negN/A
lower--.f6495.9
Applied rewrites95.9%
Final simplification84.5%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NaChar (+ (exp (/ (- (+ (+ Vef Ev) EAccept) mu) KbT)) 1.0)))
(t_1
(+
(/ NdChar (+ (exp (/ (+ mu (+ EDonor (- Vef Ec))) KbT)) 1.0))
t_0)))
(if (<= t_1 -40000000.0)
(+ t_0 (* NdChar 0.5))
(if (<= t_1 1e-60)
(/ NaChar (+ (exp (/ (- EAccept (- (- mu Vef) Ev)) KbT)) 1.0))
(+
(/ NdChar (+ (exp (/ Vef KbT)) 1.0))
(/ NaChar (+ (exp (/ (- (+ Vef EAccept) mu) 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 = NaChar / (exp(((((Vef + Ev) + EAccept) - mu) / KbT)) + 1.0);
double t_1 = (NdChar / (exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0)) + t_0;
double tmp;
if (t_1 <= -40000000.0) {
tmp = t_0 + (NdChar * 0.5);
} else if (t_1 <= 1e-60) {
tmp = NaChar / (exp(((EAccept - ((mu - Vef) - Ev)) / KbT)) + 1.0);
} else {
tmp = (NdChar / (exp((Vef / KbT)) + 1.0)) + (NaChar / (exp((((Vef + EAccept) - mu) / 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) :: t_1
real(8) :: tmp
t_0 = nachar / (exp(((((vef + ev) + eaccept) - mu) / kbt)) + 1.0d0)
t_1 = (ndchar / (exp(((mu + (edonor + (vef - ec))) / kbt)) + 1.0d0)) + t_0
if (t_1 <= (-40000000.0d0)) then
tmp = t_0 + (ndchar * 0.5d0)
else if (t_1 <= 1d-60) then
tmp = nachar / (exp(((eaccept - ((mu - vef) - ev)) / kbt)) + 1.0d0)
else
tmp = (ndchar / (exp((vef / kbt)) + 1.0d0)) + (nachar / (exp((((vef + eaccept) - mu) / 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 = NaChar / (Math.exp(((((Vef + Ev) + EAccept) - mu) / KbT)) + 1.0);
double t_1 = (NdChar / (Math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0)) + t_0;
double tmp;
if (t_1 <= -40000000.0) {
tmp = t_0 + (NdChar * 0.5);
} else if (t_1 <= 1e-60) {
tmp = NaChar / (Math.exp(((EAccept - ((mu - Vef) - Ev)) / KbT)) + 1.0);
} else {
tmp = (NdChar / (Math.exp((Vef / KbT)) + 1.0)) + (NaChar / (Math.exp((((Vef + EAccept) - mu) / KbT)) + 1.0));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NaChar / (math.exp(((((Vef + Ev) + EAccept) - mu) / KbT)) + 1.0) t_1 = (NdChar / (math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0)) + t_0 tmp = 0 if t_1 <= -40000000.0: tmp = t_0 + (NdChar * 0.5) elif t_1 <= 1e-60: tmp = NaChar / (math.exp(((EAccept - ((mu - Vef) - Ev)) / KbT)) + 1.0) else: tmp = (NdChar / (math.exp((Vef / KbT)) + 1.0)) + (NaChar / (math.exp((((Vef + EAccept) - mu) / KbT)) + 1.0)) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NaChar / Float64(exp(Float64(Float64(Float64(Float64(Vef + Ev) + EAccept) - mu) / KbT)) + 1.0)) t_1 = Float64(Float64(NdChar / Float64(exp(Float64(Float64(mu + Float64(EDonor + Float64(Vef - Ec))) / KbT)) + 1.0)) + t_0) tmp = 0.0 if (t_1 <= -40000000.0) tmp = Float64(t_0 + Float64(NdChar * 0.5)); elseif (t_1 <= 1e-60) tmp = Float64(NaChar / Float64(exp(Float64(Float64(EAccept - Float64(Float64(mu - Vef) - Ev)) / KbT)) + 1.0)); else tmp = Float64(Float64(NdChar / Float64(exp(Float64(Vef / KbT)) + 1.0)) + Float64(NaChar / Float64(exp(Float64(Float64(Float64(Vef + EAccept) - mu) / KbT)) + 1.0))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NaChar / (exp(((((Vef + Ev) + EAccept) - mu) / KbT)) + 1.0); t_1 = (NdChar / (exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0)) + t_0; tmp = 0.0; if (t_1 <= -40000000.0) tmp = t_0 + (NdChar * 0.5); elseif (t_1 <= 1e-60) tmp = NaChar / (exp(((EAccept - ((mu - Vef) - Ev)) / KbT)) + 1.0); else tmp = (NdChar / (exp((Vef / KbT)) + 1.0)) + (NaChar / (exp((((Vef + EAccept) - mu) / KbT)) + 1.0)); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NaChar / N[(N[Exp[N[(N[(N[(N[(Vef + Ev), $MachinePrecision] + EAccept), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NdChar / N[(N[Exp[N[(N[(mu + N[(EDonor + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + t$95$0), $MachinePrecision]}, If[LessEqual[t$95$1, -40000000.0], N[(t$95$0 + N[(NdChar * 0.5), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$1, 1e-60], N[(NaChar / N[(N[Exp[N[(N[(EAccept - N[(N[(mu - Vef), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], N[(N[(NdChar / N[(N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(N[Exp[N[(N[(N[(Vef + EAccept), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NaChar}{e^{\frac{\left(\left(Vef + Ev\right) + EAccept\right) - mu}{KbT}} + 1}\\
t_1 := \frac{NdChar}{e^{\frac{mu + \left(EDonor + \left(Vef - Ec\right)\right)}{KbT}} + 1} + t\_0\\
\mathbf{if}\;t\_1 \leq -40000000:\\
\;\;\;\;t\_0 + NdChar \cdot 0.5\\
\mathbf{elif}\;t\_1 \leq 10^{-60}:\\
\;\;\;\;\frac{NaChar}{e^{\frac{EAccept - \left(\left(mu - Vef\right) - Ev\right)}{KbT}} + 1}\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{Vef}{KbT}} + 1} + \frac{NaChar}{e^{\frac{\left(Vef + EAccept\right) - mu}{KbT}} + 1}\\
\end{array}
\end{array}
if (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < -4e7Initial program 99.9%
Taylor expanded in KbT around inf
*-commutativeN/A
lower-*.f6474.4
Applied rewrites74.4%
if -4e7 < (+.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.9999999999999997e-61Initial program 100.0%
Taylor expanded in NdChar around 0
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
associate--l+N/A
lower-+.f64N/A
sub-negN/A
associate-+r+N/A
mul-1-negN/A
lower-+.f64N/A
mul-1-negN/A
sub-negN/A
lower--.f6480.8
Applied rewrites80.8%
if 9.9999999999999997e-61 < (+.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 Vef around inf
lower-/.f6482.3
Applied rewrites82.3%
Taylor expanded in Ev around 0
lower--.f64N/A
lower-+.f6476.9
Applied rewrites76.9%
Final simplification78.2%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (+ EDonor (+ Vef (- mu Ec))))
(t_1 (* 0.5 (+ NdChar NaChar)))
(t_2
(+
(/ NdChar (+ (exp (/ (+ mu (+ EDonor (- Vef Ec))) KbT)) 1.0))
(/ NaChar (+ (exp (/ (- (+ (+ Vef Ev) EAccept) mu) KbT)) 1.0)))))
(if (<= t_2 -1e-251)
t_1
(if (<= t_2 1e-206)
(/
NdChar
(-
2.0
(/ (fma -0.5 (/ (* t_0 t_0) KbT) (- (- (- Ec mu) Vef) EDonor)) KbT)))
t_1))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = EDonor + (Vef + (mu - Ec));
double t_1 = 0.5 * (NdChar + NaChar);
double t_2 = (NdChar / (exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0)) + (NaChar / (exp(((((Vef + Ev) + EAccept) - mu) / KbT)) + 1.0));
double tmp;
if (t_2 <= -1e-251) {
tmp = t_1;
} else if (t_2 <= 1e-206) {
tmp = NdChar / (2.0 - (fma(-0.5, ((t_0 * t_0) / KbT), (((Ec - mu) - Vef) - EDonor)) / KbT));
} else {
tmp = t_1;
}
return tmp;
}
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(EDonor + Float64(Vef + Float64(mu - Ec))) t_1 = Float64(0.5 * Float64(NdChar + NaChar)) t_2 = Float64(Float64(NdChar / Float64(exp(Float64(Float64(mu + Float64(EDonor + Float64(Vef - Ec))) / KbT)) + 1.0)) + Float64(NaChar / Float64(exp(Float64(Float64(Float64(Float64(Vef + Ev) + EAccept) - mu) / KbT)) + 1.0))) tmp = 0.0 if (t_2 <= -1e-251) tmp = t_1; elseif (t_2 <= 1e-206) tmp = Float64(NdChar / Float64(2.0 - Float64(fma(-0.5, Float64(Float64(t_0 * t_0) / KbT), Float64(Float64(Float64(Ec - mu) - Vef) - EDonor)) / KbT))); else tmp = t_1; end return tmp end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(EDonor + N[(Vef + N[(mu - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(0.5 * N[(NdChar + NaChar), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(N[(NdChar / N[(N[Exp[N[(N[(mu + N[(EDonor + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(N[Exp[N[(N[(N[(N[(Vef + Ev), $MachinePrecision] + EAccept), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$2, -1e-251], t$95$1, If[LessEqual[t$95$2, 1e-206], N[(NdChar / N[(2.0 - N[(N[(-0.5 * N[(N[(t$95$0 * t$95$0), $MachinePrecision] / KbT), $MachinePrecision] + N[(N[(N[(Ec - mu), $MachinePrecision] - Vef), $MachinePrecision] - EDonor), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$1]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := EDonor + \left(Vef + \left(mu - Ec\right)\right)\\
t_1 := 0.5 \cdot \left(NdChar + NaChar\right)\\
t_2 := \frac{NdChar}{e^{\frac{mu + \left(EDonor + \left(Vef - Ec\right)\right)}{KbT}} + 1} + \frac{NaChar}{e^{\frac{\left(\left(Vef + Ev\right) + EAccept\right) - mu}{KbT}} + 1}\\
\mathbf{if}\;t\_2 \leq -1 \cdot 10^{-251}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;t\_2 \leq 10^{-206}:\\
\;\;\;\;\frac{NdChar}{2 - \frac{\mathsf{fma}\left(-0.5, \frac{t\_0 \cdot t\_0}{KbT}, \left(\left(Ec - mu\right) - Vef\right) - EDonor\right)}{KbT}}\\
\mathbf{else}:\\
\;\;\;\;t\_1\\
\end{array}
\end{array}
if (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < -1.00000000000000002e-251 or 1.00000000000000003e-206 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) Initial program 100.0%
Taylor expanded in KbT around inf
+-commutativeN/A
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6436.4
Applied rewrites36.4%
if -1.00000000000000002e-251 < (+.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.00000000000000003e-206Initial program 100.0%
Taylor expanded in NdChar around inf
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
Applied rewrites90.0%
Taylor expanded in KbT around -inf
Applied rewrites81.0%
Final simplification49.1%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (* 0.5 (+ NdChar NaChar)))
(t_1
(+
(/ NdChar (+ (exp (/ (+ mu (+ EDonor (- Vef Ec))) KbT)) 1.0))
(/ NaChar (+ (exp (/ (- (+ (+ Vef Ev) EAccept) mu) KbT)) 1.0)))))
(if (<= t_1 -2e-226)
t_0
(if (<= t_1 5e-247)
(*
0.5
(/
1.0
(/
(+ (/ (- (/ (* NdChar NdChar) NaChar) NdChar) NaChar) 1.0)
NaChar)))
t_0))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = 0.5 * (NdChar + NaChar);
double t_1 = (NdChar / (exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0)) + (NaChar / (exp(((((Vef + Ev) + EAccept) - mu) / KbT)) + 1.0));
double tmp;
if (t_1 <= -2e-226) {
tmp = t_0;
} else if (t_1 <= 5e-247) {
tmp = 0.5 * (1.0 / ((((((NdChar * NdChar) / NaChar) - NdChar) / NaChar) + 1.0) / NaChar));
} else {
tmp = t_0;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = 0.5d0 * (ndchar + nachar)
t_1 = (ndchar / (exp(((mu + (edonor + (vef - ec))) / kbt)) + 1.0d0)) + (nachar / (exp(((((vef + ev) + eaccept) - mu) / kbt)) + 1.0d0))
if (t_1 <= (-2d-226)) then
tmp = t_0
else if (t_1 <= 5d-247) then
tmp = 0.5d0 * (1.0d0 / ((((((ndchar * ndchar) / nachar) - ndchar) / nachar) + 1.0d0) / nachar))
else
tmp = t_0
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = 0.5 * (NdChar + NaChar);
double t_1 = (NdChar / (Math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0)) + (NaChar / (Math.exp(((((Vef + Ev) + EAccept) - mu) / KbT)) + 1.0));
double tmp;
if (t_1 <= -2e-226) {
tmp = t_0;
} else if (t_1 <= 5e-247) {
tmp = 0.5 * (1.0 / ((((((NdChar * NdChar) / NaChar) - NdChar) / NaChar) + 1.0) / NaChar));
} else {
tmp = t_0;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = 0.5 * (NdChar + NaChar) t_1 = (NdChar / (math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0)) + (NaChar / (math.exp(((((Vef + Ev) + EAccept) - mu) / KbT)) + 1.0)) tmp = 0 if t_1 <= -2e-226: tmp = t_0 elif t_1 <= 5e-247: tmp = 0.5 * (1.0 / ((((((NdChar * NdChar) / NaChar) - NdChar) / NaChar) + 1.0) / NaChar)) else: tmp = t_0 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(0.5 * Float64(NdChar + NaChar)) t_1 = Float64(Float64(NdChar / Float64(exp(Float64(Float64(mu + Float64(EDonor + Float64(Vef - Ec))) / KbT)) + 1.0)) + Float64(NaChar / Float64(exp(Float64(Float64(Float64(Float64(Vef + Ev) + EAccept) - mu) / KbT)) + 1.0))) tmp = 0.0 if (t_1 <= -2e-226) tmp = t_0; elseif (t_1 <= 5e-247) tmp = Float64(0.5 * Float64(1.0 / Float64(Float64(Float64(Float64(Float64(Float64(NdChar * NdChar) / NaChar) - NdChar) / NaChar) + 1.0) / NaChar))); else tmp = t_0; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = 0.5 * (NdChar + NaChar); t_1 = (NdChar / (exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0)) + (NaChar / (exp(((((Vef + Ev) + EAccept) - mu) / KbT)) + 1.0)); tmp = 0.0; if (t_1 <= -2e-226) tmp = t_0; elseif (t_1 <= 5e-247) tmp = 0.5 * (1.0 / ((((((NdChar * NdChar) / NaChar) - NdChar) / NaChar) + 1.0) / NaChar)); else tmp = t_0; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(0.5 * N[(NdChar + NaChar), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NdChar / N[(N[Exp[N[(N[(mu + N[(EDonor + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(N[Exp[N[(N[(N[(N[(Vef + Ev), $MachinePrecision] + EAccept), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$1, -2e-226], t$95$0, If[LessEqual[t$95$1, 5e-247], N[(0.5 * N[(1.0 / N[(N[(N[(N[(N[(N[(NdChar * NdChar), $MachinePrecision] / NaChar), $MachinePrecision] - NdChar), $MachinePrecision] / NaChar), $MachinePrecision] + 1.0), $MachinePrecision] / NaChar), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$0]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := 0.5 \cdot \left(NdChar + NaChar\right)\\
t_1 := \frac{NdChar}{e^{\frac{mu + \left(EDonor + \left(Vef - Ec\right)\right)}{KbT}} + 1} + \frac{NaChar}{e^{\frac{\left(\left(Vef + Ev\right) + EAccept\right) - mu}{KbT}} + 1}\\
\mathbf{if}\;t\_1 \leq -2 \cdot 10^{-226}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;t\_1 \leq 5 \cdot 10^{-247}:\\
\;\;\;\;0.5 \cdot \frac{1}{\frac{\frac{\frac{NdChar \cdot NdChar}{NaChar} - NdChar}{NaChar} + 1}{NaChar}}\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < -1.99999999999999984e-226 or 4.99999999999999978e-247 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) Initial program 100.0%
Taylor expanded in KbT around inf
+-commutativeN/A
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6435.9
Applied rewrites35.9%
if -1.99999999999999984e-226 < (+.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.99999999999999978e-247Initial program 100.0%
Taylor expanded in KbT around inf
+-commutativeN/A
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f642.8
Applied rewrites2.8%
Applied rewrites4.1%
Taylor expanded in NaChar around -inf
Applied rewrites48.1%
Final simplification39.2%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (* 0.5 (+ NdChar NaChar)))
(t_1
(+
(/ NdChar (+ (exp (/ (+ mu (+ EDonor (- Vef Ec))) KbT)) 1.0))
(/ NaChar (+ (exp (/ (- (+ (+ Vef Ev) EAccept) mu) KbT)) 1.0)))))
(if (<= t_1 -1e-251)
t_0
(if (<= t_1 1e-206)
(*
0.5
(/
1.0
(/
(+ (/ (- (/ (* NaChar NaChar) NdChar) NaChar) NdChar) 1.0)
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 = 0.5 * (NdChar + NaChar);
double t_1 = (NdChar / (exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0)) + (NaChar / (exp(((((Vef + Ev) + EAccept) - mu) / KbT)) + 1.0));
double tmp;
if (t_1 <= -1e-251) {
tmp = t_0;
} else if (t_1 <= 1e-206) {
tmp = 0.5 * (1.0 / ((((((NaChar * NaChar) / NdChar) - NaChar) / NdChar) + 1.0) / 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 = 0.5d0 * (ndchar + nachar)
t_1 = (ndchar / (exp(((mu + (edonor + (vef - ec))) / kbt)) + 1.0d0)) + (nachar / (exp(((((vef + ev) + eaccept) - mu) / kbt)) + 1.0d0))
if (t_1 <= (-1d-251)) then
tmp = t_0
else if (t_1 <= 1d-206) then
tmp = 0.5d0 * (1.0d0 / ((((((nachar * nachar) / ndchar) - nachar) / ndchar) + 1.0d0) / 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 = 0.5 * (NdChar + NaChar);
double t_1 = (NdChar / (Math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0)) + (NaChar / (Math.exp(((((Vef + Ev) + EAccept) - mu) / KbT)) + 1.0));
double tmp;
if (t_1 <= -1e-251) {
tmp = t_0;
} else if (t_1 <= 1e-206) {
tmp = 0.5 * (1.0 / ((((((NaChar * NaChar) / NdChar) - NaChar) / NdChar) + 1.0) / NdChar));
} else {
tmp = t_0;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = 0.5 * (NdChar + NaChar) t_1 = (NdChar / (math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0)) + (NaChar / (math.exp(((((Vef + Ev) + EAccept) - mu) / KbT)) + 1.0)) tmp = 0 if t_1 <= -1e-251: tmp = t_0 elif t_1 <= 1e-206: tmp = 0.5 * (1.0 / ((((((NaChar * NaChar) / NdChar) - NaChar) / NdChar) + 1.0) / NdChar)) else: tmp = t_0 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(0.5 * Float64(NdChar + NaChar)) t_1 = Float64(Float64(NdChar / Float64(exp(Float64(Float64(mu + Float64(EDonor + Float64(Vef - Ec))) / KbT)) + 1.0)) + Float64(NaChar / Float64(exp(Float64(Float64(Float64(Float64(Vef + Ev) + EAccept) - mu) / KbT)) + 1.0))) tmp = 0.0 if (t_1 <= -1e-251) tmp = t_0; elseif (t_1 <= 1e-206) tmp = Float64(0.5 * Float64(1.0 / Float64(Float64(Float64(Float64(Float64(Float64(NaChar * NaChar) / NdChar) - NaChar) / NdChar) + 1.0) / NdChar))); else tmp = t_0; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = 0.5 * (NdChar + NaChar); t_1 = (NdChar / (exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0)) + (NaChar / (exp(((((Vef + Ev) + EAccept) - mu) / KbT)) + 1.0)); tmp = 0.0; if (t_1 <= -1e-251) tmp = t_0; elseif (t_1 <= 1e-206) tmp = 0.5 * (1.0 / ((((((NaChar * NaChar) / NdChar) - NaChar) / NdChar) + 1.0) / 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[(0.5 * N[(NdChar + NaChar), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NdChar / N[(N[Exp[N[(N[(mu + N[(EDonor + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(N[Exp[N[(N[(N[(N[(Vef + Ev), $MachinePrecision] + EAccept), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$1, -1e-251], t$95$0, If[LessEqual[t$95$1, 1e-206], N[(0.5 * N[(1.0 / N[(N[(N[(N[(N[(N[(NaChar * NaChar), $MachinePrecision] / NdChar), $MachinePrecision] - NaChar), $MachinePrecision] / NdChar), $MachinePrecision] + 1.0), $MachinePrecision] / NdChar), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$0]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := 0.5 \cdot \left(NdChar + NaChar\right)\\
t_1 := \frac{NdChar}{e^{\frac{mu + \left(EDonor + \left(Vef - Ec\right)\right)}{KbT}} + 1} + \frac{NaChar}{e^{\frac{\left(\left(Vef + Ev\right) + EAccept\right) - mu}{KbT}} + 1}\\
\mathbf{if}\;t\_1 \leq -1 \cdot 10^{-251}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;t\_1 \leq 10^{-206}:\\
\;\;\;\;0.5 \cdot \frac{1}{\frac{\frac{\frac{NaChar \cdot NaChar}{NdChar} - NaChar}{NdChar} + 1}{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.00000000000000002e-251 or 1.00000000000000003e-206 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) Initial program 100.0%
Taylor expanded in KbT around inf
+-commutativeN/A
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6436.4
Applied rewrites36.4%
if -1.00000000000000002e-251 < (+.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.00000000000000003e-206Initial program 100.0%
Taylor expanded in KbT around inf
+-commutativeN/A
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f642.8
Applied rewrites2.8%
Applied rewrites3.9%
Taylor expanded in NdChar around -inf
Applied rewrites39.3%
Final simplification37.3%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (* 0.5 (+ NdChar NaChar)))
(t_1
(+
(/ NdChar (+ (exp (/ (+ mu (+ EDonor (- Vef Ec))) KbT)) 1.0))
(/ NaChar (+ (exp (/ (- (+ (+ Vef Ev) EAccept) mu) KbT)) 1.0)))))
(if (<= t_1 -1e-251)
t_0
(if (<= t_1 5e-247)
(* 0.5 (/ 1.0 (- (/ 1.0 NaChar) (/ NdChar (* NaChar NaChar)))))
t_0))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = 0.5 * (NdChar + NaChar);
double t_1 = (NdChar / (exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0)) + (NaChar / (exp(((((Vef + Ev) + EAccept) - mu) / KbT)) + 1.0));
double tmp;
if (t_1 <= -1e-251) {
tmp = t_0;
} else if (t_1 <= 5e-247) {
tmp = 0.5 * (1.0 / ((1.0 / NaChar) - (NdChar / (NaChar * NaChar))));
} else {
tmp = t_0;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = 0.5d0 * (ndchar + nachar)
t_1 = (ndchar / (exp(((mu + (edonor + (vef - ec))) / kbt)) + 1.0d0)) + (nachar / (exp(((((vef + ev) + eaccept) - mu) / kbt)) + 1.0d0))
if (t_1 <= (-1d-251)) then
tmp = t_0
else if (t_1 <= 5d-247) then
tmp = 0.5d0 * (1.0d0 / ((1.0d0 / nachar) - (ndchar / (nachar * nachar))))
else
tmp = t_0
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = 0.5 * (NdChar + NaChar);
double t_1 = (NdChar / (Math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0)) + (NaChar / (Math.exp(((((Vef + Ev) + EAccept) - mu) / KbT)) + 1.0));
double tmp;
if (t_1 <= -1e-251) {
tmp = t_0;
} else if (t_1 <= 5e-247) {
tmp = 0.5 * (1.0 / ((1.0 / NaChar) - (NdChar / (NaChar * NaChar))));
} else {
tmp = t_0;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = 0.5 * (NdChar + NaChar) t_1 = (NdChar / (math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0)) + (NaChar / (math.exp(((((Vef + Ev) + EAccept) - mu) / KbT)) + 1.0)) tmp = 0 if t_1 <= -1e-251: tmp = t_0 elif t_1 <= 5e-247: tmp = 0.5 * (1.0 / ((1.0 / NaChar) - (NdChar / (NaChar * NaChar)))) else: tmp = t_0 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(0.5 * Float64(NdChar + NaChar)) t_1 = Float64(Float64(NdChar / Float64(exp(Float64(Float64(mu + Float64(EDonor + Float64(Vef - Ec))) / KbT)) + 1.0)) + Float64(NaChar / Float64(exp(Float64(Float64(Float64(Float64(Vef + Ev) + EAccept) - mu) / KbT)) + 1.0))) tmp = 0.0 if (t_1 <= -1e-251) tmp = t_0; elseif (t_1 <= 5e-247) tmp = Float64(0.5 * Float64(1.0 / Float64(Float64(1.0 / NaChar) - Float64(NdChar / Float64(NaChar * NaChar))))); else tmp = t_0; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = 0.5 * (NdChar + NaChar); t_1 = (NdChar / (exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0)) + (NaChar / (exp(((((Vef + Ev) + EAccept) - mu) / KbT)) + 1.0)); tmp = 0.0; if (t_1 <= -1e-251) tmp = t_0; elseif (t_1 <= 5e-247) tmp = 0.5 * (1.0 / ((1.0 / NaChar) - (NdChar / (NaChar * NaChar)))); else tmp = t_0; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(0.5 * N[(NdChar + NaChar), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NdChar / N[(N[Exp[N[(N[(mu + N[(EDonor + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(N[Exp[N[(N[(N[(N[(Vef + Ev), $MachinePrecision] + EAccept), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$1, -1e-251], t$95$0, If[LessEqual[t$95$1, 5e-247], N[(0.5 * N[(1.0 / N[(N[(1.0 / NaChar), $MachinePrecision] - N[(NdChar / N[(NaChar * NaChar), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$0]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := 0.5 \cdot \left(NdChar + NaChar\right)\\
t_1 := \frac{NdChar}{e^{\frac{mu + \left(EDonor + \left(Vef - Ec\right)\right)}{KbT}} + 1} + \frac{NaChar}{e^{\frac{\left(\left(Vef + Ev\right) + EAccept\right) - mu}{KbT}} + 1}\\
\mathbf{if}\;t\_1 \leq -1 \cdot 10^{-251}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;t\_1 \leq 5 \cdot 10^{-247}:\\
\;\;\;\;0.5 \cdot \frac{1}{\frac{1}{NaChar} - \frac{NdChar}{NaChar \cdot NaChar}}\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < -1.00000000000000002e-251 or 4.99999999999999978e-247 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) Initial program 100.0%
Taylor expanded in KbT around inf
+-commutativeN/A
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6435.6
Applied rewrites35.6%
if -1.00000000000000002e-251 < (+.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.99999999999999978e-247Initial program 100.0%
Taylor expanded in KbT around inf
+-commutativeN/A
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f642.6
Applied rewrites2.6%
Applied rewrites4.0%
Taylor expanded in NdChar around 0
Applied rewrites31.1%
Final simplification34.4%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (* 0.5 (+ NdChar NaChar)))
(t_1
(+
(/ NdChar (+ (exp (/ (+ mu (+ EDonor (- Vef Ec))) KbT)) 1.0))
(/ NaChar (+ (exp (/ (- (+ (+ Vef Ev) EAccept) mu) KbT)) 1.0)))))
(if (<= t_1 -2e-226)
t_0
(if (<= t_1 5e-247)
(* 0.5 (/ 1.0 (/ (- 1.0 (/ NdChar NaChar)) NaChar)))
t_0))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = 0.5 * (NdChar + NaChar);
double t_1 = (NdChar / (exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0)) + (NaChar / (exp(((((Vef + Ev) + EAccept) - mu) / KbT)) + 1.0));
double tmp;
if (t_1 <= -2e-226) {
tmp = t_0;
} else if (t_1 <= 5e-247) {
tmp = 0.5 * (1.0 / ((1.0 - (NdChar / NaChar)) / NaChar));
} else {
tmp = t_0;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = 0.5d0 * (ndchar + nachar)
t_1 = (ndchar / (exp(((mu + (edonor + (vef - ec))) / kbt)) + 1.0d0)) + (nachar / (exp(((((vef + ev) + eaccept) - mu) / kbt)) + 1.0d0))
if (t_1 <= (-2d-226)) then
tmp = t_0
else if (t_1 <= 5d-247) then
tmp = 0.5d0 * (1.0d0 / ((1.0d0 - (ndchar / nachar)) / nachar))
else
tmp = t_0
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = 0.5 * (NdChar + NaChar);
double t_1 = (NdChar / (Math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0)) + (NaChar / (Math.exp(((((Vef + Ev) + EAccept) - mu) / KbT)) + 1.0));
double tmp;
if (t_1 <= -2e-226) {
tmp = t_0;
} else if (t_1 <= 5e-247) {
tmp = 0.5 * (1.0 / ((1.0 - (NdChar / NaChar)) / NaChar));
} else {
tmp = t_0;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = 0.5 * (NdChar + NaChar) t_1 = (NdChar / (math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0)) + (NaChar / (math.exp(((((Vef + Ev) + EAccept) - mu) / KbT)) + 1.0)) tmp = 0 if t_1 <= -2e-226: tmp = t_0 elif t_1 <= 5e-247: tmp = 0.5 * (1.0 / ((1.0 - (NdChar / NaChar)) / NaChar)) else: tmp = t_0 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(0.5 * Float64(NdChar + NaChar)) t_1 = Float64(Float64(NdChar / Float64(exp(Float64(Float64(mu + Float64(EDonor + Float64(Vef - Ec))) / KbT)) + 1.0)) + Float64(NaChar / Float64(exp(Float64(Float64(Float64(Float64(Vef + Ev) + EAccept) - mu) / KbT)) + 1.0))) tmp = 0.0 if (t_1 <= -2e-226) tmp = t_0; elseif (t_1 <= 5e-247) tmp = Float64(0.5 * Float64(1.0 / Float64(Float64(1.0 - Float64(NdChar / NaChar)) / NaChar))); else tmp = t_0; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = 0.5 * (NdChar + NaChar); t_1 = (NdChar / (exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0)) + (NaChar / (exp(((((Vef + Ev) + EAccept) - mu) / KbT)) + 1.0)); tmp = 0.0; if (t_1 <= -2e-226) tmp = t_0; elseif (t_1 <= 5e-247) tmp = 0.5 * (1.0 / ((1.0 - (NdChar / NaChar)) / NaChar)); else tmp = t_0; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(0.5 * N[(NdChar + NaChar), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NdChar / N[(N[Exp[N[(N[(mu + N[(EDonor + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(N[Exp[N[(N[(N[(N[(Vef + Ev), $MachinePrecision] + EAccept), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$1, -2e-226], t$95$0, If[LessEqual[t$95$1, 5e-247], N[(0.5 * N[(1.0 / N[(N[(1.0 - N[(NdChar / NaChar), $MachinePrecision]), $MachinePrecision] / NaChar), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$0]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := 0.5 \cdot \left(NdChar + NaChar\right)\\
t_1 := \frac{NdChar}{e^{\frac{mu + \left(EDonor + \left(Vef - Ec\right)\right)}{KbT}} + 1} + \frac{NaChar}{e^{\frac{\left(\left(Vef + Ev\right) + EAccept\right) - mu}{KbT}} + 1}\\
\mathbf{if}\;t\_1 \leq -2 \cdot 10^{-226}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;t\_1 \leq 5 \cdot 10^{-247}:\\
\;\;\;\;0.5 \cdot \frac{1}{\frac{1 - \frac{NdChar}{NaChar}}{NaChar}}\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < -1.99999999999999984e-226 or 4.99999999999999978e-247 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) Initial program 100.0%
Taylor expanded in KbT around inf
+-commutativeN/A
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6435.9
Applied rewrites35.9%
if -1.99999999999999984e-226 < (+.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.99999999999999978e-247Initial program 100.0%
Taylor expanded in KbT around inf
+-commutativeN/A
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f642.8
Applied rewrites2.8%
Applied rewrites4.1%
Taylor expanded in NaChar around inf
Applied rewrites27.8%
Final simplification33.7%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (* 0.5 (+ NdChar NaChar)))
(t_1
(+
(/ NdChar (+ (exp (/ (+ mu (+ EDonor (- Vef Ec))) KbT)) 1.0))
(/ NaChar (+ (exp (/ (- (+ (+ Vef Ev) EAccept) mu) KbT)) 1.0)))))
(if (<= t_1 -1e-251)
t_0
(if (<= t_1 1e-206)
(* 0.5 (/ 1.0 (/ (- 1.0 (/ NaChar NdChar)) NdChar)))
t_0))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = 0.5 * (NdChar + NaChar);
double t_1 = (NdChar / (exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0)) + (NaChar / (exp(((((Vef + Ev) + EAccept) - mu) / KbT)) + 1.0));
double tmp;
if (t_1 <= -1e-251) {
tmp = t_0;
} else if (t_1 <= 1e-206) {
tmp = 0.5 * (1.0 / ((1.0 - (NaChar / NdChar)) / NdChar));
} else {
tmp = t_0;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = 0.5d0 * (ndchar + nachar)
t_1 = (ndchar / (exp(((mu + (edonor + (vef - ec))) / kbt)) + 1.0d0)) + (nachar / (exp(((((vef + ev) + eaccept) - mu) / kbt)) + 1.0d0))
if (t_1 <= (-1d-251)) then
tmp = t_0
else if (t_1 <= 1d-206) then
tmp = 0.5d0 * (1.0d0 / ((1.0d0 - (nachar / ndchar)) / ndchar))
else
tmp = t_0
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = 0.5 * (NdChar + NaChar);
double t_1 = (NdChar / (Math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0)) + (NaChar / (Math.exp(((((Vef + Ev) + EAccept) - mu) / KbT)) + 1.0));
double tmp;
if (t_1 <= -1e-251) {
tmp = t_0;
} else if (t_1 <= 1e-206) {
tmp = 0.5 * (1.0 / ((1.0 - (NaChar / NdChar)) / NdChar));
} else {
tmp = t_0;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = 0.5 * (NdChar + NaChar) t_1 = (NdChar / (math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0)) + (NaChar / (math.exp(((((Vef + Ev) + EAccept) - mu) / KbT)) + 1.0)) tmp = 0 if t_1 <= -1e-251: tmp = t_0 elif t_1 <= 1e-206: tmp = 0.5 * (1.0 / ((1.0 - (NaChar / NdChar)) / NdChar)) else: tmp = t_0 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(0.5 * Float64(NdChar + NaChar)) t_1 = Float64(Float64(NdChar / Float64(exp(Float64(Float64(mu + Float64(EDonor + Float64(Vef - Ec))) / KbT)) + 1.0)) + Float64(NaChar / Float64(exp(Float64(Float64(Float64(Float64(Vef + Ev) + EAccept) - mu) / KbT)) + 1.0))) tmp = 0.0 if (t_1 <= -1e-251) tmp = t_0; elseif (t_1 <= 1e-206) tmp = Float64(0.5 * Float64(1.0 / Float64(Float64(1.0 - Float64(NaChar / NdChar)) / NdChar))); else tmp = t_0; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = 0.5 * (NdChar + NaChar); t_1 = (NdChar / (exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0)) + (NaChar / (exp(((((Vef + Ev) + EAccept) - mu) / KbT)) + 1.0)); tmp = 0.0; if (t_1 <= -1e-251) tmp = t_0; elseif (t_1 <= 1e-206) tmp = 0.5 * (1.0 / ((1.0 - (NaChar / NdChar)) / NdChar)); else tmp = t_0; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(0.5 * N[(NdChar + NaChar), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NdChar / N[(N[Exp[N[(N[(mu + N[(EDonor + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(N[Exp[N[(N[(N[(N[(Vef + Ev), $MachinePrecision] + EAccept), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$1, -1e-251], t$95$0, If[LessEqual[t$95$1, 1e-206], N[(0.5 * N[(1.0 / N[(N[(1.0 - N[(NaChar / NdChar), $MachinePrecision]), $MachinePrecision] / NdChar), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$0]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := 0.5 \cdot \left(NdChar + NaChar\right)\\
t_1 := \frac{NdChar}{e^{\frac{mu + \left(EDonor + \left(Vef - Ec\right)\right)}{KbT}} + 1} + \frac{NaChar}{e^{\frac{\left(\left(Vef + Ev\right) + EAccept\right) - mu}{KbT}} + 1}\\
\mathbf{if}\;t\_1 \leq -1 \cdot 10^{-251}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;t\_1 \leq 10^{-206}:\\
\;\;\;\;0.5 \cdot \frac{1}{\frac{1 - \frac{NaChar}{NdChar}}{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.00000000000000002e-251 or 1.00000000000000003e-206 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) Initial program 100.0%
Taylor expanded in KbT around inf
+-commutativeN/A
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6436.4
Applied rewrites36.4%
if -1.00000000000000002e-251 < (+.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.00000000000000003e-206Initial program 100.0%
Taylor expanded in KbT around inf
+-commutativeN/A
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f642.8
Applied rewrites2.8%
Applied rewrites3.9%
Taylor expanded in NdChar around inf
Applied rewrites21.0%
Final simplification32.0%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (* 0.5 (+ NdChar NaChar)))
(t_1
(+
(/ NdChar (+ (exp (/ (+ mu (+ EDonor (- Vef Ec))) KbT)) 1.0))
(/ NaChar (+ (exp (/ (- (+ (+ Vef Ev) EAccept) mu) KbT)) 1.0)))))
(if (<= t_1 -5e-293)
t_0
(if (<= t_1 5e-247) (/ (* -0.25 (* NaChar Ev)) KbT) t_0))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = 0.5 * (NdChar + NaChar);
double t_1 = (NdChar / (exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0)) + (NaChar / (exp(((((Vef + Ev) + EAccept) - mu) / KbT)) + 1.0));
double tmp;
if (t_1 <= -5e-293) {
tmp = t_0;
} else if (t_1 <= 5e-247) {
tmp = (-0.25 * (NaChar * Ev)) / KbT;
} else {
tmp = t_0;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = 0.5d0 * (ndchar + nachar)
t_1 = (ndchar / (exp(((mu + (edonor + (vef - ec))) / kbt)) + 1.0d0)) + (nachar / (exp(((((vef + ev) + eaccept) - mu) / kbt)) + 1.0d0))
if (t_1 <= (-5d-293)) then
tmp = t_0
else if (t_1 <= 5d-247) then
tmp = ((-0.25d0) * (nachar * ev)) / kbt
else
tmp = t_0
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = 0.5 * (NdChar + NaChar);
double t_1 = (NdChar / (Math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0)) + (NaChar / (Math.exp(((((Vef + Ev) + EAccept) - mu) / KbT)) + 1.0));
double tmp;
if (t_1 <= -5e-293) {
tmp = t_0;
} else if (t_1 <= 5e-247) {
tmp = (-0.25 * (NaChar * Ev)) / KbT;
} else {
tmp = t_0;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = 0.5 * (NdChar + NaChar) t_1 = (NdChar / (math.exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0)) + (NaChar / (math.exp(((((Vef + Ev) + EAccept) - mu) / KbT)) + 1.0)) tmp = 0 if t_1 <= -5e-293: tmp = t_0 elif t_1 <= 5e-247: tmp = (-0.25 * (NaChar * Ev)) / KbT else: tmp = t_0 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(0.5 * Float64(NdChar + NaChar)) t_1 = Float64(Float64(NdChar / Float64(exp(Float64(Float64(mu + Float64(EDonor + Float64(Vef - Ec))) / KbT)) + 1.0)) + Float64(NaChar / Float64(exp(Float64(Float64(Float64(Float64(Vef + Ev) + EAccept) - mu) / KbT)) + 1.0))) tmp = 0.0 if (t_1 <= -5e-293) tmp = t_0; elseif (t_1 <= 5e-247) tmp = Float64(Float64(-0.25 * Float64(NaChar * Ev)) / KbT); else tmp = t_0; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = 0.5 * (NdChar + NaChar); t_1 = (NdChar / (exp(((mu + (EDonor + (Vef - Ec))) / KbT)) + 1.0)) + (NaChar / (exp(((((Vef + Ev) + EAccept) - mu) / KbT)) + 1.0)); tmp = 0.0; if (t_1 <= -5e-293) tmp = t_0; elseif (t_1 <= 5e-247) tmp = (-0.25 * (NaChar * Ev)) / 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[(0.5 * N[(NdChar + NaChar), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[(NdChar / N[(N[Exp[N[(N[(mu + N[(EDonor + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(N[Exp[N[(N[(N[(N[(Vef + Ev), $MachinePrecision] + EAccept), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$1, -5e-293], t$95$0, If[LessEqual[t$95$1, 5e-247], N[(N[(-0.25 * N[(NaChar * Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision], t$95$0]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := 0.5 \cdot \left(NdChar + NaChar\right)\\
t_1 := \frac{NdChar}{e^{\frac{mu + \left(EDonor + \left(Vef - Ec\right)\right)}{KbT}} + 1} + \frac{NaChar}{e^{\frac{\left(\left(Vef + Ev\right) + EAccept\right) - mu}{KbT}} + 1}\\
\mathbf{if}\;t\_1 \leq -5 \cdot 10^{-293}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;t\_1 \leq 5 \cdot 10^{-247}:\\
\;\;\;\;\frac{-0.25 \cdot \left(NaChar \cdot Ev\right)}{KbT}\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) < -5.0000000000000003e-293 or 4.99999999999999978e-247 < (+.f64 (/.f64 NdChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (neg.f64 (-.f64 (-.f64 (-.f64 Ec Vef) EDonor) mu)) KbT)))) (/.f64 NaChar (+.f64 #s(literal 1 binary64) (exp.f64 (/.f64 (+.f64 (+.f64 (+.f64 Ev Vef) EAccept) (neg.f64 mu)) KbT))))) Initial program 100.0%
Taylor expanded in KbT around inf
+-commutativeN/A
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6435.0
Applied rewrites35.0%
if -5.0000000000000003e-293 < (+.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.99999999999999978e-247Initial program 100.0%
Taylor expanded in KbT around -inf
Applied rewrites1.4%
Taylor expanded in EAccept around inf
Applied rewrites2.3%
Taylor expanded in Ev around inf
Applied rewrites13.9%
Final simplification29.7%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NdChar (+ (exp (/ (+ EDonor (+ Vef (- mu Ec))) KbT)) 1.0))))
(if (<= NdChar -2.2e+125)
t_0
(if (<= NdChar 2.1e+32)
(/ NaChar (+ (exp (/ (- EAccept (- (- mu Vef) 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 + (Vef + (mu - Ec))) / KbT)) + 1.0);
double tmp;
if (NdChar <= -2.2e+125) {
tmp = t_0;
} else if (NdChar <= 2.1e+32) {
tmp = NaChar / (exp(((EAccept - ((mu - Vef) - 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 + (vef + (mu - ec))) / kbt)) + 1.0d0)
if (ndchar <= (-2.2d+125)) then
tmp = t_0
else if (ndchar <= 2.1d+32) then
tmp = nachar / (exp(((eaccept - ((mu - vef) - 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 + (Vef + (mu - Ec))) / KbT)) + 1.0);
double tmp;
if (NdChar <= -2.2e+125) {
tmp = t_0;
} else if (NdChar <= 2.1e+32) {
tmp = NaChar / (Math.exp(((EAccept - ((mu - Vef) - 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 + (Vef + (mu - Ec))) / KbT)) + 1.0) tmp = 0 if NdChar <= -2.2e+125: tmp = t_0 elif NdChar <= 2.1e+32: tmp = NaChar / (math.exp(((EAccept - ((mu - Vef) - 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(Float64(EDonor + Float64(Vef + Float64(mu - Ec))) / KbT)) + 1.0)) tmp = 0.0 if (NdChar <= -2.2e+125) tmp = t_0; elseif (NdChar <= 2.1e+32) tmp = Float64(NaChar / Float64(exp(Float64(Float64(EAccept - Float64(Float64(mu - Vef) - 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 + (Vef + (mu - Ec))) / KbT)) + 1.0); tmp = 0.0; if (NdChar <= -2.2e+125) tmp = t_0; elseif (NdChar <= 2.1e+32) tmp = NaChar / (exp(((EAccept - ((mu - Vef) - 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[(N[(EDonor + N[(Vef + N[(mu - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NdChar, -2.2e+125], t$95$0, If[LessEqual[NdChar, 2.1e+32], N[(NaChar / N[(N[Exp[N[(N[(EAccept - N[(N[(mu - Vef), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], t$95$0]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{e^{\frac{EDonor + \left(Vef + \left(mu - Ec\right)\right)}{KbT}} + 1}\\
\mathbf{if}\;NdChar \leq -2.2 \cdot 10^{+125}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;NdChar \leq 2.1 \cdot 10^{+32}:\\
\;\;\;\;\frac{NaChar}{e^{\frac{EAccept - \left(\left(mu - Vef\right) - Ev\right)}{KbT}} + 1}\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if NdChar < -2.19999999999999991e125 or 2.1000000000000001e32 < NdChar Initial program 100.0%
Taylor expanded in NdChar around inf
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
Applied rewrites77.6%
if -2.19999999999999991e125 < NdChar < 2.1000000000000001e32Initial program 100.0%
Taylor expanded in NdChar around 0
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
associate--l+N/A
lower-+.f64N/A
sub-negN/A
associate-+r+N/A
mul-1-negN/A
lower-+.f64N/A
mul-1-negN/A
sub-negN/A
lower--.f6475.7
Applied rewrites75.7%
Final simplification76.5%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (if (<= EDonor 4.6e+228) (/ NaChar (+ (exp (/ (- EAccept (- (- mu Vef) Ev)) KbT)) 1.0)) (/ NdChar (+ (exp (/ EDonor KbT)) 1.0))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (EDonor <= 4.6e+228) {
tmp = NaChar / (exp(((EAccept - ((mu - Vef) - Ev)) / KbT)) + 1.0);
} else {
tmp = NdChar / (exp((EDonor / 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) :: tmp
if (edonor <= 4.6d+228) then
tmp = nachar / (exp(((eaccept - ((mu - vef) - ev)) / kbt)) + 1.0d0)
else
tmp = ndchar / (exp((edonor / 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 tmp;
if (EDonor <= 4.6e+228) {
tmp = NaChar / (Math.exp(((EAccept - ((mu - Vef) - Ev)) / KbT)) + 1.0);
} else {
tmp = NdChar / (Math.exp((EDonor / KbT)) + 1.0);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if EDonor <= 4.6e+228: tmp = NaChar / (math.exp(((EAccept - ((mu - Vef) - Ev)) / KbT)) + 1.0) else: tmp = NdChar / (math.exp((EDonor / KbT)) + 1.0) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (EDonor <= 4.6e+228) tmp = Float64(NaChar / Float64(exp(Float64(Float64(EAccept - Float64(Float64(mu - Vef) - Ev)) / KbT)) + 1.0)); else tmp = Float64(NdChar / Float64(exp(Float64(EDonor / KbT)) + 1.0)); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (EDonor <= 4.6e+228) tmp = NaChar / (exp(((EAccept - ((mu - Vef) - Ev)) / KbT)) + 1.0); else tmp = NdChar / (exp((EDonor / KbT)) + 1.0); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[EDonor, 4.6e+228], N[(NaChar / N[(N[Exp[N[(N[(EAccept - N[(N[(mu - Vef), $MachinePrecision] - Ev), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], N[(NdChar / N[(N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;EDonor \leq 4.6 \cdot 10^{+228}:\\
\;\;\;\;\frac{NaChar}{e^{\frac{EAccept - \left(\left(mu - Vef\right) - Ev\right)}{KbT}} + 1}\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{e^{\frac{EDonor}{KbT}} + 1}\\
\end{array}
\end{array}
if EDonor < 4.60000000000000026e228Initial program 100.0%
Taylor expanded in NdChar around 0
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
associate--l+N/A
lower-+.f64N/A
sub-negN/A
associate-+r+N/A
mul-1-negN/A
lower-+.f64N/A
mul-1-negN/A
sub-negN/A
lower--.f6468.3
Applied rewrites68.3%
if 4.60000000000000026e228 < EDonor Initial program 100.0%
Taylor expanded in NdChar around inf
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
Applied rewrites93.5%
Taylor expanded in EDonor around inf
Applied rewrites93.5%
Final simplification69.8%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (if (<= NdChar -2.15e+125) (* NdChar 0.5) (if (<= NdChar 1.55e-30) (* NaChar 0.5) (* NdChar 0.5))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (NdChar <= -2.15e+125) {
tmp = NdChar * 0.5;
} else if (NdChar <= 1.55e-30) {
tmp = NaChar * 0.5;
} else {
tmp = NdChar * 0.5;
}
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 <= (-2.15d+125)) then
tmp = ndchar * 0.5d0
else if (ndchar <= 1.55d-30) then
tmp = nachar * 0.5d0
else
tmp = ndchar * 0.5d0
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 <= -2.15e+125) {
tmp = NdChar * 0.5;
} else if (NdChar <= 1.55e-30) {
tmp = NaChar * 0.5;
} else {
tmp = NdChar * 0.5;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if NdChar <= -2.15e+125: tmp = NdChar * 0.5 elif NdChar <= 1.55e-30: tmp = NaChar * 0.5 else: tmp = NdChar * 0.5 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (NdChar <= -2.15e+125) tmp = Float64(NdChar * 0.5); elseif (NdChar <= 1.55e-30) tmp = Float64(NaChar * 0.5); else tmp = Float64(NdChar * 0.5); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (NdChar <= -2.15e+125) tmp = NdChar * 0.5; elseif (NdChar <= 1.55e-30) tmp = NaChar * 0.5; else tmp = NdChar * 0.5; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[NdChar, -2.15e+125], N[(NdChar * 0.5), $MachinePrecision], If[LessEqual[NdChar, 1.55e-30], N[(NaChar * 0.5), $MachinePrecision], N[(NdChar * 0.5), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NdChar \leq -2.15 \cdot 10^{+125}:\\
\;\;\;\;NdChar \cdot 0.5\\
\mathbf{elif}\;NdChar \leq 1.55 \cdot 10^{-30}:\\
\;\;\;\;NaChar \cdot 0.5\\
\mathbf{else}:\\
\;\;\;\;NdChar \cdot 0.5\\
\end{array}
\end{array}
if NdChar < -2.15000000000000018e125 or 1.54999999999999995e-30 < NdChar Initial program 100.0%
Taylor expanded in NdChar around inf
lower-/.f64N/A
lower-+.f64N/A
lower-exp.f64N/A
lower-/.f64N/A
Applied rewrites73.5%
Taylor expanded in KbT around inf
Applied rewrites22.8%
if -2.15000000000000018e125 < NdChar < 1.54999999999999995e-30Initial program 100.0%
Taylor expanded in KbT around inf
+-commutativeN/A
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6427.0
Applied rewrites27.0%
Taylor expanded in NdChar around 0
Applied rewrites26.0%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (* 0.5 (+ NdChar NaChar)))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return 0.5 * (NdChar + 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 * (ndchar + 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 * (NdChar + NaChar);
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return 0.5 * (NdChar + NaChar)
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(0.5 * Float64(NdChar + NaChar)) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.5 * (NdChar + NaChar); end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(0.5 * N[(NdChar + NaChar), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
0.5 \cdot \left(NdChar + NaChar\right)
\end{array}
Initial program 100.0%
Taylor expanded in KbT around inf
+-commutativeN/A
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6426.8
Applied rewrites26.8%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (* NaChar 0.5))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return NaChar * 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 * 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 * 0.5;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return NaChar * 0.5
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(NaChar * 0.5) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = NaChar * 0.5; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(NaChar * 0.5), $MachinePrecision]
\begin{array}{l}
\\
NaChar \cdot 0.5
\end{array}
Initial program 100.0%
Taylor expanded in KbT around inf
+-commutativeN/A
distribute-lft-outN/A
lower-*.f64N/A
lower-+.f6426.8
Applied rewrites26.8%
Taylor expanded in NdChar around 0
Applied rewrites18.3%
herbie shell --seed 2024233
(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))))))