小编use*_*888的帖子

CUDA - 如何使用复数?

如果我想处理复数并对内核中的这些复数双数进行简单的数学运算(加法和乘法),我应该在程序中包含哪些CUDA标题?

在C++中,我可以将常数与复数double相乘,只要它们都是双精度.然而,在CUDA我得到很多的错误,当我尝试做简单的数学运算到复杂的双重>取值,只要它不与其他复杂的双重>.我错过了什么?

谢谢!

cuda

9
推荐指数
1
解决办法
1万
查看次数

复数数组乘法

复数数组的操作a*= b是否有乘法版本?换句话说,将复数数组(大量元素或未知长度)的所有元素相乘并将结果存储在复数双变量中的最有效方法是什么?

在下面的代码中,Ans1提供了正确的答案,但是,对于我的应用程序来说,解决数组的每个元素都没有意义,因为会有数百个.理想情况下,我想要一个循环(类似于Ans2),它将数组的所有元素相乘并存储答案.如果我不将Ans2作为1.0,1.0启动,则答案将为0,0,因为元素将乘以0.然而,使用1.0,1.0初始化将无法正常工作,因为我们正在处理复数.

编辑 - 我无法手动处理每个元素的原因是因为这将链接到一个更大的程序,其中数组'a'的元素将来自其他地方,并且'a'的长度将变化.

理想情况下,ANSWER =复杂元素[0]*复杂元素[1] 复杂元素[2] ....复杂元素[n]

    /*
      Complex Array Multiplication
    */

    #include <complex>
    #include <iostream>
    #include <cmath>

    using namespace std;

    int main()
    {
        int n = 3;
        complex<double> Ans1, Ans2(1.0,1.0);

        complex<double> a[n];

        a[0] = complex<double>(1.0, 1.5);
        a[1] = complex<double>(-1.0, 1.5);
        a[2] = complex<double>(1.0, -1.5);

        Ans1 = (a[0]*a[1]*a[2]);
        cout << "\nAns1 = " << Ans1;

        for (int i =0; i < n; i++) {
            Ans2 = Ans2 * a[i];
        }

        cout << "\nAns2 = " << Ans2; …
Run Code Online (Sandbox Code Playgroud)

c++ complex-numbers

3
推荐指数
2
解决办法
4985
查看次数

程序执行时间计数器

在C++中计算经过时间的最准确方法是什么?我使用clock()来计算这个,但我感觉这是错误的,因为我得到0 ms 90%的时间和15 ms其余部分对我来说没什么意义.

即使它非常小并且非常接近0 ms,是否有更精确的方法可以给出精确的值而不是向下舍入0 ms?

clock_t tic = clock();

/*
  main programme body
*/

clock_t toc = clock();
double time = (double)(toc-tic);
cout << "\nTime taken: " << (1000*(time/CLOCKS_PER_SEC)) << " (ms)";
Run Code Online (Sandbox Code Playgroud)

谢谢

c++

2
推荐指数
1
解决办法
3422
查看次数

标签 统计

c++ ×2

complex-numbers ×1

cuda ×1