搜索
bottom↓
回复: 9

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

[复制链接]

出0入0汤圆

发表于 2011-8-30 09:59:01 | 显示全部楼层 |阅读模式
如题:我在写AD时发现的这个问题,连续试了2048/2.048-------结果都是999.999

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


(原文件名:11.jpg)

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2011-8-30 10:05:02 | 显示全部楼层
应该是这样吧,浮点数数学_运算是有最小误差的

出0入0汤圆

发表于 2011-8-30 10:06:57 | 显示全部楼层
用二进制表示一个十进制小数,可能有误差。“2048/2.048-------结果999.999 ”足够精确了。

出0入0汤圆

发表于 2011-8-30 10:11:26 | 显示全部楼层
计算机这玩意儿算不准

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

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

出0入93汤圆

发表于 2011-8-30 10:19:05 | 显示全部楼层
如果是计算,不用管它,已经足够精确,如果是显示之类的,+一个很小的小数就行了,比如0.000001

出0入0汤圆

 楼主| 发表于 2011-8-30 12:45:45 | 显示全部楼层
多谢各位回答,我发现只要是2^N(如1024,2048等)做除法就除不尽
但是其他的数就没问题:1023/1.023=1000,2047/2.047=1000  ------

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

出0入0汤圆

发表于 2011-8-30 12:58:36 | 显示全部楼层
不是编译器优化不好,而是你C学的不是太好。比方说如果判断浮点数是否为0,如果你写成==的方式就错了,应该写成fabs(n)<1e-6的这种方式。

出0入0汤圆

发表于 2011-8-30 13:23:05 | 显示全部楼层
回复【5楼】xtaens  
-----------------------------------------------------------------------

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

出0入0汤圆

发表于 2011-8-30 18:52:30 | 显示全部楼层
楼主我留个QQ:: 253873439,我也在学430,正在学AD,加我QQ,相互讨论,好像人很少

出0入0汤圆

发表于 2011-9-2 11:03:07 | 显示全部楼层
既然你用了浮点数,你就要允许误差存在.
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-18 23:28

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表