| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Fortran > [General] операция print не выполняется |
| Автор: Vander91 22.1.2011, 09:44 | ||
вот простая программа, выводящая числа от 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 а почему? |
| Автор: FCM 22.1.2011, 14:53 |
| В указанной программе тип переменной "a" неявно подразумевается REAL. Возможно указанные компиляторы имеют разные настройки по операциям с REAL()-числами. Кроме того, проверять числа с плавающей точкой на точное равенство можно только "если очень хочется", т.е. не рекомендуется. Возможно ситуация изменится, если использовать тип REAL(8), однако задача по сути "целочисленная". Поэтому нужно - либо изменить программу так, чтобы обойтись целыми числами. - либо проверку на прямое равенство REAL - чисел заменить на проверку достаточной малости их разности. причем первое предпочтительнее. (Кроме того, некоторые компиляторы вообще непереваривают, если счетчик цикла - нецелый) (И вообще - долой неявную типизацию и неблочную форму DO-цикла) |
| Автор: Vander91 23.1.2011, 17:05 |
| всё ясно, спасибо, тут по умолчанию в записи чисел используется 8 знаков вместе с точкой, поэтому получалось 5001**2/10**5=250.1000 а не 250.10001 но ведь часто необходимо использовать очень большие числа, в том числе помнить много знаков после запятой. предположим, слева от запятой мне нужно помнить 8 знаков, справа поле запятой тоже, не меньше: 12345678.12345678 каким образом задать это условие? я плохо знаю фортран, помню в паскале было что-то подобное. |