Math 为什么Gnu倍频程有负零?

Math 为什么Gnu倍频程有负零?,math,matlab,floating-point,octave,Math,Matlab,Floating Point,Octave,这是一个奇怪的问题,我感到困惑。我最近注意到在Gnu倍频程提示符下,可以输入负零,如下所示: octave:2> abomination = -0 它也记得这一点: octave:3> abomination abomination = -0 为了理智起见,负零确实等于正则零。但我也注意到这个标志还有一些其他的影响。例如: octave:6> 4 * 0 ans = 0 octave:7> 4 * -0 ans = -0 octave:8> 4 / 0 warn

这是一个奇怪的问题,我感到困惑。我最近注意到在Gnu倍频程提示符下,可以输入负零,如下所示:

octave:2> abomination = -0
它也记得这一点:

octave:3> abomination
abomination = -0
为了理智起见,负零确实等于正则零。但我也注意到这个标志还有一些其他的影响。例如:

octave:6> 4 * 0
ans = 0
octave:7> 4 * -0
ans = -0
octave:8> 4 / 0
warning: division by zero
ans = Inf
octave:9> 4 / -0
warning: division by zero
ans = -Inf
正如人们所看到的,该标志通过某些操作得以保留。但我的问题是为什么。这似乎是对标准数学的根本背离,在标准数学中,零基本上是没有符号的。有没有一些吸引人的数学特性?这在数学的某些领域中重要吗

仅供参考:以倍频程为模型的Matlab没有负零。任何使用它们的尝试都被视为常规零

编辑:
Matlab确实有负零,但它们不会显示在默认输出中。

IEEE-754浮点数也有此属性。它可能对极限和无限有用。例如,限制为1/x和x→ +∞ 为0,但函数从轴的正侧接近,x→ −∞ 函数从负的一面逼近,因此可以给出如下极限:−0,在这种情况下。

符号零与数学模型相呼应 分析了从零开始逼近的概念 以下为单边限制,可能 由x表示→ 0−, x→ 0−, 或x→ ↑0“符号”−可以使用0英寸 非正式地表示负数 这已经四舍五入为零。这个 负零的概念也有一定的局限性 理论在工程中的应用 统计力学和其他 纪律


符号零是IEEE-754格式的一部分,其语义完全由这些格式指定。事实证明,它们非常有用,特别是在处理复杂平面的复杂分支切割和变换时(有关更多详细信息,请参阅W.Kahan关于该主题的许多著作,如经典的“复杂初等函数的分支切割,或关于零符号位的许多烦琐”)

简短的版本:负零通常是数值计算中的一件好事,而试图保护用户不受其影响的程序通常会对他们造成伤害。FWIW,MATLAB似乎也使用负零,但由于它使用主机的
printf
例程打印数字,因此在Windows上显示的数字与正零相同


有关MATLAB中有符号零的更多详细信息,请参见MATLAB论坛。

是的,在某些数学中,区分-Inf和+Inf很重要,例如log(0)=-Inf。嗯,无穷大总是有符号的。无论如何,这不是我的观点。仅供参考:倍频程绝对不是“基于”Matlab的。Octave是以Matlab为模型,旨在解决同样的问题,但它肯定不是以Matlab为基础的。“标准数学”和浮点运算是两个截然不同的概念。@Joachim。我修正了,谢谢。对于整数来说,负零是一个讨厌的数字。但即使是在计算机中,它们也是可能的。我认为CDC早在当时就制造了一个补充机器。嗯,不确定能做什么,但在符号部分丢失了一些格式,所以现在前两个部分看起来完全相同。谢谢Matlab的帮助。我在问题上加了一条注释。