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)
すべての整数型および浮動小数点型に対して追加のオーバーロードが提供されており、これらは虚数部がゼロの複素数として扱われます。
|
(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
関連項目
|
複素数の絶対値を返す
(関数テンプレート) |
|
|
複素共役を返す
(関数テンプレート) |
|
|
絶対値と偏角から複素数を構築する
(関数テンプレート) |