Fortranの等価文

私はfortranからJAVAにアプリケーションを移植しています.2つの異なるデータ型の間に等価性がある場合、どのように変換するのかと思いました。

私がキャストを入力すると、データが失われるか、バイト配列として渡す必要がありますか?

2
EQUIVALENCE が最初に使用された理由は、メモリ上で「安い」か、「構造」を提供するために行われたかということです。異なる表現で同一のデータを提供するために行われたか?私はあなたのために感じています。それは、FORTRANコードの理解とデバッグを大幅に複雑にする大変恐ろしい機能でした。 Javaに移行するには、特別な注意が必要です。
追加された 著者 sarnold,

2 答え

古いFORTRANコードを完全に理解しておく必要があります。 EQUIVALENCEは、異なるデータ型間の値を変換せずにメモリを共有します。おそらく、プログラマは、同時に使用されなかった配列を重複させることによってメモリを節約していて、等価性は無視できます。おそらく、彼らは特定のプラットフォームのバイナリ表現に基づいて、非常にトリッキーな何かをしていたでしょうし、彼らが何をしているのか把握する必要があります。

現代のFortranで等価を使用する理由はほとんどありません。ビットを変換せずにあるタイプから別のタイプに転送する必要があるほとんどの場合、TRANSFER組み込み関数を代わりに使用する必要があります。

3
追加された
コード:program CheckEquivalence整数* 8 intarray(4)real * 8 realarray(4)等価性(realarray、intarray)realarray(3)= 3 intarray(4)= 4 realarray(1)= 1.0 realarray(2)= 2.0 do i =すべてのint、intarray(i)、i = 1,4 write() )最後のint '、intarray(4)end' '最後のint' '、最後のint' '、
追加された 著者 Kittu,
出力:すべて実数1.すべて実数2.すべて実数3.実数1.97626258E-323すべてint 4607182418800017408すべてint 4611686018427387904すべてint 4613937818241073152すべてint 4いくつかの実数1.ある実数2.ある実数3.最後の整数4等価性がどのように機能するかを理解するためのサンプルコード。私は、データフォーマットが内部的に格納されているデータであることを知りたいと思います。しかし、メモリの場所は同じですが、印刷データは2つの異なるフォーマットになっています。
追加された 著者 Kittu,

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

EQUIVALENCEステートメントは、プログラム単位内の2つ以上のエンティティによるストレージユニットの共有を指定するために使用されます。これにより、ストレージユニットを共有するエンティティの関連付けが行われます。

     

等価エンティティのデータ型が異なる場合、EQUIVALENCE文は型変換を引き起こさず、数学的等価性を暗示しません。変数と配列が等価である場合、配列には変数のプロパティはありません。

それで、Fortranコードの EQUIVALENCE という理由を考え、そこから進める方法を決定します。あなたの質問には、それを変換する意図または最良の方法を評価するのに十分な情報がありません。

2
追加された