Долгое выполнение функции - 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; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д