Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы программирования на FORTRAN (ФОРТРАН)

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330

Открыть новую тему     Написать ответ в эту тему

akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Обсуждаются все вопросы, связанные с программированием на ФОРТРАН, как общего так и конкретного характера.
Постарайтесь дать как можно больше информации о возникшей проблеме -- это в конце концов в ваших же интересах чтобы вам помогли...

прежде чем просить помощи в задании
платное решение задач

ресурсы этого топика
ссылка на подборку ресурсов, собранных посетителями этого форума
 


если вам вдруг не отвечают или ответ вас не устраивает
и вообще полезно прочитать всем спрашивающим
 
просьба к пишущим и отвечающим все большие листинги оформлять тегом more
и отключать графические смайлики при размещении фортран-кода

Всего записей: 24961 | Зарегистр. 06-12-2002 | Отправлено: 18:11 14-01-2007 | Исправлено: akaGM, 15:26 15-05-2024
Vskazka

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
FuzzyLogic
или я отстал от жизни, но по мне фортрановский код

Цитата:
integer   N
const (N=1000)
integer a(N)
 

в фортране звучать должен иначе

Цитата:
integer   N
parameter (N=1000)
integer a(N)
 

 

Всего записей: 382 | Зарегистр. 24-11-2003 | Отправлено: 20:09 08-12-2009
FuzzyLogic



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Vskazka
Не, не отстали, это у меня в голове каша.

Всего записей: 1920 | Зарегистр. 27-07-2002 | Отправлено: 20:14 08-12-2009
MegoChelovek



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Ну ежели нет, то прикинте, сколько по-максимум у Вас может быт членов массива а (например 1000) и тогда  
Цитата:integer j, i, k  
 integer a(1000)  
print*, ' vvedite razmer massiva '  
read*, i  

 
это как бы получаеться что у меня будет 1000 зарезервированных элементов в массиве, а у же переменная I будет показывать сколько действительных элементов в массиве....
 
просто в задаче не сказано сколько должно быть элементов, из этого следует что колво элементов должен задавать сам пользователь...

Всего записей: 33 | Зарегистр. 08-12-2009 | Отправлено: 20:22 08-12-2009
FuzzyLogic



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MegoChelovek
Да, так, если хотите чтобы кол-во эл-тов было динамическим, делайте с allocate как вам писал Vskazka

Всего записей: 1920 | Зарегистр. 27-07-2002 | Отправлено: 20:24 08-12-2009
KChernov



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Vskazka

Цитата:
integer   N
parameter (N=1000)
integer a(N)  

А я бы переписал как  

Цитата:
integer,parameter::N=1000
integer a(N)  

 
Добавлено:
terminat0r

Цитата:
Потому-что компиляторы бывают очень разные и  полагаться в этом вопросе на компилятор-  неправильно.  

То есть явного объявления переменной нужного типа недостаточно?
Или это зависит от компилятора?

Всего записей: 2499 | Зарегистр. 20-04-2004 | Отправлено: 20:52 08-12-2009
Vskazka

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
KChernov
я не о том, как в 90 фортране сие объявление описывается и не о том что что лучше 77 или 90, а повторил конструкцию, подивившись сишному const, подумав что в 2000 фортране такое есть.

Всего записей: 382 | Зарегистр. 24-11-2003 | Отправлено: 21:22 08-12-2009
MegoChelovek



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
а вот еще вопрос есть
 
а как правильно прописать чтоб цикл выполнялся например с 10 и до 1,  чтоб как бы уменьшался.....
ну вот например в Паскале это так пишеться for i:=10 down 1 then .....
а как в Фортране такое сделать..

Всего записей: 33 | Зарегистр. 08-12-2009 | Отправлено: 23:34 08-12-2009
FuzzyLogic



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MegoChelovek
do i=10,1,-1
end do
(третий параметр это шаг, просто он по умолчанию 1)

Всего записей: 1920 | Зарегистр. 27-07-2002 | Отправлено: 23:41 08-12-2009
MegoChelovek



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
MegoChelovek  
do i=10,1,-1  
end do  
(третий параметр это шаг, просто он по умолчанию 1)

 Спасибо громадно))) Другу помог теперь пива на халяву попью)!
 
 
 
 
 
 

Всего записей: 33 | Зарегистр. 08-12-2009 | Отправлено: 00:02 09-12-2009
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MegoChelovek
логическая ошибка

Код:
! находим первый отрицательный элемент массива
 do j=1, i
  if a(j)<0  then
   k= a(j)
  !end if
 end do

