eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingjak policzyć
Ilość wypowiedzi w tym wątku: 14

  • 1. Data: 2014-02-26 20:28:59
    Temat: jak policzyć
    Od: "tusk, donald tusk" <N...@g...pl>

    jest taki wzór:

    N=(CK*2^32)/125

    CK i N mogą być ułamkowe, nawet takie: 0,000001

    jak to okiełznać, najlepiej bez dzielenia, tylko mnożenie i przesuwanie, bez
    ułamków...

    proszę o gotowe zwory...


  • 2. Data: 2014-02-26 20:29:18
    Temat: Re: jak policzyć
    Od: "tusk, donald tusk" <N...@g...pl>

    ASM


  • 3. Data: 2014-02-26 23:46:00
    Temat: Re: jak policzy
    Od: bartekltg <b...@g...com>

    W dniu 2014-02-26 20:28, tusk, donald tusk pisze:
    > jest taki wzór:
    >
    > N=(CK*2^32)/125

    Już myślałem, że szukasz tego,
    http://cas.ee.ic.ac.uk/people/gac1/pubs/TheoISCAS12.
    pdf
    kiedyś była tu o tym dłuższa dyskusjai chyba
    lepsze linki. Ale...


    > CK i N mogą być ułamkowe, nawet takie: 0,000001

    Jeśli są to zmienne zmiennoprzecinkowe, to gdzie problem?

    liczysz stałą c = 34359738.368;
    wpisujesz w kod i masz jedno mnożenie,
    czy jedno fmul, skoro asm.

    > jak to okiełznać, najlepiej bez dzielenia, tylko mnożenie i przesuwanie,
    > bez ułamków...

    Nie ma przesuwania zmiennych zmiennoprzecinkowych.
    Jest operator FSCALE, który liczy y*2^floor(x), ale tu będzie
    niepotrzebny, bo to stałe. Hmm, niby scalbn w c++ powinno to robić,
    ale gcc nie rozwija do fscale, ale robi gdzieśtam call.

    > proszę o gotowe zwory...

    -ffast-math

    N = ck * 34359738.368;

    pzdr
    bartekltg



  • 4. Data: 2014-02-26 23:52:26
    Temat: Re: jak policzy
    Od: bartekltg <b...@g...com>

    W dniu 2014-02-26 23:46, bartekltg pisze:

    >
    > Nie ma przesuwania zmiennych zmiennoprzecinkowych.
    > Jest operator FSCALE, który liczy y*2^floor(x), ale tu będzie
    > niepotrzebny, bo to stałe. Hmm, niby scalbn

    Przekombinowałem i zapomniałem o ldexp, które było od zawsze.

    > w c++ powinno to robić,
    > ale gcc nie rozwija do fscale, ale robi gdzieśtam call.

    Zamiast polegać na zrzucie do asma
    -Wa,-adhls=test.s
    powinienen zdeassemblować gotowca i dopiero go oglądać.
    Ale to nie jest aż tak palący problem;)

    pzdr
    bartekltg




  • 5. Data: 2014-02-27 07:03:30
    Temat: Re: jak policzyć
    Od: A.L. <a...@a...com>

    On Wed, 26 Feb 2014 20:28:59 +0100, "tusk, donald tusk"
    <N...@g...pl> wrote:

    >jest taki wzór:
    >
    >N=(CK*2^32)/125
    >
    >CK i N mogą być ułamkowe, nawet takie: 0,000001
    >
    >jak to okiełznać, najlepiej bez dzielenia, tylko mnożenie i przesuwanie, bez
    >ułamków...
    >
    >proszę o gotowe zwory...


    A co, do pzredszkoal chodzisz?...

    A.L.


  • 6. Data: 2014-02-27 08:11:32
    Temat: Re: jak policzy
    Od: "tusk, donald tusk" <N...@g...pl>

    > N = ck * 34359738.368;

    dzięki, upraszczając do liczb całkowitych można napisac tak:

    N= CK(od 1 do X) * 34...

    ale tu pojawia się błąd zaokrąglenia, jeśli pomnożymy przez CK=1000000 to
    błąd będzie duży, co można zrobić? czy tylko przemnożyć kolejny raz?


  • 7. Data: 2014-02-27 13:26:53
    Temat: Re: jak policzy
    Od: "tusk, donald tusk" <N...@g...pl>

    a istnieje jakiś patent na "ręczne" policzenie wartości sinus, cosinus tg i
    ctg?


  • 8. Data: 2014-02-27 14:53:43
    Temat: Re: jak policzy
    Od: Paweł Kierski <n...@p...net>

    W dniu 2014-02-27 13:26, tusk, donald tusk pisze:
    > a istnieje jakiś patent na "ręczne" policzenie wartości sinus, cosinus
    > tg i ctg?

    Jeśli nie potrzebujesz super dokładnie, to można tablicować
    i interpolować liniowo w razie potrzeby. Ale nie wiem, czy to
    interpolowanie nie będzie dłuższe niż operacja na procesorze.

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


  • 9. Data: 2014-02-27 16:37:56
    Temat: Re: jak policzy
    Od: bartekltg <b...@g...com>

    W dniu 2014-02-27 08:11, tusk, donald tusk pisze:
    >> N = ck * 34359738.368;
    >
    > dzięki, upraszczając do liczb całkowitych można napisac tak:
    >
    > N= CK(od 1 do X) * 34...

    Nie, to nie jest uproszczenie!

    >
    > ale tu pojawia się błąd zaokrąglenia, jeśli pomnożymy przez CK=1000000
    > to błąd będzie duży, co można zrobić? czy tylko przemnożyć kolejny raz?

    Ale na cholerę chcesz użyć liczb całkowitych?
    Wyraźnie napisałeś "CK i N mogą być ułamkowe, nawet takie: 0,000001"
    czyli, że te liczby są liczbami typu float (single) albo double.
    Wtedy taką liczbę mnożymy przez stałą typu float lub double.

    Chyba, że źle napisałeś i chciałeś zapytać o co innego,
    ale wtedy musisz się precyzyjnie wysłowić.

    pzdr
    bartekltg


  • 10. Data: 2014-02-27 16:54:34
    Temat: Re: jak policzy
    Od: bartekltg <b...@g...com>

    W dniu 2014-02-27 13:26, tusk, donald tusk pisze:
    > a istnieje jakiś patent na "ręczne" policzenie wartości sinus, cosinus
    > tg i ctg?

    Mnóstwo. Od Taylora i Pade'a, być może wspomaganych
    tablicowaniem, przez CORDIC (gdy dodawanie jest wyraźnie
    tańsze) po jakieś inne wynalazki
    http://math.stackexchange.com/questions/97560/numeri
    cally-efficient-approximation-of-coss

    Tylko po co, jeśli rządasz maksymalnej dokładności,
    nie wyprzedzisz koprocesora:
    http://www.agner.org/optimize/instruction_tables.pdf
    1-4 na fmul/fadd, licząc łańcuszek zależnych operacji 4.
    fsin 44-100.
    Z drugiej strony są w necie biblioteki do szybkiego wyliczania
    nie tak dokłądnie funkcji trygonometrycznych.

    pzdr
    bartekltg

strony : [ 1 ] . 2


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: