1

我将 boost 的 gmp_rational 数据类型的性能与 C# 的 SolverFoundation.Rational 类型的性能进行比较。使用 gmp_rational 执行算术比 C# SolverFoundation.Rational 快得多,除了比较操作。我在 C++ 和 C# 中实现了以下功能,并对其性能进行了比较。

typedef mpq_rational NT;
void test()
{
    NT x = 3.05325557;
    NT y = 2.65684334;
    NT z, j, k;

    std::clock_t start;
    double duration;

    start = std::clock();

    for(int i = 0; i < 10000; i++)
    {
        if (i%1000 == 0)
            x = 3;
        x = x * y;
        z = x + y;
        j = x + y;
        k = x + y;
        bool r1 = j > k; // takes very long
    }

    duration = ( std::clock() - start ) / (double) CLOCKS_PER_SEC;
    std::cout<<"duration: "<< duration <<'\n';    
}

如果没有最后一个比较操作“j > k”,该函数需要 5.5 秒。有了它,该功能需要 33 秒。

我在 C# 中实现了相同的方法并进行了相同的比较。如果没有最后一个比较操作“j > k”,该方法需要 19 秒。有了它,该方法需要 19.6 秒。所以 C# 代码比 C++ 代码还要快,但我不明白为什么。

4

0 回答 0