Генератор кода производит код поддержки для этих ситуаций:
Результат целочисленной операции выходит за пределы области значений, которую тип данных может представлять, известный как целочисленное переполнение.
Операция генерирует неличные значения (inf
и NaN
).
Если вы знаете, что эти ситуации не происходят, чтобы уменьшать размер сгенерированного кода и увеличить его скорость, можно подавить генерацию кода поддержки. Однако, если вы подавляете генерацию кода поддержки, и одна из этих ситуаций происходит, поведение сгенерированного кода не может совпадать с поведением исходного кода MATLAB®.
По умолчанию генератор кода производит код, чтобы обработать целочисленное переполнение. Переполнение насыщает или к минимальному или к максимальному значению, которое может представлять тип данных. Если вы знаете, что ваш код не зависит от поддержки целочисленного переполнения, чтобы улучшать производительность, можно отключить генерацию кода, который обрабатывает целочисленное переполнение. Отключить поддержку целочисленного переполнения:
В объекте настройки генерации кода для MEX или автономного кода (статическая библиотека, динамически подключаемая библиотека, или исполняемая программа), устанавливает свойство SaturateOnIntegerOverflow
на false
.
В приложении MATLAB Coder™, набор Saturate on integer overflow к No
.
Не отключайте поддержку целочисленного переполнения, если вы не знаете, что ваш код не зависит от него. Если вы отключаете поддержку, и проверка во время выполнения включена, сгенерированный код производит ошибку для целочисленного переполнения. Если вы отключаете поддержку целочисленного переполнения и также отключаете проверку во время выполнения, поведение для целочисленного переполнения не определено. Большинство компиляторов C переносится на переполнении.
Чтобы проверять, зависит ли ваш код от поддержки целочисленного переполнения:
Отключите поддержку целочисленного переполнения.
Позвольте проверкам обнаружить целочисленное переполнение во время выполнения.
Для MEX включите проверку целостности. Смотрите Проверки на этапе выполнения Управления.
Для автономного кода (статическая библиотека, динамически подключаемая библиотека, или исполняемая программа), включают проверки на этапе выполнения. Смотрите Обнаружение Ошибки времени выполнения и Сообщающий в Автономном Коде C/C++.
Запустите сгенерированный код по полному спектру входных значений. Если сгенерированный код обнаруживает целочисленное переполнение, он производит ошибку.
По умолчанию, для автономного кода (статическая библиотека, динамически подключаемая библиотека или исполняемая программа), генератор кода производит код, чтобы обработать неличные числа (inf
и NaN
). Если вы знаете, что ваш код не зависит от неличной поддержки номера, чтобы улучшать производительность сгенерированного кода, можно отключить поддержку. Отключить неличную поддержку:
В объекте настройки генерации кода, набор свойство SupportNonFinite
к false
.
В приложении MATLAB Coder, набор Support nonfinite numbers к No
.
Если вы отключаете неличную поддержку, тест, тот ваш сгенерированный код ведет себя как ожидалось.