Использование арифметики с фиксированной запятой может быть целесообразным при определенных обстоятельствах. Как правило, для научных вычислений (по крайней мере, в том смысле, в котором большинство людей думают об этом) это не подходит из-за необходимости выражать большие динамические диапазоны, которые встречаются. Вы упоминаете проблемы собственных значений в качестве примера, но очень часто в науке интересуются наименьшие собственные значения матрицы (скажем, при вычислении основного состояния квантовой системы). Точность малых собственных значений, как правило, будет значительно ухудшаться по сравнению с большими собственными значениями, если вы используете фиксированную точку. Если ваша матрица содержит записи, которые отличаются большими соотношениями, малые собственные значения могут быть совершенно невыразимы в рабочей точности. Это проблема с представлением чисел; эти аргументы сохраняются независимо от того, как вы выполняете промежуточные вычисления. Вы могли бы разработать масштабирование для применения к вычисленным результатам, но теперь вы только что изобрели число с плавающей запятой. Легко построить матрицы, элементы которых ведут себя хорошо, но собственные значения которых ведут себя крайне плохо (например,Матрицы Уилкинсона или даже матрицы с полностью целочисленными элементами ). Эти примеры не так патологичны, как могут показаться, и многие проблемы на переднем крае науки связаны с матрицами с очень плохим поведением, поэтому использование фиксированной точки в этом контексте является плохой идеей (TM).
Вы можете утверждать, что знаете величину результатов и хотите не тратить впустую биты на экспоненту, поэтому давайте поговорим о промежуточных продуктах. Использование фиксированной точки, как правило, усугубит последствия катастрофических отмен и округления, если вы действительно не приложите большие усилия, чтобы работать с более высокой точностью. Потеря производительности была бы огромной, и я бы предположил, что использование представления с плавающей запятой с той же шириной бита мантиссы будет быстрее и точнее.
Одна область, где может сиять фиксированная точка, находится в определенных областях геометрических вычислений. Особенно, если вам нужна точная арифметика или заранее известен динамический диапазон всех чисел, фиксированная точка позволяет вам использовать все биты в вашем представлении. Например, предположим, что вы хотите вычислить пересечение двух линий, и каким-то образом конечные точки двух линий нормализуются, чтобы сидеть в единичном квадрате. В этом случае точка пересечения может быть представлена с большей точностью, чем при использовании эквивалентного числа с плавающей запятой (что приведет к потере битов в показателе степени). Теперь, почти наверняка, промежуточные числа, требуемые в этом вычислении, должны быть вычислены с более высокой точностью или, по крайней мере, сделаны очень осторожно (как при делении произведения двух чисел на другое число, вы должны быть очень осторожны с этим ). В этом отношении фиксированная точка имеет больше преимуществ с точки зрения представления, чем с точки зрения вычислений, и я бы сказал, что в общем случае это верно, когда вы можете установить определенные верхние и нижние границы для динамического диапазона выходных данных вашего алгоритма. , Это происходит редко.
Раньше я думал, что представления с плавающей точкой были грубыми или неточными (зачем тратить биты на показатель степени ?!). Но со временем я понял, что это действительно одно из лучших представлений для реальных чисел. Вещи в природе проявляются в логарифмическом масштабе, поэтому реальные данные охватывают широкий диапазон показателей. Также для достижения максимально возможной относительной точности требуется работа с логарифмическими масштабами, что делает отслеживание показателя степени более естественным. Единственный другой претендент на «естественное» представление - это симметричный индекс уровня . Однако сложение и вычитание гораздо медленнее в этом представлении, и ему не хватает аппаратной поддержки IEEE 754. Огромное количество идей было вложено в стандарты с плавающей запятой.Столпом числовой линейной алгебры. Я думаю, он знает, что такое «правильное» представление чисел.