Trójkowa prezentacja ułamków niewłaściwych.

0

Hej,
mam pomysł jak przedstawić liczby niecałkowite w postaci trójki liczb całkowitych. Przedstawiamy ułamek

A p/q

gdzie A jest całością, a p/q ułamkiem zwykłym, jako trójkę:

[A, p, q]

Działania wykonujemy tak jak na zwykłych liczbach. Natomiast jeżeli chcemy mieć rozwinięcie liczy 1/3 (czyli [0, 1, 3]) z dokładnością do dwóch cyfr po przecinku, to robimy tak:

1*10^2 = 100 / 3 = 33

i otrzymujemy

0.33

Co o tym myślicie ? :)

6
  1. Właśnie odkryłeś ułamki zwykłe? o_O
  2. Po co ci w ogóle ta liczba całkowita? Możesz przecież mieć po prostu ułamek niewłaściwy p/q
  3. WTF
0

[A,p,q ] + [B,r,s] = [A+B,ps+qr,qs]

[0,1,3] + [0,1,3] = [0,6,9]

Hmm, i co dalej? ;-)

1

Po co trójka liczb? Para wystarczy.
Zaimplementowanie klasy ułamków, to o chyba jest jedno z ćwiczeń dla studentów, więc nie widzę tu nietuzinkowości.
Jest też zadanie SPOJ (nie mam linka), gdzie trzeba wyznaczyć okresowość ułamka przy konwersji do systemu dziesiętnego.

0

Generalnie chodzi mi o próbę podjęcia "walki" z nieprecyzyjnymi obliczeniami, głównie pracujemy na zaokrągleniach, na zmiennoprzecinkowych reprezentacjach. Takie podejście mogłoby pomóc skonstruować obliczenia bardziej precyzyjne w oparciu o arytmetykę liczb całkowitych, ponieważ np.:

1/3**1000 = 0.0

w Pythonie, czy nie jest to dla Was niepokojące ?? :)

0

Ja kiedyś ludziom wmawiałem, że jestem geniuszem matematycznym i odwracałem liczbę 9765325 do góry nogami przez co mogłem sobie dzielić dowolne liczby.

2^10 = 1024
1/2 = 5/10
1/2 = 0.5
5/10
5^10 / 10000000000
1024 * n / 1000000000 = n / 5^10

Ja wolę 1/3 trzymać jako liczbę 1 i 3, czasem można precyzję większą uzyskać kiedy się zastosuje w odpowiednim momencie podzielenie przez 3.

Bo tak naprawdę można rozbić liczbę na liczby pierwsze i wykonać obliczenia na mniejszych liczbach.
W głowie wtedy łatwiej się liczy, a program prawdopodobnie zużyje mnie ramu.

1

No ale to jest zrobione:
np dla python-a: https://docs.python.org/2/library/fractions.html
więc nie tylko tobie to przeszkadza

0
ponieważ np.:
1/3**1000 = 0.0
w Pythonie, czy nie jest to dla Was niepokojące ?? :)

eee...eeee... dzielisz inta z intem. Wiec masz rzutowany wynik na inta. 0 razy 1000 jest 0

zrob 1.0 / 3.0 * 1000 wyjdzie Ci 333.333
https://ideone.com/qSfcsf

0

Popieram pomysł na dwie liczby, bez części całkowitej.
Wydaje mi się (wręcz pośrednio to jest napisane), że część całkowita miała by zabezpieczyć przed przepełnieniem pojedynczej liczby. Ale za bardzo nie zabezpieczy. Choćby czasami potrzebny jest rozwinięty ułamek.

EDIT: dawno nie rozmawiałem o fundamentach matematyki, nie wiem czy używam dobrych słówek. Ale fajnie się rozmawia

0

Wydaje mi się, że to nie jest problem jeżeli zdefiniujemy ułamek (tablicę lub parę, jako reprezentację ułamka p/q):

[p, q]

tak aby p < q. Wtedy w obliczeniach będziemy mieli to jakoś tak:

(A + [p, q]) * (B + [u, w]) = A * B + A * [u, w] + B * [p, q] + [p, q] * [u, w]

Tylko trzeba odpowiednio zdefiniować działania 2, 3, 4, w naturalny sposób wydzielając w miarę potrzeb część całkowitą, aby zachować warunek p < q. Myślę, że ten warunek jest istotny.

Edit: Jaki jest tego plus ?? Na przykład taki, że jak dzielimy dwie liczby całkowite, to wystarczy tylko wykonać dzielenie całkowite, zostawić resztę i zapisać w postaci zdefiniowanej powyżej liczby, z takim "tablicowym" ułamkiem.

1

@hurgadion, Ile bitów przeznaczasz na zapis A, p i q? Do zapisania 0,000 001 potrzeba co najmniej 32 bitowych, co wydaje się trochę marnowaniem pamięci. Jeśli przeznaczysz więcej, to i tak dojdziesz do granicy zapisu i pojawi się błąd. Tego się nie przeskoczy. A przypadków, w których potrzeba "dokładnych" obliczeń wbrew pozorom nie jest wiele, a jeśli już są potrzebne to są od tego programy typu Mathematica, Matlab czy odpowiednie biblioteki. Może zamiast tego lepiej, żeby "standardowo" zaimplementować podawanie błędu granicznego na podstawie wzoru obliczeń, wtedy może ta histeria niedokładnych obliczeń na float uspokoiłaby się nieco a pojawiła wiedza, kiedy można je stosować a kiedy nie.

0

Hej,
generalnie problem nie jest prosty. Wydaje mi się, że zafiksowanie dokładności obliczeń właśnie nie rozwiązuje zagadnień związanych z problemami numerycznymi. Jeżeli analizujemy proces, który jest chaotyczny, to wtedy każde przybliżenie trajektorii danego procesu może dawać błędne (!) wyniki (tzw. czułość na warunki początkowe). Ale tu już wkraczamy w "Numerki". Mnie bardziej interesuje zagadnienie związane z lepszą prezentacją liczb niecałkowitych niż zmiennoprzecinkowe, ponieważ one działają, jak działają i zawsze trzeba pamiętać, że 0 niekoniecznie musi być w takiej sytuacji zerem ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1