Mikl_, на предыдущем сайте был отличный алгоритм нахождения порядка числа (надеюсь правильно выразился). Можно привести этот алгоритм на этом сайте. А так же как по натуральному N (показатель степени) найти само число. Т.е. если N=3 число = 1000, N=6 число = 1 000 000. Как бы обратное действие.
Порядок - десятичный логарифм числа округленный до целого вверх. Ну, а обратная операция - это просто возведение 10 в степень N.
На ассемблере, я на С++ то же выложил. Умножить 10 на N раз это просто. Может какими то сдвигами или масками. С FPU, mul,div не интересно.
Мановар, Порядок десятичного числа ― это сколько цифр в этом числе минус 1. Порядок 137218 это 5 или [math]1,37218\times 10^{5}[/math] или [math]lg(137218)=5,1374110850436367723793306126299[/math]. Числа у нас двоичные, поэтому и логарифмы не десятичные, а двоичные. Переход от логарифма по основанию [math]a[/math] к логарифму по основанию [math]b[/math] описывается формулой [math]log_{a}(x)=\frac{1}{log_{b}(a)}\cdot log_{b}(x)[/math] применим эту формулу к десятичному и двоичному логарифмам от числа [math]x[/math] [math]lg(x)=\frac{1}{log_{2}(10)}\cdot log_{2}(x)=0,3010299956639868451190335946886\cdot log_{2}(x)[/math] [math]0,3010299956639868451190335946886\cdot 2^{16} = 19728,301795835041881720985661512[/math] 19728=4D10h Чтобы узнать сколько в числе [math]x[/math] десятичных разрядов нужно: посчитать количество двоичных разрядов в этом числе используя команду BSR затем количество двоичных разрядов умножить на "волшебное число" 4D10h сдвинуть произведение вправо на 16 разрядов Код (ASM): magic equ 4D10h .... fild X; загружаем целое 32-разрядное число fabs; избавляемся от знака fstp Y; число Y определено как tbyte movzx eax,word ptr Y+8; двоичный порядок sub eax,16382; из смещенного кода делаем дополнительный imul eax,magic; умножаем двоичный порядок на волшебное число shr eax,16; сдвигаем на 16 вправо получаем в ЕАХ десятичный порядок
Это взято из Агнера Фога. Если число положительное, тогда можно Код (ASM): mov eax,X bsr ecx,eax; можно shr eax,1 в цикле до первой единицы inc ecx imul ecx,magic; умножаем двоичный порядок на волшебное число shr ecx,16; сдвигаем на 16 вправо получаем в ЕCХ десятичный порядок[/asm]