浮点数的舍入误差问题

agxywjbing 2008-05-27 10:08:17
原先学习时没注意的一个问题:
1.在谭老的教材上有一个这样的叙述:1.0/3*3的结果并不等于1。几天上机验证结果还就是1.000000-----(精度问题我也是理解的,这里不知为何?)
2.输入若干学生成绩(浮点数),以特殊值-1为结束标记,求平均值。这一题原先学习时好象说循环条件不能写成while(score!=-1) 说是因数精度问题,这样会是死循环,原先也就这样认为了,可前几天上机验证了,确不是这么回事,并不会死循环。
哪位大虾能为我解惑?????
...全文
375 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
superhackerzhang 2008-05-28
  • 打赏
  • 举报
回复
LZ说的第二个问题我前几天确实遇到了,我个人认为概率较小,但还是有可能发生的。
fan5432 2008-05-28
  • 打赏
  • 举报
回复
精度问题
现代的计算机浮点数精度高了,误差就小了
ForestDB 2008-05-28
  • 打赏
  • 举报
回复
误差是有的,但也是有条件的...
arong1234 2008-05-27
  • 打赏
  • 举报
回复
在那个时代也许是对的。“浮点数不是精确的”这句话没错,只是一个不合适的例子也许无法证明反而会让人更疑惑。double现在有15位精度,90年代初的时候客没有这么高精度

我想楼主还是该换个更新的书

[Quote=引用 1 楼 akirya 的回复:]
浮点数不是精确的, 老谭说的太绝对了
[/Quote]
arong1234 2008-05-27
  • 打赏
  • 举报
回复
1. 谭老师写书那会,计算机字长没这么高,因此可能比较对,当字长比较多时,就不能这样验证了。误差还是存在的,只是不能再你这种问题体现出来。

你去算一下printf("%20.16lf",0.123456789012345678-0.123456789012345677)看看结果多少。

2. 应该是套用“浮点数不精确”这个规则是犯了教条主义了

楼主还是去弄明白到底为什么浮点数不精确吧,一两个例子说明不了什么,更何况例子还可能是错误的。

[Quote=引用楼主 agxywjbing 的帖子:]
原先学习时没注意的一个问题:
1.在谭老的教材上有一个这样的叙述:1.0/3*3的结果并不等于1。几天上机验证结果还就是1.000000-----(精度问题我也是理解的,这里不知为何?)
2.输入若干学生成绩(浮点数),以特殊值-1为结束标记,求平均值。这一题原先学习时好象说循
环条件不能写成while(score!=-1) 说是因数精度问题,这样会是死循环,原先也就这样认为了,可前几天上机验证了,确不是这么回事,并不会死循环。
哪位大虾能为我解惑…
[/Quote]
  • 打赏
  • 举报
回复
浮点数不是精确的, 老谭说的太绝对了
课程背景Modbus 协议是工业自动化控制系统中常见的通信协议,协议的全面理解是个痛点。本课程主讲老师集10多年在Modbus协议学习、使用中的经验心得,结合当前物联网浪潮下Modbus协议开发的痛点,推出这套面向Modbus 协议初学者的课程。本课程不同于以往市面课程只是协议讲解无实现代码,而是采用讲解与实践并重的方式,结合STM32F103ZET6开发板进行手把手编程实践,十分有利于初学者学习。涵盖了学习者在Modbus协议方面会遇到的方方面面的问题,是目前全网首个对Modbus协议进行全面总结的课程。课程名称   协议讲解及实现>>课程内容1、Modbus 协议的基础。2、Modbus协议栈函数编程实现。3、Modbus协议在串行链路编程实现。4、Modbus协议在以太网链路编程实现。5、常见问题的解决方法。带给您的价值通过学习本课程,您可以做到如下:1、全面彻底的理解Modbus协议。2、理解在串行链路,以太网链路的实现。3、掌握Modbus协议解析的函数编程方法,调试工具的使用。4、掌握多个串口,网口同时运行同一个Modbus协议栈的方法。5、掌握Modbus协议下,负数,浮点数等处理方法。讲师简介许孝刚,山东大学工程硕士,副高职称,技术总监。10多年丰富嵌入式系统开发经验,国家软考“嵌入式系统设计师”。2017年获得“华为开发者社区杰出贡献者”奖励。

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