У меня есть задание, в котором мне в основном нужно подсчитать количество операций с плавающей запятой в простой программе, которая включает цикл, матрицу и такие операции, как *, + и ^.
Насколько я понимаю, операция с плавающей запятой — это операция, включающая числа с плавающей запятой, и мы можем быть заинтересованы в подсчете этих операций, потому что я думаю, что они могут быть более затратными для компьютера. Если вы хотите добавить больше деталей в эту часть, было бы неплохо.
Моя проблема в том, что я понятия не имею, какие именно операции включают числа с плавающей запятой, если только я не использую такие функции, как isfloat
. В таком случае нужно ли, чтобы только одно из чисел в операции было числом с плавающей запятой, чтобы операция считалась операцией с плавающей запятой, верно? Если нет, то почему? Можете ли вы добавить более подробную информацию об этом?
Например, предположим, что у меня есть следующая простая функция:
function [r, n] = naive(c, x)
% c is the vector of coefficients of the polynomial
% The coeffiecients should be given as follows
% c(1) = coefficient of x^0 (or 1).
% c(length(c)) = coefficient of the largest power of x
% x is the point to evaluate the polynomial at
% r is the result of the evaluation
% (Assumes that the entries are integers)
r = c(1);
n = 0;
for i=2:length(c)
r = r + c(i) * x^(i - 1);
n = n + 2 + (i - 1);
end
end
который в основном вычисляет нормальный полином, оцененный в x
, учитывая коэффициенты в векторе c
.
Как видно из кода, n
на самом деле отслеживает операции с плавающей запятой. Но на самом деле я считаю каждую математическую операцию (кроме присваивания) операцией с плавающей запятой, но это, конечно, может быть неправильно, или это так? Если да или нет, то почему?
И коэффициенты, и c
могут быть числами с плавающей запятой. Итак, вместо того, чтобы считать каждую операцию операцией с плавающей запятой, должны ли мы сначала проверить, например, isfloat
, являются ли числа с плавающей запятой, и только затем увеличивать n
?
Заметьте, мне известна функция flops
, которая, насколько я понял, должна считать операции с плавающей запятой, но она устарела, и в основном я хотел бы лучше изучить эти понятия, а потому попробую посчитать их вручную.
Спасибо за любую помощь!
i-1
умножения и одно сложение. - person Patricia Shanahan   schedule 04.03.2016y
x
s, но умножения простоy - 1
. - person nbro   schedule 04.03.2016flops
устарела еще в 2000 году по причинам, описанным в эта статья (см. в конце) основателя MathWorks Клева Молера. Это хорошее упражнение, но вы (и ваш инструктор) должны знать, что оно может быть бесполезным для характеристики производительности Matlab (тем более с современной JIT-компиляцией). - person horchler   schedule 04.03.2016c(i)
более чем двумя операциями с плавающей запятой? В общем, есть ли хорошая документация для извлечения этой информации (например, та, которую вы мне дали), т.е. сколько операций с плавающей запятой фактически используется для вводящих в заблуждение операций, таких как индексация? - person nbro   schedule 05.03.2016