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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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

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

akaGM

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

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

ресурсы этого топика
ссылка на подборку ресурсов, собранных посетителями этого форума
 
то, чем мы решили поделиться
ссылка на страничку программ etc собственного изготовления, которыми любезно делятся наши форумчане


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

Всего записей: 24056 | Зарегистр. 06-12-2002 | Отправлено: 18:11 14-01-2007 | Исправлено: akaGM, 09:47 01-03-2020
olpi

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

Цитата:
тем более?

Это вы к чему и о чем?
 
Про компилятор я же выше написал: Salford Fortran FTN95, версия 5.3. Вот ссылка
 http://www.silverfrost.com/11/ftn95/ftn95_fortran_95_for_windows.aspx
А первый - Intel Fortran 11.0
Есть еще Fortran Power Station 4.0 (предшественник IF), но это несерьезно, так как он глючный, например результаты счета в нем меняются, если добавить в прорамму еще один оператор write

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



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Я спросил о компиляторах, так как мне просто интересно что под  виндовсом сейчас актуально.
 
вот кстати сравнение
http://www.polyhedron.com/pb05-win32-language0html
http://www.polyhedron.com/pb05-linux-language0html
ftp://ftp.nag.co.uk/sc22wg5/N1601-N1650/N1648.pdf

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



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Раз столько разговора о размерах типах, просветите, а зачем LOGICAL*n бывает 1,2,4,8 ?  
 .false._1 - ложь, .false._4 - наглая ложь?

Всего записей: 173 | Зарегистр. 27-02-2008 | Отправлено: 04:50 10-12-2009
akaGM

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

Цитата:
.false._1 - ложь, .false._4 - наглая ложь?

.true._1 - правда, .true._2 - только правда, .true._4 - ничего кроме правды
гы-гы
 
на 16-разрядном процессоре быстрее адресовать 16-битник, чем маскировать его половину, на 32 -- соответственно...
 
terminat0r
под виндовс щас будет актуален Go, Google, Go!
http://golang.org/
может и не шутка...

Всего записей: 24056 | Зарегистр. 06-12-2002 | Отправлено: 08:57 10-12-2009 | Исправлено: akaGM, 09:25 10-12-2009
olpi

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

Цитата:
Vskazka:Ну вот это уже более похоже на правду, хотя 25 мне кажется уже слишком большим. Дело в том, что мне как-то пришлось считать с 300 знаками мантиссы, и по-моему там, на вскидку, было раз в 50 медленнее считать. Впрочем не измерял.  

 
Сделал тестовые просчеты: одну и ту же программу транслировал с опцией /real-size:64 (16-значная точность real*8) и с опцией /real-size:128 (34-значная точность real*16). Кроме того, опять же транслировал двумя компиляторами - 32-разрядным ifort.exe, находящимся в папке C:\\Program Files (x86)\Intel\Compiler\11.0\066\fortran\Bin\IA32\, и 64-разрядным ifort.exe из папки  C:\\Program Files (x86)\Intel\Compiler\11.0\066\fortran\Bin\intel64\, т.е. получал два экзэшника - 32-разрядный и 64-разрядный.  
При трансляции во всех случаях задавалась опция оптимизации по скорости /Ox
 
Результаты по времени счета такие:
32-разрядный экзэшник:
real*8 - 13.85 сек
real*16 - 865.49 сек
64-разрядный экзэшник:
real*8 - 13.95 сек
real*16 - 512.17 сек
 
Опять получается, что смена кода с 32-битового на 64-битовый не влияет на скорость вычислений с обычной двойной точностью real*8. А вот при вычислениях с расширенной точностью real*16 выигрыш заметный 865.49/512.17=1.69.  
Значит, когда сравнивается сорость счета с типом real*8 и real*16 надо уточнять, для какой архитектуры процессора -  
для 32-разрядного 865.49/13.85=62.5
для 64-разрядного 512.17/13.95=36.7
 
 
 
 
Добавлено:
Скажите, может кто знает, существуют ли сейчас компиляторы фортрана, поддерживающие тип real*12, соответсвующий десятичной точности в 25 цифр? Я знаю, что в советское время на тех громадных машинах, например, БЭСМ-6, был фортран, у которого числа одинарной точности занимали 6 байт (real*6), а двойной точности - 12 байт (real*12). Для наших задач такая точность была бы (и когда-то была) оптимальной. А теперь приходится использовать тип real*16, точность которого, мягко говоря, избыточна.  Может, где-нибудь есть такой фортран?
Вообще если посмотреть на ряд размеров вещественных чисел 4, 8, 16, то видно, что в нем дыра - явно не хватает типа real*12. Хорошо бы как-нибудь подкинуть идейку насчет этого тому же Интелу, такому фортрану цены бы не было.

