2011-12-19 2 views
2

Я переношу приложение из fortran в JAVA. Мне было интересно, как преобразовать, если эквивалентность между двумя различными типами данных.утверждения эквивалентности в fortran

Если я печатаю буквой, я могу потерять данные или передать это как массив байтов?

+0

Это действительно зависит от того, _why_ 'EQUIVALENCE' был использован в первую очередь - это было сделано, чтобы быть« дешевым »в памяти, или было сделано, чтобы обеспечить« структуры », или было сделано для предоставления идентичных данных в разные представления? Я чувствую, что это была ужасная функция, которая значительно усложнила понимание и отладку кода FORTRAN. Перемещение на Java потребует особой осторожности. – sarnold

ответ

2

От http://www.fortran.com/F77_std/rjcnf0001-sh-8.html#sh-8.2:

заявления эквивалентности используется для определения совместного использования единиц хранения двух или более лиц в программном модуле. Это вызывает объединение объектов, которые разделяют единицы хранения.

Если эквивалентные объекты имеют разные типы данных, оператор EQUIVALENCE не вызывает преобразование типа или подразумевает математическую эквивалентность. Если переменная и массив эквивалентны, переменная не имеет свойств массива, а массив не имеет свойств переменной.

Итак, рассмотрите причину, по которой это было EQUIVALENCE 'd в коде Fortran и решить, как действовать дальше. В вашем вопросе недостаточно информации для оценки намерения или наилучшего способа его преобразования.

2

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

Существует очень мало оснований использовать ЭКВИВАЛЕНТНОСТЬ в современном Фортране. В большинстве случаев, когда бит необходимо передавать из одного типа в другой без преобразования, вместо него следует использовать внутреннюю функцию TRANSFER.

+0

Код: Программа CheckEquivalence целое число * 8 INTArray (4) реальный * 8 realarray (4) эквивалентности (realarray, INTArray) realarray (3) = 3 INTArray (4) = 4 realarray (1) = 1,0 realarray (2) = 2,0 сделать я = 1,4 записи (*, *) 'Все реальные', realarray (я) ENDDO сделать я = 1,4 записи (*, *) 'Все int', intarray (i) enddo ли я = 1,3 записи (*, *) 'Некоторый реальные', realarray (I) ENDDO записи (*, *) 'Последнего INT', INTArray (4) конца – Kittu

+0

выхода: Всего реальный 1. Все реальные 2. Все реальные 3. Все реальные 1.97626258E-323 Все Int 4607182418800017408 Все Int 4611686018427387904 Все Int 4613937818241073152 Все ИНТ 4 Некоторые реальные 1. Некоторые реальные 2. Некоторые реальные 3. Last int 4 Я попробовал один пример кода, чтобы понять, как работает эквивалентность. Я хотел бы знать, в каком формате данных хранятся данные внутри и , хотя расположение памяти одинаково, поэтому его данные печати в двух разных форматах. – Kittu

Смежные вопросы