Variables python变量到实*16 fortran变量的转换
我正在用Python编写一段代码,调用一些用Fortran编写的子程序。当变量在Fortran中定义为:Variables python变量到实*16 fortran变量的转换,variables,python-2.7,fortran,Variables,Python 2.7,Fortran,我正在用Python编写一段代码,调用一些用Fortran编写的子程序。当变量在Fortran中定义为: real*8, intent(in) :: var1,var2 分别在Python中 var1 = 1.0 var1 = 1.0 一切都很好。但如果我定义一个扩展实数,那就是: real*16, intent(in) :: var1,var2 在python中使用 import numpy as np var1 = np.float16(2) var2 = np.float
real*8, intent(in) :: var1,var2
分别在Python中
var1 = 1.0
var1 = 1.0
一切都很好。但如果我定义一个扩展实数,那就是:
real*16, intent(in) :: var1,var2
在python中使用
import numpy as np
var1 = np.float16(2)
var2 = np.float16(2)
在将变量传递给fortran例程时,这些变量采用一个奇怪的数字。有人知道我做错了什么吗?去年的数据表明,numpy的四倍精度因机器而异。我猜你的床铺数据来自两种不同语言的不一致性,即四精度的含义
还要注意的是,
f2py
实际上只理解(kind=)
,其中
是实数
/整数
/复数
,
是一个整数1,2,4,8(参见)。REAL*是一个过时的非标准fortran约定,请阅读以下内容。。谢谢你的建议。Fortran代码是用Fortran 77编写的旧代码,其中包含此类声明。我将它们修改为种类约定。根据您的其他评论,您可能已经过了这一关,但numpy float16是16位(半精度)…如果您的平台支持,您可能需要float128是的,我已经注意到了,但谢谢。您是对的。为了适应这两种语言中的四精度定义,我尝试使用BigFloat包(),它允许根据IEEE标准754在Python中定义四精度浮点,我认为这与Fortran中使用的定义相同。然而,我一直有同样的问题,Fortran变量采用的数字与Python中定义的不同。仍然在寻找…目前我已经用辅助变量解决了这个问题。在这种情况下,aux被定义为8位实数(实数*8,意图(In)::aux1,aux2),随后在代码中被定义为:var1=aux1和var2=aux2。然而,我认为这并不严格。