名前空間
変種
操作

std::proj(std::complex)

From cppreference.com
< cpp‎ | numeric‎ | complex
 
 
 
 
ヘッダ <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) すべての整数型および浮動小数点型に対して追加のオーバーロードが提供されます。これらは、正のゼロの虚数成分を持つ複素数として扱われます。

目次

[edit] パラメータ

z - complex value
f - floating-point value
i - 整数値

[edit] 戻り値

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

[edit] 注記

関数projは、すべての無限大を1つ(虚数ゼロの符号は除く)にマッピングすることでリーマン球をモデル化するのに役立ちます。他の無限大に対して誤った結果をもたらす可能性のある演算、特に比較の直前に使用するべきです。

追加のオーバーロードは、(A,B) とまったく同じように提供される必要はありません。引数 num に対して十分であればよいです。

  • もしnumが標準の浮動小数点型Tである場合、std::proj(num)std::proj(std::complex<T>(num))と同じ効果を持ちます。(C++23まで)
  • そうでなく、もしnumが整数型である場合、std::proj(num)std::proj(std::complex<double>(num))と同じ効果を持ちます。

[edit]

#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)

[edit] 関連項目

複素数の大きさを返す
(関数テンプレート) [編集]
大きさの2乗を返す
(関数テンプレート) [編集]
大きさと偏角から複素数を構築する
(関数テンプレート) [編集]
Cドキュメントcprojについて)
English 日本語 中文(简体) 中文(繁體)