Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Господа, будьте снисходительны, не бросайтесь сразу штрафовать за, как вам кажется, глупые вопросы - beginners на то и beginners.
Просто фортран предназначен для физико-математических... 04.08.05 19:19 Число просмотров: 2221
Автор: DPP <Dmitry P. Pimenov> Статус: The Elderman
|
> Поработал с WIN32 API на Фортране. Кстати есть мнение, что, > при всех достоинствах С, для задач численного моделирования > Фортран дает более быстрый код чем С.
Просто фортран предназначен для физико-математических расчетов. Эффектифность кода у этих языков почти равна и сильно зависит от компилятора, а кодить формулы лучше на фортране :).
> DPP, а как это без массивов?
Возмем, к примеру, задачу: "Файл представляет собой последовательность байт. Требуется подсчитать сколько раз в нем встречается заданный байт". Однозначно проще и быстрее всего будет считать файл в массив и циклично перебрав все байты посчитать количество заданных, чем читать файл побайтно. В последнем случае слишком много накладных расходов - один запрос на прочтение байта может занимать времени столько же, сколько и прочтение сотен или тысяч байт.
Есть задачи, которые на первый взгляд элементарно решаются с использованием массивов и не решаются без них. Возмем, например, такую задачу: "Последовательно вводятся числа. Как только будет введено заданное число (например ноль), нужно вывести второе максимальное число (не самое максимальное, а то, что меньше него, но больше всех остальных)". Сразу хочется написать ввод чисел в массив (со счетчиком количества введеных чисел), упорядочение их по возрастанию (как только будет введен ноль) и выдачу второго элемента массива. Однако непонятно какого объема нужно заводить массив? Вводится может и миллион и милиард и более чисел. Получается, что ее нельзя решить используя массив, даже динамически увеличивающийся, поскольку объем памяти ограничен. Зато легко можно решить не используя массив вообще.
Получаем интересный вывод: "Какой бы большой массив использовался в программе, его может не хватить. Какой бы небольшой массив не использовался в программе, он может быть не использоваться и на один процент за все время эксплуатации программы. Динамическое выделение памяти лишь позволяет эффективнее пользоваться памятью. А задача должна быть универсальна и обрабатывать столько данных, сколько ей подсунули, а не на сколько она расчитана". Иногда лучше последовательно считывать и обрабатывать данные, особенно там, где их можно обработать за один проход, пусть даже в ущерб скорости, если потеря скорости будет не велика.
Причем следует учесть возможности современных ОС. При превом считывании данных из файла весь файл может осесть в кеши и оставаться в нем до выключении компьютера, а передача данных из ОЗУ (файловый кеш) в ОЗУ (переменные программы) достаточно быстра, по сравнению с чтением с накопителя, хотя и больше будет накладных расходов на обращения к ОС при чтении данных.
> Еще раз спасибо за ответы.
|
|
|