Я работаю над проектом, в котором мне нужно использовать библиотеку Fortran на C. В библиотеке Fortran есть общий блок, содержащий сложный массив * 16, 4x4.Теперь в C комплексная переменная - это просто структура, содержащая два элемента, и, поскольку она сложна * 16, элементы должны быть long double, что является соответствующим типом данных C в Fortran.Итак, у меня есть структура с двумя длинными двойниками.
Я должен получить доступ к элементам этого массива.Хорошо, что я уже могу сделать это вместе со всеми другими общими переменными библиотеки.Проблема в том, что элементы, которые я импортирую из массива:
1) Не в порядке, как должно быть, " даже после учета различия в структуре массива C и Fotran".
2) Хотя большинство элементов правы, два сильно отличаются от того, какими они должны быть.
3) Я получаю правильные элементы (за исключением двух), только если я использую double вместо long double.Когда я использую 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.
Любая помощь будет полезна.