主要内容

从转换为单精度C / C ++代码的警告

通过使用使用单精度C / C ++代码时马铃薯®编码器™应用程序或Codegen.与之-singlec.选项,您可以收到以下警告。

功能在C89 / C90标准中使用双精度

如果标准数学库是C89 / C90,则转换过程会在C89 / C90标准中使用双精度代码时警告您。

考虑该功能迈章

功能c =山脊(a)c = sin(a);结尾

生成单精度代码迈章使用C89 / C90标准。

x = -pi:0.01:pi;cfg = coder.config('lib');cfg.targetlangstandard ='C89 / C90(ANSI)';Codegen.-singlec.-Config.CFG.迈章-  args.{X}-报告

Codegen.警告说在C89 / C90(ANSI)标准中使用双重精度。

警告:功能SIN在C89 / C90(ANSI)标准中使用双精度。对于单精度代码,请考虑使用C99(ISO)标准或使用您自己的功能。

要打开代码生成报告,请单击“查看报告关联。

要查看双重精度操作仍保留在转换代码中,请单击“代码见解标签。扩张潜在的数据类型问题然后扩展双精度操作。报告表明迈章在第2行具有双精度操作c = sin(a)

要解决此警告,请使用默认标准数学库C99(ISO)。

  • 在命令行:

    cfg.targetlangstandard ='C99(ISO)';

  • 在应用程序中,在项目构建设置中,在自定义代码标签,设置标准数学库C99(ISO)

内置功能以双重精度实现

一些内置MATLAB功能使用双精度操作实现。转换过程警告说,为这些功能生成的代码包含双精度操作。

考虑该功能geterf.调用内置函数ERF.

功能y = geterf(x)y = erf(x);结尾

生成单精度代码geterf.

Codegen.-singlec.-config:lib-  args.{1}geterf.-报告

Codegen.警告说ERF.以双重精度实现。

警告:内置功能ERF以双精度实现。为此函数生成的代码将包含双打。

要打开代码生成报告,请单击“查看报告关联。

要查看双重精度操作仍保留在转换代码中,请单击“代码见解标签。扩张潜在的数据类型问题然后扩展双精度操作。报告表明geterf.在第2行具有双精度操作Y = ERF(x)

要解决此警告,请重写代码,以便它不使用以双重精度实现的函数。

内置功能返回双精度

如果内置的MATLAB函数返回双精度输出,则转换过程会产生警告。

考虑该功能迈尔姆斯调用内置函数

功能y = mysum(x)y = sum(int32(x));结尾

生成单精度代码迈尔姆斯

a = 1:10;Codegen.-singlec.-config:lib-  args.{一种}迈尔姆斯-报告

Codegen.警告说迈尔姆斯以双重精度实现。

警告:内置功能总和的输出是双精度,并已投入单精度。为内置函数生成的代码仍可能包含双打。

要打开代码生成报告,请单击“查看报告关联。

要查看双重精度操作仍保留在转换代码中,请单击“代码见解标签。扩张潜在的数据类型问题然后扩展双精度操作。报告表明迈尔姆斯在第2行具有双精度操作y = sum(int32(x))

要解决此警告,请指定您希望函数返回'本国的'班级。

(总和(Int32(1),'本国的'

使用此选项会导致函数返回与输入相同的类型。

相关话题