2

「C の数値レシピ」という本を読み始めました...プログラムをより効率的かつ高速にしようとしています...つまり、C または C++ を使用することは同じことですか? C++ が C のスーパーセットであることは知っていますが、「cmath」ライブラリ (c++) と「math.h」ライブラリ (c) には違いがありますか? 実行速度に介入しますか?...そのために... Cプログラムと何の違いもなくC++を使用できますか?

4

4 に答える 4

7

まず、C++ は Cのスーパーセットではありません。多くの類似点がありますが、相違点もあり、どちらも他方のサブセットではありません。

Numerical Recipes は C の特に単純なサブセットを使用するため、C++ プログラムでコードを使用する際に多くの問題に遭遇することはありません。ほとんどのアルゴリズムは変更なしでそのまま機能します[1]。

次のような詳細について心配する必要はありません<cmath>。ほとんどのプラットフォームでは、これは C 数学ヘッダーの薄いシムにすぎず、オーバーヘッドは発生しません。大まかに言えば、これは一般的な C++ に当てはまります。C コードのように見えるコードを記述している場合、追加のオーバーヘッドはほとんど、またはまったく発生しません。

[1] C で動作する限り。Numerical Recipes は有用なリファレンスですが、そこに含まれるプログラムに完全にバグがないわけではなく、すべてのアルゴリズムが最先端というわけでもありません。一部のアルゴリズムは、数値的に不適切な選択です。議論されたトピックのいずれかに真剣に興味を持った場合は、必ず参考文献を読んでから、その主題に関する最新の資料を探してください。

于 2011-03-13T03:21:36.680 に答える
2

C++ は、単純な C よりも効率が悪い、または肥大化しているという理由で悪い評価を受けることがあります。確かに、非効率的なコードを記述する方法は他にもあります。たとえば、タイトな内部ループで仮想関数呼び出しを行うことは避ける必要があります。

そうは言っても、基本的な数値コードについては、C と C++ の間に大きな違いはないと思います。科学的なアプリケーションに目を向け始めると、C++ テンプレート メタプログラミングから多くの成果を上げて効率を向上させることができます (同時に、コンパイル エラーは少し厄介ですが、より読みやすいコードも得られます)。この良い例がBlitz++ライブラリです。これは、低レベル コード (この場合は Fortran) と競合するように明示的に設計されています。

編集:サブセット/スーパーセット関連のクレームを削除しました。

于 2011-03-13T03:12:28.743 に答える
1

まったく同じはずです。C++ から数値的に得られるものを確認したい場合は、テンプレート メタプログラミング数値アルゴリズムを見ることができます。これらは、コンパイル時に十分な情報を知っていて、ビルド中に計算を実行できる場合に機能します。

于 2011-03-13T03:06:33.580 に答える
1

もちろん、それは特定のコンパイラなどに依存しますが、私の見解では、C++ を使用する必要があり、少なくとも C よりも高速に実行する必要があります (最新の最適化により)。

もちろん、C++ はより多くの機能を提供するため、C++ をお勧めします。また、その機能を使用すると、パフォーマンスに影響を与える可能性があります。しかし、C++ は依然として非常に高速です (現在使用されているほとんどの言語よりも高速です)。これらの高度な機能が必要ない場合は、使用しないでください。

于 2011-03-13T03:06:43.360 に答える