将精度较低的两个数字相乘的最快方法是什么(例如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);
比整数转换更好吗?
答案 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)