Требуется ли около 15 секунд, чтобы сделать что-нибудь 160000 раз для вас? Оцените его в своей системе, просто возвращая x; вполне может быть, что операция гипотета (реализованная в C) незначительна, чем издержки интерпретатора.
Для ruby 1.8.7 с запомненным методом get из khell, вызывающим функцию внутри метода get и просто возвращающим x внутри метода get с 100000 итерациями:
peregrino:$ time ruby src/memoized_hypot.rb
real 0m1.714s
user 0m1.436s
sys 0m0.080s
peregrino:$ time ruby src/plain_hypot.rb
real 0m0.495s
user 0m0.364s
sys 0m0.060s
peregrino:$ time ruby src/empty_hypo.rb
real 0m0.369s
user 0m0.220s
sys 0m0.068s
Запоминание kheill создает строку при каждом вызове, что намного дороже, чем вызов гипотетической функции библиотеки C при каждом вызове.
Разница между вызывающей гипотезой и просто возвращением x указывает на то, что она вносит только 25% времени выполнения. Это не тот код, который вы должны оптимизировать - вместо этого попробуйте встроить вызов в библиотеку, если можете, вместо того, чтобы переносить его в другой метод.
peregrino:$ time ruby src/inline_hypot.rb
real 0m0.365s
user 0m0.236s
sys 0m0.044s
что составляет
100000.times{ |i| Math.hypot(i,6) }
вместо
100000.times{ |i| foo.get(i,6) }
где foo - объект с опубликованными методами.
Эти времена были на нетбуках (Asus eeepc 900), которые не очень быстры, поэтому немного странно, что они намного быстрее, чем ваши. Так что что-то еще может доминировать над вашими результатами.