Поделиться через


/fpcvt (Совместимость с целочисленным преобразованием с плавающей запятой)

Указывает, как компилятор обрабатывает преобразования с плавающей запятой в целые типы.

Синтаксис

/fpcvt:IA
/fpcvt:BC

Аргументы

/fpcvt:IA

Параметр /fpcvt:IA сообщает компилятору преобразовать значения с плавающей запятой в целые числа, чтобы результаты были совместимы с инструкциями по преобразованию Intel AVX-512. Это обычное поведение в Visual Studio 2019 для целевых объектов x86.

/fpcvt:BC

Параметр /fpcvt:BC сообщает компилятору преобразовать значения с плавающей запятой в неподписанные целые числа, чтобы результаты были совместимы с Visual Studio 2017 и более ранними компиляторами. Это поведение по умолчанию в Visual Studio 2022.

Замечания

В Visual Studio 2019 версии 16.8 и более поздних версиях /fpcvt параметр компилятора можно использовать для управления результатами с плавающей запятой для целочисленных преобразований. Параметр /fpcvt:BC задает поведение по умолчанию Visual Studio 2022, которое совпадает с поведением Visual Studio 2017 и более ранних версий. Параметр /fpcvt:IA определяет поведение, совместимое с поведением инструкции преобразования AvX-512 в архитектуре Intel (IA). Этот параметр можно использовать либо с 32-разрядными 86-разрядными или 64-разрядными целевыми объектами x64, но он применяется независимо от того, /arch:AVX512 задано ли оно или нет.

Для Visual Studio 2019 поведение по умолчанию для целевых объектов x64 согласовано, /fpcvt:BC если /arch:AVX512 не указано. Обычно поведение целевых объектов x86 согласовано с /fpcvt:IA, за исключением /arch:IA32тех случаев /arch:SSE, когда результат вызова функции напрямую преобразуется в целое число без знака. /fpcvt Использование переопределения по умолчанию, поэтому все преобразования обрабатываются согласованно в любом целевом объекте. Поведение преобразований для целевых объектов ARM и ARM64 не соответствует ни тому, /fpcvt:BC /fpcvt:IAни и.

Стандарт C++ указывает, что если усеченное значение с плавающей запятой точно представляется в целочисленном типе, оно должно иметь это значение при преобразовании в этот тип. В противном случае любое поведение разрешено. Оба /fpcvt варианта соответствуют стандарту C++. Единственное различие заключается в том, какие значения возвращаются для недопустимых исходных значений.

Параметр /fpcvt:IA приводит к тому, что любое недопустимое преобразование возвращает одно значение sentinel , которое является конечным значением, самым далеким от нуля. Для преобразования в подписанные типы sentinel является минимальным значением для этого типа. Неподписанные типы используют максимальное значение. Операции с плавающей запятой могут возвращать значение Not-a-Number (NaN) для указания недопустимой операции. Этот индикатор не является вариантом преобразования в целые типы, которые не имеют значений NaN. Sentinel используется в качестве прокси-сервера для значения NaN, хотя он также может быть результатом допустимого преобразования.

Этот /fpcvt:BC параметр также делает преобразование в подписанные типы, возвращая минимально возможное значение, если источник недопустим. Однако преобразование в типы целых чисел без знака основано на преобразовании long longв . Чтобы преобразовать значение unsigned intв , компилятор сначала преобразует его в тип long long. Затем компилятор усекает результат до 32 битов. Чтобы преобразовать значение unsigned long longв допустимые исходные значения, слишком высокие для a long long , обрабатываются как особый случай. Все остальные значения сначала преобразуются в long long , а затем переадресовываются в unsigned long long.

Эти /fpcvt параметры новые в Visual Studio 2019 версии 16.8. Если в командной строке указано несколько /fpcvt вариантов, более поздний параметр имеет приоритет, а компилятор создает предупреждение.

Встроенные функции для преобразований

Можно указать поведение определенного преобразования независимо от /fpcvt параметра, которое применяется глобально. Компилятор предоставляет встроенные функции преобразования sentinel для преобразований, совместимых с /fpcvt:IA. Дополнительные сведения см. в разделе "Функции преобразования Sentinel". Компилятор также предоставляет функции преобразования насыщенности, совместимые с преобразованиями в целевых архитектурах ARM или ARM64. Дополнительные сведения см. в разделе "Функции преобразования насыщенности".

Компилятор также поддерживает встроенные функции преобразования, которые выполняются как можно быстрее для допустимых преобразований. Эти функции могут создавать любое значение или вызывать исключение для недопустимого преобразования. Результаты зависят от целевой платформы, параметров компилятора и контекста. Они полезны для обработки значений, которые уже проверены в диапазоне, или значений, созданных таким образом, что не может привести к недопустимому преобразованию. Дополнительные сведения см. в разделе "Функции быстрого преобразования".

Установка данного параметра компилятора в среде разработки Visual Studio

  1. Откройте диалоговое окно Страницы свойств проекта. Подробнее см. в статье Настройка компилятора C++ и свойства сборки в Visual Studio.

  2. Перейдите на страницу свойств Свойства конфигурации>C/C++>Командная строка.

  3. Измените свойство "Дополнительные параметры", чтобы добавить /fpcvt:IA или/fpcvt:BC. Нажмите ОК, чтобы сохранить внесенные изменения.

Установка данного параметра компилятора программным способом

См. также

Параметры компилятора MSVC
Синтаксис командной строки компилятора MSVC
Функции быстрого преобразования
Функции преобразования насыщенности
Функции преобразования Sentinel