#c #algorithm #fortran #greedy #hill-climbing
#c #алгоритм #fortran #жадный #восхождение на холм
Вопрос:
Я разрабатываю алгоритм, который содержит большую часть числовых вычислений. Мой руководитель проекта рекомендовал мне использовать Fortran из-за этого, и поэтому в течение последних недель я работал над этим (пока все хорошо). Это была бы новая версия его алгоритма, который в основном состоит из множества числовых вычислений.
В моем, однако, было бы больше «логики». Не вдаваясь в подробности, подход грубой силы выполняется с использованием только fortran, потому что это всего лишь 95% чтения из файла и выполнения операций. Однако цель проекта — предоставить эффективный алгоритм для этого, я думал о методах и хотел начать с жадного подхода (что-то вроде восхождения на холм), и это навело меня на мысль, что, в частности, для этой части, возможно, было бы лучше написать алгоритм на C вместо Fortran.
Итак, в принципе, насколько сложно, по вашему мнению, было бы разработать «логику» алгоритма на C , а затем вызывать Fortran всякий раз, когда необходимо выполнить основную часть числовых вычислений. Стоило бы оно того? Или я должен просто придерживаться одного из двух языков?
Извините, если это очень невежественный вопрос, но я не могу понять, было бы сложнее написать алгоритм, такой как восхождение на холм, если бы он выполнялся на Fortran вместо C , и преимущества Fortran в этом случае того стоили бы.
Спасибо за ваше время и хорошего дня!
Комментарии:
1. C разработан таким образом, чтобы иметь возможность вызывать все, что может вызвать C. И совместимость между C и Fortran была очень хорошей в последние несколько десятилетий. Короче говоря, вызвать функцию Fortran из C так же просто, как и из C, единственное, что специфично для C , это то, что вам нужно объявлять функции как
extern "C"
("C"
это соглашение о вызовах C, фактический язык, на котором запрограммирована функция, не имеет значения).2. Это, безусловно, возможно. Но стоит ли это делать, полностью зависит от мнения и, следовательно, не по теме для этого сайта.
3. На самом деле возможно эффективно писать алгоритмы на обоих языках. Как современный Fortran, так и современный C эффективны как для «числовых вычислений», так и для «логики алгоритма» — если они используются с достаточным навыком. Ваши индивидуальные навыки и предубеждения (ваш руководитель предпочитает Fortran для числовых данных, ваш — C для «логики алгоритма») являются ключевыми факторами в вашем мышлении. Реальность такова, что для вашей задачи можно использовать любой язык или их комбинацию. У любого такого выбора есть преимущества и недостатки.
4. Я бы также добавил это: ответ также зависит от контекста. Вопросы, которые приходят на ум: является ли это частью более крупного проекта? (тогда язык, обычно используемый для проекта, может иметь значение). Обычно в лаборатории используется Fortran или C ? Как будет использоваться ваш проект, кем? Знает ли персонал оба языка? Планируется ли переход на C в долгосрочной перспективе?
5. Это вполне возможно, используя
iso_c_binding
встроенный модуль в Fortran. Все, что вам нужно, это хороший справочник по современному Fortran. Я бы рекомендовал «Объясненный современный Fortran: включение Fortran 2018» Меткалфа и др. У меня был этот же вопрос 4 года назад, и в итоге мы написали ядро программного обеспечения на Fortran 2008 с необходимыми интерфейсами для C / C и других языков. Я не жалею о принятом решении сейчас, поскольку собственный синтаксис Fortran на основе массива и его встроенные функции были действительно удобны во время разработки.