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

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

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

Доброго времени суток. Такой вопрос. Есть две функции расчета:
            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));
        }
при g1 и g2>=3 функция PBPst выполняется достаточно быстро, а вот при меньших значениях очень долго выполнение происходит. С чем это связано, не подскажете? PA и PAPqT выполняются быстро. Проверено.

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

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

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


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

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

7   голосов , оценка 4 из 5
Похожие ответы