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

Задайте стандартные расширения библиотеки, которые генератор кода использует для математических операций. Когда вы генерируете код для новой модели или с новым объектом конфигурации модели, генератор кода пользуется библиотекой ISO®/IEC 9899:1999 C (C99 (ISO)) по умолчанию. Для существующих ранее моделей и объектов конфигурации модели, генератор кода пользуется библиотекой, заданной Стандартным математическим параметром библиотеки.

Если ваш компилятор поддерживает 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().

Чтобы изменить настройки библиотеки, используйте Параметры конфигурации> Стандартный математический параметр библиотеки. Эквивалентной командной строкой является 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);
  }

Сопутствующая информация