Variables python变量到实*16 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

我正在用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.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。然而,我认为这并不严格。