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

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

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')

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

Похожие темы

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