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.