我需要将一个数字从fortran转移到C++,以便在c++中读取它时将其视为numeric_limits::quiet_nan()。我们在Windows上使用共享内存在Fortran端使用Salford / Intel编译器,在C++上使用VS2010。
有任何想法吗,
詹姆士
最佳答案
Fortran 2003标准定义了一个内部模块ieee_arithmetic
,该模块除其他外包含名为ieee_class_type
的派生类型的定义。同一模块还定义了一堆这种类型的命名常量,其中一个命名常量的名称为ieee_quiet_nan
。ieee_arithmetic
还定义了一个带有2个参数的ieee_value
函数;其中第一个(称为x
)是实数,第二个(称为class
)采用ieee_class_type
类型的值(例如ieee_quiet_nan
),因此函数调用ieee_value(x,ieee_quiet_nan)
将返回与x
相同类型和种类的IEEE安静NaN。
请注意,只有在函数调用ieee_support_nan(x)
返回.true.
时,此函数才起作用。 Fortran处理器不需要支持IEEE算术的所有功能,并且出于可移植性的考虑,始终最好先检查要使用的功能。
因此,我想,如果您的Fortran和C++程序共享内存,那么将出现一个Fortran语句,例如y = ieee_value(x,ieee_quiet_nan)
会将位放入y
名称指定的位置,您的C++程序将其理解为安静的NaN。
编辑
如果正如弗拉基米尔F所告诉我们的那样, Solr 福德的Fortran缺少ieee_arithmetic
,我想您将不得不依赖于Fortran的纠结机制。用C++中需要的位数声明一个整数变量,找出安静的NaN的有效位模式是什么,然后应该是平面航行。
关于c++ - 将值从fortran传输到C++,以使其通过共享内存在c++中显示为numeric_limits <float>,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13364978/