Реальная проблема переноса по умолчанию - PullRequest
0 голосов
/ 09 октября 2009

Я портировал некоторый код Fortran из Fortran PowerStation (4.0) в компилятор Fortran 11 (2003). Чтобы сохранить значения double и real между старым и новым компилятором, я изменил properties>fortran>data>"Default Read Kind" с 4 на 8. Теперь проблема в том, что глобальные переменные не поддерживают данные из одного файла в другой.

Предположим, я создал переменную real*8 с именем abc в одном файле как глобальную переменную (COMMON/test/abc). Он изменяется в одном файле и используется в другом файле. При проверке значения переменной abc во втором файле обнаруживается, что она не содержит измененных данных. Это происходит только когда я меняю "Default Real Kind" на 8.

Есть ли другие параметры, которые мне нужно изменить в окне свойств?

Пожалуйста, дайте решение. Заранее спасибо.

1 Ответ

1 голос
/ 09 октября 2009

Мне немного непонятно, какой компилятор вы используете, какие изменения вы сделали и так далее, поэтому мой ответ немного колеблющийся.

Я не уверен, что изменение реального вида по умолчанию с 4 на 8 сохраняет значения, как вы думаете. Вы, кажется, думаете, что real (kind = 4) в вашем старом компиляторе означает то же самое, что real (kind = 8) в вашем новом компиляторе. Это может быть правдой, но мне это кажется немного маловероятным.

Однако, не думайте, что real (kind = 4) должен означать 4-байтовое число с плавающей точкой, соответствующее IEEE, или что real (kind = 8) должен означать fp IEEE 8 байтов число. Это верно для большинства компиляторов, конечно, для всех компиляторов, которые я недавно использовал, но это не требуется стандартом Fortran. Возможно, ваш старый компилятор имел в виду нечто иное, чем ваш новый компилятор.

Наконец, у меня обычно возникают проблемы с общими блоками, когда я меняю размеры реальных чисел в программах на Фортране. Лучшее решение - заменить общие блоки переменными модуля. Если вы не можете этого сделать, очень внимательно проверьте общие объявления, помня, что common - это инструкция для компилятора о том, как размещать переменные в памяти. Если вы измените размер переменной в одном объявлении общего блока, но не в другом, у вас будут проблемы.

Привет

Mark

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...