首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

请教:S12中关于加减乘除运算的问题 恳请大虾指点~~~

请教:S12中关于加减乘除运算的问题 恳请大虾指点~~~

第一,关于浮点数的问题。S12中能进行浮点运算吗?如果可以,怎样才能实现呢?需要加那些库函数?头文件?


第二,关于运算位数限制的问题。S12中能进行32位的运算吗(unsigned long)?如果可以,怎样才能实现呢?需要加那些库函数?头文件?


在程序调试过程中,以上两种情况我都试过,结果都不行,单步执行时,程序总是跳出,加上系统提示的头文件也还是不行。


随意现在搞得我是数字不能设得太大,也不能设得太小,不但影响了精度,而且对算法也有很大的限制。


希望哪位大虾能为小弟指点迷津~~~~~

在创建PROJECT的时候,有一个选项是是否支持浮点数运算。选上即可。
海纳百川  有容乃大
S12的32位运算偶尔会有bug,从低16位到高16位的进位有时候会有问题。怀疑是C编译器的问题。
slaxh.com
斑竹,我重新建立了一个PROJECT,选中了,可是调试时单步执行还是回出现找不到FADD.C,FMUL.C这一类的文件
还请斑竹进一步解答,不胜感激!
32位的我从来就没算对过,不是偶尔啊
看来得用汇编自己写
slaxh.com
编译器应该没有这么弱吧,估计是你运算过程中有些设置没有配置好
可以把你的运算程序帖出来看看么
其实就是很简单的除法,用一个unsigned long除以一个unsigned int,结果赋给一个unsigned int,单步执行到这里的时候程序就会跳出

不知斑竹所说的配置都有哪些方面的?

还有这个浮点运算是不是还要加什么库函数,头文件之类的东西?
什么叫程序跳出,怎么跳出?
海纳百川  有容乃大
我之前遇到过这种问题,其实S12有32位的除法指令,就是楼主说的那种32位除16位.我拿两个16位数相乘,再除于16位数,就是这种
INT16D = (INT16 A*INT16B) /INT16C
编译出来就是错的,丢弃了高位
改写成这样,就解决了.而且编译的代码是很精简的那种.楼主不妨试一下
INT32D = INT16A
INT32D = INT32D* INT16B
INT32D = INT32D/INT16C
RETURN((INT16)D)
好像这种不是编译错误,是C本身就有这种性质(隐约记得这样),到现在也不是很清楚,还望大虾们给解释清楚.
计算过程中溢出了,把参与计算的变量都定义成float类型就可以了。
              非学无以广才,非志无以成学;              
返回列表