Всего записей: 116 | Зарегистр. 17-05-2008 | Отправлено: 17:02 10-12-2009
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
olpi
афаик, единственным компилятором на РC с real=6 был борландовский TP/BP

Код:
D:>D:\BP\bpc r6.pas
Borland Pascal  Version 7.0  Copyright (c) 1983,92 Borland International
R6.PAS(1)
R6.PAS(1)
R6.PAS(3)
R6.PAS(3)
3 lines, 2176 bytes code, 670 bytes data.
 
D:>D:\BP\r6.exe
sieof(real) = 6

 
---
да, сам-то код:
begin
  writeln(sizeof(real))
end.
 

Цитата:
Хорошо бы как-нибудь подкинуть идейку насчет этого тому же Интелу, такому фортрану цены бы не было

фиговая идейка, имхо, т.к. это не 2^n, а, след., код, мягко говоря, будет небыстрый...

Всего записей: 24056 | Зарегистр. 06-12-2002 | Отправлено: 17:30 10-12-2009 | Исправлено: akaGM, 19:10 10-12-2009
Vskazka

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
olpi
Спасибо, хотя честно говоря не очень ясно, почему
Цитата:
Опять получается, что смена кода с 32-битового на 64-битовый не влияет на скорость вычислений с обычной двойной точностью real*8. А вот при вычислениях с расширенной точностью real*16 выигрыш заметный 865.49/512.17=1.69.  

 Но, похоже, чтобы сообразить - надо лезть в архитектуру и структуры библиотек

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

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вся арифметика real*8 на Intel'ах выполняется аппаратно (на сопроцессоре), поэтому скорость выполнения на ia32 и 86x64 приблизительно одинаковая. Даже на ia32 немножко быстрее, за счет того, что целая арифментика 32-х битная и данные пересылаются быстрее.
Двумя страницами раньше тут приводилась выдержка из докуменации Intel'а, смысл которой в том, что арифметика real*16 выполняется с помощью целочисленной арифметики. А так как на 86x64 надо обработать два 64-х битных слова, против 4 32-х битных для ia32, то ничего странного нет в том, что такие расчеты на 86x64 выполняются в 1.6 раза, чем на ia32, но в 37 раз медленней, чем с помощью аппаратной реализации.

Всего записей: 12 | Зарегистр. 25-04-2009 | Отправлено: 19:02 10-12-2009 | Исправлено: plasmon, 19:43 10-12-2009
olpi

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

Цитата:
фиговая идейка, имхо, т.к. это не 2^n, а, след., код, мягко говоря, будет небыстрый

Сначала подумайте, прежде чем что-то говорить. Или вы просто любите сразу все охаивать?  Код с типом real*12 будет значительно быстрее, чем с типом real*16, который тоже реализован программно. Ну и что, что 2^n? Почему же раньше к этой магической степени не привязывались? Я имею в виду старые машины. Да и на Турбо-паскале есть 6-байтовый тип real, который считает быстрее, чем 8-байтовый double, я проверял, так как работал и на Паскале.
Где-то за рубежом есть современные компьютеры, на которых машинно реализованы типы real*6/12. Сразу не вспомню, какой марки. Именно для таких компов в Инете выкладываются фортран-программы с числами двойной точности, имеющими 25 цифр. Вот, например:
http://iau-sofa.hmnao.com/2009_0201_F/sofa/nut00a.html

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

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
real*6 точно не будет быстрее чем real*8, т.к. Intel оперирет 4-х байтными словами, а real*6 это 1.5 слова. Поэтому процессору все равно прийдется обрабатыват 2 слова. А вот real*12 будет быстрее чем real*16 на платформе ia32, но медленнее на 86x64. (См. мой предыдущий пост) Но Intel'у лень с этим заморачиватьс, и я его понимаю

