C против C ++ числовые рецепты - PullRequest
2 голосов
/ 13 марта 2011

Я начал читать книгу «Численные рецепты в C» ... Я пытаюсь сделать мои программы более эффективными и быстрыми ... Итак, одно и то же - использовать C или C ++?Я знаю, что C ++ - это супер-набор C ... Но есть ли различия между библиотекой "cmath" (c ++) и библиотекой "math.h" (c)?Это будет влиять на скорость выполнения? ... для того ... чтобы я мог использовать C ++ без каких-либо различий с программой на C?

Ответы [ 4 ]

7 голосов
/ 13 марта 2011

Во-первых, C ++ является , а не надмножеством C. Хотя есть много сходств, есть и различия, и ни один не является подмножеством другого.

Теперь, когда мы имеемчто в любом случае, Numeric Recipes использует особенно простое подмножество C, и вы не должны столкнуться со многими трудностями при использовании кода в программе на C ++.Большинство алгоритмов будут просто работать без изменений [1].

Вам не стоит беспокоиться о таких деталях, как <cmath>;на большинстве платформ это просто тонкая прокладка над математическими заголовками C, и она не создает никаких накладных расходов.В целом, это верно для C ++ в целом: когда вы пишете код, похожий на код на C, вводятся небольшие или никакие дополнительные издержки.

[1] Поскольку они работают в C;Числовые рецепты - полезный справочник, но содержащиеся в нем программы не полностью без ошибок, а также не все современные алгоритмы.Некоторые из алгоритмов являются численно неудачным выбором.Если вы серьезно заинтересовались какой-либо из обсуждаемых тем, обязательно прочитайте ссылки, а затем поищите более актуальные материалы по этой теме.

2 голосов
/ 13 марта 2011

C ++ иногда получает плохую репутацию из-за того, что он менее эффективен и / или более раздут, чем обычный C. Конечно, есть больше способов написания неэффективного кода - вам следует избегать, например, вызовов виртуальных функций в узких внутренних циклах.

Учитывая вышесказанное, для базового числового кода я не ожидал бы большой разницы между C и C ++.Как только вы начнете изучать научные приложения, вы сможете значительно расширить возможности метапрограммирования шаблонов C ++ для повышения эффективности (и в то же время для более удобочитаемого кода, хотя ошибки компиляции немного грубоваты).Хорошим примером этого является библиотека Blitz ++ - она ​​явно разработана для конкуренции с низкоуровневым кодом (в данном случае с Fortran).

Редактировать: Удалены претензии, связанные с подмножеством / надмножеством.

1 голос
/ 13 марта 2011

Конечно, это зависит от вашего конкретного компилятора и т. Д., Но я считаю, что вы должны использовать C ++ и что он должен работать по крайней мере так же быстро или быстрее (из-за более современных оптимизаций), чем C.

Конечно, C ++ предоставляет больше функциональных возможностей, поэтому я рекомендую его.И если вы используете эту функцию, это может повлиять на производительность.Но C ++ все еще очень быстр (быстрее, чем большинство языков, используемых сегодня).И если вам не нужны эти расширенные функции, не используйте их.

1 голос
/ 13 марта 2011

Должен быть точно таким же. Если вы хотите посмотреть, что вы можете получить из C ++ в цифровом виде, вы можете посмотреть на числовые алгоритмы метапрограммирования шаблонов - они работают, когда вы знаете достаточно информации во время компиляции, чтобы выполнить некоторые вычисления во время сборки.

...