eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingNowoczesne procesory - jak to z nimi jest?Re: Nowoczesne procesory - jak to z nimi jest?
  • Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.
    atman.pl!.POSTED!not-for-mail
    From: bartekltg <b...@g...com>
    Newsgroups: pl.comp.programming
    Subject: Re: Nowoczesne procesory - jak to z nimi jest?
    Date: Tue, 26 Mar 2013 23:01:23 +0100
    Organization: ATMAN - ATM S.A.
    Lines: 88
    Message-ID: <kit5rm$aig$1@node2.news.atman.pl>
    References: <5148d9db$0$26710$65785112@news.neostrada.pl>
    <4...@g...com>
    <1...@g...com>
    <kihto6$q3f$1@mx1.internetia.pl>
    <c...@g...com>
    <3...@g...com>
    <a...@g...com>
    <e...@g...com>
    <7...@g...com>
    <kipkjv$uf$1@speranza.aioe.org>
    <5...@g...com>
    <kipm0j$5bi$1@speranza.aioe.org>
    <5...@g...com>
    <kipoe5$cfe$1@speranza.aioe.org>
    <4...@g...com>
    <kiq26c$aqp$1@speranza.aioe.org>
    <b...@g...com>
    <515168b3$0$26703$65785112@news.neostrada.pl>
    <a...@g...com>
    NNTP-Posting-Host: 144-mi3-6.acn.waw.pl
    Mime-Version: 1.0
    Content-Type: text/plain; charset=UTF-8; format=flowed
    Content-Transfer-Encoding: 8bit
    X-Trace: node2.news.atman.pl 1364335286 10832 85.222.69.144 (26 Mar 2013 22:01:26
    GMT)
    X-Complaints-To: u...@a...pl
    NNTP-Posting-Date: Tue, 26 Mar 2013 22:01:26 +0000 (UTC)
    User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/20130307
    Thunderbird/17.0.4
    In-Reply-To: <a...@g...com>
    Xref: news-archive.icm.edu.pl pl.comp.programming:202305
    [ ukryj nagłówki ]

    W dniu 2013-03-26 12:25, M.M. pisze:
    > Niczego to nie zmienia. Logarytm tez mozna policzyc na mantysie o 2 bity
    > dluzszej (np. na precyzji 66bitow) i wynik bylby dokladny.


    :)

    Szkolny przykład.
    x=1/4;
    x <- 4*x*(1-x).

    Powinien wyjść cykl 1/4, 3/4, 1/4...


    for (int i=0;i<1000;i++)
    x = 4*x*(1-x);

    #include <cstdio>
    #include <cmath>
    #include <time.h>
    #include <limits>

    double bla(double x,const int n)
    {
    for (int i=0;i<n;i++)
    {
    x= 4*x*(1-x);
    }
    return x;
    }

    int main()
    {
    double a1 = 1.0/4.0;
    double a2 = a1+a1*std::numeric_limits<double>::epsilon();
    double b1,b2;

    for (int n=0; n<=70;n+=10)
    {
    b1= bla(a1,n); b2= bla(a2,n);
    printf("%d %lf %lf %lg\n", n, b1, b2, (b1-b2) );
    }
    return 0;
    }


    0 0.250000 0.250000 -5.55112e-017
    10 0.750000 0.750000 1.13687e-013
    20 0.750000 0.750000 1.16415e-010
    30 0.750000 0.750000 1.19209e-007
    40 0.750000 0.749878 0.00012208
    50 0.750000 0.616384 0.133616
    60 0.750000 0.613975 0.136025
    70 0.750000 0.995892 -0.245892

    Ani dwa, ani nawet 2000 bitów nic nie pomoże.
    Najmniejsza odchyłka i trajektorie geometrycznie
    się rozbiegają.

    Dla lepszego związku z tematem dodam, że dwa bity więcej
    nie spowodują, że zawsze dostaniesz dobry wynik. Dwa
    bity więcej oznaczają, że najczęściej dostaniesz poprawny
    wynik.

    Któryś logarytm którejś liczby dobrze zapisanej
    w systemie dwójkowym zapisze się źle mimo tych
    dodatkowych bitów i katastrofa gotowa.


    Zmieńmy naszą iterację na
    x= exp(log(4.0)+log(x)+log(1-x));

    0 0.250000 0.250000 -5.55112e-017
    10 0.750000 0.750000 8.52651e-014
    20 0.750000 0.750000 8.73115e-011
    30 0.750000 0.750000 8.9407e-008
    40 0.749969 0.749878 9.15621e-005
    50 0.718126 0.616384 0.101742
    60 0.950183 0.613966 0.336216
    70 0.840387 0.994657 -0.15427

    Odpłynęliśmy równie daleko, mimo, że zarówno argument
    naszego wyrażenia, jak i wynik były zapisywalne dokładnie.

    pzdr
    bartekltg


Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

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: