Big*_*gle 24 math floating-point matlab octave
这是一个奇怪的我很困惑.我最近注意到在Gnu Octave提示符下,可以输入负零,如下所示:
octave:2> abomination = -0
Run Code Online (Sandbox Code Playgroud)
它也记得它:
octave:3> abomination
abomination = -0
Run Code Online (Sandbox Code Playgroud)
为了理智,负零确实等于常规零.但我也注意到这个标志还有一些其他的影响.像这些:
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
Run Code Online (Sandbox Code Playgroud)
可以看出,通过某些操作保留了标志.但我的问题是为什么.这似乎是对标准数学的彻底背离,其中零基本上没有符号.有这个有吸引力的数学属性吗?这在某些数学领域是否重要?
仅供参考:Matlab,以八度为模型,没有负零.任何使用它们的尝试都被视为常规零.
编辑:Matlab确实有负零,但它们不会显示在默认输出中.
Ste*_*non 30
有符号零是IEEE-754格式的一部分,它们的语义完全由这些格式指定.它们变得非常有用,特别是在处理复杂平面切割和复杂平面的转换时(有关更多细节,请参阅W. Kahan关于该主题的许多着作,例如经典的"复杂基本函数的分支切割",或多Ado about Nothing's Sign Bit").
简短版本:在数值计算中,负零通常是一件好事,而试图保护用户免于遇到它的程序通常会对它们造成伤害.FWIW,MATLAB似乎也使用负零,但由于它使用主机的printf例程打印数字,它们在Windows上显示与正零相同.
有关MATLAB中已签名零的更多详细信息,请参阅MATLAB论坛上的此讨论.
IEEE-754浮点数也具有此属性.对于限制和无限可能会派上用场.例如,极限的1/X与X →+∞是0,但该功能从轴的正侧接近,与X →-∞函数从负侧接近这样一个可能会给极限-0 , 在这种情况下.