1

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

任何想法,詹姆斯

4

1 回答 1

3

Fortran 2003 标准定义了一个内在模块,该模块除其他外ieee_arithmetic包含名为. 同一个模块还定义了一堆该类型的命名常量,其中一个命名常量的名称是. ieee_class_typeieee_quiet_nan

ieee_arithmetic还定义了一个带有ieee_value2 个参数的函数;其中第一个(调用它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 的有效位模式是什么,那么它应该是飞机航行。

于 2012-11-13T17:51:20.440 回答