Namespaces
Variants

std:: norm (std::complex)

From cppreference.net
Определено в заголовке <complex>
(1)
template < class T >
T norm ( const std:: complex < T > & z ) ;
(до C++20)
template < class T >
constexpr T norm ( const std:: complex < T > & z ) ;
(начиная с C++20)
Определено в заголовке <complex>
(A)
float norm ( float f ) ;

double norm ( double f ) ;

long double norm ( long double f ) ;
(до C++20)
constexpr float norm ( float f ) ;

constexpr double norm ( double f ) ;

constexpr long double norm ( long double f ) ;
(начиная с C++20)
(до C++23)
template < class FloatingPoint >
constexpr FloatingPoint norm ( FloatingPoint f ) ;
(начиная с C++23)
(B)
template < class Integer >
double norm ( Integer i ) ;
(до C++20)
template < class Integer >
constexpr double norm ( Integer i ) ;
(начиная с C++20)
1) Возвращает квадрат модуля комплексного числа z .
A,B) Для всех целочисленных и вещественных типов предоставлены дополнительные перегрузки, которые обрабатываются как комплексные числа с нулевой мнимой компонентой.
(since C++11)

Содержание

Параметры

z - комплексное значение
f - значение с плавающей запятой
i - целочисленное значение

Возвращаемое значение

1) Квадрат модуля z .
A) Квадрат f .
B) Квадрат i .

Примечания

Норма, вычисляемая этой функцией, также известна как field norm или absolute square .

Евклидова норма комплексного числа вычисляется с помощью std::abs , что требует больших вычислительных затрат. В некоторых ситуациях её можно заменить на std::norm , например, если abs ( z1 ) > abs ( z2 ) , то norm ( z1 ) > norm ( z2 ) .

Дополнительные перегрузки не обязаны быть предоставлены именно в виде (A,B) . Они должны быть лишь достаточными для обеспечения того, чтобы для их аргумента num :

  • Если num имеет стандартный (до C++23) тип с плавающей точкой T , то std :: norm ( num ) имеет тот же эффект, что и std :: norm ( std:: complex < T > ( num ) ) .
  • В противном случае, если num имеет целочисленный тип, то std :: norm ( num ) имеет тот же эффект, что и std :: norm ( std:: complex < double > ( num ) ) .

Пример

#include <cassert>
#include <complex>
#include <iostream>
int main()
{
    constexpr std::complex<double> z {3.0, 4.0};
    static_assert(std::norm(z) == (z.real() * z.real() + z.imag() * z.imag()));
    static_assert(std::norm(z) == (z * std::conj(z)));
           assert(std::norm(z) == (std::abs(z) * std::abs(z)));
    std::cout << "std::norm(" << z << ") = " << std::norm(z) << '\n';
}

Вывод:

std::norm((3,4)) = 25

Смотрите также

возвращает модуль комплексного числа
(шаблон функции)
возвращает комплексно-сопряжённое число
(шаблон функции)
создаёт комплексное число из модуля и фазового угла
(шаблон функции)