std:: norm (std::complex)
|
Определено в заголовке
<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) | |
|
Дополнительные перегрузки
(начиная с C++11)
|
||
|
Определено в заголовке
<complex>
|
||
| (A) | ||
|
float
norm
(
float
f
)
;
double
norm
(
double
f
)
;
|
(до C++20) | |
|
constexpr
float
norm
(
float
f
)
;
constexpr
double
norm
(
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) | |
|
A,B)
Для всех целочисленных и вещественных типов предоставлены дополнительные перегрузки, которые обрабатываются как комплексные числа с нулевой мнимой компонентой.
|
(since C++11) |
Содержание |
Параметры
| z | - | комплексное значение |
| f | - | значение с плавающей запятой |
| 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
Смотрите также
|
возвращает модуль комплексного числа
(шаблон функции) |
|
|
возвращает комплексно-сопряжённое число
(шаблон функции) |
|
|
создаёт комплексное число из модуля и фазового угла
(шаблон функции) |