假设有一个函数prod(x),它返回一系列数字x的乘积。
如果x中的操作数可以任意大,那么当遇到零时,如何通过停止乘法来减少计算x乘积的时间?这是成熟的编译器和口译员已经做过的事情吗?
如果一个人正在编写自己的prod(x)函数,那么最好的方法是什么?做if 0 in x then return(0) else multiply(x)
之类的事情是否有意义?
例如,如果x = 1,0,3,4,...,-4,9
,则不需要继续乘以第二个词,对吗?
答案 0 :(得分:2)
任何0乘法都会返回0,所以你要检查一个序列中是否有0并且只返回0.
答案 1 :(得分:1)
通常:编译器优化主要在给定的源代码上完成。您正在谈论运行时数据的优化,编译器(通常)不会这样做。这意味着您必须自己编写这些优化。
在这种情况下:当有0
时,你确实可以停止。
答案 2 :(得分:1)
由于乘法运算通勤,您可以按任何顺序评估这些术语。如果你有一个排序的数字序列,你可以简单地看看第一项是否为零。