日期:2014-05-18  浏览次数:21189 次

如果一个乘数为0,怎样计算省时间?
比如b=a*0.2548;
C# code

if(a==0)
b=0;
else
b=a*0.2548;

还是直接
C# code
b=0.2548

哪个效率高点?我用到很大的矩阵计算,想加快速度

------解决方案--------------------
你说呢,自己断点,看汇编
------解决方案--------------------
一样快。
------解决方案--------------------
如果你真的想优化矩阵计算,并且矩阵大部分都是0,你应该用稀疏矩阵表示这个矩阵。
------解决方案--------------------
探讨
稀疏矩阵是用来存储的,和计算有啥关系?
一个乘法的机器周期和一个if加赋值的执行时间一样快?

------解决方案--------------------
?????

这应该不需要你判定,我觉着你既然都能想到,微软也没理由想不到。他本身就会在*操作去判定两边的操作数滴
------解决方案--------------------
探讨
稀疏矩阵是用来存储的,和计算有啥关系?
一个乘法的机器周期和一个if加赋值的执行时间一样快?

------解决方案--------------------
算个几万次试一下
------解决方案--------------------
某些场合的if语句判断比直接相乘还慢,如果你是在汇编,用jz指令跳转是速度最快的,但是这是在.NET里面,它和0比较不是简单用一个jz指令,是一个复杂的过程,不比直接相乘快。
------解决方案--------------------
可能很少有人研究这个问题,因为意义不大,你要优化的你大型计算,应把重点放在设计和算法上,而不是为了一个0的问题.
如果优化计算模型,性能上可能会提高1倍、10倍,甚至100倍以上,但判断0或不是0的问题即使有提高,也不会达到1倍以上。(而且应当有10%的0,20%...90%为0)

你可试试,计算1亿个数,判断是不是0与直接计算,性能不会有太大的差异。何况要是有70%的都不是0,同样也需要100%的判断是不是0的问题。
------解决方案--------------------
还是直接乘吧
------解决方案--------------------
实践是检验真理的唯一标准
计算两者使用的时间,比较一下就行了
------解决方案--------------------
差别可以忽略
------解决方案--------------------
例如接方程组时不时去求矩阵的你矩阵 --> 例如解方程组时不是先去计算矩阵的逆矩阵

算法变了,效率可以得到大规模提高。而具体的语句,则反而应该以简单为根本。
------解决方案--------------------
很大的矩阵计算,想加快速度,这才是lz 想问的吧,楼上建议s可行





------解决方案--------------------
实践是检验真理的唯一标准