Цитата(Kolia @ Sep 26 2007, 13:55)

Ну если вы переходите на такие заморочки

. Я бы порекомендовал вам вообще отказаться от FLOAT математики и перейти к чисмам INT, LONG и т.д. ... и жизнь покажется вам сказкой

Я бы с радостью

Только вот трудоемкость перевода всей математики, калибровочных кривых, и пр. никак не сделают жизнь сказкой. Вся математика уже написана и не мной.
Цитата(zltigo @ Sep 26 2007, 14:35)

Поскольку человек считывает значения еще более неспешно, то одним из вероятных путей решения этой проблемы является пересмотр построения системы, дабы эта неспешность не находилась в узком месте.
Тут я уже пооптимиздил

В принципе даже с sprintf'ом на полной частоте можно конвертировать до сотни измерений в сек. Но задача в другом - вписаться в бюджет по питанию, дабы не ставить еще один (или более мощный) DC-DC. Вся обработка одного канала измерений занимает времени столько же сколько и конвертирование float в строку. А у меня еще виртуальная машина кушать хочет

Цитата(alexander55 @ Sep 26 2007, 15:42)

Сталкивался.
Пусть надо 2 знака после запятой. Решал примерно так.
float a=1.23;
int b=(int)(a*100);
cout <<"a=" <<b/100 <<"," <<b%100 ;
Получается полегче.
Спасибо. Идея ясна. Но пусть float a = 1.23e-7

В приведенном в исходном посте примере я не показал вывод показателся степени, но он подразумевается.
Когда числа "похожи" на целые двузначные (примерно от 0.1 до 99) - ту все понятно, ну а если динамический диапазон немножко шире - приходится выводить в экспоненциальной форме.
для простоты выпендрежа я делал так:
Код
//-------------------------------------------------------------------------------------------------
//описание формата 3хкомпонентного представления числа
//-------------------------------------------------------------------------------------------------
typedef struct _Value3{
char Exp; //кол-во порядков
char M_int; //целая часть мантиссы
char M_1; //первая цифра дробной части мантиссы
float Tens;
}Value3, *PValue3;
void FloatToNum3 ( float Num, PValue3 Num3)
{
float Mantissaf, Expf, M_intf;
Expf = floorf( log10f( Num ) ); //целое количество порядков в числе
Num3->Exp = (char)Expf;
Num3->Tens = powf( 10, Expf );
Mantissaf = Num/(Num3->Tens); //исх. число в формате [1.0..9.9)
M_intf = floorf( Mantissaf );
Num3->M_int = (char) M_intf;
Num3->M_1 = (char)floorf( (Mantissaf - M_intf)*10 );
}
Но это по производительности соизмеримо с библиотечым sprintf'ом.
Хотя бы ткните в линк, где бы подробненько были разжеваны правила работы с fixed-point, а то между двух чисел блуждаю... в 23х битах заблудился... клинит меня