Задайте стандартные расширения библиотеки, которые генератор кода использует для математических операций. Когда вы генерируете код для новой модели или с новым объектом конфигурации модели, генератор кода использует библиотеку ISO ®/IEC 9899:1999 C (C99 (ISO)) по умолчанию. Для ранее существовавших моделей и объектов конфигурации модели генератор кода использует библиотеку, заданную параметром Standard math library.
Если ваш компилятор поддерживает ISO ®/IEC 9899:1990 (C89/C90 (ANSI)), ISO/IEC 14882:2003 (C++ 03 (ISO) или ISO/IEC 14882:2011 (C++ 11 (ISO)) расширения математической библиотеки, вы можете Библиотека C++ 03 (ISO) или C++ 11 (ISO) является опцией, когда вы выбираете C++ для языка программирования.
Библиотека C99 использует эффективность, которую компилятор предлагает по стандарту ANSI C. При использовании библиотеки C99 генератор кода по возможности производит вызовы функций ISO C. Например, сгенерированный код вызывает функцию sqrtf()
, который работает на данных с одной точностью, вместо sqrt()
.
Чтобы изменить настройку библиотеки, используйте параметр Параметры Конфигурации > Standard math library. Эквивалент командной строки TargetLangStandard
.
1. Откройте пример модели rtwdemo_clibsup
.
2. Сгенерируйте код.
### Starting build procedure for: rtwdemo_clibsup ### Successful completion of code generation for: rtwdemo_clibsup Build Summary Top model targets built: Model Action Rebuild Reason =================================================================================== rtwdemo_clibsup Code generated Code generation information file does not exist. 1 of 1 models built (0 models already up to date) Build duration: 0h 0m 5.7441s
3. Исследуйте код в сгенерированном файле rtwdemo_clibsup.c
. Обратите внимание, что код вызывает sqrt
функция.
if (rtb_Abs2 < 0.0F) { rtb_Abs2 = -(real32_T)sqrt((real32_T)fabs(rtb_Abs2)); } else { rtb_Abs2 = (real32_T)sqrt(rtb_Abs2); }
1. Измените настройку Стандартной математической библиотеки на C99 (ISO)
. Кроме того, в командной строке задайте TargetLangStandard
на C99 (ISO)
.
2. Перегенерируйте код.
### Starting build procedure for: rtwdemo_clibsup ### Successful completion of code generation for: rtwdemo_clibsup Build Summary Top model targets built: Model Action Rebuild Reason =================================================================================== rtwdemo_clibsup Code generated Code generation information file does not exist. 1 of 1 models built (0 models already up to date) Build duration: 0h 0m 5.4836s
3. Повторно исследуйте код в сгенерированном файле rtwdemo_clibsup.c
. Теперь сгенерированный код вызывает функцию sqrtf
вместо sqrt
.
if (rtb_Abs2 < 0.0F) { rtb_Abs2 = -sqrtf(fabsf(rtb_Abs2)); } else { rtb_Abs2 = sqrtf(rtb_Abs2); }