-
Data: 2013-03-26 23:01:23
Temat: Re: Nowoczesne procesory - jak to z nimi jest?
Od: bartekltg <b...@g...com> szukaj wiadomości tego autora
[ pokaż wszystkie 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
Następne wpisy z tego wątku
- 26.03.13 23:11 M.M.
- 26.03.13 23:33 Adam Klobukowski
- 26.03.13 23:40 M.M.
- 27.03.13 01:38 bartekltg
- 27.03.13 08:31 M.M.
- 27.03.13 08:42 Tomasz Kaczanowski
- 27.03.13 08:47 Tomasz Kaczanowski
- 27.03.13 08:54 AK
- 27.03.13 08:55 AK
- 27.03.13 09:42 M.M.
- 27.03.13 09:47 M.M.
- 27.03.13 10:10 Tomasz Kaczanowski
- 27.03.13 10:25 M.M.
- 27.03.13 10:28 Michoo
- 27.03.13 11:16 AK
Najnowsze wątki z tej grupy
- Popr. 14. Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- Arch. Prog. Nieuprzywilejowanych w pełnej wer. na nowej s. WWW energokod.pl
- 7. Raport Totaliztyczny: Sprawa Qt Group wer. 424
- TCL - problem z escape ostatniego \ w nawiasach {}
- Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- testy-wyd-sort - Podsumowanie
- Tworzenie Programów Nieuprzywilejowanych Opartych Na Wtyczkach
- Do czego nadaje się QDockWidget z bibl. Qt?
- Bibl. Qt jest sztucznie ograniczona - jest nieprzydatna do celów komercyjnych
- Co sciaga kretynow
- AEiC 2024 - Ada-Europe conference - Deadlines Approaching
- Jakie są dobre zasady programowania programów opartych na wtyczkach?
- sprawdzanie słów kluczowych dot. zła
- Re: W czym sie teraz pisze programy??
- Re: (PDF) Surgical Pathology of Non-neoplastic Gastrointestinal Diseases by Lizhi Zhang
Najnowsze wątki
- 2025-01-09 Zapierdalać
- 2025-01-09 Wróblewo => Specjalista ds. Analiz Finansowych <=
- 2025-01-09 Kraków => iOS Developer (Swift) <=
- 2025-01-09 Dell ubija / przemianowuje swoje flagowe linie laptopów
- 2025-01-08 Warszawa => Spedytor Międzynarodowy <=
- 2025-01-08 Katowice => Regionalny Kierownik Sprzedaży (OZE) <=
- 2025-01-08 Gdańsk => Specjalista ds. Sprzedaży <=
- 2025-01-08 Katowice => Key Account Manager (ERP) <=
- 2025-01-08 Warszawa => Programista Full Stack .Net <=
- 2025-01-08 Podłączenie DMA 8257 do 8085
- 2025-01-08 Warszawa => System Architect (background deweloperski w Java) <=
- 2025-01-08 Warszawa => Solution Architect (Java background) <=
- 2025-01-08 Wrocław => Application Security Engineer <=
- 2025-01-08 Warszawa => International Freight Forwarder <=
- 2025-01-08 Mińsk Mazowiecki => Area Sales Manager OZE <=