11.11. Вычисление нормы вектора

11.11. Вычисление нормы вектора

Проблема

Требуется найти норму (т. е. длину) числового вектора.

Решение

Можно использовать функцию inner_product из заголовочного файла <numeric> для умножения вектора на самого себя, как показано в примере 11.21.

Пример 11.21. Вычисление нормы вектора

#include <numeric>

#include <vector>

#include <cmath>

#include <iostream>

using namespace std;

template<typename Iter_T>

long double vectorNorm(Iter_T first, Iter_T last) {

 return sqrt(inner_product(first, last, first, 0.0L));

}

int main() {

 int v[] = { 3, 4 };

 cout << "The length of the vector (3.4) is ";

 cout << vectorNorm(v, v + 2) << endl;

}

Программа примера 11.21 выдает следующий результат.

The length of the vector (3,4) is 5

Обсуждение

В примере 11.21 функция inner_product из заголовочного файла <numeric> используется для вычисления скалярного произведения числового вектора на самого себя. Квадратный корень полученного значения, как известно, является нормой вектора, или длиной вектора.

Вместо того чтобы в функции vectorNorm выводить тип результата по аргументам, я решил для него использовать тип long double, чтобы терять как можно меньше данных. Если вектор представляет собой набор значений целого типа, маловероятно, что в реальных условиях норма вектора может быть адекватно представлена целым типом.