Всего записей: 12 | Зарегистр. 25-04-2009 | Отправлено: 19:42 10-12-2009 | Исправлено: plasmon, 19:45 10-12-2009
akaGM

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

Цитата:
Сначала подумайте, прежде чем что-то говорить. Или вы просто любите сразу все охаивать?  

"а что тут думать, тряс... охаивать надо" :)
 

Цитата:
Почему же раньше к этой магической степени не привязывались? Я имею в виду старые машины? например, БЭСМ-6, был фортран, у которого числа одинарной точности занимали 6 байт (real*6), а двойной точности - 12 байт (real*12)

фортран-то был, только разрядность бэсм была 48 бит...

Всего записей: 24056 | Зарегистр. 06-12-2002 | Отправлено: 20:52 10-12-2009
olpi

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

Цитата:
real*6 точно не будет быстрее чем real*8, т.к. Intel оперирет 4-х байтными словами, а real*6 это 1.5 слова.

Действительно, теперь это так. Проверил на Турбо-паскале, с типом real (6 байт) считает просто невообразимо медленнее, чем с типом double (8 байт). Я сравнивал их очень давно (где-то в начале 90х) на старых машинах, по-моему еще до  IBM2086, так тогда получалось наоборот.

Всего записей: 116 | Зарегистр. 17-05-2008 | Отправлено: 07:22 11-12-2009
olpi

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

Цитата:
фортран-то был, только разрядность бэсм была 48 бит...

Я как раз об этом и говорил, что эти типы real*6/12 были реализованы машинно

Всего записей: 116 | Зарегистр. 17-05-2008 | Отправлено: 22:40 11-12-2009
KChernov



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А real*10 - не вариант?

Всего записей: 2471 | Зарегистр. 20-04-2004 | Отправлено: 22:49 11-12-2009
olpi

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
С real*10 мы все время работаем на Salford-фортране. Раньше на фортране такого типа почему-то вообще не было, и это странно, так как процессоры 8086 по архитектуре 80-битовые. Когда-то я перешел с фортрана на паскаль именно по этой причине. На паскале (Turbo Pascal, Delphi) 80-битовый тип  extended является базовым, используемым по умолчанию. Например, если разделить целое на целое, то результат имеет тип extended (10 байт) и не надо ни о чем думать - все расчеты происходят с 19-разрядной десятичной точностью. А вот на фортране только некоторый компиляторы позволяют с ним работать, и то почему-то только на платформе Windows :
Да и на Salford-фортране поддержка этого типа недоработана: константы, заданные с помощью оператора PARAMETER(), все равно остаются типа real*8. Поэтому приходится задавать их только оператором DATA

Всего записей: 116 | Зарегистр. 17-05-2008 | Отправлено: 08:03 12-12-2009
olpi

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

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

Забыл тут напомнить, что опция /real-size:64 действует на все, что есть вещественного в программе, в том числе и на константы. Поэтому при трансляции с этой опцией число 1. представляется в виде 1.000000000000000 и никакой потери точности не будет. Так что буква "D"  в числах совершенно не нужна.

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

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
olpi
Я имел в виду переносимость кода на другие платформы и независимость получившегося результата от опций компилятора. Иначе слишком много привходящих вещей надо добавлять в комментарии к коду. Ежели же код программы сделан для разового применения - так Бога ради, как проще, так писать и надо.

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

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ну если для переносимости. Хотя современный фортран на всех платформах имеет опции, задающие размер вещественных чисел. Я имею в виду фортран-90, а на фортране-77 действительно буква D была необходима, без нее верными в числе оставались только 7 первых цифр, а дальше сидел мусор.  

Всего записей: 116 | Зарегистр. 17-05-2008 | Отправлено: 18:18 13-12-2009
MegoChelovek



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Хлопци , а подскажите как найти корень третьей степени из числа.....чё то в стандартных функциях такого нету, ну или я плохо ищу
 
Добавлено:
блииииин, я врубилсо этож просто типа число в степени 1/3 ))))))
 
вот и поговорил сам с собой )))

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

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Только не в степени 1/3, а в степени 1./3  
Точка после единицы, а то будет в нулевой степени (1/3=0)

Всего записей: 116 | Зарегистр. 17-05-2008 | Отправлено: 20:57 15-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

Компьютерный форум 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