我对编码很缺乏经验,但我设法写了这个:
var query = PFQuery(className:"SearchPreferences")
query.getObjectInBackgroundWithId("musicSearch") {
(searchPreference: PFObject?, error: NSError?) -> Void in
if error != nil {
print(error)
} else if let searchPreference = searchPreference {
searchPreference["musicSearch"] = self.table_data[indexPath.row]
searchPreference.saveInBackground()
}
}
蒙特卡罗原则很简单;我计算y值
对于曲线f(x)= sqrt(r ^ 2 - ix ^ 2),它代表圆的第一个四分之一。然后我计算圆圈内的点并在结束时输出它。
piApprox = 4 *(inanon / allAmount)行的乘法;
来自方形和圆形的比例:
(pi * r ^ 2)/((2r)^ 2) - >
(pi * r ^ 2)/(4 * r ^ 2) - > pi / 4
我有什么办法可以加快计算速度吗?
答案 0 :(得分:1)
我认为你是C#的新手,所以我在这里给你一些提示。
有几件事情有待改进:
decimal
很慢:它使用软件计算。另一方面,int
,double
及类似的计算在硬件中实现。在这里使用int
,无论如何都不要使用小数部分。Math.Pow
很慢。请勿将其用于平方:将Math.Pow(x, 2)
替换为x * x
Math.Sqrt
很慢。不要将Math.Sqrt(x)
与y
进行比较,而是将x
与y * y
进行比较。或者只是在结束时调用一次。Math.Floor
慢:)请记住,当我的意思是慢时,相对。所有这些操作在绝对意义上都非常快 - 我只是说你可以使用更快的替代方案。
但是有一件事情是痛苦地缓慢(这对于人来说是显而易见的):Console
。它在Windows 10上要好得多,但它仍然很慢,你在代码的热门路径中使用控制台。摆脱这些中间结果。
还有一件事,如果您在分部中使用int
,您将在C#中获得int
。如果你想获得小数部分(如double
中所述),你需要在分割之前将一个操作数转换为(double)x / y
。