执行比较操作时,boost的gmp_rational类型非常慢

时间:2016-05-21 18:18:37

标签: c# c++ boost gmp rational-number

我将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';    
}

没有最后的比较操作&#34; j&gt; k&#34;,该功能需要5.5秒。有了它,该功能需要33秒。

我在C#中实现了相同的方法并进行了相同的比较。没有最后的比较操作&#34; j&gt; k&#34;,该方法需要19秒。有了它,该方法需要19.6秒。所以C#代码甚至比C ++代码更快,但我不明白为什么。

0 个答案:

没有答案