我试图构建或找到一个将java对象作为输入并在[0,1)间隔中返回double值的函数。 " hash"的加密安全性(单向函数,无碰撞)功能不是我的主要想法。我只想要在0和1之间均匀分布的double值。
我无法使用Math.random或Random等函数或类,因为这会为同一输入返回不同的结果。
到目前为止,我最好的方法是使用Object.hashCode()方法并将返回的int值分解为介于0和1之间的两倍。不幸的是,结果值的分布不是很均匀。很多值介于0.1和0.3之间。我想hashCode()方法并不是一成不变的。
关于如何改进我的方法或更好的方法的任何想法?
答案 0 :(得分:0)
如果
,您实际上可以使用随机数(您可能希望将该映射和查找/生成逻辑包装在自己的类中。)
答案 1 :(得分:0)
你的问题中有几点需要注意。
<强>第一强>
我不能使用像Math.random或Random这样的函数或类 会为同一输入返回不同的结果。
您可以将Math.Random与已知种子一起使用。
Random generator = new Random(seed);
double random = generator.nextDouble();
<强>第二强>
你提到了
到目前为止,我最好的方法是使用Object.hashCode()方法和 将返回的int值降低到0到1之间的两倍。 不幸的是,结果值的分布不是很明显 均匀。很多值介于0.1和0.3之间。我想是的 hashCode()方法并不是一成不变的。
这意味着输入的分布使得.hashCode()返回0.1到0.3之间的值。在您的情况下,您想要使用的散列函数将取决于输入。
可能做什么