pir0texnik2
Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Спасибо за наводку!! Практически заработало, за исключением... в с++ написал.... Код: typedef void (__stdcall *sub_fortran_1)(const double*,const int*,const int*,double*,const int*,const int* ); int s1i=2,s2i=4,s1o=2,s2o=4; vector<vector<double> > in_dim(s1i); vector<vector<double> > out_dim(s1o); for(int i=0;i<s1i;i++) in_dim[i].resize(s2i); for(int i=0;i<s1o;i++) out_dim[i].resize(s2o); for(int i=0;i<s1i;i++) for(int j=0;j<s2i;j++) in_dim[i][j]=(i+1)*(j+1); test (&in_dim[0][0],&s1i,&s2i,&out_dim[0][0],&s1o,&s2o); | на фортране Код: subroutine test (in_dim,s1i,s2i,out_dim,s1o,s2o) !DEC$ ATTRIBUTES DLLEXPORT :: TEST implicit none Integer, intent(in) :: s1i, s2i Integer, intent(in) :: s1o, s2o real(8), intent(in) :: in_dim(s2i,s1i) real(8), intent(out) :: out_dim(s2o,s1o) | и вот, что вижу в отладчике... Код: - IN_DIM {...} REAL(8) IN_DIM(1,1) 1.00000000000000 REAL(8) IN_DIM(2,1) 2.00000000000000 REAL(8) IN_DIM(3,1) 3.00000000000000 REAL(8) IN_DIM(4,1) 4.00000000000000 REAL(8) IN_DIM(1,2) 1.752714624041975E-154 REAL(8) IN_DIM(2,2) 2.127420912385896E-314 REAL(8) IN_DIM(3,2) 4.668390740321225E-313 REAL(8) IN_DIM(4,2) 5.424720239319302E-317 REAL(8) | Почему неправильная часть матрицы? Что потерялось?? Правильно, независимо от размера матрицы отображается только первый столбец, дальше идет какое-то чередование, где индекс нечетный - правильно со сдвижкой на один адрес вниз, где четный - ерунда... | Всего записей: 173 | Зарегистр. 27-02-2008 | Отправлено: 06:53 20-02-2009 | Исправлено: pir0texnik2, 06:54 20-02-2009 |
|