Я пытаюсь выполнить port _controlfp (_CW_DEFAULT, 0xffffffff); от WIN32 до Mac OS X/Intel. Я абсолютно не знаю, как переносить эту инструкцию ... А вы? Благодаря!Как установить двойную точность в C++ на MacOSX?
ответ
Попробуйте section 8.6 of Gough's Introduction to GCC, который демонстрирует инструкцию x86 FLDCW. Но это помогает, если вы сообщите нам, зачем вам это нужно - если вы хотите, чтобы ваши парные разряды были 64-разрядными удваиваниями IEEE-754, самый простой способ - скомпилировать с -msse -mfpmath = sse.
Какие элементы точности вы контролируете?
_control87
функция получает и устанавливает управляющее слово с плавающей точкой. Управляющее слово с плавающей запятой позволяет программе изменять режимы точности, округления и бесконечности в математическом пакете с плавающей запятой. Вы также можете маскировать или разоблачать исключения с плавающей запятой, используя_control87
. Если значение для маски равно 0,_control87
получает управляющее слово с плавающей запятой. Если маска отлична от нуля, устанавливается новое значение для управляющего слова: для любого бита, который включен (равен 1) в маске, соответствующий бит в новом используется для обновления управляющего слова. Другими словами,fpcntrl = ((fpcntrl & ~mask) | (new & mask))
где fpcntrl - это управляющее слово с плавающей запятой.
Обратите внимание на ключевое слово "library". Эта функция управляет библиотекой Microsoft, которая может отсутствовать на Mac.
Я предлагаю следующее:
- контроля точка чип с плавающей на Мак сами
- Или использовать компилятор Microsoft для Mac
- Или найти способ, чтобы переместить управления с плавающей точкой в более родовое пятно в вашей программе.
Лучший совет, который я могу дать, состоит в том, чтобы сохранить как можно больше кода со стандартными и платформенными или библиотечными проблемами до минимума. Для этих функций, связанных с функциями платформы, переместите их в свои исходные файлы/единицы перевода. Создавайте копии этих функций, по одному для каждой платформы. Пусть компоновщик решает, с кем использовать.
Удачи.