1

Algorytmy pierwiastkowania na 6502 ograniczają się do przybliżonych wartości pierwiastka i reszty z pierwiastkowania, na przykład dla wartości 240 (pierwiastek to 15,491933)
otrzymujemy pierwiastek 15 i 15 reszty.
Potrzebowałem aby resztę z pierwiastkowania zamienić na jakąś wartość użyteczną dla obliczeń (w moim przypadku obliczeń odległości odcinka) i okazało się, że działanie:
R=Rem/(F*2)
Gdzie R to ułamkowa wartość reszty z pierwiastkowania, Rem to reszta z pierwiastkowania a F to całkowita wartość pierwiastkowania
Daje całkiem nieźle przybliżony wynik reszty z pierwiastkowania
dla liczby 240
otrzymujemy Rem=15, F=15, a więc 15/(15*2) daje 0,5, co w porównaniu do wartości 15,491933 daje błąd 0,008
zaś dla liczby 1000, której pierwiastek to 31,62277
otrzymujemy Rem=39, F=31 a więc 39/(31*2) daje 0,62903 co w porównaniu do wartości 31,62277 daje błąd 0,006
---
Myślę, że jest to dość przydatne, gdy potrzebujemy zamienić resztę z pierwiastkowania na ułamek dziesiętny.
Można by się też pokusić o algorytm pierwiastkowania, który miałby stablicowane  jedynie wartości pierwiastkowania bez reszty i używałby dzielenia do określenia reszty z pierwiastkowania, dzielenie jest o wiele szybsze od pierwiastkowania.

2 Ostatnio edytowany przez Fox (2023-02-20 16:46:29)

Pierwiastek możesz wyznaczyć przez wyszukiwanie w tablicy kwadratów. Tutaj wyszukiwanie liniowe: https://github.com/pfusik/numen/blob/ma … p.asx#L573 ale możesz też wykonać połówkowe.

Jak rozumiem, potrzebujesz część ułamkową. W takim razie możesz po prostu wstępnie zeskalować wartość pierwiastkowaną, wykonać algorytm pierwiastkowania całkowitego i na koniec mniej znaczące bity wyniku potraktować jako część ułamkową.
Np.

sqrt(x * 256) = sqrt(x) * 16

czyli dopisując 8 bitów zero otrzymasz cztery bity ułamka.

https://www.youtube.com/watch?v=jofNR_WkoCE

3

tak sobie kombinowałem z taką tablicą kwadratów i to jest chyba niezły pomysł, moje rozwiązanie ma tę zaletę, że od razu dostajesz 8 bitów części ułamkowej, jest to akurat mi potrzebne bo staram się obliczyć pierwiastek z zakresu 1 do 4096, a co za tym idzie wartość ułamkowa ma duże znaczenie.