我写了一些看起来像这样的代码:
def get(x, y)
@cachedResults.set(x,y, Math.hypot(x, y)) if @cachedResults.get(x,y).nil?
@cachedResults.get(x,y)
end
@cachedResults 包含我写的一个二维数组类(在几分钟内),这个函数的目的是确保我永远不必为任何给定的 (x,y) 调用 Math.hypot 两次。[这可以使用对称性和其他东西进一步优化,但无论如何]
所以我调用了这个函数,让它运行了 160000 次;它只用了 15 秒多一点。然后,为了查看它比非 Memoized 版本快多少,我将代码更改为:
def get(x, y)
Math.hypot(x, y)
end
而且,令我惊讶的是,再次运行只用了 15 秒多一点。完全相同的时间。所以我的问题是,ruby 中的数学函数是自然记忆的吗?如果是这样,ruby Memoized 的程度如何?
(如果不是,那你为什么认为我一直得到这个结果?)