Я не могу понять, почему деление на 0 дает разные результаты в следующих двух случаях. amort
- это функция, которая вычисляет график постоянной амортизации. Единственное, что мы заботимся о том, что в настоящее время является последним элементом А именно 0.Matlab division by 0: Inf или -Inf
amort = @(r,M) ((1+r).^(0:M)' - (1+r).^M) ./ (1-(1+r).^M)
A = amort(0.03, 20);
>> A(end)==0
ans =
1
То, что выглядит странно выглядит следующим образом:
>> 1/0
ans =
Inf
>> 1/A(end)
ans =
-Inf
Однако
>> sign(A(end))
ans =
0
>> 1/abs(A(end))
ans =
Inf
Как это возможно и почему? Есть ли какой-то скрытый «знак»?
Возможный дубликат [Почему Октава Гну имеет отрицательные нули?] (Http://stackoverflow.com/questions/2109755/why-does-gnu-octave-have-negative-zeroes) – excaza
Хотя дубликаты ссылок Octave, принятый ответ касается MATLAB и формата IEEE-754. – excaza
'A (end)' отрицательный ноль. 'fprintf ('% f \ n', A (end))' возвращает '-0.000000' – excaza