我需要從Fortran向C++傳遞一個數字,以便當它在C++中讀取時,它將被視爲numeric_limits :: quiet_nan ()。我們在Fortran方面使用Salford/Intel編譯器,在C++上使用VS2010,使用Windows中的共享內存。從fortran向C++傳遞一個值,以便它通過共享內存在C++中顯示爲numeric_limits <float>
任何想法, 詹姆斯
我需要從Fortran向C++傳遞一個數字,以便當它在C++中讀取時,它將被視爲numeric_limits :: quiet_nan ()。我們在Fortran方面使用Salford/Intel編譯器,在C++上使用VS2010,使用Windows中的共享內存。從fortran向C++傳遞一個值,以便它通過共享內存在C++中顯示爲numeric_limits <float>
任何想法, 詹姆斯
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)
將返回與x
相同類型和種類的IEEE安靜NaN。
請注意,該功能僅在函數調用ieee_support_nan(x)
返回.true.
時才起作用。 Fortran處理器不需要支持IEEE算術的所有功能,並且爲了便於攜帶,最好首先檢查要使用的功能。
我猜,因此,如果你的Fortran和C++程序共享內存,一個Fortran的語句,如
y = ieee_value(x,ieee_quiet_nan)
將把位到由名稱y
指定的位置,你的C++程序會明白是一個安靜的NaN。
編輯
如果像弗拉基米爾˚F告訴我們,索爾福德大學的Fortran語言缺乏ieee_arithmetic
我想你將不得不求助於Fortran語言的位變換設施。用C++中想要的位數聲明一個整數變量,找出靜音NaN的有效位模式,然後它應該是平面航行。
我懷疑索爾福德是否支持這一點。他們不會走向Fortran 2003 AFAIK。 –
完成之前意外按下返回。 – James
它恰巧是最好的。不過,這個問題仍然需要很多工作。請提供一些代碼和上下文。 –