Namespaces
Variants

std:: proj (std::complex)

From ja.cppreference.net
ヘッダー <complex> で定義
template<class T>
std::complex<T> proj(const std::complex<T>& z);
(1) (C++11以降)
ヘッダー <complex> で定義
(A)
std::complex<float> proj(float f);

std::complex<double> proj(double f);

std::complex<long double> proj(long double f);
(C++23以前)
template<class FloatingPoint>
std::complex<FloatingPoint> proj(FloatingPoint f);
(C++23以降)
template<class Integer>
std::complex<double> proj(Integer i);
(B)
1) 複素数 z の リーマン球面 への射影を返します。
ほとんどの z に対して、 std :: proj ( z ) == z が成り立つが、すべての複素無限大、たとえ一方の成分が無限大で他方がNaNである数値も、正の実数無限大 ( INFINITY , 0.0 ) または ( INFINITY , - 0.0 ) になる。虚数(ゼロ)成分の符号は std:: imag ( z ) の符号である。
A,B) すべての整数型および浮動小数点型に対して追加のオーバーロードが提供されており、これらは正のゼロ虚数部を持つ複素数として扱われます。

目次

パラメータ

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

戻り値

1) リーマン球面上への z の射影。
A) リーマン球面上への std:: complex ( f ) の射影。
B) リーマン球面上への std:: complex < double > ( i ) の射影。

注記

proj 関数は、すべての無限大を1つにマッピングすることでリーマン球面をモデル化するのに役立ち(虚数ゼロの符号を除く)、特に比較など、他の無限大に対して疑わしい結果を生じる可能性のある操作の直前に使用する必要があります。

追加のオーバーロードは (A,B) と厳密に同一である必要はありません。それらは引数 num に対して以下を保証するのに十分であればよいのです:

  • num が 標準 (C++23まで) 浮動小数点型 T を持つ場合、 std :: proj ( num ) は std :: proj ( std:: complex < T > ( num ) ) と同じ効果を持つ。
  • それ以外の場合、 num が整数型を持つならば、 std :: proj ( num ) は std :: proj ( std:: complex < double > ( num ) ) と同じ効果を持つ。

例

#include <complex>
#include <iostream>
int main()
{
    std::complex<double> c1(1, 2);
    std::cout << "proj" << c1 << " = " << std::proj(c1) << '\n';
    std::complex<double> c2(INFINITY, -1);
    std::cout << "proj" << c2 << " = " << std::proj(c2) << '\n';
    std::complex<double> c3(0, -INFINITY);
    std::cout << "proj" << c3 << " = " << std::proj(c3) << '\n';
}

出力:

proj(1,2) = (1,2)
proj(inf,-1) = (inf,-0)
proj(0,-inf) = (inf,-0)

関連項目

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