我需要将一个数字从fortran转移到C ++,这样当它在c ++中读取时,它被视为numeric_limits :: quiet_nan()。我们在Fortran端使用Salford / Intel编译器,在C ++上使用VS2010,使用Windows中的共享内存。
任何想法, 詹姆斯
答案 0 :(得分:3)
Fortran 2003标准定义了一个内部模块ieee_arithmetic
,其中包含等,称为ieee_class_type
的派生类型的定义。同一模块还定义了一组该类型的命名常量,其中一个命名常量的名称为ieee_quiet_nan
。
ieee_arithmetic
还定义了一个带有2个参数的函数ieee_value
;第一个(称为x
)是真实的,第二个(称为class
)采用ieee_class_type
类型的值,例如ieee_quiet_nan
,因此函数调用{ {1}}将返回与ieee_value(x,ieee_quiet_nan)
相同类型和种类的IEEE静态NaN。
请注意,此函数仅在函数调用x
返回ieee_support_nan(x)
时有效。 Fortran处理器不需要支持IEEE算法的所有功能,并且为了便于携带,最好先检查您要使用的功能。
因此,我想,如果你的Fortran和C ++程序共享内存,那么Fortran语句如
.true.
将位置放在名称y = ieee_value(x,ieee_quiet_nan)
指定的位置,C ++程序将理解该位置是一个安静的NaN。
修改强>
如果像弗拉基米尔F告诉我们的那样,索尔福德的Fortran缺少y
我认为你将不得不依靠Fortran的苦恼设施。用C ++中的所需位数声明一个整数变量,找出安静NaN的有效位模式,然后它应该是平面航行。