Istotność obliczeń o stałej i dowolnej precyzji


10

Widzę bardzo niewiele bibliotek / pakietów obliczeniowych o zmiennoprzecinkowym charakterze. Biorąc pod uwagę różne nieścisłości reprezentacji zmiennoprzecinkowej, powstaje pytanie, dlaczego nie ma przynajmniej niektórych pól, w których ta zwiększona dokładność mogłaby być warta zawiłości pracy z punktem stałym.

Czy są jakieś NAJWAŻNIEJSZE trudności w korzystaniu z, powiedzmy, solwera stałej wartości własnej? Jak powolne / szybkie, niedokładne / dokładne byłyby?

Powiązane: to i to


Milind R, dziękuję za twoje pytanie. Myślę, że twoje pytanie jest interesujące, ale prawdopodobnie nieodpowiednie dla witryny. Zachęcam do zapoznania się z często zadawanymi pytaniami na stronie. Kiedy patrzę na twoje pytanie, mam wrażenie, że jest to początek rantu, chociaż myślę, że obecne są elementy pytania odpowiedniego dla strony. Warto zapytać, czy istnieje wiele zastosowań arytmetyki liczb całkowitych i arytmetyki stałoprzecinkowej w nauce obliczeniowej, i poprosić o porównanie tych arytmetyki z liczbą zmiennoprzecinkową. Zachęcam do edytowania twojego postu.
Geoff Oxberry

Tak, zrodził się z rantu, ale sformułowałem to jako poszukiwanie uzasadnienia dla status quo. Moje pytanie, jak można się domyślać, dotyczy tego, dlaczego nie możemy dokonać większego przesunięcia w kierunku matematyki liczb całkowitych i stałoprzecinkowych w intensywnych liczbach. Czy możesz to edytować w moim imieniu? Naprawdę próbowałem, ale nie wiem, jak moje pytanie jest niewłaściwe.
Milind R

5
Myślę, że istnieje obiektywna odpowiedź techniczna na to pytanie: jeśli uruchomisz prawie jakiekolwiek obliczenia naukowe (powiedzmy, rozwiązanie liniowe), liczba bitów wymagana do dokładnego przechowywania rośnie wykładniczo w czasie. Dlatego do pożytecznej pracy potrzebne jest silne poparcie dla niedokładności.
Geoffrey Irving

@MilindR: Społeczność geometrii obliczeniowej była zainteresowana obliczeniami w liczbach rzeczywistych, które są jednocześnie bardzo wydajne i dokładne. I przypuszczam , że wszystkie istotne zagadnienia dotyczące ciebie można zaobserwować w tej dziedzinie badań. Przykładem, którego możesz szukać, jest biblioteka LEDA.
shuhalo

@GeoffreyIrving Co z zerami w trójkątnych matrycach? Czy nie mogą być przechowywane jako nic innego niż niedokładna zmiennoprzecinkowa podatna na błędy?
Milind R

Odpowiedzi:


5

Zastosowanie arytmetyki punktu stałego może być odpowiednie w pewnych okolicznościach. Zasadniczo w przypadku obliczeń naukowych (przynajmniej w tym sensie, że większość ludzi o tym myśli) nie jest to właściwe ze względu na potrzebę wyrażenia napotkanych dużych zakresów dynamicznych. Jako przykład wymieniasz problemy z wartością własną, ale bardzo często w nauce interesują się najmniejsze wartości własne macierzy (np. Obliczenie stanu podstawowego układu kwantowego). Dokładność małych wartości własnych na ogół ulegnie pogorszeniu w porównaniu z dużymi wartościami własnymi, jeśli użyjesz stałego punktu. Jeśli macierz zawiera wpisy, które różnią się dużymi stosunkami, małe wartości własne mogą być całkowicie niewyrażalne w precyzji roboczej. Jest to problem z reprezentacją liczb; argumenty te zachowują się niezależnie od sposobu wykonywania obliczeń pośrednich. Możesz ewentualnie opracować skalowanie, aby zastosować je do obliczonych wyników, ale teraz właśnie wymyśliłeś zmiennoprzecinkowe. Łatwo jest konstruować macierze, których elementy są dobrze zachowane, ale których wartości własne są wyjątkowo źle zachowane (jakMacierze Wilkinsona , a nawet macierze z całkowicie liczbami całkowitymi ). Przykłady te nie są tak patologiczne, jak mogą się wydawać, a wiele problemów na najwyższym poziomie nauki wiąże się z bardzo źle zachowanymi matrycami, więc użycie stałego punktu w tym kontekście jest złym pomysłem (TM).

