|
|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Pertzel Family 2:5020/400 07 Sep 2002 12:47:27 To : Alexander Golovlev Subject : Re: деление на 6 -------------------------------------------------------------------------------- "Alexander Golovlev" > Pertzel! > Хорошо, а как умножить на 1/6 То есть умножить на двоичное 0.00101010101010101010101010101010..... Если в процессоре это не реализовано аппаратно, то вот код на языке Це: (не обратил внимания на слово "байт", но все же допишу, может пригодится) unsigned byte DivBy6 (unsigned byte X) { union { unsigned word a; unsigned byte b; } A,Z; A.a=0; A.b=X; /* старший бит A.a содержит X, младший -- 0*/ Z.a=A.a=А.a>>3; Z.a+=A.a=A.a>>2 Z.a+=A.a=A.a>>2 Z.a+=A.a=A.a>>2 return Z.b /* старший бит Z */; } ==================================== А теперь -- самый быстрый алгоритм: ==================================== строим два const массива: unsigned byte DivResult[256]={0,0,0,0,0,0,1,1,1,1,1,1,2,2,2,2,2,2,3,...}; unsigned byte modResult[256]={0,1,2,3,4,5,0,1,2,3,4,5,0,1,2,3,4,5,0,...}; inline unsigned byte DivBy6 (unsigned byte X) {return DivResult[X]); inline unsigned byte ModBy6 (unsigned byte X) {return ModResult[X]); --- ifmail v.2.15dev5 * Origin: Sent via Graf's Inn at news://news.relhum.org (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/13592b9bd4429.html, оценка из 5, голосов 10
|