2016-06-21 2 views
0

Итак, для операций с плавающей запятой, насколько я понимаю, являются производными математики школьного класса. Умножение и деление вы либо добавляете, либо вычитаете экспоненты после вычисления. При выполнении моей конструкции коды (на бумаге), я столкнулся несколько вопросов, которые я перечислил ниже:IEEE 754 Математические операции с плавающей запятой

Для добавления и/или вычитания ...

  • Как вы справляетесь случай, если оба базы и показатели различны?
  • Что делать, если разница в показателях больше, чем размер большого числа данных?

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

Итак ...

2^3 + 3^2 = 8 + 9 = 17

То же самое, что требуется здесь?

EDIT: Приносим извинения сообществу за путаницу, поскольку, как я думал, этот вопрос был весьма конкретным. Это использует полномочия 2, поскольку текущая платформа IA32. Я не знаю ни одной платформы, которая имеет плавающую точку в десятичной системе. В качестве примера я использовал десятичное число.

Первый вопрос был дан ответ Марка B:

К счастью, поплавки все сделано с силами 2, так что просто нормализовать показатель. например используя полномочия 10 научных обозначений.

Итак, второй вопрос (как указано выше) - это то, что вы делаете, когда для нормализации значения сумма, которую вы должны сдвинуть, превышает пространство в типе данных? Другими словами, если я скажу ... 32 бит точности, и мне нужно сдвинуть ... скажем 35 бит ... чтобы получить соответствие показателей, как вы справляетесь с этим условием? Как FPU справляется с этим?

+0

номера IEEE с плавающей точкой всегда Base 2. Тем не менее, вы определенно можете столкнуться с проблемами, если вы пытаетесь представить число больше (или меньше), чем может сохраняться тип данных. Это похоже на попытку поместить значение 256 в 8-битное целое число; это просто не подходит. –

+0

Я не собираюсь понижать этот вопрос, потому что я не уверен, но это может быть такая вещь, о которой упоминалось в http://stackoverflow.com/help/dont-ask ... можно обсудить все вопросы относительно того, как для обработки значений с плавающей запятой. –

+1

@Lotharyx [Nope] (https://en.wikipedia.org/wiki/IEEE_floating_point#IEEE_754-2008) также указаны десятичные форматы. – user2079303

ответ

1

К счастью, поплавки выполняются с полномочиями 2, поэтому просто нормализовать экспоненту. например используя полномочия от 10 научных нот:

3.1e5  0.031e7 
+ 2.96e7 -> + 2.96 e7 
--------  ------- 
       2.991e7 
0

Номера с плавающей точкой IEE 754 - это всего лишь реализация плавающих точек. Как обычно, wikipedia имеет хороший references.

Вы выбираете базу (обычно 2, но IEEE 754 также определяет основание 10), и реальное число затем представить в виде F = знак * мантиссы * базовая показателя, где мантисса, и показатель степени являются целыми числами и знак это либо i, либо -1. В частности, у вас есть:

Конечные числа, которые могут быть либо базовыми 2 (двоичными), либо базовыми 10 (десятичными). Каждое конечное число описывается тремя целыми числами: s = знак (ноль или один), c = значение (или «коэффициент»), q = показатель степени. Численное значение конечного числа:
(-1) s × c × bq
где b - основание (2 или 10), также называемое radix.Например, если база равна 10, знак равен 1 (указывает отрицательный), значение - 12345, а показатель - -3, тогда значение числа равно -11 × 12345 × 10-3 = -1 × 12345 × .001 = -12.345.

Две бесконечности: + ∞ и -∞.

Два вида NaN: тихое NaN (qNaN) и сигнализация NaN (sNaN). NaN может нести полезную нагрузку, предназначенную для диагностической информации, указывающей источник NaN. Знак NaN не имеет значения, но в некоторых случаях он может быть предсказуемым.

возможных конечных значений, которые могут быть представлены в формате, определяются базовой б, количество цифр в мантиссах (точность р), а параметр показателя Emax:

  • с должно быть целое число в диапазоне от нуля до bp-1 (например, если b = 10 и p = 7, то c от 0 до 9999999)

  • q должно быть целым числом, так что 1-emax ≤ q + p-1 ≤ emax (например, если p = 7 и emax = 96, то q составляет от -101 до 90).

Следовательно, (например, для параметров) наименьший ненулевой положительное число, которое может быть представлено на 1 × 10-101 а самый большой 9999999 × +1090 (9,999999 × 1096 г.), а полный диапазон номеров составляет -99,999999 × 1096-9999999 × 1096. Числа -b1-emax и b1-emax (здесь -1 × 10-95 и 1 × 10-95) являются наименьшими (по величине) нормальными числами; ненулевые числа между этими наименьшими числами называются субнормальными числами.

Нулевые значения - это конечные значения с значащим значением 0. Это знаковые знаки, знаковый бит указывает, равен ли ноль +0 (положительный ноль) или -0 (отрицательный ноль).

Пожалуйста, смотрите на указанной странице для (много) подробнее ...

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