필터 지우기
필터 지우기

Why fprintf('%​3.1f',roun​d(-eps)) prints -0.0?

조회 수: 3 (최근 30일)
Sandor Toth
Sandor Toth 2017년 1월 17일
댓글: James Tursa 2017년 1월 17일
I found some very strange behaviour of the round function in Matlab R2016b (at least for me). I would expect that the round function returns 0 for -eps, but surprisingly the command:
num2hex(round(-eps))
Returns:
8000000000000000
Instead of
num2hex(0) == 0000000000000000
This causes fprintf() to print -0.0. Is this a bug or I just miss something?
  댓글 수: 1
James Tursa
James Tursa 2017년 1월 17일
Side Note: This seems to be consistent among the related functions ceil and fix as well. E.g.,
>> num2hex(round(-eps))
ans =
8000000000000000
>> num2hex(ceil(-eps))
ans =
8000000000000000
>> num2hex(fix(-eps))
ans =
8000000000000000

댓글을 달려면 로그인하십시오.

채택된 답변

Stephen23
Stephen23 2017년 1월 17일
편집: Stephen23 2017년 1월 17일
You are missing the fact that MATLAB has two zeros: positive zero and negative zero, which have different HEX values. This is a result of the IEEE 754 floating point standard that MATLAB implements, which uses one bit to indicate the number sign: a corollary of this is that even a zero can be positive or negative.
It is not possible to use < to directly test if zero is negative (by definition negative zero is equal to positive zero, so this makes sense):
>> (-0)<0
ans =
0
but here is one simple trick that will test for negative zero:
>> (1/-0)<0
ans =
1
Which relies on this behavior:
>> 1/-0
ans =
-Inf
>> 1/round(-eps) % your question
ans =
-Inf
Neat huh!
You can find more interesting information on negative zeros here:

추가 답변 (1개)

Adam
Adam 2017년 1월 17일
편집: Adam 2017년 1월 17일

카테고리

Help CenterFile Exchange에서 Logical에 대해 자세히 알아보기

제품

Community Treasure Hunt

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

Start Hunting!

Translated by