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