2016-11-24 11 views
2

Я разрабатываю код, который может получать его данные из HW в плавающей или фиксированной точке. В настоящее время мы получаем это как с плавающей запятой.Преимущества алгоритма фиксированной точки Холески

Низкоуровневые API-интерфейсы находятся в фиксированной точке. Поэтому мы должны передавать данные обратно в качестве фиксированной точки. Алгоритм, который мы используем, - Холецкий. Мне интересно, почему мы должны использовать плавающие точки для Cholesky, а не просто получать данные как фиксированные. Есть ли какие-либо преимущества в этом?

Я бы подумал, что использование с плавающей запятой вызвало бы большую ошибку округления.

+0

Из-за любопытства, почему вы считаете, что с плавающей запятой вызывает больше ошибок? –

+0

@SimonByrne Я думал, что плавающая точка будет подвержена ошибкам округления. В фиксированной точке мы знаем ошибку округления и поэтому можем компенсировать. – user1876942

ответ

3

Основные преимущества фиксированной точки над плавающей точкой являются

  1. Это гораздо проще реализовать в аппаратных средствах,

  2. Некоторые операции являются точными (т.е. не брать на себя ошибки округления), а именно: добавление , вычитание и умножение на целые числа, предполагая, что результат не переполняется.

  3. Если все ваши номера имеют одинаковую величину, вы можете получить несколько дополнительных бит точности в одной и той же ширине, не требуя хранения экспоненты: например. в 32-битных по сравнению с 24-битами в binary32 single precision.

В частности, пункт 3 вряд ли будет случай для всех номеров на протяжении всей стадии своего расчета, в частности, для операций линейной алгебры, таких как Холецкого множители.

С другой стороны, с плавающей точкой имеет много других преимуществ.

  1. Вы можете сохранить номера через более широкое разнообразие номеров по более широкому диапазону величин (например, ~ 10 -38 до 10 +38 для binary32)

  2. Вы не теряете точность при работе с меньшими числами: это особенно важно для умножения/деления, которые используются во всех вычислениях Холецкого.

  3. Недостаток и переполнение менее проблематичны: они имеют меньшую вероятность возникновения (из-за 1), но также обрабатываются более изящно, когда это происходит, посредством Inf и субнормальных значений против исключений или ошибочных результатов.

  4. Формат с плавающей запятой включает в себя несколько меньший формат фиксированной точки: i.binary32 включает все номера в формате 24-битной фиксированной точки, но имеет все вышеперечисленные преимущества.

1

Преимущество с плавающей запятой над неподвижной точкой - это диапазон чисел, который вы можете представлять. Я не знаком с алгоритмом Холески, но если он должен иметь дело с очень большими и очень маленькими числами внутри, то с плавающей точкой будут получены более точные результаты.

Если вы используете арифметику с фиксированной точкой, вам необходимо убедиться, что вход не может вызвать насыщение или переполнение внутри алгоритма и ограничить его определенным диапазоном. Кроме того, трудно определить этот диапазон, особенно если у вас более одного входа.

+0

Это может быть одна причина. Но разве мы не потеряем эту точность, когда вернемся к неподвижной точке? Мы должны написать ответ обратно в HW. – user1876942

+0

Я предполагаю, что ваш вход/выход имеет определенный формат с фиксированной запятой. Если вы также реализуете алгоритм в фиксированной точке, это может быть так, что выбранный формат с фиксированной точкой не имеет целочисленных битов (переполнение/насыщенность) или недостаточно дробных битов (потеря точности). Я не говорю о значениях ввода/вывода здесь, а промежуточные результаты внутри алгоритма. В плавающей точке эти проблемы не возникают. – maniacmic

 Смежные вопросы

  • Нет связанных вопросов^_^