if x=0, expected output of 1/x is Inf, but matlab output -Inf
load('x.mat')
x==0
Unrecognized function or variable 'x'.
1/0
1/x

2 件のコメント

Matt J
Matt J 2024 年 2 月 13 日
Your attached file doesn't contain a variable called x.
Image Analyst
Image Analyst 2024 年 2 月 13 日
x==0 is a comparison, not an assignment. Since you didn't assign x yet, you can't see if it's equal to zero, hence the error. I think you meant x=0, not x==0.

サインインしてコメントする。

 採用された回答

Stephen23
Stephen23 2024 年 2 月 13 日
編集済み: Stephen23 2024 年 2 月 13 日

3 投票

"A bug? input: 1/0 output: -Inf"
Not a bug. Because your value x is actually negative zero not positive zero:
Lets try it now:
x = -0
x = 0
1/x
ans = -Inf
num2hex(x) % yep, definitely negative zero
ans = '8000000000000000'
x = +0
x = 0
1/x
ans = Inf
num2hex(x) % yep, that is positive zero
ans = '0000000000000000'
So far everything is working exactly as expected. Note that a few simple arithmetic operations will convert negative zero to positive zero without affecting any other values, e.g. adding zero:
x = -0;
1/x
ans = -Inf
x = 0+x;
1/x
ans = Inf

4 件のコメント

Stephen23
Stephen23 2024 年 2 月 13 日
Lets take a look at your uploaded data:
S = load('x.mat');
x = S.deltaX
x = 0
1/x
ans = -Inf
num2hex(x) % yep, definitely negative zero
ans = '8000000000000000'
qilin
qilin 2024 年 2 月 13 日
It is helpful, maybe the next step is to figure out why my ''deltaX'' is negative zero, thank you.
Dyuman Joshi
Dyuman Joshi 2024 年 2 月 13 日
How did you obtain that value?
Stephen23
Stephen23 2024 年 2 月 13 日
"maybe the next step is to figure out why my ''deltaX'' is negative zero"
Most likely it makes zero(!) difference: note that by definition negative and positive zeros have the same value, so if you are happy with your array being zero-value then simply multiply your array by one (or add zero) and move on to more important tasks.

サインインしてコメントする。

その他の回答 (1 件)

Matt J
Matt J 2024 年 2 月 13 日
編集済み: Matt J 2024 年 2 月 13 日

0 投票

Theorem: 1/0 = Inf if and only if 1/0 is also -Inf.
Proof: Assume first that 1/0=Inf and let us deduce the implication that 1/0=-Inf. By multiplying the numerator and denominator by -1, we obtain,
1/0 = (-1)/(-0) = (-1)/0 = -(1/0) = -Inf
proving the implication Now assume that 1/0=-Inf. Proceeding similarly,
1/0 = (-1)/(-0) = (-1)/0 = -(1/0) = -(-Inf) = +Inf
and the reverse implication is also proved. Q.E.D.

2 件のコメント

qilin
qilin 2024 年 2 月 13 日
Thank you for your answer, it's interesting, but: .
In other words, when we say , actually it's , here , so the second
''='' of ''1/0 = (-1)/(-0) =...'' should be modified.
Matt J
Matt J 2024 年 2 月 13 日
You took it way too seriously...

サインインしてコメントする。

カテゴリ

ヘルプ センター および File ExchangeTime Series Events についてさらに検索

製品

リリース

R2023b

タグ

質問済み:

2024 年 2 月 13 日

コメント済み:

2024 年 2 月 13 日

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by