Плавающие точки имеют неожиданные иррациональные числа.
, Например, Вы не можете сохранить 1/3 как десятичное число, это было бы 0.3333333333... (и так далее)
, Плавания на самом деле хранятся как двоичное значение и питание 2 экспонент.
Так 1.5 хранится, поскольку 3 x 2 к-1 (или 3/2)
Используя эти показатели основания 2 создают некоторые нечетные иррациональные числа, например:
Преобразовывают 1.1 в плавание и затем преобразовывают его назад снова, Ваш результат будет чем-то как: 1.0999999999989
Это вызвано тем, что двоичное представление 1,1 является на самом деле 154811237190861 x 2^-47, больше, чем двойное может обработать.
[еще 119] об этой проблеме о мой блог , но в основном, для устройства хранения данных, Вы более обеспечены с десятичными числами.
На Microsoft SQL server Вы имеете money
тип данных - это является обычно лучшим для финансового устройства хранения данных. Это с точностью до 4 десятичных разрядов.
Для вычислений у Вас есть больше проблемы - погрешность является крошечной частью, но поместила ее в функцию питания, и это быстро становится значительным.
Однако десятичные числа не очень хороши ни для какого вида математики - нет никакой собственной поддержки десятичных полномочий, например.
1)
total = 0;
for i=1:size(A,1)
for j=1:size(A,2)
total = total + A(i,j);
end
end
2)
total = sum(A(:));
Другой ответ на первый вопрос - использовать один для цикла и выполнить линейный индексация в массив с помощью функции NUMEL для получения общего количества элементов:
total = 0;
for i = 1:numel(A)
total = total+A(i);
end