Namespaces
Variants

std:: norm (std::complex)

From cppreference.net
ヘッダーで定義 <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以降)
ヘッダーで定義 <complex>
(A)
float norm ( float f ) ;

double norm ( double f ) ;

long double norm ( long double f ) ;
(C++20以前)
constexpr float norm ( float f ) ;

constexpr double norm ( double f ) ;

constexpr long double norm ( long 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
A,B) すべての整数型および浮動小数点型に対して追加のオーバーロードが提供されており、これらは虚数部がゼロの複素数として扱われます。
(C++11以降)

目次

パラメータ

z - 複素数値
f - 浮動小数点値
i - 整数値

戻り値

1) z の二乗ノルム。
A) f の二乗。
B) i の2乗。

注記

この関数によって計算されるノルムは、 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

関連項目

複素数の絶対値を返す
(関数テンプレート)
複素共役を返す
(関数テンプレート)
絶対値と偏角から複素数を構築する
(関数テンプレート)