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

Odpowiedz Nowy wątek
2018-09-14 16:01
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 ? :)

Pozostało 580 znaków

2018-09-14 16:12
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

Na PW przyjmuje tylko (ciekawe!) zlecenia. Masz problem? Pisz na forum, nie do mnie.
edytowany 1x, ostatnio: Shalom, 2018-09-14 16:13

Pozostało 580 znaków

2018-09-14 16:14
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? ;-)

umiesz dodawać ułamki ?? :) - hurgadion 2018-09-14 16:15
Przecież poprawnie jest o_O 6/9 to 2/3 lol - Piotrek Nero 2018-09-14 16:15
Jak na piątek temat intrygujący :D - yarel 2018-09-14 16:18
dobrze, że Ci nie wyszło 666/999 :) - hurgadion 2018-09-14 16:19

Pozostało 580 znaków

2018-09-14 16:20
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.


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
edytowany 1x, ostatnio: MarekR22, 2018-09-14 16:22
za chwilę napiszę, gram równolegle w brydża :) trójka jest kluczowa przy mnożeniu większej ilości ułamków, aby się nie zwiększał za bardzo licznik :) - hurgadion 2018-09-14 16:25

Pozostało 580 znaków

2018-09-14 17:18
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 ?? :)

edytowany 1x, ostatnio: hurgadion, 2018-09-14 17:18

Pozostało 580 znaków

2018-09-14 17:25
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.


Jestem prawilnym gościem
Pokaż pozostałe 9 komentarzy
1/33 = n3 nie możesz takiego czegoś zrobić i mieć wywalone ? - Szalony Programista 2018-09-14 17:53
sorki, nie ogarniam Twoich wywodów. - hurgadion 2018-09-14 17:54
Zbugowało coś, chodziło mi o to, że zamiast oczekiwać wyniku 1 oczekujesz 3. - Szalony Programista 2018-09-14 17:56
dalej nie rozumiem, ale dzięki za zabranie głosu, pozdrawiam. - hurgadion 2018-09-14 17:57
Mnożenie i dzielenie jest przemienne można sobie dowolnie zamieniać zamiast dzielić mnożysz, zamiast mnożyć dzielisz i masz to samo. - Szalony Programista 2018-09-14 18:00

Pozostało 580 znaków

2018-09-14 17:26
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


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
edytowany 1x, ostatnio: MarekR22, 2018-09-14 17:27
no ja wiem, że nie jest to odkrycie :) natomiast skoro jest to takie proste, to dlaczego nie jest to zrobione domyślnie ?? :) - hurgadion 2018-09-14 17:33
bo zwykle nie ma takiej potrzeby, a takie ułamki lubią rosnąć pamięciowo. - MarekR22 2018-09-14 17:43
no nie jestem przekonany, że nie ma takiej potrzeby... a całe metody numeryczne, i szacowanie błędów wynikających właśnie z zaokrągleń ?? - hurgadion 2018-09-14 17:51
@hurgadion: gdzie pracujesz ze defaultowo potrzebujesz miec to wlaczone? - fasadin 2018-09-14 18:19
na razie nie pracuję, po prostu interesuje mnie ten problem :) - hurgadion 2018-09-14 18:31

Pozostało 580 znaków

2018-09-14 18:18
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

dzięki za wypowiedź, ale bardziej mi chodzi o takie działanie: (1.0/3.0)**1000 - hurgadion 2018-09-14 18:30
ah ok nie zauwazylem - fasadin 2018-09-14 20:32
@fasadin: właściwie to 1/3 w Pythonie 3 powinno zwrócić 0.(3) nawet jeśli dzielisz dwa inty. Żadnego rzutowania nie zrobi, chyba że zrobisz to wprost: int(1/3). Żeby podzielić inty jak inty dzielisz z podwójnym slashem i wtedy faktycznie dostaniesz zero: 1//3 - superdurszlak 2018-09-16 00:18

Pozostało 580 znaków

2018-09-14 19:40
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

edytowany 1x, ostatnio: AnyKtokolwiek, 2018-09-14 19:41

Pozostało 580 znaków

2018-09-14 19:56
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.

edytowany 2x, ostatnio: hurgadion, 2018-09-14 20:39

Pozostało 580 znaków

2018-09-14 21:46
cs
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.

jutro napiszę co nieco, ale przydział pamięci byłby dynamiczny, w zależności od potrzeb, no i zależy w jakiej notacji i jakim systemie liczbowym. - hurgadion 2018-09-14 21:58
Dynamiczny przydział pamięci jest sam w sobie narzutem i marnotrawstwem. - Tenonymous 2018-09-15 00:42
to zależy jak się nim zarządza :) ale dobra, muszę to przemyśleć, bo to proste nie jest, a na razie nie mam jeszcze dokładnie pomyślunku nawet jak to zaplanować :) poza tym znam się na tym średnio :) no, ale niekoniecznie tyle samo miejsca musi zajmować liczba 1.1 jak 1.11111111111111111111 :) - hurgadion 2018-09-15 01:15

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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

Robot: CCBot