Możesz argumentować, że znasz wielkość wyników i nie chcesz marnować bitów na wykładnik, więc porozmawiajmy o półproduktach. Użycie punktu stałego ogólnie zaostrzy skutki katastrofalnych odwołań i zaokrągleń, chyba że naprawdę ciężko pracujesz z większą precyzją. Kara za wydajność byłaby ogromna i przypuszczam, że użycie reprezentacji zmiennoprzecinkowej o tej samej szerokości bitu mantysy byłoby szybsze i dokładniejsze.

Jednym z obszarów, w którym punkt stały może świecić, są określone obszary obliczeń geometrycznych. Zwłaszcza jeśli potrzebujesz dokładnej arytmetyki lub znasz wcześniej zakres dynamiczny wszystkich liczb, stały punkt pozwala wykorzystać wszystkie bity w twojej reprezentacji. Załóżmy na przykład, że chcesz obliczyć przecięcie dwóch linii, a punkty końcowe tych dwóch linii są znormalizowane, aby usiąść w kwadracie jednostkowym. W takim przypadku punkt przecięcia można przedstawić z większą dokładnością niż przy użyciu równoważnej liczby zmiennoprzecinkowej (co spowoduje marnowanie bitów na wykładniku). Teraz prawie na pewno jest tak, że liczby pośrednie wymagane w tym obliczeniu muszą być obliczone z większą precyzją lub przynajmniej wykonane bardzo ostrożnie (np. dzieląc iloczyn dwóch liczb przez inną liczbę, musisz bardzo uważać ). Pod tym względem punkt stały jest korzystniejszy bardziej z punktu widzenia reprezentacji niż z punktu widzenia obliczeń, i posunąłbym się do stwierdzenia, że ​​jest to ogólnie prawdą, gdy można ustalić wyraźne górne i dolne granice zakresu dynamicznego wyników algorytmu . Zdarza się to rzadko.

Kiedyś myślałem, że reprezentacje zmiennoprzecinkowe są surowe lub niedokładne (po co marnować bity na wykładnik ?!). Ale z czasem zdałem sobie sprawę, że to naprawdę jedna z najlepszych możliwych reprezentacji liczb rzeczywistych. Rzeczy w naturze pojawiają się na skalach dziennika, więc rzeczywiste dane kończą się na wielu wykładnikach. Również osiągnięcie najwyższej możliwej dokładności wymaga pracy na skalach logów, dzięki czemu śledzenie wykładnika jest bardziej naturalne. Jedynym innym konkurentem dla „naturalnej” reprezentacji jest symetryczny wskaźnik poziomu . Jednak dodawanie i odejmowanie w tej reprezentacji jest znacznie wolniejsze i brakuje w niej wsparcia sprzętowego IEEE 754. Ogromną uwagę poświęcono standardom zmiennoprzecinkowym, przez filar numerycznej algebry liniowej. Wydaje mi się, że wie, czym jest „właściwa” reprezentacja liczb.


4

Jako przykład tego, dlaczego arytmetyka dokładna / arytmetyka punktów stałych jest tak rzadko stosowana, rozważ to:

  • W metodzie elementów skończonych, podobnie jak w prawie każdej innej metodzie stosowanej w obliczeniach naukowych, dochodzimy do układów liniowych lub nieliniowych, które są jedynie przybliżeniami do świata rzeczywistego. Na przykład w MES rozwiązany układ liniowy jest jedynie przybliżeniem pierwotnego równania różniczkowego cząstkowego (które samo w sobie może być jedynie przybliżeniem świata rzeczywistego). Po co więc wkładać ogromny wysiłek w rozwiązanie czegoś, co jest jedynie przybliżeniem?

  • Większość używanych dziś algorytmów ma charakter iteracyjny: metoda Newtona, gradienty sprzężone itp. Te iteracje kończymy, ilekroć jesteśmy przekonani, że dokładność iteracyjna przybliżona do rozwiązania problemu jest wystarczająca. Innymi słowy, kończymy zanim będziemy mieli dokładne rozwiązanie. Jak poprzednio, po co używać dokładnej arytmetyki dla schematu iteracyjnego, skoro wiemy, że obliczamy tylko przybliżenia?


Przyznanie się do frustracji jest frustrujące, ale tak, twoja odpowiedź w gruncie rzeczy wymusza stosowanie dokładnych obliczeń na dużą skalę. Chyba już floatniedługo zobaczę się z tyłu .
Milind R

