我需要将一个数字从 fortran 传输到 C++,以便在 C++ 中读取它时,它被视为 numeric_limits::quiet_nan()。我们在 Fortran 端使用 Salford/Intel 编译器,在 C++ 端使用 VS2010,使用 Windows 中的共享内存。
任何想法,詹姆斯
Fortran 2003 标准定义了一个内在模块,该模块除其他外ieee_arithmetic
包含名为. 同一个模块还定义了一堆该类型的命名常量,其中一个命名常量的名称是. ieee_class_type
ieee_quiet_nan
ieee_arithmetic
还定义了一个带有ieee_value
2 个参数的函数;其中第一个(调用它x
)是一个实数,第二个(调用它class
)接受一个类型的值,ieee_class_type
因此ieee_quiet_nan
函数调用ieee_value(x,ieee_quiet_nan)
将返回一个与 IEEE 相同类型和种类的 IEEE quiet NaN x
。
请注意,此函数仅在函数调用ieee_support_nan(x)
返回时才有效.true.
。Fortran 处理器不需要支持 IEEE 算术的所有功能,并且为了可移植性,最好先检查您要使用的功能。
因此,我想,如果您的 Fortran 和 C++ 程序共享内存,则 Fortran 语句如
y = ieee_value(x,ieee_quiet_nan)
会将位放入y
您的 C++ 程序将理解为安静 NaN 的名称指定的位置。
编辑
如果,正如 Vladimir F 告诉我们的那样,Salford 的 Fortran 缺乏ieee_arithmetic
我想你将不得不求助于 Fortran 的小工具。在 C++ 中用你想要的位数声明一个整数变量,找出一个安静的 NaN 的有效位模式是什么,那么它应该是飞机航行。