std::norm(std::complex)
From cppreference.com
| ヘッダ <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以降) | |
1) 複素数zの絶対値の2乗を返します。
|
A,B) すべての整数型および浮動小数点型に対する追加のオーバーロードが提供されます。これらは虚部がゼロの複素数として扱われます。
|
(C++11以降) |
目次 |
[編集] パラメータ
| z | - | complex value |
| f | - | floating-point value |
| i | - | 整数値 |
[編集] 戻り値
1) zの絶対値の2乗。
A) fの2乗。
B) iの2乗。
[編集] 注記
この関数によって計算されるノルムは、体ノルムまたは絶対値の2乗としても知られています。
ユークリッドノルムはstd::absによって提供され、計算コストが高くなります。状況によっては、例えばabs(z1) > abs(z2)ならばnorm(z1) > norm(z2)となる場合など、std::normで置き換えることができます。
追加のオーバーロードは、(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
[編集] 関連項目
| 複素数の大きさを返す (関数テンプレート) | |
| 複素共役を返す (関数テンプレート) | |
| 大きさと偏角から複素数を構築する (関数テンプレート) |