soccer jersey forums.silverfrost.com :: View topic - errors detection for matmul
forums.silverfrost.com Forum Index forums.silverfrost.com
Welcome to the Silverfrost forums
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

errors detection for matmul

 
Post new topic   Reply to topic    forums.silverfrost.com Forum Index -> Suggestions
View previous topic :: View next topic  
Author Message
AntonioGJerez



Joined: 01 Jun 2015
Posts: 9
Location: Spain

PostPosted: Tue Jun 02, 2015 7:17 pm    Post subject: errors detection for matmul Reply with quote

Dear Friends

I am translating MATLAB code into Fortran and I can't understand some particularities of the latter which makes me waste too much time. For example, matmul(x,y) provides absurds results without any warning if x and y are of differen type (while element by element multiplication works fine with mixed types).
I suggest including (at least) some warning or runtime error.

Regards


program bug2
complex*8 c(2,2)
real*8 b(2,2)

b=dble(reshape((/1.,2.,3.,4./),(/2,2/)))
c=cmplx(reshape((/1.,2.,3.,4./),(/2,2/)))

write(*,*)'mixed type element by element multiplication works well:'
write(*,*)'mixed types:',c*b
write(*,*)'same types:',c*cmplx(b)
write(*,*)

write(*,*)'mixed type matrix multiplication works awful:'
write(*,*)'mixed types:',matmul(c,b)
write(*,*)'same types:',matmul(c,cmplx(b))

end program
Back to top
View user's profile Send private message
mecej4



Joined: 31 Oct 2006
Posts: 1896

PostPosted: Wed Jun 03, 2015 12:29 am    Post subject: Reply with quote

I'm afraid that this is not a practical suggestion, for the following simple reason. If, for you, a set of warnings are provided about how Fortran semantics differ from Matlab semantics, similar sets of warnings would be expected by Excel users, Basic users, C programmers, Mathematica users, etc. Every program would produce so many unwanted warnings that most users would feel insulted, and Fortran programming would no longer be a pleasurable activity.

Matlab does not warn Fortran programmers, does it?
Back to top
View user's profile Send private message
AntonioGJerez



Joined: 01 Jun 2015
Posts: 9
Location: Spain

PostPosted: Wed Jun 03, 2015 10:13 am    Post subject: Reply with quote

Well, I disagree with you. Maybe my introduction about Matlab was unnecesary. I only wanted to show an example where the behavior of ftn95 seems weak and Matlab performs reasonably.
Forget about Matlab and go to this case.

Which is the fundamental reason for requiring the same types in A and B in matmul(A,B) whereas it is required neither in the "developed calculation" out(i,j)=A(i,1)*B(1,j)+A(i,2)*B(2,j)+... nor in a element by element multiplication out(i,j)=A(i,j)*B(i,j)?

Is it unreasonable at least a compiler warnining? The ftn95 compiler does provide useful warning when procedures are called with unmatching variable types
Back to top
View user's profile Send private message
mecej4



Joined: 31 Oct 2006
Posts: 1896

PostPosted: Wed Jun 03, 2015 2:24 pm    Post subject: Reply with quote

After running your program, I agree that FTN95 has a bug that occurs when MATMUL is used to multiply a single-precision complex matrix with a double-precision real matrix. I have reported this with a simplified version of your program at http://forums.silverfrost.com/viewtopic.php?p=18249#18249 .

This bug is a routine compiler bug, and need not be discussed as part of a comparison between Matlab and Fortran. If you try either example program with a compiler other than FTN95, you will find that the Fortran program behaves as specified in Fortran language rules. Note that CMPLX(A), where A is double precision real, gives only a single-precision complex matrix. In general, such usage can cause loss of precision, to avoid which you can specify the KIND=kind optional argument to CMPLX. I agree that when CMPLX is called in this way the compiler should give a warning unless warnings are turned off. Mixed-mode expression are so frequently used in Fortran programs that many compilers do not issue corresponding warnings when no explicit warnings request is made.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    forums.silverfrost.com Forum Index -> Suggestions All times are GMT + 1 Hour
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group