std:: norm (std::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 起) | |
|
额外重载
(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 起) | |
|
A,B)
为所有整数和浮点类型提供了额外的重载,这些类型被视为虚部为零的复数。
|
(since C++11) |
目录 |
参数
| z | - | 复数 |
| f | - | 浮点数值 |
| i | - | 整数值 |
返回值
注释
复数的
欧几里得范数
由
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
参见
|
返回复数的模
(函数模板) |
|
|
返回复共轭
(函数模板) |
|
|
通过模和辐角构造复数
(函数模板) |