eGospodarka.pl
eGospodarka.pl poleca

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

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

    On Thu, 14 Nov 2013 09:03:42 +0100, Robert Winkler <n...@n...org>
    wrote:

    >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.

    Czy Pan wie o czym Pan mowi?...

    http://gmplib.org/

    GMP is a free library for arbitrary precision arithmetic, operating on
    signed integers, rational numbers, and floating-point numbers. There
    is no practical limit to the precision except the ones implied by the
    available memory in the machine GMP runs on. GMP has a rich set of
    functions, and the functions have a regular interface

    A.L.


  • 22. Data: 2013-11-14 16:47:59
    Temat: Re: ułamki (alternatywnie do floata)
    Od: firr <p...@g...com>

    tak wogole to wsrod tych czterech dzialan
    add sub i mul sa binarnie dosyc 'prymitywne'

    bo z tego co mi sie zdaje (jakos nigdy tego
    nie 'sprawdzalem') binarne mnozenie sprowadza
    sie do tylu dodawan ile jest zapalonych bitow
    w jednym ze skladnikow np

    101
    x101
    -------
    =
    101
    +10100
    ---------
    11001 = 25


    czyli hardwarowo chyba latwo zaimplementowac
    na jakiejs 'siatce' nawet jakby to byla siatka
    64x64 bity - z dzieleniem chyba jako z jedynym jest conieco trudniej (choc dogladnie
    to nie
    wiem bo ten reczny algorytm ze szkoly niby nie jest taki zly a na gruncie binarnym'
    sa moze jakies lepsze



  • 23. Data: 2013-11-14 18:11:03
    Temat: Re: ułamki (alternatywnie do floata)
    Od: "Ghost" <g...@e...pl>


    Użytkownik "Paweł Kierski" <n...@p...net> napisał w wiadomości
    news:pkierski.pcp.1384423833@news.chmurka.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.

    No i gdzies masz wiecej niz cztery cyfry po przecinku?


  • 24. Data: 2013-11-14 19:37:25
    Temat: Re: ułamki (alternatywnie do floata)
    Od: bartekltg <b...@g...com>

    W dniu 2013-11-14 10:22, Robert Winkler pisze:
    > 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.

    Zgadza się.

    > Oznaczało to rozłożenia obu mianowników na czynniki pierwsze,

    Hmmm. Ale to głupi pomysł.


    > 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.

    Istnieje funkcja Najmniejsza Wspólna Wielokrotność.
    NWW(a,b) = a*b/NWD(a,b)

    A NWD - największa wspólna wielokrotność (gcd) liczy się
    błyskawicznie (kwadratowo względem długości liczb,
    jeśli to liczba dowolnej precyzji).

    Można też od razu napisać
    a:b + c:d = (a*d + c*b) : b*d

    I dopiero wynik potraktować NWD.


    Zerknąłem do wiki.
    http://pl.wikipedia.org/wiki/Najmniejsza_wsp%C3%B3ln
    a_wielokrotno%C5%9B%C4%87#Metoda_.28szkolna.29_poprz
    ez_rozk.C5.82ad_na_czynniki_pierwsze
    Rzeczywiście, opisują tu rozkład na czynniki jako "szkolną metodę",
    Ja nic takiego nie pamiętam. Może skleroza.

    W każdym razie, od programisty wymaga się więcej matematyki niż
    od ucznia podstawówki;)

    pzdr
    bartekltg



  • 25. Data: 2013-11-14 19:47:43
    Temat: Re: ułamki (alternatywnie do floata)
    Od: "Jordan Szubert" <u...@j...us.to>

    Dnia 14-11-2013 o 19:37:25 bartekltg <b...@g...com> napisał(a):

    > Można też od razu napisać
    > a:b + c:d = (a*d + c*b) : b*d
    >
    > I dopiero wynik potraktować NWD.

    a czasem pominięcie skracania też może mieć sens

    --
    Jordan Szubert


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

    W dniu 2013-11-14 09:40, Paweł Kierski pisze:
    > 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ń.

    Float to 7 cyfr dziesiętnych.
    Roczne zarobki posła i już jesteś na granicy zgubienia grosika.
    Z budżetu Polski podprowadziłeś 34złote ;-)

    > 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

    Ciekawe. Ale czemu nie użyć liczby całkowitej?
    Przewalutowania i procenty i tak liczy się do złotówki/dolara czy
    grosza/centa, bo liczy się wg przepisów.


    pzdr
    bartekltg






  • 27. Data: 2013-11-14 19:59:33
    Temat: Re: ułamki (alternatywnie do floata)
    Od: bartekltg <b...@g...com>

    W dniu 2013-11-14 16:39, A.L. pisze:
    > On Thu, 14 Nov 2013 09:03:42 +0100, Robert Winkler <n...@n...org>
    > wrote:
    >
    >> 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.
    >
    > Czy Pan wie o czym Pan mowi?...
    >
    > http://gmplib.org/
    >
    > GMP is a free library for arbitrary precision arithmetic, operating on
    > signed integers, rational numbers, and floating-point numbers. There
    > is no practical limit to the precision except the ones implied by the
    > available memory in the machine GMP runs on. GMP has a rich set of
    > functions, and the functions have a regular interface


    Zależy od zastosowania i tego, jak sobie radzi z małymi precyzjami.
    Dawno temu nie miał spacjalizowanych typów do obsługi ciut
    większych floatów, a często potrzeba właśnie poczwórnej albo
    ośmiokrotnej precyzji, prawdziwej, albo sztuczkami jak
    double-double czy quad-double.


    Znajoma liczy w okolicach fizyki atomowej, wyniki mają
    użyteczną (zgodną z eksperymentem:) precyzję w okolicach
    15 cyfr, używają najczęściej fortranowskiej 4 poczwórnej
    precyzji (czasem więcej), która tam jest implementowana
    właśnie jako double-double.


    GMP jest oczywiście jednym z najlepszych (ci pozostali
    to jego forki:) ale to też spory kombajn.
    Do zabaw polecam małą biblioteczkę
    http://www.ttmath.org/

    Oczywiście wolniejsza. Ma typy całkowite i zmienny przecinek.
    Niestety, integery nie rosną w miarę potrzeb, trzeba przewidzieć
    zapotrzebowanie.

    pzdr
    bartekltg



  • 28. Data: 2013-11-14 20:25:30
    Temat: Re: ułamki (alternatywnie do floata)
    Od: bartekltg <b...@g...com>

    W dniu 2013-11-13 19:29, firr pisze:

    Nie chciałem sam karmić, ale wątek się rozbijał;)

    > 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

    Jak już powiedziano, zastąpienie doubla
    ułamkiem z intów sensu nie ma.

    Jest to czasem przydatne, ale w specyficznych
    zastosowaniach.
    Jako ciekawostka, do standardu c++ wleciało coś takiego
    http://en.cppreference.com/w/cpp/numeric/ratio

    Za to przydać się może w innych zastosowaniach.


    > zalety sa np takie
    >
    > 1) jest to szybkie tj arytmetyka calkowita bez dzielenia w wiekszosci operacji

    Już padło. 1145/2568 + 6848/6127
    Ile operacji musisz wykonać? Co najmniej 3 mnożenia i jedno dodawanie,
    a wypadałoby jeszcze ułamek skrócić.

    > 2) byloby to (poki sie nie wywali z powodu
    > przepelnienia0 scisłe, tj nie traci informacji

    Chyba, że postanowię policzyć ułamek:)
    I znów, przydatne, al tylko w specyficznych zastosowaniach.

    > 3) pozwala opoznic dzielenie, floaty wykonuja
    > dzielenia z kazdym znakiem / - taka liczba o wiele
    > rzadziej np przy wydruku na ekran reprezentacji dziesietnej

    Dzielenie dwóch intów nie jest czasem mniej kosztowne niż
    operowanie na typie udającym dwa razy dłuższego inta.
    Dwa razy, na licznik i mianownik;)

    >
    > 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?


    Może jakiś przykład prawie*) z życia. Generowałem sobie kiedyś
    węzły i współczynniki do kwadratur gaussa. Nic prostszego,
    generujesz wielomiany legandrea, potem szukasz zer - to są węzły.

    Formuła trójczłonowa dla tych wielomianóww jest wymierna.
    Mają tylko wymierne współczynniki.
    Po wygenerowaniu wieomianów miejsca zerowe i całki
    można już liczyć z dowolną precyzją, bez konieczności
    przeliczania wszystkiego ze zwiększoną dokładnością.

    *) prawie, bo obecne komputery są na tyle mocne, że
    na wielomian potrzebny do wszelkich rozsądnych operacji
    wystarczy wziąć pakiet typu gmp i wpisać sporą dokładność,
    weryfikując tylko wyniki, czy nie ma szumu:)

    pzdr
    bartekltg



  • 29. Data: 2013-11-14 23:22:55
    Temat: Re: u?amki (alternatywnie do floata)
    Od: A.L. <a...@a...com>

    On Thu, 14 Nov 2013 20:25:30 +0100, bartekltg <b...@g...com>
    wrote:

    No, jeszcze jest to

    http://docs.oracle.com/javase/1.4.2/docs/api/java/ma
    th/BigInteger.html

    Immutable arbitrary-precision integers. All operations behave as if
    BigIntegers were represented in two's-complement notation (like Java's
    primitive integer types). BigInteger provides analogues to all of
    Java's primitive integer operators, and all relevant methods from
    java.lang.Math. Additionally, BigInteger provides operations for
    modular arithmetic, GCD calculation, primality testing, prime
    generation, bit manipulation, and a few other miscellaneous operations

    A.L.


  • 30. Data: 2013-11-15 00:03:43
    Temat: Re: ułamki (alternatywnie do floata)
    Od: bartekltg <b...@g...com>

    W dniu 2013-11-14 20:25, bartekltg pisze:
    >
    >> 2) byloby to (poki sie nie wywali z powodu
    >> przepelnienia0 scisłe, tj nie traci informacji
    >
    > Chyba, że postanowię policzyć ułamek:)

    Miało być "pierwiastek", nie "ułamek".

    pzdr
    bartekltg


strony : 1 . 2 . [ 3 ] . 4 ... 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: