std::norm(std::complex)
来自cppreference.com
<tbody>
</tbody>
<tbody class="t-dcl-rev t-dcl-rev-num ">
</tbody><tbody>
</tbody>
<tbody class="t-dcl-rev t-dcl-rev-num ">
</tbody><tbody>
</tbody>
<tbody class="t-dcl-rev t-dcl-rev-num ">
</tbody><tbody>
</tbody>
| 在标头 <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 ); 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 的平方。注解
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
参阅
| 返回复数的模 (函数模板) | |
| 返回复共轭 (函数模板) | |
| 从模和辐角构造复数 (函数模板) |