![]() |
|
|
![]()
|
|
| Vander91 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 22.1.2011 Репутация: нет Всего: нет |
вот простая программа, выводящая числа от 1 до 10000, квадраты которых оканчиваются на 10001:
на установленном Compaq Visual Fortran Professional v6.5 всё выводится нормально: http://s012.radikal.ru/i319/1101/d6/f20a90625363.png а в MS Visual Studio 2008 с установленным Intel Visual Fortran Compiler 11 ничего не выводится: http://i068.radikal.ru/1101/1e/96fe276c8400.jpg а почему? Это сообщение отредактировал(а) kemiisto - 25.1.2011, 02:13 |
|||
|
||||
| FCM |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 461 Регистрация: 30.3.2009 Репутация: 8 Всего: 9 |
В указанной программе тип переменной "a" неявно подразумевается REAL.
Возможно указанные компиляторы имеют разные настройки по операциям с REAL()-числами. Кроме того, проверять числа с плавающей точкой на точное равенство можно только "если очень хочется", т.е. не рекомендуется. Возможно ситуация изменится, если использовать тип REAL(8), однако задача по сути "целочисленная". Поэтому нужно - либо изменить программу так, чтобы обойтись целыми числами. - либо проверку на прямое равенство REAL - чисел заменить на проверку достаточной малости их разности. причем первое предпочтительнее. (Кроме того, некоторые компиляторы вообще непереваривают, если счетчик цикла - нецелый) (И вообще - долой неявную типизацию и неблочную форму DO-цикла) Это сообщение отредактировал(а) FCM - 22.1.2011, 14:56 |
|||
|
||||
| Vander91 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 22.1.2011 Репутация: нет Всего: нет |
всё ясно, спасибо, тут по умолчанию в записи чисел используется 8 знаков вместе с точкой, поэтому получалось 5001**2/10**5=250.1000 а не 250.10001
но ведь часто необходимо использовать очень большие числа, в том числе помнить много знаков после запятой. предположим, слева от запятой мне нужно помнить 8 знаков, справа поле запятой тоже, не меньше: 12345678.12345678 каким образом задать это условие? я плохо знаю фортран, помню в паскале было что-то подобное. |
|||
|
||||
| Фантом |
|
||||
![]() Вы это прекратите! ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1516 Регистрация: 23.3.2008 Репутация: 5 Всего: 49 |
Использовать тип real(8) (или больший, если позволяет компилятор). И лучше отказаться от использования архаичных средств сязыка (типизации по умолчанию, цикла с меткой, сравнения .eq. и т.п.). Кстати, Ваша задача решается куда проще вообще без использования вещественного типа - достаточно использовать integer(8), в него поместится все необходимое.
|
||||
|
|||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Fortran | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |