eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingułamki (alternatywnie do floata)
Ilość wypowiedzi w tym wątku: 60

  • 11. Data: 2013-11-14 09:44:53
    Temat: Re: ułamki (alternatywnie do floata)
    Od: firr <p...@g...com>

    W dniu czwartek, 14 listopada 2013 09:05:04 UTC+1 użytkownik firr napisał:
    > 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)

    mozna tez przemyslec wersje takich liczb z
    ruchomym przecinkiem tj mantysa-cecha, ale
    ten podstawowy przypadek jest prostszy do
    zastanawiania sie jakby to dzialalo,

    ogolnie zaleta wydaje mi sie jest taka ze
    np jakis dlugi ciag dodawan odejmowan mnozen
    i dzielen w takiej reprezentacji jest
    fizycznie o wiele prostszy nic na floacie
    typu mantysa cecha (jesli to drugie by symulowac
    softem to chybbylo by widac) a dzielenie jest
    wogole wykluczane, chyba dopiero do momentu
    gdy trzeba wypisac reprezentacje dziesietna
    na ekranie (?)



  • 12. Data: 2013-11-14 09:59:31
    Temat: Re: ułamki (alternatywnie do floata)
    Od: "Ghost" <g...@e...pl>


    Użytkownik "Tomasz Kaczanowski" <kaczus@dowyciecia_poczta.onet.pl> napisał w
    wiadomości news:528485cf$0$2179$65785112@news.neostrada.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....

    Do przechowywania nadaje sie idealnie, co do obliczen, wystarczy minimalnie
    wieksza precyzja celem wlasciwej realizacji zaokraglen.


  • 13. Data: 2013-11-14 10:03:01
    Temat: Re: ułamki (alternatywnie do floata)
    Od: firr <p...@g...com>

    W dniu czwartek, 14 listopada 2013 09:44:53 UTC+1 użytkownik firr napisał:
    > W dniu czwartek, 14 listopada 2013 09:05:04 UTC+1 użytkownik firr napisał:
    >
    > > 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)
    >
    >
    >
    > mozna tez przemyslec wersje takich liczb z
    >
    > ruchomym przecinkiem tj mantysa-cecha, ale
    >
    > ten podstawowy przypadek jest prostszy do
    >
    > zastanawiania sie jakby to dzialalo,
    >
    >
    >
    > ogolnie zaleta wydaje mi sie jest taka ze
    >
    > np jakis dlugi ciag dodawan odejmowan mnozen
    >
    > i dzielen w takiej reprezentacji jest
    >
    > fizycznie o wiele prostszy nic na floacie
    >
    > typu mantysa cecha (jesli to drugie by symulowac
    >
    > softem to chybbylo by widac) a dzielenie jest
    >
    > wogole wykluczane, chyba dopiero do momentu
    >
    > gdy trzeba wypisac reprezentacje dziesietna
    >
    > na ekranie (?)

    tj w sumie dodawanie ulamokow byloby bardziej
    zlozone (tez w sumie nie wiem dokladnie jak
    kosztowne sa dodawanie udejmowanie mnozenie
    rozpisane softem na floatach bo moze nie
    az tak - wartoby napisac sobie softowe
    symulacje obu wersji) ale za to dodawania
    takich rzeczy jak 1/3 + 1/7 bylyby scisle
    - wydaje sie to jednak ciekawy pomysl
    i szkoda ze nie mam czegos takiegio w typach prostych do popisania na tym i
    posprawdzania jak to dziala



  • 14. Data: 2013-11-14 10:22:37
    Temat: Re: ułamki (alternatywnie do floata)
    Od: Robert Winkler <n...@n...org>

    Nie wiem czy dziś w czasach wszechobecnych kalkulatorów,
    w szkole podstawowej nadal tego uczą,
    ale za moich czasów aby dodać dwa ułamki należało sprowadzić
    oba do wspólnego mianownika.
    Oznaczało to rozłożenia obu mianowników na czynniki pierwsze,
    co wiązało się ze znaczną liczbą bardzo kosztownych czasowo
    operacji dzielenia przez wszystkie kolejne liczby pierwsze,
    a potem wymnożenie ich przez siebie.
    Z prostego dodawania robi się więc bardzo skomplikowana operacja.

    /Robert


  • 15. Data: 2013-11-14 10:25:15
    Temat: Re: ułamki (alternatywnie do floata)
    Od: Borneq <b...@a...hidden.pl>

    W dniu 2013-11-14 09:05, firr pisze:
    > 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

    Na przykład Derive używa ułamków, tyle że licznik i mianownik nie są
    intami a liczbami całkowitymi o dowolnej precyzji. Zaleta - mamy
    dokładne obliczenia, przybliżenie dopiero na końcu gdy dzielimy jedno
    przez drugie.


  • 16. Data: 2013-11-14 10:26:11
    Temat: Re: ułamki (alternatywnie do floata)
    Od: g...@g...com

    W dniu czwartek, 14 listopada 2013 10:03:01 UTC+1 użytkownik firr napisał:

    Z ciekawostek, to moj ulubiony Guile Scheme dostarcza:
    - arytmetyki dowolnej precyzji (kiedy wartosc przestaje miescic sie
    w rejestrach, po prostu korzysta z zewnetrznej pamieci, dopoki ta sie
    nie wyczerpie)
    - arytmetyki liczb wymiernych (rowniez dowolnej precyzji).
    - arytmetyki liczb zespolonych (w precyzji double)

    W swojej implementacji korzysta z biblioteki GNU GMP dla C:
    http://gmplib.org/

    Dziala to bardzo ladnie, aczkolwiek nigdy nie mierzylem, jakie
    to ma implikacje dla wydajnosci. Z jednej strony, nigdy nie mialem
    praktycznych problemow z wydajnoscia, ale z drugiej strony raczej
    bym sie bal uzywac tego w krytycznych aplikacjach bez przygladania
    sie algorytmom numerycznym, z ktorych korzystam (w praktyce wole
    wowczas ograniczyc precyzje obliczen)


  • 17. Data: 2013-11-14 10:57:39
    Temat: Re: ułamki (alternatywnie do floata)
    Od: Piotr Chamera <p...@p...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
    > 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?

    potestuj sobie :), np. w CommonLispie:

    CL-USER> (/ 1/33313331783667 (+ 1/3 1/2 4/1234 (* 5/7867562461 4263585/11)))

    106794292845614/2977136610572588858592722693


  • 18. Data: 2013-11-14 11:10:33
    Temat: Re: ułamki (alternatywnie do floata)
    Od: Paweł Kierski <n...@p...net>

    W dniu 2013-11-14 09:59, Ghost pisze:
    [...]
    >> 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....
    >
    > Do przechowywania nadaje sie idealnie, co do obliczen, wystarczy
    > minimalnie wieksza precyzja celem wlasciwej realizacji zaokraglen.

    Jaka precyzja jest potrzebna to już z reguły wynika z konkretnych
    uregulowań prawnych.

    --
    Paweł Kierski
    n...@p...net


  • 19. Data: 2013-11-14 11:48:10
    Temat: Re: ułamki (alternatywnie do floata)
    Od: firr <p...@g...com>

    W dniu czwartek, 14 listopada 2013 10:22:37 UTC+1 użytkownik Robert Winkler napisał:
    > Nie wiem czy dziś w czasach wszechobecnych kalkulatorów,
    >
    > w szkole podstawowej nadal tego uczą,
    >
    > ale za moich czasów aby dodać dwa ułamki należało sprowadzić
    >
    > oba do wspólnego mianownika.
    >
    > Oznaczało to rozłożenia obu mianowników na czynniki pierwsze,
    >
    > co wiązało się ze znaczną liczbą bardzo kosztownych czasowo
    >
    > operacji dzielenia przez wszystkie kolejne liczby pierwsze,
    >
    > a potem wymnożenie ich przez siebie.
    >
    > Z prostego dodawania robi się więc bardzo skomplikowana operacja.
    >

    chodzi na przyklad o taki przyklad (lub jakies podobne)

    x = (1/3 + 3/7 + 15)*5/7

    algorytm dzielenia 'binarnego' (tj ten zwykly)
    jest chyba dosyc kosztowny (niestety naet nie wiem dokladnie co on tam obejmuje ale
    costam
    obejmuje) tymszasem wymnozenie tego na ulamkach
    daloby jakas spora liczbe ktora jednak albo zmiescilaby sie w i64/i64 albo tez mona
    by ja
    obciac - a algorytm dzielanie bylby odlozony do
    konca (moze nawet jesli ta liczba jest potrzebna
    tylko do jakiegos porownania albo do dzielenia ktore ma dac tylko zgrubny wynik (np
    jako wspolrzedna calkowita pixela na ekranie mozna by ogole sie bez niego obyc)
    na wspolczesnych kompach zreszta calkowite dzielenia sa chyba niezle
    podoptymalizowane i
    zajmuja dosyc malo (w sumie nie wiem ile mnozen
    kosztuje dzielenie na wspolczesnych kompach ale
    nie tak wiele - ale jesli chodzi o istote
    upraszczania operacji to takie unikanie dzielenia
    mogloby byc uzyteczne - jak mysle

    co do porownywania to trzebaby porownywac
    albo dwie softowe wersje fpu vs ulamki albo
    dwie sprzetowe (zrobione na podobnym poziomie)



  • 20. Data: 2013-11-14 16:34:01
    Temat: Re: ułamki (alternatywnie do floata)
    Od: A.L. <a...@a...com>

    On Thu, 14 Nov 2013 10:22:37 +0100, Robert Winkler <n...@n...org>
    wrote:

    >Nie wiem czy dziś w czasach wszechobecnych kalkulatorów,
    >w szkole podstawowej nadal tego uczą,
    >ale za moich czasów aby dodać dwa ułamki należało sprowadzić
    >oba do wspólnego mianownika.
    >Oznaczało to rozłożenia obu mianowników na czynniki pierwsze,
    >co wiązało się ze znaczną liczbą bardzo kosztownych czasowo
    >operacji dzielenia przez wszystkie kolejne liczby pierwsze,
    >a potem wymnożenie ich przez siebie.
    >Z prostego dodawania robi się więc bardzo skomplikowana operacja.
    >

    Chyba naprawde dawno konczyl Pan szkole podstawowa...

    A.L.

strony : 1 . [ 2 ] . 3 ... 6


Szukaj w grupach

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: