Post by Maciek(......................)
(...) jeszcze 'drobny' problem - przeliczenia 'm'
na zapis dwójkowy
Jaki problem?... To przecież TEŻ robi arkusz. :D
W każdym z tych 293 wierszy wyznacza kolejną cyfrę
dwójkową wykładnika
Nie jest to dla mnie jasne. (.........)
Jak w arkuszu można wykonać dzielenie 123...4849 przez 2 .
Dokładnie tak samo, jak "na piechotę" - pisemnie. :-)
Nie zostawiaj odstępu przed kropką.
Jaki konkretnie arkusz kalkulacyjny używałeś ?
*Jakiego arkusza* używałem (używa się *czego*, nie *co*
- jedynym wyjątkiem jest seria debilnych reklam Calgonu).
Nie zostawiaj odstępu przed pytajnikiem.
Nie napiszę jakiego, bo i tak go prawie na pewno
nie znasz (prawie... na jakieś 99,95%). Zresztą
nieistotne, rachunek wygląda tak samo w każdym.
Weźmy na przykład liczbę 1234567890 w rozbiciu
na trzy kolumny. To daje 4-cyfrowe odcinki zapisu.
Piszemy w pierwszym wierszu:
A1: 12
A2: 3456
A3: 7890
- jest to oczywiście TRZYCYFROWY zapis tej samej liczby
w układzie o podstawie dziesięć tysięcy (a każda cyfra
zapisana dziesiętnie).
W kolejnych wierszach dzielimy ją - "pisemnie" - przez 2,
dzieląc każdą "cyfrę" i dobierając w razie potrzeby
przeniesienie z poprzedniej "cyfry":
B1: int( A1 / 2 )
B2: int( (mod(A1, 2) * 10000 + A2) / 2 )
B3: int( (mod(A2, 2) * 10000 + A3) / 2 )
C1: int( B1 / 2 )
C2: int( (mod(B1, 2) * 10000 + B2) / 2 )
C3: int( (mod(B2, 2) * 10000 + B3) / 2 )
....
Cyfry rozwinięcia dwójkowego - o ile potrzebujemy je
sobie wyświetlić - obliczamy w dodatkowej kolumnie:
A4: mod(A3, 2)
B4: mod(B3, 2)
C4: mod(C3, 2)
.....
Ot i cały "problem".
Rozszerzenie na większe liczby jest oczywiste: sprowadza
się do powielenia odpowiednią liczbę razy schematu
z kolumny 2 i 3, oraz, oczywiście, zwiększenia "podstawy"
zapisu, czyli liczby cyfr, wykorzystanych w poszczególnych
kolumnach. Powyżej użyłem odcinków tylko 4-cyfrowych aby
rozwiązanie było bardziej czytelnie. W praktyce można
dziś liczyć, że arkusz spamięta bez zaokrągleń liczby
rzędu nawet 1e14 (piętnaście cyfr precyzji daje 64-bitowy
zapis zmiennoprzecinkowy 'double precision' wg standardu
IEEE 754). Jednakże do działań typu "reszta z dzielenia"
arkusz mógłby przekształcać liczby na zapis całkowitoliczbowy
- i jeśli nie korzysta z formatu 80- lub choćby 64-bitowego,
to na poprawne wyniki można liczyć tylko pod warunkiem
utrzymania się w granicach 1e9.
Oczywiście int() i mod() symbolizują obliczenie części
całkowitej oraz reszty z dzielenia. Wdrażając przedstawiony
schemat trzeba je zastąpić funkcjami lub operatorami
istniejącymi w użytym arkuszu.
Maciek