Долгое выполнение функции - C#
Формулировка задачи:
Доброго времени суток. Такой вопрос.
Есть две функции расчета:
Так вот: если щелкнуть по кнопке:
при g1 и g2>=3 функция PBPst выполняется достаточно быстро, а вот при меньших значениях очень долго выполнение происходит.
С чем это связано, не подскажете?
PA и PAPqT выполняются быстро. Проверено.
double p1;
double p2;
p1 = 0;//Convert.ToDouble(numericUpDown3.Value);
p2 = 0;//Convert.ToDouble(numericUpDown4.Value);
double res=0;
double t = PA(p1,p2);
if (g1<=4&g2<=4) res = t*PBPsT(g1+1,g2)+(1-t)*PBPsT(g1,g2+1);
if (g1==6&g2==6) res = PAPgt(p1,p2);
if (g1==6&g2==5) res = t*1+(1-t)*PBPsT(6,6);
if (g1==5&g2==6) res = t*PBPsT(6,6)+(1-t)*0;
if (g1==5&g2==5) res = t*PBPsT(6,5)+(1-t)*PBPsT(5,6);
if (g1==5&g2==4) res = t*1+(1-t)*PBPsT(5,5);
if (g1==5&g2==3) res = t*1+(1-t)*PBPsT(5,4);
if (g1==5&g2==2) res = t*1+(1-t)*PBPsT(5,3);
if (g1==5&g2==1) res = t*1+(1-t)*PBPsT(5,2);
if (g1==5&g2==0) res = t*1+(1-t)*PBPsT(5,1);
if (g1==4&g2==5) res = t*PBPsT(5,5)+(1-t)*0;
if (g1==3&g2==5) res = t*PBPsT(4,5)+(1-t)*0;
if (g1==2&g2==5) res = t*PBPsT(3,5)+(1-t)*0;
if (g1==1&g2==5) res = t*PBPsT(2,5)+(1-t)*0;
if (g1==0&g2==5) res = t*PBPsT(1,5)+(1-t)*0;
return res; public double PBPsT(int g1, int g2)
{
double p1;
double p2;
p1 = 0;//Convert.ToDouble(numericUpDown3.Value);
p2 = 0;//Convert.ToDouble(numericUpDown4.Value);
double res=0;
double t = PB(p1,p2);
if (g1<=4&g2<=4) res = t*PAPsT(g1+1,g2)+(1-t)*PAPsT(g1,g2+1);
if (g1==6&g2==6) res = PAPgt(p1,p2);
if (g1==6&g2==5) res = t*1+(1-t)*PAPsT(6,6);
if (g1==5&g2==6) res = t*PAPsT(6,6)+(1-t)*0;
if (g1==5&g2==5) res = t*PAPsT(6,5)+(1-t)*PAPsT(5,6);
if (g1==5&g2==4) res = t*1+(1-t)*PAPsT(5,5);
if (g1==5&g2==3) res = t*1+(1-t)*PAPsT(5,4);
if (g1==5&g2==2) res = t*1+(1-t)*PAPsT(5,3);
if (g1==5&g2==1) res = t*1+(1-t)*PAPsT(5,2);
if (g1==5&g2==0) res = t*1+(1-t)*PAPsT(5,1);
if (g1==4&g2==5) res = t*PAPsT(5,5)+(1-t)*0;
if (g1==3&g2==5) res = t*PAPsT(4,5)+(1-t)*0;
if (g1==2&g2==5) res = t*PAPsT(3,5)+(1-t)*0;
if (g1==1&g2==5) res = t*PAPsT(2,5)+(1-t)*0;
if (g1==0&g2==5) res = t*PAPsT(1,5)+(1-t)*0;
return res;
} void Button3Click(object sender, EventArgs e)
{
double win_set;
double p1;
double p2;
int g1;
int g2;
p1 = Convert.ToDouble(numericUpDown3.Value);
p2 = Convert.ToDouble(numericUpDown4.Value);
g1 = Convert.ToInt16(textBox85.Text);
g2 = Convert.ToInt16(textBox86.Text);
if (textBox85.Text=="6"&textBox86.Text=="6")
win_set = PAPgt(p1,p2);
else
win_set = PA(p1,p2)*PBPsT(g1+1,g2)+(1-PA(p1,p2))*PBPsT(g1,g2+1);
var watch = System.Diagnostics.Stopwatch.StartNew();
MessageBox.Show(Convert.ToString(win_set));
watch.Stop();
var elapsedMs = watch.ElapsedMilliseconds;
MessageBox.Show(Convert.ToString(elapsedMs/1000));
}Решение задачи: «Долгое выполнение функции»
textual
Листинг программы
if (pnt <= 0.001 && pnt >= -0.001)
{
res = i;
break;
}