私は次のようなコードを書きました:
def get(x, y)
@cachedResults.set(x,y, Math.hypot(x, y)) if @cachedResults.get(x,y).nil?
@cachedResults.get(x,y)
end
@cachedResultsに私が書いた2D配列クラスが含まれている場合(数分で)、この関数の目的は、任意の(x、y)に対してMath.hypotを2回呼び出す必要がないことを確認することです。[これは、対称性などを使用してさらに最適化できますが、何でも]
そこで、関数を呼び出して、160000回実行させました。15秒強で実行されました。次に、メモ化されていないバージョンよりもどれだけ高速かを確認するために、コードを次のように変更しました。
def get(x, y)
Math.hypot(x, y)
end
そして、驚いたことに、再び実行するのに15秒強かかりました。まったく同じ時間。だから私の質問は、ルビーの数学関数は自然にメモ化されているのですか?そして、もしそうなら、ルビーはどの程度メモ化されていますか?
(そうでない場合、なぜ私はこの結果を一貫して得ていると思いますか?)