2012-11-13 19 views
1

我需要從Fortran向C++傳遞一個數字,以便當它在C++中讀取時,它將被視爲numeric_limits :: quiet_nan ()。我們在Fortran方面使用Salford/Intel編譯器,在C++上使用VS2010,使用Windows中的共享內存。從fortran向C++傳遞一個值,以便它通過共享內存在C++中顯示爲numeric_limits <float>

任何想法, 詹姆斯

+0

完成之前意外按下返回。 – James

+1

它恰巧是最好的。不過,這個問題仍然需要很多工作。請提供一些代碼和上下文。 –

回答

3

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的有效位模式,然後它應該是平面航行。

+0

我懷疑索爾福德是否支持這一點。他們不會走向Fortran 2003 AFAIK。 –