так ты найдёшь _последний_ элемент, а вот так:

Код:
 do j=1, i
  if (a(j)<0)  then
    k= a(j)
    exit
  end if
 end do
первый...

Всего записей: 24961 | Зарегистр. 06-12-2002 | Отправлено: 13:23 09-12-2009 | Исправлено: akaGM, 18:02 09-12-2009
olpi

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
По поводу буквы "D" в числах. Я тут пропустил много постов, отвечу, почему считаю ее ненужной. Кстати, выше уже ответили, что у всех современных фортран-компиляторов есть опции, задающие размер вещественных чисел. Например, простейшая програмка
 program third
 write(*,*) 1./3
 end
после трансляции с опциями по умолчанию выдаст: 0.333333 - тип результата real*4, соответствующий 7-значной десятичной точности.
Если эту прогу оттранслировать с опцией /real-size:64, то програмка выдаст 0.3333333333333333 - тип real*8 (16 дес. цифр)
Ну а если оттранслировать с опцией /real-size:128, то будет 0.3333333333333333333333333333333333 - тип real*16 (34 дес. цифры)
 
Эти опции действуют на все, что есть вещественного в программе: на константы, переменные, функции. Например, для двойной точности не надо писать DSIN(x), можно оставить SIN(X)  все равно вызовется функция двойной точности (по типу аргумента).  
Раз у всех компиляторов есть такие опции, зачем же тогда для совместимости писать букву "D"? Надо просто сначала разобраться с опциями соответствующего компилятора.
Кстати, ради этой пресловутой буквы "D" в Intel-фортране есть еще опция /double-size:128, которая превращает  real*8 в real*16. Ясно, что сделано это специально для любителей буквы "D"

Всего записей: 116 | Зарегистр. 17-05-2008 | Отправлено: 16:50 09-12-2009
Vskazka

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
olpi
Есть такая вещь, переносимость программы. Если Вы на коленке делаете для себя расчетную программу, то Бога ради делайте что хотите.  Вы помните (если за давностью времени не забыли), что компилировать ее надо с такими-то параметрами на такой-то машине. Но, если Вы планируете программу отпустить от себя, или не надеетесь на память, то надо все делать так, чтобы результат вычислений был на всех машинах и при любых  разумных опциях компилятору один и тот же. Вот тут и пригодится буква D. Так как в норме при присвоении восьмибайтовому числу 1. и 1.D0  получается разный результат.

Всего записей: 382 | Зарегистр. 24-11-2003 | Отправлено: 17:04 09-12-2009
terminat0r



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
olpi
 
У меня есть одно правило- никогда не доверять компилятору. Поэтому я тестирую программу минимум на трех из них.  
 

Цитата:
Эти опции действуют на все, что есть вещественного в программе: на константы, переменные, функции.

Но вы ведь видели как влияет возростание точности для всех переменных на скорость выполнения программы? После перехода с r*8  на r*16 время у вас увеличилось в более чем 1,5 раза.  
Хорошо что ваша задача считается за какое-то количество секунд.
У меня сейчас задачи считаются где-то 1-2 недели в среднем. И просто-так увеличивать время на несколько дней мне абсолютно не хочется.  
 

Цитата:
ти опции действуют на все, что есть вещественного в программе: на константы, переменные, функции. Например, для двойной точности не надо писать DSIN(x), можно оставить SIN(X)

в 90м фортране уже по стандарту элементарные функции работают по типу аргумента.  

Всего записей: 2084 | Зарегистр. 31-03-2002 | Отправлено: 18:47 09-12-2009 | Исправлено: terminat0r, 18:50 09-12-2009
FuzzyLogic



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
olpi

Цитата:
После перехода с r*8  на r*16 время у вас увеличилось в более чем 1,5 раза.  

Вот, вот, это ещё что, а если вы прочтёте мой пост с предыдущей страницы то увидите что из-за моментов с памятью эти 1.5 раза легко превращаются в 10 на определённых приложениях.
 
Как я уже сказал, имхо если что-то считается за секунды - пользуйтесь матлабом и иже с ними. Куда приятнее чем фортран или си.

