Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > pl.comp.programming > #28752
| From | Borneq <borneq@antyspam.hidden.pl> |
|---|---|
| Newsgroups | pl.comp.programming |
| Subject | Re: Jak zacząć pracę z Fortranem? |
| Date | 2016-09-16 12:53 +0200 |
| Organization | ATMAN - ATM S.A. |
| Message-ID | <nrgiui$jmv$1@node1.news.atman.pl> (permalink) |
| References | (2 earlier) <almarsoft.2398171738796520771@news.v.pl> <nrdgvu$i32$1@node1.news.atman.pl> <almarsoft.3517884194599976147@news.v.pl> <abd6b4ac-54ea-4466-9a7c-323774a441d1@googlegroups.com> <nrf2ch$uil$1@node2.news.atman.pl> |
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.
Back to pl.comp.programming | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
Jak zacząć pracę z Fortranem? Borneq <borneq@antyspam.hidden.pl> - 2016-09-14 15:22 +0200
Re: Jak zacząć pracę z Fortranem? Borneq <borneq@antyspam.hidden.pl> - 2016-09-14 16:24 +0200
Re: Jak zacząć pracę z Fortranem? bartekltg <bartekltg@gmail.com> - 2016-09-14 17:18 +0200
Re: Jak zacząć pracę z Fortranem? Borneq <borneq@antyspam.hidden.pl> - 2016-09-14 18:05 +0200
Re: Jak zacząć pracę z Fortranem? Borneq <borneq@antyspam.hidden.pl> - 2016-09-14 20:58 +0200
Re: Jak zacząć pracę z Fortranem? Borneq <borneq@antyspam.hidden.pl> - 2016-09-15 06:28 +0200
Re: Jak zacząć pracę z Fortranem? slawek <fake@fakeemail.com> - 2016-09-15 08:01 +0200
Re: Jak zacząć pracę z Fortranem? Borneq <borneq@antyspam.hidden.pl> - 2016-09-15 09:01 +0200
Re: Jak zacząć pracę z Fortranem? slawek <fake@fakeemail.com> - 2016-09-15 11:24 +0200
Re: Jak zacząć pracę z Fortranem? bartekltg <bartekltg@gmail.com> - 2016-09-15 11:34 +0200
Re: Jak zacząć pracę z Fortranem? slawek <fake@fakeemail.com> - 2016-09-15 14:29 +0200
Re: Jak zacząć pracę z Fortranem? bartekltg <bartekltg@gmail.com> - 2016-09-15 09:03 -0700
Re: Jak zacząć pracę z Fortranem? slawek <fake@fakeemail.com> - 2016-09-15 18:46 +0200
Re: Jak zacząć pracę z Fortranem? bartekltg <bartekltg@gmail.com> - 2016-09-15 10:10 -0700
Re: Jak zacząć pracę z Fortranem? slawek <fake@fakeemail.com> - 2016-09-15 22:10 +0200
Re: Jak zacząć pracę z Fortranem? slawek <fake@fakeemail.com> - 2016-09-15 19:08 +0200
Re: Jak zacząć pracę z Fortranem? Borneq <borneq@antyspam.hidden.pl> - 2016-09-15 11:45 +0200
Re: Jak zacząć pracę z Fortranem? slawek <fake@fakeemail.com> - 2016-09-15 14:17 +0200
Re: Jak zacząć pracę z Fortranem? joahim <w.birula@gmail.com> - 2016-09-15 13:28 -0700
Re: Jak zacząć pracę z Fortranem? Sebastian Biały <heby@poczta.onet.pl> - 2016-09-15 23:04 +0200
Re: Jak zacząć pracę z Fortranem? Adam M <amorawski@magna-power.com> - 2016-09-15 14:55 -0700
Re: Jak zacząć pracę z Fortranem? slawek <fake@fakeemail.com> - 2016-09-16 01:24 +0200
Re: Jak zacząć pracę z Fortranem? Borneq <borneq@antyspam.hidden.pl> - 2016-09-16 12:54 +0200
Re: Jak zacząć pracę z Fortranem? slawek <fake@fakeemail.com> - 2016-09-16 18:02 +0200
Re: Jak zacząć pracę z Fortranem? joahim <w.birula@gmail.com> - 2016-09-16 04:58 -0700
Re: Jak zacząć pracę z Fortranem? Borneq <borneq@antyspam.hidden.pl> - 2016-09-16 14:05 +0200
Re: Jak zacząć pracę z Fortranem? joahim <w.birula@gmail.com> - 2016-09-16 05:10 -0700
Re: Jak zacząć pracę z Fortranem? Borneq <borneq@antyspam.hidden.pl> - 2016-09-16 14:15 +0200
Re: Jak zacząć pracę z Fortranem? slawek <fake@fakeemail.com> - 2016-09-16 18:12 +0200
Re: Jak zacząć pracę z Fortranem? bartekltg <bartekltg@gmail.com> - 2016-09-16 17:38 +0200
Re: Jak zacząć pracę z Fortranem? slawek <fake@fakeemail.com> - 2016-09-16 18:32 +0200
Re: Jak zacząć pracę z Fortranem? slawek <fake@fakeemail.com> - 2016-09-16 18:09 +0200
Re: Jak zacząć pracę z Fortranem? Borneq <borneq@antyspam.hidden.pl> - 2016-09-16 12:53 +0200
Re: Jak zacząć pracę z Fortranem? bartekltg <bartekltg@gmail.com> - 2016-09-16 17:46 +0200
Re: Jak zacząć pracę z Fortranem? slawek <fake@fakeemail.com> - 2016-09-16 17:47 +0200
Re: Jak zacząć pracę z Fortranem? slawek <fake@fakeemail.com> - 2016-09-16 01:12 +0200
Re: Jak zacząć pracę z Fortranem? Sebastian Biały <heby@poczta.onet.pl> - 2016-09-15 19:15 +0200
Re: Jak zacząć pracę z Fortranem? slawek <fake@fakeemail.com> - 2016-09-15 22:27 +0200
csiph-web