LINUX.ORG.RU

Функциональная языкометрия

 расчет факториала


2

3

Поскольку, как всем известно, основное предназначение различных функциональных ЯП состоит в расчете факториалов, давайте померяемся - какой ЯП это делает быстрее (при условии что делает правильно)? Естественно имеет значение машина на которой идет счет.

Условия такие - надо посчитать 10000! и вывести его в 16ти-ричном виде (буквочки маленькие), без всяких '0x' вначале и какой то служебной лабуды в конце. Что бы не постить прстыни, для контроля правильности ответа предлагается использовать md5sum. Вот как это выглядит на втором питоне:

$ python -c 'print hex(reduce( long.__mul__, range(1,10000+1), 1L ))[2:-1]' | md5sum
3de6339590fbdf0a1c0ae2f2b820f8bf  -

Вот однострочник, выводящий модель проца, частоту и время работы (я привожу несколько примеров для доступных мне машин):

$ ssh host1 "less /proc/cpuinfo | grep 'model' | tail -n 1; less /proc/cpuinfo | grep 'cpu MHz' | tail -n 1; time python -c 'print hex(reduce( long.__mul__, range(1,10000+1), 1L ))[2:-1]' | md5sum"
model name      : AMD FX(tm)-8320 Eight-Core Processor           
cpu MHz         : 1400.000
3de6339590fbdf0a1c0ae2f2b820f8bf  -

real    0m0.058s
user    0m0.048s
sys     0m0.008s

-------------------------------------------------
model name      : Intel(R) Core(TM)2 CPU         U7500  @ 1.06GHz
cpu MHz         : 798.000
3de6339590fbdf0a1c0ae2f2b820f8bf  -

real    0m0.301s
user    0m0.256s
sys     0m0.024s

--------------------------------------------------
model name      : Intel(R) Core(TM) i5-2400 CPU @ 3.10GHz
cpu MHz         : 1600.000
3de6339590fbdf0a1c0ae2f2b820f8bf  -

real    0m0.042s
user    0m0.040s
sys     0m0.000s

--------------------------------------------------
model name      : AMD Phenom(tm) 9550 Quad-Core Processor
cpu MHz         : 1100.000
3de6339590fbdf0a1c0ae2f2b820f8bf  -

real    0m0.083s
user    0m0.068s
sys     0m0.012s

---------------------------------------------------
model name      : AMD Phenom(tm) 9850 Quad-Core Processor
cpu MHz         : 2506.801
3de6339590fbdf0a1c0ae2f2b820f8bf  -

real    0m0.123s
user    0m0.118s
sys     0m0.004s

----------------------------------------------------
model name      : Intel(R) Core(TM)2 Quad  CPU   Q9450  @ 2.66GHz
cpu MHz         : 2506.801
3de6339590fbdf0a1c0ae2f2b820f8bf  -

real    0m0.124s
user    0m0.118s
sys     0m0.006s

----------------------------------------------------
model name      : AMD Opteron(tm) Processor 6174
cpu MHz         : 2506.801
3de6339590fbdf0a1c0ae2f2b820f8bf  -

real    0m0.120s
user    0m0.119s
sys     0m0.002s

----------------------------------------------------
model name      : Intel(R) Xeon(R) CPU           X5670  @ 2.93GHz
cpu MHz         : 1600.000
3de6339590fbdf0a1c0ae2f2b820f8bf  -

real    0m0.120s
user    0m0.060s
sys     0m0.004s

Я к чему предлагаю померяться - только что обнаружил в соседнем треде, что вечный-тормоз-питон в таком тесте на порядок(!) обогнал священную-корову-лисп;-)))

Предлагайте свои решения на других ЯП (хаскель очень интересен;-))

★★★★★
Ответ на: комментарий от qnikst

я не знаю или я пишу непонятно, или вы читать не умеете/не хотите/не можете,

Где то выше Вы мне обещали рассказать интересного о ЯП. Это я тоже неверно прочитал? Потому что пока, кроме унылых набросов про «идиотские высказывания», я тут от Вас ничего не увидел. Это связано с деградацией СПбГУ в целом после известных событий, или лично с Вами?

AIv ★★★★★
() автор топика
Ответ на: комментарий от AIv

Если Вас, что-то действительно интересует пожалуйста обращайтесь в email или jabber. Ваше хамство и необразованность все же убедило меня пересмотреть свои взгяды на лор и его обиталелей и Вас лично.

qnikst ★★★★★
()
Ответ на: комментарий от qnikst

Ай-яй... горе, горе мне, необразованному хаму!

Не думаю, что мне интересно Ваше мнение по какому либо вопросу - даже если Вам и есть что сказать, Ваша манера общения делает невозможным выделить из Вашей речи что либо полезное.

AIv ★★★★★
() автор топика
Ответ на: комментарий от AIv

Ну, что вы оба как дети малые? Не уподобляйтесь хамоватому большинству.

А тема была не про питон. Питона тут почти и нет.

dave ★★★★★
()
Ответ на: комментарий от dave

А тема была не про питон. Питона тут почти и нет.

как оказалось есть, в питоне своя реализация бигнумов. (но почему этого никто из причастных нормально сформулировать не смог мне остается непонятным, первые подозрения у меня появились когда я хотел потыкать Alv в вывод ltrace, но тыкать оказалось не во что).

qnikst ★★★★★
()
Ответ на: комментарий от dave

Есть определенные нормы общения, принятые в академической среде. На ЛОР-е конечно приходится опускаться до уровня гопоты типа лавсанчега, но тут не тот вариант... ладно, ну его в баню.

