将值从fortran传输到C ++,使其在c ++中通过共享内存显示为numeric_limits <float> </float>

时间:2012-11-13 16:49:19

标签: c++ fortran

我需要将一个数字从fortran转移到C ++,这样当它在c ++中读取时,它被视为numeric_limits :: quiet_nan()。我们在Fortran端使用Salford / Intel编译器,在C ++上使用VS2010,使用Windows中的共享内存。

任何想法, 詹姆斯

1 个答案:

答案 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的有效位模式,然后它应该是平面航行。