Max_QNX (05.12.2005 11:22, просмотров: 1) ответил -=Max_Fly=- на если ждать невмоготу ;)
исходник для PC потому не шибко оптимально в смысле float. :). [pre]
int CMX=0;
int CDV=1;
float max=999;
float N=0;
float delta=0.001;
float d;
N=(frq1)/(frq2);
if (N>20)
{
N=20;
response=1;
}
if (N<0.02)
{
N=0.02;
response=2;
}
// convert
do
{
if ((((float)CMX/(float)CDV))<N)
{
CMX++;
if (CMX==max)
{
break;
}
}
else
{
CDV++;
if (CDV==max)
{
break;
}
}
if((N-((float)CMX/(float)CDV))>0)
{
d=((float)CMX/(float)CDV);
d=N-d;
}
else
{
d=((float)CMX/(float)CDV);
d=d-N;
}
}
while (d>delta);
[\pre]
делится частоты. если ограничения на максимальную-минимальную нет - условия убрать.
Затем если дробь меньше - добавить числителя - если больше - знаменателя. Бегать до тех пор пока не упрёмся в максимум умножителя-делителя либо достигнем точности delta.