Есть алгоритмы получения sin cos по спец формулам с использованием только "* / + -". Посмотрите здесь.
http://images.google.ru/imgres?imgur...w%3D1%26sa%3DN
Могу сказать что по ссылке скорее всего указан не оптимальный алгоритм составления таблицы.
К примеру приведенная ниже процедура на ассемблеере х86 генерирует таблицу Sin Cos используя только логический сдвиг влево, сложение и побитовое "И". Т.е. даже без умножения и деления!
Но отмечу что синус и косинус генерируется не в диапазоне -1 до 1 как у обычного Sin Cos, а
по такому же закону но от -255 до 255, это сделано, чтобы не использовать числа с плавающей запятой.
Цитата:
|
PROC GetSinCos
; Needed : bx=angle (0..255)
; Returns: ax=Sin bx=Cos
push bx ; Save angle (use as pointer)
shl bx,1 ; Grab a word so bx=bx*2
mov ax,[SinCos + bx] ; Get sine
pop bx ; Restore pointer into bx
push ax ; Save sine on stack
add bx,64 ; Add 64 to get cosine
and bx,11111111b ; Range from 0..255
shl bx,1 ; *2 coz it's a word
mov ax,[SinCos + bx] ; Get cosine
mov bx,ax ; Save it bx=Cos
pop ax ; Restore ax=Sin
ret
ENDP GetSinCos
|
Кусок кода взят от сюда.
http://www.programmersheaven.com/dow...1/ZipView.aspx