
dll Fortran en Excel, devuelve resultado erróneo (redondea a 1.00000000)
Publicado por Miguel (1 intervención) el 11/09/2016 05:16:32
Saludos a todos.
Primero agradezco de forma anticipada cualquier comentario o sugerencia, seran de mucha ayuda.
Tengo un problema, del que no puedo detectar su origen. Como dice el título, se trata de una dll fortran que conecto a Excel 2016, mediante VBA 7.1. La dll tiene varias funciones el problema está en una de ellas que por razones que no logro comprender me devuelve un valor redondeado REAL. El código fortran de esta función es el siguiente:
El código de VBA, es el siguiente:
La función debe devolver valores entre: 0. y 1. del tipo REAL*8, compatible con el tipo Duoble de VBA. Pero me redondea todo al valor 1.0000000, como se puede ver en la imagen:

Subrayado en rojo se encuentra los valores devueltos por la función. Probé los resultados de cada operación, por ejemplo: "pv = (10 ** (a-(b/(c + temp))))" [1] y devolví ese valor como respuesta, y esos datos son los valores junto a la columna subrayada. El problema surge al multiplicar por: "(x/penv)", en ese punto el valor se vuelve 1.00000000. También intente usando una función que calcula solo [1]; y luego usaba valores de las celdas de Excel para completar la ecuación, y obtengo el mismo resultado. Probé si había problemas con aritmética combinada (REAL-INTEGER), use funciones de conversión, cambie la declaración de VBA, use una interface con otra función de la misma librería que calcula [1], pero obtengo el mismo resultado.
Pregunte por otros foros y me suguieren que use Subrutinas, en lugar de funciones, pero como esta operación solo devuelve un único valor mantengo mi decisión de usar una función en lugar de una subrutina.
Primero agradezco de forma anticipada cualquier comentario o sugerencia, seran de mucha ayuda.
Tengo un problema, del que no puedo detectar su origen. Como dice el título, se trata de una dll fortran que conecto a Excel 2016, mediante VBA 7.1. La dll tiene varias funciones el problema está en una de ellas que por razones que no logro comprender me devuelve un valor redondeado REAL. El código fortran de esta función es el siguiente:
1
2
3
4
5
6
7
8
9
10
FUNCTION AntYComp(a, b, c, x, penv, temp)
IMPLICIT NONE
!GCC$ ATTRIBUTES DLLEXPORT, STDCALL :: AntYComp
REAL*8, INTENT(IN) :: a, b, c, x, temp, penv
REAL*8 :: pv, AntYComp
pv = (10 ** (a-(b/(c + temp))))
AntYComp = pv * (x/penv)
RETURN
END FUNCTION
El código de VBA, es el siguiente:
1
2
Declare Function AntYComp Lib "G:\Proyectos\Excel\VLE\LibraryFortran\vlelibrary\bin\Debug\vlelibrary.dll" _
Alias "antycomp_@24" (a As Double, b As Double, c As Double, x As Double, penv As Double, temp As Double) As Double
La función debe devolver valores entre: 0. y 1. del tipo REAL*8, compatible con el tipo Duoble de VBA. Pero me redondea todo al valor 1.0000000, como se puede ver en la imagen:

Subrayado en rojo se encuentra los valores devueltos por la función. Probé los resultados de cada operación, por ejemplo: "pv = (10 ** (a-(b/(c + temp))))" [1] y devolví ese valor como respuesta, y esos datos son los valores junto a la columna subrayada. El problema surge al multiplicar por: "(x/penv)", en ese punto el valor se vuelve 1.00000000. También intente usando una función que calcula solo [1]; y luego usaba valores de las celdas de Excel para completar la ecuación, y obtengo el mismo resultado. Probé si había problemas con aritmética combinada (REAL-INTEGER), use funciones de conversión, cambie la declaración de VBA, use una interface con otra función de la misma librería que calcula [1], pero obtengo el mismo resultado.
Pregunte por otros foros y me suguieren que use Subrutinas, en lugar de funciones, pero como esta operación solo devuelve un único valor mantengo mi decisión de usar una función en lugar de una subrutina.
Valora esta pregunta


0