请教:S12中关于加减乘除运算的问题 恳请大虾指点~~~
- UID
- 146094
- 性别
- 男
|
请教:S12中关于加减乘除运算的问题 恳请大虾指点~~~
第一,关于浮点数的问题。S12中能进行浮点运算吗?如果可以,怎样才能实现呢?需要加那些库函数?头文件?
第二,关于运算位数限制的问题。S12中能进行32位的运算吗(unsigned long)?如果可以,怎样才能实现呢?需要加那些库函数?头文件?
在程序调试过程中,以上两种情况我都试过,结果都不行,单步执行时,程序总是跳出,加上系统提示的头文件也还是不行。
随意现在搞得我是数字不能设得太大,也不能设得太小,不但影响了精度,而且对算法也有很大的限制。
希望哪位大虾能为小弟指点迷津~~~~~ |
|
|
|
|
|
- UID
- 104380
- 性别
- 男
|
在创建PROJECT的时候,有一个选项是是否支持浮点数运算。选上即可。 |
|
|
|
|
|
- UID
- 130520
- 性别
- 男
|
S12的32位运算偶尔会有bug,从低16位到高16位的进位有时候会有问题。怀疑是C编译器的问题。 |
|
|
|
|
|
- UID
- 146094
- 性别
- 男
|
斑竹,我重新建立了一个PROJECT,选中了,可是调试时单步执行还是回出现找不到FADD.C,FMUL.C这一类的文件
还请斑竹进一步解答,不胜感激! |
|
|
|
|
|
- UID
- 146094
- 性别
- 男
|
|
|
|
|
|
- UID
- 130520
- 性别
- 男
|
|
|
|
|
|
- UID
- 104631
- 性别
- 男
|
编译器应该没有这么弱吧,估计是你运算过程中有些设置没有配置好
可以把你的运算程序帖出来看看么 |
|
|
|
|
|
- UID
- 146094
- 性别
- 男
|
其实就是很简单的除法,用一个unsigned long除以一个unsigned int,结果赋给一个unsigned int,单步执行到这里的时候程序就会跳出
不知斑竹所说的配置都有哪些方面的?
还有这个浮点运算是不是还要加什么库函数,头文件之类的东西? |
|
|
|
|
|
- UID
- 104380
- 性别
- 男
|
|
|
|
|
|
- UID
- 144631
- 性别
- 男
|
我之前遇到过这种问题,其实S12有32位的除法指令,就是楼主说的那种32位除16位.我拿两个16位数相乘,再除于16位数,就是这种
INT16D = (INT16 A*INT16B) /INT16C
编译出来就是错的,丢弃了高位
改写成这样,就解决了.而且编译的代码是很精简的那种.楼主不妨试一下
INT32D = INT16A
INT32D = INT32D* INT16B
INT32D = INT32D/INT16C
RETURN((INT16)D)
好像这种不是编译错误,是C本身就有这种性质(隐约记得这样),到现在也不是很清楚,还望大虾们给解释清楚. |
|
|
|
|
|
- UID
- 115868
- 性别
- 男
|
计算过程中溢出了,把参与计算的变量都定义成float类型就可以了。 |
|
|
|
|
|