eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingjak szacowac dokladnosc obliczen
Ilość wypowiedzi w tym wątku: 21

  • 1. Data: 2011-06-18 19:30:34
    Temat: jak szacowac dokladnosc obliczen
    Od: Radoslaw Jocz <r...@p...onet.pl>


    ostatnio pracuje troche nad grafika wektorowa 2D
    i mam pytanie jak rozwiazac problemy z dokladnoscia i zaokraglaniem

    podstawowe problemy z jakimi sie spotykam:

    - mamy dane 2 punkty p0(x,y), p1(x,y) powiedzmy p0 jest podany a p1
    obliczony nalezy sprawdzic czy to ten sam punkt czy dwa lezace powiedzmy
    blisko siebie, wiadomo gdy d(p0, p1) == 0 to ten sam punkt ale to tez wiem

    - mamy dana prosta zadana dwoma punktami p1,p2 i punkt p0
    sprawdzic czy punkt p0 lezy na prostej czy powiedzmy bardzo blisko tej
    prostej

    korzystam z api Java gdzie mozna dosc elegancko zaokraglac
    na wiele sposobow w gore i wdol ale nawet proste obliczenia
    powoduja bledy ktore trudno oszacowac


  • 2. Data: 2011-06-18 19:39:33
    Temat: Re: jak szacowac dokladnosc obliczen
    Od: Wojciech Muła <w...@p...null.onet.pl.invalid>

    On Sat, 18 Jun 2011 20:30:34 +0100 Radoslaw Jocz
    <r...@p...onet.pl> wrote:

    > ostatnio pracuje troche nad grafika wektorowa 2D
    > i mam pytanie jak rozwiazac problemy z dokladnoscia i zaokraglaniem
    >
    > podstawowe problemy z jakimi sie spotykam:
    > [...]
    >
    > - mamy dane 2 punkty p0(x,y), p1(x,y) powiedzmy p0 jest podany a p1
    > obliczony nalezy sprawdzic czy to ten sam punkt czy dwa lezace
    > powiedzmy blisko siebie, wiadomo gdy d(p0, p1) == 0 to ten sam punkt
    > ale to tez wiem
    >
    > - mamy dana prosta zadana dwoma punktami p1,p2 i punkt p0
    > sprawdzic czy punkt p0 lezy na prostej czy powiedzmy bardzo blisko
    > tej prostej

    Jeśli pracujesz na typach zmiennoprzecinkowych, to musisz przyjąć
    sobie jakąś granicę błędu, np. 1e-6, czy 1e-5. Czyli np.
    d(p0, p1) <= 1e-6, to p0=p1.

    w.


  • 3. Data: 2011-06-18 19:49:18
    Temat: Re: jak szacowac dokladnosc obliczen
    Od: Jacek Czerwinski <...@...z.pl>

    W dniu 2011-06-18 21:39, Wojciech Muła pisze:


    > Jeśli pracujesz na typach zmiennoprzecinkowych, to musisz przyjąć
    > sobie jakąś granicę błędu, np. 1e-6, czy 1e-5. Czyli np.
    > d(p0, p1)<= 1e-6, to p0=p1.
    >
    W mierze względnej to ok, bo dosłownie czytając wygląda jakbyś pisał o
    różnicy bezwględnej. Chyba że twoje 'd' to ma oznaczać, ale nie
    spotkałem się z takim zapisem.

    Jeśli bazą do pytania są szersze przemyślenia, to zagadnienia rachunku
    błędów są od 100-200 lat podstawą kształcenia
    inzynieryjsko-technicznego. Kiedy błąd bezwzględny, kiedy względny, jak
    się dodają i wpływają na siebie itd. Który błąd jest 'z pomiaru' i co
    się dzieje jak podlega obliczeniom. Ja to wyniosłem z metod numerycznych
    (kiedyś miało to dużo większe znaczenia dla programistów), a z innym
    rozkładem akcentów z miernictwa elektrycznego (do końca będę to sobie
    cenił), dobre laboratorium z fizyki nie złe.



  • 4. Data: 2011-06-18 20:01:26
    Temat: Re: jak szacowac dokladnosc obliczen
    Od: Radoslaw Jocz <r...@p...onet.pl>

    Jacek Czerwinski wrote:
    > W dniu 2011-06-18 21:39, Wojciech Muła pisze:
    >
    >
    >> Jeśli pracujesz na typach zmiennoprzecinkowych, to musisz przyjąć
    >> sobie jakąś granicę błędu, np. 1e-6, czy 1e-5. Czyli np.
    >> d(p0, p1)<= 1e-6, to p0=p1.
    >>
    > W mierze względnej to ok, bo dosłownie czytając wygląda jakbyś pisał o
    > różnicy bezwględnej. Chyba że twoje 'd' to ma oznaczać, ale nie
    > spotkałem się z takim zapisem.
    >
    > Jeśli bazą do pytania są szersze przemyślenia, to zagadnienia rachunku
    > błędów są od 100-200 lat podstawą kształcenia
    > inzynieryjsko-technicznego. Kiedy błąd bezwzględny, kiedy względny, jak
    > się dodają i wpływają na siebie itd. Który błąd jest 'z pomiaru' i co
    > się dzieje jak podlega obliczeniom. Ja to wyniosłem z metod numerycznych
    > (kiedyś miało to dużo większe znaczenia dla programistów), a z innym
    > rozkładem akcentów z miernictwa elektrycznego (do końca będę to sobie
    > cenił), dobre laboratorium z fizyki nie złe.
    >
    >
    wszystko wiem ale pracujac z debuggerem widze ze np
    niektore funkcje z biblioteki standardowej double Math.xxxx() robia
    wieksze bledy nize wynikalo by to z precyzji zmiennej double
    wiec co wtedy?


  • 5. Data: 2011-06-18 20:17:36
    Temat: Re: jak szacowac dokladnosc obliczen
    Od: Jacek Czerwinski <...@...z.pl>

    W dniu 2011-06-18 22:01, Radoslaw Jocz pisze:

    >>
    > wszystko wiem ale pracujac z debuggerem widze ze np
    Co do debuggera, nie wiem jak ten, ale debugger Borlanda w swej
    juzerfriedlości zaokrągla liczby do "ładnych". Kiedyś pod ich wpływem
    kolega szedł w zaparte, że są dokładne i można na nich liczyć kasę.
    Prawda była inna, miały różnice na którejś pozycji ...

    > niektore funkcje z biblioteki standardowej double Math.xxxx() robia
    > wieksze bledy nize wynikalo by to z precyzji zmiennej double
    > wiec co wtedy?

    Oczywiście że będą mniej dokładne. Taki szkolny przykład: małe różnice
    dużych licz będą mieć nawet fatalnie duży błąd. Nawet Intel z 10 lat
    temu strzelił tragicznego byka w jakimś Pentiumie.

    I "co wtedy" oto jest pytanie ... na pewno należy się do tego dostosować
    a nie negować.

    Np specjaliści z numeryki wiedzą, który algorytm na zdrowy rozsądek
    poprawny, ale bardzo pechowo narastają mu błedy i wynajdują inny, mniej
    oczywisty ale bardziej 'stabilny numerycznie'. To na poziomie "Pro".

    Zasadniczo każde zagadnienie (jak porównanie punktu i prostej) ma dwa
    warianty odpowiedz: idealistyczny (naiwny) a profesjonalny.

    Strasznie dawno się tym zajmowałem, pamiętam ogół a nie szczegóły.






  • 6. Data: 2011-06-18 20:17:59
    Temat: Re: jak szacowac dokladnosc obliczen
    Od: Radoslaw Jocz <r...@p...onet.pl>

    Wojciech Muła wrote:
    > On Sat, 18 Jun 2011 20:30:34 +0100 Radoslaw Jocz
    > <r...@p...onet.pl> wrote:
    >
    >> ostatnio pracuje troche nad grafika wektorowa 2D
    >> i mam pytanie jak rozwiazac problemy z dokladnoscia i zaokraglaniem
    >>
    >> podstawowe problemy z jakimi sie spotykam:
    >> [...]
    >>
    >> - mamy dane 2 punkty p0(x,y), p1(x,y) powiedzmy p0 jest podany a p1
    >> obliczony nalezy sprawdzic czy to ten sam punkt czy dwa lezace
    >> powiedzmy blisko siebie, wiadomo gdy d(p0, p1) == 0 to ten sam punkt
    >> ale to tez wiem
    >>
    >> - mamy dana prosta zadana dwoma punktami p1,p2 i punkt p0
    >> sprawdzic czy punkt p0 lezy na prostej czy powiedzmy bardzo blisko
    >> tej prostej
    >
    > Jeśli pracujesz na typach zmiennoprzecinkowych, to musisz przyjąć
    > sobie jakąś granicę błędu, np. 1e-6, czy 1e-5. Czyli np.
    > d(p0, p1) <= 1e-6, to p0=p1.
    >
    > w.
    >
    robie dokladnie tak samo np walidujac punkt lezacy na na danym odcinku
    lub okregu itp ale z mojej praktyki wynika ze granica bledu musi byc
    conajmniej o kilka rzedow wielkosci wieksza niz dokladnosc samego typu
    na ktorym sie liczy np double a wiadomo jak przyjme ten parametr zbyt
    maly lub zbyt duzy to nic dobrego z tego nie bedzie

    zastanawiam sie w jakim stopniu wielkosc takiego bledu moze zalezec od
    danego jezyka i jego api
    np porownujac Java i C i czy w ogole takie rozwazania maja sens


  • 7. Data: 2011-06-18 20:23:39
    Temat: Re: jak szacowac dokladnosc obliczen
    Od: Radoslaw Jocz <r...@p...onet.pl>

    >
    >> niektore funkcje z biblioteki standardowej double Math.xxxx() robia
    >> wieksze bledy nize wynikalo by to z precyzji zmiennej double
    >> wiec co wtedy?
    >
    > Oczywiście że będą mniej dokładne. Taki szkolny przykład: małe różnice
    > dużych licz będą mieć nawet fatalnie duży błąd. Nawet Intel z 10 lat
    > temu strzelił tragicznego byka w jakimś Pentiumie.
    >
    > I "co wtedy" oto jest pytanie ... na pewno należy się do tego dostosować
    > a nie negować.
    >
    > Np specjaliści z numeryki wiedzą, który algorytm na zdrowy rozsądek
    > poprawny, ale bardzo pechowo narastają mu błedy i wynajdują inny, mniej
    > oczywisty ale bardziej 'stabilny numerycznie'. To na poziomie "Pro".
    >
    > Zasadniczo każde zagadnienie (jak porównanie punktu i prostej) ma dwa
    > warianty odpowiedz: idealistyczny (naiwny) a profesjonalny.
    >
    > Strasznie dawno się tym zajmowałem, pamiętam ogół a nie szczegóły.
    >
    >
    wiem narastanie bledow to podstawa met numerycznych ale nawet
    "proste" rachunki nie sa tu oczywiste


  • 8. Data: 2011-06-18 20:27:05
    Temat: Re: jak szacowac dokladnosc obliczen
    Od: Jacek Czerwinski <...@...z.pl>

    W dniu 2011-06-18 22:17, Radoslaw Jocz pisze:
    > Wojciech Muła wrote:
    >> On Sat, 18 Jun 2011 20:30:34 +0100 Radoslaw Jocz
    >> <r...@p...onet.pl> wrote:

    >
    > zastanawiam sie w jakim stopniu wielkosc takiego bledu moze zalezec od
    > danego jezyka i jego api
    > np porownujac Java i C i czy w ogole takie rozwazania maja sens

    Zasadniczo API do zmiennego przecinka na dziś oparte jest na tych samych
    podstawach, IEEE itd.

    Co do egzystencjalnego słowa "sens" ... Okreslenie czy punkt jest na
    prostej na "sens" na wykładzie abstrakcyjnej geometrii. Ktoś z was
    widział prawdziwy 'punkt' albo 'prostą'? W realnym życiu to jest pytanie
    czy jak wbiję gwożdzia w namalowaną linię (która nie jest ani
    nieskończenie cienka, ani nieskończenie długa, ani nie jest prosta),
    przejdzie kryteria odbioru. Tylko tyle i aż tyle.

    Rozwiązujesz zagadnienie teoretyczne czy praktyczne?


  • 9. Data: 2011-06-18 20:30:12
    Temat: Re: jak szacowac dokladnosc obliczen
    Od: Radoslaw Jocz <r...@p...onet.pl>


    spojrzcie na ten kod nie rozumiem zbytno po co ktos
    robil takie sztuczki z przesunieciami bitowymi << 14 >> 14

    typedef struct point {
    int x;
    int y;
    } point;

    typedef struct line {
    point p1;
    point p2;
    } line;

    /*
    * check_lines:
    * This is based off an explanation and expanded math presented by Paul
    Bourke:
    *
    * It takes two lines as inputs and returns 1 if they intersect, 0 if
    they do
    * not. hitp returns the point where the two lines intersected.
    *
    * This function expects integer value inputs and stores an integer value
    * in hitp if the two lines interesect. The internal calculations are
    fixed
    * point with a 14 bit fractional precision for processors without floating
    * point units.
    */
    int check_lines(line *line1, line *line2, point *hitp)
    {
    /* Introduction:
    * This code is based on the solution of these two input equations:
    * Pa = P1 + ua (P2-P1)
    * Pb = P3 + ub (P4-P3)
    *
    * Where line one is composed of points P1 and P2 and line two is
    composed
    * of points P3 and P4.
    *
    * ua/b is the fractional value you can multiple the x and y legs
    of the
    * triangle formed by each line to find a point on the line.
    *
    * The two equations can be expanded to their x/y components:
    * Pa.x = p1.x + ua(p2.x - p1.x)
    * Pa.y = p1.y + ua(p2.y - p1.y)
    *
    * Pb.x = p3.x + ub(p4.x - p3.x)
    * Pb.y = p3.y + ub(p4.y - p3.y)
    *
    * When Pa.x == Pb.x and Pa.y == Pb.y the lines intersect so you
    can come
    * up with two equations (one for x and one for y):
    *
    * p1.x + ua(p2.x - p1.x) = p3.x + ub(p4.x - p3.x)
    * p1.y + ua(p2.y - p1.y) = p3.y + ub(p4.y - p3.y)
    *
    * ua and ub can then be individually solved for. This results in the
    * equations used in the following code.
    */

    /* Denominator for ua and ub are the same so store this calculation */
    int d = (line2->p2.y - line2->p1.y)*(line1->p2.x-line1->p1.x) -
    (line2->p2.x - line2->p1.x)*(line1->p2.y-line1->p1.y);

    /* n_a and n_b are calculated as seperate values for readability */
    int n_a = (line2->p2.x - line2->p1.x)*(line1->p1.y-line2->p1.y) -
    (line2->p2.y - line2->p1.y)*(line1->p1.x-line2->p1.x);

    int n_b = (line1->p2.x - line1->p1.x)*(line1->p1.y - line2->p1.y) -
    (line1->p2.y - line1->p1.y)*(line1->p1.x - line2->p1.x);

    /* Make sure there is not a division by zero - this also indicates that
    * the lines are parallel.
    *
    * If n_a and n_b were both equal to zero the lines would be on top
    of each
    * other (coincidental). This check is not done because it is not
    * necessary for this implementation (the parallel check accounts
    for this).
    */
    if(d == 0)
    return 0;

    /* Calculate the intermediate fractional point that the lines
    potentially
    * intersect.
    */
    int ua = (n_a << 14)/d;
    int ub = (n_b << 14)/d;

    /* The fractional point will be between 0 and 1 inclusive if the lines
    * intersect. If the fractional calculation is larger than 1 or
    smaller
    * than 0 the lines would need to be longer to intersect.
    */
    if(ua >=0 && ua <= (1<<14) && ub >= 0 && ub <= (1<<14))
    {
    hitp->x = line1->p1.x + ((ua * (line1->p2.x - line1->p1.x))>>14);
    hitp->y = line1->p1.y + ((ua * (line1->p2.y - line1->p1.y))>>14);
    return 1;
    }
    return 0;
    }


  • 10. Data: 2011-06-18 20:33:32
    Temat: Re: jak szacowac dokladnosc obliczen
    Od: Radoslaw Jocz <r...@p...onet.pl>


    >
    > Rozwiązujesz zagadnienie teoretyczne czy praktyczne?

    obecnie juz tylko praktycznie,
    przyklad w gwozdziem to bardzo trafne
    hehe

strony : [ 1 ] . 2 . 3


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: