通过使用使用单精度C / C ++代码时马铃薯®编码器™应用程序或Codegen.
与之-singlec.
选项,您可以收到以下警告。
如果标准数学库是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),'本国的')
使用此选项会导致函数返回与输入相同的类型。