This question already has answers here:
Does float have a negative zero? (-0f)
(10个答案)
去年关闭。
在ruby中,为什么我可以给负0.0浮点数分配一个负号,此功能有任何用处吗?有人可以向我解释这个吗?
最后一位是符号位。请注意,所有其他位都相同。
另一方面,零为带符号
和零,带有
尽管
负零有一些special properties。
例如:
明确分配
(10个答案)
去年关闭。
在ruby中,为什么我可以给负0.0浮点数分配一个负号,此功能有任何用处吗?有人可以向我解释这个吗?
-0.0
#=> -0.0
-0.0 * -1
#=> 0.0
最佳答案
您可以在Ruby中为0.0浮点数分配一个负号,因为所有IEEE 754浮点数都有一个符号位来指示该数字是正数还是负数。
这是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
09-25 17:54