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)
모든 정수 및 부동소수점 타입에 대해 추가 오버로드가 제공되며, 이들은 0인 허수부를 가진 복소수로 처리됩니다.
|
(since C++11) |
목차 |
매개변수
| z | - | 복소수 값 |
| f | - | 부동소수점 값 |
| i | - | 정수 값 |
반환값
참고 사항
이 함수로 계산된 노름은 field norm 또는 absolute square 로도 알려져 있습니다.
복소수의
유클리드 노름(Euclidean norm)
은
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
참고 항목
|
복소수의 크기를 반환합니다
(함수 템플릿) |
|
|
켤레 복소수를 반환합니다
(함수 템플릿) |
|
|
크기와 위상각으로부터 복소수를 생성합니다
(함수 템플릿) |