Показать сообщение отдельно
Старый 13.01.2012, 19:36
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 6  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Код AS3:
private static const _pattern:ByteArray = new ByteArray();
 
private static const _separator:int = 0x2E;
 
private static const _asciiZero:int = 0x30;
 
private static function format(digit:uint):String
{
	var reminder:uint = digit;
	var index:int = 12;
 
	_pattern.length = 13;
	while (index > -1)
	{
		reminder = digit;
		digit = binaryDiv10(digit);
		reminder -= (digit << 3) + (digit << 1);
		if (((index + 1) & 2) == 2)
			_pattern[index--] = _separator;
		_pattern[index--] = _asciiZero + reminder;
	}
	return _pattern.toString();
}
 
private static function binaryDiv10(divident:uint):uint
{
	var divisor:uint = 10;
	var multiplier:uint = 1;
	var quotient:uint;
	var reminder:uint;
 
	if (divident < 10) return 0;
	while ((divisor <<= 1) < divident && multiplier < 28)
		multiplier++;
	divident -= (divisor >>>= 1);
	quotient = 1 << (multiplier - 1);
	multiplier = quotient;
	while (divident)
	{
		while ((divisor >>>= 1) > divident) multiplier >>>= 1;
		divident -= divisor;
		quotient += (multiplier >>>= 1);
	}
	return quotient;
}
Вариант с удвоенным количеством извращений Я чет не могу сообразить вот только, как параллельно с делением псчитать остаток %)
__________________
Hell is the possibility of sanity


Последний раз редактировалось wvxvw; 13.01.2012 в 19:41.