C で Fortran ライブラリを使用する必要があるプロジェクトに取り組んでいます。Fortran ライブラリには、複素数 * 16、4x4 配列を含む共通ブロックがあります。現在 C では、複素数変数は単純に 2 つの要素を含む構造体であり、complex*16 であるため、要素は long double である必要があります。これは、Fortran で対応する C データ型です。したがって、2 つの long double を持つ構造体があります。
この配列の要素にアクセスします。良いことは、ライブラリの他のすべての共通変数と一緒に、すでにそれを行うことができるということです。問題は、配列からインポートする要素が、
1) 「 C と Fotran の配列構造の違いを考慮しても」本来あるべき順序ではありません。
2) ほとんどの要素は正しいですが、2 つの要素はあるべき姿とは大きく異なります。
3) long double の代わりに double を使用する場合にのみ、正しい要素 (2 つを除く) を取得します。long double (および正しい文字変換) を使用すると、まったく異なるものが得られます。これは、変換の問題を明確に示しています。
私が持っていたすべての説明を使い果たしましたが、何もうまくいきません。C で配列をプライティングするための私のコードは次のとおりです。
for (j=0;j<=3;j++){
printf("%s", "\n");
for(k=0;k<=3;k++){
printf("%s %d %s %d %s %s %LE %s %LE %s",
"(", k+1, "," ,j+1, ")", "{",
(long double)mssmmixing_.neunmx[k][j].dr,
" ",
(long double)mssmmixing_.neunmx[k][j].di,
"}\n");
}
}
追加情報: Fortran オブジェクト ファイルを混在させる必要があるため、gfortran を使用して C ファイルをコンパイルしています。代わりに GNU C コンパイラを使用すると、gfortran ルーチンを認識しないというエラーがスローされます。これも問題の原因である可能性があります。gfortran が C の long double を認識しない可能性があります。
どんな助けでも役に立ちます。