Всего записей: 1920 | Зарегистр. 27-07-2002 | Отправлено: 18:58 09-12-2009
Vskazka

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
FuzzyLogic
Кстати о птичках. Как я понимаю, сопроцессоры PCшек молотят с 10 байтами. Посему Real*16 на них - сие программная вещь, а не аппаратная. В связи  с чем, как-то утверждение о том, что только в полтора раза дольше ведется счет на персоналках, мне  кажется слегка удивительным. Проверять лень. Вопрос, собственно, ко всем кто в теме. Реально, на сколько удлиняется счет? Вопросы распределения памяти и прочие оптимизационные вещи, оно конечно крайне важны и здорово влияют на время счета, особенно ежели счет идет на сотнях процессоров. Но хотелось бы узнать о чем-то простом, одномерные массивы и всяческие вычисления с float'ами на одном ядре.

Всего записей: 382 | Зарегистр. 24-11-2003 | Отправлено: 19:18 09-12-2009 | Исправлено: Vskazka, 19:19 09-12-2009
terminat0r



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Vskazka

Цитата:
В связи  с чем, как-то утверждение о том, что только в полтора раза дольше ведется счет на персоналках, мне  кажется слегка удивительным.

Да вот же olpi приводил свой пример 2 страницы назад

Цитата:
 
 ...
Для 16-разрядной точности (real*8) ...
Intel64 - 146.07 сек
...
 
Для 34-разрядной точности (real*16) ...
Intel64 - 223.06 сек
...

Всего записей: 2084 | Зарегистр. 31-03-2002 | Отправлено: 19:25 09-12-2009
Vskazka

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
terminat0r
Что такое
Цитата:
Intel64?
Это может быть и Intel Itanium, и Intel Xeon, которые, как я понимаю настоящие 64 разрядные, а может быть  Intel Core, с другой совсем архитектурой.

Всего записей: 382 | Зарегистр. 24-11-2003 | Отправлено: 19:35 09-12-2009 | Исправлено: Vskazka, 19:36 09-12-2009
olpi

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Это у меня на самом деле AMD64. А время счета при переходе от real*8  к real*16 увеличивается не в полтора раза (это было-бы великое счастье!), а примерно в 25 раз. Вы не внимательно читали тот мой пост, я там специально привел небольшое описание решаемой задачи. Для real*8 прогнозирование движения делалось на 1000000 суток,  а для real*16 - всего на 10000 суток. И потом, метод численного интегрирования для real*8 был 15 порядка, а для real*16 - 31 порядка, который сам по себе работает дольше, т.е. решались разные задачи, и по быстродействию их сравнивать нельзя. Я так подобрал просто для того, чтобы не ждать сильно долго пока посчитает. Что же мне запускать пучок из 10000 вероятностных траекторий и ждать несколько суток? Это я к тому, что у меня тоже есть задачи, требующие долгого счета (а не на коленке).
Сравнивать можно только ia32 real*8 c intel64 real*8 и  ia32 real*16 c intel64 real*16, так как в обоих случаях решались одинаковые задачи.
 
 
Добавлено:

Цитата:
Но, если Вы планируете программу отпустить от себя, или не надеетесь на память, то надо все делать так, чтобы результат вычислений был на всех машинах и при любых  разумных опциях компилятору один и тот же. Вот тут и пригодится буква D. Так как в норме при присвоении восьмибайтовому числу 1. и 1.D0  получается разный результат.  

Да ради бога, пишите "D", кому она мешает. А причем здесь память, по промежуточным выдачам сразу будет видно, с какой точностью ведется счет.

Цитата:
У меня есть одно правило- никогда не доверять компилятору. Поэтому я тестирую программу минимум на трех из них.  

 
Я тоже транслирую двумя компиляторами, еще использую Salford Fortran ftn95. Кстати это, похоже единственный компилятор, позволяющий работать с 19-разрядной машинной точностью (как Паскаль), т.е. с типом real*10

Всего записей: 116 | Зарегистр. 17-05-2008 | Отправлено: 19:55 09-12-2009
Vskazka

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
olpi
Ну вот это уже более похоже на правду, хотя 25 мне кажется уже слишком большим. Дело в том, что мне как-то пришлось считать с 300 знаками мантиссы, и по-моему там, на вскидку, было раз в 50 медленнее считать. Впрочем не измерял.  В любом случае, спасибо за информацию.

Всего записей: 382 | Зарегистр. 24-11-2003 | Отправлено: 20:09 09-12-2009
terminat0r



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
olpi

Цитата:
Это я к тому, что у меня тоже есть задачи, требующие долгого счета (а не на коленке).  

тем более?

Цитата:
Я тоже транслирую двумя компиляторами,

Можно поинтересоваться какие?

Всего записей: 2084 | Зарегистр. 31-03-2002 | Отправлено: 20:41 09-12-2009
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы программирования на FORTRAN (ФОРТРАН)


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru