讨论一个乘法数学运算式与编译器处理问题

楼主
讨论一个乘法数学运算式与编译器处理问题
我的数学运算是为 (3985/4095)*2.5
答案算出来为0,好奇怪,我改成下面的样式还是不行,都是0
long aa;
aa= (long)3985/(long)4095*(long)2.5;

我使用的是f449(硬件乘法器有开没开都一样)
1楼
你这个问题我没有试过,因为我总是尽量避免出现这样的运算,大多数情况下,我会变成这样的方法来写:
long aa;
aa = 4985 * 25 / 4095 / 10;
我写这种式子的原则就是,式中参数不带小数,先乘后除,注意防止溢出。
2楼
[QUOTE][B]下面引用由[U]hwdz[/U]发表的内容:[/B]

你这个问题我没有试过,因为我总是尽量避免出现这样的运算,大多数情况下,我会变成这样的方法来写:
long aa;
aa = 4985 * 25 / 4095 / 10;
我写这种式子的原则就是,...[/QUOTE]

我改成你的方式就出現
Warning[Pe061]: integer operation result is out of range
3楼
哦?莫非不支持long型变量了?
4楼
long aa;
aa = (3985 * 25) / 4095 / 10;
我改成上面的樣子,就不會出錯,不過答案還是0
IAR為3.41版
5楼
呵呵,我刚试了一下,比你的现象更牛一点,IAR告诉我
Warning[Pe550]: variable "aa" was set but never used D:\MyMCUPrg\TestMult\main.c 6
明明用了,说我的变量从来没用过,哈哈。

电脑版 Page created in 0.0781 seconds width 2 queries.