Как установить двойную точность в C ++ на MacOSX? - PullRequest
3 голосов
/ 25 мая 2010

Я пытаюсь портировать _controlfp (_CW_DEFAULT, 0xffffffff);с WIN32 на Mac OS X / Intel.Я понятия не имею, как портировать эту инструкцию ... А вы?Спасибо!

Ответы [ 2 ]

5 голосов
/ 25 мая 2010

Попробуйте раздел 8.6 Gough's Введение в GCC , в котором демонстрируется инструкция x86 FLDCW. Но полезно, если вы скажете нам, зачем вам это нужно - если вы хотите, чтобы ваши двойные значения были 64-разрядными двойными IEEE-754, самый простой способ - это скомпилировать с -msse -mfpmath = sse.

1 голос
/ 25 мая 2010

Какими точными элементами вы управляете?

По данным на сайте Microsoft :

Функция _control87 получает и устанавливает управляющее слово с плавающей запятой. Управляющее слово с плавающей точкой позволяет программе изменять режимы точности, округления и бесконечности в математическом пакете с плавающей точкой. Вы также можете маскировать или снимать маску с исключений с плавающей точкой, используя _control87. Если значение для маски равно 0, _control87 получает управляющее слово с плавающей запятой. Если маска ненулевая, устанавливается новое значение для контрольного слова: для любого бита, который включен (равен 1) в маске, соответствующий бит в new используется для обновления контрольного слова. Другими словами, fpcntrl = ((fpcntrl & ~mask) | (new & mask)), где fpcntrl - управляющее слово с плавающей точкой.

Обратите внимание на ключевое слово "библиотека". Эта функция управляет библиотекой Microsoft , которая может отсутствовать на Mac.

Я предлагаю следующее:

  1. Управление чипом с плавающей запятой сам Mac
  2. Или используйте компилятор Microsoft для Mac
  3. Или найдите способ переместить управление с плавающей запятой к более общее место в вашей программе.

Лучший совет, который я могу дать, - сводить как можно больше кода в соответствие со стандартом и проблемами, связанными с конкретной платформой или библиотекой. Для тех функций, которые связаны с особенностями платформы, переместите их в свои собственные исходные файлы / единицы перевода. Создайте копии этих функций, по одной для каждой платформы. Пусть линкер решит, какие из них использовать.

Удачи.

...