科学编程实践

时间:2012-01-24 12:37:45

标签: c++ math optimization

我想在速度和准确性方面写出好的陈述。如果我没记错这一行:b=(a+1)*a会产生一个比这更好的程序:b=(a^2+a)

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

5 个答案:

答案 0 :(得分:5)

您可以查看Numerical Recipes in C。我不确定它是否介绍或教你优化,但就C语言中的科学计算而言,它是一本非常受欢迎的书。甚至可能有一本关于C ++的书。

答案 1 :(得分:3)

你在这里所做的是premature optimization,它是许多邪恶的根源。您应该做的是,编写程序,然后profile,并尝试优化关键部分。关于科学计算优化技术的完整纲要可能是一本非常厚的书,因此您需要在搜索解决方案之前缩小问题范围。

答案 2 :(得分:1)

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

了解结果和任何中间体的预期大小也很重要,这样您就可以快速判断是否有问题。

答案 3 :(得分:0)

环顾https://scicomp.stackexchange.com/或甚至在那里询问可能会对你有很大帮助。

祝你好运!

答案 4 :(得分:0)

这不是通常的“过早优化”讨论。这不是关于表现;它的准确性就是问题所在。我同意OP - 非常值得关注。

最重要的是accumulation of rounding error

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

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

你可能会找到这个帮助:

http://www.codeproject.com/Articles/25294/Avoiding-Overflow-Underflow-and-Loss-of-Precision

您需要阅读What Every Computer Scientist Should Know About Floating Point Arithmetic