我正在编写一个程序,通过将具有给定半径的多边形的边数增加到极高的数量,然后将其面积除以半径的平方来估算pi。我有以下几点:

            double radius = 5;

            for (double sides = 3;sides < 10000;sides++)
            {
                double pi_est = ((radius * radius * sides * Math.Sin((360 / sides)*(Math.PI/180))) / 2) / (radius * radius);
                richTextBox1.AppendText(pi_est+"\n");
            }


截至目前,这大约需要5秒钟才能完成。有什么我可以重写的东西可以提高循环效率吗?

最佳答案

AppendText调用将花费大量时间,因为这意味着访问UI。使用StringBuilder或带有String.Join的数组来累积字符串。

您永远不要使用double作为迭代变量;使用int代替(这不是效率问题,而是更多的潜在难题)。

radius*radius抵消-注意pi与所使用的半径无关,因此您可以假定半径等于1并忽略它。

全部写出:

StringBuilder sb = new StringBuilder();

for(int sides = 3; sides < 10000; sides++) {
    double pi_est = sides * Math.Sin((2*Math.PI)/sides) / 2;
    sb.append(pi_est + "\n");
}
richTextBox1.AppendText(sb.ToString());

关于c# - 提高C#循环的效率,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12487428/

10-12 16:27