快速双倍乘以整数精度

时间:2015-03-27 14:28:55

标签: c++

将精度较低的两个数字相乘的最快方法是什么(例如Int精度)?我使用时会更快:

double a = 2.2;
double b = 3.2;
int c = int(a)*int(b);

还是有更快的方法吗?

编辑: 转换为整数精度的接缝是一个坏主意。 我会尝试更好地解释我的问题:

我有一组双数据,我需要从中提取一些主要涉及大量乘法的属性。现在我试图通过降低计算精度来减少计算时间。也许这会:

double a = 2.2;
double b = 3.2;
float c = float(a)*float(b);

比整数转换更好吗?

3 个答案:

答案 0 :(得分:3)

这对我来说似乎是一种(可能是不成熟的)微优化,因此唯一可以确定的方法是描述您的特定应用。许多其他因素可能会影响性能,例如将double转换为整数等的时间。

我唯一可以建议的是,如果你在此过程的后期不需要双打,那么将所有初始计算作为int进行,并且在你需要双精度之前,只在最后一刻转换为double

答案 1 :(得分:2)

int(a)*int(b); a 1,000,000,000 times:

real    0m4.946s
user    0m4.852s
sys 0m0.018s

int(a*b); a 1,000,000,000 times:

real    0m4.067s
user    0m3.993s
sys 0m0.010s

float c = float(a)*float(b); a 1,000,000,000 times:
real    0m2.815s
user    0m2.764s
sys 0m0.010s

每个都使用g++ -O0编译。

#for_loops

答案 2 :(得分:1)

 int(a*b);

这里你乘以两个双打,因为转换是在乘以之后完成的(也是你转换为int然后再加倍,所以你让它效率更低,加上不准确)

因此,解决方案是第二个片段,因为你在乘法之前转换

 int(a)*int(b)