在 ruby 中,为什么我可以为 0.0 float 分配一个负号,这个功能有什么用处吗?有人可以向我解释一下这个吗?
-0.0
#=> -0.0
-0.0 * -1
#=> 0.0
最佳答案
您可以在 Ruby 中为 0.0 float 指定负号,因为所有 IEEE 754 float 有一个符号位来指示该数字是正数还是负数。
以下是 2.5
和 -2.5
的二进制表示:
[2.5].pack('f').unpack1('b*')
#=> "00000000000000000000010000000010"
[-2.5].pack('f').unpack1('b*')
#=> "00000000000000000000010000000011"
最后一位是符号位。请注意,所有其他位都是相同的。
另一方面,符号位为0
的零:
['00000000000000000000000000000000'].pack('b*').unpack1('f')
#=> 0.0
和零,符号位为1
:
['00000000000000000000000000000001'].pack('b*').unpack1('f')
#=> -0.0
尽管 0.0
和 -0.0
在数值上相等,但它们在对象级别上并不相同:
(0.0).eql?(-0.0) #=> true
(0.0).equal?(-0.0) #=> false
负零有一些 special properties 。 例如:
1 / 0.0 #=> Infinity
1 / -0.0 #=> -Infinity
显式分配 -
并不是获取 -0.0
的唯一方法。您还可能得到 -0.0
作为基本算术运算的结果:
-1.0 * 0 #=> -0.0
关于ruby - 为什么 Ruby 中有 0.0 和 -0.0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58691512/