Re[3]: sprintf/sscanf и скорость - понятия совместимые ?
От: YVR  
Дата: 31.07.03 18:42
Оценка: +1
Здравствуйте, balearic chill, Вы писали:

BC>Спасибо за первый дельный совет, в конкретной задаче специфика имеется — точность больше двух точек после запятой пока не нужна, но это пока ...


Так по специфике можно не слабо заточить
(и без автоматов — там выигрыш по данным автора меньше чем в 10 раз)

Например такой дубовый (не самый оптимальный ) код (без проверок — специфика ведь ):

double fn(char* sz)
{
    for( double dH = 0; *sz; sz++ )
    {
        if( *sz == '.' )
        {
            sz++;
            break;
        }
        dH *= 10;
        dH += (*sz) - '0';
    }
    for( double dL = 0, d = 1.0; *sz; sz++ )
    {
        d /= 10;
        dL += ((*sz) - '0') * d;
    }
    return dH+dL;
}

//...
double d;
for( int c=1000000; c--; )
    d = fn("1.23456");


работает почти в 100 раз быстрее (на VC6 release, 4-й пень), чем:

double d;
for( int c=1000000; c--; )
    sscanf( "1.23456", "%lf", &d );
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.