• Python code Lua
    Начитался про быстрый Lua и решил попробовать. Факториал 10000.
    код на Lua: http://codepad.org/IzzlY8t4
    код на Python: http://codepad.org/G40CZcJ5
    
    В Lua все числа - double. Поэтому для больших чисел надо подключать спец. библиотеки. BC установилась просто (lmapm, lbn и lqd требуют всякие зависимости, лень разбираться).
    
    Lua
    time luajit 1.lua		time lua 5.1 1.lua
    real	0m3.643s		real	0m3.662s
    user	0m3.524s		user	0m3.580s
    sys	0m0.104s		sys	0m0.072s
    
    Python
    time python 1.py
    real	0m0.431s
    user	0m0.416s
    sys	0m0.008s
    
    ЧЯДНТ ?
    Возможно, это из-за того, что bc (http://en.wikipedia.org/wiki/Bc_%28programming_language%29) медленный.
    ♡ recommended by @O01eg

Replies (23)

  • @reflechant, И какой же предел у питона в его больших числах? уж неужто любая разрядность?
  • @reflechant, А оно всё правильно почитало?
  • @Alinaki, Я с этим пределом не сталкивался. Скорее всего он сожрёт слишком много памяти и будет выключен
  • @TLemur, Во всяком случае вывод у питона и луа идентичный.
  • @reflechant, А питону я верю.
  • @reflechant, это не ответ.
  • @reflechant, да. (питонота твоя)
    [I]l…@l…g /tmp > cat fact.bc
    x=1
    for (i=2; i < 10001; i++) {
    x = x*i
    }
    print x
    halt
    [I]l…@l…g /tmp > time bc fact.bc > /dev/null
    bc fact.bc > /dev/null 1,04s user 0,00s system 99% cpu 1,041 total
    [I]l…@l…g /tmp > time python fact.py > /dev/null
    python fact.py > /dev/null 0,05s user 0,00s system 98% cpu 0,050 total
  • @lexszero, Выпилить это говно (bc) на*** из всех никсов.
  • @reflechant, зачем?
  • @lexszero, Если оно медленное и не умеет делать того, что бы другие не делали лучше, то зачем оно? Антуан де Сент-Экзюпери: "Совершенство — это не когда нечего прибавить, а когда нечего убавить"
  • @reflechant, у него есть своя область применения. у меня он почти постоянно висит в скретчпаде в качестве шестнадцатиричного и не только калькулятора, и я довольно часто им пользуюсь в скриптах. хочешь дробить кучи чисел — используй другой инструмент.
  • @Alinaki, А я тебе и говорю — скорее всего на больших числах он задействует специальные библиотеки для чисел произвольной точности (типа GMP). Так что предел получается размером с оперативную память.
  • @reflechant, main = print (product [1..10000])
    real 0m0.064s
    user 0m0.061s
    sys 0m0.002s
  • @reflechant, Алсо, если не переполнять double то python проигрывает lua примерно в 10 раз по скорости.
  • @ndtimofeev, А точность? Почитайте факториал сотни там и там. У Питона раз в 5 больше значащих цифр.
  • @ndtimofeev, Это Lua, я так понимаю?
  • @reflechant, В смысле? Ты про форматированный вывод?
  • @reflechant, Это Haskell сама-собой.
  • @ndtimofeev, Я вот про это. Считаем факториал 100
    Lua:
    9.3326215443944e+157
    Python:
    93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
  • @reflechant, Используй форматированный вывод, Люк. print( string.format( "%.0f", fact ) )
  • @ndtimofeev, Вот так всегда. Обманчивая схожесть языков играет злую шутку.
  • @reflechant, Я потихоньку пишу пост-обзор о том какие вещи в лунном вызывают удивление из-за того что язык кажется самоочевидным, а документации никто не читает.
  • @ndtimofeev, Куда пишешь? Хабр, бложик? Подпишусь на тебя, жду ссылку.