| Alternative 1 | |
|---|---|
| Accuracy | 100.0% |
| Cost | 27392 |
\[\frac{NdChar}{1 + e^{\frac{mu - \left(Ec - \left(Vef + EDonor\right)\right)}{KbT}}} + \frac{NaChar}{1 + {\left(\sqrt{e^{\frac{Vef + \left(\left(Ev + EAccept\right) - mu\right)}{KbT}}}\right)}^{2}}
\]

(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))))))
(FPCore (NdChar Ec Vef EDonor mu KbT NaChar Ev EAccept) :precision binary64 (+ (/ NdChar (+ 1.0 (exp (/ (- mu (- Ec (+ Vef EDonor))) KbT)))) (/ NaChar (+ 1.0 (pow (sqrt (exp (/ (+ Vef (- (+ Ev EAccept) mu)) KbT))) 2.0)))))
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))));
}
double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NdChar / (1.0 + exp(((mu - (Ec - (Vef + EDonor))) / KbT)))) + (NaChar / (1.0 + pow(sqrt(exp(((Vef + ((Ev + EAccept) - mu)) / KbT))), 2.0)));
}
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
code = (ndchar / (1.0d0 + exp((-(((ec - vef) - edonor) - mu) / kbt)))) + (nachar / (1.0d0 + exp(((((ev + vef) + eaccept) + -mu) / kbt))))
end function
real(8) function code(ndchar, ec, vef, edonor, mu, kbt, nachar, ev, eaccept)
real(8), intent (in) :: ndchar
real(8), intent (in) :: ec
real(8), intent (in) :: vef
real(8), intent (in) :: edonor
real(8), intent (in) :: mu
real(8), intent (in) :: kbt
real(8), intent (in) :: nachar
real(8), intent (in) :: ev
real(8), intent (in) :: eaccept
code = (ndchar / (1.0d0 + exp(((mu - (ec - (vef + edonor))) / kbt)))) + (nachar / (1.0d0 + (sqrt(exp(((vef + ((ev + eaccept) - mu)) / kbt))) ** 2.0d0)))
end function
public static double code(double NdChar, double Ec, double Vef, double EDonor, double mu, double KbT, double NaChar, double Ev, double EAccept) {
return (NdChar / (1.0 + Math.exp((-(((Ec - Vef) - EDonor) - mu) / KbT)))) + (NaChar / (1.0 + Math.exp(((((Ev + Vef) + 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 / (1.0 + Math.exp(((mu - (Ec - (Vef + EDonor))) / KbT)))) + (NaChar / (1.0 + Math.pow(Math.sqrt(Math.exp(((Vef + ((Ev + EAccept) - mu)) / KbT))), 2.0)));
}
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))))
def code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept): return (NdChar / (1.0 + math.exp(((mu - (Ec - (Vef + EDonor))) / KbT)))) + (NaChar / (1.0 + math.pow(math.sqrt(math.exp(((Vef + ((Ev + EAccept) - mu)) / KbT))), 2.0)))
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 code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) return Float64(Float64(NdChar / Float64(1.0 + exp(Float64(Float64(mu - Float64(Ec - Float64(Vef + EDonor))) / KbT)))) + Float64(NaChar / Float64(1.0 + (sqrt(exp(Float64(Float64(Vef + Float64(Float64(Ev + EAccept) - mu)) / KbT))) ^ 2.0)))) 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
function tmp = code(NdChar, Ec, Vef, EDonor, mu, KbT, NaChar, Ev, EAccept) tmp = (NdChar / (1.0 + exp(((mu - (Ec - (Vef + EDonor))) / KbT)))) + (NaChar / (1.0 + (sqrt(exp(((Vef + ((Ev + EAccept) - mu)) / KbT))) ^ 2.0))); 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]
code[NdChar_, Ec_, Vef_, EDonor_, mu_, KbT_, NaChar_, Ev_, EAccept_] := N[(N[(NdChar / N[(1.0 + N[Exp[N[(N[(mu - N[(Ec - N[(Vef + EDonor), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(NaChar / N[(1.0 + N[Power[N[Sqrt[N[Exp[N[(N[(Vef + N[(N[(Ev + EAccept), $MachinePrecision] - mu), $MachinePrecision]), $MachinePrecision] / KbT), $MachinePrecision]], $MachinePrecision]], $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\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}}}
\frac{NdChar}{1 + e^{\frac{mu - \left(Ec - \left(Vef + EDonor\right)\right)}{KbT}}} + \frac{NaChar}{1 + {\left(\sqrt{e^{\frac{Vef + \left(\left(Ev + EAccept\right) - mu\right)}{KbT}}}\right)}^{2}}
Herbie found 22 alternatives:
| Alternative | Accuracy | Speedup |
|---|
Results
Initial program 100.0%
Simplified100.0%
[Start]100.0% | \[ \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}}}
\] |
|---|---|
neg-sub0 [=>]100.0% | \[ \frac{NdChar}{1 + e^{\frac{\color{blue}{0 - \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}}}
\] |
associate--r- [=>]100.0% | \[ \frac{NdChar}{1 + e^{\frac{\color{blue}{\left(0 - \left(\left(Ec - Vef\right) - EDonor\right)\right) + mu}}{KbT}}} + \frac{NaChar}{1 + e^{\frac{\left(\left(Ev + Vef\right) + EAccept\right) + \left(-mu\right)}{KbT}}}
\] |
+-commutative [=>]100.0% | \[ \frac{NdChar}{1 + e^{\frac{\color{blue}{mu + \left(0 - \left(\left(Ec - Vef\right) - EDonor\right)\right)}}{KbT}}} + \frac{NaChar}{1 + e^{\frac{\left(\left(Ev + Vef\right) + EAccept\right) + \left(-mu\right)}{KbT}}}
\] |
neg-sub0 [<=]100.0% | \[ \frac{NdChar}{1 + e^{\frac{mu + \color{blue}{\left(-\left(\left(Ec - Vef\right) - EDonor\right)\right)}}{KbT}}} + \frac{NaChar}{1 + e^{\frac{\left(\left(Ev + Vef\right) + EAccept\right) + \left(-mu\right)}{KbT}}}
\] |
sub-neg [<=]100.0% | \[ \frac{NdChar}{1 + e^{\frac{\color{blue}{mu - \left(\left(Ec - Vef\right) - EDonor\right)}}{KbT}}} + \frac{NaChar}{1 + e^{\frac{\left(\left(Ev + Vef\right) + EAccept\right) + \left(-mu\right)}{KbT}}}
\] |
associate--l- [=>]100.0% | \[ \frac{NdChar}{1 + e^{\frac{mu - \color{blue}{\left(Ec - \left(Vef + EDonor\right)\right)}}{KbT}}} + \frac{NaChar}{1 + e^{\frac{\left(\left(Ev + Vef\right) + EAccept\right) + \left(-mu\right)}{KbT}}}
\] |
unsub-neg [=>]100.0% | \[ \frac{NdChar}{1 + e^{\frac{mu - \left(Ec - \left(Vef + EDonor\right)\right)}{KbT}}} + \frac{NaChar}{1 + e^{\frac{\color{blue}{\left(\left(Ev + Vef\right) + EAccept\right) - mu}}{KbT}}}
\] |
+-commutative [=>]100.0% | \[ \frac{NdChar}{1 + e^{\frac{mu - \left(Ec - \left(Vef + EDonor\right)\right)}{KbT}}} + \frac{NaChar}{1 + e^{\frac{\left(\color{blue}{\left(Vef + Ev\right)} + EAccept\right) - mu}{KbT}}}
\] |
associate-+l+ [=>]100.0% | \[ \frac{NdChar}{1 + e^{\frac{mu - \left(Ec - \left(Vef + EDonor\right)\right)}{KbT}}} + \frac{NaChar}{1 + e^{\frac{\color{blue}{\left(Vef + \left(Ev + EAccept\right)\right)} - mu}{KbT}}}
\] |
Applied egg-rr100.0%
[Start]100.0% | \[ \frac{NdChar}{1 + e^{\frac{mu - \left(Ec - \left(Vef + EDonor\right)\right)}{KbT}}} + \frac{NaChar}{1 + e^{\frac{\left(Vef + \left(Ev + EAccept\right)\right) - mu}{KbT}}}
\] |
|---|---|
add-sqr-sqrt [=>]100.0% | \[ \frac{NdChar}{1 + e^{\frac{mu - \left(Ec - \left(Vef + EDonor\right)\right)}{KbT}}} + \frac{NaChar}{1 + \color{blue}{\sqrt{e^{\frac{\left(Vef + \left(Ev + EAccept\right)\right) - mu}{KbT}}} \cdot \sqrt{e^{\frac{\left(Vef + \left(Ev + EAccept\right)\right) - mu}{KbT}}}}}
\] |
pow2 [=>]100.0% | \[ \frac{NdChar}{1 + e^{\frac{mu - \left(Ec - \left(Vef + EDonor\right)\right)}{KbT}}} + \frac{NaChar}{1 + \color{blue}{{\left(\sqrt{e^{\frac{\left(Vef + \left(Ev + EAccept\right)\right) - mu}{KbT}}}\right)}^{2}}}
\] |
associate--l+ [=>]100.0% | \[ \frac{NdChar}{1 + e^{\frac{mu - \left(Ec - \left(Vef + EDonor\right)\right)}{KbT}}} + \frac{NaChar}{1 + {\left(\sqrt{e^{\frac{\color{blue}{Vef + \left(\left(Ev + EAccept\right) - mu\right)}}{KbT}}}\right)}^{2}}
\] |
Final simplification100.0%
| Alternative 1 | |
|---|---|
| Accuracy | 100.0% |
| Cost | 27392 |
| Alternative 2 | |
|---|---|
| Accuracy | 100.0% |
| Cost | 14528 |
| Alternative 3 | |
|---|---|
| Accuracy | 74.6% |
| Cost | 14409 |
| Alternative 4 | |
|---|---|
| Accuracy | 78.2% |
| Cost | 14409 |
| Alternative 5 | |
|---|---|
| Accuracy | 71.5% |
| Cost | 14408 |
| Alternative 6 | |
|---|---|
| Accuracy | 65.2% |
| Cost | 8788 |
| Alternative 7 | |
|---|---|
| Accuracy | 65.1% |
| Cost | 8536 |
| Alternative 8 | |
|---|---|
| Accuracy | 61.5% |
| Cost | 8412 |
| Alternative 9 | |
|---|---|
| Accuracy | 65.3% |
| Cost | 8272 |
| Alternative 10 | |
|---|---|
| Accuracy | 63.0% |
| Cost | 7884 |
| Alternative 11 | |
|---|---|
| Accuracy | 44.3% |
| Cost | 7764 |
| Alternative 12 | |
|---|---|
| Accuracy | 58.4% |
| Cost | 7760 |
| Alternative 13 | |
|---|---|
| Accuracy | 64.1% |
| Cost | 7753 |
| Alternative 14 | |
|---|---|
| Accuracy | 44.9% |
| Cost | 7632 |
| Alternative 15 | |
|---|---|
| Accuracy | 53.6% |
| Cost | 7632 |
| Alternative 16 | |
|---|---|
| Accuracy | 53.9% |
| Cost | 7632 |
| Alternative 17 | |
|---|---|
| Accuracy | 41.3% |
| Cost | 7508 |
| Alternative 18 | |
|---|---|
| Accuracy | 39.7% |
| Cost | 7376 |
| Alternative 19 | |
|---|---|
| Accuracy | 38.6% |
| Cost | 7244 |
| Alternative 20 | |
|---|---|
| Accuracy | 27.4% |
| Cost | 1224 |
| Alternative 21 | |
|---|---|
| Accuracy | 26.7% |
| Cost | 1092 |
| Alternative 22 | |
|---|---|
| Accuracy | 27.6% |
| Cost | 320 |
herbie shell --seed 2023263
(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))))))