Wyznaczanie liczby odwrotnej bez dzielenia

wielki_freeman
Użytkownik
Użytkownik
Posty: 9
Rejestracja: 29 sie 2009, o 15:15
Płeć: Mężczyzna
Podziękował: 1 raz

Wyznaczanie liczby odwrotnej bez dzielenia

Post autor: wielki_freeman »

Witam
Czy jest możliwość wyznaczenia liczby odwrotnej do a bez wykonywania dzielenia. Liczba a to dowolna liczba rzeczywista dodatnia ?

Operacje dozwolone to dodawanie, odejmowanie, mnożenie

Pozdrawiam
Awatar użytkownika
miki999
Użytkownik
Użytkownik
Posty: 8691
Rejestracja: 28 lis 2007, o 18:10
Płeć: Mężczyzna
Lokalizacja: Gdańsk
Podziękował: 36 razy
Pomógł: 1001 razy

Wyznaczanie liczby odwrotnej bez dzielenia

Post autor: miki999 »

Jeżeli dana jest liczba \(\displaystyle{ a \neq 0}\), to liczba do niej odwrotna \(\displaystyle{ a^{-1}}\), charakteryzuje się tym, że:
\(\displaystyle{ a \cdot a^{-1}=1}\)


Oczywiście \(\displaystyle{ a}\) i \(\displaystyle{ a^{-1}}\) muszą posiadać ten sam znak. Rozumiem, że to ma służyć do napisania programu?



Pozdrawiam.
wielki_freeman
Użytkownik
Użytkownik
Posty: 9
Rejestracja: 29 sie 2009, o 15:15
Płeć: Mężczyzna
Podziękował: 1 raz

Wyznaczanie liczby odwrotnej bez dzielenia

Post autor: wielki_freeman »

Tak, chciałbym napisać program, który nie wykorzystuje dzielenia i pozwala na obliczenie \(\displaystyle{ a^{-1}}\).
Powiedzmy tak że mamy układ scalony z zaimplementowanym mnożeniem, dodawaniem i odejmowaniem i teraz pytanie czy można na takim układzie obliczyć liczbę odwrotną do a
Awatar użytkownika
miki999
Użytkownik
Użytkownik
Posty: 8691
Rejestracja: 28 lis 2007, o 18:10
Płeć: Mężczyzna
Lokalizacja: Gdańsk
Podziękował: 36 razy
Pomógł: 1001 razy

Wyznaczanie liczby odwrotnej bez dzielenia

Post autor: miki999 »

Nie wiem jakie możliwości programistyczne masz i jakie liczby będą wprowadzane. Przykładowo przy wprowadzeniu \(\displaystyle{ 0.001}\)- otrzymamy \(\displaystyle{ 1000}\), natomiast działając na trochę większych liczbach (powiedzmy od 1 do 1000) zakres będzie inny i wartości będą mniejsze od \(\displaystyle{ 1}\). Czy możesz wykorzystywać relacje większości mniejszości? Czy wprowadzane liczby będą całkowite?


Jeżeli poszukujemy odwrotności liczby większej od 1 i możemy używać nierówności, to użyłbym coś w stylu "metody połowienia przedziału".
wielki_freeman
Użytkownik
Użytkownik
Posty: 9
Rejestracja: 29 sie 2009, o 15:15
Płeć: Mężczyzna
Podziękował: 1 raz

Wyznaczanie liczby odwrotnej bez dzielenia

Post autor: wielki_freeman »

Tylko te 3 operacje (+ np przesunięcia bitowe potrzebne do mnożenia, czy inne operacje potrzebne do dodawania).

Dane wejściowe go np a = 1,34232
albo a = 323,123
albo a = 222,111
albo a = 2,0
albo a = 0,88881
Awatar użytkownika
miki999
Użytkownik
Użytkownik
Posty: 8691
Rejestracja: 28 lis 2007, o 18:10
Płeć: Mężczyzna
Lokalizacja: Gdańsk
Podziękował: 36 razy
Pomógł: 1001 razy

Wyznaczanie liczby odwrotnej bez dzielenia

Post autor: miki999 »

A coś w stylu warunków można?
wielki_freeman
Użytkownik
Użytkownik
Posty: 9
Rejestracja: 29 sie 2009, o 15:15
Płeć: Mężczyzna
Podziękował: 1 raz

Wyznaczanie liczby odwrotnej bez dzielenia

Post autor: wielki_freeman »

Tak, można
Awatar użytkownika
miki999
Użytkownik
Użytkownik
Posty: 8691
Rejestracja: 28 lis 2007, o 18:10
Płeć: Mężczyzna
Lokalizacja: Gdańsk
Podziękował: 36 razy
Pomógł: 1001 razy

Wyznaczanie liczby odwrotnej bez dzielenia

Post autor: miki999 »

Obraliśmy jakąś liczbę \(\displaystyle{ a}\). No to bierzemy zakres od 0 do 10000- liczymy średnią arytmetyczną (czyli wybieramy liczbę pomiędzy nimi): 5000. Sprawdzamy, czy \(\displaystyle{ a \cdot 5000 \ge 1}\) (to się da zrobić sprawdzając bity, albo po prostu sprawdzając znak \(\displaystyle{ a \cdot 5000-1}\)- czyli jedynie pierwszy bit).
Jeżeli wartość \(\displaystyle{ a \cdot 5000-1 >0}\), to rozpatrujesz przedział 0 do 5000, w przeciwnym wypadku 5000 do 10000.
Ustawiasz licznik na ileś operacji (tak to się chyba robi?) albo jakąś dokładność i powtarzasz ten algorytm (chyba że wcześniej trafisz na iloczyn, który daje 1), a na końcu karzesz wypisać środkowy wyraz powstałego na końcu przedziału.

Oczywiście te 10000 wymyśliłem sobie. Jeżeli będą to liczby większe od \(\displaystyle{ 1}\), to mamy zakres od 0 do 1 i dużo większą dokładność.
Awatar użytkownika
Mariusz M
Użytkownik
Użytkownik
Posty: 6909
Rejestracja: 25 wrz 2007, o 01:03
Płeć: Mężczyzna
Lokalizacja: 53°02'N 18°35'E
Podziękował: 2 razy
Pomógł: 1246 razy

Wyznaczanie liczby odwrotnej bez dzielenia

Post autor: Mariusz M »

Odwrotność można przybliżyć sumą ciągu geometrycznego

o

\(\displaystyle{ a_{1}=1}\)

oraz

\(\displaystyle{ q=1-x}\)

Metoda ta jest zbieżna dla

\(\displaystyle{ \left|1-x \right|<1}\)

Ale to nie jest ograniczenie ponieważ każdą liczbę możesz przeskalować do przedziału

\(\displaystyle{ \left(0;1 \right)}\)

jako że liczba może być przedstawiona w postaci

\(\displaystyle{ x=p \cdot 10^m}\)
ODPOWIEDZ