Передача значения из фортрана в C ++, чтобы он отображался как numeric_limits & lt; float & gt; в с ++ через разделяемую память

Мне нужно перенести число с фортера на С ++, чтобы при чтении на с ++ он обрабатывался как numeric_limits :: quiet_nan (). Мы используем компиляторы Salford / Intel на стороне Fortran и VS2010 на C ++, используя общую память в Windows.

Есть идеи,
Джеймс

1

Решение

Стандарт 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 тихий NaN того же типа и вида, что и x,

Обратите внимание, что эта функция работает только если вызов функции ieee_support_nan(x) возвращается .true., Процессоры Fortran не обязаны поддерживать все функции арифметики IEEE, и для мобильности всегда лучше сначала проверить, какие функции вы хотите использовать.

Поэтому я предполагаю, что если ваши программы на Фортране и С ++ совместно используют память, оператор Фортрана, такой как

y = ieee_value(x,ieee_quiet_nan)

поместит биты в место, указанное именем y которую ваша C ++ программа поймет как тихий NaN.

РЕДАКТИРОВАТЬ

Если, как говорит нам Владимир Ф, в Фортране Солфорда нет ieee_arithmetic Я полагаю, вам придется прибегнуть к услугам Фортрана. Объявите целочисленную переменную с количеством битов, которое вы хотите в C ++, выясните, каковы действительные битовые комбинации для тихого NaN, тогда это должен быть плоскостный переход.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]