
(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 17 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (+ (/ NdChar (+ 1.0 (exp (/ (- (- (- (- Ec Vef) EDonor) mu)) KbT)))) (/ NaChar (+ 1.0 (exp (/ (+ (+ (+ Ev Vef) EAccept) (- mu)) KbT))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NdChar / (1.0 + exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + exp(((((Ev + Vef) + EAccept) + -mu) / KbT))));
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
code = (ndchar / (1.0d0 + exp((-(((ec - vef) - edonor) - mu) / kbt)))) + (nachar / (1.0d0 + exp(((((ev + vef) + eaccept) + -mu) / kbt))))
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NdChar / (1.0 + Math.exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + Math.exp(((((Ev + Vef) + EAccept) + -mu) / KbT))));
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return (NdChar / (1.0 + math.exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + math.exp(((((Ev + Vef) + EAccept) + -mu) / KbT))))
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(-Float64(Float64(Float64(Ec - Vef) - EDonor) - mu)) / KbT)))) + Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(Float64(Ev + Vef) + EAccept) + Float64(-mu)) / KbT))))) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = (NdChar / (1.0 + exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + exp(((((Ev + Vef) + EAccept) + -mu) / KbT)))); end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(N[(NdChar / N[(1.0 + N[Exp[N[((-N[(N[(N[(Ec - Vef), $MachinePrecision] - EDonor), $MachinePrecision] - mu), $MachinePrecision]) / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Exp[N[(N[(N[(N[(Ev + Vef), $MachinePrecision] + EAccept), $MachinePrecision] + (-mu)), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{NdChar}{1 + e^{\frac{-\left(\left(\left(Ec - Vef\right) - EDonor\right) - mu\right)}{KbT}}} + \frac{NaChar}{1 + e^{\frac{\left(\left(Ev + Vef\right) + EAccept\right) + \left(-mu\right)}{KbT}}}
\end{array}
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (+ (/ NdChar (+ 1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT)))) (/ NaChar (+ 1.0 (exp (/ (+ Vef (+ Ev (- 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(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + exp(((Vef + (Ev + (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(((edonor + (mu + (vef - ec))) / kbt)))) + (nachar / (1.0d0 + exp(((vef + (ev + (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(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + Math.exp(((Vef + (Ev + (EAccept - mu))) / KbT))));
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return (NdChar / (1.0 + math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + math.exp(((Vef + (Ev + (EAccept - mu))) / KbT))))
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) + Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Ev + Float64(EAccept - mu))) / KbT))))) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT)))); end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(Ev + N[(EAccept - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{NdChar}{1 + e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}} + \frac{NaChar}{1 + e^{\frac{Vef + \left(Ev + \left(EAccept - mu\right)\right)}{KbT}}}
\end{array}
Initial program 100.0%
Simplified100.0%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (or (<= NdChar -4e-149) (not (<= NdChar 6.5e-193)))
(+
(/ NdChar (+ 1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT))))
(/ NaChar (+ 1.0 (exp (/ EAccept KbT)))))
(/ NaChar (+ 1.0 (exp (/ (- (+ EAccept (+ Vef Ev)) mu) KbT))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NdChar <= -4e-149) || !(NdChar <= 6.5e-193)) {
tmp = (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + exp((EAccept / KbT))));
} else {
tmp = NaChar / (1.0 + exp((((EAccept + (Vef + Ev)) - mu) / KbT)));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if ((ndchar <= (-4d-149)) .or. (.not. (ndchar <= 6.5d-193))) then
tmp = (ndchar / (1.0d0 + exp(((edonor + (mu + (vef - ec))) / kbt)))) + (nachar / (1.0d0 + exp((eaccept / kbt))))
else
tmp = nachar / (1.0d0 + exp((((eaccept + (vef + ev)) - mu) / kbt)))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NdChar <= -4e-149) || !(NdChar <= 6.5e-193)) {
tmp = (NdChar / (1.0 + Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + Math.exp((EAccept / KbT))));
} else {
tmp = NaChar / (1.0 + Math.exp((((EAccept + (Vef + Ev)) - mu) / KbT)));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if (NdChar <= -4e-149) or not (NdChar <= 6.5e-193): tmp = (NdChar / (1.0 + math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + math.exp((EAccept / KbT)))) else: tmp = NaChar / (1.0 + math.exp((((EAccept + (Vef + Ev)) - mu) / KbT))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if ((NdChar <= -4e-149) || !(NdChar <= 6.5e-193)) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) + Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT))))); else tmp = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(EAccept + Float64(Vef + Ev)) - mu) / KbT)))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if ((NdChar <= -4e-149) || ~((NdChar <= 6.5e-193))) tmp = (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))) + (NaChar / (1.0 + exp((EAccept / KbT)))); else tmp = NaChar / (1.0 + exp((((EAccept + (Vef + Ev)) - mu) / KbT))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[Or[LessEqual[NdChar, -4e-149], N[Not[LessEqual[NdChar, 6.5e-193]], $MachinePrecision]], N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(NaChar / N[(1.0 + N[Exp[N[(N[(N[(EAccept + N[(Vef + Ev), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NdChar \leq -4 \cdot 10^{-149} \lor \neg \left(NdChar \leq 6.5 \cdot 10^{-193}\right):\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}} + \frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{\left(EAccept + \left(Vef + Ev\right)\right) - mu}{KbT}}}\\
\end{array}
\end{array}
if NdChar < -3.99999999999999992e-149 or 6.5000000000000004e-193 < NdChar Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 77.0%
if -3.99999999999999992e-149 < NdChar < 6.5000000000000004e-193Initial program 100.0%
Simplified100.0%
Taylor expanded in NdChar around 0 89.0%
Final simplification79.3%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NdChar (+ 1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT))))))
(if (<= EAccept 4.6e-102)
(+ t_0 (/ NaChar (+ 1.0 (exp (/ Ev KbT)))))
(+ t_0 (/ NaChar (+ 1.0 (exp (/ EAccept KbT))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)));
double tmp;
if (EAccept <= 4.6e-102) {
tmp = t_0 + (NaChar / (1.0 + exp((Ev / KbT))));
} else {
tmp = t_0 + (NaChar / (1.0 + exp((EAccept / KbT))));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: tmp
t_0 = ndchar / (1.0d0 + exp(((edonor + (mu + (vef - ec))) / kbt)))
if (eaccept <= 4.6d-102) then
tmp = t_0 + (nachar / (1.0d0 + exp((ev / kbt))))
else
tmp = t_0 + (nachar / (1.0d0 + exp((eaccept / kbt))))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (1.0 + Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT)));
double tmp;
if (EAccept <= 4.6e-102) {
tmp = t_0 + (NaChar / (1.0 + Math.exp((Ev / KbT))));
} else {
tmp = t_0 + (NaChar / (1.0 + Math.exp((EAccept / KbT))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NdChar / (1.0 + math.exp(((EDonor + (mu + (Vef - Ec))) / KbT))) tmp = 0 if EAccept <= 4.6e-102: tmp = t_0 + (NaChar / (1.0 + math.exp((Ev / KbT)))) else: tmp = t_0 + (NaChar / (1.0 + math.exp((EAccept / KbT)))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NdChar / Float64(1.0 + exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT)))) tmp = 0.0 if (EAccept <= 4.6e-102) tmp = Float64(t_0 + Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT))))); else tmp = Float64(t_0 + Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT))))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT))); tmp = 0.0; if (EAccept <= 4.6e-102) tmp = t_0 + (NaChar / (1.0 + exp((Ev / KbT)))); else tmp = t_0 + (NaChar / (1.0 + exp((EAccept / KbT)))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NdChar / N[(1.0 + N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[EAccept, 4.6e-102], N[(t$95$0 + N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(t$95$0 + N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{1 + e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}}\\
\mathbf{if}\;EAccept \leq 4.6 \cdot 10^{-102}:\\
\;\;\;\;t\_0 + \frac{NaChar}{1 + e^{\frac{Ev}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;t\_0 + \frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}}\\
\end{array}
\end{array}
if EAccept < 4.59999999999999973e-102Initial program 100.0%
Simplified100.0%
Taylor expanded in Ev around inf 73.1%
if 4.59999999999999973e-102 < EAccept Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 84.0%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (if (or (<= NdChar -7.2e+47) (not (<= NdChar 6e-164))) (/ NdChar (+ 1.0 (exp (/ (- (+ EDonor (+ mu Vef)) Ec) KbT)))) (/ NaChar (+ 1.0 (exp (/ (- (+ EAccept (+ Vef Ev)) mu) KbT))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NdChar <= -7.2e+47) || !(NdChar <= 6e-164)) {
tmp = NdChar / (1.0 + exp((((EDonor + (mu + Vef)) - Ec) / KbT)));
} else {
tmp = NaChar / (1.0 + exp((((EAccept + (Vef + Ev)) - mu) / KbT)));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if ((ndchar <= (-7.2d+47)) .or. (.not. (ndchar <= 6d-164))) then
tmp = ndchar / (1.0d0 + exp((((edonor + (mu + vef)) - ec) / kbt)))
else
tmp = nachar / (1.0d0 + exp((((eaccept + (vef + ev)) - mu) / kbt)))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NdChar <= -7.2e+47) || !(NdChar <= 6e-164)) {
tmp = NdChar / (1.0 + Math.exp((((EDonor + (mu + Vef)) - Ec) / KbT)));
} else {
tmp = NaChar / (1.0 + Math.exp((((EAccept + (Vef + Ev)) - mu) / KbT)));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if (NdChar <= -7.2e+47) or not (NdChar <= 6e-164): tmp = NdChar / (1.0 + math.exp((((EDonor + (mu + Vef)) - Ec) / KbT))) else: tmp = NaChar / (1.0 + math.exp((((EAccept + (Vef + Ev)) - mu) / KbT))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if ((NdChar <= -7.2e+47) || !(NdChar <= 6e-164)) tmp = Float64(NdChar / Float64(1.0 + exp(Float64(Float64(Float64(EDonor + Float64(mu + Vef)) - Ec) / KbT)))); else tmp = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(EAccept + Float64(Vef + Ev)) - mu) / KbT)))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if ((NdChar <= -7.2e+47) || ~((NdChar <= 6e-164))) tmp = NdChar / (1.0 + exp((((EDonor + (mu + Vef)) - Ec) / KbT))); else tmp = NaChar / (1.0 + exp((((EAccept + (Vef + Ev)) - mu) / KbT))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[Or[LessEqual[NdChar, -7.2e+47], N[Not[LessEqual[NdChar, 6e-164]], $MachinePrecision]], N[(NdChar / N[(1.0 + N[Exp[N[(N[(N[(EDonor + N[(mu + Vef), $MachinePrecision]), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(NaChar / N[(1.0 + N[Exp[N[(N[(N[(EAccept + N[(Vef + Ev), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NdChar \leq -7.2 \cdot 10^{+47} \lor \neg \left(NdChar \leq 6 \cdot 10^{-164}\right):\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{\left(EDonor + \left(mu + Vef\right)\right) - Ec}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{\left(EAccept + \left(Vef + Ev\right)\right) - mu}{KbT}}}\\
\end{array}
\end{array}
if NdChar < -7.20000000000000015e47 or 6.0000000000000002e-164 < NdChar Initial program 100.0%
Simplified100.0%
Taylor expanded in NdChar around inf 73.4%
if -7.20000000000000015e47 < NdChar < 6.0000000000000002e-164Initial program 100.0%
Simplified100.0%
Taylor expanded in NdChar around 0 76.8%
Final simplification74.8%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (/ NdChar (+ 1.0 (exp (/ (- (+ EDonor (+ mu Vef)) Ec) KbT))))))
(if (<= KbT -2.7e+216)
(+ (* NaChar 0.5) t_0)
(if (<= KbT -2.45e-219)
(/ NaChar (+ 1.0 (exp (/ (- (+ EAccept (+ Vef Ev)) mu) KbT))))
t_0))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (1.0 + exp((((EDonor + (mu + Vef)) - Ec) / KbT)));
double tmp;
if (KbT <= -2.7e+216) {
tmp = (NaChar * 0.5) + t_0;
} else if (KbT <= -2.45e-219) {
tmp = NaChar / (1.0 + exp((((EAccept + (Vef + Ev)) - mu) / KbT)));
} else {
tmp = t_0;
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: tmp
t_0 = ndchar / (1.0d0 + exp((((edonor + (mu + vef)) - ec) / kbt)))
if (kbt <= (-2.7d+216)) then
tmp = (nachar * 0.5d0) + t_0
else if (kbt <= (-2.45d-219)) then
tmp = nachar / (1.0d0 + exp((((eaccept + (vef + ev)) - mu) / kbt)))
else
tmp = t_0
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = NdChar / (1.0 + Math.exp((((EDonor + (mu + Vef)) - Ec) / KbT)));
double tmp;
if (KbT <= -2.7e+216) {
tmp = (NaChar * 0.5) + t_0;
} else if (KbT <= -2.45e-219) {
tmp = NaChar / (1.0 + Math.exp((((EAccept + (Vef + Ev)) - mu) / KbT)));
} else {
tmp = t_0;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = NdChar / (1.0 + math.exp((((EDonor + (mu + Vef)) - Ec) / KbT))) tmp = 0 if KbT <= -2.7e+216: tmp = (NaChar * 0.5) + t_0 elif KbT <= -2.45e-219: tmp = NaChar / (1.0 + math.exp((((EAccept + (Vef + Ev)) - mu) / KbT))) else: tmp = t_0 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(NdChar / Float64(1.0 + exp(Float64(Float64(Float64(EDonor + Float64(mu + Vef)) - Ec) / KbT)))) tmp = 0.0 if (KbT <= -2.7e+216) tmp = Float64(Float64(NaChar * 0.5) + t_0); elseif (KbT <= -2.45e-219) tmp = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(EAccept + Float64(Vef + Ev)) - mu) / KbT)))); else tmp = t_0; end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = NdChar / (1.0 + exp((((EDonor + (mu + Vef)) - Ec) / KbT))); tmp = 0.0; if (KbT <= -2.7e+216) tmp = (NaChar * 0.5) + t_0; elseif (KbT <= -2.45e-219) tmp = NaChar / (1.0 + exp((((EAccept + (Vef + Ev)) - mu) / KbT))); else tmp = t_0; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(NdChar / N[(1.0 + N[Exp[N[(N[(N[(EDonor + N[(mu + Vef), $MachinePrecision]), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[KbT, -2.7e+216], N[(N[(NaChar * 0.5), $MachinePrecision] + t$95$0), $MachinePrecision], If[LessEqual[KbT, -2.45e-219], N[(NaChar / N[(1.0 + N[Exp[N[(N[(N[(EAccept + N[(Vef + Ev), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$0]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{NdChar}{1 + e^{\frac{\left(EDonor + \left(mu + Vef\right)\right) - Ec}{KbT}}}\\
\mathbf{if}\;KbT \leq -2.7 \cdot 10^{+216}:\\
\;\;\;\;NaChar \cdot 0.5 + t\_0\\
\mathbf{elif}\;KbT \leq -2.45 \cdot 10^{-219}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{\left(EAccept + \left(Vef + Ev\right)\right) - mu}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if KbT < -2.7000000000000001e216Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 92.6%
Taylor expanded in EAccept around 0 92.6%
if -2.7000000000000001e216 < KbT < -2.44999999999999995e-219Initial program 100.0%
Simplified100.0%
Taylor expanded in NdChar around 0 68.8%
if -2.44999999999999995e-219 < KbT Initial program 100.0%
Simplified100.0%
Taylor expanded in NdChar around inf 76.8%
Final simplification75.1%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (<= KbT -4.5e+217)
(- (+ (* NaChar 0.5) (* NdChar 0.5)) (* -0.25 (* Ec (/ NdChar KbT))))
(if (<= KbT -1.8e-234)
(/ NaChar (+ 1.0 (exp (/ (- (+ EAccept (+ Vef Ev)) mu) KbT))))
(/ NdChar (+ 1.0 (exp (/ (- (+ mu Vef) Ec) KbT)))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (KbT <= -4.5e+217) {
tmp = ((NaChar * 0.5) + (NdChar * 0.5)) - (-0.25 * (Ec * (NdChar / KbT)));
} else if (KbT <= -1.8e-234) {
tmp = NaChar / (1.0 + exp((((EAccept + (Vef + Ev)) - mu) / KbT)));
} else {
tmp = NdChar / (1.0 + exp((((mu + Vef) - Ec) / KbT)));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if (kbt <= (-4.5d+217)) then
tmp = ((nachar * 0.5d0) + (ndchar * 0.5d0)) - ((-0.25d0) * (ec * (ndchar / kbt)))
else if (kbt <= (-1.8d-234)) then
tmp = nachar / (1.0d0 + exp((((eaccept + (vef + ev)) - mu) / kbt)))
else
tmp = ndchar / (1.0d0 + exp((((mu + vef) - ec) / kbt)))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (KbT <= -4.5e+217) {
tmp = ((NaChar * 0.5) + (NdChar * 0.5)) - (-0.25 * (Ec * (NdChar / KbT)));
} else if (KbT <= -1.8e-234) {
tmp = NaChar / (1.0 + Math.exp((((EAccept + (Vef + Ev)) - mu) / KbT)));
} else {
tmp = NdChar / (1.0 + Math.exp((((mu + Vef) - Ec) / KbT)));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if KbT <= -4.5e+217: tmp = ((NaChar * 0.5) + (NdChar * 0.5)) - (-0.25 * (Ec * (NdChar / KbT))) elif KbT <= -1.8e-234: tmp = NaChar / (1.0 + math.exp((((EAccept + (Vef + Ev)) - mu) / KbT))) else: tmp = NdChar / (1.0 + math.exp((((mu + Vef) - Ec) / KbT))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (KbT <= -4.5e+217) tmp = Float64(Float64(Float64(NaChar * 0.5) + Float64(NdChar * 0.5)) - Float64(-0.25 * Float64(Ec * Float64(NdChar / KbT)))); elseif (KbT <= -1.8e-234) tmp = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(EAccept + Float64(Vef + Ev)) - mu) / KbT)))); else tmp = Float64(NdChar / Float64(1.0 + exp(Float64(Float64(Float64(mu + Vef) - Ec) / KbT)))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (KbT <= -4.5e+217) tmp = ((NaChar * 0.5) + (NdChar * 0.5)) - (-0.25 * (Ec * (NdChar / KbT))); elseif (KbT <= -1.8e-234) tmp = NaChar / (1.0 + exp((((EAccept + (Vef + Ev)) - mu) / KbT))); else tmp = NdChar / (1.0 + exp((((mu + Vef) - Ec) / KbT))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[KbT, -4.5e+217], N[(N[(N[(NaChar * 0.5), $MachinePrecision] + N[(NdChar * 0.5), $MachinePrecision]), $MachinePrecision] - N[(-0.25 * N[(Ec * N[(NdChar / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[KbT, -1.8e-234], N[(NaChar / N[(1.0 + N[Exp[N[(N[(N[(EAccept + N[(Vef + Ev), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(NdChar / N[(1.0 + N[Exp[N[(N[(N[(mu + Vef), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;KbT \leq -4.5 \cdot 10^{+217}:\\
\;\;\;\;\left(NaChar \cdot 0.5 + NdChar \cdot 0.5\right) - -0.25 \cdot \left(Ec \cdot \frac{NdChar}{KbT}\right)\\
\mathbf{elif}\;KbT \leq -1.8 \cdot 10^{-234}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{\left(EAccept + \left(Vef + Ev\right)\right) - mu}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{\left(mu + Vef\right) - Ec}{KbT}}}\\
\end{array}
\end{array}
if KbT < -4.49999999999999988e217Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 47.7%
Taylor expanded in Ec around inf 68.1%
associate-/l*80.9%
Simplified80.9%
if -4.49999999999999988e217 < KbT < -1.7999999999999999e-234Initial program 100.0%
Simplified100.0%
Taylor expanded in NdChar around 0 68.3%
if -1.7999999999999999e-234 < KbT Initial program 100.0%
Simplified100.0%
Taylor expanded in NdChar around inf 76.9%
Taylor expanded in EDonor around 0 71.7%
Final simplification71.1%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (+ 1.0 (exp (/ Vef KbT)))))
(if (<= NdChar -1.25e+166)
(/ NdChar t_0)
(if (<= NdChar -4.25e-38)
(/ NdChar (+ 1.0 (exp (/ mu KbT))))
(if (<= NdChar 1.12e-161)
(/ NaChar t_0)
(/ NdChar (+ 1.0 (exp (/ EDonor KbT)))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = 1.0 + exp((Vef / KbT));
double tmp;
if (NdChar <= -1.25e+166) {
tmp = NdChar / t_0;
} else if (NdChar <= -4.25e-38) {
tmp = NdChar / (1.0 + exp((mu / KbT)));
} else if (NdChar <= 1.12e-161) {
tmp = NaChar / t_0;
} else {
tmp = NdChar / (1.0 + exp((EDonor / KbT)));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: tmp
t_0 = 1.0d0 + exp((vef / kbt))
if (ndchar <= (-1.25d+166)) then
tmp = ndchar / t_0
else if (ndchar <= (-4.25d-38)) then
tmp = ndchar / (1.0d0 + exp((mu / kbt)))
else if (ndchar <= 1.12d-161) then
tmp = nachar / t_0
else
tmp = ndchar / (1.0d0 + exp((edonor / kbt)))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = 1.0 + Math.exp((Vef / KbT));
double tmp;
if (NdChar <= -1.25e+166) {
tmp = NdChar / t_0;
} else if (NdChar <= -4.25e-38) {
tmp = NdChar / (1.0 + Math.exp((mu / KbT)));
} else if (NdChar <= 1.12e-161) {
tmp = NaChar / t_0;
} else {
tmp = NdChar / (1.0 + Math.exp((EDonor / KbT)));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = 1.0 + math.exp((Vef / KbT)) tmp = 0 if NdChar <= -1.25e+166: tmp = NdChar / t_0 elif NdChar <= -4.25e-38: tmp = NdChar / (1.0 + math.exp((mu / KbT))) elif NdChar <= 1.12e-161: tmp = NaChar / t_0 else: tmp = NdChar / (1.0 + math.exp((EDonor / KbT))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(1.0 + exp(Float64(Vef / KbT))) tmp = 0.0 if (NdChar <= -1.25e+166) tmp = Float64(NdChar / t_0); elseif (NdChar <= -4.25e-38) tmp = Float64(NdChar / Float64(1.0 + exp(Float64(mu / KbT)))); elseif (NdChar <= 1.12e-161) tmp = Float64(NaChar / t_0); else tmp = Float64(NdChar / Float64(1.0 + exp(Float64(EDonor / KbT)))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = 1.0 + exp((Vef / KbT)); tmp = 0.0; if (NdChar <= -1.25e+166) tmp = NdChar / t_0; elseif (NdChar <= -4.25e-38) tmp = NdChar / (1.0 + exp((mu / KbT))); elseif (NdChar <= 1.12e-161) tmp = NaChar / t_0; else tmp = NdChar / (1.0 + exp((EDonor / KbT))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(1.0 + N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NdChar, -1.25e+166], N[(NdChar / t$95$0), $MachinePrecision], If[LessEqual[NdChar, -4.25e-38], N[(NdChar / N[(1.0 + N[Exp[N[(mu / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NdChar, 1.12e-161], N[(NaChar / t$95$0), $MachinePrecision], N[(NdChar / N[(1.0 + N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := 1 + e^{\frac{Vef}{KbT}}\\
\mathbf{if}\;NdChar \leq -1.25 \cdot 10^{+166}:\\
\;\;\;\;\frac{NdChar}{t\_0}\\
\mathbf{elif}\;NdChar \leq -4.25 \cdot 10^{-38}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{mu}{KbT}}}\\
\mathbf{elif}\;NdChar \leq 1.12 \cdot 10^{-161}:\\
\;\;\;\;\frac{NaChar}{t\_0}\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{EDonor}{KbT}}}\\
\end{array}
\end{array}
if NdChar < -1.25e166Initial program 100.0%
Simplified100.0%
Taylor expanded in NdChar around inf 81.1%
Taylor expanded in EDonor around 0 76.1%
Taylor expanded in Vef around inf 67.5%
if -1.25e166 < NdChar < -4.25000000000000023e-38Initial program 100.0%
Simplified100.0%
Taylor expanded in NdChar around inf 68.9%
Taylor expanded in mu around inf 51.4%
if -4.25000000000000023e-38 < NdChar < 1.12000000000000009e-161Initial program 100.0%
Simplified100.0%
Taylor expanded in NdChar around 0 78.3%
Taylor expanded in Vef around inf 61.8%
if 1.12000000000000009e-161 < NdChar Initial program 100.0%
Simplified100.0%
Taylor expanded in NdChar around inf 69.5%
Taylor expanded in EDonor around inf 49.0%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (+ 1.0 (exp (/ Vef KbT)))))
(if (<= NdChar -7.2e+47)
(/ NdChar t_0)
(if (<= NdChar -6.5e-33)
(/ NaChar (+ 1.0 (exp (/ EAccept KbT))))
(if (<= NdChar 2.25e-159)
(/ NaChar t_0)
(/ NdChar (+ 1.0 (exp (/ EDonor KbT)))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = 1.0 + exp((Vef / KbT));
double tmp;
if (NdChar <= -7.2e+47) {
tmp = NdChar / t_0;
} else if (NdChar <= -6.5e-33) {
tmp = NaChar / (1.0 + exp((EAccept / KbT)));
} else if (NdChar <= 2.25e-159) {
tmp = NaChar / t_0;
} else {
tmp = NdChar / (1.0 + exp((EDonor / KbT)));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: t_0
real(8) :: tmp
t_0 = 1.0d0 + exp((vef / kbt))
if (ndchar <= (-7.2d+47)) then
tmp = ndchar / t_0
else if (ndchar <= (-6.5d-33)) then
tmp = nachar / (1.0d0 + exp((eaccept / kbt)))
else if (ndchar <= 2.25d-159) then
tmp = nachar / t_0
else
tmp = ndchar / (1.0d0 + exp((edonor / kbt)))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double t_0 = 1.0 + Math.exp((Vef / KbT));
double tmp;
if (NdChar <= -7.2e+47) {
tmp = NdChar / t_0;
} else if (NdChar <= -6.5e-33) {
tmp = NaChar / (1.0 + Math.exp((EAccept / KbT)));
} else if (NdChar <= 2.25e-159) {
tmp = NaChar / t_0;
} else {
tmp = NdChar / (1.0 + Math.exp((EDonor / KbT)));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): t_0 = 1.0 + math.exp((Vef / KbT)) tmp = 0 if NdChar <= -7.2e+47: tmp = NdChar / t_0 elif NdChar <= -6.5e-33: tmp = NaChar / (1.0 + math.exp((EAccept / KbT))) elif NdChar <= 2.25e-159: tmp = NaChar / t_0 else: tmp = NdChar / (1.0 + math.exp((EDonor / KbT))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = Float64(1.0 + exp(Float64(Vef / KbT))) tmp = 0.0 if (NdChar <= -7.2e+47) tmp = Float64(NdChar / t_0); elseif (NdChar <= -6.5e-33) tmp = Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT)))); elseif (NdChar <= 2.25e-159) tmp = Float64(NaChar / t_0); else tmp = Float64(NdChar / Float64(1.0 + exp(Float64(EDonor / KbT)))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) t_0 = 1.0 + exp((Vef / KbT)); tmp = 0.0; if (NdChar <= -7.2e+47) tmp = NdChar / t_0; elseif (NdChar <= -6.5e-33) tmp = NaChar / (1.0 + exp((EAccept / KbT))); elseif (NdChar <= 2.25e-159) tmp = NaChar / t_0; else tmp = NdChar / (1.0 + exp((EDonor / KbT))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := Block[{t$95$0 = N[(1.0 + N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NdChar, -7.2e+47], N[(NdChar / t$95$0), $MachinePrecision], If[LessEqual[NdChar, -6.5e-33], N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NdChar, 2.25e-159], N[(NaChar / t$95$0), $MachinePrecision], N[(NdChar / N[(1.0 + N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := 1 + e^{\frac{Vef}{KbT}}\\
\mathbf{if}\;NdChar \leq -7.2 \cdot 10^{+47}:\\
\;\;\;\;\frac{NdChar}{t\_0}\\
\mathbf{elif}\;NdChar \leq -6.5 \cdot 10^{-33}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}}\\
\mathbf{elif}\;NdChar \leq 2.25 \cdot 10^{-159}:\\
\;\;\;\;\frac{NaChar}{t\_0}\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{EDonor}{KbT}}}\\
\end{array}
\end{array}
if NdChar < -7.20000000000000015e47Initial program 100.0%
Simplified100.0%
Taylor expanded in NdChar around inf 79.0%
Taylor expanded in EDonor around 0 72.8%
Taylor expanded in Vef around inf 56.4%
if -7.20000000000000015e47 < NdChar < -6.4999999999999993e-33Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 74.9%
Taylor expanded in NdChar around 0 50.7%
if -6.4999999999999993e-33 < NdChar < 2.24999999999999994e-159Initial program 100.0%
Simplified100.0%
Taylor expanded in NdChar around 0 78.5%
Taylor expanded in Vef around inf 61.1%
if 2.24999999999999994e-159 < NdChar Initial program 100.0%
Simplified100.0%
Taylor expanded in NdChar around inf 69.5%
Taylor expanded in EDonor around inf 49.0%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (if (or (<= NdChar -9.5e-139) (not (<= NdChar 3.7e-163))) (/ NdChar (+ 1.0 (exp (/ (- (+ mu Vef) Ec) KbT)))) (/ NaChar (+ 1.0 (exp (/ Vef KbT))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NdChar <= -9.5e-139) || !(NdChar <= 3.7e-163)) {
tmp = NdChar / (1.0 + exp((((mu + Vef) - Ec) / KbT)));
} else {
tmp = NaChar / (1.0 + exp((Vef / KbT)));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if ((ndchar <= (-9.5d-139)) .or. (.not. (ndchar <= 3.7d-163))) then
tmp = ndchar / (1.0d0 + exp((((mu + vef) - ec) / kbt)))
else
tmp = nachar / (1.0d0 + exp((vef / kbt)))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NdChar <= -9.5e-139) || !(NdChar <= 3.7e-163)) {
tmp = NdChar / (1.0 + Math.exp((((mu + Vef) - Ec) / KbT)));
} else {
tmp = NaChar / (1.0 + Math.exp((Vef / KbT)));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if (NdChar <= -9.5e-139) or not (NdChar <= 3.7e-163): tmp = NdChar / (1.0 + math.exp((((mu + Vef) - Ec) / KbT))) else: tmp = NaChar / (1.0 + math.exp((Vef / KbT))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if ((NdChar <= -9.5e-139) || !(NdChar <= 3.7e-163)) tmp = Float64(NdChar / Float64(1.0 + exp(Float64(Float64(Float64(mu + Vef) - Ec) / KbT)))); else tmp = Float64(NaChar / Float64(1.0 + exp(Float64(Vef / KbT)))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if ((NdChar <= -9.5e-139) || ~((NdChar <= 3.7e-163))) tmp = NdChar / (1.0 + exp((((mu + Vef) - Ec) / KbT))); else tmp = NaChar / (1.0 + exp((Vef / KbT))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[Or[LessEqual[NdChar, -9.5e-139], N[Not[LessEqual[NdChar, 3.7e-163]], $MachinePrecision]], N[(NdChar / N[(1.0 + N[Exp[N[(N[(N[(mu + Vef), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(NaChar / N[(1.0 + N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NdChar \leq -9.5 \cdot 10^{-139} \lor \neg \left(NdChar \leq 3.7 \cdot 10^{-163}\right):\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{\left(mu + Vef\right) - Ec}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Vef}{KbT}}}\\
\end{array}
\end{array}
if NdChar < -9.5000000000000006e-139 or 3.6999999999999999e-163 < NdChar Initial program 100.0%
Simplified100.0%
Taylor expanded in NdChar around inf 71.0%
Taylor expanded in EDonor around 0 61.6%
if -9.5000000000000006e-139 < NdChar < 3.6999999999999999e-163Initial program 100.0%
Simplified100.0%
Taylor expanded in NdChar around 0 85.6%
Taylor expanded in Vef around inf 67.6%
Final simplification63.2%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (if (or (<= Vef -7e+226) (not (<= Vef 1.65e-8))) (/ NaChar (+ 1.0 (exp (/ Vef KbT)))) (/ NdChar (+ 1.0 (exp (/ EDonor KbT))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((Vef <= -7e+226) || !(Vef <= 1.65e-8)) {
tmp = NaChar / (1.0 + exp((Vef / KbT)));
} else {
tmp = NdChar / (1.0 + exp((EDonor / KbT)));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if ((vef <= (-7d+226)) .or. (.not. (vef <= 1.65d-8))) then
tmp = nachar / (1.0d0 + exp((vef / kbt)))
else
tmp = ndchar / (1.0d0 + exp((edonor / kbt)))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((Vef <= -7e+226) || !(Vef <= 1.65e-8)) {
tmp = NaChar / (1.0 + Math.exp((Vef / KbT)));
} else {
tmp = NdChar / (1.0 + Math.exp((EDonor / KbT)));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if (Vef <= -7e+226) or not (Vef <= 1.65e-8): tmp = NaChar / (1.0 + math.exp((Vef / KbT))) else: tmp = NdChar / (1.0 + math.exp((EDonor / KbT))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if ((Vef <= -7e+226) || !(Vef <= 1.65e-8)) tmp = Float64(NaChar / Float64(1.0 + exp(Float64(Vef / KbT)))); else tmp = Float64(NdChar / Float64(1.0 + exp(Float64(EDonor / KbT)))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if ((Vef <= -7e+226) || ~((Vef <= 1.65e-8))) tmp = NaChar / (1.0 + exp((Vef / KbT))); else tmp = NdChar / (1.0 + exp((EDonor / KbT))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[Or[LessEqual[Vef, -7e+226], N[Not[LessEqual[Vef, 1.65e-8]], $MachinePrecision]], N[(NaChar / N[(1.0 + N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(NdChar / N[(1.0 + N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;Vef \leq -7 \cdot 10^{+226} \lor \neg \left(Vef \leq 1.65 \cdot 10^{-8}\right):\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Vef}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{EDonor}{KbT}}}\\
\end{array}
\end{array}
if Vef < -6.9999999999999996e226 or 1.64999999999999989e-8 < Vef Initial program 100.0%
Simplified100.0%
Taylor expanded in NdChar around 0 72.9%
Taylor expanded in Vef around inf 67.9%
if -6.9999999999999996e226 < Vef < 1.64999999999999989e-8Initial program 100.0%
Simplified100.0%
Taylor expanded in NdChar around inf 67.2%
Taylor expanded in EDonor around inf 47.4%
Final simplification53.4%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (if (or (<= KbT -1.32e+95) (not (<= KbT 1.22e+91))) (* 0.5 (+ NdChar NaChar)) (/ NaChar (+ 1.0 (exp (/ EAccept KbT))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((KbT <= -1.32e+95) || !(KbT <= 1.22e+91)) {
tmp = 0.5 * (NdChar + NaChar);
} else {
tmp = NaChar / (1.0 + exp((EAccept / KbT)));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if ((kbt <= (-1.32d+95)) .or. (.not. (kbt <= 1.22d+91))) then
tmp = 0.5d0 * (ndchar + nachar)
else
tmp = nachar / (1.0d0 + exp((eaccept / kbt)))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((KbT <= -1.32e+95) || !(KbT <= 1.22e+91)) {
tmp = 0.5 * (NdChar + NaChar);
} else {
tmp = NaChar / (1.0 + Math.exp((EAccept / KbT)));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if (KbT <= -1.32e+95) or not (KbT <= 1.22e+91): tmp = 0.5 * (NdChar + NaChar) else: tmp = NaChar / (1.0 + math.exp((EAccept / KbT))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if ((KbT <= -1.32e+95) || !(KbT <= 1.22e+91)) tmp = Float64(0.5 * Float64(NdChar + NaChar)); else tmp = Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT)))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if ((KbT <= -1.32e+95) || ~((KbT <= 1.22e+91))) tmp = 0.5 * (NdChar + NaChar); else tmp = NaChar / (1.0 + exp((EAccept / KbT))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[Or[LessEqual[KbT, -1.32e+95], N[Not[LessEqual[KbT, 1.22e+91]], $MachinePrecision]], N[(0.5 * N[(NdChar + NaChar), $MachinePrecision]), $MachinePrecision], N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;KbT \leq -1.32 \cdot 10^{+95} \lor \neg \left(KbT \leq 1.22 \cdot 10^{+91}\right):\\
\;\;\;\;0.5 \cdot \left(NdChar + NaChar\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}}\\
\end{array}
\end{array}
if KbT < -1.32e95 or 1.2199999999999999e91 < KbT Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 61.8%
distribute-lft-out61.8%
Simplified61.8%
if -1.32e95 < KbT < 1.2199999999999999e91Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 68.2%
Taylor expanded in NdChar around 0 32.1%
Final simplification41.3%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (<= EAccept 1.92e-221)
(/ NaChar (+ 1.0 (exp (/ Ev KbT))))
(if (<= EAccept 8.7e+133)
(/ NaChar (+ 1.0 (exp (/ Vef KbT))))
(/ NaChar (+ 1.0 (exp (/ EAccept KbT)))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (EAccept <= 1.92e-221) {
tmp = NaChar / (1.0 + exp((Ev / KbT)));
} else if (EAccept <= 8.7e+133) {
tmp = NaChar / (1.0 + exp((Vef / KbT)));
} else {
tmp = NaChar / (1.0 + exp((EAccept / KbT)));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if (eaccept <= 1.92d-221) then
tmp = nachar / (1.0d0 + exp((ev / kbt)))
else if (eaccept <= 8.7d+133) then
tmp = nachar / (1.0d0 + exp((vef / kbt)))
else
tmp = nachar / (1.0d0 + exp((eaccept / kbt)))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (EAccept <= 1.92e-221) {
tmp = NaChar / (1.0 + Math.exp((Ev / KbT)));
} else if (EAccept <= 8.7e+133) {
tmp = NaChar / (1.0 + Math.exp((Vef / KbT)));
} else {
tmp = NaChar / (1.0 + Math.exp((EAccept / KbT)));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if EAccept <= 1.92e-221: tmp = NaChar / (1.0 + math.exp((Ev / KbT))) elif EAccept <= 8.7e+133: tmp = NaChar / (1.0 + math.exp((Vef / KbT))) else: tmp = NaChar / (1.0 + math.exp((EAccept / KbT))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (EAccept <= 1.92e-221) tmp = Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT)))); elseif (EAccept <= 8.7e+133) tmp = Float64(NaChar / Float64(1.0 + exp(Float64(Vef / KbT)))); else tmp = Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT)))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (EAccept <= 1.92e-221) tmp = NaChar / (1.0 + exp((Ev / KbT))); elseif (EAccept <= 8.7e+133) tmp = NaChar / (1.0 + exp((Vef / KbT))); else tmp = NaChar / (1.0 + exp((EAccept / KbT))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[EAccept, 1.92e-221], N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[EAccept, 8.7e+133], N[(NaChar / N[(1.0 + N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;EAccept \leq 1.92 \cdot 10^{-221}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Ev}{KbT}}}\\
\mathbf{elif}\;EAccept \leq 8.7 \cdot 10^{+133}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Vef}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}}\\
\end{array}
\end{array}
if EAccept < 1.91999999999999994e-221Initial program 100.0%
Simplified100.0%
Taylor expanded in NdChar around 0 55.8%
Taylor expanded in Ev around inf 34.8%
if 1.91999999999999994e-221 < EAccept < 8.7000000000000003e133Initial program 100.0%
Simplified100.0%
Taylor expanded in NdChar around 0 53.3%
Taylor expanded in Vef around inf 41.3%
if 8.7000000000000003e133 < EAccept Initial program 100.0%
Simplified100.0%
Taylor expanded in EAccept around inf 91.5%
Taylor expanded in NdChar around 0 51.2%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (<= Vef -2.3e+221)
(/
NaChar
(- (+ 2.0 (+ (/ EAccept KbT) (+ (/ Ev KbT) (/ Vef KbT)))) (/ mu KbT)))
(if (<= Vef 2.2e+144)
(* 0.5 (+ NdChar NaChar))
(/ NdChar (+ 2.0 (+ (/ Vef KbT) (/ (- mu Ec) KbT)))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (Vef <= -2.3e+221) {
tmp = NaChar / ((2.0 + ((EAccept / KbT) + ((Ev / KbT) + (Vef / KbT)))) - (mu / KbT));
} else if (Vef <= 2.2e+144) {
tmp = 0.5 * (NdChar + NaChar);
} else {
tmp = NdChar / (2.0 + ((Vef / KbT) + ((mu - Ec) / KbT)));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if (vef <= (-2.3d+221)) then
tmp = nachar / ((2.0d0 + ((eaccept / kbt) + ((ev / kbt) + (vef / kbt)))) - (mu / kbt))
else if (vef <= 2.2d+144) then
tmp = 0.5d0 * (ndchar + nachar)
else
tmp = ndchar / (2.0d0 + ((vef / kbt) + ((mu - ec) / kbt)))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (Vef <= -2.3e+221) {
tmp = NaChar / ((2.0 + ((EAccept / KbT) + ((Ev / KbT) + (Vef / KbT)))) - (mu / KbT));
} else if (Vef <= 2.2e+144) {
tmp = 0.5 * (NdChar + NaChar);
} else {
tmp = NdChar / (2.0 + ((Vef / KbT) + ((mu - Ec) / KbT)));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if Vef <= -2.3e+221: tmp = NaChar / ((2.0 + ((EAccept / KbT) + ((Ev / KbT) + (Vef / KbT)))) - (mu / KbT)) elif Vef <= 2.2e+144: tmp = 0.5 * (NdChar + NaChar) else: tmp = NdChar / (2.0 + ((Vef / KbT) + ((mu - Ec) / KbT))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (Vef <= -2.3e+221) tmp = Float64(NaChar / Float64(Float64(2.0 + Float64(Float64(EAccept / KbT) + Float64(Float64(Ev / KbT) + Float64(Vef / KbT)))) - Float64(mu / KbT))); elseif (Vef <= 2.2e+144) tmp = Float64(0.5 * Float64(NdChar + NaChar)); else tmp = Float64(NdChar / Float64(2.0 + Float64(Float64(Vef / KbT) + Float64(Float64(mu - Ec) / KbT)))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (Vef <= -2.3e+221) tmp = NaChar / ((2.0 + ((EAccept / KbT) + ((Ev / KbT) + (Vef / KbT)))) - (mu / KbT)); elseif (Vef <= 2.2e+144) tmp = 0.5 * (NdChar + NaChar); else tmp = NdChar / (2.0 + ((Vef / KbT) + ((mu - Ec) / KbT))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[Vef, -2.3e+221], N[(NaChar / N[(N[(2.0 + N[(N[(EAccept / KbT), $MachinePrecision] + N[(N[(Ev / KbT), $MachinePrecision] + N[(Vef / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(mu / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[Vef, 2.2e+144], N[(0.5 * N[(NdChar + NaChar), $MachinePrecision]), $MachinePrecision], N[(NdChar / N[(2.0 + N[(N[(Vef / KbT), $MachinePrecision] + N[(N[(mu - Ec), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;Vef \leq -2.3 \cdot 10^{+221}:\\
\;\;\;\;\frac{NaChar}{\left(2 + \left(\frac{EAccept}{KbT} + \left(\frac{Ev}{KbT} + \frac{Vef}{KbT}\right)\right)\right) - \frac{mu}{KbT}}\\
\mathbf{elif}\;Vef \leq 2.2 \cdot 10^{+144}:\\
\;\;\;\;0.5 \cdot \left(NdChar + NaChar\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{2 + \left(\frac{Vef}{KbT} + \frac{mu - Ec}{KbT}\right)}\\
\end{array}
\end{array}
if Vef < -2.29999999999999987e221Initial program 100.0%
Simplified100.0%
Taylor expanded in NdChar around 0 81.7%
Taylor expanded in KbT around inf 40.0%
if -2.29999999999999987e221 < Vef < 2.19999999999999988e144Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 32.4%
distribute-lft-out32.4%
Simplified32.4%
if 2.19999999999999988e144 < Vef Initial program 100.0%
Simplified100.0%
Taylor expanded in NdChar around inf 64.4%
Taylor expanded in EDonor around 0 64.4%
Taylor expanded in KbT around inf 25.9%
associate--l+25.9%
associate--l+25.9%
div-sub25.9%
Simplified25.9%
Final simplification32.2%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (if (or (<= Vef -6e+208) (not (<= Vef 3.1e+145))) (/ NdChar (+ 2.0 (+ (/ Vef KbT) (/ (- mu Ec) KbT)))) (* 0.5 (+ NdChar NaChar))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((Vef <= -6e+208) || !(Vef <= 3.1e+145)) {
tmp = NdChar / (2.0 + ((Vef / KbT) + ((mu - Ec) / KbT)));
} else {
tmp = 0.5 * (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) :: tmp
if ((vef <= (-6d+208)) .or. (.not. (vef <= 3.1d+145))) then
tmp = ndchar / (2.0d0 + ((vef / kbt) + ((mu - ec) / kbt)))
else
tmp = 0.5d0 * (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 tmp;
if ((Vef <= -6e+208) || !(Vef <= 3.1e+145)) {
tmp = NdChar / (2.0 + ((Vef / KbT) + ((mu - Ec) / KbT)));
} else {
tmp = 0.5 * (NdChar + NaChar);
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if (Vef <= -6e+208) or not (Vef <= 3.1e+145): tmp = NdChar / (2.0 + ((Vef / KbT) + ((mu - Ec) / KbT))) else: tmp = 0.5 * (NdChar + NaChar) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if ((Vef <= -6e+208) || !(Vef <= 3.1e+145)) tmp = Float64(NdChar / Float64(2.0 + Float64(Float64(Vef / KbT) + Float64(Float64(mu - Ec) / KbT)))); else tmp = Float64(0.5 * Float64(NdChar + NaChar)); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if ((Vef <= -6e+208) || ~((Vef <= 3.1e+145))) tmp = NdChar / (2.0 + ((Vef / KbT) + ((mu - Ec) / KbT))); else tmp = 0.5 * (NdChar + NaChar); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[Or[LessEqual[Vef, -6e+208], N[Not[LessEqual[Vef, 3.1e+145]], $MachinePrecision]], N[(NdChar / N[(2.0 + N[(N[(Vef / KbT), $MachinePrecision] + N[(N[(mu - Ec), $MachinePrecision] / KbT), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(0.5 * N[(NdChar + NaChar), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;Vef \leq -6 \cdot 10^{+208} \lor \neg \left(Vef \leq 3.1 \cdot 10^{+145}\right):\\
\;\;\;\;\frac{NdChar}{2 + \left(\frac{Vef}{KbT} + \frac{mu - Ec}{KbT}\right)}\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \left(NdChar + NaChar\right)\\
\end{array}
\end{array}
if Vef < -5.99999999999999989e208 or 3.09999999999999988e145 < Vef Initial program 100.0%
Simplified100.0%
Taylor expanded in NdChar around inf 67.6%
Taylor expanded in EDonor around 0 67.6%
Taylor expanded in KbT around inf 28.6%
associate--l+28.6%
associate--l+28.6%
div-sub32.0%
Simplified32.0%
if -5.99999999999999989e208 < Vef < 3.09999999999999988e145Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 32.2%
distribute-lft-out32.2%
Simplified32.2%
Final simplification32.1%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (if (or (<= NdChar -8e+15) (not (<= NdChar 1.95e+96))) (* NdChar 0.5) (/ NaChar 2.0)))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if ((NdChar <= -8e+15) || !(NdChar <= 1.95e+96)) {
tmp = NdChar * 0.5;
} else {
tmp = NaChar / 2.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 ((ndchar <= (-8d+15)) .or. (.not. (ndchar <= 1.95d+96))) then
tmp = ndchar * 0.5d0
else
tmp = nachar / 2.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 ((NdChar <= -8e+15) || !(NdChar <= 1.95e+96)) {
tmp = NdChar * 0.5;
} else {
tmp = NaChar / 2.0;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if (NdChar <= -8e+15) or not (NdChar <= 1.95e+96): tmp = NdChar * 0.5 else: tmp = NaChar / 2.0 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if ((NdChar <= -8e+15) || !(NdChar <= 1.95e+96)) tmp = Float64(NdChar * 0.5); else tmp = Float64(NaChar / 2.0); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if ((NdChar <= -8e+15) || ~((NdChar <= 1.95e+96))) tmp = NdChar * 0.5; else tmp = NaChar / 2.0; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[Or[LessEqual[NdChar, -8e+15], N[Not[LessEqual[NdChar, 1.95e+96]], $MachinePrecision]], N[(NdChar * 0.5), $MachinePrecision], N[(NaChar / 2.0), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NdChar \leq -8 \cdot 10^{+15} \lor \neg \left(NdChar \leq 1.95 \cdot 10^{+96}\right):\\
\;\;\;\;NdChar \cdot 0.5\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{2}\\
\end{array}
\end{array}
if NdChar < -8e15 or 1.95e96 < NdChar Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 33.7%
distribute-lft-out33.7%
Simplified33.7%
Taylor expanded in NaChar around 0 32.4%
*-commutative32.4%
Simplified32.4%
if -8e15 < NdChar < 1.95e96Initial program 100.0%
Simplified100.0%
Taylor expanded in NdChar around 0 70.1%
Taylor expanded in KbT around inf 21.5%
Final simplification26.1%
(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%
Simplified100.0%
Taylor expanded in KbT around inf 28.6%
distribute-lft-out28.6%
Simplified28.6%
Final simplification28.6%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (* NdChar 0.5))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return 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 = 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 NdChar * 0.5;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return NdChar * 0.5
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(NdChar * 0.5) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = NdChar * 0.5; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(NdChar * 0.5), $MachinePrecision]
\begin{array}{l}
\\
NdChar \cdot 0.5
\end{array}
Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 28.6%
distribute-lft-out28.6%
Simplified28.6%
Taylor expanded in NaChar around 0 19.7%
*-commutative19.7%
Simplified19.7%
herbie shell --seed 2024172
(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))))))