@MilindR: Nie jestem do końca pewien, do czego zmierzasz. Wydaje się, że masz młotek i jesteś sfrustrowany, że nikt nie ma gwoździa ani nie myśli, że młot jest przydatnym narzędziem. Ale to nie dlatego, że cię nie lubimy - od dawna zastanawialiśmy się nad tymi problemami i po prostu zdecydowaliśmy, że śrubokręt, który mamy, jest właściwym narzędziem. Nie ma w tym nic frustrującego (chyba że masz młotek), ponieważ jest to po prostu pragmatyczne podejście - po co stosować dokładną arytmetykę, gdy wykonujemy tylko przybliżenia?
Wolfgang Bangerth,

Jest to frustrujące, ponieważ całkowicie normalny problem może być tak bardzo uwarunkowany, że jest faktycznie nierozpuszczalny. Także dlatego, że ideał o dowolnej precyzji wyglądał tak obiecująco, w porównaniu z niedokładną naturą zmiennoprzecinkową od momentu zapisania wartości do jej wygenerowania.
Milind R

Problem polega na tym, że błędy zaokrąglania są niezwykle trudne do analizy. Zrozumiałem to w dniu, w którym zacząłem uczyć się analizy numerycznej i numerycznej algebry liniowej. Tak więc system, który całkowicie omija ten problem, czyniąc warunkowanie nieistotnym, powinien podbić świat burzą, prawda? było myślenie. Oczywiście rozumiem ograniczenia, ale wydawały się bardziej drażniące niż złodzieje. Coś w rodzaju zwiększonej trudności w zmniejszaniu liczby tranzystorów w procesorach. Tak, trudno to przeanalizować, ale Intel nadal to robi.
Milind R

2
Jeśli problem jest tak źle uwarunkowany, że trudno go rozwiązać, wówczas jego rozwiązanie nie jest odporne na zakłócenia. Jest to problem związany z pierwotnym problemem, a nie reprezentacją zmiennoprzecinkową. Tak, może uda ci się rozwiązać problem za pomocą dokładnej reprezentacji. Ale rozwiązanie nie jest stabilne i prawdopodobnie nie będzie miało nic wspólnego z tym, czego naprawdę szukasz. Szczekasz na niewłaściwe drzewo, jeśli uważasz, że problemem jest reprezentacja liczb.
Wolfgang Bangerth,

3

Jeśli spojrzysz na tę bibliotekę pod kątem poprawnego zaokrąglania: CRlibm , zobaczysz w dokumentacji, że ogólnie algorytmy muszą być udowodnione jako dokładne (z uzasadnionymi dowodami). Dlaczego? Stabilność i szybkość zbieżności wyniku funkcji nie ma odpowiedzi „jeden rozmiar dla wszystkich”. Krótko mówiąc, nie ma „darmowego lunchu” - musisz pracować, aby udowodnić swoje uzasadnienie. Wynika to z zachowania modelowanych funkcji, a nie z leżącego u ich podstaw sprzętu (niezależnie od tego, czy używasz jednostek całkowitych czy zmiennoprzecinkowych, chociaż tak, oba mają „gotchas”, takie jak przepełnienie / niedopełnienie, liczby normalne itp.) Nawet jeśli wynik szukasz zbieżności do liczby całkowitej, algorytm używany do znalezienia wyniku niekoniecznie jest bardzo stabilny.

Eigen to biblioteka C ++, która ma wiele algorytmów rozwiązywania macierzy, z których każda ma inne właściwości. Ta strona zawiera tabelę omawiającą kompromisy między szybkością a dokładnością dla różnych algorytmów używanych do rozwiązywania macierzy. Podejrzewam, że biblioteka Eigen może robić, co chcesz. :-)


Dzięki .. Bardzo pouczający i fajny link. Ale czy użycie punktu stałego wraz z ograniczonym zakresem zaokrąglania nie daje dokładniejszych wyników? Ponieważ sama reprezentacja jest dokładnie na początku, w przeciwieństwie do zmiennoprzecinkowego?
Milind R

1
Proponuję zaatakować problem z innego punktu widzenia. We wstępie do logiki dowiesz się, że rozwiązanie problemu składa się z trzech części: definicji, rozumowania oraz wniosków / wyników. Prawdopodobnie jesteś (jak większość z nas) bardzo przyzwyczajony do pracy nad etapem rozwiązywania problemów - „definicje” - zazwyczaj możesz „zdefiniować” swój problem; jeśli jednak staniesz się sfrustrowany, od czasu do czasu napotkasz trudniejszy typ problemu, który wymaga więcej pracy w części „rozumowania”.
mda

Tylko niejasno cię rozumiem ... Nie widzę, gdzie mogę „zdefiniować” ten problem, uzasadnienie jest niezbędne.
Milind R

Kilka lat później właściwie cię rozumiem :-)
Milind R

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.