c# - 提高 C# 循环的效率

标签 c# loops pi

我正在制作一个程序,通过将具有给定半径的多边形的边数增加到非常大的数量,取面积,并将其除以半径的平方来估算 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/

相关文章:

php - 从数据库自引用表创建嵌套数组并显示在 Smarty 模板的嵌套列表中

java - if-Else-if 循环不起作用

java - 为什么循环在被动 informatica java 转换中不起作用?

c# - 将字符串从 memorystream 转换为 binary[] 包含主要废话

c# - 在 C# ASP.NET 中动态调用方法

c++ - 计算pi的值-我的代码有什么问题

python - python中的Gauss-Legendre算法

c - PI 的定义很长

c# - 如何在用户控件中的两个控件之间绘制直线?

c# - 为什么我在使用 AnyIn 时收到错误 "The serializer for field ... must implement IBsonArraySerializer"?