ruby - 为什么 Ruby 中有 0.0 和 -0.0?

标签 ruby floating-point negative-zero

在 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/

相关文章:

ruby-on-rails - 在 sum 函数中将 nil 视为零

c++ - 在 C++ 中修复 static_cast<int>() 的精度

c++ - 是否可以在编译时测试 C++ 中的类型是否支持负零?

ruby-on-rails - 盆景服务器挂了怎么办?

ruby - 如何在 Capybara 中单击此 Bootstrap 按钮?

ruby - 从 map 结果创建哈希

postgresql - 在 PostgreSQL 中格式化 double

c - 是否保证两个等值的 double 具有相同的位模式?

javascript - 在String.prototype.slice()中,.slice(0,-0)和.slice(0,+0)应该输出相同的结果吗?

javascript - 有没有 JavaScript 中的负零产生重大影响的示例/场景?