Предупреждения от преобразования до кода 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.

Чтобы открыть отчет генерации кода, щелкните по ссылке View Report.

Чтобы видеть, что операции с двойной точностью остаются в конвертированном коде, кликните по вкладке Code Insights. Расширьте Potential data type issues и затем расширьте Double-precision operations. Отчет указывает на тот mysine начинает операцию с двойной точностью в линии 2 c = sin(a).

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

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

    cfg.TargetLangStandard = 'C99 (ISO)';
    

  • В приложении, в настройках сборки проекта, на вкладке Custom Code, устанавливает Standard math library на 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.

Чтобы открыть отчет генерации кода, щелкните по ссылке View Report.

Чтобы видеть, что операции с двойной точностью остаются в конвертированном коде, кликните по вкладке Code Insights. Расширьте Potential data type issues и затем расширьте Double-precision operations. Отчет указывает на тот 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.

Чтобы открыть отчет генерации кода, щелкните по ссылке View Report.

Чтобы видеть, что операции с двойной точностью остаются в конвертированном коде, кликните по вкладке Code Insights. Расширьте Potential data type issues и затем расширьте Double-precision operations. Отчет указывает на тот mysum начинает операцию с двойной точностью в линии 2 y = sum(int32(x)).

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

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

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

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте