【问题标题】:Differences between 0, -0 and +0 [duplicate]0、-0 和 +0 之间的差异 [重复]
【发布时间】:2014-04-29 15:04:58
【问题描述】:

我一直不明白为什么-00 分开处理。

有趣的事实是0 等于-0

> 0 === -0
true

那么,问题来了:为什么-0treated separately0+0

0 之前的符号是否重要?

在数学中+0 是一个比0 稍大的值。此外,-0 的值略低于0。例如:n / Infinity 将返回 +0n / -Infinity -0(假设 n 是大于 0 的实数)。这发生在数学中。

【问题讨论】:

  • 我认为答案可能是,因为这就是语言所说的应该被对待的方式。
  • en.wikipedia.org/wiki/IEEE_754中定义。原因很简单,在内存中的二进制表示中,有一位定义了数字的符号。仅仅通过这个事实,所有表示的数字都可能是正数或负数(组合地)。
  • 可能是这个问题及其答案给了一些想法How do I check if a zero is positive or negative?不确定但是;)
  • 我可能错了,但-0+0 不会将其解析为数字吗?所以它基本上相当于Number(-0)Number(0)?
  • 一开始没有 3 个零:只有两个:+0 和 -0。

标签: javascript


【解决方案1】:

"Branch Cuts for Complex Elementary Functions or Much Ado About Nothing's Sign Bit " 解决了有符号零的原因。这种分析为 IEEE-754 提供了信息,它是大多数现代指令集的基础 和编程语言的浮点数行为。

简而言之,许多常见的数值函数可以在它们不能与无符号零连续的地方与有符号零连续,从而导致更少的NaN 值和更少的特殊情况。除法就是这样一种功能。


那么问题来了:为什么-0和0和+0分开处理?

为了清楚起见,只有两个零值。 -0 和 +0。标记(0) 可以替换标记(+0),无论它们出现在哪里,而不会改变语义。


有趣的事实是 0 等于 -0

0 === -0
true

这种行为是 IEEE-754 规定的。

测试两个数值是否“相同”:

function same(x, y) {
  if (x === y) {
    if (x !== 0) {
      return true;  // Non-zero values.
    } else {
      return (1/x === 1/y);  // Test signed-ness of zeroes.
    }
  } else {
    return x !== x && y !== y;  // Treat NaNs the same
  }
}

【讨论】:

    猜你喜欢
    • 2021-01-24
    • 1970-01-01
    • 2021-10-07
    • 1970-01-01
    • 2018-12-15
    • 2021-07-04
    • 1970-01-01
    • 1970-01-01
    • 2021-01-23
    相关资源
    最近更新 更多