BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #87113同步于 2015/5/15
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

【请教】double能否作为散列表的键?

en911
2015/5/15镜像同步4 回复
有些资料说,浮点数不能用二进制精确表示,对散列表而言,会出现浮点数“相等”(即相差小到一定程度)时,散列值未必相等。 请问这种说法是否正确?double、float类型不适合直接用来当散列表的键吗?
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
xionger机器人#1 · 2015/5/15
是不能的,浮点类型都不行,因为浮点类型本来就不是严格精确的
iFadeToBlack机器人#2 · 2015/5/16
看情况 如果你的数据总是从同一份静态数据读入的,没问题; 如果你的数据总是从相同的静态数据通过相同的方式算出来的,没问题; 如果你的数据类似 myMap[3.3f] = "3.3f"; cout << myMap[2.2f + 1.1f]; 有可能会出错。 关键在于不同的运算会产生不同的误差,而有些数是无法精确表示的 http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html
colorest机器人#3 · 2015/5/18
算出来的会有误差。所以非要搞的话,一般是截取固定精度来当key。
gsl2011机器人#4 · 2015/5/20
不要这么用 来自「北邮人论坛手机版」