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

w

我继承了一些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,则该复合体只能采用double或的另一个值complex<double>
    • 实际上,取决于您使用的编译器,clang直接给出了invalid operands to binary expression ('std::complex<double>' and 'int')错误
  • operator/=发生在std::complex<T>T,同时还具有专业化floatdoublelong double

    • ,无论传递到手段operator/=将有一个变化是隐式转换为floatdouble或者long double,它int可以做。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在c ++中拥有一组结构的正确方法是什么?

来自分类Dev

使用Numpy在Python中平均一组张量

来自分类Dev

从目标C的数组中获取一组唯一对象的最佳方法是什么

来自分类Dev

逻辑错误:平均质心的计算不正确,“入口”函数的无限执行-K表示针对一组点的聚类,在C ++中

来自分类Dev

在C ++向量中平均重复属性的最佳方法

来自分类Dev

在C ++中将g_signal_connect()用于动态统一快速列表的正确方法是什么?

来自分类Dev

在C ++中将g_signal_connect()用于动态统一快速列表的正确方法是什么?

来自分类Dev

C ++函数打印一组

来自分类Dev

C ++中的一组集合

来自分类Dev

一组线程的C ++互斥锁

来自分类Dev

在C ++中添加一组数字

来自分类Dev

如何遍历一组C ++

来自分类Dev

C99:处理“ pow()”引发的异常的建议方法是什么(溢出或复数)

来自分类Dev

C ++如何平均一串数字?

来自分类Dev

在现代C ++中实现聚合的正确方法是什么?

来自分类Dev

在C中实现椭圆方程的正确方法是什么?

来自分类Dev

在C中将指针传递给数组的正确方法是什么?

来自分类Dev

在C ++中调用构造函数的正确方法是什么?

来自分类Dev

使用结构指针和C接口的“正确”方法是什么?

来自分类Dev

使用c ++ 11线程返回结果的正确方法是什么?

来自分类Dev

C#方法签名-限制类型-正确的术语是什么?

来自分类Dev

定义此C宏的正确方法是什么?

来自分类Dev

C ++为什么空的set :: emplace()将元素插入一组指针?

来自分类Dev

如何用C中的一组目标文件编译一组C文件

来自分类Dev

确定字符是否属于一组已知字符的最快方法C ++

来自分类Dev

从另一个头导出C头函数到R包中的正确方法是什么?

来自分类Dev

在 MySQL Connector C++ API 中使用一个函数调用执行多个查询的正确方法是什么?

来自分类Dev

在C中平均多个进程的输出

来自分类Dev

存储一组可重复使用的postgres枚举值的正确抽象是什么?

Related 相关文章

  1. 1

    在c ++中拥有一组结构的正确方法是什么?

  2. 2

    使用Numpy在Python中平均一组张量

  3. 3

    从目标C的数组中获取一组唯一对象的最佳方法是什么

  4. 4

    逻辑错误:平均质心的计算不正确,“入口”函数的无限执行-K表示针对一组点的聚类,在C ++中

  5. 5

    在C ++向量中平均重复属性的最佳方法

  6. 6

    在C ++中将g_signal_connect()用于动态统一快速列表的正确方法是什么?

  7. 7

    在C ++中将g_signal_connect()用于动态统一快速列表的正确方法是什么?

  8. 8

    C ++函数打印一组

  9. 9

    C ++中的一组集合

  10. 10

    一组线程的C ++互斥锁

  11. 11

    在C ++中添加一组数字

  12. 12

    如何遍历一组C ++

  13. 13

    C99:处理“ pow()”引发的异常的建议方法是什么(溢出或复数)

  14. 14

    C ++如何平均一串数字?

  15. 15

    在现代C ++中实现聚合的正确方法是什么?

  16. 16

    在C中实现椭圆方程的正确方法是什么?

  17. 17

    在C中将指针传递给数组的正确方法是什么?

  18. 18

    在C ++中调用构造函数的正确方法是什么?

  19. 19

    使用结构指针和C接口的“正确”方法是什么?

  20. 20

    使用c ++ 11线程返回结果的正确方法是什么?

  21. 21

    C#方法签名-限制类型-正确的术语是什么?

  22. 22

    定义此C宏的正确方法是什么?

  23. 23

    C ++为什么空的set :: emplace()将元素插入一组指针?

  24. 24

    如何用C中的一组目标文件编译一组C文件

  25. 25

    确定字符是否属于一组已知字符的最快方法C ++

  26. 26

    从另一个头导出C头函数到R包中的正确方法是什么?

  27. 27

    在 MySQL Connector C++ API 中使用一个函数调用执行多个查询的正确方法是什么?

  28. 28

    在C中平均多个进程的输出

  29. 29

    存储一组可重复使用的postgres枚举值的正确抽象是什么?

热门标签

归档