From murdoch.duncan at gmail.com  Wed May  4 14:58:22 2011
From: murdoch.duncan at gmail.com (Duncan Murdoch)
Date: Wed, 04 May 2011 08:58:22 -0400
Subject: [Rd] Error in .Fortran Call
In-Reply-To: <1304512008660-3495319.post@n4.nabble.com>
References: <1304512008660-3495319.post@n4.nabble.com>
Message-ID: <4DC14D6E.1000602@gmail.com>

On 04/05/2011 8:26 AM, vioravis wrote:
> I have the following FORTRAN code converted to a DLL:
>
> ! my_xmean.f90
> !
> ! FUNCTIONS/SUBROUTINES exported from my_function.dll:
> ! my_function - subroutine
> !
> subroutine my_xmean(X,N,XMEAN)
>
> ! Expose subroutine my_function to users of this DLL
> !
> !DEC$ ATTRIBUTES DLLEXPORT,C,REFERENCE,ALIAS:'my_xmean_'::my_xmean
>
> ! Body of my_function
>
> DOUBLE PRECISION X(N)
>
> XMEAN=0D0
> DO J=1,N
> XMEAN=XMEAN+X(J)
> END DO
> XMEAN=XMEAN/N
> RETURN
> end subroutine my_xmean
>
>
>
> When I call this DLL from R, it gets loaded properly but the values of XMEAN
> calcualted are way off:
>
>
> x<- 1:6
>
> >  .Fortran("my_xmean",as.double(X),as.integer(length(X)),double(1))
>
> [[1]]
> [1] 1 2 3 4 5 6
>
> [[2]]
> [1] 6
>
> $xmean
> [1] 5.336073e-315
>
> Can someone please let me what is causing this huge difference??? Thank you.

I don't see a declaration of its type in the Fortran code, so it 
probably defaulted to REAL, not DOUBLE PRECISION.

Duncan Murdoch



[Rd] Error in .Fortran Call
Duncan Murdoch