C vs C ++数字配方

时间:2011-03-13 03:01:08

标签: c++ c performance numerical

我开始阅读“C中的数字配方”一书......我尝试使我的程序更有效,更快......所以,使用C或C ++是一回事吗?我知道C ++是C的超集...但是,“cmath”库(c ++)与“math.h”库(c)之间是否存在差异?它会干预执行的速度吗?......为了那个......我可以使用C ++而不与C程序有任何区别吗?

4 个答案:

答案 0 :(得分:7)

首先,C ++ 不是 C的超集。虽然有许多相似之处,但也存在差异,也不是另一个的子集。

现在我们已经解决了这个问题,Numerical Recipes使用了一个特别简单的C子集,在C ++程序中使用代码时不会遇到很多困难。大多数算法都会在没有修改的情况下工作[1]。

你不应该担心像<cmath>这样的细节;在大多数平台上,它只是C数学头的一个薄的垫片,并没有引入任何开销。从广义上讲,对于C ++来说,这是正确的:当你编写看起来像C代码的代码时,很少或没有引入额外的开销。

[1]尽管他们在C中工作; Numerical Recipes是一个有用的参考,但其中包含的程序并非完全无错误,所有算法都不是最先进的。一些算法在数值上是差的选择。如果您对所讨论的任何主题感兴趣,请务必阅读参考资料,然后查找有关该主题的更多当前材料。

答案 1 :(得分:2)

C ++有时会因为效率低和/或比普通C更臃肿而得到一个糟糕的代表。当然,有更多的方法来编写低效的代码 - 例如,你应该避免在紧密的内部循环中进行虚函数调用。

话虽如此,对于基本数字代码,我不希望C和C ++之间存在很大差异。一旦开始研究科学应用程序,就可以从C ++模板元编程中获得很多好处,以获得更高的效率(同时,代码更易读,尽管编译错误有点粗糙)。一个很好的例子是Blitz++库 - 它明确地设计用于竞争低级代码(在本例中为Fortran)。

修改:删除子集/超集相关的声明。

答案 2 :(得分:1)

应该完全一样。如果你想看看你可以从数字上用C ++获得什么,你可以看看模板元编程数值算法 - 当你在编译时知道足够的信息来在构建期间进行一些计算时,它们就可以工作。

答案 3 :(得分:1)

当然,这取决于您的特定编译器等,但我的观点是您应该使用C ++,并且它应该至少与C一样快或更快(由于更现代的优化)。

当然,C ++提供了更多功能,这就是我推荐它的原因。如果您使用该功能,可能会影响性能。但是C ++仍然非常快(比目前使用的大多数语言都快)。如果您不需要这些高级功能,请不要使用它们。