名前空間
変種
操作

std::norm(std::complex)

From cppreference.com
< cpp‎ | numeric‎ | 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以降)
ヘッダ <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の絶対値の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

[編集] 関連項目

複素数の大きさを返す
(関数テンプレート) [編集]
複素共役を返す
(関数テンプレート) [編集]
大きさと偏角から複素数を構築する
(関数テンプレート) [編集]
English 日本語 中文(简体) 中文(繁體)