Исключение Гаусса Правила Крамера и является двумя хорошими, алгоритмами общего назначения (также см. Одновременные Линейные уравнения ). Если Вы ищете код, проверяете GiNaC, Максимумы , и SymbolicC ++ (в зависимости от Вашего лицензирования требований, конечно).
РЕДАКТИРОВАНИЕ: Я знаю, что Вы работаете на земле C, но я также должен произнести оправдательную речь по адресу SymPy (компьютерная система алгебры в Python). Можно узнать о много из его алгоритмов (если можно прочитать немного Python). Кроме того, это находится под новой лицензией BSD, в то время как большинство бесплатных математических пакетов является GPL.
1.8.6 в этой области работает медленнее. 1.8.7 работает немного лучше, а 1.9.1 - еще лучше. Не могу сказать почему, но rvm согласен с вами и Павлом в том, что 1.8.6 странно медленная.
1.8.6: Rehearsal ------------------------------------------------ float-multip 0.140000 0.000000 0.140000 ( 0.141560) float-square 0.150000 0.000000 0.150000 ( 0.146286) int-multip 0.220000 0.000000 0.220000 ( 0.223255) int-multip 0.180000 0.000000 0.180000 ( 0.183850) --------------------------------------- total: 0.690000sec 1.8.7: Rehearsal ------------------------------------------------ float-multip 0.090000 0.000000 0.090000 ( 0.092346) float-square 0.080000 0.000000 0.080000 ( 0.080335) int-multip 0.070000 0.000000 0.070000 ( 0.068012) int-multip 0.080000 0.000000 0.080000 ( 0.081713) --------------------------------------- total: 0.320000sec 1.9.1: Rehearsal ------------------------------------------------ float-multip 0.070000 0.000000 0.070000 ( 0.065532) float-square 0.080000 0.000000 0.080000 ( 0.081620) int-multip 0.060000 0.000000 0.060000 ( 0.065371) int-multip 0.070000 0.000000 0.070000 ( 0.065761) --------------------------------------- total: 0.280000sec
На ум приходит пара вещей . Вы не указываете, какую реализацию Ruby используете. Поскольку вы запускаете Ruby 1.8.6 в Windows,
В последних двух случаях вы можете немного пересмотреть свои тесты. Оба в конечном итоге могут скомпилировать код Ruby в машинный код, но это может занять некоторое время. Например, JRuby компилируется в байт-код JVM после того, как метод был выполнен 20 раз, а HotSpot Server компилирует байт-код JVM в собственный машинный код после его выполнения 20000 раз. Кроме того, сама компиляция требует времени, поэтому программе необходимо некоторое время, чтобы вернуть эту стоимость за счет повышения производительности.
В частности, Чарльз Оливер Наттер, один из ведущих разработчиков JRuby, сказал, что в зависимости от рабочей нагрузки JRuby может для набора полной скорости требуется до 5-15 секунд. Ваши тесты примерно в 100 раз быстрее (вот предложение, которое вы не слышите каждый день ...).
но это может занять некоторое время. Например, JRuby компилируется в байт-код JVM после того, как метод был выполнен 20 раз, а HotSpot Server компилирует байт-код JVM в собственный машинный код после его выполнения 20000 раз. Кроме того, сама компиляция требует времени, поэтому программе необходимо некоторое время, чтобы вернуть эту стоимость за счет повышения производительности.В частности, Чарльз Оливер Наттер, один из ведущих разработчиков JRuby, сказал, что в зависимости от рабочей нагрузки JRuby может для набора полной скорости требуется до 5-15 секунд. Ваши тесты примерно в 100 раз быстрее (вот предложение, которое вы не слышите каждый день ...).
но это может занять некоторое время. Например, JRuby компилируется в байт-код JVM после того, как метод был выполнен 20 раз, а HotSpot Server компилирует байт-код JVM в собственный машинный код после его выполнения 20000 раз. Кроме того, сама компиляция требует времени, поэтому программе необходимо некоторое время, чтобы вернуть эту стоимость за счет повышения производительности.В частности, Чарльз Оливер Наттер, один из ведущих разработчиков JRuby, сказал, что в зависимости от рабочей нагрузки JRuby может для набора полной скорости требуется до 5-15 секунд. Ваши тесты примерно в 100 раз быстрее (вот предложение, которое вы не слышите каждый день ...).
Сама компиляция требует времени, поэтому программе необходимо время, чтобы вернуть эту стоимость за счет повышения производительности.В частности, Чарльз Оливер Наттер, один из ведущих разработчиков JRuby, сказал, что в зависимости от рабочей нагрузки JRuby может занять до 5-15 секунд, чтобы набрать полную скорость. Ваши тесты примерно в 100 раз быстрее (вот предложение, которое вы не слышите каждый день ...).
Сама компиляция требует времени, поэтому программе необходимо время, чтобы вернуть эту стоимость за счет повышения производительности.В частности, Чарльз Оливер Наттер, один из ведущих разработчиков JRuby, сказал, что в зависимости от рабочей нагрузки JRuby может занять до 5-15 секунд, чтобы набрать полную скорость. Ваши тесты примерно в 100 раз быстрее (вот предложение, которое вы не слышите каждый день ...).
Я не могу объяснить ваши таблицы. Но я могу объяснить свой (рубин 1.8.7):
user system total real
float-multip 0.600000 0.000000 0.600000 ( 0.612311)
float-square 0.650000 0.000000 0.650000 ( 0.649399)
int-multip 0.450000 0.010000 0.460000 ( 0.457004)
int-multip 0.690000 0.000000 0.690000 ( 0.692879)
Упс. Целочисленное умножение превосходит умножение с плавающей запятой.
Поскольку ваш процессор в 5 раз медленнее моего (я увеличил количество повторов в вашем тесте в десять раз), должно быть что-то, не связанное с рубином.
**
, вероятно, использовала арифметику с плавающей запятой (exp (x * ln (2)), поэтому она такая же медленная, как и другие операции с плавающей запятой.