Будет время - сделаю сводную таблицу результатов. Тест конечно так себе, но мне небезЫнтересно;-)

AIv ★★★★★
() автор топика
Ответ на: комментарий от qnikst

Ну, я думаю, что если и реализация бигнумов в питоне своя, то она все же, вероятно, написана на Си, хотя у меня уверенности нет.

dave ★★★★★
()
Ответ на: комментарий от dave
$ less /Archive/Soft/Python-2.7.2/Objects/longobject.c 
/* Long (arbitrary precision) integer object implementation */

/* XXX The functional organization of this file is terrible */

#include "Python.h"
#include "longintrepr.h"
#include "structseq.h"

#include <float.h>
#include <ctype.h>
#include <stddef.h>

/* For long multiplication, use the O(N**2) school algorithm unless
 * both operands contain more than KARATSUBA_CUTOFF digits (this
 * being an internal Python long digit, in base PyLong_BASE).
 */
#define KARATSUBA_CUTOFF 70
#define KARATSUBA_SQUARE_CUTOFF (2 * KARATSUBA_CUTOFF)

/* For exponentiation, use the binary left-to-right algorithm
 * unless the exponent contains more than FIVEARY_CUTOFF digits.
 * In that case, do 5 bits at a time.  The potential drawback is that
 * a table of 2**5 intermediate results is computed.
 */
#define FIVEARY_CUTOFF 8
AIv ★★★★★
() автор топика
Ответ на: комментарий от dave

точно на сях, но это нормально, ругаться на язык написания страндартной библиотеки это странно. Другое дело, что в примере совершенно не участвуют «высокоуровневые возможности языка», ну я уже писал, что может быть интересно и что можно действительно сравнивать.

qnikst ★★★★★
()
Ответ на: комментарий от AIv

1). некорректная задача

Предлагайте свои решения на других ЯП (хаскель очень интересен;-))

троллинг

а много ли вариантов решения по этой сслыке могут посчитать 10000!? А хде замеры производительности? За что благодарить то?

не умение читать и проверять приходящую информацию

ну считайте 100 000! что бы от ИО отстроится как то. Всем противникам С-ф-й и ъ-ЯП - много есть ЯП у которых операция * в итоге не дернет фрагмент С-шного когда? Вы ище против ассемблера попротестуйте.

нет. Я забиндил умножение. Кто не биндит умножение? Я подозреваю что даже вижуал бейсик биндит сишное умножение;-)

прекрасное..

вот прямо все-все-все прямо вот биты руками тасуютЬ?

мы все ещё говорим об академическом уровне?

У хекса при нормальной реализации и обработке данных изначально лежащих в двоичном формате алгоритмическая сложность О(N), у умножения бигнумов ЕМНИП что то вроде О(N**2), поэтому как там в хацкеле умудрились сделать тормоза в этомб месте - я ХЗ и вообще в ауте.

неумение читать

Где можно записаться на курсы академического общения?

qnikst ★★★★★
()
Ответ на: комментарий от qnikst

сударь, мне право с Вами говорить в подобном формате не о чем. Можно было бы процитировать Ваши пЕрлы из этого треда, да времени жалко, и главное не понятно зачем? Я не мама и не папа и не Ваш научный руководитель что бы Вас воспитывать, да еще на ЛОР-е.

AIv ★★★★★
() автор топика
Последнее исправление: AIv (всего исправлений: 1)
Ответ на: комментарий от qnikst

Не, ну если Вас так заело - скажем про «неумение читать», могу лишь напомнить что про хекс Вы бол менее сформулировали свою мысли раза с третьего, и то недомолвками. А мой ответ на Ваше первое невнятное высказывание теперь называется неумением читать. Остальное в том же духе.

Главное то, что я в общем толерантен, коллеги подтвердят. Но общаться в тоне «идиотские высказывания» и пр. мне как то претит, а оставлять подобные выпады без внимания характер не позволяет, грешен. Главное, что на фоне всего этого флейма Вы почти ничего интересного/нового для меня не сказали. А щеки дули, как будто сейчас будут какие то откровения от высшего разума.

AIv ★★★★★
() автор топика
Ответ на: комментарий от qnikst

Мне комментировать сложно. Большую часть вашей «беседы» я пропустил - такое не люблю читать. Но было похоже на очередной «терминологический спор».

dave ★★★★★
()
Последнее исправление: dave (всего исправлений: 1)
10 января 2014 г.

Ты наглый лгун.

AMD FX-4170, стартуя с самой низкой частоты.

(defun fac (n &optional (res 1))
  (declare (optimize (speed 3))
           (type integer n res))
  (if (= n 0) res
    (fac (1- n) (* res n))))
* (time (fac 10000))

......

Evaluation took:
  0.036 seconds of real time
  0.037263 seconds of total run time (0.037263 user, 0.000000 system)
  102.78% CPU
  151,274,870 processor cycles
  78,773,248 bytes consed

CRC-16 этого числа #xDF75. Инициализировано нулем, полином x^16 + x^15 + x^2 + x^0. Как ты свой md5 считал, я хз.

vonenij
()

Всё-таки у тебя бомбануло и ты решил отыграться, пидор. Только для этого надо иметь моск.

vonenij
()
Ответ на: комментарий от vonenij

CRC-16 этого числа #xDF75

Пардон #xB6DF, первое значение - для little endian порядок байт (у меня функция считает CRC для массива)

vonenij
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.