gpt4 book ai didi

c++ - 在C++中平均一组复数的正确方法是什么?

转载 作者:行者123 更新时间:2023-12-03 07:22:00 30 4
gpt4 key购买 nike

我继承了一些C++代码,需要平均一些复数。给定一个集合,它会将那些将条件传递给累加器的值相加,然后除以所添加值的数量。
使用gcc(当前为gcc 8),如果我使用独立的template argument deduction/substitution failed,我会得到operator/,但它与std::complex::operator/=可以正常工作。对于后续维护者来说,这样的细微差别似乎很脆弱。
那么获得复数平均值的正确方法是什么?
语言仅部分支持按整数类型对复数进行除法是否合理?

std::complex<double> A[32] = { /* initialization left to the reader */ };
int count = 0;

std::complex<double> sum;
for (auto i = 0; i < 32; ++i) {
if ( i % 2 ) { // arbitrary condition, not important
sum += A[i];
++count;
}
}

auto avg = sum / count; // this is ambiguous
sum /= count; // this is not
(代表错误,出于好奇)
main.cpp: In function ‘int main()’:
main.cpp:16:16: error: no match for ‘operator/’ (operand types are ‘std::complex<double>’ and ‘int’)
auto avg = sum / count; // this is ambiguous
~~~~^~~~~~~
In file included from main.cpp:2:0:
/usr/include/c++/7/complex:434:5: note: candidate: template<class _Tp> std::complex<_Tp> std::operator/(const _Tp&, const std::complex<_Tp>&)
operator/(const _Tp& __x, const complex<_Tp>& __y)
^~~~~~~~
/usr/include/c++/7/complex:434:5: note: template argument deduction/substitution failed:
main.cpp:16:18: note: mismatched types ‘const std::complex<_Tp>’ and ‘int’
auto avg = sum / count; // this is ambiguous
^~~~~
In file included from main.cpp:2:0:
/usr/include/c++/7/complex:425:5: note: candidate: template<class _Tp> std::complex<_Tp> std::operator/(const std::complex<_Tp>&, const _Tp&)
operator/(const complex<_Tp>& __x, const _Tp& __y)
^~~~~~~~
/usr/include/c++/7/complex:425:5: note: template argument deduction/substitution failed:
main.cpp:16:18: note: deduced conflicting types for parameter ‘const _Tp’ (‘double’ and ‘int’)
auto avg = sum / count; // this is ambiguous
^~~~~
In file included from main.cpp:2:0:
/usr/include/c++/7/complex:416:5: note: candidate: template<class _Tp> std::complex<_Tp> std::operator/(const std::complex<_Tp>&, const std::complex<_Tp>&)
operator/(const complex<_Tp>& __x, const complex<_Tp>& __y)
^~~~~~~~
/usr/include/c++/7/complex:416:5: note: template argument deduction/substitution failed:
main.cpp:16:18: note: mismatched types ‘const std::complex<_Tp>’ and ‘int’
auto avg = sum / count; // this is ambiguous
^~~~~

最佳答案

不确定最合适的除法方法,但是如果仔细检查operator/operator/=的所有参数,则会发现:

  • operator/接受std::complex<T>T
  • 因此,如果您使用double创建了原始复合体,则它仅应采用另一个值为doublecomplex<double>的值。
  • 实际上,取决于您使用的编译器,clang向上直接给出了invalid operands to binary expression ('std::complex<double>' and 'int')错误

  • operator/=接受std::complex<T>T,同时还具有floatdoublelong double的专门化功能。
  • 这意味着传递给operator/=的任何内容都将进行更改,以将其隐式转换为float可以执行的doublelong doubleint

  • 关于c++ - 在C++中平均一组复数的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64813929/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com