现在的位置: 首页 > 综合 > 正文

dsp调试中数据类型自动转换遇到的问题

2013年04月04日 ⁄ 综合 ⁄ 共 475字 ⁄ 字号 评论关闭

 

————彭晓林

196568501(qq)欢迎交流

 

问题描述:

void Test(float  Data)
{
 float copyData = Data*1000*1000;
 u64 intCopyData = copyData;
 //查看intCopyData的值
}

main()
{
 test();
}

查看 intCopyData  的值发现 与理论值相差了几千。把 copyData  改成double也不行。

 

解决方案:

 

   仔细阅读了dsp编译器手册发现编译器为了提高指令执行速度默认的把float和double类型都设置32为的浮点型(硬浮点),最大支持的浮点数是64位(软浮点)。

这个C语言标准不一样。手册中给了两种解决方案:

方案一:

通过预处理选项设置解决。但是改变工程预处理选项(设为64位)后,连接时出警告,提示说.o文件中浮点数位宽不一致。仔细分析警告信息,发现编译器自带的库文件都是按照32位的浮点编译的。最后我放弃了这种解决方案(毕竟跟老板办事,弄出来且弄的快才是硬道理)。

方案二:

编译器手册中给出了一张表。把copyData 申明位long double即可。

抱歉!评论已关闭.