-
1. Data: 2013-11-13 19:29:56
Temat: ułamki (alternatywnie do floata)
Od: firr <p...@g...com>
juz pare razy sie zastanawialem cze gdyby
zdefiniowac sobie liczbe jako pare integerow
licznik i mianownik (najlepiej jako i64
a nie i32 bo dla 32 bit chyba szybko mogloby
dochodzic do przepelnienia) to czy takie
rachunki nie mialyby szansy byc lepszymi
od floata/double
zalety sa np takie
1) jest to szybkie tj arytmetyka calkowita bez dzielenia w wiekszosci operacji
2) byloby to (poki sie nie wywali z powodu
przepelnienia0 scisłe, tj nie traci informacji
3) pozwala opoznic dzielenie, floaty wykonuja
dzielenia z kazdym znakiem / - taka liczba o wiele
rzadziej np przy wydruku na ekran reprezentacji dziesietnej
wady - nie wiem czy to wogole by dzialalo tj
boje sie ze szybko by sie przepelniało (ale moze
dla i64 nie tak szybko?)
ktos moglby rozwinac jakos ten temat i powiedzic
cos na temat tej opcji?
-
2. Data: 2013-11-13 20:29:15
Temat: Re: ułamki (alternatywnie do floata)
Od: Borneq <b...@a...hidden.pl>
W dniu 2013-11-13 19:29, firr pisze:
> wady - nie wiem czy to wogole by dzialalo tj
> boje sie ze szybko by sie przepelniało (ale moze
> dla i64 nie tak szybko?)
Bardzo szybko rosły by licznik i mianownik, ale można by zrobić je
liczbami dowolnej precyzji.
-
3. Data: 2013-11-13 20:43:08
Temat: Re: ułamki (alternatywnie do floata)
Od: "Ghost" <g...@e...pl>
Użytkownik "Borneq" <b...@a...hidden.pl> napisał w wiadomości
news:l60jvc$158$1@node1.news.atman.pl...
>W dniu 2013-11-13 19:29, firr pisze:
>> wady - nie wiem czy to wogole by dzialalo tj
>> boje sie ze szybko by sie przepelniało (ale moze
>> dla i64 nie tak szybko?)
>
> Bardzo szybko rosły by licznik i mianownik, ale można by zrobić je
> liczbami dowolnej precyzji.
Znaczny postep w stosunku do arytmetyki floata.
Gratuluje Panowie, wynalezliscie alternatywna arytmetyke maszyn cyfrowych,
troche dodupna, ale co tam.
-
4. Data: 2013-11-13 21:02:12
Temat: Re: ułamki (alternatywnie do floata)
Od: firr <p...@g...com>
W dniu środa, 13 listopada 2013 20:43:08 UTC+1 użytkownik Ghost napisał:
> Użytkownik "Borneq" <b...@a...hidden.pl> napisał w wiadomości
>
> news:l60jvc$158$1@node1.news.atman.pl...
>
> >W dniu 2013-11-13 19:29, firr pisze:
>
> >> wady - nie wiem czy to wogole by dzialalo tj
>
> >> boje sie ze szybko by sie przepelniało (ale moze
>
> >> dla i64 nie tak szybko?)
>
> >
>
> > Bardzo szybko rosły by licznik i mianownik, ale można by zrobić je
>
> > liczbami dowolnej precyzji.
>
>
>
> Znaczny postep w stosunku do arytmetyki floata.
>
> Gratuluje Panowie, wynalezliscie alternatywna arytmetyke maszyn cyfrowych,
>
> troche dodupna, ale co tam.
nie chodzi o wynalezienie ale o rozpatrzenie
specyfiki 9czyli zalet i wad) tematu, bo jest
nawet jako tako ciekawy
problem wlasnie chyba jednak w tym ze ten licznik
i mianownik by bardzo szybko rosly, tak ze byc
moze dyskwalifikowaloby ten typ w wiekszosci
zastosowan (?) acz to wymagaloby mz pewnego
rozpatrzenia
-
5. Data: 2013-11-14 05:19:09
Temat: Re: ułamki (alternatywnie do floata)
Od: "Ghost" <g...@e...pl>
Użytkownik "firr" <p...@g...com> napisał w wiadomości
news:76ab8c6d-f9d2-42d5-a02d-c154004c0c62@googlegrou
ps.com...
W dniu środa, 13 listopada 2013 20:43:08 UTC+1 użytkownik Ghost napisał:
> Użytkownik "Borneq" <b...@a...hidden.pl> napisał w wiadomości
>
> news:l60jvc$158$1@node1.news.atman.pl...
>
> >W dniu 2013-11-13 19:29, firr pisze:
>
>> >> wady - nie wiem czy to wogole by dzialalo tj
>
>> >> boje sie ze szybko by sie przepelniało (ale moze
>
>> >> dla i64 nie tak szybko?)
>
> >
>
>> > Bardzo szybko rosły by licznik i mianownik, ale można by zrobić je
>
>> > liczbami dowolnej precyzji.
>
>
>
>> Znaczny postep w stosunku do arytmetyki floata.
>
>> Gratuluje Panowie, wynalezliscie alternatywna arytmetyke maszyn
>> cyfrowych,
>
>> troche dodupna, ale co tam.
>nie chodzi o wynalezienie ale o rozpatrzenie
>specyfiki 9czyli zalet i wad) tematu, bo jest
>nawet jako tako ciekawy
>problem wlasnie chyba jednak w tym ze ten licznik
>i mianownik by bardzo szybko rosly, tak ze byc
>moze dyskwalifikowaloby ten typ w wiekszosci
>zastosowan (?) acz to wymagaloby mz pewnego
>rozpatrzenia
Misiu, zastanow sie chwile czy takie trywialne pomysly nie mialy czasem
prawa powstac juz u zarania informatyki (czyli na dlugo przed urodzinami
Twojego taty), a skoro tak i skoro nie sa stosowane, to co to moze znaczyc?
-
6. Data: 2013-11-14 07:55:16
Temat: Re: ułamki (alternatywnie do floata)
Od: Tomasz Kaczanowski <kaczus@dowyciecia_poczta.onet.pl>
W dniu 2013-11-13 19:29, firr pisze:
> juz pare razy sie zastanawialem cze gdyby
> zdefiniowac sobie liczbe jako pare integerow
> licznik i mianownik (najlepiej jako i64
> a nie i32 bo dla 32 bit chyba szybko mogloby
> dochodzic do przepelnienia) to czy takie
> rachunki nie mialyby szansy byc lepszymi
> od floata/double
>
> zalety sa np takie
>
> 1) jest to szybkie tj arytmetyka calkowita bez dzielenia w wiekszosci operacji
To, że jest to arytmetyka całkowita, wcale nie oznacza, że będzie
szybka, tym bardziej, że trzeba wykonywać dodatkowe operacje.
> 2) byloby to (poki sie nie wywali z powodu
> przepelnienia0 scisłe, tj nie traci informacji
Przepełnienie nastapi szybko przy dodawaniu liczb ułamkowych o różnych
mianownikach....
> 3) pozwala opoznic dzielenie, floaty wykonuja
> dzielenia z kazdym znakiem / - taka liczba o wiele
> rzadziej np przy wydruku na ekran reprezentacji dziesietnej
Dla optymalizacji zamiast dzielenia będzie szukanie najlepszego
mianownika przy dodawaniu.
> wady - nie wiem czy to wogole by dzialalo tj
> boje sie ze szybko by sie przepelniało (ale moze
> dla i64 nie tak szybko?)
Tak samo szybko.... (no ciut wolniej)
> ktos moglby rozwinac jakos ten temat i powiedzic
> cos na temat tej opcji?
Tak swojego czasu bawiłem się, zabawa przednia, ale jeśli chodzi o
szybkość działań i szybkość przepełnień, to po za miejscem, gdzie takich
operacji potrzebujemy jest to duzo wolniejsze i dodatkowo szybko się
przepełnia.
--
Kaczus
http://kaczus.ppa.pl
-
7. Data: 2013-11-14 09:03:42
Temat: Re: ułamki (alternatywnie do floata)
Od: Robert Winkler <n...@n...org>
Spróbuj używając tej notacji ułamkowej zapisać wartość liczby pi,
liczba Eulera albo wartość stałej Plancka.
Aby zrobić to z wystarczająco dobrą dokładnością
będziesz musiał przyjąć mianownik bliski przepełnienia zmiennej int,
co uniemożliwi ci jakiekolwiek dalsze operacje.
Zapis taki będzie wiec bezużyteczny w inżynierii, gdyż wiele obliczeń
opiera się na trygonometrii, a bez liczby pi nic z tego.
To samo z fizyką cząstek elementarnych, gdzie liczbę Eulera
czy też stałą Plancka znajdziesz tam prawie na każdym kroku.
W astronomii też niewiele zrobisz używając liczba 32-bitowych.
Wszędzie tam stosowanie klasycznych liczb zmiennoprzecinkowych,
mimo że ma też swoje wady, jest zdecydowanie lepsze.
Ale żeby nie było tak pesymistycznie.
Jest jedno zastosowanie gdzie stosowanie liczba zmiennoprzecinkowych
jest niedopuszczalne i gdzie od dziesięcioleci stosuje się zapis podobny
do proponowanego przez ciebie, czyli liczby stałoprzecinkowe,
a domeną są finanse.
Z tego powody bazy danych, niektóre języki programowania i biblioteki
oferują typy danych rodzaju money czy decimal do przechowywania kwot.
Przyjmuje się tam jednak stała wartość mianownika,
jedną z wielokrotności liczby 10,
na przykład 10000, zapewnia to 4 miejsca po przecinku,
co wystarczy aby prawidłowo opisać problem zaokrągleń,
przy założeniu że minimalną wartością jaką można operować
jest cent, grosz lub ich odpowiednik z innych systemów walutowych.
/Robert
-
8. Data: 2013-11-14 09:05:04
Temat: Re: ułamki (alternatywnie do floata)
Od: firr <p...@g...com>
W dniu czwartek, 14 listopada 2013 07:55:16 UTC+1 użytkownik Tomasz Kaczanowski
napisał:
> W dniu 2013-11-13 19:29, firr pisze:
>
> > juz pare razy sie zastanawialem cze gdyby
> > zdefiniowac sobie liczbe jako pare integerow
> > licznik i mianownik (najlepiej jako i64
> > a nie i32 bo dla 32 bit chyba szybko mogloby
> > dochodzic do przepelnienia) to czy takie
> > rachunki nie mialyby szansy byc lepszymi
> > od floata/double
>
> >
>
> > zalety sa np takie
>
> >
>
> > 1) jest to szybkie tj arytmetyka calkowita bez dzielenia w wiekszosci operacji
>
>
>
>
>
> To, że jest to arytmetyka całkowita, wcale nie oznacza, że będzie
> szybka, tym bardziej, że trzeba wykonywać dodatkowe operacje.
>
>
>
>
>
> > 2) byloby to (poki sie nie wywali z powodu
> > przepelnienia0 scisłe, tj nie traci informacji
>
>
>
> Przepełnienie nastapi szybko przy dodawaniu liczb ułamkowych o różnych
> mianownikach....
>
>
>
>
>
> > 3) pozwala opoznic dzielenie, floaty wykonuja
> > dzielenia z kazdym znakiem / - taka liczba o wiele
> > rzadziej np przy wydruku na ekran reprezentacji dziesietnej
>
>
>
> Dla optymalizacji zamiast dzielenia będzie szukanie najlepszego
> mianownika przy dodawaniu.
>
>
>
>
>
> > wady - nie wiem czy to wogole by dzialalo tj
> > boje sie ze szybko by sie przepelniało (ale moze
> > dla i64 nie tak szybko?)
>
>
>
> Tak samo szybko.... (no ciut wolniej)
>
>
>
> > ktos moglby rozwinac jakos ten temat i powiedzic
>
> > cos na temat tej opcji?
>
>
>
>
>
> Tak swojego czasu bawiłem się, zabawa przednia, ale jeśli chodzi o
>
> szybkość działań i szybkość przepełnień, to po za miejscem, gdzie takich
>
> operacji potrzebujemy jest to duzo wolniejsze i dodatkowo szybko się
>
> przepełnia.
>
>
fajnie by bylo wiedziec jednak nieco wiecej
na ten temat, ciekawe na przyklad 1 czy nie ma jednak jakichs przypadkow gdy to by
sie
jednak sprawdzalo 2 jak dzilalalo by np
takie trywialne skracanie ze licznik i mianownik
przesuwamy w prawo o ta sama ilosc bitów,
czy niosloby to jakis wielki blad
na przyklad mamy ulamek
10010101011101010100110010100101001001001010101001
/ 10010010010001001001010010111111010100001010
czy po prostu obciacie licznika i mianownika np o 10 bitow nioslo by duzy blad czy
tez tego typu arytmetyka dzialalaby dla realnych zastosowan
(tego typu skracanie jest technicznie o niebo szybsze niz algorytm do dzielenia -
widomo ze
dzielenie jest akcelerowane ale sama istota
tej prostoty tutaj wydaje mi sie ew ciekawa)
-
9. Data: 2013-11-14 09:12:00
Temat: Re: ułamki (alternatywnie do floata)
Od: Tomasz Kaczanowski <kaczus@dowyciecia_poczta.onet.pl>
W dniu 2013-11-14 09:03, Robert Winkler pisze:
> Ale żeby nie było tak pesymistycznie.
> Jest jedno zastosowanie gdzie stosowanie liczba zmiennoprzecinkowych
> jest niedopuszczalne i gdzie od dziesięcioleci stosuje się zapis podobny
> do proponowanego przez ciebie, czyli liczby stałoprzecinkowe,
> a domeną są finanse.
> Z tego powody bazy danych, niektóre języki programowania i biblioteki
> oferują typy danych rodzaju money czy decimal do przechowywania kwot.
> Przyjmuje się tam jednak stała wartość mianownika,
> jedną z wielokrotności liczby 10,
> na przykład 10000, zapewnia to 4 miejsca po przecinku,
> co wystarczy aby prawidłowo opisać problem zaokrągleń,
> przy założeniu że minimalną wartością jaką można operować
> jest cent, grosz lub ich odpowiednik z innych systemów walutowych.
Niestety tak przygotowane liczby nie przydają się aż tak bardzo w
zastosowaniach finansowych. Bzdurne ograniczenie do 4 liczb po przecinku
bierze w łeb, gdy zaczynamy działać na więcej niż jednej walucie, a gdy
dojdą do tego procenty, są wręcz szkodliwe... Dlatego nie wiem do czego
można stosować przykładowo TCurrency z Delphi nie przydaje się do
niczego sensownego, ponad proste działania....
--
Kaczus
http://kaczus.ppa.pl
-
10. Data: 2013-11-14 09:40:05
Temat: Re: ułamki (alternatywnie do floata)
Od: Paweł Kierski <n...@p...net>
W dniu 2013-11-14 09:12, Tomasz Kaczanowski pisze:
> W dniu 2013-11-14 09:03, Robert Winkler pisze:
>> Ale żeby nie było tak pesymistycznie.
>> Jest jedno zastosowanie gdzie stosowanie liczba zmiennoprzecinkowych
>> jest niedopuszczalne i gdzie od dziesięcioleci stosuje się zapis podobny
>> do proponowanego przez ciebie, czyli liczby stałoprzecinkowe,
>> a domeną są finanse.
>> Z tego powody bazy danych, niektóre języki programowania i biblioteki
>> oferują typy danych rodzaju money czy decimal do przechowywania kwot.
>> Przyjmuje się tam jednak stała wartość mianownika,
>> jedną z wielokrotności liczby 10,
>> na przykład 10000, zapewnia to 4 miejsca po przecinku,
>> co wystarczy aby prawidłowo opisać problem zaokrągleń,
>> przy założeniu że minimalną wartością jaką można operować
>> jest cent, grosz lub ich odpowiednik z innych systemów walutowych.
>
> Niestety tak przygotowane liczby nie przydają się aż tak bardzo w
> zastosowaniach finansowych. Bzdurne ograniczenie do 4 liczb po przecinku
> bierze w łeb, gdy zaczynamy działać na więcej niż jednej walucie, a gdy
> dojdą do tego procenty, są wręcz szkodliwe... Dlatego nie wiem do czego
> można stosować przykładowo TCurrency z Delphi nie przydaje się do
> niczego sensownego, ponad proste działania....
Rozwiązaniem jest float o podstawie 10 a nie 2 + dobra obsługa
zaokrągleń.
Sam używam opakowanego http://speleotrove.com/decimal/ - ma to m.in.
taki ficzer, że 1.23 + 1.27 = 2.50 a nie 2.5
--
Paweł Kierski
n...@p...net