我想在速度和准确性方面写出好的陈述。如果我没记错这一行:b=(a+1)*a
会产生一个比这更好的程序:b=(a^2+a)
。
这只是一个例子,可能是错的,但现在没关系,问题是:我在哪里可以找到科学计算的良好实践纲要?
答案 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