xtaens 发表于 2011-8-30 09:59:01

哪位发现过这个问题:IAR 430 5.20中定义 k=1024/1.24;仿真结果居然是k=999.999?????????????

如题:我在写AD时发现的这个问题,连续试了2048/2.048-------结果都是999.999

请高手说说这个IAR的问题还是我的问题啊?O(∩_∩)O谢谢

http://cache.amobbs.com/bbs_upload782111/files_45/ourdev_672416O8L2RZ.jpg
(原文件名:11.jpg)

lych9139 发表于 2011-8-30 10:05:02

应该是这样吧,浮点数数学_运算是有最小误差的

GoWith123 发表于 2011-8-30 10:06:57

用二进制表示一个十进制小数,可能有误差。“2048/2.048-------结果999.999 ”足够精确了。

aheadlead 发表于 2011-8-30 10:11:26

计算机这玩意儿算不准

有两种方案
1.除完后加个很小的数字使达到1000.000000001
2.如果你这个数字不是很大的话 你可以考虑乘上100或1000或10000来保证精度 就是把浮点数变成整数

另外尽量避免除法运算
有些题目是比较卡精度的 TM我上次结果和标准答案差0.00001也计我零分。。。

friendljy 发表于 2011-8-30 10:19:05

如果是计算,不用管它,已经足够精确,如果是显示之类的,+一个很小的小数就行了,比如0.000001

xtaens 发表于 2011-8-30 12:45:45

多谢各位回答,我发现只要是2^N(如1024,2048等)做除法就除不尽
但是其他的数就没问题:1023/1.023=1000,2047/2.047=1000------

这说明IAR对2^N优化的不好

517456 发表于 2011-8-30 12:58:36

不是编译器优化不好,而是你C学的不是太好。比方说如果判断浮点数是否为0,如果你写成==的方式就错了,应该写成fabs(n)<1e-6的这种方式。

lcofjp 发表于 2011-8-30 13:23:05

回复【5楼】xtaens
-----------------------------------------------------------------------

是楼主对浮点数的阶码表示理解不深刻。

atgfpeyv 发表于 2011-8-30 18:52:30

楼主我留个QQ:: 253873439,我也在学430,正在学AD,加我QQ,相互讨论,好像人很少

gwdong 发表于 2011-9-2 11:03:07

既然你用了浮点数,你就要允许误差存在.
页: [1]
查看完整版本: 哪位发现过这个问题:IAR 430 5.20中定义 k=1024/1.24;仿真结果居然是k=999.999?????????????