Never say "Never"
А чем ещё в 5 утра заниматься?

В результате написал "Hello world" на эрланге.
В виде вычисления чисел Фибоначчи. В лоб написал.

fibb(0) ->
0;
fibb(1) ->
1;
fibb(N) when N > 1 ->
fibb(N - 1) + fibb(N - 2).

Попытался посчитать fibb(10). Посчитал. Вах!
Попытался посчитать fibb(100). WTF?! Подвесил ядро процессора.
Подумал.
Написал аналог на vc++.
Попытался посчитать fibb(10). Посчитал. Вах!
Попытался посчитать fibb(100). WTF?! Подвесил второе ядро процессора.
Подумал ещё раз.
Почесал тыковку.
В тыковку пришла мысля, что рекурсия-то получается экспоненциальная, а не линейная. Отсюда и пожирание процессора.
Переписал на цикл.
Что-то посчиталось. И для 10 и для 100.
Задумался, как делать цикл в эрланге.
Не придумал.
Полез, посмотрел, как кошерно на эрланге считать числа фиббоначи.
Понял, как делать цикл в эрланге. Во всяком случае для данного случая.
Переписал свой код по новому лекалу.

fibb(N) ->
fibb(N, 0, 1).

fibb(0, P, _) ->
P;
fibb(N, P, PP) when N > 0 ->
fibb(N-1, PP+P, P).

Посчитал для 10. Норм.
Посчитал для 100. Тоже норм. Хотя, WTF?! Число явно не совпадает с тем что посчиталось в vc++.
Подумал.
Добавил в c++ исключение при проверке на переполнение.
Словил исключение.
Значит подумал правильно.
Но вообще странно... Опаньки, проект то 32-х разрядный оказался.
Впрочем 64-х битов тоже не хватило. Добавил потом в модуле эрланга подсчёт числа битов в цифре, получил что в фиббоначи(100) - 69 бит.

Кстати, само число: 354'224'848'179'261'915'075
Или:
Триста пятьдесят четыре квинтиллиона двести двадцать четыре квадриллиона восемьсот сорок восемь триллионов сто семьдесят девять миллиардов двести шестьсот один миллион девятьсот пятнадцать тысяч семьдесят пять. Фуф. Спасибо есть перевод чисел в текст, достаточно разрядный

@темы: erlang, жизнь

Комментарии
02.07.2011 в 09:23

Я сделала в жизни всего две глупости: позволила себе быть слабой и размечталась (с)
Sau Tome
Как все сложно!
Хотя и интересно :)
Примитивные интересности с числами фибоначчи я когда-то делала :)
Действительно увлекательно и загадочно, хотя все-таки математика это настолько не мое, что даже жаль :)
02.07.2011 в 11:38

Never say "Never"
Сложно, когда языка не знаешь :)
02.07.2011 в 13:39

Я сделала в жизни всего две глупости: позволила себе быть слабой и размечталась (с)
Sau Tome
не, сложнокогда в этом ни в зуб ногой :)

Расширенная форма

Редактировать

Подписаться на новые комментарии
Получать уведомления о новых комментариях на E-mail