Skocz do zawartości

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

zizou666

Różnica double i long double

Polecane posty

Ostatnio pisząc pewien program liczący przybliżone wartości pochodnych zauważyłem w Visual Studio dziwną rzecz. Otóż liczyłem pochodne z wzorów różnicowych dla funkcji cos(x) w 3 różnych punktach i porównywałem wyniki. Miałem to zadanie zrealizować dla typów float, double i long double żeby zobaczyć różnicę. Co mnie zdziwiło to fakt, że jeśli chodzi o precyzję w Visual Studio 2010 Professional między typem doube i long double nie ma żadnej różnicy. Wyliczałem przybliżone wartości pochodnych aż do momentu, kiedy odległość h we wzorach różnicowych (mniejsza o to o co chodzi teraz) była traktowana jako różna od 0 cały czas zmniejszając wartość h. Co dziwne odpaliłem program w DEV-C++, z którego kiedyś korzystałem i tam long double jest już bardziej precyzyjny. Wie ktoś może dlaczego tak jest? Przyznam się, że troszkę się zawiodłem na Visualu, który do tej pory sprawował sie doskonale.

Link do komentarza
Udostępnij na innych stronach

Rzecz w tym, że typy podstawowe według standardu nie mają określonych rozmiarów. Także typ int dla 32 bitowych systemów ma 32 bity, a dla x64 64 bity. O ile wiem z typami zmiennoprzecinkowymi sprawa ma się identycznie, z tymże są one objęte standardem http://en.wikipedia.org/wiki/IEEE_754-2008. Także taki float to sobie może być przykładowo 128 bitowy i w zasadzie wszystko jest zgodne ze standardami.

Twór zwany long double to takie nie wiadomo co. Jeżeli half to 16 bitów, float 32, a double 64, to long double powinien być 128 bitowy. Z tym jest jednak problem, bo nawet dzisiejsze procesory średnio wspierają operacje na czymś takim. Co oznacza, że wszystkie operacje muszą być robione programowo. Czyli wolno.

Część kompilatorów long double robi 10 bitowy. Nie wiem jak ze wsparciem sprzętowym, ale podejrzewam, że kiepsko.

64 bitowy double ma wsparcie ze strony instrukcji SSE. Co oznacza szybko.

Także z tym zawodem to się trochę wstrzymaj. Przy projektowaniu kompilatora MS ktoś uznał, że prędkość jest cenniejsza, niż wątpliwy zysk dokładności. Te dwa bity to śmieszna różnica i dla kogoś kto potrzebuje faktycznie dużej precyzji jest bez znaczenia.

Link do komentarza
Udostępnij na innych stronach

No tak masz racje. A z tym zawodem to mi sie tak powiedziało, bo mam teraz taki przedmiot durny na studiach (Metody Obliczeniowe) gdzie tego typu rzeczy są bardzo ważne, a wszystko na niego pisałem w VS do tej pory. Ale oczywiście rozumiem, że przy pisaniu bardziej normalnych programów nie stwarza to żadnego programu. I tak wogóle dzięki za wszystkie informacje ;) Temat do zamknięcia.

Link do komentarza
Udostępnij na innych stronach



  • Kto przegląda   0 użytkowników

    • Brak zalogowanych użytkowników przeglądających tę stronę.
×
×
  • Utwórz nowe...