trong C++ số norm
của số phức c
được định nghĩa là abs(c)^2
. điều này có nghĩa là re(c)^2+im(z)^2
của nó.std :: norm (std :: complex) sử dụng căn bậc hai thay vì thực hiện nhanh
này là việc thực hiện:
template<bool>
struct _Norm_helper
{
template<typename _Tp>
static inline _Tp _S_do_it(const complex<_Tp>& __z)
{
const _Tp __x = __z.real();
const _Tp __y = __z.imag();
return __x * __x + __y * __y;
}
};
template<>
struct _Norm_helper<true>
{
template<typename _Tp>
static inline _Tp _S_do_it(const complex<_Tp>& __z)
{
_Tp __res = std::abs(__z);
return __res * __res;
}
};
tại sao mọi người muốn sử dụng thi thứ hai?
cái đầu tiên rõ ràng nhanh hơn, vì nó không sử dụng abs
, trong đó sqrt
có liên quan.
'cái đầu tiên rõ ràng là nhanh hơn' Vâng, bạn đã thực hiện kiểm tra tính thời gian để xác minh xác nhận quyền sở hữu này chưa? – PaulMcKenzie
Việc triển khai không được thiết lập theo tiêu chuẩn C++. Bạn đang xem thư viện chuẩn nào? – juanchopanza
tôi tìm thấy nó trong mingw, gcc 4.8.1, và tôi đã thử nghiệm nó với một mandelbrot tiêu chuẩn. – tly