eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingJak zacząć pracę z Fortranem?Re: Jak zacząć pracę z Fortranem?
  • Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.
    atman.pl!.POSTED!not-for-mail
    From: Borneq <b...@a...hidden.pl>
    Newsgroups: pl.comp.programming
    Subject: Re: Jak zacząć pracę z Fortranem?
    Date: Fri, 16 Sep 2016 12:53:17 +0200
    Organization: ATMAN - ATM S.A.
    Lines: 69
    Message-ID: <nrgiui$jmv$1@node1.news.atman.pl>
    References: <nrbivb$kfs$1@node2.news.atman.pl> <nrbivb$kfs$1@node2.news.atman.pl>
    <a...@n...v.pl>
    <nrdgvu$i32$1@node1.news.atman.pl>
    <a...@n...v.pl>
    <a...@g...com>
    <nrf2ch$uil$1@node2.news.atman.pl>
    NNTP-Posting-Host: 91.239.205.105
    Mime-Version: 1.0
    Content-Type: text/plain; charset=utf-8; format=flowed
    Content-Transfer-Encoding: 8bit
    X-Trace: node1.news.atman.pl 1474023186 20191 91.239.205.105 (16 Sep 2016 10:53:06
    GMT)
    X-Complaints-To: u...@a...pl
    NNTP-Posting-Date: Fri, 16 Sep 2016 10:53:06 +0000 (UTC)
    User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101
    Thunderbird/45.2.0
    In-Reply-To: <nrf2ch$uil$1@node2.news.atman.pl>
    Xref: news-archive.icm.edu.pl pl.comp.programming:209576
    [ ukryj nagłówki ]

    W dniu 15.09.2016 o 23:04, Sebastian Biały pisze:
    > Kiedyś faktycznie był szybki, ale ostatnio widzę że istnieje bardziej na
    > zasadzie inercji: jest bo jest w nim jakiś soft numeryczny i jakoś tak
    > wychodzi. Czy *obecnie* fortran jest szybszy niż identyczny algorytm w C
    > i co najwazniejsze: niby dlaczego?

    Obecne C/C++ jest szybkie do kresu możliwości.Sprawdzałem w VC 2015 w
    Release:
    Wyliczałem Hornerem :
    obliczanie przyblizenia Czebyszewa exp(x) wielomianem
    stopnia 7; wielomian obliczany schematem Hornera
    oraz szybsz? metod?

    double horner(double x)
    {
    double result = 0.0002047;
    result = result*x + 0.001439274;
    result = result*x + 0.008328596;
    result = result*x + 0.041635012;
    result = result*x + 0.166667986;
    result = result*x + 0.500006347;
    result = result*x + 0.999999901;
    result = result*x + 0.999999801;
    return result;
    }

    double hornerfast(double x)
    {
    return ((((((0.0002047*x + 0.001439274)*x + 0.008328596)*x
    + 0.041635012)*x + 0.166667986)*x + 0.500006347)*x + 0.999999901)*x +
    0.999999801;
    }

    oraz dla porównania metodą szybsza od Hornera:
    double fast(double x)
    {
    double y = x*0.297178123 + 0.155642921;
    double z = y*y;
    return (z + 0.732273642600117)*(y*((z + 2.4368618551)*(z + y -
    1.0184605924)
    + 5.2036422682) + 1.5688833150) - 0.5565483727;
    }


    Przed laty pisałem coś takiego w Pascalu
    i horner na Duronie 900 miał 190 taktów, hornerfast na Duronie 900 miał
    72 takty a fast
    na Duronie 900 miał 105 taktów, a 160 gdy "linie nie były polaczone ze sobą"
    Czyli zależność procedury od tego czy ją się napisze w jednej linii a
    poza tym nowa metoda fast gorsza od szybszego Hornera mimo że mniej mnożeń.
    Spowodowane to było małą optymalizacją.
    W C++ zupełnie co innego, pętla 20000000:
    horner 68.82 ms
    hornerfast 68.9 ms
    fast 68.19 ms
    Wszystkie tak samo, niestety szybsza metoda niż Hornera tu nie działała
    chyba stopień 7 to za mało, trzeba by z 12.
    Uwaga: Gdy wykonywałem pomiar czasu za pomocą std::chrono biorąc większą
    lub mniejsza pętlę było źle, bo im większa pętla tym mniej na jedną
    funkcję. Więc wziąłem nie największą pętlę i jeszcze ją wykonałem 100
    razy biorą NAJMNIEJSZY rezultat a nie średni. Bywało źle, bo za
    pierwszym razem wykonywało się zwykle najwolniej, potem z 5 razy
    szybciej ale jeszcze nie tak, potem już tak samo.

    WNIOSEK: C++ jest tak szybkie, że nie trzeba się już przejmować postacią
    procedury.
    ALE z drugiej strony stopień 7 wielomianu to za mało aby zadziałała
    skomplikowana metoda, która miała przyśpieszyć Hornera.

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: