On this page
std::norm(std::complex)
Defined in header <complex> |
||
|---|---|---|
| (1) | ||
|
(until C++20) | |
|
(since C++20) | |
| Additional overloads (since C++11) | ||
Defined in header <complex> |
||
| (A) | ||
|
(until C++20) | |
|
(since C++20) (until C++23) |
|
|
(since C++23) | |
| (B) | ||
|
(until C++20) | |
|
(since C++20) |
1) Returns the squared magnitude of the complex number
z.
| A,B) Additional overloads are provided for all integer and floating-point types, which are treated as complex numbers with zero imaginary component. | (since C++11) |
Parameters
| z | - | complex value |
| f | - | floating-point value |
| i | - | integer value |
Return value
1) The squared magnitude of
z.
A) The square of
f.
B) The square of
i.
Notes
The norm calculated by this function is also known as field norm or absolute square.
The Euclidean norm of a complex number is provided by std::abs, which is more costly to compute. In some situations, it may be replaced by std::norm, for example, if abs(z1) > abs(z2) then norm(z1) > norm(z2).
The additional overloads are not required to be provided exactly as (A,B). They only need to be sufficient to ensure that for their argument num:
- If
numhas a standard(until C++23) floating-point typeT, thenstd::norm(num)has the same effect asstd::norm(std::complex<T>(num)). - Otherwise, if
numhas an integer type, thenstd::norm(num)has the same effect asstd::norm(std::complex<double>(num)).
Example
#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';
}
Output:
std::norm((3,4)) = 25
See also
| returns the magnitude of a complex number (function template) |
|
| returns the complex conjugate (function template) |
|
| constructs a complex number from magnitude and phase angle (function template) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/numeric/complex/norm