Долгое выполнение функции - C#

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток. Такой вопрос. Есть две функции расчета:
Листинг программы
  1. double p1;
  2. double p2;
  3. p1 = 0;//Convert.ToDouble(numericUpDown3.Value);
  4. p2 = 0;//Convert.ToDouble(numericUpDown4.Value);
  5. double res=0;
  6. double t = PA(p1,p2);
  7. if (g1<=4&g2<=4) res = t*PBPsT(g1+1,g2)+(1-t)*PBPsT(g1,g2+1);
  8. if (g1==6&g2==6) res = PAPgt(p1,p2);
  9. if (g1==6&g2==5) res = t*1+(1-t)*PBPsT(6,6);
  10. if (g1==5&g2==6) res = t*PBPsT(6,6)+(1-t)*0;
  11. if (g1==5&g2==5) res = t*PBPsT(6,5)+(1-t)*PBPsT(5,6);
  12. if (g1==5&g2==4) res = t*1+(1-t)*PBPsT(5,5);
  13. if (g1==5&g2==3) res = t*1+(1-t)*PBPsT(5,4);
  14. if (g1==5&g2==2) res = t*1+(1-t)*PBPsT(5,3);
  15. if (g1==5&g2==1) res = t*1+(1-t)*PBPsT(5,2);
  16. if (g1==5&g2==0) res = t*1+(1-t)*PBPsT(5,1);
  17. if (g1==4&g2==5) res = t*PBPsT(5,5)+(1-t)*0;
  18. if (g1==3&g2==5) res = t*PBPsT(4,5)+(1-t)*0;
  19. if (g1==2&g2==5) res = t*PBPsT(3,5)+(1-t)*0;
  20. if (g1==1&g2==5) res = t*PBPsT(2,5)+(1-t)*0;
  21. if (g1==0&g2==5) res = t*PBPsT(1,5)+(1-t)*0;
  22.  
  23. return res;
Листинг программы
  1. public double PBPsT(int g1, int g2)
  2. {
  3. double p1;
  4. double p2;
  5. p1 = 0;//Convert.ToDouble(numericUpDown3.Value);
  6. p2 = 0;//Convert.ToDouble(numericUpDown4.Value);
  7. double res=0;
  8. double t = PB(p1,p2);
  9. if (g1<=4&g2<=4) res = t*PAPsT(g1+1,g2)+(1-t)*PAPsT(g1,g2+1);
  10. if (g1==6&g2==6) res = PAPgt(p1,p2);
  11. if (g1==6&g2==5) res = t*1+(1-t)*PAPsT(6,6);
  12. if (g1==5&g2==6) res = t*PAPsT(6,6)+(1-t)*0;
  13. if (g1==5&g2==5) res = t*PAPsT(6,5)+(1-t)*PAPsT(5,6);
  14. if (g1==5&g2==4) res = t*1+(1-t)*PAPsT(5,5);
  15. if (g1==5&g2==3) res = t*1+(1-t)*PAPsT(5,4);
  16. if (g1==5&g2==2) res = t*1+(1-t)*PAPsT(5,3);
  17. if (g1==5&g2==1) res = t*1+(1-t)*PAPsT(5,2);
  18. if (g1==5&g2==0) res = t*1+(1-t)*PAPsT(5,1);
  19. if (g1==4&g2==5) res = t*PAPsT(5,5)+(1-t)*0;
  20. if (g1==3&g2==5) res = t*PAPsT(4,5)+(1-t)*0;
  21. if (g1==2&g2==5) res = t*PAPsT(3,5)+(1-t)*0;
  22. if (g1==1&g2==5) res = t*PAPsT(2,5)+(1-t)*0;
  23. if (g1==0&g2==5) res = t*PAPsT(1,5)+(1-t)*0;
  24. return res;
  25. }
Так вот: если щелкнуть по кнопке:
Листинг программы
  1. void Button3Click(object sender, EventArgs e)
  2. {
  3. double win_set;
  4. double p1;
  5. double p2;
  6. int g1;
  7. int g2;
  8. p1 = Convert.ToDouble(numericUpDown3.Value);
  9. p2 = Convert.ToDouble(numericUpDown4.Value);
  10. g1 = Convert.ToInt16(textBox85.Text);
  11. g2 = Convert.ToInt16(textBox86.Text);
  12. if (textBox85.Text=="6"&textBox86.Text=="6")
  13. win_set = PAPgt(p1,p2);
  14. else
  15. win_set = PA(p1,p2)*PBPsT(g1+1,g2)+(1-PA(p1,p2))*PBPsT(g1,g2+1);
  16. var watch = System.Diagnostics.Stopwatch.StartNew();
  17. MessageBox.Show(Convert.ToString(win_set));
  18. watch.Stop();
  19. var elapsedMs = watch.ElapsedMilliseconds;
  20. MessageBox.Show(Convert.ToString(elapsedMs/1000));
  21. }
при g1 и g2>=3 функция PBPst выполняется достаточно быстро, а вот при меньших значениях очень долго выполнение происходит. С чем это связано, не подскажете? PA и PAPqT выполняются быстро. Проверено.

Решение задачи: «Долгое выполнение функции»

textual
Листинг программы
  1.  if (pnt <= 0.001 && pnt >= -0.001)
  2. {
  3.      res = i;
  4.      break;
  5. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы