exponenta event banner

Предупреждения от преобразования до кода C/C++ с одинарной точностью

Когда вы генерируете код C/C++ с одинарной точностью при помощи приложения MATLAB® Coder™ или codegen с опцией -singleC, можно получить соблюдающие предупреждения.

Функциональное использование с двойной точностью в стандарте C89/C90

Если стандартная математическая библиотека является C89/C90, процесс преобразования предупреждает вас, когда функция использует с двойной точностью код в стандарте C89/C90.

Рассмотрите функциональный mysine.

function c = mysine(a)
c = sin(a);
end

Сгенерируйте код с одинарной точностью для mysine с помощью стандарта C89/C90.

x = -pi:0.01:pi;
cfg = coder.config('lib');
cfg.TargetLangStandard = 'C89/C90 (ANSI)';
codegen -singleC -config cfg mysine -args {x} -report

codegen предупреждает, что sin использует с двойной точностью в C89/C90 (ANSI) стандарт.

Warning: The function sin uses double-precision in the C89/C90 (ANSI) standard. For single-precision
code, consider using the C99 (ISO) standard or use your own function.

Чтобы открыть отчет генерации кода, щелкните по ссылке Отчета Представления.

Чтобы видеть, что с двойной точностью операции остаются в конвертированном коде, кликните по вкладке Code Insights. Расширьте Потенциальные проблемы типа данных и затем расширьте С двойной точностью операции. Отчет указывает, что mysine имеет с двойной точностью операция в строке 2 c = sin(a).

Чтобы обратиться к этому предупреждению, пользуйтесь стандартной математической библиотекой по умолчанию, C99 (ISO).

  • В командной строке:

    cfg.TargetLangStandard = 'C99 (ISO)';
    

  • В приложении, в настройках сборки проекта, на вкладке Custom Code, математической библиотеке Стандарта набора к C99 (ISO).

Встроенная функция реализована в с двойной точностью

Некоторые встроенные функции MATLAB реализованы с помощью с двойной точностью операции. Процесс преобразования предупреждает, что код, сгенерированный для этих функций, содержит с двойной точностью операции.

Рассмотрите функциональный geterf, который вызывает встроенную функцию erf.

function y = geterf(x)
y = erf(x);
end

Сгенерируйте код с одинарной точностью для geterf.

codegen -singleC -config:lib -args {1} geterf -report

codegen предупреждает, что erf реализован в двойной точности.

Warning: The builtin function erf is implemented in double-precision. Code generated for this
function will contain doubles.

Чтобы открыть отчет генерации кода, щелкните по ссылке Отчета Представления.

Чтобы видеть, что с двойной точностью операции остаются в конвертированном коде, кликните по вкладке Code Insights. Расширьте Потенциальные проблемы типа данных и затем расширьте С двойной точностью операции. Отчет указывает, что geterf имеет с двойной точностью операция в строке 2 y = erf(x).

Чтобы обратиться к этому предупреждению, перепишите свой код так, чтобы это не использовало функцию, которая реализована в двойной точности.

Встроенная функция возвращается с двойной точностью

Если встроенная функция MATLAB возвращается с двойной точностью вывод, процесс преобразования генерирует предупреждение.

Рассмотрите функциональный mysum, который вызывает встроенную функцию sum.

function y = mysum(x)
y = sum(int32(x));
end

Сгенерируйте код с одинарной точностью formysum.

A = 1:10;
codegen -singleC -config:lib -args {A} mysum -report

codegen предупреждает, что mysum реализован в двойной точности.

Warning: The output of builtin function sum is double-precision and has been cast to
single-precision. The code generated for the builtin function may still contain doubles.

Чтобы открыть отчет генерации кода, щелкните по ссылке Отчета Представления.

Чтобы видеть, что с двойной точностью операции остаются в конвертированном коде, кликните по вкладке Code Insights. Расширьте Потенциальные проблемы типа данных и затем расширьте С двойной точностью операции. Отчет указывает, что mysum имеет с двойной точностью операция в строке 2 y = sum(int32(x)).

Чтобы обратиться к этому предупреждению, укажите, что вы хотите, чтобы функция возвратила класс 'native'.

(sum(int32(1), 'native')

Используя эту опцию заставляет функциональный возврат тот же тип как входной параметр.

Похожие темы