我想知道将浮点数转换为二进制字符串的最佳方法,反之亦然,将二进制字符串转换为浮点数。
我正在使用遗传学算法,我需要保存一个浮点数在[0-1]范围内的二进制表示,因此我还需要知道Ruby用来在内存中保存浮点数的位数。
我试图用String#Unpack方法解决这个问题,但得到了一个奇怪的结果:
binary_string_number = "0" * 32
=> "00000000000000000000000000000000"
binary_string_number.unpack("F")
=> [6.409690556097303e-10]
结果应该是0.0对吧?,我不理解这种行为。
谢谢您!
最佳答案
我想你需要先把绳子打包,然后再把它拆成浮子。你得到的基本上是一个表示一系列位的字符串,但不是你试图读取的实际位(如果我正确理解你的问题的话)。
["0" * 32].pack("b*") # => "\x00"
["0" * 32].pack("b*").unpack("F") # => "\x00".unpack("F") => 0.0
["11".rjust(32, "0")].pack("b*").unpack("F") # => -2.0
不过,我不是这方面的专家。