Сконфигурируйте стандартную математическую библиотеку для целевой системы

Задайте стандартные расширения библиотеки, которые генератор кода использует для математических операций. Когда вы генерируете код для новой модели или с новым объектом конфигурации модели, генератор кода использует библиотеку 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.

Сгенерируйте и осмотрите Код С ANSI

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);
  }

Сгенерируйте и смотрите Код С ISO

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);
  }

Связанная информация