5.times do
    def a
        x = rand(1..10).to_f
        p "x = " << x.to_s
        return @a_result if @a_result
        @a_result = (40 + 20 + 34) / x
    end

    def b
        return @b_result if @b_result
        @b_result = a * 2
    end

    def c
        return @c_result if @c_result
        @c_result = b.to_f / 2
    end

    p a, b, c
end

上記のようなコードでaとbを計算した場合、5回とも同じ値になってしまいます。
return @~ が繰り返しで同じ値になってしまうのが問題なのは分かるのですがどのようにしたら良いのか分からず困っています。
上の計算くらいであれば良いのですが、もっと複雑なものになると時間が掛かるので、できる限り速く計算したいため a,b を一度求めたらその値をそのまま使い、1巡したらa,b,cの値をリセットしたいのですが、何か良い方法はあるのでしょうか。
説明が下手で申し訳ありませんが教えて頂けるとありがたいです。
よろしくお願いします。