|
Надо похоже Вам сменить тормозную жидкость :)
Имеем v.
1) y=1/v; // приближенно, табличкой. Например получили старшие значащие 4 бита мантиссы.
2) y = y*(2 - v*y); // Имеем уже точность 8 бит.
3) y = y*(2 - v*y); // Имеем уже точность 16 бит.
4) y = y*(2 - v*y); // Имеем уже точность 32 бит
имеем y с точностью, достаточной для IEEE float.
Например для ЦП TMS320C6711 это реализуется так (вход в регистре A4, выход в A5, линейный ассемблер):
RCPSP .S1 A4,A5 ; A5=1/A4 8-бит точность
MVKL .S1 FLT_CONST_2,A6
MVKH .S1 FLT_CONST_2,A6
MPYSP .M1 A4,A5,A7
SUBSP .L1 A6,A7,A7
MPYSP .M1 A7,A5,A5 ; A5 уже имеет 16 бит точность
MPYSP .M1 A4,A5,A7
SUBSP .L1 A6,A7,A7
MPYSP .M1 A7,A5,A5 ; A5 уже имеет 32 бит точность, что более чем достаточно
E-mail: info@telesys.ru