Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Скорость работы программы и скорость ее работы связаны... 28.08.07 16:15 Число просмотров: 5579
Автор: DPP <Dmitry P. Pimenov> Статус: The Elderman Отредактировано 28.08.07 16:17 Количество правок: 2
|
> У автора корневого поста опять же пример с вычислением > среднего по двум целым замечательный в плане демонстрации > того, что у разработчика не должна на самом деле болеть > голова за классы, является ли класс примитивным и проч., > особенно в математике, моя голова мне дороже, и я знаю, что
Скорость работы программы и скорость ее написания связаны обратнопропорциональной зависимостью, чем то похожую на гиперболу. Не люблю программы, написанные за минуту, которые целый час считают, в то время как они могут считаться за минуту.
> в смаллток выражение (a + b) / 2 расчитается корректно при > любых входных a и b, лишь бы в иерархии они сидели ниже > класса ArithmeticValue ;-) > Более того, при расчёте, скажем, (1 + 2) / 2 получим > экземпляр класса Fraction, без потери точности в
Хоть отслеживание образования фракций и ложится на внутреннюю реализацию языка, все равно от накладных расходов при вычислениях не уйти.
> вычислениях, и меня это НЕ ЗАБОТИТ, всё летает и прыгает и > выводится без геморроя. > То же самое при расчёте (1073741823 + 1) / 2 не уличу с > потерей знака, поскольку я знаю, что у меня целочисленные > вычисления имеют неограниченную разрядность.
Эначит этот язык годится только 2Х2 считать.
Дело в том, что реализация 64битных операций утяжеляет вычисления на 32 разрядной машине на сложении в два (!) раза, а на умножении в десятки!
Если использовать арифметику с числами неограниченной разрядности, то все операции "утяжеляются" настолько, что это делает язык не пригодным для реальных задач.
> К примеру, итерационный расчёт факториала 1000 выглядит вот > так: > (2 to: 1000) inject: 1 into: [:s :i | s * i] > Всё. Одна строка, 4 объекта, и посылка сообщений между ними > ;-)
Ну и склько времени будет вычисляться 80000!? У меня виндовый калькулятор считает за минуту.
|
|
|