关于c ++:科学编程实践

Practices for scientific programming

我想写一篇关于速度和准确性的好文章。如果我没记错的话,这一行:b=(a+1)*a产生了一个比这更好的程序:b=(a^2+a)

这只是一个例子,可能是错误的,但现在不重要,问题是:在哪里我可以找到科学计算的良好实践的概要?


你可以看看C语言中的数字配方。我不确定它是否介绍或教给你优化,但就C语言中的科学计算而言,它是一本非常流行的书。甚至还有一本C++的书。


你在这里所做的被称为过早优化,它是许多邪恶的根源。您应该做的是,编写程序,然后对它们进行分析,并尝试优化关键部分。关于科学计算优化技术的完整概要可能是一本很厚的书,因此在寻找解决方案之前,您需要缩小您的问题范围。


一种有用的技术是在基准类型上创建所有函数模板,然后使用间隔算术类型而不是浮点类型运行算法。这为您提供了一个给定输入集结果精度的上限,而无需进行广泛的数值分析。

了解你的结果和任何中间产物的预期数量也是很重要的,这样你就可以快速判断出是否出了问题。


这不是通常的"过早优化"讨论。问题不在于性能,而在于准确性。我同意这一观点——这非常值得注意。

最需要注意的是舍入误差的累积。

如果可以,则应在添加数组之前按升序对数组进行排序:

网址:http://www.ibiblio.org/pub/languages/fortran/ch4-9.html

您可能会找到以下帮助:

http://www.codeproject.com/articles/25294/avointing-overflow-undflow-and-loss-of-precision

你需要阅读每个计算机科学家应该知道的关于浮点运算的知识


浏览一下https://sciccomp.stackexchange.com/甚至四处打听可能会让你受益匪浅。

祝你好运!