Fortran BLAS giving bad results
On 12-01-2014, at 08:26, Berwin A Turlach <Berwin.Turlach at gmail.com> wrote:
G'day Emmanuel, On Sat, 11 Jan 2014 14:08:41 -0800 Emmanuel Sharef <esharef at gmail.com> wrote:
Example: this program creates two double vectors, takes the dot
product with ddot, and prints the result:
test.f:
subroutine testddot(n,x,y)
integer i,n
double precision x,y,d1(n),d2(n)
do 100 i=1,n
d1(i)=x
d2(i)=y
100 continue
print *,ddot(n,d1,1,d2,1)
end
Compiling
R CMD SHLIB test.f
Mmh, FORTRAN77 does not have dynamical memory allocation (though I have been told that many compilers implement it as an extension to the standard). So I am surprised that this code works. It is certainly not portable (i.e. a compiler that implements the FORTRAN77 standard strictly would barf on this code). Also, output to * in FORTRAN code dynamically linked to R is discouraged, see chapter 5.7 (Fortran I/O) in the "Writing R Extension" manual. From memory, many years ago one could do so (on linux and SUN machines atleast), then it stopped working. I am surprised that it works again. But neither of these two issues are the reason for your strange results. You would have pinpointed your actual problem easily if you would have used my favourite none-FORTRAN77 feature (which is implemented by most compilers as an extension), namely having "implicit none" as the first line in each function/subroutine. (The FORTRAN77 compliant version, AFAIK, was to write "IMPLICIT CHARACTER (A-Z)" into the first line of all functions/subroutines.) Essentially, your routine testddot does not know what kind of result ddot returns and by the implicit type definition rules of FORTRAN77 it expects an INTEGER back.
No. It is expecting ddot to return a REAL result (single precision). Berend
The fact that a DOUBLE PRECISION value is returned when an INTEGER is expected creates some confusion. Somewhere at the start of your routine you have to add a "DOUBLE PRECISION ddot" statement. HTH. Cheers, Berwin ========================== Full address ============================ A/Prof Berwin A Turlach Tel.: +61 (8) 6488 3338 (secr) School of Maths and Stats (M019) +61 (8) 6488 3383 (self) The University of Western Australia FAX : +61 (8) 6488 1028 35 Stirling Highway Crawley WA 6009 e-mail: Berwin.Turlach at gmail.com Australia http://www.maths.uwa.edu.au/~berwin http://www.researcherid.com/rid/A-4995-2008
______________________________________________ R-devel at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel