我将 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++ 代码还要快,但我不明白为什么。