Stu*_*unt 10 floating-point matlab zero complex-numbers
我讨厌不得不问这个,因为我认为答案必须简单,但我不能因为我的生活似乎追查来源.在尝试重写函数时,遇到了这个问题:
a = -j
x = real(a)
y = imag(a)
y/x
Run Code Online (Sandbox Code Playgroud)
Inf我出乎意料地吐了出来.然而...
a = 0
b = -1
b/a
Run Code Online (Sandbox Code Playgroud)
-Inf像我期望的那样回归.进一步询问a == x,b == y.显然,这不是真的.经过很多挫折后,我终于找到了问题.如果原始输入a是0-j(相对-j)则没有问题.
双方real(-j)并real(0-j)返回零和测试为零,但显然似乎保存涉及原籍,我绝对不能发现一些元数据.我到底错过了什么?如果我必须用类似的东西来解决这个问题,那将会感到完全错误if (x == 0) then x = 0;
cha*_*pjc 10
不是元数据,只是双精度浮点数的符号位.
>> a = 0-j;
>> b = -j;
>> ra = real(a)
ra =
0
>> rb = real(b)
rb =
0
>> ra==0
ans =
1
>> isequal(ra,rb)
ans =
1
Run Code Online (Sandbox Code Playgroud)
到目前为止看起来一样.然而,不同的是,b我们设置了两个实部和虚部的符号位,当我们做-j = -complex(0,1)对0-j = complex(0,-1)(见创建复数).深入研究typecast,不会转换基础数据:
>> dec2bin(typecast(ra,'uint64'),64)
ans =
0000000000000000000000000000000000000000000000000000000000000000
>> dec2bin(typecast(rb,'uint64'),64)
ans =
1000000000000000000000000000000000000000000000000000000000000000
Run Code Online (Sandbox Code Playgroud)
该1是IEEE 754双精度浮点表示中的第63位(0):

瞧!-0也存在于MATLAB中!