parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

ПАФ - извращенец :)

Misha v.3 26.03.2007 18:22 / 26.03.2007 18:35

с академической точки зрения это решение безусловно красиво, но с практической - ну его нафиг.

на web-е мы работаем максимум - с MB (ну... если вспомнить про torrent-ы, то с ГБ), это означает что для того, чтобы понять какие буковки писать нужно сделать 2 if-а (^if($iSize < 1024){байты}{^if($iSize < 1048576){КБ}{МБ}}). тут предлагается заменить эти 2 if-а на вычисление двух логарифмов + деление.

в общем на написанном быстренько тесте метод с логарифмами работает в ~2 раза дольше и жрет в ~2 раза больше памяти (не сильно помогаем и посчитанный лишь единожды ^math:log(1024)).

:)
@main[]
$t[^table::create{size
1
100
1000
10000
100000
1000000
10000000}]

$dLog1024(^math:log(1024))

<hr />
^methodLog[$t]
<hr />
^methodEq[$t]

^do[Log]{^methodLog[$t]}
^do[Eqs]{^methodEq[$t]}



@do[sTitle;jCode][i;v;z]
<hr />
<h1>$sTitle</h1>
^memory:compact[]
^Erusage:measure{$z[^for[i](0;1000){$jCode}]}[v]

time: $v.time<br />
KB: $v.memory_kb<br />
Bl: $v.memory_block</br />



@methodLog[t][v]
$result[^t.menu{^printFileSizeLog[$t.size]}[, ]]



@methodEq[t][v]
$result[^t.menu{^printFileSizeEq[$t.size]}[, ]]



@printFileSizeLog[iSize;hParam][result]
$result[^switch(^math:floor(^math:log($iSize)/$dLog1024)){
	^case(0){Б}
	^case(1){КБ}
	^case(2){МБ}
}]


@printFileSizeEq[iSize;hParam][result]
$result[^if($iSize < 1024){Б}{^if($iSize < 1048576){КБ}{МБ}}]