很奇怪的一个数字相加问题,和不为1,原因?

Crystal0523 2005-10-07 05:28:28
各位好:
我用vb做了一个哈夫曼编码的程序,输入个数与各个概率,可以算出编码。可是,刚我输入6个概率如下时:0.36,0.28,0.14,0.11,0.08,0.03,总是显示和不为1,逐步调试,才知和为0。999999999……,可是用计算器算出的和是1呀。很奇怪,在C语言里也出现了同样的错误。
...全文
206 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Crystal0523 2005-10-09
  • 打赏
  • 举报
回复
谢谢各位!我请教了一位老师,她也说是二进制的精度问题。用了两种方法解决:一是像northwolves(狼行天下)所说,用了abs(sum-1)<exp(-15),这个挺精确的了。二是将浮点数扩大化,成为整形数,正如province_(雍昊)所说。只不过不能确定只有两位小数。
threenewbee 2005-10-08
  • 打赏
  • 举报
回复
精度误差。
truewill 2005-10-07
  • 打赏
  • 举报
回复
如果小数位确定是2位,可以用currency
province_ 2005-10-07
  • 打赏
  • 举报
回复
HUFFMAN编码树的生成里你可以把概率都乘100后用整型来表示。浮点数有个运算精度的问题。
northwolves 2005-10-07
  • 打赏
  • 举报
回复
二进制的缘故。你可以这样处理:

if abs(1-sum)<0.0001 then

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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