返回信息流有些资料说,浮点数不能用二进制精确表示,对散列表而言,会出现浮点数“相等”(即相差小到一定程度)时,散列值未必相等。
请问这种说法是否正确?double、float类型不适合直接用来当散列表的键吗?
这是一条镜像帖。来源:北邮人论坛 / cpp / #87113同步于 2015/5/15
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
【请教】double能否作为散列表的键?
en911
2015/5/15镜像同步4 回复
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
看情况
如果你的数据总是从同一份静态数据读入的,没问题;
如果你的数据总是从相同的静态数据通过相同的方式算出来的,没问题;
如果你的数据类似 myMap[3.3f] = "3.3f"; cout << myMap[2.2f + 1.1f]; 有可能会出错。
关键在于不同的运算会产生不同的误差,而有些数是无法精确表示的
http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html