gpt4 book ai didi

ruby - 在 Ruby 中将唯一的种子字符串转换为随机但确定的浮点值

转载 作者:数据小太阳 更新时间:2023-10-29 06:35:26 26 4
gpt4 key购买 nike

我在概念上遇到了困难。

基本上,我需要接受一些任意的唯一字符串,并能够将其转换为规范化的浮点值。输出浮点值是什么并不重要,只要相同的字符串输入总是产生相同的规范化浮点输出即可。

所以这是一个哈希算法,对吗?我熟悉 SHA1 或 MD5,这似乎类似于密码散列,正确密码的结果相同。但是我相信那些方法会输出字符串。我没有得到的是如何将 SHA1 或 MD5 的结果转换为一致的浮点值。

# Goal
def string_to_float(seed_string)
# ...
end

string_to_float('abc-123') #=> 0.15789
string_to_float('abc-123') #=> 0.15789

string_to_float('def-456') #=> 0.57654
string_to_float('def-456') #=> 0.57654

那么我可以在 Ruby 中采用哪种方法将任意字符串转换为随机但一致的浮点值?

最佳答案

您想要的关键部分是一种将 SHA1 或 MD5 哈希输出转换为既确定又 1-1 的 float 的方法。这是一个基于 md5 的简单解决方案。这也可以用作整数。

require 'digest/md5'

class String
def float_hash
(Digest::MD5.hexdigest(self).to_i(16)).to_f
end
end

puts "example_string".float_hash # returns 1.3084281619666243e+38

这会生成一个十六进制哈希值,然后将其转换为整数,然后再将其转换为 float 。每一步都是确定性的。

注意:正如@emboss 所指出的,这会降低抗碰撞性,因为 double 为 8 个字节,而哈希为 16 个字节。尽管从您的应用程序的声音来看,这应该不是什么大问题。

关于ruby - 在 Ruby 中将唯一的种子字符串转换为随机但确定的浮点值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7112664/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com