
(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 (log1p (expm1 (/ 1.0 (+ 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 * log1p(expm1((1.0 / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT))))))) + (NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT))));
}
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.log1p(Math.expm1((1.0 / (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 * math.log1p(math.expm1((1.0 / (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 * log1p(expm1(Float64(1.0 / 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
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(N[(NdChar * N[Log[1 + N[(Exp[N[(1.0 / N[(1.0 + N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]] - 1), $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}
\\
NdChar \cdot \mathsf{log1p}\left(\mathsf{expm1}\left(\frac{1}{1 + e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}}\right)\right) + \frac{NaChar}{1 + e^{\frac{Vef + \left(Ev + \left(EAccept - mu\right)\right)}{KbT}}}
\end{array}
Initial program 100.0%
Simplified100.0%
div-inv100.0%
Applied egg-rr100.0%
log1p-expm1-u100.0%
Applied egg-rr100.0%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (or (<= NaChar -1400000000000.0) (not (<= NaChar 4.2e-7)))
(+
(/ NaChar (+ 1.0 (exp (/ (+ Vef (+ Ev (- EAccept mu))) KbT))))
(/ NdChar (+ 1.0 (exp (/ Vef KbT)))))
(/ NdChar (+ 1.0 (exp (/ (- (+ EDonor (+ 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 ((NaChar <= -1400000000000.0) || !(NaChar <= 4.2e-7)) {
tmp = (NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT)))) + (NdChar / (1.0 + exp((Vef / KbT))));
} else {
tmp = NdChar / (1.0 + exp((((EDonor + (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 ((nachar <= (-1400000000000.0d0)) .or. (.not. (nachar <= 4.2d-7))) then
tmp = (nachar / (1.0d0 + exp(((vef + (ev + (eaccept - mu))) / kbt)))) + (ndchar / (1.0d0 + exp((vef / kbt))))
else
tmp = ndchar / (1.0d0 + exp((((edonor + (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 ((NaChar <= -1400000000000.0) || !(NaChar <= 4.2e-7)) {
tmp = (NaChar / (1.0 + Math.exp(((Vef + (Ev + (EAccept - mu))) / KbT)))) + (NdChar / (1.0 + Math.exp((Vef / KbT))));
} else {
tmp = NdChar / (1.0 + Math.exp((((EDonor + (mu + Vef)) - Ec) / KbT)));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if (NaChar <= -1400000000000.0) or not (NaChar <= 4.2e-7): tmp = (NaChar / (1.0 + math.exp(((Vef + (Ev + (EAccept - mu))) / KbT)))) + (NdChar / (1.0 + math.exp((Vef / KbT)))) else: tmp = NdChar / (1.0 + math.exp((((EDonor + (mu + Vef)) - Ec) / KbT))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if ((NaChar <= -1400000000000.0) || !(NaChar <= 4.2e-7)) tmp = Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Ev + Float64(EAccept - mu))) / KbT)))) + Float64(NdChar / Float64(1.0 + exp(Float64(Vef / KbT))))); else tmp = Float64(NdChar / Float64(1.0 + exp(Float64(Float64(Float64(EDonor + 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 ((NaChar <= -1400000000000.0) || ~((NaChar <= 4.2e-7))) tmp = (NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT)))) + (NdChar / (1.0 + exp((Vef / KbT)))); else tmp = NdChar / (1.0 + exp((((EDonor + (mu + Vef)) - Ec) / KbT))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[Or[LessEqual[NaChar, -1400000000000.0], N[Not[LessEqual[NaChar, 4.2e-7]], $MachinePrecision]], N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(Ev + N[(EAccept - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(1.0 + N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(NdChar / N[(1.0 + N[Exp[N[(N[(N[(EDonor + N[(mu + Vef), $MachinePrecision]), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NaChar \leq -1400000000000 \lor \neg \left(NaChar \leq 4.2 \cdot 10^{-7}\right):\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Vef + \left(Ev + \left(EAccept - mu\right)\right)}{KbT}}} + \frac{NdChar}{1 + e^{\frac{Vef}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{\left(EDonor + \left(mu + Vef\right)\right) - Ec}{KbT}}}\\
\end{array}
\end{array}
if NaChar < -1.4e12 or 4.2e-7 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in Vef around inf 77.4%
if -1.4e12 < NaChar < 4.2e-7Initial program 100.0%
Simplified100.0%
Taylor expanded in NdChar around inf 75.3%
Final simplification76.3%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (+ (/ NaChar (+ 1.0 (exp (/ (+ Vef (+ Ev (- EAccept mu))) KbT)))) (/ NdChar (+ 1.0 (exp (/ (+ EDonor (+ mu (- Vef Ec))) KbT))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT)))) + (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT))));
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
code = (nachar / (1.0d0 + exp(((vef + (ev + (eaccept - mu))) / kbt)))) + (ndchar / (1.0d0 + exp(((edonor + (mu + (vef - ec))) / kbt))))
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NaChar / (1.0 + Math.exp(((Vef + (Ev + (EAccept - mu))) / KbT)))) + (NdChar / (1.0 + Math.exp(((EDonor + (mu + (Vef - Ec))) / KbT))));
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return (NaChar / (1.0 + math.exp(((Vef + (Ev + (EAccept - mu))) / KbT)))) + (NdChar / (1.0 + math.exp(((EDonor + (mu + (Vef - Ec))) / KbT))))
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Vef + Float64(Ev + Float64(EAccept - mu))) / KbT)))) + Float64(NdChar / Float64(1.0 + exp(Float64(Float64(EDonor + Float64(mu + Float64(Vef - Ec))) / KbT))))) end
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = (NaChar / (1.0 + exp(((Vef + (Ev + (EAccept - mu))) / KbT)))) + (NdChar / (1.0 + exp(((EDonor + (mu + (Vef - Ec))) / KbT)))); end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(N[(NaChar / N[(1.0 + N[Exp[N[(N[(Vef + N[(Ev + N[(EAccept - mu), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NdChar / N[(1.0 + N[Exp[N[(N[(EDonor + N[(mu + N[(Vef - Ec), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{NaChar}{1 + e^{\frac{Vef + \left(Ev + \left(EAccept - mu\right)\right)}{KbT}}} + \frac{NdChar}{1 + e^{\frac{EDonor + \left(mu + \left(Vef - Ec\right)\right)}{KbT}}}
\end{array}
Initial program 100.0%
Simplified100.0%
Final simplification100.0%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (if (or (<= NaChar -4.9e+17) (not (<= NaChar 2.6e-7))) (/ NaChar (+ 1.0 (exp (/ (- (+ EAccept (+ Vef Ev)) mu) KbT)))) (/ NdChar (+ 1.0 (exp (/ (- (+ EDonor (+ 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 ((NaChar <= -4.9e+17) || !(NaChar <= 2.6e-7)) {
tmp = NaChar / (1.0 + exp((((EAccept + (Vef + Ev)) - mu) / KbT)));
} else {
tmp = NdChar / (1.0 + exp((((EDonor + (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 ((nachar <= (-4.9d+17)) .or. (.not. (nachar <= 2.6d-7))) then
tmp = nachar / (1.0d0 + exp((((eaccept + (vef + ev)) - mu) / kbt)))
else
tmp = ndchar / (1.0d0 + exp((((edonor + (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 ((NaChar <= -4.9e+17) || !(NaChar <= 2.6e-7)) {
tmp = NaChar / (1.0 + Math.exp((((EAccept + (Vef + Ev)) - mu) / KbT)));
} else {
tmp = NdChar / (1.0 + Math.exp((((EDonor + (mu + Vef)) - Ec) / KbT)));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if (NaChar <= -4.9e+17) or not (NaChar <= 2.6e-7): tmp = NaChar / (1.0 + math.exp((((EAccept + (Vef + Ev)) - mu) / KbT))) else: tmp = NdChar / (1.0 + math.exp((((EDonor + (mu + Vef)) - Ec) / KbT))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if ((NaChar <= -4.9e+17) || !(NaChar <= 2.6e-7)) 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(EDonor + 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 ((NaChar <= -4.9e+17) || ~((NaChar <= 2.6e-7))) tmp = NaChar / (1.0 + exp((((EAccept + (Vef + Ev)) - mu) / KbT))); else tmp = NdChar / (1.0 + exp((((EDonor + (mu + Vef)) - Ec) / KbT))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[Or[LessEqual[NaChar, -4.9e+17], N[Not[LessEqual[NaChar, 2.6e-7]], $MachinePrecision]], 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[(EDonor + N[(mu + Vef), $MachinePrecision]), $MachinePrecision] - Ec), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NaChar \leq -4.9 \cdot 10^{+17} \lor \neg \left(NaChar \leq 2.6 \cdot 10^{-7}\right):\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{\left(EAccept + \left(Vef + Ev\right)\right) - mu}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{\left(EDonor + \left(mu + Vef\right)\right) - Ec}{KbT}}}\\
\end{array}
\end{array}
if NaChar < -4.9e17 or 2.59999999999999999e-7 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in NdChar around 0 72.2%
if -4.9e17 < NaChar < 2.59999999999999999e-7Initial program 100.0%
Simplified100.0%
Taylor expanded in NdChar around inf 75.3%
Final simplification73.7%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (<= KbT -3.7e+140)
(+ (/ NdChar (+ 1.0 (exp (/ EDonor KbT)))) (* NaChar 0.5))
(if (<= KbT 3.6e+105)
(/ NaChar (+ 1.0 (exp (/ (- (+ EAccept (+ Vef Ev)) mu) KbT))))
(+ (* NaChar 0.5) (/ NdChar (+ 1.0 (exp (/ 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 <= -3.7e+140) {
tmp = (NdChar / (1.0 + exp((EDonor / KbT)))) + (NaChar * 0.5);
} else if (KbT <= 3.6e+105) {
tmp = NaChar / (1.0 + exp((((EAccept + (Vef + Ev)) - mu) / KbT)));
} else {
tmp = (NaChar * 0.5) + (NdChar / (1.0 + exp((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 <= (-3.7d+140)) then
tmp = (ndchar / (1.0d0 + exp((edonor / kbt)))) + (nachar * 0.5d0)
else if (kbt <= 3.6d+105) then
tmp = nachar / (1.0d0 + exp((((eaccept + (vef + ev)) - mu) / kbt)))
else
tmp = (nachar * 0.5d0) + (ndchar / (1.0d0 + exp((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 <= -3.7e+140) {
tmp = (NdChar / (1.0 + Math.exp((EDonor / KbT)))) + (NaChar * 0.5);
} else if (KbT <= 3.6e+105) {
tmp = NaChar / (1.0 + Math.exp((((EAccept + (Vef + Ev)) - mu) / KbT)));
} else {
tmp = (NaChar * 0.5) + (NdChar / (1.0 + Math.exp((Ec / -KbT))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if KbT <= -3.7e+140: tmp = (NdChar / (1.0 + math.exp((EDonor / KbT)))) + (NaChar * 0.5) elif KbT <= 3.6e+105: tmp = NaChar / (1.0 + math.exp((((EAccept + (Vef + Ev)) - mu) / KbT))) else: tmp = (NaChar * 0.5) + (NdChar / (1.0 + math.exp((Ec / -KbT)))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (KbT <= -3.7e+140) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(EDonor / KbT)))) + Float64(NaChar * 0.5)); elseif (KbT <= 3.6e+105) tmp = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(EAccept + Float64(Vef + Ev)) - mu) / KbT)))); else tmp = Float64(Float64(NaChar * 0.5) + Float64(NdChar / Float64(1.0 + exp(Float64(Ec / Float64(-KbT)))))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (KbT <= -3.7e+140) tmp = (NdChar / (1.0 + exp((EDonor / KbT)))) + (NaChar * 0.5); elseif (KbT <= 3.6e+105) tmp = NaChar / (1.0 + exp((((EAccept + (Vef + Ev)) - mu) / KbT))); else tmp = (NaChar * 0.5) + (NdChar / (1.0 + exp((Ec / -KbT)))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[KbT, -3.7e+140], N[(N[(NdChar / N[(1.0 + N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar * 0.5), $MachinePrecision]), $MachinePrecision], If[LessEqual[KbT, 3.6e+105], N[(NaChar / N[(1.0 + N[Exp[N[(N[(N[(EAccept + N[(Vef + Ev), $MachinePrecision]), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar * 0.5), $MachinePrecision] + N[(NdChar / N[(1.0 + N[Exp[N[(Ec / (-KbT)), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;KbT \leq -3.7 \cdot 10^{+140}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{EDonor}{KbT}}} + NaChar \cdot 0.5\\
\mathbf{elif}\;KbT \leq 3.6 \cdot 10^{+105}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{\left(EAccept + \left(Vef + Ev\right)\right) - mu}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;NaChar \cdot 0.5 + \frac{NdChar}{1 + e^{\frac{Ec}{-KbT}}}\\
\end{array}
\end{array}
if KbT < -3.70000000000000003e140Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 67.1%
*-commutative67.1%
Simplified67.1%
Taylor expanded in EDonor around inf 65.0%
if -3.70000000000000003e140 < KbT < 3.5999999999999999e105Initial program 100.0%
Simplified100.0%
Taylor expanded in NdChar around 0 62.6%
if 3.5999999999999999e105 < KbT Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 85.0%
*-commutative85.0%
Simplified85.0%
Taylor expanded in Ec around inf 77.2%
associate-*r/77.2%
mul-1-neg77.2%
Simplified77.2%
Final simplification64.9%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (<= NaChar -5.4e+84)
(/ NaChar (+ 1.0 (exp (/ Vef KbT))))
(if (<= NaChar 1.8e-74)
(/ NdChar (+ 1.0 (exp (/ EDonor KbT))))
(if (<= NaChar 4.7e+78)
(/ NaChar (+ 1.0 (exp (/ Ev KbT))))
(/ NaChar (+ 1.0 (exp (/ EAccept KbT))))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (NaChar <= -5.4e+84) {
tmp = NaChar / (1.0 + exp((Vef / KbT)));
} else if (NaChar <= 1.8e-74) {
tmp = NdChar / (1.0 + exp((EDonor / KbT)));
} else if (NaChar <= 4.7e+78) {
tmp = NaChar / (1.0 + exp((Ev / KbT)));
} else {
tmp = NaChar / (1.0 + exp((EAccept / KbT)));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if (nachar <= (-5.4d+84)) then
tmp = nachar / (1.0d0 + exp((vef / kbt)))
else if (nachar <= 1.8d-74) then
tmp = ndchar / (1.0d0 + exp((edonor / kbt)))
else if (nachar <= 4.7d+78) then
tmp = nachar / (1.0d0 + exp((ev / kbt)))
else
tmp = nachar / (1.0d0 + exp((eaccept / kbt)))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (NaChar <= -5.4e+84) {
tmp = NaChar / (1.0 + Math.exp((Vef / KbT)));
} else if (NaChar <= 1.8e-74) {
tmp = NdChar / (1.0 + Math.exp((EDonor / KbT)));
} else if (NaChar <= 4.7e+78) {
tmp = NaChar / (1.0 + Math.exp((Ev / KbT)));
} else {
tmp = NaChar / (1.0 + Math.exp((EAccept / KbT)));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if NaChar <= -5.4e+84: tmp = NaChar / (1.0 + math.exp((Vef / KbT))) elif NaChar <= 1.8e-74: tmp = NdChar / (1.0 + math.exp((EDonor / KbT))) elif NaChar <= 4.7e+78: tmp = NaChar / (1.0 + math.exp((Ev / KbT))) else: tmp = NaChar / (1.0 + math.exp((EAccept / KbT))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (NaChar <= -5.4e+84) tmp = Float64(NaChar / Float64(1.0 + exp(Float64(Vef / KbT)))); elseif (NaChar <= 1.8e-74) tmp = Float64(NdChar / Float64(1.0 + exp(Float64(EDonor / KbT)))); elseif (NaChar <= 4.7e+78) tmp = Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT)))); else tmp = Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT)))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (NaChar <= -5.4e+84) tmp = NaChar / (1.0 + exp((Vef / KbT))); elseif (NaChar <= 1.8e-74) tmp = NdChar / (1.0 + exp((EDonor / KbT))); elseif (NaChar <= 4.7e+78) tmp = NaChar / (1.0 + exp((Ev / KbT))); else tmp = NaChar / (1.0 + exp((EAccept / KbT))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[NaChar, -5.4e+84], N[(NaChar / N[(1.0 + N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 1.8e-74], N[(NdChar / N[(1.0 + N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[NaChar, 4.7e+78], N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NaChar \leq -5.4 \cdot 10^{+84}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Vef}{KbT}}}\\
\mathbf{elif}\;NaChar \leq 1.8 \cdot 10^{-74}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{EDonor}{KbT}}}\\
\mathbf{elif}\;NaChar \leq 4.7 \cdot 10^{+78}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Ev}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}}\\
\end{array}
\end{array}
if NaChar < -5.4e84Initial program 100.0%
Simplified100.0%
Taylor expanded in NdChar around 0 70.6%
Taylor expanded in Vef around inf 48.2%
if -5.4e84 < NaChar < 1.8000000000000001e-74Initial program 100.0%
Simplified100.0%
div-inv100.0%
Applied egg-rr100.0%
log1p-expm1-u100.0%
Applied egg-rr100.0%
Taylor expanded in EDonor around inf 65.9%
Taylor expanded in NdChar around inf 46.9%
if 1.8000000000000001e-74 < NaChar < 4.70000000000000006e78Initial program 100.0%
Simplified100.0%
Taylor expanded in NdChar around 0 73.5%
Taylor expanded in Ev around inf 51.7%
if 4.70000000000000006e78 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in NdChar around 0 72.5%
Taylor expanded in EAccept around inf 46.9%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (<= KbT -9.5e+134)
(+ (/ NdChar (+ 1.0 (exp (/ EDonor KbT)))) (* NaChar 0.5))
(if (<= KbT 3.3e+105)
(/ NaChar (+ 1.0 (exp (/ (- (+ Vef Ev) mu) KbT))))
(+ (* NaChar 0.5) (/ NdChar (+ 1.0 (exp (/ 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 <= -9.5e+134) {
tmp = (NdChar / (1.0 + exp((EDonor / KbT)))) + (NaChar * 0.5);
} else if (KbT <= 3.3e+105) {
tmp = NaChar / (1.0 + exp((((Vef + Ev) - mu) / KbT)));
} else {
tmp = (NaChar * 0.5) + (NdChar / (1.0 + exp((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 <= (-9.5d+134)) then
tmp = (ndchar / (1.0d0 + exp((edonor / kbt)))) + (nachar * 0.5d0)
else if (kbt <= 3.3d+105) then
tmp = nachar / (1.0d0 + exp((((vef + ev) - mu) / kbt)))
else
tmp = (nachar * 0.5d0) + (ndchar / (1.0d0 + exp((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 <= -9.5e+134) {
tmp = (NdChar / (1.0 + Math.exp((EDonor / KbT)))) + (NaChar * 0.5);
} else if (KbT <= 3.3e+105) {
tmp = NaChar / (1.0 + Math.exp((((Vef + Ev) - mu) / KbT)));
} else {
tmp = (NaChar * 0.5) + (NdChar / (1.0 + Math.exp((Ec / -KbT))));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if KbT <= -9.5e+134: tmp = (NdChar / (1.0 + math.exp((EDonor / KbT)))) + (NaChar * 0.5) elif KbT <= 3.3e+105: tmp = NaChar / (1.0 + math.exp((((Vef + Ev) - mu) / KbT))) else: tmp = (NaChar * 0.5) + (NdChar / (1.0 + math.exp((Ec / -KbT)))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (KbT <= -9.5e+134) tmp = Float64(Float64(NdChar / Float64(1.0 + exp(Float64(EDonor / KbT)))) + Float64(NaChar * 0.5)); elseif (KbT <= 3.3e+105) tmp = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(Vef + Ev) - mu) / KbT)))); else tmp = Float64(Float64(NaChar * 0.5) + Float64(NdChar / Float64(1.0 + exp(Float64(Ec / Float64(-KbT)))))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (KbT <= -9.5e+134) tmp = (NdChar / (1.0 + exp((EDonor / KbT)))) + (NaChar * 0.5); elseif (KbT <= 3.3e+105) tmp = NaChar / (1.0 + exp((((Vef + Ev) - mu) / KbT))); else tmp = (NaChar * 0.5) + (NdChar / (1.0 + exp((Ec / -KbT)))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[KbT, -9.5e+134], N[(N[(NdChar / N[(1.0 + N[Exp[N[(EDonor / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar * 0.5), $MachinePrecision]), $MachinePrecision], If[LessEqual[KbT, 3.3e+105], N[(NaChar / N[(1.0 + N[Exp[N[(N[(N[(Vef + Ev), $MachinePrecision] - mu), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(NaChar * 0.5), $MachinePrecision] + N[(NdChar / N[(1.0 + N[Exp[N[(Ec / (-KbT)), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;KbT \leq -9.5 \cdot 10^{+134}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{EDonor}{KbT}}} + NaChar \cdot 0.5\\
\mathbf{elif}\;KbT \leq 3.3 \cdot 10^{+105}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{\left(Vef + Ev\right) - mu}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;NaChar \cdot 0.5 + \frac{NdChar}{1 + e^{\frac{Ec}{-KbT}}}\\
\end{array}
\end{array}
if KbT < -9.5000000000000004e134Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 67.1%
*-commutative67.1%
Simplified67.1%
Taylor expanded in EDonor around inf 65.0%
if -9.5000000000000004e134 < KbT < 3.29999999999999997e105Initial program 100.0%
Simplified100.0%
Taylor expanded in NdChar around 0 62.6%
Taylor expanded in EAccept around 0 55.9%
if 3.29999999999999997e105 < KbT Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 85.0%
*-commutative85.0%
Simplified85.0%
Taylor expanded in Ec around inf 77.2%
associate-*r/77.2%
mul-1-neg77.2%
Simplified77.2%
Final simplification60.1%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (if (or (<= NaChar -2.05e-116) (not (<= NaChar 1.05e-156))) (/ NaChar (+ 1.0 (exp (/ (- (+ Vef Ev) mu) 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 ((NaChar <= -2.05e-116) || !(NaChar <= 1.05e-156)) {
tmp = NaChar / (1.0 + exp((((Vef + Ev) - mu) / 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 ((nachar <= (-2.05d-116)) .or. (.not. (nachar <= 1.05d-156))) then
tmp = nachar / (1.0d0 + exp((((vef + ev) - mu) / 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 ((NaChar <= -2.05e-116) || !(NaChar <= 1.05e-156)) {
tmp = NaChar / (1.0 + Math.exp((((Vef + Ev) - mu) / 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 (NaChar <= -2.05e-116) or not (NaChar <= 1.05e-156): tmp = NaChar / (1.0 + math.exp((((Vef + Ev) - mu) / 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 ((NaChar <= -2.05e-116) || !(NaChar <= 1.05e-156)) tmp = Float64(NaChar / Float64(1.0 + exp(Float64(Float64(Float64(Vef + Ev) - mu) / 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 ((NaChar <= -2.05e-116) || ~((NaChar <= 1.05e-156))) tmp = NaChar / (1.0 + exp((((Vef + Ev) - mu) / 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[NaChar, -2.05e-116], N[Not[LessEqual[NaChar, 1.05e-156]], $MachinePrecision]], N[(NaChar / N[(1.0 + N[Exp[N[(N[(N[(Vef + Ev), $MachinePrecision] - mu), $MachinePrecision] / 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}\;NaChar \leq -2.05 \cdot 10^{-116} \lor \neg \left(NaChar \leq 1.05 \cdot 10^{-156}\right):\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{\left(Vef + Ev\right) - mu}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{NdChar}{1 + e^{\frac{EDonor}{KbT}}}\\
\end{array}
\end{array}
if NaChar < -2.0499999999999999e-116 or 1.05000000000000006e-156 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in NdChar around 0 68.0%
Taylor expanded in EAccept around 0 62.0%
if -2.0499999999999999e-116 < NaChar < 1.05000000000000006e-156Initial program 100.0%
Simplified100.0%
div-inv100.0%
Applied egg-rr100.0%
log1p-expm1-u100.0%
Applied egg-rr100.0%
Taylor expanded in EDonor around inf 65.1%
Taylor expanded in NdChar around inf 50.9%
Final simplification59.1%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (+ 1.0 (exp (/ Vef KbT)))))
(if (<= NaChar -2.15e+92)
(/ NaChar t_0)
(if (<= NaChar 3.4e-19)
(/ NdChar t_0)
(/ NaChar (+ 1.0 (exp (/ mu (- 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 (NaChar <= -2.15e+92) {
tmp = NaChar / t_0;
} else if (NaChar <= 3.4e-19) {
tmp = NdChar / t_0;
} else {
tmp = NaChar / (1.0 + exp((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) :: t_0
real(8) :: tmp
t_0 = 1.0d0 + exp((vef / kbt))
if (nachar <= (-2.15d+92)) then
tmp = nachar / t_0
else if (nachar <= 3.4d-19) then
tmp = ndchar / t_0
else
tmp = nachar / (1.0d0 + exp((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 t_0 = 1.0 + Math.exp((Vef / KbT));
double tmp;
if (NaChar <= -2.15e+92) {
tmp = NaChar / t_0;
} else if (NaChar <= 3.4e-19) {
tmp = NdChar / t_0;
} else {
tmp = NaChar / (1.0 + Math.exp((mu / -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 NaChar <= -2.15e+92: tmp = NaChar / t_0 elif NaChar <= 3.4e-19: tmp = NdChar / t_0 else: tmp = NaChar / (1.0 + math.exp((mu / -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 (NaChar <= -2.15e+92) tmp = Float64(NaChar / t_0); elseif (NaChar <= 3.4e-19) tmp = Float64(NdChar / t_0); else tmp = Float64(NaChar / Float64(1.0 + exp(Float64(mu / Float64(-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 (NaChar <= -2.15e+92) tmp = NaChar / t_0; elseif (NaChar <= 3.4e-19) tmp = NdChar / t_0; else tmp = NaChar / (1.0 + exp((mu / -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[NaChar, -2.15e+92], N[(NaChar / t$95$0), $MachinePrecision], If[LessEqual[NaChar, 3.4e-19], N[(NdChar / t$95$0), $MachinePrecision], N[(NaChar / N[(1.0 + N[Exp[N[(mu / (-KbT)), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := 1 + e^{\frac{Vef}{KbT}}\\
\mathbf{if}\;NaChar \leq -2.15 \cdot 10^{+92}:\\
\;\;\;\;\frac{NaChar}{t\_0}\\
\mathbf{elif}\;NaChar \leq 3.4 \cdot 10^{-19}:\\
\;\;\;\;\frac{NdChar}{t\_0}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{mu}{-KbT}}}\\
\end{array}
\end{array}
if NaChar < -2.1499999999999999e92Initial program 100.0%
Simplified100.0%
Taylor expanded in NdChar around 0 73.3%
Taylor expanded in Vef around inf 50.0%
if -2.1499999999999999e92 < NaChar < 3.4000000000000002e-19Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 59.5%
*-commutative59.5%
Simplified59.5%
Taylor expanded in Vef around inf 39.7%
Taylor expanded in NdChar around inf 48.0%
if 3.4000000000000002e-19 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in NdChar around 0 73.3%
Taylor expanded in mu around inf 52.3%
associate-*r/52.3%
mul-1-neg52.3%
Simplified52.3%
Final simplification49.6%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (if (or (<= KbT -9.8e+138) (not (<= KbT 3.4e+102))) (* 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 <= -9.8e+138) || !(KbT <= 3.4e+102)) {
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 <= (-9.8d+138)) .or. (.not. (kbt <= 3.4d+102))) 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 <= -9.8e+138) || !(KbT <= 3.4e+102)) {
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 <= -9.8e+138) or not (KbT <= 3.4e+102): 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 <= -9.8e+138) || !(KbT <= 3.4e+102)) 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 <= -9.8e+138) || ~((KbT <= 3.4e+102))) 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, -9.8e+138], N[Not[LessEqual[KbT, 3.4e+102]], $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 -9.8 \cdot 10^{+138} \lor \neg \left(KbT \leq 3.4 \cdot 10^{+102}\right):\\
\;\;\;\;0.5 \cdot \left(NdChar + NaChar\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}}\\
\end{array}
\end{array}
if KbT < -9.79999999999999966e138 or 3.4e102 < KbT Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 59.3%
distribute-lft-out59.3%
Simplified59.3%
if -9.79999999999999966e138 < KbT < 3.4e102Initial program 100.0%
Simplified100.0%
Taylor expanded in NdChar around 0 62.2%
Taylor expanded in EAccept around inf 32.4%
Final simplification40.3%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(let* ((t_0 (+ 1.0 (exp (/ Vef KbT)))))
(if (<= NaChar -1.4e+92)
(/ NaChar t_0)
(if (<= NaChar 1.46e-7)
(/ NdChar 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 = 1.0 + exp((Vef / KbT));
double tmp;
if (NaChar <= -1.4e+92) {
tmp = NaChar / t_0;
} else if (NaChar <= 1.46e-7) {
tmp = NdChar / t_0;
} 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) :: t_0
real(8) :: tmp
t_0 = 1.0d0 + exp((vef / kbt))
if (nachar <= (-1.4d+92)) then
tmp = nachar / t_0
else if (nachar <= 1.46d-7) then
tmp = ndchar / t_0
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 t_0 = 1.0 + Math.exp((Vef / KbT));
double tmp;
if (NaChar <= -1.4e+92) {
tmp = NaChar / t_0;
} else if (NaChar <= 1.46e-7) {
tmp = NdChar / t_0;
} else {
tmp = NaChar / (1.0 + Math.exp((EAccept / 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 NaChar <= -1.4e+92: tmp = NaChar / t_0 elif NaChar <= 1.46e-7: tmp = NdChar / t_0 else: tmp = NaChar / (1.0 + math.exp((EAccept / 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 (NaChar <= -1.4e+92) tmp = Float64(NaChar / t_0); elseif (NaChar <= 1.46e-7) tmp = Float64(NdChar / t_0); 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) t_0 = 1.0 + exp((Vef / KbT)); tmp = 0.0; if (NaChar <= -1.4e+92) tmp = NaChar / t_0; elseif (NaChar <= 1.46e-7) tmp = NdChar / t_0; else tmp = 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[(1.0 + N[Exp[N[(Vef / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]}, If[LessEqual[NaChar, -1.4e+92], N[(NaChar / t$95$0), $MachinePrecision], If[LessEqual[NaChar, 1.46e-7], N[(NdChar / t$95$0), $MachinePrecision], N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := 1 + e^{\frac{Vef}{KbT}}\\
\mathbf{if}\;NaChar \leq -1.4 \cdot 10^{+92}:\\
\;\;\;\;\frac{NaChar}{t\_0}\\
\mathbf{elif}\;NaChar \leq 1.46 \cdot 10^{-7}:\\
\;\;\;\;\frac{NdChar}{t\_0}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}}\\
\end{array}
\end{array}
if NaChar < -1.4e92Initial program 100.0%
Simplified100.0%
Taylor expanded in NdChar around 0 73.3%
Taylor expanded in Vef around inf 50.0%
if -1.4e92 < NaChar < 1.4600000000000001e-7Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 58.3%
*-commutative58.3%
Simplified58.3%
Taylor expanded in Vef around inf 38.5%
Taylor expanded in NdChar around inf 47.2%
if 1.4600000000000001e-7 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in NdChar around 0 74.2%
Taylor expanded in EAccept around inf 49.6%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept)
:precision binary64
(if (<= EAccept 1.35e-250)
(/ NaChar (+ 1.0 (exp (/ Ev KbT))))
(if (<= EAccept 7.2e+58)
(/ 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.35e-250) {
tmp = NaChar / (1.0 + exp((Ev / KbT)));
} else if (EAccept <= 7.2e+58) {
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.35d-250) then
tmp = nachar / (1.0d0 + exp((ev / kbt)))
else if (eaccept <= 7.2d+58) 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.35e-250) {
tmp = NaChar / (1.0 + Math.exp((Ev / KbT)));
} else if (EAccept <= 7.2e+58) {
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.35e-250: tmp = NaChar / (1.0 + math.exp((Ev / KbT))) elif EAccept <= 7.2e+58: 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.35e-250) tmp = Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT)))); elseif (EAccept <= 7.2e+58) 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.35e-250) tmp = NaChar / (1.0 + exp((Ev / KbT))); elseif (EAccept <= 7.2e+58) 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.35e-250], N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[EAccept, 7.2e+58], 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.35 \cdot 10^{-250}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Ev}{KbT}}}\\
\mathbf{elif}\;EAccept \leq 7.2 \cdot 10^{+58}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Vef}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}}\\
\end{array}
\end{array}
if EAccept < 1.35000000000000001e-250Initial program 100.0%
Simplified100.0%
Taylor expanded in NdChar around 0 58.6%
Taylor expanded in Ev around inf 37.5%
if 1.35000000000000001e-250 < EAccept < 7.19999999999999993e58Initial program 100.0%
Simplified100.0%
Taylor expanded in NdChar around 0 62.1%
Taylor expanded in Vef around inf 47.1%
if 7.19999999999999993e58 < EAccept Initial program 100.0%
Simplified100.0%
Taylor expanded in NdChar around 0 50.7%
Taylor expanded in EAccept around inf 34.6%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (if (<= Ev -4.6e+22) (/ NaChar (+ 1.0 (exp (/ Ev KbT)))) (/ NaChar (+ 1.0 (exp (/ EAccept KbT))))))
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (Ev <= -4.6e+22) {
tmp = NaChar / (1.0 + exp((Ev / KbT)));
} else {
tmp = NaChar / (1.0 + exp((EAccept / KbT)));
}
return tmp;
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
real(8) :: tmp
if (ev <= (-4.6d+22)) then
tmp = nachar / (1.0d0 + exp((ev / kbt)))
else
tmp = nachar / (1.0d0 + exp((eaccept / kbt)))
end if
code = tmp
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
double tmp;
if (Ev <= -4.6e+22) {
tmp = NaChar / (1.0 + Math.exp((Ev / KbT)));
} else {
tmp = NaChar / (1.0 + Math.exp((EAccept / KbT)));
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if Ev <= -4.6e+22: tmp = NaChar / (1.0 + math.exp((Ev / KbT))) else: tmp = NaChar / (1.0 + math.exp((EAccept / KbT))) return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if (Ev <= -4.6e+22) tmp = Float64(NaChar / Float64(1.0 + exp(Float64(Ev / KbT)))); else tmp = Float64(NaChar / Float64(1.0 + exp(Float64(EAccept / KbT)))); end return tmp end
function tmp_2 = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0; if (Ev <= -4.6e+22) tmp = NaChar / (1.0 + exp((Ev / KbT))); else tmp = NaChar / (1.0 + exp((EAccept / KbT))); end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[LessEqual[Ev, -4.6e+22], N[(NaChar / N[(1.0 + N[Exp[N[(Ev / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(NaChar / N[(1.0 + N[Exp[N[(EAccept / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;Ev \leq -4.6 \cdot 10^{+22}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{Ev}{KbT}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{NaChar}{1 + e^{\frac{EAccept}{KbT}}}\\
\end{array}
\end{array}
if Ev < -4.6000000000000004e22Initial program 100.0%
Simplified100.0%
Taylor expanded in NdChar around 0 51.0%
Taylor expanded in Ev around inf 38.7%
if -4.6000000000000004e22 < Ev Initial program 100.0%
Simplified100.0%
Taylor expanded in NdChar around 0 60.6%
Taylor expanded in EAccept around inf 36.4%
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (if (or (<= NaChar -9.5e+92) (not (<= NaChar 4.1e-7))) (/ NaChar 2.0) (* 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 ((NaChar <= -9.5e+92) || !(NaChar <= 4.1e-7)) {
tmp = NaChar / 2.0;
} 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 ((nachar <= (-9.5d+92)) .or. (.not. (nachar <= 4.1d-7))) then
tmp = nachar / 2.0d0
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 ((NaChar <= -9.5e+92) || !(NaChar <= 4.1e-7)) {
tmp = NaChar / 2.0;
} else {
tmp = NdChar * 0.5;
}
return tmp;
}
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): tmp = 0 if (NaChar <= -9.5e+92) or not (NaChar <= 4.1e-7): tmp = NaChar / 2.0 else: tmp = NdChar * 0.5 return tmp
function code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = 0.0 if ((NaChar <= -9.5e+92) || !(NaChar <= 4.1e-7)) tmp = Float64(NaChar / 2.0); 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 ((NaChar <= -9.5e+92) || ~((NaChar <= 4.1e-7))) tmp = NaChar / 2.0; else tmp = NdChar * 0.5; end tmp_2 = tmp; end
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := If[Or[LessEqual[NaChar, -9.5e+92], N[Not[LessEqual[NaChar, 4.1e-7]], $MachinePrecision]], N[(NaChar / 2.0), $MachinePrecision], N[(NdChar * 0.5), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;NaChar \leq -9.5 \cdot 10^{+92} \lor \neg \left(NaChar \leq 4.1 \cdot 10^{-7}\right):\\
\;\;\;\;\frac{NaChar}{2}\\
\mathbf{else}:\\
\;\;\;\;NdChar \cdot 0.5\\
\end{array}
\end{array}
if NaChar < -9.4999999999999995e92 or 4.0999999999999999e-7 < NaChar Initial program 100.0%
Simplified100.0%
Taylor expanded in NdChar around 0 73.8%
Taylor expanded in KbT around inf 26.4%
if -9.4999999999999995e92 < NaChar < 4.0999999999999999e-7Initial program 100.0%
Simplified100.0%
Taylor expanded in KbT around inf 26.1%
distribute-lft-out26.1%
Simplified26.1%
Taylor expanded in NaChar around 0 23.7%
Final simplification24.9%
(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 27.6%
distribute-lft-out27.6%
Simplified27.6%
Final simplification27.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 27.6%
distribute-lft-out27.6%
Simplified27.6%
Taylor expanded in NaChar around 0 17.9%
Final simplification17.9%
herbie shell --seed 2024163
(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))))))