Використання арифметики з фіксованою точкою може бути доцільним за певних обставин. Взагалі для наукових обчислень (принаймні в тому сенсі, що про це думає більшість людей) це не підходить через необхідність вираження великих динамічних діапазонів. В якості прикладу ви згадуєте проблеми власного значення, але дуже часто в науці цікавляться найменші власні значення матриці (скажімо, для обчислення основного стану квантової системи). Точність малих власних значень, як правило, буде досить погіршена відносно великих власних значень, якщо використовувати фіксовану точку. Якщо ваша матриця містить записи, які відрізняються великими співвідношеннями, малі власні значення можуть бути абсолютно невиразними в робочій точності. Це проблема із поданням чисел; ці аргументи справедливі незалежно від того, як ви робите проміжні обчислення. Можливо, ви можете розробити масштабування, щоб застосувати до обчислених результатів, але тепер ви просто винайшли плаваючу крапку. Легко побудувати матриці, елементи яких добре поводяться, але чиї власні значення надзвичайно погано поводяться (якМатриці Вілкінсона або навіть матриці з цілими записами ). Ці приклади не такі патологічні, як можуть здатися, і багато проблем на передовій науці стосуються дуже погано поведених матриць, тому використання фіксованої точки в цьому контексті є поганою ідеєю (TM).
Ви можете стверджувати, що ви знаєте масштаби результатів і хочете не витрачати шматочки на показник, тому поговоримо про проміжні продукти. Використання фіксованої точки, як правило, посилить наслідки катастрофічних скасування та заокруглення, якщо ви дійсно не зазнаєте великих зусиль, щоб працювати з більшою точністю. Штраф за продуктивність був би величезним, і я б припустив, що використання зображення з плаваючою комою з однаковою шириною біти мантіси буде швидше і точніше.
Одна область, де нерухома точка може світити, - це певні області геометричних обчислень. Особливо, якщо вам потрібна точна арифметика або заздалегідь знаєте динамічний діапазон усіх чисел, фіксована точка дозволяє скористатися всіма бітами у вашому поданні. Наприклад, припустимо, що ви хотіли обчислити перетин двох ліній, і якимось чином кінцеві точки двох ліній нормалізуються для розміщення на одиничній площі. У цьому випадку точка перетину може бути представлена більшою кількістю бітів точності, ніж використання еквівалентного числа з плаваючою точкою (що буде витрачати біти на експонент). Зараз майже напевно випадок, що проміжні числа, необхідні в цьому розрахунку, потрібно обчислити з більшою точністю або принаймні зробити дуже обережно (як, поділяючи добуток двох чисел на інше число, потрібно бути дуже обережним ). У цьому відношенні фіксована точка є вигіднішою з точки зору представлення, а не з обчислювальної точки зору, і я б пішов так далеко, щоб сказати, що це, як правило, вірно, коли ви можете встановити певні верхні та нижні межі на динамічному діапазоні виходів ваших алгоритмів. . Це трапляється рідко.
Раніше я думав, що подання з плаваючою точкою є грубим або неточним (навіщо витрачати шматочки на показник ?!). Але з часом я зрозумів, що це дійсно одне з найкращих можливих уявлень для реальних чисел. Речі в природі відображаються в масштабах журналу, тому реальні дані закінчуються для широкого кола експонатів. Також для досягнення максимально можливої відносної точності потрібно працювати над масштабами журналу, роблячи відстеження показника більш природним. Єдиний інший претендент на "природне" представлення - це симетричний індекс рівня . Однак додавання і віднімання набагато повільніше в цьому представленні, і йому не вистачає апаратної підтримки IEEE 754. Величезна думка була вкладена в стандарти плаваючої точки, стовпом числової лінійної алгебри. Думаю, він знає, що таке «правильне» представлення чисел.